微服务架构技术选型

微服务架构技术选型

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

NacosEurekaConsulZookeeper
一致性协议CP+APAPCPCP
健康检查TCP/HTTP/MYSQL/Client BeatClient BeatTCP/HTTP/gRPC/CmdKeep Alive
负载均衡权重/metadata/SelectorRibbonFabio-
雪崩保护
自动注销实例支持支持不支持支持
访问协议HTTP/DNSHTTPHTTP/DNSTCP
监听支持支持支持支持支持
多数据中心支持支持支持不支持
跨注册中心同步支持不支持支持不支持
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

比较项SentinelHystrix说明
隔离策略信号量隔离(并发线程数限流)(模拟信号量)线程池隔离/信号量隔离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 的有效验证;

对阿里云商用服务提供友好的支持;

整体易用性,性能,及后续发展趋势更胜一筹。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_zxue

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值