微服务与 Spring Cloud 相关组件汇总与分析

​ 微服务目前越来越火,阿里巴巴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):

容器

编码格式

  • Json
  • Protbuf
  • Thrfit

分布式锁

猜你喜欢

转载自blog.csdn.net/u013741019/article/details/103104229
今日推荐