目录
一、引言
二、传统单体架构的缺点
三、微服务的概念
四、微服务与SOA的区别
4.1. 微服务架构
4.2. SOA架构
4.3. 区别对比
五、微服务特性
5.1. 微服务的核心特性
5.2. 微服务的优点
5.3. 微服务的缺点
一、引言
在了解微服务之前,我们先来看看微服务没有诞生之前我们采用的单体架构。单体架构通常一个war包或者jar包包含了所有的功能模块,因此它部署简单、维护方便,开发者可以轻松地定位并修复问题,无需在多个组件之间来回切换。
二、传统单体架构的缺点
复杂性高:单体架构的应用程序包含的模块非常多,模块之间的边界和依赖关系容易模糊,导致代码质量参差不齐,每次修改代码都可能引入新的错误。一个功能上的错误或者异常很可能影响到其他功能的使用。
技术债务:随着时间推移、需求变更和人员更替,技术债务逐渐积累,已有的系统设计或代码难以修改,因为其他模块可能会以意料之外的方式使用它。
部署频率低:虽然单体架构部署简单,但是每次功能的变更或缺陷的修复都需要重新部署整个应用,全量部署耗时长、影响范围大、风险高,导致部署频率低,出错概率高。
扩展能力受限:单体应用只能作为一个整体进行扩展,无法根据业务模块的需要进行伸缩,导致在硬件和资源分配上存在困难。
阻碍技术创新:单体应用通常使用统一的技术平台和方案,想要引入新的框架或技术平台非常困难。
三、微服务的概念
微服务是一种软件架构风格,它是以专注于单一职责的很多小型项目为基础,组合出复杂的大型应用。微服务是一种云原生架构方法,在单个应用中包含众多松散耦合且可单独部署的小型组件或服务。 这些服务通常可以拥有自己的技术栈,包括数据库和数据管理模型;通过一个REST API、事件流和消息代理组合彼此通信;以及按照业务能力进行组织。
四、微服务与SOA的区别
两者主要区别在于服务粒度、架构风格、技术选型、部署方式以及团队组织等方面。
4.1. 微服务架构
4.2. SOA架构
4.3. 区别对比
服务粒度
SOA(面向服务架构):服务粒度通常较大,一个服务可能包含多个业务功能模块。例如,一个企业级的SOA架构中,可能会有一个客户服务,涵盖客户信息管理、订单处理、客户投诉处理等多个相对复杂的业务功能。
微服务:强调服务的细粒度,每个服务只专注于单一的业务功能。如在微服务架构下,可能会有独立的客户信息服务、订单服务、投诉服务等,每个服务只负责自己特定的业务逻辑。
架构风格
SOA:通常采用中心化的架构风格,有一个企业服务总线(ESB)作为服务间通信的核心枢纽。ESB负责服务的注册、发现、路由和消息转换等功能,所有的服务都通过ESB进行交互,这使得架构相对复杂,ESB也可能成为性能瓶颈和单点故障点。
微服务:采用去中心化的架构风格,服务之间直接通信,通常使用轻量级的通信机制如HTTP/RESTful API或消息队列。每个服务都是独立的,可以独立部署、扩展和维护,不存在中心化的控制节点,降低了系统的复杂性和单点故障的风险。
技术选型
SOA:在技术选型上相对保守,通常要求服务之间使用统一的通信协议和数据格式,以确保通过ESB进行的交互能够顺利进行。这可能会限制技术的创新和选择,使得开发团队在选择技术栈时受到一定的约束。
微服务:鼓励技术多样性,每个微服务可以根据自身的业务需求和技术特点选择最适合的技术栈。例如,一个微服务可以使用Java开发,另一个微服务可以使用Python或Node.js开发。这种灵活性使得开发团队能够充分利用各种技术的优势,提高开发效率和系统质量。
部署方式
SOA:由于服务粒度较大,通常部署在相对集中的服务器环境中,部署和维护相对复杂。一次部署可能涉及多个服务的协同更新,需要进行仔细的规划和测试,以确保整个系统的稳定性。
微服务:每个微服务都可以独立部署,部署速度快,风险相对较小。可以根据业务需求和服务的变化频繁地进行部署,实现快速迭代和持续交付。同时,微服务可以部署在不同的服务器、容器或云平台上,提高了系统的可扩展性和灵活性。
团队组织
SOA:通常需要较大规模的团队进行开发和维护,因为服务的复杂性和中心化架构需要更多的协调和管理。
微服务:由于每个服务都是独立的,团队可以更加灵活地组织和管理。每个小团队负责一个服务的开发、测试和维护,提高了开发效率和系统的可维护性。
适用场景和优缺点
SOA:适用于需要高度集成和统一管理的企业级应用。优点包括服务的重用性和解决信息孤岛问题;缺点包括架构复杂、维护困难和可能的性能瓶颈。
微服务:适用于需要快速响应市场变化和高并发访问的互联网应用。优点包括高可扩展性、技术多样性和快速迭代;缺点包括系统复杂度高、运维难度大。
五、微服务特性
5.1. 微服务的核心特性
- 单一职责:微服务具有单一职责,每个服务都专注于完成特定的业务功能,这使得每个服务都可以独立开发和部署。
- 独立自治:微服务可以独立进行部署、升级和扩容,不需要依赖于其他服务。
- 去中心化:微服务架构采用去中心化的设计,服务之间通过对等的方式进行通信,每个服务都有独立的业务逻辑和处理能力。
- 语言无关性:不同的微服务可以使用不同的编程语言和技术栈进行开发,提高了开发的灵活性和效率。
- 容错性与可靠性:微服务之间的故障和资源操作相互隔离,一个服务的故障不会影响其他服务。
5.2. 微服务的优点
- 快速迭代:由于每个微服务可以独立部署和更新,可以更快地推出新功能和市场响应。
- 高可用性:每个微服务可以独立扩展和负载均衡,提高了系统的整体可用性和稳定性。
- 易于维护:每个微服务的代码量较少,易于管理和维护,提高了开发效率。
- 技术灵活性:不同的微服务可以使用不同的技术栈,使得团队可以选择最适合当前任务的技术,提高了开发效率。