单体架构的优缺点

单体架构的优缺点

优点:

  • 部署简单:只有一个包

  • 技术单一:同一个架构来说,基本上是一个一种技术,类似springboot + java

  • 用人成本低:因为只需要一种技术

缺点:

  • 代码结构混乱:业务复杂,导致代码量很大,管理会越来越困难。

  • 开发效率低:开发人员同时维护同一套代码,很难避免代码冲突。开发过程中会伴随解决冲突,严重影响开发效率。

  • 排查解决问题成本高:线上发现了bug,可能bu g很简单,但是由于只有一套代码,需要编译打包上线,成本很高。

  • 监控很难:很多功能点,杂在一个系统中。

微服务

  • 由很多服务组成,每个服务都可以独立部署,每个服务之间以一种轻量级的通讯方式进行交互,例如http。这些服务之间没有很强的技术关联,可以A用java,B用Go.
  • 设计原则:
    • 拆分足够的微。颗粒太大,没法发挥微服务的优势,颗粒太小,管理混乱。
    • 轻量级通信。rest,消息中间件
    • 领域驱动原则。比如客户是一个领域,表单是一个领域
    • 单一指责。服务应该尽可能不依赖其他服务,边界应该足够清晰,而且接口应该妥善设计,隐藏内部细节。
    • DevOps
    • 不限技术栈。比如mongo, pg
  • 如何设计:
    • 服务拆分
    • 服务注册。多个服务间的通信,需要一个服务注册机制。服务启动的时候,要将服务注册到注册中心;服务中心和微服务之间通过某种机制关联,例如心跳机制;不同服务之间可以进行发现,从服务注册中心,获取要调用的服务的信息。
    • 服务消费,调用其他服务,调用方相当于是服务消费者,被调用方是服务供应商
    • 统一入口,服务数量多起来之后,每一个消费者要记住所有服务的名称是比较困难的,所以需要一个统一的入口,我们只需要知道入口的名称,而不需要知道具体服务提供者的名称。
    • 配置的管理。配置文件里写上不同服务需要的配置,不同服务去做个性化配置。
    • 熔断机制:某个微服务出现异常时(请求反应慢或宕机),其整个流程还是可以友好的进行下去。即向调用方返回一个符合预期的、可处理的备选响应(FallBack),而不是长时间的等待或者抛出调用方无法处理的异常,这样就可以保证调用方的线程不会被长时间、无厘头滴占用,从而保护整个系统,避免崩溃。
    • 自动扩展:服务可以根据当前附在状况可以自动扩展。比如当前有10个实例,当负荷突然增大,比如请求数增大,可以自动扩展成20个。
  • 拆分的意义
    • 易于实现:服务更小,代码更少,更加利于理解,实现。
    • 易于维护:更少的代码,更容易维护
    • 易于部署:每个服务都是轻量级实现,jar包比较小
    • 易于更新:服务之间都是隔离的,所以每个服务都可以独立更新,不会影响其他服务。
  • 拆分的方法
    • 横向拆分。数据采集,数据存储,数据查询,数据展示
    • 纵向拆分。基础设施层,领域层,应用层,用户界面
    • 使用DDD。不同的领域

单体架构的优缺点
http://example.com/单体架构的优缺点/
作者
Panyurou
发布于
2022年8月17日
许可协议