微服务目前越来越火,阿里巴巴2019双十一将微服务作为核心,接受了中国剁手党的洗礼。但是涉及到微字,就体现了他的组件非常多,同一个功能的组件,Spring Cloud可能有一个基础版本。其他大厂可能在相关基础上,做出了一系列的优化和修改,产生生了很多不同版本,同时不同组件功能有重合,给系统架构的设计和构建带来很多选择(全都想要~)。
Spring Cloud 之前生态大多数组件由Netflix维护,后来因为分赃不均,很多都处于停止更新的状态。 Spring Cloud Alibaba 作为后起之秀,担起了微服务生态中组件维护的大任。微服务和云原生的应用越来越广,如果没有成熟的社区维护,将不能满足新的需求和解决以前的缺陷。
Spring Cloud 致力于提供微服务一站式解决办法。本文目的是梳理相关组件的概念,整理出其优缺点与适用场景。
1. 两个生态
Spring Cloud Netflix
-
Spring Cloud Netflix:作为Netflix提供的核心组件,可以对多个Netflix OSS开源套件进行整合,包括以下几个组件:
- Eureka:服务治理组件,包含服务注册与发现
- Hystrix:容错管理组件,实现了熔断器
- Ribbon:客户端负载均衡的服务调用组件
- Feign:基于Ribbon和Hystrix的声明式服务调用组件
- Zuul:网关组件,提供智能路由、访问过滤等功能
- Archaius:外部化配置组件
-
Spring Cloud Config:配置管理工具,实现应用配置的外部化存储,支持客户端配置信息刷新、加密/解密配置内容等。
-
Spring Cloud Bus:事件、消息总线,用于传播集群中的状态变化或事件,以及触发后续的处理
-
Spring Cloud Security:基于spring security的安全工具包,为我们的应用程序添加安全控制
-
Spring Cloud Consul : 封装了Consul操作,Consul是一个服务发现与配置工具(与Eureka作用类似),与Docker容器可以无缝集成
Spring Cloud Alibaba
- Sentinel:把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
- Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
- RocketMQ:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。
- Dubbo:Apache Dubbo™ 是一款高性能 Java RPC 框架。
- Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。
- Alibaba Cloud OSS: 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。
- Alibaba Cloud SchedulerX: 阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。
- Alibaba Cloud SMS: 覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。
2. 按功能划分
2.1 服务发现
微服务的核心功能,主要是对所有微服务进行管理。提供服务注册和服务发现功能。
- Eureka Eureka 是 Netflix 出品的用于实现服务注册和发现的工具。ZK保证CP,Eureka保证AP
- etcd:
- Nacos 一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
- zookeeper 它是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。
- dubbo :Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
- Archaius :Netflix Archaius 是一个功能强大的配置管理库。它是一个可用于从许多不同来源收集配置属性的框架,提供对配置信息的快速及线程安全访问。
- OCTO-NS :OCTO-NS 是美团OCTO服务治理体系中负责命名服务的系列模块,包括C++ SDK、Java SDK、 基础代理SGAgent、命名服务缓存NSC、健康检查服务Scanner、ZooKeeper ,搭配管理平台 OCTO-Portal 用户能够便捷的进行服务运营交互。OCTO-NS 基于服务描述信息(tags+weight)实现服务注册/发现、路由分组、负载均衡、健康检测等功能,利用这些服务治理功能用户可以专注于业务逻辑开发、能够追踪线上服务状态、快速处置异常风险。
- Redis : Dubbo可以选用其作为服务发现系统。
- Capition:封装Redis实现服务发现系统。简单高效,但是可用性会比专门的工具低很点。
路由
- Zuul 对请求进行路由的服务网关工具,最近的zuul2采用了Netty实现了异步非阻塞编程模型。动态路由、监控、弹性和安全等边缘服务的框架
- Spring Cloud gateway :给Spring boot提供API网关功能的工具,里面也包含安全处理等特性
链路控制与服务治理
- Sleuth 微服务跟踪(sleuth)其实是一个工具,它在整个分布式系统中能跟踪一个用户请求的过程(包括数据采集,数据传输,数据存储,数据分析,数据可视化),捕获这些跟踪数据,就能构建微服务的整个调用链的视图,这是调试和监控微服务的关键工具
- Zipkin 图形化展示Sleuth分布式链接监控数据并说明字段意义
- Sentinel 在微服务中的作用是对流量进行监控与管理,例如流量的控制,熔断降级,系统负载保护等。
- Htrace,Apache的分布式追踪工具
- OCTO-Portal OCTO-Portalt提供的功能有服务节点管理,包括服务节点展现,节点启用禁用、节点权重调整、删除节点等。
- PinPoint Pinpoint是一款全链路分析工具,提供了无侵入式的调用链监控、方法执行详情查看、应用状态信息监控等功能。基于GoogleDapper论文进行的实现,与另一款开源的全链路分析工具Zipkin类似,但相比Zipkin提供了无侵入式、代码维度的监控等更多的特性。
- Skywarking 分布式链路追踪系统
负载均衡
- Ribbon Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。
- Feign Feign是一个声明式WebService客户端.使用Feign能让编写WebService客户端更加简单,它的使用方法是定义一个接口,然后在上面添加注解,同时也支持JAX-RS标准的注解.Feign也支持可拔插式的编码器和解码器.Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters.Feign可以与Eureka和Ribbon组合使用以支持负载均衡.
服务熔断
- Hystrix 通过添加延迟容忍和容错逻辑,帮助你控制这些分布式服务之间的交互。Hystrix通过隔离服务之间的访问点、停止级联失败和提供回退选项来实现这一点,所有这些都可以提高系统的整体弹性。
- resilience4j Resilience4j 是受Netflix的Hysrix项目启发,专门为Java 8 和函数式编程设计的轻量级容错框架。
- Sentinel 熔断只是它的一个子功能
服务监控与链路监控
- Cat 大众点评开源的入侵式监控
- grafna grafana 是一款采用 go 语言编写的开源应用,主要用于大规模指标数据的可视化展现,是网络架构和应用分析中最流行的时序数据展示工具,目前已经支持绝大部分常用的时序数据库。
- Sping boot Admin Spring Boot Admin是一个开源社区项目,用于管理和监控SpringBoot应用程序。
- Promethues Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB).Prometheus和Heapster(Heapster是K8S的一个子项目,用于获取集群的性能数据。)相比功能更完善、更全面。Prometheus性能也足够支撑上万台规模的集群。
服务配置
- Sping Config
- Alibaba Cloud ACM
- Nacos Config
消息总线
- Spring Cloud Bus
日志服务
- logback
消息队列
- Kafka
- RocketMQ 一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务
- RabbitMQ
- ActiveMQ
- ZeroMQ
- TuboMQ
- nats :go语言实现的高性能分布式消息队列系统。速度很快
远程调用
- gRPC
- Dubbo
- Thrift
- Tars
- OCTO-RPC
对象数据库
- mysql on docker
检索平台
- Solr
- ElasticSearch
- Dejavu ElasticSearch web管理和监控,支持数据导入和导出
- Kibana,Elastic的可视化插件,可以配合Elastic使用可视化查询日志
K-V 数据库
- redis
- mongoDB
- Hbase
- Hive
定时器
- Alibaba Cloud SchedulerX
分布式事务
- Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。
- consul(Raft):
- zookeeper (Paxos):
容器
- docker
- k8s
万级规模 K8s 如何管理?蚂蚁双11核心技术公开 - hulk 美团
编码格式
- Json
- Protbuf
- Thrfit