吐槽公司自研RPC框架

2019年7月底入职了新的公司,是一家创业公司,在架构组负责一些架构方面的工作。公司人员流动略大,公司自研的RPC框架是前人留下的坑,开发团队已全部跑路,因为最近也是第一次接触,写一下自己的吐槽与思考

吐槽点

微服务框架为什么要自研

我觉得没理由,目前开源成熟的服务框架非常多,具有代表性的:

  • spring-cloud体系:强大且易用
  • dubbo(可接入spring-cloud):阿里多年前开源的SOA框架,被很多大公司所用,已是apache顶级项目
  • servicecomb:华为的开源项目,已是apache顶级项目

成熟的开源产品完全能满足一般创业公司的使用,因此,对于现公司,我觉得完全没有理由自研一套

自研却缺少文档

自研也就算了,没有任何使用说明文档,入门时一脸懵逼,加上开发团队全部跑路,只能向使用过的同学学习如何使用

自研的非常差

自研就自研,但是能不能做好一点呢?从该rpc报出的异常栈以及调用方式就能看出其实现非常粗糙丑陋,毫无优雅性可言

这里先说一说微服务框架的几个考虑点,自底向上分别是:

  • 序列化/反序列化
  • 服务端/客户端的抽象,用于处理接受请求与发送请求,封装request/response语义
  • 通信协议,可选择基于tcp或者http,或者其它
  • RPC协议,定义RPC过程中的数据传输方式,支持多种调用方式,比如同步调用,异步调用,不关心返回值以及是否成功的调用等
  • 对集群的抽象,封装负载均衡与失败处理,负载均衡可使用roundover, hash等,失败处理可提供failover, failfast等方式,现在的服务框架的负载均衡都使用了软负载
  • 服务主册与服务发现
  • api/stub/与已有框架的结合等
  • 服务治理

但该rpc完全没有考虑上述问题,或者说考虑的非常之少,该rpc的相关情况:

  • 序列化/反序列化:json,半自动化,往往还需要人工做json反序列化
  • 服务端/客户端的抽象:几乎没有,使用静态方法调用,也没有IO处理,依赖应用本身的tomcat,不是说这样不行,但是太粗糙
  • 通信协议:基于http,依赖应用的tomcat以及8080端口,不是说不能使用http协议,使用http协议是没问题的,但是依赖应用的tomcat并不是一个好的方案,因为这样导致应用系统需要关心rpc框架的细节,比如想要写一个Servlet Filter对请求进行拦截,我们需要考虑该Filter会不会拦截到rpc请求
  • 负载均衡与失败处理:无考虑,根据异常栈就能看出该rpc的服务注册与服务发现过于粗糙,它是通过域名做http调用,负载均衡依赖nginx,没有软负载,不支持失败处理
  • 服务注册与服务发现:基于域名的而不是基于服务的,粒度太粗了,这就导致没法实现对服务的精细化管控,比如A/B测试,兼容性的平滑处理等
  • api实现极其丑陋,没有stub或者远程代理这样的概念,rpc的调用是纯手动处理的json,调用方式如下:
String jsonResult = RemoteClientUtil.callRpc(”appName.serviceName“, JSON.toJsonString(params));
Result result = JSON.parseObject(jsonResult, Result.class);
  • 完全没有服务治理能力,且没法接入spring-cloud体系,利用spring-cloud的相关能力

毫无扩展性

该自研的rpc框架非常不完善,并且很难与已有的开源项目结合,对于流程管控、服务治理的需求,该rpc框架难以满足
如果要重构,那基本上是重写,目前大量系统在使用,涉及到的系统改造非常大,基本上不现实

总结

对于这样的rpc框架,如果只论技术,它做的非常差,在rpc框架中,它就是demo级别的存在,不有参考价值。
当然,你可以说小公司不需要dubbo,不需要spring-cloud,但是我不这样认为,我认为我们当前对spring-cloud中的组件还是有需求的,但是该rpc没有考虑如何融入到成熟的微服务体系,抬高了我们使用这些成熟组件的门槛

虽然我没有自研过rpc框架,但见到该rpc框架后也要吸取教训,自研基础组件一定要考虑周全,尽量避免与应用共享资源,需要考虑扩展性

最后建议优先选择开源体系作为微服务架构的基础,如果有不满足公司特定需求的可基于开源组件改造

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容

  • # 背景 # 关键设计点 ## 模块化 ## 资源隔离 ## 权限控制 ### RPC框架的需求分析和概要设计 #...
    65902f77f84d阅读 1,198评论 0 0
  • 一 传统垂直mvc项目 1.垂直架构图 通常mvc并不包括数据访问层,运行也比较简单,直接运行在一个tomcat等...
    千锋陈老师阅读 486评论 0 0
  • 自打我进简书以来 就独得简叔的恩宠 这后宫佳丽三千啊 简叔就偏偏宠我一人 我劝简叔一定要雨露均沾 可简叔非是不听呐...
    此木梅花阅读 815评论 6 18
  • 今天早晨,早起洗漱之后,去参加了一次技术大会,看到了云计算领域发展的最新的动态,听到了软件业内的目前最具优势的演讲...
    LiHongxi阅读 81评论 0 0
  • 平时喜欢打篮球,知道自己上肢力量比较弱,为了在对抗中能保持优势,办了张健身房的卡,通过训练以加强上肢力量。 去过健...
    学习之术阅读 350评论 0 0