单体架构

288 阅读3分钟

一、什么是单体架构

功能集中、代码和数据中心化、一个发布包、部署后运行在同一进程的应用程序,称之为单体架构应用,也叫单块架构应用。与单体架构对应的,是微服务架构。

前一篇文章说到三层架构,虽然系统分成3层,但最终运行,忽略负载均衡、水平扩展的情况下,仍然是同一台机器同一进程。

我估计,我们当前开发的信息系统,除了微服务架构,其他都是单体架构。SOA,由多个单体架构程序组成;微服务的每个服务,粒度往往更小。微服务架构中的服务,是指一个单体系统拆分出来的一个个模块,依附于容器进行独立运行,每个模块不算一个完整的系统,叫组件可能更合适一些。SOA架构,当然也提供许多服务,但它多个业务种类的服务,可能都是由一个子系统来提供的,比如登录服务,订单服务,都由一个所谓的专门提供对外接口的系统来完成。但微服务也算是SOA的一种,二者之间的分界线并不是很清晰的。假如SOA中,每个子系统只提供一种服务,那其实也就是微服务了。这是我的理解。

二、单体架构的优势

1、易于开发

2、易于测试

3、易于部署

4、易于水平伸缩
由于是一个程序,水平扩展无非就是新部署一个服务器节点而已。由于单体架构本身部署方便,因此水平伸缩比较容易。当然,前提条件是处理好负载均衡的策略。

三、单体架构面临的挑战

但现在,单体架构的优势已逐渐无法适应互联网时代的快速变化,面临越来越多的挑战。体现在:

1、维护成本增加
因为程序功能越来越多,代码量也越来越大,相应团队也变大,沟通成本、管理成本等也显著增加。开发过程中,调试,错误定位等时间变长,也不容易掌握全局功能,维护修改难度增加。

2、持续交付周期长
代码量增加,越来越复杂,编译、构建、部署时间变长,自动化集成、交付、部署的周期变长,与此同时,部署流水心运行过程中,开发人员能够提交代码的时间窗口变小。

3、新人培养周期长

4、技术选型成本高
单体架构系统倾向于采用单一技术栈,一经选定,后期再想调整或尝试,风险和工作量可能会很大

5、可扩展性差
单体架构程序,运行在同一进程;水平扩展,部署容易,但由于系统内部侧重点不同,不同模块间,数据缓存,计算量等差别较大,服务器必须按照最大需求量进行配置,成本较高;如果系统保存使用上下文,对负载均衡等策略配置要求也高。

6、构建全功能团队难
单体架构的开发模式,在分工时往往以技能为单位,比如数据库,服务端,前端,一个功能,需要跨工种跨团队沟通协调。系统越大,要求就越高。

四、总结

随着业务扩大,需求持续增加,单体架构很难满足业务快速变化的需要。一方面,代码的可维护性,扩展性,灵活性在降低,另一方面,系统的测试、构建、维护成本在增加,于是随着系统越来越庞大,最终需要进行改造和重构。

互联网时代,创新要求高,需求变化快,相对庞大和僵硬的单体架构,面临越来越多的挑战。