单体应用架构
服务及DB单节点(all-in-one)方式部署
优点:
- 项目前期能够快速迭代
- 架构简单,借助IDE开发、调试即可
- 易于测试,通过单元测试或者浏览器完成
- 易于部署
缺点:
- 随着业务增加,会变得臃肿,业务耦合严重
- 新增业务困难,维护成本高,新人学习成本高
- 核心业务与边缘业务混合互相影响
垂直应用架构
按业务划分,拆成若干个单体
优点:
- 针对模块开发优化
- 水平扩展,负载均衡,容错率提高
- 系统间相互独立,业务迭代更加高效
缺点:
- 服务相互调用,ip地址或端口变化,需手动调整
- 集群负载均衡复杂
- 服务接口协议不统一
SOA架构
SOA (Service-Oriented Architecture),即面向服务的架构。把系统拆成独立部署的模块,模块之间相通过RPC等技术通信
由此衍生出一系列服务治理框架(如服务注册、服务调用、服务发现、服务路由),SOA关注的是服务重用及解决信息孤岛问题。SOA服务集中式管理,容易存在服务雪崩问题。
微服务架构
微服务是服务分布式管理,基于SOA将服务更加细化,原本10个服务可能拆分成了100个微服务。微服务关注的是解耦,降低业务之间的耦合度。服务规模扩大,意味着服务的构建、发布、运维的复杂度会成倍增加。微服务会更多地关注在DevOps的持续交付上,因为服务粒度细化之后使得开发运维变得更加重要,因此微服务与容器化技术的结合更加紧密。
优点:
- 专注业务功能点,代码易理解
- 快速迭代部署上线
- 可针对某些高吞吐服务进行硬件升级或者服务横向扩容,节约投入成本
缺点:
- 增加运维工作量,以前几个war包,现在要部署几十上百个
- 增加微服务间互相调用的通讯成本
- 引入分布式事务解决数据一致性问题