赞
踩
目录
5.1.SpringCloud与SpringCloud Alibaba的关系
5.3.Spring Cloud&Dubbo系和阿里系组件对比
8.SpringCloud与SpringCloud Alibaba抉择
8.4.结合SpringCloud Alibaba最终的技术搭配方案
微服务架构(Microservice Architecture)是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦,从而降低系统的耦合性,并提供更加灵活的服务支持。
(仅列举个人认为常用的,根据架构层级排序)
在微服务架构里主要起到了协调者的一个作用。
关系调用说明: 服务生产者启动时,向服务注册中心注册自己提供的服务; 服务消费者启动时,在服务注册中心订阅自己所需要的服务; 消费者从提供者中调用服务;
注册中心一般包含如下几个功能:
服务发现:
服务注册/反注册:保存服务提供者和服务调用者的信息
服务订阅/取消订阅:服务调用者订阅服务提供者的信息,最好有实时推送的功能
服务路由(可选):具有筛选整合服务提供者的能力。
服务配置:
配置订阅:服务提供者和服务调用者订阅微服务相关的配置
配置下发:主动将配置推送给服务提供者和服务调用者
服务健康检测
检测服务提供者的健康情况
比较项 | ZOOKEEPER | EUREKA | CONSUL | NACOS |
---|---|---|---|---|
CAP | CP | AP | CP | CP/AP |
一致性算法 | Paxos | - | Raft | Raft |
自我保护机制 | 无 | 有 | 无 | 有 |
SpringCloud集成 | 支持 | 支持 | 支持 | 支持 |
Dubbo集成 | 支持 | 不支持 | 支持 | 支持 |
K8S集成 | 不支持 | 不支持 | 支持 | 支持 |
也称为API网关,对外提供API接口,是服务调用的唯一入口,可以在这个组件中实现请求路由、用户鉴权、动态路由、灰度发布、负载均衡、负载限流等功能。API 网关是微服务架构中的入口,用于接收来自客户端的请求,并根据请求的内容路由到不同的微服务。常用的 API 网关包括 Nginx、Kong、Zuul 和 Spring Cloud Gateway 等。
例如包含上图中的Gateway功能:
权限控制:网关作为微服务入口,需要校验用户是是否有请求资格,如果没有则进行拦截。
路由和负载均衡:一切请求都必须先经过gateway,但网关不处理业务,而是根据某种规则,把请求转发到某个微服务,这个过程叫做路由。当然路由的目标服务有多个时,还需要做负载均衡。当然路由的目标服务有多个时,还需要做负载均衡。
限流:当请求流量过高时,在网关中按照下流的微服务能够接受的速度来放行请求,避免服务压力过大
负载均衡:服务提供方一般以多实例的形式提供服务,使用负载均衡能够让服务调用方连接到合适的服务节点。当多个服务提供者时,可以根据负载均衡算法,比如:如简单轮询、随机连接等,自动地选择需要调用的服务地址。
主流网关选择有 NGINX、Kong、Apache APISIX 和 Envoy 等,Java 技术栈的有 Netfilx Zuul、Spring Cloud Gateway、Soul 等。
网关 | 痛点 | 优势 |
---|---|---|
NGINX | 1. 修改配置需要 Reload 才能生效,跟不上云原生的发展。 | 1. 老牌应用; 2. 稳定可靠,久经考验; 3. 高性能。 |
Apache APISIX | 1. 文档不够丰富和清晰,需要待改进。 | 1. Apache 基金会顶级项目; 2. 技术架构更贴合云原生; 3. 性能表现优秀; 4. 生态丰富; 5. 除了支持 Lua 开发插件外,还支持 Java、Go、Python、Node 等语言插件。 |
Kong | 1. 默认使用 PostgreSQL 或 Cassandra 数据库,使得整个架构非常臃肿,并且会带来高可用的问题; 2. 路由使用的是遍历查找,当网关内有超过上千个路由时,它的性能就会出现比较急剧的下降; 3. 一些重要功能是需要付费的。 | 1. 开源 API 网关的鼻祖,用户数众多; 2. 性能满足大部分用户的需求; 3. 生态丰富; 4. 支持 Lua 和 Go 开发插件。 |
Envoy | 1. 使用 C++,二次开发难度大; 2. 除了 C++ 开发 filter 外,还支持 WASM 和 Lua。 | 1. CNCF 毕业项目 更适合服务网格场景多语言架构部署。 |
Spring Cloud Gateway | 1. 虽然 Spring 社区成熟,但是 Gateway 资源缺乏。 | 1. 内置了非常多的开箱即用功能,并且都可以通过 SpringBoot 配置或者手工编码链式调用来使用; 2. Spring 系列可扩展性强,易配置,可维护性好; 3. Spring 社区成熟; 4. 简单易用; 5. 对于 Java 技术栈来说方便。 |
集中管理应用程序的配置信息,包括数据库连接、日志级别等,将本地化的配置信息(properties、yml、yaml等)注册到配置中心,实现程序包在开发、测试、生产环境的无差别性,方便程序包的迁移。
当微服务系统的一个服务出现故障时,故障会沿着服务的调用链路在系统中疯狂蔓延,最终导致整个微服务系统的瘫痪,这就是“雪崩效应”。为了防止此类事件的发生,微服务架构引入了“熔断器”的一系列服务容错和保护机制。
在微服务系统中,Hystrix 能够帮助我们实现以下目标:
通过断路器(也称熔断器)等一系列的服务保护机制,保证服务调用者在调用异常服务时快速地返回结果,避免大量的同步等待。
服务熔断可以理解为类似于电表的保险丝,一旦某个时刻电压过载,那么保险丝就熔断了。
服务熔断的实现,大体流程如下图所示:
负载均衡是用于解决一台机器(一个进程)无法解决所有请求而产生的一种算法。
常见的有:
常见的负载均衡系统包括:DNS负载均衡、硬件负载均衡和软件负载均衡。
服务提供者端集中式负载均衡模式
这种模式在微服务架构模式之前普遍使用,指的是在消费者和服务提供方中间使用独立的代理方式进行负载,一般都是使用Nginx来实现。
客户端负载均衡模式
在微服务架构中普遍使用,通过服务的注册中心将服务提供者的访问地址发送出去,服务消费者得到地址后在消费者端进行负载均衡,一般使用Ribbo来实现。
边车负载均衡模式
下一代微服务架构中将对负载均衡进行沉淀到独立的进程中,最大的变化就是和业务应用完全解耦了。
微服务架构中的服务拓扑比较复杂,每个服务的调用链也比较长,因此需要进行分布式跟踪和监控,以便及时发现和解决问题。常用的分布式跟踪与监控组件包括 Zipkin、SkyWalking 和 Jaeger 等。
由于微服务架构中的每个服务都需要独立部署和管理,因此数据的存储和访问也需要进行分布式处理。常用的分布式数据存储包括关系型数据库(如 MySQL、PostgreSQL)、NoSQL 数据库(如 MongoDB、Cassandra)和分布式缓存(如 Redis、Memcached)等
一个微服务框架至少需要的组件有:网关、注册中心、微服务,如果想要通过服务来统一管理我们的配置文件,那么就还需要一个配置中心,目前国内企业使用的微服务架构,主要是这三个体系:
SpringCloud Alibaba是阿里研发的一套微服务架构的落地技术方案,可以很好的兼容SpringCloud,只需修改一些配置和注解,原生SpringCloud就可以接入到SpringCloud Alibaba中。
SpringCloud Alibaba提供了一些新组件,来落地微服务架构,阿里之所以要开发这套技术架构,主要是为了推广相关的产品,当然有付费产品。
下面看SpringCloud与Alibaba组件对比:
Spring Cloud&Dubbo系 | 阿里系 | |
---|---|---|
配置中心 | SpringCloud Config | Nacos |
服务调用(服务通信) | feign、RestTemplete | OpenFeign |
服务注册 | Eurake、Zookeeper | Nacos Discovery |
服务调用 | Feign | Dubbo RPC |
API网关 | Spring Cloud Gateway、Zuul | Spring Cloud Gateway |
熔断限流 | Hystrix | Sentinel |
配置中心 | Apollo、Spring Cloud Config | Nacos Config |
负载均衡 | Ribbon | Dubbo LB |
消息队列 | RocketMQ | |
分布式事务 | ------- | Seata |
分布式服务追踪 | Spring Cloud Sleuth | Spring Cloud Sleuth |
监控 | Spring Cloud Admin | Spring Cloud Admin |
消息总线 | Spring Cloud Bus | |
短信服务 | Alibaba Cloud SMS |
Spring Cloud Alibaba 系列组件,其中包含了阿里开源组件,阿里云商业化组件,以及集成Spring Cloud 组件
Spring Cloud Alibaba 的核心组件包括 Nacos、Sentinel、Dubbo 和 RocketMQ。下面将分别介绍这些组件及其架构设计和流程。
Sentinel:Sentinel 是一款轻量级的流量控制和熔断降级框架。把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。能够帮助用户解决高并发场景下的稳定性问题。它提供了实时的监控和告警功能,能够对服务的 QPS、RT、异常率等指标进行实时监控和统计,同时也支持基于规则的熔断降级、流量控制和系统保护。
Sentinel 的架构设计基于两个核心模块:流量控制和熔断降级。其中,流量控制负责限制服务的流量,避免系统被过载;熔断降级负责在服务异常或不可用时进行自动熔断,避免系统崩溃。
Nacos:Nacos 是一款开源的注册中心和配置中心,帮助用户动态服务发现、配置管理和服务治理,Nacos 的架构设计基于三个核心模块:命名服务(Naming)、配置服务(Configuration)和服务治理(Governance)。其中,命名服务负责服务的注册和发现,配置服务负责配置的管理和发布,服务治理负责服务的负载均衡和流量控制。
Nacos就是注册中心 + 配置中心的组合 等价于 Nacos = Eureka + config + Bus
RocketMQ:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。
Dubbo:Apache Dubbo™ 是一款高性能 Java RPC 框架。Dubbo 是一款高性能的 RPC 框架,能够帮助用户快速构建分布式应用程序。它支持多种协议和序列化方式,并提供了负载均衡、服务降级、集群容错等多种功能。
Dubbo 的架构设计基于三个核心模块:注册中心、提供者和消费者。其中,注册中心负责服务的注册和发现,提供者负责提供服务的实现,消费者负责调用服务的接口。Dubbo 的架构设计基于三个核心模块:注册中心、提供者和消费者。其中,注册中心负责服务的注册和发现,提供者负责提供服务的实现,消费者负责调用服务的接口。
Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。
作为一家商业公司,阿里巴巴推出Spring Cloud Alibaba,很大程度上市希望通过抢占开发者生态,来帮助推广自家的云产品。
Alibaba Cloud OSS: 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。
Alibaba Cloud SchedulerX: 阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。
Alibaba Cloud SMS: 覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。
Spring Cloud是一个全家桶式的技术栈,包含了很多组件。本文先从其最核心的几个组件入手,来剖析一下其功能结构。也就是Eureka、Ribbon、Feign、Hystrix、Zuul这几个组件。
SpringCloud为开发人员提供了快速构建分布式系统架构的工具,例如配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁定,领导选举,分布式会话,集群状态等。作为开发人员,我们只负责写业务代码即可。SpringCloud为我们提供的轮子如下:
Spring Cloud Consul、Eureka、Nacos:服务治理组件,包括服务端的注册中心和客户端的服务发现机制。
Spring Cloud Config:集中配置管理工具,分布式系统中统一的外部配置管理,默认使用Git来存储配置,可以支持客户端配置的刷新及加密、解密操作。
Spring Cloud Ribbon:负载均衡的服务调用组件,具有多种负载均衡调用策略;
Spring Cloud Hystrix、Sentinel:服务容错组件,实现了断路器模式,为依赖服务的出错和延迟提供了容错能力;
Spring Cloud Gateway、Zuul:API网关组件,对请求提供路由及过滤功能。
Spring Cloud OpenFeign:基于Ribbon和Hystrix的声明式服务调用组件,可以动态创建基于Spring MVC注解的接口实现用于服务调用,在SpringCloud 2.0中已经取代Feign成为了一等公民。;
Spring Cloud Security:安全工具包,对网关代理中的负载均衡OAuth2客户端及登录认证进行支持。
Spring Cloud Task:用于快速构建短暂、有限数据处理任务的微服务框架,用于向应用中添加功能性和非功能性的特性。
Spring Cloud Bus:用于传播集群状态变化的消息总线,使用轻量级消息代理链接分布式系统中的节点,可以用来动态刷新集群中的服务配置。
Spring Cloud Sleuth:SpringCloud应用程序的分布式请求链路跟踪,支持使用Zipkin、HTrace和基于日志(例如ELK)的跟踪。
Spring Cloud Stream:轻量级事件驱动微服务框架,可以使用简单的声明式模型来发送及接收消息,主要实现为Apache Kafka及RabbitMQ。
Spring Boot Admin、Spring Boot Actuator:Spring Boot Admin 可以对SpringBoot应用的各项指标进行监控,可以作为微服务架构中的监控中心来使用。
来自阿里云的说法:
❝ Spring Cloud 本身是一套微服务规范,并不是一个拿来即可用的框架,而 Spring Cloud Alibaba 的开源为开发者们提供了这套规范的实现方式。同时,Spring Cloud Alibaba 提供的完整的微服务组件、中文文档和本地化的开源服务提高了开发者们接入微服务的速率,并降低了后续的运维难度。
因为上面提到的SpringCloud官方版,或者说SpringCloud Netflix版一些重要组件如注册中心Euraka、Ribbon已经不再迭代更新了。
Service Mesh · Istio · 以实践入门_架构_三辰_InfoQ精选文章
正确入门Service Mesh:起源、发展和现状-阿里云开发者社区 (aliyun.com)
SpringCloud Alibaba 全部组件说明_springcloudalibaba五大组件_七月J的博客-CSDN博客
目前最新微服务架构技术栈选型 - 掘金 (juejin.cn)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。