日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Alibaba Dubbo框架同步调用原理分析-1

發布時間:2025/7/14 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Alibaba Dubbo框架同步调用原理分析-1 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

由于Dubbo底層采用Socket進行通信,自己對通信理理論也不是很清楚,所以順便把通信的知識也學習一下。

n??通信理論

計算機與外界的信息交換稱為通信。基本的通信方法有并行通信和串行通信兩種。

1.一組信息(通常是字節)的各位數據被同時傳送的通信方法稱為并行通信。并行通信依靠并行I/O接口實現。并行通信速度快,但傳輸線根數多,只適用于近距離(相距數公尺)的通信。

2.一組信息的各位數據被逐位順序傳送的通信方式稱為串行通信。串行通信可通過串行接口來實現。串行通信速度慢,但傳輸線少,適宜長距離通信。

串行通信按信息傳送方向分為以下3種:

1)???單工

只能一個方向傳輸數據

2)???半雙工

信息能雙向傳輸,但不能同時雙向傳輸

3)???全雙工

能雙向傳輸并且可以同時雙向傳輸

?

n??Socket

Socket?是一種應用接口, TCP/IP?是網絡傳輸協議,雖然接口相同,?但是不同的協議會有不同的服務性質。創建Socket?連接時,可以指定使用的傳輸層協議,Socket?可以支持不同的傳輸層協議(TCP?或UDP?),當使用TCP?協議進行連接時,該Socket?連接就是一個TCP?連接。Soket?跟TCP/IP?并沒有必然的聯系。Socket?編程接口在設計的時候,就希望也能適應其他的網絡協議。所以,socket?的出現只是可以更方便的使用TCP/IP?協議棧而已。

引自:http://hi.baidu.com/lewutian/blog/item/b28e27fd446d641d09244d08.html

上一個通信理論其實是想說Socket(TCP)通信是全雙工的方式

n??Dubbo遠程同步調用原理分析

Dubbo開源文檔上了解到一個調用過程如下圖

http://code.alibabatech.com/wiki/display/dubbo/User+Guide#UserGuide-APIReference

另外文檔里有說明:Dubbo缺省協議采用單一長連接和NIO異步通訊,適合于小數據量大并發的服務調用,以及服務消費者機器數遠大于服務提供者機器數的情況。


Dubbo缺省協議,使用基于mina1.1.7+hessian3.2.1的tbremoting交互。

  • 連接個數:單連接
  • 連接方式:長連接
  • 傳輸協議:TCP
  • 傳輸方式:NIO異步傳輸
  • 序列化:Hessian二進制序列化
  • 適用范圍:傳入傳出參數數據包較小(建議小于100K),消費者比提供者個數多,單一消費者無法壓滿提供者,盡量不要用dubbo協議傳輸大文件或超大字符串
  • 適用場景:常規遠程服務方法調用

?通常,一個典型的同步遠程調用應該是這樣的: 1,?客戶端線程調用遠程接口,向服務端發送請求,同時當前線程應該處于“暫停“狀態,即線程不能向后執行了,必需要拿到服務端給自己的結果后才能向后執行 2,?服務端接到客戶端請求后,處理請求,將結果給客戶端 3,?客戶端收到結果,然后當前線程繼續往后執行
Dubbo里使用到了Socket(采用apache mina框架做底層調用)來建立長連接,發送、接收數據,底層使用apache mina框架的IoSession進行發送消息。
查看Dubbo文檔及源代碼可知,Dubbo底層使用Socket發送消息的形式進行數據傳遞,結合了mina框架,使用IoSession.write()方法,這個方法調用后對于整個遠程調用(從發出請求到接收到結果)來說是一個異步的,即對于當前線程來說,將請求發送出來,線程就可以往后執行了,至于服務端的結果,是服務端處理完成后,再以消息的形式發送給客戶端的。于是這里出現了2個問題:
  • 當前線程怎么讓它“暫停”,等結果回來后,再向后執行?
  • 正如前面所說,Socket通信是一個全雙工的方式,如果有多個線程同時進行遠程方法調用,這時建立在client server之間的socket連接上會有很多雙方發送的消息傳遞,前后順序也可能是亂七八糟的,server處理完結果后,將結果消息發送給clientclient收到很多消息,怎么知道哪個消息結果是原先哪個線程調用的?

分析源代碼,基本原理如下:
  • client一個線程調用遠程接口,生成一個唯一的ID(比如一段隨機字符串,UUID等),Dubbo是使用AtomicLong0開始累計數字的
  • 將打包的方法調用信息(如調用的接口名稱,方法名稱,參數值列表等),和處理結果的回調對象callback,全部封裝在一起,組成一個對象object
  • 向專門存放調用信息的全局ConcurrentHashMap里面put(ID, object)
  • ID和打包的方法調用信息封裝成一對象connRequest,使用IoSession.write(connRequest)異步發送出去
  • 當前線程再使用callbackget()方法試圖獲取遠程返回的結果,在get()內部,則使用synchronized獲取回調對象callback的鎖,?再先檢測是否已經獲取到結果,如果沒有,然后調用callbackwait()方法,釋放callback上的鎖,讓當前線程處于等待狀態。
  • 服務端接收到請求并處理后,將結果(此結果中包含了前面的ID,即回傳)發送給客戶端,客戶端socket連接上專門監聽消息的線程收到消息,分析結果,取到ID,再從前面的ConcurrentHashMap里面get(ID),從而找到callback,將方法調用結果設置到callback對象里。
  • 監聽線程接著使用synchronized獲取回調對象callback的鎖(因為前面調用過wait(),那個線程已釋放callback的鎖了),再notifyAll(),喚醒前面處于等待狀態的線程繼續執行(callbackget()方法繼續執行就能拿到調用結果了),至此,整個過程結束。
  • 這里還需要畫一個大圖來描述,后面再補了 需要注意的是,這里的callback對象是每次調用產生一個新的,不能共享,否則會有問題;另外ID必需至少保證在一個Socket連接里面是唯一的。
    現在,前面兩個問題已經有答案了,
    • 當前線程怎么讓它“暫停”,等結果回來后,再向后執行?
    ? ? ?答:先生成一個對象obj,在一個全局map里put(ID,obj)存放起來,再用synchronized獲取obj鎖,再調用obj.wait()讓當前線程處于等待狀態,然后另一消息監聽線程等到服務端結果來了后,再map.get(ID)找到obj,再用synchronized獲取obj鎖,再調用obj.notifyAll()喚醒前面處于等待狀態的線程。
    • 正如前面所說,Socket通信是一個全雙工的方式,如果有多個線程同時進行遠程方法調用,這時建立在client server之間的socket連接上會有很多雙方發送的消息傳遞,前后順序也可能是亂七八糟的,server處理完結果后,將結果消息發送給clientclient收到很多消息,怎么知道哪個消息結果是原先哪個線程調用的?
    ? ? ?答:使用一個ID,讓其唯一,然后傳遞給服務端,再服務端又回傳回來,這樣就知道結果是原先哪個線程的了。

    轉載于:https://my.oschina.net/91jason/blog/374171

    總結

    以上是生活随笔為你收集整理的Alibaba Dubbo框架同步调用原理分析-1的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 亚洲高清精品视频 | 美脚の诱脚舐め脚视频播放 | 狠狠干狠狠操视频 | 国产三级精品三级在线 | a级片一区二区 | 香蕉视频亚洲 | 国产精品99久久久久久久 | 污视频网站在线播放 | 亚洲精品视频免费在线观看 | 亚洲自拍激情 | 雷电将军和丘丘人繁衍后代视频 | 国产乱码一区二区三区播放 | 日本一本久久 | 福利视频黄色 | 精品国产污污免费网站入口 | 91嫩草视频在线观看 | 一区二区日韩欧美 | 国产一线av | 亚洲一区二区自拍 | 爱情岛av永久入口 | 欧洲视频一区二区 | 亚洲久草| 国产睡熟迷奷系列精品视频 | 国产a大片| 一个人在线观看免费视频www | 精品无码人妻一区二区免费蜜桃 | 观看毛片| 成人无码视频 | 四川话毛片少妇免费看 | 美女啪啪免费视频 | 久久伊人超碰 | 色偷偷资源网 | 黑人巨大精品欧美 | 久久高清av| 国产成人无码aa精品一区 | 无码国产精品久久一区免费 | 国产免费一区二区三区最新6 | 山村大伦淫第1部分阅读小说 | 久久久久性| 青草草在线| 毛片在线免费播放 | 午夜黄视频 | www.国产精品.com | 日韩欧美一级片 | 精品国产一区二区三区四区阿崩 | 波多野结衣在线视频免费观看 | 日韩中文字幕网 | 青青青网 | japanese国产| 中文字幕高清在线免费播放 | videos麻豆 | 极品美女穴 | 亚洲精品777 | 二区视频在线 | 亚洲国产精品成人综合久久久 | 粉豆av | 亚洲三区在线观看无套内射 | 久久综合久久久久 | 女人十八毛片嫩草av | 欧美乱码精品 | 青青青国产| 日韩欧美无 | 欧美天堂 | 草草影院第一页yycc.com | 久久久久久艹 | 91丨九色丨蝌蚪丨老版 | 午夜av大片 | 国产精品久久久久久白浆 | 久草资源在线 | 69一区二区| 成人免费无码大片a毛片抽搐色欲 | 欧美人禽杂交狂配 | 久综合| 久草免费福利 | 天天插天天操天天干 | 黄色在线观看网址 | 影音先锋激情在线 | 成人免费视频国产免费网站 | 久久久全国免费视频 | 日韩日b视频 | 在线毛片观看 | 免费的毛片 | 青草操 | 粉嫩欧美一区二区三区 | 青娱网电信一区电信二区电信三区 | 国产三级播放 | 国内毛片毛片毛片毛片毛片 | 少妇婷婷 | 香蕉久久夜色 | 亚洲国产精品网站 | 国产黄色免费网站 | 国产免费成人在线视频 | 国产日韩欧美精品一区二区 | 人妻天天爽夜夜爽一区二区三区 | 日韩电影三级 | 日本免费一区二区三区 | 91视频免费观看网站 | 一区二区在线免费观看视频 | free黑人多人性派对hd |