软件架构的发展及研究现状

软件架构研究现状

软件架构的发展经历了单体架构、分布式架构、SOA架构、微服务架构四个阶段。

1.3.1 单体架构

Web应用程序发展的早期,大部分web工程师将所有的功能集成在一个项目工程中,所有功能打在一个war包中部署到服务器,通过部署应用集群和数据库集群来提高系统的性能。这种模式下,项目架构简单,前期开发成本低、周期短,开发效率高,模块之间交互采用本地方法调用、容易部署、容易测试。但缺点也很明显:全部功能集成在一个工程中,大于大型项目不易开发、扩展和维护。版本迭代速度逐渐变慢,修改一个地方就要将整个应用全部编译、部署、启动,开发及测试周期过长。可扩展性差,通过集群的方式来实现水平扩展,无法针对某业务按需伸缩。

1.3.2 分布式架构

针对单体架构的不足,未来适应大型项目的开发需求,许多公司将一个单体系统按业务垂直差分为若干系统,系统之间通过网络交互来完成用户的业务处理,每个系统可分布式部署,这种架构成为分布式架构。分布式架构为系统提供了负载均衡能力,降低了各模块之间的代码耦合度,提升了系统的灵活性。缺点是子系统之间存在数据冗余、功能冗余,耦合性高。按需伸缩粒度不够,对同一个子系统中的不同的业务无法实现。
软件架构的发展及研究现状_第1张图片

1.3.3 SOA架构

SOA是一种面向服务的架构,基于分布式架构,它将不同业务功能按服务进行拆分并通过这些服务之间定义良好的接口和协议联系起来。优点是将重复的功能抽取为服务,提供开发效率,提高系提供的可重用性、可维护性。可以针对不同服务的特点按需伸缩。缺点是系统与服务的界限模糊,导致抽取的服务粒度过大,系统与服务之间耦合性高。虽然使用了ESB,但是服务的接口协议不固定,种类繁多,不利于系统维护。
软件架构的发展及研究现状_第2张图片

1.3.4微服务架构

基于SOA架构的思想,为了满足移动互联网对大型项目及多客户端的需求,对服务层进行细粒度的拆分,所拆分的 每个服务只完成某个特定的业务功能,比如订单服务只实现订单相关的业务,用户服务实现用户管理相关的业务等等,服务的粒度很小,所以称为微服务架构。优点是服务拆分粒度更细,有利于资源重复利用,提高开发效率。可以更加精准的制定每个服务的优化方案,按需伸缩。适用于互联网时代,产品迭代周期更短。但缺点也很明显开发的复杂性增加,因为一个业务流程需要多个微服务通过网络交互来完成。微服务过多,服务治理成本高,不利于系统维护。所以不适合小项目的架构。

2014 年,由 Martin Fowler 与 James Lewis 共同提出微服务概念。微服务架构可以视为 SOA 的一种实现较早使用微服务的 Netflix 认为微服务是细粒度的 SOA。微服务架构如图 1-1 所示,微服务与 SOA 对比如表 1-2 所示。微服务对应用进行更细粒度拆分,各个服务之间通过 RESTful API 或 RPC(Remote Procedure Call)通信。
软件架构的发展及研究现状_第3张图片

2016 年,Pivotal 团队发布 Spring Cloud服务治理框架,该框架基于 Spring Boot[5]快速构建。Spring Boot 在 Spring 框架的基础上进行改良,遵循约定优于配置的原则简化 Spring 繁琐的配置。Spring 最大的贡献在于面向切面编程(AOP,Aspect Oriented Programming)和控制反转(IoC,Inversion of Control),目前,Spring 在后端开发中仍处于主导地址。Spring Cloud 包含了 Spring Boot 的优良特性,构建了包含服务发现与注册、服务熔断、负载均衡、网关路由及链路追踪等组件的整套解决方案。Spring Cloud 第一代基于 Spring Cloud Netflix,由于 Spring Cloud Netflix 进入维护状态,第二代基于阿里巴巴团队开源的 Spring Cloud Alibaba,目前,Spring Cloud Alibaba 已经成功孵化。Spring Cloud Alibaba 将阿里团队优秀的开源组件进行整合,包含 Nacos、Sentinel、RocketMQ 及 Spring Cloud Gateway 等组件,目前已经得到广泛的应用。

你可能感兴趣的:(项目,系统架构)