1.微服务介绍
微服务架构(Microservice Architecture)是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦,微服务架构是个很有趣的概念,它的主要作用是将功能分解到离散的各个服务当中,从而降低系统的耦合性,并提供更加灵活的服务支持。
它提倡将单一应用程序划分成一组松散耦合的细粒度小型服务,辅助轻量级的协议,互相协调、互相配合,为用户提供最终价值。
所以,微服务(或微服务架构)是一种云原生架构方法,其中单个应用程序由许多松散耦合且可独立部署的较小组件或服务组成。
概念:把一个大型的单个应用程序和服务拆分为数个甚至数十个的支持微服务,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服务等级协议。
本质:用一些功能比较明确、业务比较精练的服务去解决更大、更实际的问题。
而微服务的流行,Martin Fowler-马丁·福勒 (软件开发教父)功不可没。这老头是个奇人,特别擅长抽象归纳和制造概念。特别是微服务这种新生的名词,都有一个特点:
一解释就懂,一问就不知,一讨论就打架。
2.微服务演进史
面试管:单体架构、SOA架构和微服务架构有什么区别?
2.1 单体应用
也就是大家在早期所学习的SSM架构模式,所有的功能打包在一个 WAR包里,基本没有外部依赖(除了容器),部署在一个JEE容器(Tomcat,JBoss,WebLogic)里,包含了 DO/DAO,Service,UI等所有逻辑。
优点:
1、开发简单,集中式管理。
2、易于测试:单体应用一旦部署,所有的服务或特性就都可以使用了,简化了测试过程,无需额外测试服务间的依赖,测试均可在部署完成后开始。
3、易于部署与升级:相对于微服务架构中的每个服务独立部署,单体系统只需将单个目录下的服务程序统一部署和升级。
4、较低的维护成本:只需维护单个系统即可。运维主要包括配置、部署、监控与告警和日志收集四大方面。相对于单体系统,微服务架构中的每个服务都需要独立地配置、部署、监控和日志收集,成本呈指数级增长。
缺点:
1、效率低:开发都在同一个项目改代码,相互等待,冲突不断
2、维护难:代码功功能耦合在一起,新人不知道何从下手
3、不灵活:构建时间长,任何小修改都要重构整个项目,耗时
4、稳定性差:一个微小的问题,都可能导致整个应用挂掉
5、扩缩容能力受限:单体应用只能作为一个整体进行扩展,影响范围大,无法根据业务模块的需要进行单个模块的伸缩。
6、发布的影响范围较大:每次发布都是整个系统进行发布,发布会导致整个系统的重启,对于大型的综合系统挑战比较大,如果将各个模块拆分,哪个部分做了修改,只发布哪个部分所在的模块即可。
2.3 SOA面向服务架构
SOA,全称Service-Oriented Architecture(面向服务的架构),是一种设计复杂软件系统的架构风格。SOA的核心理念是将软件系统分解为一组互相协作的服务,这些服务具有明确的接口,能够通过网络进行通信和交互,从而实现业务流程的自动化
以下是SOA的一些关键特点:
-
松耦合:服务之间尽量减少依赖,使得一个服务的变化不会影响到其他服务。
-
可重用性:服务应该能够被多次重用,以减少开发时间和成本。
-
粗粒度:服务通常执行较大的任务,而不是细小的功能。
-
标准化接口:使用标准的通信协议和消息格式,如 SOAP、REST 等。
-
服务注册与发现:服务可以在服务注册中心进行注册,以便其他服务或客户端可以发现并调用它们。
2.3 微服务架构
微服务架构基于SOA架构演变过来的,在传统的WebService架构中有如下问题:
-
中心化服务注册与发现:在SOA中,服务的注册和发现往往依赖于中心化的服务总线(ESB,Enterprise Service Bus)或目录服务,这可能导致单点故障和性能瓶颈。微服务架构通过去中心化的方法,利用服务发现机制,允许服务实例动态注册和发现,提高了系统的弹性和可扩展性。
-
通信协议和数据格式:SOA架构中的服务通常使用SOAP(Simple Object Access Protocol)作为通信协议,数据格式通常是XML。SOAP虽然功能强大,但其消息头和体较为臃肿,增加了网络负载。相比之下,微服务更倾向于使用轻量级的HTTP/REST协议和JSON数据格式,降低了网络延迟和资源消耗。
-
服务粒度:SOA中的服务粒度往往较大,这意味着一个服务可能包含多个功能,当需要修改或扩展某个具体功能时,可能需要对整个服务进行重构。微服务则强调更细粒度的服务,每个服务只关注单一职责,这样更易于理解和维护,也更有利于持续交付和部署。
-
技术栈限制:在SOA中,由于服务间紧密耦合,通常要求服务使用相同的技术栈和平台。微服务架构允许每个服务独立选择最适合的技术栈,这意味着不同的服务可以使用不同的编程语言、框架和数据存储,提高了技术的多样性和灵活性。
-
部署和运维:SOA架构下,服务的部署和升级往往需要停机,且由于服务间的紧密依赖,可能导致级联失败。微服务架构通过容器化和自动化部署工具,实现了服务的独立部署和滚动更新,降低了运维复杂度和系统宕机风险。
-
容错性和弹性:SOA架构中的服务故障可能会迅速蔓延至整个系统。微服务架构通过内置的容错机制(如断路器、超时和重试策略),以及微服务之间的松耦合,提高了系统的整体稳定性和容错能力。
-
开发周期:SOA架构下的开发和测试周期较长,因为服务之间的依赖关系复杂。微服务架构通过快速迭代和持续集成/持续部署(CI/CD)实践,缩短了从代码编写到生产环境的周期。
微服务架构与SOA架构的不同
-
去中心化服务发现:微服务架构采用去中心化的服务发现机制,服务实例可以在启动时自动注册到一个服务注册中心(如Eureka、Consul或Zookeeper),并定期发送心跳保持注册状态。服务消费者通过服务注册中心动态发现可用的服务实例,减少了对单一注册点的依赖,增强了系统的弹性和可靠性。
-
轻量级通信协议:微服务倾向于使用HTTP/REST、gRPC或其他轻量级通信协议,以及更紧凑的数据格式如JSON或Protocol Buffers。这些协议和格式减少了网络传输的开销,提高了效率和响应速度。
-
细粒度服务:微服务架构鼓励将应用拆分为更小、更专注的服务,每个服务负责一个具体的业务功能。这样的设计使得服务更易于开发、测试和维护,也更容易独立扩展和优化。
-
多语言和多技术栈支持:微服务架构允许每个服务独立选择最合适的编程语言、框架和数据存储技术。这种技术多样性提高了开发团队的生产力,也便于适应不断变化的业务需求和技术趋势。
-
独立部署:每个微服务可以独立部署和升级,无需停机。容器化技术(如Docker)和编排工具(如Kubernetes)使得微服务的部署、管理和扩展变得更加自动化和高效。
-
容错机制和弹性设计:微服务架构内置了各种容错机制,如断路器(circuit breaker)、重试(retry)、超时(timeout)和降级(degradation)。这些机制可以帮助服务在面对故障时快速恢复,提高系统的整体稳定性。
-
持续集成和持续部署(CI/CD):微服务架构推崇持续集成和持续部署的实践,通过自动化测试、构建和部署流程,加快了软件开发和发布的速度,同时也降低了人为错误。
-
数据去中心化:微服务通常提倡每个服务管理自己的数据库,即所谓的“数据去中心化”。这种方法减少了服务间的数据依赖,但也需要处理好数据一致性和跨服务通信的复杂性。
微服务架构比 SOA 架构粒度会更加精细,让专业的人去做专业的事情(专注),它提倡将单一应用程序划分成一组松散耦合的细粒度小型服务,轻量级的协议,互相协调、互相配合,为用户提供最终价值。
微服务优点:
3.1 单一职责
微服务架构中的每个服务都是具有业务逻辑的,符合高内聚、低耦合原则以及单一职责原则的单元,我只做......
3.2 轻量级通信
通过REST API+JSON模式或者RPC框架,实现服务间互相协作的轻量级通信机制。
3.3 独立性
每个服务相互独立,如果升级只需要改变当前服务本身即可,就可以完成独立的开发、测试、部署、运维。
3.4 进程隔离,单独部署,跑在自己的进程中
在微服务架构中,应用程序由多个服务组成,每个服务都是高度自治的独立业务实体,可以运行在独立的进程中,不同的服务能非常容易地部署到不同的主机上,实现高度自治和高度隔离。
进程的隔离,还能保证服务达到动态扩缩容的能力,业务高峰期自动增加服务资源以提升并发能力,业务低谷期则可自动释放服务资源以节省开销。
3.5 混合技术栈和混合部署方式
团队可以为不同的服务组件使用不同的技术栈和不同的部署方式(公有云、私有云、混合云)。
3.6 分布式管理
组件可以彼此独立地进行扩缩容和治理,从而减少了因必须缩放整个应用程序而产生的浪费和成本,因为单个功能可能面临过多的负载。
3.7 安全可靠,可维护。
从架构上对运维提供友好的支撑,在安全、可维护的基础上规范化发布流程,支持数据存储容灾、业务模块隔离、访问权限控制、编码安全检测等。
通义tongyi.ai_你的全能AI助手-通义千问 (lxblog.com)
3.常见微服务架构
1. dubbo: zookeeper + SpringMVC/SpringBoot
-
配套 通信方式:rpc
-
注册中心:zookeeper / redis
-
配置中心:diamond
2.SpringCloud:全家桶+轻松嵌入第三方组件(Netflix)
-
配套 通信方式:http restful
-
注册中心:eruka / consul /nacos
-
配置中心:config / nacos
-
断 路 器:hystrix / Sentinel
-
网关:zuul / GateWay
-
分布式追踪系统:sleuth + zipkin
4.Spring Cloud Alibaba 介绍
Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发微服务架构的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发微服务架构。
依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里分布式应用解决方案,通过阿里中间件来迅速搭建分布式应用系统。
Level up your Java code and explore what Spring can do for you.
既然说 Spring Cloud 是标准,那么自然少不了针对标准的实现。这里,为大家介绍下 Spring Cloud Alibaba 这套实现。先给出下面这张图帮助大家理解 Spring Cloud Alibaba 的定位:
Spring Cloud 作为一套标准,它的实现肯定不止一套,那么各套实现都有什么区别呢?我们来一起看一下下面这张图:
可以发现 Spring Cloud Alibaba 是所有的实现方案中功能最齐全的。尤其是在 Netflix 停止更新了以后,Spring Cloud Alibaba 依然在持续更新和迭代。
5.版本说明
版本说明 · alibaba/spring-cloud-alibaba Wiki · GitHub
<spring.boot.version>2.3.12.RELEASE</spring.boot.version>
<spring.cloud.version>Hoxton.SR12</spring.cloud.version>
<spring.cloud.alibaba.version>2.2.10-RC1</spring.cloud.alibaba.version>
6.脚手架
Cloud Native App Initializer (aliyun.com)