架构模型

单体架构

三级架构:前端(Web/手机端)+中间业务逻辑层+数据库层
Java Spring mvc或者Python Drango框架的应用
架构模型

优点: 比较容易部署、测试
缺点

  • 复杂性高 (模块非常多、模块的边界模糊、 依赖关系不清晰、 代码质量参差不齐、 混乱地堆砌)
  • 可靠性差 (某个应用Bug,例如死循环、内存溢出等, 可能会导致整个应用的崩溃)
  • 扩展能力受限 (无法根据业务模块的需要进行伸缩 CPU密集 IO密集)
  • 阻碍技术创新 (必须使用相同的开发语言和框架)

分布式应用

中级架构,分布式应用,中间层分布式+数据库分布式,是单体架构的并发扩展,将一个大的系统划分为多个业务模块,业务模块分别部署在不同的服务器上,各个业务模块之间通过接口进行数据交互

架构模型

特点

  • 降低了耦合度:把模块拆分,使用接口通信,降低模块之间的耦合度。

  • 责任清晰:把项目拆分成若干个子项目,不同的团队负责不同的子项目。

  • 扩展方便:增加功能时只需要再增加一个子项目,调用其他系统的接口就可以。

  • 部署方便:可以灵活的进行分布式部署。

缺点: 系统之间的交互要使用远程通信,接口开发增大工作量,但是利大于弊

微服务架构

微服务架构,主要是中间层分解,将系统拆分成很多小应用(微服务),微服务可以部署在不同的服务器上,也可以部署在相同的服务器不同的容器上。当应用的故障不会影响到其他应用,单应用的负载也不会影响到其他应用

代表框架有Spring cloud、Dubbo等

架构模型

特点

  • 易于开发和维护:一个微服务只会关注一个特定的业务功能,所以它业务清晰、代码量较少

  • 单个微服务启动较快:单个微服务代码量较少, 所以启动会比较快

  • 局部修改容易部署: 对某个微服务进行修改,只需要重新部署这个服务即可

  • 技术栈不受限: 微服务架构中,可以结合项目业务及团队的特点,合理地选择技术栈

  • 运维要求较高: 更多的服务意味着更多的运维投入

  • 分布式固有的复杂性:系统容错、网络延迟、分布式事务等都会带来巨大的挑战

  • 接口调整成本高: 微服务之间通过接口进行通信。如果修改某一个微服务的API,可能所有使用了该接口的微服务都需要做调整

  • 重复劳动:很多服务可能都会使用到相同的功能,而这个功能并没有达到分解为一个微服务的程度,这个时候,可能各个服务都会开发这一功能,从而导致代码重复

Serverless架构

架构模型

优点

  • 低运营成本
  • 简化设备运维
  • 提升可维护性
  • 更快的开发速度

缺点

  • 厂商平台绑定
  • 成功案例比较少,没有行业标准