記錄一下個人對rpc的理解奕枝,目錄如下,
0. Overview
1. Thrift Intro.
2. Grizzly Intro.
3. QuickStart
4. Reference
Overview
- 兩個不同應(yīng)用之間的一問一答帝牡。A應(yīng)用是一個進(jìn)程(java -cp)愚隧,B應(yīng)用是一個進(jìn)程(java -cp)
- 為什么要在兩個應(yīng)用之間切換,所有邏輯都在A做不可以嗎踏揣?可以庆亡。但是這樣A可能就是一個很龐大的進(jìn)程了,受限于單機(jī)的cpu捞稿,disk又谋,mem和GC钝尸,太龐大肯定是不行的。所以這里就需要拆分搂根,那么就跟MapReduce很像
-
MR
里面珍促,一系列低成本的機(jī)器就可以handle龐大的請求量和數(shù)據(jù)量。當(dāng)然還有很多其他原因剩愧,保密猪叙、數(shù)據(jù)互通等等。
Thrift Intro.
先來看看它的架構(gòu)仁卷,
- 頂層黃色是用戶根據(jù)thrift-IDL來定義的
HelloWord.thrift
文件 - 橙色和紅色是運(yùn)行
thrift-0.11.0.exe -gen java Hello.thrift
命令自動編譯的server-client讀寫代碼框架(HelloWord.java) - 紫色Protocol是傳輸協(xié)議(TBinaryProtocol二進(jìn)制型穴翩,TCompactProtocol壓縮型,稠密型锦积,json型芒帕,簡化json型,debug型丰介,6類)背蟆,定義了消息是怎樣序列化和反序列化的
- 藍(lán)紅色Transport是傳輸方式(TSocket阻塞,TFramedTransport非阻塞哮幢,TFileTransport寫文件落盤带膀,TMemoryTransport緩存型,TZlibTransport等)橙垢,定義了消息是怎樣在客戶端和服務(wù)器端之間讀寫通信的
- 底層黑白是I/O具體通信
另外還有2個具體Component垛叨,
- processor處理器,具體實(shí)現(xiàn)類柜某,定義了數(shù)據(jù)輸入嗽元,處理,數(shù)據(jù)輸出的全過程
- server服務(wù)器喂击,監(jiān)聽本機(jī)ip的某端口剂癌,接收數(shù)據(jù)輸入請求,并轉(zhuǎn)發(fā)到processor去(TSimpleServer單線程阻塞惭等,TThreadPoolServer多線程阻塞珍手,TNonblockingServer多線程非阻塞NIO與TFramedTransport配套使用)
Grizzly Intro.
Grizzly是一個基于Java NIO的應(yīng)用程序框架,旨在幫助程序員更好地利用Java NIO API辞做,其中http-server框架有取代tomcat之意琳要,即不用部署tomcat,jetty這樣的servlet容器秤茅,皆因其自帶了內(nèi)嵌服務(wù)器稚补。這樣一個jar包就能跑天下,至于負(fù)載均衡的事還是交給Nginx來take框喳。
從右側(cè)底部開啟课幕,整體是一個HTTP Services
厦坛,核心功能是左側(cè),主要有內(nèi)存管理和I/O策略乍惊。
QuickStart
根據(jù)網(wǎng)上的示例杜秸,用Scala實(shí)現(xiàn)了一些example,希望能夠?qū)χ鴈xample來快速學(xué)習(xí)润绎,快速上手撬碟,
- thrift-rpc
- grizzly-http