⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 jianshu.com/p/fd840c643d69 「莫那一鲁道」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注**微信公众号:【芋道源码】**有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

1. 服务框架的设计

尽管不同的分布式服务框架实现细节存在差异,但是核心功能差异不大,下面的架构图描绘了一个分布式服务框架的整体逻辑架构。

总共分为 3 层:

  1. 服务层,Service,其中主要部分就是动态代理,主要用于将服务提供者的接口封装成远程服务调用。上层的服务接口用于 Spring 之类的业务框架使用,也是 Spring 的 bean.
  2. 过滤器层,服务调用职责链,提供多种调用切面供框架自身和使用者扩展,例如负载均衡,性能统计,服务调用完成通知,失败重试等。
  3. RPC 层,这里就是 RPC 框架的核心部分,包括通信框架,序列化框架,还有用于屏蔽底层通信框架和序列化框架的抽象接口。

分布式服务框架通常会包含另外两个重要功能:服务治理中心服务注册中心

1. 服务注册中心:负责服务的发布和通知,通常支持对等集群部署,某个节点宕机不会影响整个集群不可用。即使全部宕机,只影响新的节点注册和发布,不影响现有的,因为客户端需要缓存服务路由信息。

2. 服务治理中心: 服务治理中心通常包括服务治理接口服务治理 Portal,架构师,测试人员和系统运维人员通过服务治理 Portal 对服务的运行状态,历史数据,健康度和调用关系等进行可视化的分析和维护,目标是要持续优化服务,防止服务架构腐化,保证服务高质量运行。

2. 服务框架的功能

虽然每个服务框架不尽相同,但是还有有一些核心功能是相同的,比如以下功能:

  1. 服务订阅发布:比如,配置化发布和引用服务,服务自动发现,服务在线注册和取消注册。
  2. 服务路由:比如,默认提供随机路由,轮询,基于权重的路由,粘滞连接,路由定制功能。
  3. 集群容错:比如,Failover(失败自动切换),Failback(失败自动恢复),Failfast(快速失败)。
  4. 服务调用:需要支持:同步调用,异步调用,并行调用。
  5. 多协议:包括私有协议,公有协议。
  6. 序列化方式:需要支持二进制和文本类序列化方式。
  7. 统一配置:支持本地静态配置,支持基于配置中心的动态配置。

以上功能可以按照业务定制,不需要 100% 支持。

3. 服务框架的性能指标

分布式服务框架的性能肯定比不上本地调用,原因是:网络通信,序列化,反射调用,动态代理这些都会消耗性能。所以需要有性能指标。

  1. 高性能:在同等资源占用情况下,单服务提供者的 TPS 要尽量高。
  2. 低延时:在同等资源占用情况下,服务调用延时要尽量低。
  3. 性能线性增长:如果增加了服务提供者,整体性能要能够线性增长。
  4. 可靠性:服务注册中心的可靠性,网络链路的可靠性。

4. 服务治理需要哪些功能?

  1. 服务运行态监控,例如通过路由导流,限流,服务降级,动态控制超时时间。
  2. 服务监控,性能统计,报表,报警。
  3. 服务生命周期管理
  4. 故障快速定位
  5. 服务安全

总结

以上就是在设计分布式服务框架需要注意的地方,例如整体架构的设计,框架需要哪些功能,框架的需要保证哪些性能。同时,一个框架只是可以使用时不够的,还需要服务治理,保证服务不被腐化,同时保证服务的健康。

引用

《分布式服务框架——原理和实践》——李林峰

文章目录
  1. 1. 1. 服务框架的设计
  2. 2. 2. 服务框架的功能
  3. 3. 3. 服务框架的性能指标
  4. 4. 4. 服务治理需要哪些功能?
  5. 5. 总结
  6. 6. 引用