这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天
基本内容
架构的内涵是作为指导软件开发方向灯塔,软件项目的成功与否与软件架构有密不可分的关系,因为软件架构深刻的影响着软件的质量、开发成本、维护成本等各个方面。类比建筑的搭建过程,复杂的建筑需要大量的设计和验证,而一个简单的屋甚至都不需要设计稿,对软件来说也是如此,架构的产生源于需求的改变,当社会的需求变得更加复杂,出于效率、利润、满足更多需求的想法,就需要不同的架构来满足这些要求。所以学习架构的重点不是生搬硬套,而是针对项目的需求“就事论事”在满足先行阶段需求的情况下,保证对未来一定范围内扩展的支持。
单体架构(monolithic)
现实例子:自己一个人开的烧烤店,忙前忙后全是一个人来。 软件项目:如果能把实现一种功能的程序称为软件项目,那么输出Hello,World的程序就是一个单体架构的软件,所有的功能都在一个进程,并且只需要在一台机器上运行。 好处:简单,容易理解,但是前提是这个软件项目本身满足的需求就很单一。复杂的单体系统就是运维的灾难。 坏处:无法构建满足正常项要求的处理复杂需求的软件系统,运维时需要停止服务。
垂直应用架构
从单体架构演化而来,将单体架构提供的某一服务进行复制。 现实例子:自己的烧烤店,招了三个伙计,三个伙计啥活都干。 软件项目:三个程序在三台机器上提供“Hello, World”服务。 好处:和单体架构类似,同时避免了单体架构的运维需要停止服务的弊端,同样只能满足简单的需求 坏处:和单体架构没有本质上的区别所以无法提供需求复杂的服务,同时还引入了读数据冲突,服务同步等等分布式系统需要处理的复杂问题。
微服务架构
微服务架构是SOA(Service-Oriented Architecture)的进一步细化的实践,微服务将SOA的理念在实践中进一步细分,面向细分后的“需求”(领域模型),设计不同的组件服务,完成去中心化来防止单点故障。 现实例子:烧烤店进化为烧烤酒店,全流程分工明确,几乎变为流水线处理。 软件项目:现代软件项目基本都是在微服务架构上开发的。 好处:能够设计满足复杂需求的系统,系统具有高可用性和容灾能力,高可扩展性,可预见的大型软件的未来。 坏处:组件之间的协作问题,常见分布式系统的问题,例如数据的一致性,运维的复杂性,开发过程中,开发人员之间协作沟通引入的沟通问题。