1、@廖虹劍 提問:
我們想擴展一下 Dubbo 的 thrift 協議,遇到一個問題,consumer -> mosn-client -> provider,現在請求可以正常 decode -> encode 到達 provider,並且 provider 可以正常調用,在返回的時候,數據包已經發回 MOSN,並且成功 decode,但是會阻塞在 read 處直到超時,沒辦法 write 回 consumer。請問有什麼排查思路嗎?MOSN 裏面這個網絡模型看得有點暈。
A:先 read 再 decode 的呀,你說的阻塞在 read 是阻塞在哪?
read 方法已經正常調用,並且 decode了,但是沒有觸發寫事件,consumer端 會一直在等待。然後又會到這裏卡住直到超時
A:數據 read 了沒有新數據,這裏就是會超時啊。你要看 decode 之後做了什麼。
我打斷點看到的 remote ip 和端口是 provider 端的。或者我換一個問法,MOSN 在獲取到 upstream 的響應數據並且 decode 之後,是如何怎麼觸發 encodeResponse 並寫回 writebuffer 的。我調試發現它 read 完數據之後無法進入到 endStream 方法。也沒看到什麼異常日誌。我對 go 還不是特別瞭解,如果有什麼問題還請多指正,辛苦了。
A:你從 Decode 的邏輯往下跟一下就可以了,Dubbo 目前是 xprotocol 協議的實現 Decode 以後會經過 proxy 的流程最後再 encode,然後 write。read 是異步的,這個有點簡單的介紹:
https://mosn.io/blog/code/mosn-eventloop/
找到問題了,是 encode 的時候 replace requestId 的時候出了點問題,導致找不到對應的 stream,感謝~
MOSN:https://github.com/mosn/mosn
2、@Bernie G 提問:
我這邊項目是 Spring Boot,沒有用 Dubbo, 這種情況可以用 Seata 做 Saga 事務嗎?
A:你的服務調用是通過 feign,resttemplate?Saga 跟 RPC 框架不是強綁定的,你的遠程服務可用在被調用方作爲類似 reference bean 的形式調用就可以。
我們這邊主要用的是 RestfulApi 還有 gRPC 來作爲微服務之間的調用, Seata 能支持嗎?如果能給個代碼 Sample 最好。
A:Test 中有 gRPC 的實例,看下是否滿足需求。
https://github.com/seata/seata/tree/develop/integration/grpc
Seata:https://github.com/seata/seata
本週推薦閱讀
1、發佈 SOFABoot v3.4.5 版本,主要變更如下:
支持 triple 線程監控;
升級 sofa-ark 版本至 1.1.5;
升級 junit 版本至 4.13.1;
修復 jvm filter npe 問題;
修復http server 線程池配置問題;
詳細發佈報告:
https://github.com/sofastack/sofa-boot/releases/tag/v3.4.5
2、發佈 SOFAArk v1.1.5 版本,主要變更如下:
修復 web 模塊併發安裝問題;
修復支持 web 環境測試 webContext 默認爲 null 導致的 NPE 問題;
詳細發佈報告:
https://github.com/sofastack/sofa-ark/releases/tag/v1.1.5
瞭解 Service Mesh 技術;
瞭解 Service Mesh 在阿里雲 CDN 邊緣場景的落地實踐;
給到想要落地 Service Mesh 的同學一些案例與建議;
本文歸檔在 sofastack.tech。
本文分享自微信公衆號 - 金融級分佈式架構(Antfin_SOFA)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。