微服务架构技术选型
Posted _zxue
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微服务架构技术选型相关的知识,希望对你有一定的参考价值。
微服务架构技术选型
Spring Cloud 本身其实只是一套微服务规范,并不是一个拿来即可用的框架,Spring Cloud Netflix 和Spring Cloud Alibaba是为开发者提供了这套规范的实现方式。由于Spring Cloud Netflix 2018年12月12日进入维护模式(Maintenance Mode),所以不太适合长期再使用。故选择Spring Cloud Alibaba的技术方案。
一、 Spring Cloud Netflix
1. 简介
Spring Cloud Netflix 是 Netflix推出的一套基于 Spring Cloud 微服务规范的微服务架构套件的具体实现。是目前比较成熟的 Spring Cloud 微服务实现方案。
2. 主要功能
主要提供的功能包括:服务发现、断路器和监控、智能路由、客户端负载均衡等。
3. 主要组件
- Eureka:服务治理组件,包含服务注册中心,服务注册与发现机制的实现。
- Ribbon:客户端负载均衡的服务调用组件。
- Feign:基于Ribbon和Hystrix的声明式服务调用组件。
- Zuul:网关组件,提供智能路由、访问过滤等功能。
- Hystrix:容错管理组件,实现断路器模式,帮助服务依赖中出现的延迟和为故障提供强大的容错能力。
- Hystrix Dashboard:监控面板,他提供了一个界面,可以监控各个服务上的服务调用所消耗的时间等。
- Turbine:监控聚合,使用Hystrix监控,我们需要打开每一个服务实例的监控信息来查看。而Turbine可以帮助我们把所有的服务实例的监控信息聚合到一个地方统一查看。这样就不需要挨个打开一个个的页面一个个查看。
- Archaius:外部化配置组件。
二、 Spring Cloud Alibaba
1. 简介
Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。
此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。
依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,
通过阿里中间件来迅速搭建分布式应用系统。
2. 主要功能
- 服务限流降级:默认支持 WebServlet、WebFlux, OpenFeign、RestTemplate、Spring Cloud Gateway, Zuul, Dubbo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。
- 服务注册与发现:适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。
- 分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新。
- 消息驱动能力:基于 Spring Cloud Stream 为微服务应用构建消息驱动能力。
- 分布式事务:使用 @GlobalTransactional 注解, 高效并且对业务零侵入地解决分布式事务问题。。
- 阿里云对象存储:阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。
- 分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker(schedulerx-client)上执行。
- 阿里云短信服务:覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道
3. 主要组件
- [开源]Sentinel:把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
- [开源]Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
- [开源]RocketMQ:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。
- [开源]Dubbo:一款高性能 Java RPC 框架。
- [开源]Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。
- [商用]Alibaba Cloud ACM:一款在分布式架构环境中对应用配置进行集中管理和推送的应用配置中心产品。
- [商用]Alibaba Cloud OSS: 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。
- [商用]Alibaba Cloud SchedulerX: 阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。
- [商用]Alibaba Cloud SMS: 覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。
三、 微服务各组件对比
1. 服务注册与发现:Eureka、Nacos、Consul、Zookeeper
Nacos | Eureka | Consul | Zookeeper | |
---|---|---|---|---|
一致性协议 | CP+AP | AP | CP | CP |
健康检查 | TCP/HTTP/mysql/Client Beat | Client Beat | TCP/HTTP/gRPC/Cmd | Keep Alive |
负载均衡 | 权重/metadata/Selector | Ribbon | Fabio | - |
雪崩保护 | 有 | 有 | 无 | 无 |
自动注销实例 | 支持 | 支持 | 不支持 | 支持 |
访问协议 | HTTP/DNS | HTTP | HTTP/DNS | TCP |
监听支持 | 支持 | 支持 | 支持 | 支持 |
多数据中心 | 支持 | 支持 | 支持 | 不支持 |
跨注册中心同步 | 支持 | 不支持 | 支持 | 不支持 |
Spring Cloud集成 | 支持 | 支持 | 支持 | 不支持 |
Dubbo集成 | 支持 | 不支持 | 不支持 | 支持 |
K8S集成 | 支持 | 不支持 | 支持 | 不支持 |
2. 配置中心:Spring Cloud Config 、Nacos
-
spring cloud config
性能够用
config: 单独服务,是从git仓库拉取配置信息,然后服务端从config服务里面拉取配置信息缓存到本地仓库,
这里配置的变更比较麻烦,他需要结合bus组件,同时约束了只能用rabbitmq和kafka来进行通知服务端进行配置变更。
但是保证了数据的一致性,因为他的配置信息在git仓库上,git仓库只有一个,就会数据一致
-
nacos
性能最好
他同时支持AP和CP模式,他根据服务注册选择临时和永久来决定走AP模式还是CP模式,
他这里支持CP模式对于我的理解来说,应该是为了配置中心集群,因为nacos可以同时作为注册中心和配置中心,
因为他的配置中心信息是保存在nacos里面的,假如因为nacos其中一台挂掉后,还没有同步配置信息,就可能发生配置不一致的情况.,
配置中心的配置变更是服务端有监听器,配置中心发生配置变化,然后服务端会监听到配置发生变化,从而做出改变
3. 熔断、降级: Hystrix、Sentinel
比较项 | Sentinel | Hystrix | 说明 |
---|---|---|---|
隔离策略 | 信号量隔离(并发线程数限流)(模拟信号量) | 线程池隔离/信号量隔离 | Sentinel不创建线程依赖tomcat或jetty容器的线程池,存在的问题就是运行容器的线程数量限制了sentinel设置值的上限可能设置不准。比如tomcat线程池为10,sentinel设置100是没有意义的,同时隔离性不好 hystrix使用自己创建的线程池,隔离性会更好 |
熔断降级策略 | 基于响应时间、异常比率、异常数 | 基于异常比率 | 快速失败的本质功能 |
实时统计实现 | 滑动窗口(LeapArray) | 滑动窗口(基于 RxJava) | |
动态规则配置 | 支持多种数据源 | 支持多种数据源 | |
扩展性 | 多个扩展点 | 插件的形式 | |
注解 | 支持 | 支持 | |
限流 | 基于 QPS,支持基于调用关系的限流 | 有限的支持(并发线程数或信号量大小) | 快速失败的本质功能 |
流量整形 | 支持预热模式、匀速器模式、预热排队模式 | 不支持(排队) | |
系统自适应保护 | 支持(仅对linux/unix生效) | 不支持 | 设置一个服务器最大允许处理量的阈值 |
控制台 | 提供开箱即用的控制台,可配置规则、查看秒级监控、机器发现等 | 简单的监控查看接近实时数据 | 控制台是非常有竞争力的功能,因为能集中配置限制数据更方便,但是展示数据和实时性没有hystrix直观。 |
配置持久化 | ZooKeeper, Apollo, Nacos、本地文件 | Git/svn/本地文件 | Sentinel客户端采用直接链接持久化存储,应用客户端引用了更多的依赖,同样的存储链接可能有多个配置 |
动态配置 | 支持 | 支持 | |
黑白名单 | 支持 | 不支持 | |
springcloud集成 | 高 | 非常高 | Spring boot使用hystrix集成度更高 |
整体优势 | 集中配置设置及监控+更细的控制规则 | 漂亮的界面+接近实时的统计结果 | docker容器化部署之后sentinel可能更会发挥作用 |
4. 网关: Zuul、Spring Cloud Gateway
-
Spring Cloud Gateway
基于Spring 5、Project Reactor、Spring Boot 2,使用非阻塞式的API,内置限流过滤器,支持长连接(比如 websockets),
在高并发和后端服务响应慢的场景下比Zuul1的表现要好。
-
Zuul
基于Servlet2.x构建,使用阻塞的API,没有内置限流过滤器,不支持长连接。
Spring Cloud Gateway,使用起来比 Zuul 更简单,配置更方便
两者都能与Sentinel(是阿里开源的一款高性能的限流框架)集成。
5. 整体方案对比
1、Spring Cloud Netflix
成熟度:推出较早,相对成熟
更新持续性:更新缓慢,部分停更
社区活跃度:社区活跃
发展趋势:趋缓
文档便捷性:英文为主
难易程度:一般
性能:基于http协议,性能一般
配套:无配置中心,使用 Spring Cloud Config;
商业优势:
2、Spring Cloud Alibaba
成熟度:2019年8月1日 在 Alibaba 仓库发布第一个毕业版本,相对较新。
更新持续性:持续更新中
社区活跃度:社区活跃
发展趋势:发展迅猛
文档便捷性:官方中文文档
难易程度:一般
性能:底层基于dubbo rpc 通信,性能较高
配套:无配套网关,使用 Spring Cloud Gateway;配套分布式服务框架setea;
商业优势:可更好的支持 阿里云 相关商业产品,容易继承。
四、总结:
推荐:Spring Cloud Alibaba
理由:
具有 Alibaba 大厂背景;
经过世界上最大最复杂的电商交易场景——双11 的有效验证;
对阿里云商用服务提供友好的支持;
整体易用性,性能,及后续发展趋势更胜一筹。
微服务之架构技术选型与设计
参考技术A
本文主要介绍了架构技术选型与设计-微服务选型,Spring cloud 实现采用的技术,希望对您的学习有所帮助。
架构技术选型与设计-DUBBODubbo,是阿里巴巴服务化治理的核心框架,并被广泛应用于阿里巴巴集团的各成员站点(阿里巴巴现在使用架构为HSF)。 于2012-10-24最后版本2.5.3成为最后一版本,由当当接手维护,命名为dubbox;2017年突然继续dubbo进行维护,最后更新版本时间为 2017-10-11 22:21
Dubbo 核心部件:Provider: 暴露服务的提供方。Consumer:调用远程服务的服务消费方。Registry: 服务注册中心和发现中心。Monitor: 统计服务和调用次数,调用时间监控中心。(dubbo的控制台页面中可以显示)Container:服务运行的容器。Dubbo服务集群-集群容错模式
架构技术选型与设计-微服务选型
架构技术选型与设计-DUBBO
架构技术选型与设计-DUBBO
架构技术选型与设计-微服务选型Spring Cloud,从命名我们就可以知道,它是Spring Source的产物,Spring社区的强大背书可以说是Java企业界最有影响力的组织了,除了Spring Source之外,还有Pivotal和Netfix是其强大的后盾与技术输出。其中Netflix开源的整套微服务架构套件是Spring Cloud的核心。如果拿Dubbo与Netflix套件做对比,前者在国内影响力较大,后者在国外影响力较大,在背景上可以打个平手;但是若要与Spring Cloud做对比,由于Spring Source的加入,在背书上,Spring Cloud略胜一筹,但是在高并发上dubbo曾经在阿里的运营中实际承载过过亿用户同时在线的,而Netflix 并没有实际的上线应用中体现过。Spring Cloud下面有19个子项目(可能还会新增)分别覆盖了微服务架构下的方方面面,服务治理只是其中的一个方面,一定程度来说,Dubbo只是Spring Cloud Netflix中的一个子集。但是在选择框架上,方案完整度恰恰是一个需要重点关注的内容,当然从高可用和高并发一起考虑,Spring Cloud 无疑是最佳选择。
1、Spring Cloud Config 配置中心,利用git集中管理程序的配置。
2、Spring Cloud Netflix 集成众多Netflix的开源软件
3、Spring Cloud Bus 消息总线,利用分布式消息将服务和服务实例连接在一起,用于在一个集群中传播状态的变化
4、Spring Cloud for Cloud Foundry 利用Pivotal Cloudfoundry集成你的应用程序
5、Spring Cloud Cloud Foundry Service Broker 为建立管理云托管服务的服务代理提供了一个起点。
6、Spring Cloud Cluster 基于Zookeeper, Redis, Hazelcast, Consul实现的领导选举和平民状态模式的抽象和实现。
7、Spring Cloud Consul 基于Hashicorp Consul实现的服务发现和配置管理。
8、Spring Cloud Security 在Zuul代理中为OAuth2 rest客户端和认证头转发提供负载均衡
9、Spring Cloud Sleuth SpringCloud应用的分布式追踪系统,和Zipkin,HTrace,ELK兼容。
10、Spring Cloud Data Flow 一个云本地程序和操作模型,组成数据微服务在一个结构化的平台上。
11、Spring Cloud Stream 基于Redis,Rabbit,Kafka实现的消息微服务,简单声明模型用以在Spring Cloud应用中收发消息。
12、Spring Cloud Stream App Starters 基于Spring Boot为外部系统提供spring的集成
14、Spring Cloud Task App Starters
15、Spring Cloud Zookeeper 服务发现和配置管理基于Apache Zookeeper。
16、Spring Cloud for Amazon Web Services 快速和亚马逊网络服务集成。
17、Spring Cloud Connectors 便于PaaS应用在各种平台上连接到后端像数据库和消息经纪服务。
18、Spring Cloud Starters (项目已经终止并且在Angel.SR2后的版本和其他项目合并
)19、Spring Cloud CLI 插件用Groovy快速的创建Spring Cloud组件应用。Spring Cloud共集成了19个子项目,里面都包含一个或者多个第三方的组件或者框架!
1、spring cloud : 一个云应用工具,为云应用开发的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁定、决策竞选、分布式会话和集群状态管理等操作
2、spring cloud config :配置管理开发工具包
3、 spring cloud Bus :事件消息总线用于集群(例如:配置变化时间)中传播状态变化,与spring cloud config 联合实现热部署
4、 spring cloud Netflix Eureka : 云端负载均衡基础,一个基于Rest的服务,用于定位服务,以实现云端的负载均衡和中间层服务器的故障转移
5、 spring cloud Netflix Hystrix : 容错管理工具,旨在通过控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力
6 、 Netflix ZUUL: 边缘服务工具,提供动态路由、监控、弹性、安全等边缘服务
7、 spring cloud sleuth :日志收集工具包、封装Purpose 、Zipkin和Trace
8、 Spring Cloud Security : 安全工具包,为应用程序添加安全控制,主要是OAuth2
9、 spring cloud turbine :聚合服务器发送时间流,监控集群下Netflix 和 metrics 情况
Spring cloud 配置中心
Spring cloud 注册中心
Spring cloud 网关: 服务路由、安全认证、会话共享、客户端负载均衡、统一异常处理、跨域请求
Spring cloud 断路由
以上是关于微服务架构技术选型的主要内容,如果未能解决你的问题,请参考以下文章
微服务中的Spring Cloud和Spring Cloud Alibaba分别有哪些组件和作用,众多组件中如何做技术选型?