什么是分布式系统?

我们应该都知道微服务是将一个大程序,才分为很多小程序。它强调按照业务能力(边界),将应用拆分成一个个独立、小型、自治的服务。

而将这些小服务部署到服务器上,它就是分布式部署。因为这些服务不在同一个进程,甚至很多不在同一个机器上。

但是那它们分别解决了什么问题?同时又带来了什么问题?

  1. 先看微服务解决了什么问题:

    • 解耦业务,不用担心炸掉别人的业务。
    • 独立迭代和发版,不用等所有业务完成测试,只需要测试自己的,然后独立发布部署就好。
    • 技术栈自由,可以切换语言一个服务。
    • 精准弹性扩缩容,对访问量大的服务多部署一些。
  2. 微服务带来的问题:

    • 分布式事务
    • 服务治理,雪崩,注册中心,熔断,服务发现,网关等。
    • 排查问题困难,涉及到多个服务
    • 开发环境配置要求高
  3. 再来看分布式部署解决了什么问题:

    • 高可用(消除单点故障):一台挂了,另一台顶上,系统不宕机。
    • 高性能(突破物理天花板):单台机器CPU/内存有上限,分布式可以把流量分摊到多台
    • 异地容灾:把节点部署在不同机房甚至不同城市,应对地震、停电等极端灾害。
  4. 分布式部署带来的问题:

    • 网络不可靠,永远要处理部分失败
    • CAP定理的抉择:必须在一致性(C)、可用性(A)、分区容错(P)之间做痛苦权衡
    • 运维复杂度暴增:以前维护1台机器,现在要维护成百上千台,监控、日志、部署都成了大工程。