谈谈后台服务的RPC和路由管理

版权声明:本文由廖念波原创文章,转载请注明出处: 
文章原文连接:https://www.qcloud.com/community/article/147程序员

来源:腾云阁 https://www.qcloud.com/communityweb

 

为何要用RPC和路由管理

RPC的概念其实出现已经好久了,记得笔者读大学的时候,接触到RPC的概念,总以为不重要,画蛇添足:算法

  1. 我掌握好socket通讯这个利器和tcp/ip协议族原理,什么功能不能实现?微信

  2. RPC就跟本地函数调用同样写代码,确实开发效率比较高;我本身把socket相关函数好好封装一下,让代码复用起来,开发效率也很高。网络

  3. 不懂或者不关注网络通讯底层原理,光会函数调来调去,这样的程序员太没有出息了!架构

后来,笔者开始带团队,亲身经历了一些团队协做和IT服务运营过程当中的故事,才发现RPC很是关键。这里分享我经历过的很早之前的两个故事。框架

故事一:有一个基础模块A,被很是多的其余模块远程调用,模块A的门户提供协议文档、API、调用示例代码,每当有人来申请使用,模块A负责人就会给调用方一组接口机的IP,调用方能够给这些IP发网络请求。socket

重视可用性的有追求的调用方,一般在拿到IP后,会把IP写在配置文件里,而且本身在代码里实现必定的容错逻辑:若是某个IP请求连续失败多少次,就一段时间内不要给它发请求了。这个容错逻辑作好可不简单,涉及到不少细节。tcp

大多数的调用方,是把IP写死在代码里,简单的轮询请求这些IP。函数

若是模块A的某台接口机死机了,或者网络局部故障致使某些接口机不可达,不少调用方就会跳起来:大家怎么回事?大家的服务水平怎么这么差!

若是机房裁撤,一些机器IP要下架,模块A负责任会很是头疼:

  1. 首先不知道有哪些人在请求这个IP。读者说:傻啊,抓包看一下不就知道有哪些调用方了?可是要知道有的请求不是持续的,是不按期的访问一下模块A。

  2. 模块A的负责人要大范围的邮件通知调用方改路由(一般要改代码编译发布),过一段时间后,抓包看还有哪些调用方没有改,再挨个敦促修改路由

  3. 有时候某个IP下架了,过了几天,忽然有个调用方跳起来:咱们还在用呢!咱们是写死IP的,代码找不到了,只能拿二进制可执行文件“硬”改

故事二: 一个团队里,一般有不少技术能力、服务意识和责任心都很是强的同事,他们的工做产出质量很是高,每一个远程调用都有次数和成功率的上报(简单的说就是上报到一个监控系统,能够经过监控系统web界面查看曲线图),请求报文中的一些重要但不强校验的字段也都认真填写(例如染色标记),因此他们负责的模块,若是出现异常,很容易经过监控系统和日志监控到,并能快速定位到问题。

可是,也有一些同事责任心和能力不那么突出,重要的监控上报缺失、请求包里一些重要的字段没有填写。有时候服务的故障有异常了好久,被用户投诉才发现,事故报告里老是会出现这样的改进措施:增长对xxx的监控上报,加强服务运营意识。

相似的事故一般会反复出现,管理干部就会拉起一次运动式的梳理和整顿,但过一段时间,肯还会出现。

经过这两个事故可见:若是没有很好的实现RPC和路由管理,IT系统服务质量会过分的依赖人的意识,而这个一般成本很是高、效果也很差。

毫秒服务引擎(msec, 取英文名Mass Service Engine in Cluster的首字母组合)是腾讯一个开源框架,其创做冲动和构建经验,来自QQ后台团队超过10年的运营思考。RPC和路由管理是毫秒服务引擎设计的重要考量点。

毫秒引擎里是怎么作的?

首先,毫秒引擎将每一个服务部署在哪些IP上这些信息集中管理起来,即便是调用外部的非标准服务(咱们叫异构服务),也须要将该外部服务的接口IP配置到毫秒引擎管理系统里。这样涉及到的IP信息就不会散落在代码和各类配置文件里了。

服务之间的调用,统一采用CallMethod()函数的方式,避免代码千奇百怪;按服务名字调用和接口名调用

RPC背后的路由算法对于单机故障、网络局部波动等异常,自动容错。简单的说,路由算法按必定的规则轮转的选择被调用模块的接口机,并统计过去一段时间的调用成功率、时延信息,根据这些信息调整该接口机被选择到的比例。若是某个接口机故障了,那么就不会发送请求给它,从而实现自动容错。

毫秒引擎框架自己,在RPC执行的时候,就上报了不少基础属性和日志,这样保证了服务监控和告警等运营措施不依赖与人的意识。下图是叫作getMP3List这样一个RPC调用的请求数和成功数,这些是不须要业务开发者工做就自动上报。

每一个请求有惟一ID来标识,经过该ID,毫秒引擎能够在框图中直观的呈现该请求通过的模块、模块间的RPC名字等信息,这个一样不须要业务开发者的工做就自动实现:

结语

互联网服务的后台,硬件一般是由大量的廉价机器组成;软件架构一般采起大系统小作、分而治之的思想。这就决定了业务逻辑涉及到大量的网路IO,同时单机故障、网络局部故障是运营的常态。那么,RPC和路由管理就显得尤为重要了。毫秒服务引擎为此提供了一个完整的解决方案。详细的能够见腾讯云服务市场毫秒服务引擎官网,或者微信公众号:msec-engine

相关文章
相关标签/搜索