单体结构便于管理,但所有代码都在同一个项目当中,但是当产品规模较大的时候,单体结构的缺点也明显:
1、项目过于臃肿
2、资源无法隔离:整个单体系统的各个功能模块都依赖于同样的数据库、内存资源,一旦某个功能崩了,整个系统就会崩溃
3、无法灵活扩展:访问量大的时候,单个系统可以水平扩展,部署在多台机器上组成集群,但是非灵活扩展。比如一个模块有性能问题的时候就可以只针对这个做水平扩展。
针对这些问题,把单体系统拆分为【微服务】
微服务是一种架构思想,提倡将单一应用程序划分成一组小的服务,服务之间相互协调、相互配合,为用户提供价值。每个服务运行在独立的进程中,服务和服务之间采用轻量级的通信机制,通常基于HTTP的Restful API)。每个服务围绕具体业务进行。并独立部署到生产环境中。
具体优点:高内聚低耦合
1、独立部署,灵活扩展:传统的单体架构是以整个系统为单位进行部署,微服务以每一个独立组件为单位进行部署。Docker,为微服务提供了有效的容器。
2、资源的有效隔离:微服务设计的原则之一,每一个微服务都有其独立的数据源,如果微服务A要读取微服务B的数据库,只能调用微服务B暴露在外边的接口来完成,避免了服务之间争用数据库和缓存资源来带的问题
3、团队组织架构调整
单体结构是水平的组织架构,而微服务团队是垂直的组织架构。没个业务都含有前后端工程师,DBA和测试工程师。按照业务边界做细粒度的拆分和部署。
缺点:
1、把一个项目拆成多个独立工程,增加了开发和测试的复杂度
2、拆分服务太细,添加删除功能模块的时候需要修改的模块会多
3、需要保证不同服务之间数据的一致性,引入了分布式事务和异步补偿机制。
4、数据隔离带来的报表处理问题。