围绕springboot构建的spring cloud生态下,目前有两类的比较的实现,一个是基于netflix、另一个是基于alibaba。
spring cloud netflix
常见的服务组件
融合在每个微服务中、依赖其他组件并为其提供服务。
- Ribbon,客户端负载均衡,特性有区域亲和、重试机制。
- Hystrix,客户端容错保护,特性有服务降级、服务熔断、请求缓存、请求合并、依赖隔离。
- Feign,声明式服务调用,本质上就是Ribbon+Hystrix。
- Stream,消息驱动,有Sink、Source、Processor三种通道,特性有订阅发布、消费组、消息分区。
- Bus,消息总线,配合Config仓库修改的一种Stream实现按。
- Sleuth,分布式服务追踪,需要搞清楚TraceID和SpanID以及抽样,如何与ELK整合。
独自启动不需要依赖其他组件,单枪匹马都能干。
- Eureka,服务注册中心,特性有失效剔除、服务保护。
- Dashboard,Hystrix仪表盘,监控集群模式和单点模式,其中集群模式需要收集器Turbine配合。
- Zuul,API服务网关,功能有路由分发和过滤。
- Config,分布式配置中心,支持本地仓库、SVN、Git、Jar包内配置等模式。
各个组件的职责
每个组件都不是平白无故的产生的,是为了解决某一特定的问题而存在。
- Eureka和Ribbon,是最基础的组件,一个注册服务,一个消费服务。
- Hystrix为了优化Ribbon、防止整个微服务架构因为某个服务节点的问题导致崩溃,是个保险丝的作用。
- Dashboard给Hystrix统计和展示用的,而是监控服务节点的整体压力和监控情况。
- Turbine是集群收集器,服务于Dashboard的。
- Feign是方便我们程序员写更优美的代码的。
- Zuul是加在整个微服务最前沿的防火墙和代理器,隐藏微服务节点IP端口信息,加强安全保护的。
- Config是为了解决所有微服务各自维护各自的配置,设置一个统一的配置中心,方便修改配置的。
- Bus是因为config修改完配置后各个节点都要refresh才能生效势在太麻烦,所以交给bus来通知服务节点刷新配置的。
- Stream是为了简化研发人员对MQ使用的复杂度,弱化MQ的差异性,达到程序和MQ松耦合。
- Sleuth是因为单次请求在微服务节点中跳转无法追溯,解决任务链日志追踪问题的。
spring cloud alibaba
alibaba的spring coud生态中,提供了微服务开发中必须要用到的组件,就像Spring Cloud一样,通过这些组件以及简化的变成模型使得开发者对于微服务架构的开发变得更简单。
目前Spring Cloud Alibaba这个生态中,已经有相对成熟的体系
- Dubbo,用于实现高性能Java RPC通信
- Nacos,服务注册发现、配置管理、服务管理
- Sentinel,流量控制、熔断降级、系统负载保护
- RocketMQ,分布式消息系统,提供低延时的、高可靠的消息发布与订阅服务
- Seata,高性能微服务分布式事务解决方案
- 【商业】Alibaba Cloud OSS阿里云对象存储服务(Object Storage Service,简称OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。你可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。
- 【商业】Alibaba Cloud SchedulerX 阿里中间件团队开发的一款分布式任务调度产品,支持周期性的任务与固定时间点触发任务。
- Alibaba Cloud SMS覆盖全球的短信服务,友好、高效、智能的互联化通信能力,帮助企业迅速搭建客户触达通道。
项目组成部分
项目由两部分组成,一部分是开源组件,另一部分是云产品。
开源组件,他的前缀是:spring-cloud-alibaba,他有几个特性。
- 服务发现
- 配置管理
- 安全高可用性
云产品项目前缀是:spring-cloud-alicloud,他有几个特性。
- 对象存储服务(OSS)
- 任务调度(SchedulerX)
- 日志服务(SLS)