SpringCloud Netflix & Sprin gCloud Alibaba
什么是 Spring Cloud ?
Spring Cloud 是构建在 Spring Boot 基础之上,用于快速构建分布式系统的通用模式的工具集。或者说,换成大家更为熟知的,用于构建微服务的技术栈。
而后,不同厂商结合自身的中间件,提供自身的SpringCloud套件,例如:
- Netflix 结合自己的 Eureka、Ribbon、Hystrix 等开源中间件,实现了 spring-cloud-netflix
- Kubernetes 结合自己的 apiserver、configmap 等功能,实现了 spring-cloud-kubernetes
- Alibaba 结合自己的 Nacos、Dubbo、Sentinel 等开源中间件,实现了 spring-cloud-alibaba
当然SpringCloud还是提供了自身的一些组件的:
- API 网关:Spring Cloud Gateway
- 配置中心:Spring Cloud Config、Spring Cloud Vault
- 链路追踪:Spring Cloud Sleuth
- 消息驱动:Spring Cloud Stream
- 事件总线:Spring Cloud Bus
- 服务调用:Spring Cloud OpenFeign、RestTemlete
- 负载均衡:Spring Cloud Load Balancer
下面我们把 Spring Cloud 官方、Netflix、Alibaba 三者整理成如下表格:
SpringCloud 官方 | Netflix | Alibaba | |
---|---|---|---|
配置中心 | Spring Cloud Config、Spring Cloud Vault | Archaius | Nacos |
注册中心 | Eureka | Nacos | |
服务调用 | Spring Cloud OpenFeign、RestTemlete | Dubbo | |
负载均衡 | Spring Cloud Load Balancer | Ribbon | Dubbo |
服务容错 | Hystrix | Sentinel | |
API网关 | Spring Cloud Gateway | Zuul | |
消息驱动 | Spring Cloud Stream RabbiltMQ、Spring Cloud Stream Kafka | Spring Cloud Stream RecketMQ | |
事件总线 | Spring Cloud Bus | Spring Cloud Bus RecketMQ | |
链路跟踪 | Spring Cloud Sleuth | ||
分布式事物 | Seate | ||
分布式调度 | SchedulerX |
Spring Cloud Alibaba 套件
Spring Cloud Alibaba 套件,阿里开源组件、阿里云商业组件整合进 Spring Cloud 体系当中,同时对 Spring Cloud Gateway、OpenFeign、Ribbon 等等进行集成。
主要功能如下:
- 服务注册与发现:适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。
- 分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新。
- 服务限流降级:默认支持 WebServlet、WebFlux, OpenFeign、RestTemplate、Spring Cloud Gateway, Zuul, Dubbo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。
- 消息驱动能力:基于 Spring Cloud Stream 为微服务应用构建消息驱动能力。
- 分布式事务:使用 @GlobalTransactional 注解, 高效并且对业务零侵入地解决分布式事务问题。
Spring Cloud 和 Spring Boot 的区别和关系?
Spring Boot 专注于快速方便的开发单个个体微服务。
Spring Cloud 是关注全局的微服务协调整理治理框架以及一整套的落地解决方案,它将 Spring Boot 开发的一个个单体微服务整合并管理起来,为各个微服务之间提供:配置管理,服务发现,断路器,路由,微代理,事件总线等的集成服务。
Spring Boot 可以离开 Spring Cloud 独立使用,但是 Spring Cloud 离不开 Spring Boot ,属于依赖的关系。
什么是微服务?
查看文献:什么是微服务?
微服务的优缺点分别是什么?
优点
- 每一个服务足够内聚,代码容易理解
- 开发效率提高,一个服务只做一件事
- 微服务能够被小团队单独开发
- 微服务是松耦合的,是有功能意义的服务
- 可以用不同的语言开发,面向接口编程
- 易于与第三方集成
- 微服务只是业务逻辑的代码,不会和 HTML、CSS 或者其他界面组合
- 可以灵活搭配,连接公共库/连接独立库
缺点
- 分布式系统的负责性
- 多服务运维难度,随着服务的增加,运维的压力也在增大
- 系统部署依赖
- 服务间通信成本
- 数据一致性
- 系统集成测试