前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何设计一个 RPC 框架

如何设计一个 RPC 框架

作者头像
芋道源码
发布2019-11-04 02:58:53
9590
发布2019-11-04 02:58:53
举报
文章被收录于专栏:芋道源码1024芋道源码1024

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. 服务安全

总结

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

引用

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 芋道源码 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 服务框架的设计
  • 2. 服务框架的功能
  • 3. 服务框架的性能指标
  • 4. 服务治理需要哪些功能?
  • 总结
  • 引用
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档