从单体架构到微服务的演变之路
单体架构
1.描述:
- 一个包含了应用所有功能的应用程序,我们通常称之为 单体架构 。这是一种传统的架构风格,比如经典三层架构(UI,BLL,DAL)就是一个单体架构。
2.示例图:
3.单体架构的特点:
- 所有功能都集中在一个项目中。
- 所有的功能打成一个war包部署到服务器。
- 应用与数据库分开部署
- 通过集群来提高服务器性能
- 技术栈受到限制
war包是一个可以直接运行的web模块,通常用于网站,打成包部署到容器中
4.单体架构的优点
- 单体架构简单,前期开发成本低,周期短,小型项目首选
5.单体架构的缺点
- 全部功能集中在一个项目中,随着项目的变大,变的不易开发,扩展,维护
- 提高服务器性能只能扩展集群节点,成本太高
垂直架构
1.描述
- 访问量逐渐增大,单体架构单加集群节点带来服务器性能越来越小时,我们通常将应用拆成互不相干的几个应用,这就称之为 垂直架构 。
2.示例图
3.垂直架构的特点
- 以单体架构规模的项目为单位进行垂直划分项目,即将一个大项目拆分成一个一个单体结构项目。
- 项目与项目之间的存在数据冗余,耦合性较大,比如上图中三个项目都存在客户信息。
- 项目之间的接口多为数据同步功能,如:数据库之间的数据库,通过网络接口进行数据库同步。
4.垂直架构的优点
- 项目架构简单,前期开发成本低,周期短,小型项目的首选。
- 通过垂直拆分,原来的单体项目不至于无限扩大。
- 不同的项目可采用不同的技术。
5.垂直架构的缺点
- 复杂应用的开发维护成本变高,部署效率逐渐降低。因为随着业务功能的不断膨胀,代码全量编译和部署一次所需的时间非常长。
- 团队协作效率差,部分公共功能重复开发,代码重复率居高不下。
- 系统可靠性变差。垂直架构将所有的应用模块都部署到一个进程中,如果某个应用接口发生故障,例如内存泄漏,会导致整个节点宕机。
SOA架构
1.描述
- SOA是 Service-Oriented Architecture 英文的缩写,也就是 面向服务的架构 。
2.示例图
3.SOA架构的特点
- 基于SOA的架构思想将重复公用的功能抽取为组件,以服务的方式给各各系统提供服务。
- 各个项目(系统)与服务之间采用webservice、rpc等方式进行通信。
- ESB(企业服务总线)作为项目与服务之间通信的桥梁。
4.SOA架构的优点
- 将重复的功能抽取为服务,提高开发效率,提高系统的可重用性、可维护性。
- 可以针对不同服务的特点制定集群及优化方案。
- 采用ESB减少系统中的接口耦合。
5.SOA架构的缺点
- 系统与服务的界限模糊,不利于开发及维护。
- 虽然使用了ESB,但是服务的接口协议不固定,种类繁多,不利于系统维护。
- 抽取的服务的粒度过大,系统与服务之间耦合性高。
微服务架构
1.描述
- 微服务架构 风格的开发方法,是以开发一组小型服务的方式来开发一个独立的应用系统的。其中每个小型服务都运行在自己的进程中,并经常采用HTTP资源API轻量的机制来相互通信。
2.示例图
3.微服务架构的特点
- 将系统服务层完全独立出来,并将服务层抽取为一个一个的微服务。
- 微服务遵循单一原则(一个服务做一件事)。
- 微服务之间采用RESTful等轻量协议传输。
4.微服务架构的优点
- 服务拆分粒度更细,有利于资源重复利用,提高开发效率。
- 可以更加精准的制定每个服务的优化方案,提高系统可维护性。
- 微服务架构采用去中心化思想,服务之间采用RESTful等轻量协议通信,相比ESB更轻量。
- 适用于互联网时代,产品迭代周期更短。
- 单个微服务启动较快
- 技术栈不受限
5.微服务架构的缺点
- 微服务过多,服务治理成本高,不利于系统维护。
- 分布式系统开发的技术成本高(容错、分布式事务等),对团队挑战大。
总结:
- 随着互联网行业的发展,架构的进化是必然的,当然,微服务并不是终点,以后将会有更多的架构涌现出来,而目地都是为了更好的解决所面临的问题。