百億級企業級 RPC 框架開源了!

今天給你們介紹給一款性能卓越的 RPC 開源框架,其做者就是我推薦每一個 Java 程序員都應該看的《Java 生態核心知識點整理》的原做者張玉龍。html

說實話我第一次看到這個資料的時候,就感受做者是一位真正的技術愛好者,後來經過朋友介紹終於認識了他。交談之中得知他在美團工做,最初和朋友一塊兒整理這份資料的初衷是爲了面試,估計天天須要面試太多的應聘者,這份資料成了助手。強烈建議沒有看這份資料的同窗學習下,做爲 Java 生態知識體系構建也是一份不錯的資源。java

後來得知業餘時間他在研發一款開源的 RPC 開源框架,而且通過測試可支持百億級別的調用,而且於近期終於完成推出 1.0 版本。這款開源軟件名字叫作 Koalas,源代碼地址:koalas-rpc,下面對這款開源軟件作詳細介紹,內容來源於 Koalas 。git

Koalas 介紹

企業生產級百億日 PV 高可用可拓展的 RPC 框架。理論上併發數量接近服務器帶寬,客戶端採用 thrift 協議,服務端支持 netty 和 thrift 的 TThreadedSelectorServer 半同步半異步線程模型,支持動態擴容,服務上下線,權重動態,可用性配置,頁面流量統計,支持 trace 跟蹤等,自然接入 cat 支持數據大盤展現等,持續爲我的以及中小型公司提供可靠的 RPC 框架技術方案。程序員

Thrift 是一種接口描述語言和二進制通信協議,它被用來定義和建立跨語言的服務。它被看成一個遠程過程調用(RPC)框架來使用,是由 Facebook 爲「大規模跨語言服務開發」而開發的。面試

爲何叫 koalasspring

樹袋熊英文翻譯,但願考拉 RPC 給那些不太喜歡動手本身去造輪子的人提供可靠的 RPC 使用環境。apache

爲何要寫這個 RPC

市面上常見的 RPC 框架不少,grpc,motan,dubbo 等,可是隨着愈來愈多的元素加入,複雜的架構設計等因素似使得這些框架和 spring 同樣,雖然號稱是輕量級,可是用起來倒是讓咱們很蹩腳,大量的配置,繁雜的 API 設計,其實,咱們根本用不上這些東西!!!json

我也算得上是在不少個互聯網企業廝殺過,見過不少不少的內部 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 開發本,單機 10000 次請求耗時截圖

10w 次請求,大約耗時 12s,平均 qps 在8000左右,在集羣環境下會有不錯的性能表現

數據大盤展現

koalas2.0 已經接入了 cat 服務,cat 服務支持 qps 統計,可用率,tp90line,tp99line,豐富自定義監控報警等,接入效果圖

豐富的可視參數,流量統計,日,周,月報表展現等。

鏈路跟蹤

對 RPC 服務來講,系統間的調用和排查異常接口,肯定耗時代碼是很是重要的,只要接入了 cat,koalsa-rpc 自然的支持鏈路跟蹤,一切盡在眼前!

最後

做者很是具備技術情懷,在聊天中說就剩這點愛好了,要堅持下去。聽了這句話啥都不說了,點擊下方連接,先 Star 爲敬。

gitee.com/a1234567891…

相關文章
相關標籤/搜索