微服务架构技术选型

微服务架构技术选型

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 的有效验证;

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

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

你可能感兴趣的:(java,微服务,微服务,java,spring,cloud)