什么是 Spring Cloud ?
一套开发微服务的全家桶工具
服务注册与发现, 负载均衡, 服务间调用, 服务隔离与熔断, 配置中心, 应用网关, 全链路追踪
Spring Cloud Netflix
Eureka / Ribbon / Hystrix / Zuul
Spring Cloud
Config / GateWay / Sleuth
Spring Cloud Alibaba
spring cloud 标准的实现,以微服务为核心的整体解决方案
Nacos / Dubbo / Sentinel / Seata / RocketMQ
--------------------------------------
rpc Remote Procedure Call
rpc 远程过程调用协议, 简单说就是调用远程方法, 像调用本地方法一样方便,无需关心被调用的方法部署在哪里
rpc 用到了动态代理,序列化和反序列化,NIO 通信
--------------------------------------
spring cloud 与 dubbo 有什么区别
spring cloud 是一套微服务组件,比较全面
dubbo 刚开始只是一个 RPC 调用框架,spring cloud 是一套微服务解决方案
dubbo 服务调用的性能比 spring cloud 高,底层通过 netty 的 nio 和 linux 的 epoll 在网络层面做了优化,基于 TCP 协议传输,spring cloud 采用的是 http 协议的 rest api 风格
--------------------------------------
微服务拆分原则,高内聚低耦合
1.微服务之间尽量不要有业务交叉
对用户的管理都要内聚成用户微服务去做
下单微服务就不要操作收货地址了,应该通过用户微服务去做
2.微服务之间只能通过接口进行服务调用,不能直接访问对方的数据
3.高内聚低耦合,微服务与微服务之间,从上到下
微服务与微服务之间同步或异步
service 的变化尽量不影响 controller 的稳定
--------------------------------------
DDD Domain-Driver-Design
--------------------------------------
-------------------------------------------------------
注册中心
-------------------------------------------------------
eureka zookeeper
eureka 是基于 AP, zookeeper 是基于 CP
eureka 的设计者认为, 在集群出现分区的时候, 注册中心提供可用的和未及时更新的数据, 好过拿不到数据好, 应用实例的注册信息在集群内部节点间并不是强一致的, 就需要客户端支持负载均衡与失败重试, ribbon 可以提供这个功能
eureka 跟 zuul, ribbon 整合的比较好,都是 netflix 公司出的
-----------------------------------
eureka nacos
nacos 有控制台页面,服务下线更方便,eureka 没有控制台页面,要发请求下线
eureka 不支持项目隔离,nacos 有 namespace,group id
eureka 集群,客户端直接配多个连接节点,nacos 需要配虚拟 ip
-------------------------------------------------------
应用网关 Zuul / gateway
不同点
gateway 性能比 zuul 高一些,zuul 每个请求一个线程,请求完才释放
zuul 只支持同步,gateway 支持异步
gateway 扩展性更好
gateway 是用的 NettyWebServer, zuul 是用的 springboot 里的 默认 tomcat
相同点
底层都是 servlet
都是 web 网关,处理 http 请求
-------------------------------------------------------
hystrix sentinel
hystrix 里面的线程池隔离,会造成线程上下文切换的开销,性能不是很好
sentinel 是通过并发线程数和服务响应时间来做流控和熔断降级,没有线程上下文切换的开销,也不需要预留线程池资源,
性能会好一些
sentinel 的控制台比 hystrix 的更好用更方便
-------------------------------------------------------