百亿级企业级 RPC 框架开源了!

  • 时间:
  • 浏览:0
  • 来源:大发快三_快三最新版_大发快三最新版

今天给亲戚亲戚朋友介绍给一款性能卓越的 RPC 开源框架,其作者可是 我推荐每个 Java 程序员都应该看的《Java 生态核心知识点整理》的原作者张玉龙。

说实话我第一次看后这些 资料的并且,就感觉作者是一位真正的技术爱好者,并且通过亲戚亲戚朋友介绍终于认识了他。交谈之中得知他在美团工作,最初和亲戚亲戚朋友并肩整理这份资料的初衷是为了面试,估计每天时需面试很多的应聘者,这份资料成了助手。强烈建议没有看这份资料的同学学习下,作为 Java 生态知识体系构建也是一份不错的资源。

并且得知业余时间他在研发一款开源的 RPC 开源框架,如何让经过测试可支持百亿级别的调用,如何让于近期终于完成推出 1.0 版本。这款开源软件名字叫做 Koalas,源代码地址:koalas-rpc,下面对这款开源软件做完整篇 介绍,内容来源于 Koalas 。

Koalas 介绍

企业生产级百亿日 PV 高可用可拓展的 RPC 框架。理论上并发数量接近服务器下行速率 ,客户端采用 thrift 协议,服务端支持 netty 和 thrift 的 TThreadedSelectorServer 半同步半异步程序模型,支持动态扩容,服务上下线,权重动态,可用性配置,页面流量统计,支持 trace 跟踪等,绿帘石接入 cat 支持数据大盘展示等,持续为我所有人以及中小型公司提供可靠的 RPC 框架技术方案。

Thrift 是本身生活接口描述语言和二进制通讯协议,它被用来定义和创建跨语言的服务。它被当作一一一个多远程过程调用(RPC)框架来使用,是由 Facebook 为“大规模跨语言服务开发”而开发的。

为那先 叫 koalas

树袋熊英文翻译,希望考拉 RPC 给那先 不太喜欢动手我所有人去造轮子的人提供可靠的 RPC 使用环境。

为那先 要写这些 RPC

市面上常见的 RPC 框架可是 有,grpc,motan,dubbo 等,如何让随着很多的元素加入,复杂化的整理等因素似使得那先 框架和 spring 一样,实在号称是轻量级,如何让用起来却是让亲戚亲戚朋友很蹩脚,小量的配置,复杂化的 API 设计,实在,亲戚亲戚朋友根本用不上那先 东西!!!

我也算得上是在可是 有个互联网企业厮杀过,见过可是 有可是 有的结构 RPC 框架,有些优秀的设计让我非常赞赏,有一天我一直想着,为那先 不对那先 设计原型进行聚合归类,于是我所有人搞一套【轻量级】 RPC 框架呢,于是利用业余时间开发此项目,希望源码对亲戚亲戚朋友对认识 RPC 框架起到推进的作用。

技术栈

  • thrift 0.8.0
  • spring-core-4.2.5,spring-context-4.2.5,spring-beans-4.2.5
  • log4j,slf4j
  • org.apache.commons(v2.0+)
  • io.netty4
  • fastJson
  • zookeeper
  • 点评cat(V3.0.0+ 做数据大盘统计上报等使用,可不配置)
  • AOP,反射代理等

技术架构

Koalas 架构图

序列化

考察了可是 有个序列化组件,其中包括jdk原生,kryo、hessian、protoStuff,thrift,json等,最终选折 了Thrift,愿因如下:原生JDK序列化反序列化下行速率 堪忧,其序列化内容太过全面kryo和hessian,json相对来说比原生JDK强有些,如何让对跨语言支持一般,可是 有舍弃了,最终想在protoBuf和Thrift协议上端选折 一套框架,这些 框架很相通,支持跨语言,时需静态编译等等。如何让protoBuf不带RPC服务,本着提供多套服务端模式(thrift rpc,netty)的清况 下,最终选折 了Thrift协议。

IO程序模型

原生socket可很多能模拟出简单的RPC框架,如何让对于大规模并发,要求吞吐量的系统来说,也就算得上是一一一个多demo级别的,可是 有BIO肯定是不考虑了,NIO的模型在序列化技术选型的并且愿因着说了,Thrift本身生活支持可是 有个io程序模型,同步,异步,半同步异步等(SimpleServer,TNonblockingServer,THsHaServer,TThreadedSelectorServer,TThreadPoolServer),其中吞吐量最高的肯定是半同步半异步的IO模TThreadedSelectorServer了,具体愿因亲戚亲戚朋友可自行google,这次不做多的阐述,选折 好了模型并且,发现thrift岂一定会可是 神器一样的所处,再一想,对于服务端来说,IO模型缘何能少得了Netty啊,可是 有下决心也要支持Netty,如何让很遗憾Netty目前没有对Thrift的序列化解析,拆包粘包的处里,如何让有protoBuf,和http协议的封装,缘何办,我所有人在netty上写对thrift的支持呗,实在工作量大了有些,如何让一想netty不可是 干这些 事儿的嘛- -!

服务发现

支持集群的RPC框架上端,像dubbo,愿因着是有些三方框架,对服务发现都进行的封装,没有自研RPC励志的话 ,服务发现就要我所有人来写了,没有简单小巧容易上手的zookeeper肯定是首选了。

内容展示

实际性能压测

8C 16G mac 开发本,单机 20000 次请求耗时截图

10w 次请求,要花费 耗时 12s,平均 qps 在20000左右,在集群环境下会有不错的性能表现

数据大盘展示

koalas2.0 愿因着接入了 cat 服务,cat 服务支持 qps 统计,可用率,tp90line,tp99line,丰富自定义监控报警等,接入效果图

丰富的可视参数,流量统计,日,周,月报表展示等。

链路跟踪

对 RPC 服务来说,系统间的调用和排查异常接口,选折 耗时代码是非常重要的,假如接入了 cat,koalsa-rpc 绿帘石的支持链路跟踪,一切尽在身前!

最后

作者非常具有技术情怀,在聊天中说就剩这点爱好了,要坚持下去。听了这句话啥一定会说了,点击下方链接,先 Star 为敬。

https://gitee.com/a1234567891/koalas-rpc