Spring Cloud
约 3237 字大约 11 分钟
2025-02-27
1. 微服务架构
1.1 概念
微服务架构(Microservices Architecture)是一种分布式系统架构风格,它将一个大型单体应用拆分成一组小型服务,每个服务运行在自己的进程中,服务间采用轻量级通信机制互相协作,每个服务都围绕业务功能进行设计和开发,并使用自动化部署机制来管理服务的生命周期,这些服务共同组成了一个完整的应用。
1.2 出现和发展
微服务架构的出现和发展是为了应对单体应用的复杂性和可扩展性问题。单体应用的开发和维护成本高,随着应用的功能越来越复杂,单体应用的性能、可靠性、可扩展性等指标也越来越难以满足需求。因此,微服务架构应运而生。
微服务(Microservice)这个概念是2012年出现的,作为加快Web和移动应用程序开发进程的一种方法,2014年开始受到各方的关注,而2015年,可以说是微服务的元年;
越来越多的论坛、社区、blog以及互联网行业巨头开始对微服务进行讨论、实践,可以说这样更近一步推动了微服务的发展和创新。而微服务的流行,Martin Fowler
功不可没。
这老头是个奇人,特别擅长抽象归纳和制造概念。特别是微服务这种新生的名词,都有一个特点: 一解释就懂,一问就不知,一讨论就打架。
1.3 系统架构演变
随着互联网的发展,网站应用的规模也在不断的扩大,进而导致系统架构也在不断的进行变化。从互联网早起到现在,系统架构大体经历了下面几个过程:
单体架构 -> 垂直架构 -> -> 分布式架构 -> SOA架构 -> 微服务架构
1.3.1 单体架构
互联网早期,一般的网站应用流量较小,只需一个应用,将所有功能代码都部署在一起就可以,这样可以减少开发、部署和维护的成本。比如说一个电商系统,里面会包含很多用户管理,商品管理,订单管理,物流管理等等很多模块,我们会把它们做成一个web项目,然后部署到一台tomcat服务器上。
优点:
- 简单:一个应用就是一个整体,所有的功能都在一个工程中,所有的模块都耦合在一起,系统的扩展性和可靠性都不好。
- 易于维护:一个应用就是一个整体,所有的功能都在一个工程中,所有的模块都耦合在一起,系统的扩展性和可靠性都不好。
- 易于部署:一个应用就是一个整体,所有的功能都在一个工程中,所有的模块都耦合在一起,系统的扩展性和可靠性都不好。
缺点:
- 性能瓶颈:单体应用的性能瓶颈主要是数据库的性能瓶颈,当数据库的读写请求量过大时,应用的性能就会受到影响。
- 扩展性差:单体应用的扩展性差,当应用的功能和数据量越来越大时,单体应用的扩展性就会受到影响。
- 开发效率低:单体应用的开发效率低,当应用的功能越来越多时,单体应用的开发效率就会越来越低。
1.3.2 垂直架构
随着访问量的逐渐增大,单一应用只能依靠增加节点来应对,但是这时候会发现并不是所有的模块都会有比较大的访问量。还是以上面的电商为例子, 用户访问量的增加可能影响的只是用户和订单模块, 但是对消息模块的影响就比较小. 那么此时我们希望只多增加几个订单模块, 而不增加消息模块. 此时单体应用就做不到了, 垂直应用就应运而生了。
所谓的垂直应用架构,就是将原来的一个应用拆成互不相干的几个应用,以提升效率。比如我们可以将上面电商的单体应用拆分成:
- 电商系统(用户管理 商品管理 订单管理)
- 后台系统(用户管理 订单管理 客户管理)
- CMS系统(广告管理 营销管理)
这样拆分完毕之后,一旦用户访问量变大,只需要增加电商系统的节点就可以了,而无需增加后台和CMS的节点。
优点:
- 系统拆分实现了流量分担,解决了并发问题,而且可以针对不同模块进行优化和水平扩展
- 一个系统的问题不会影响到其他系统,提高容错率
缺点:
- 系统之间相互独立, 无法进行相互调用
- 系统之间相互独立, 会有重复的开发任务
1.3.3 分布式架构
当垂直应用越来越多,重复的业务代码就会越来越多。这时候,我们就思考可不可以将重复的代码抽取出来,做成统一的业务层作为独立的服务,然后由前端控制层调用不同的业务层服务呢? 这就产生了新的分布式系统架构。它将把工程拆分成表现层和服务层两个部分,服务层中包含业务逻辑。表现层只需要处理和页面的交互,业务逻辑都是调用服务层的服务来实现。
优点:
- 抽取公共的功能为服务层,提高代码复用性
缺点:
- 系统间耦合度变高,调用关系错综复杂,难以维护
1.3.4 SOA架构
在分布式架构下,当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心对集群进行实时管理。此时,用于资源调度和治理中心(SOA Service Oriented Architecture,面向服务的架构)是关键。
优点:
- 使用注册中心解决了服务间调用关系的自动调节
缺点:
- 服务间会有依赖关系,一旦某个环节出错会影响较大( 服务雪崩 )
- 服务关系复杂,运维、测试部署困难
1.3.5 微服务架构
微服务架构是一种分布式系统架构风格,它将一个大型单体应用拆分成一组小型服务,每个服务运行在自己的进程中,服务间采用轻量级通信机制互相协作,每个服务都围绕业务功能进行设计和开发,并使用自动化部署机制来管理服务的生命周期,这些服务共同组成了一个完整的应用。
微服务架构在某种程度上是面向服务的架构SOA继续发展的下一步,它更加强调服务的"彻底拆分"
优点:
- 服务原子化拆分,独立打包、部署和升级,保证每个微服务清晰的任务划分,利于扩展
- 微服务之间采用Restful等轻量级http协议相互调用
缺点:
- 分布式系统开发的技术成本高(容错、分布式事务等)
1.4 微服务架构面临的问题
微服务架构简单的说就是将单体应用进一步拆分,拆分成更小的服务,每个服务都是一个可以独立运行的项目。
一旦采用微服务系统架构,就势必会遇到这样几个问题 :
- 这么多小服务,如何管理他们?(服务治理 注册中心[服务注册 发现 剔除])
- 这么多小服务,他们之间如何通讯?(restful rpc)
- 这么多小服务,客户端怎么访问他们?(网关)
- 这么多小服务,一旦出现问题了,应该如何自处理?(容错)
- 这么多小服务,一旦出现问题了,应该如何排错? (链路追踪)
1.5 微服务相关概念
- 服务注册中心:服务注册中心是微服务架构中的一个重要角色,它负责服务实例的注册与发现,为服务调用提供服务。
- 服务治理:服务治理就是进行服务的自动化管理,其核心是服务的自动注册与发现。
- 服务注册:服务实例将自身服务信息注册到注册中心。
- 服务发现:服务实例通过注册中心,获取到注册到其中的服务实例的信息,通过这些信息去请求它们提供的服务。
- 服务剔除:服务注册中心将出问题的服务自动剔除到可用列表之外,使其不会被调用到。
- 服务调用:服务间的调用,一般通过restful接口,通过注册中心获取服务实例的地址,然后通过负载均衡算法,将请求分发到各个服务实例。
- 服务容错:服务调用失败,一般有两种情况,一种是服务实例宕机,一种是网络波动。服务容错一般通过熔断机制,隔离出故障点,避免影响整体服务。
- 服务熔断:服务调用失败,一般有两种情况,一种是服务实例宕机,一种是网络波动。服务容错一般通过熔断机制,隔离出故障点,避免影响整体服务。
- 服务限流:服务调用过多,为了防止服务过载,可以对服务调用进行限流,限制服务调用的频率。
- 服务降级:当服务出现故障时,为了保证整体服务的可用性,可以将故障点的服务降级,降级后服务调用将不再访问故障点,而是访问其他正常的服务。
- 服务网关:服务网关是微服务架构中的一个重要角色,它作为服务调用的统一入口,负责服务的路由、过滤、权限控制等。
- 服务调用链路追踪:服务调用链路追踪是微服务架构中的一个重要角色,它可以帮助开发人员快速定位服务调用的故障点,帮助运维人员快速定位服务的性能瓶颈。
2. 微服务解决方案
2.1 SserviceComb
Apache ServiceComb,前身是华为云的微服务引擎 CSE (Cloud Service Engine) 云服务,是全球首个Apache微服务顶级项目。它提供了一站式的微服务开源解决方案,致力于帮助企业、用户和开发者将企业应用轻松微服务化上云,并实现对微服务应用的高效运维管理。
2.2 Spring Cloud
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Cloud很容易地实现。 Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了简单易懂的API来使用这些框架来开发分布式系统。
3. Spring Cloud 各套实现对比
Spring Cloud 作为一套标准,它的实现肯定不止一套,那么各套实现都有什么区别呢?我们来一起看一下下面这张图: 可以发现 Spring Cloud Alibaba 是所有的实现方案中功能最齐全的。尤其是在 Netflix 停止更新了以后,Spring Cloud Alibaba 依然在持续更新和迭代。
随着Spring Cloud Netflix 将不再开发新的组件,项目进入维护模. 目前 Alibaba 基于开源组件和多个阿里云产品组成以及Spring Cloud 对的接口,实现了一套 Spring Cloud Alibaba 技术体系,并且已经获得 Spring Cloud 的认可,目前在国内使用人数很多了。组件如下:
- 服务注册中心 :Eureka、Consul、Zookeeper、
- 服务调用 :Feign、RestTemplate、、Ribbon、Dubbo
- 服务网关 :Zuul、
- 配置中心 :Config Server、Apollo、Spring Cloud Config、
- 服务熔断 :Hystrix、
- 负载均衡 :Ribbon、