微服務間通信最好是無狀態的,無狀態是什麼意思? 除了Rest API, 微服務間通信可以使用RPC嗎?

Software -丁哥开讲
709粉絲
7 次觀看·2020年7月25日
嗨 大家好 我們來看這個朋友的消息
這個朋友說 丁哥 我是個剛踏入網絡編程的菜鳥
想請教幾個問題啊
你反覆提到 v服務間的通信必須是無狀態的
可以解釋一下無狀態所代表的意思嗎
也不是說必須是無狀態的 你可以是有狀態的啊
只不過有狀態呢 會讓你的程序設計變得非常之複雜
所以啊 v服務之間的 這種通信的推薦使用無狀態的啊
那我們現在說一下什麼是啊 無狀態的請求啊
所以無狀態的請求就是說 你這一個請求就是一個原子操作啊
要不就獲取一段數據啊 就拿回來 要不成功 要不就失敗 對吧
或者你去修改一些數據啊 成功或者失敗啊
它不會影響到你下面的請求 也不會依賴於你上面的一個請求啊
這就是啊 無狀態的請求的一個設計啊
那我們已經說過很多次了 是吧
這個請求進來以後 會先到controller這一層啊
controller就負責解析你的輸入信息的啊
這輸入信息包含你的令牌 你的安全認證這一塊啊
這塊過了以後呢 就會讀取你的輸入啊
比如pass variable啊 或者是url裏面那個parameter啊
然後就是你的body啊 這塊數據的輸入的部分啊
然後根據你的這種請求的命令啊
比如說get,put,post,delete,patch等等啊
根據這些命令來做對應的一些處理啊
這個時候就會進入到service或者repository這裏面
去做一些邏輯的計算
計算完了以後就跟你數據庫相關了 對吧
讀取數據庫也好啊 然後修改數據庫也好啊
最後返回結果啊 這個結果呢
有可能就返回一個code啊 有可能就返回一個payload啊
這主要是看你的整個設計如何的啊
好 接下來我們看下面一個問題
他說 另外一個問題呢
v服務竟然除了rest API通信以外啊
可以用RPC進行通信嗎 當然是可以的啊
像我們在設計v服務的API的時候有三種方式啊
一個是rest API 一個是grpc 再一個是graphql啊
其中只有grpc啊 它是用http2.0的協議的啊
其他的rest API和graphql都是基於http1.0和1.1的啊
這裏面有什麼區別呢
就是http2.0現在所有的主流瀏覽器都不支持
也就是說你如果啊用grpc寫API的話
你的網頁程序是無法訪問的啊
這是你在使用grpc的時候必須要了解的一個問題啊
當然你像安卓這種客戶它能不能訪問可以 沒問題啊
好 還有一個區別啊
就是grpc它傳的是binary data
也就是二斤只的數據啊
這種數據的好處啊 它的數據量啊比較小啊
這樣子會導致它的傳輸速度比較快啊
這也是grpc的一個優勢啊
再一個問題呢
它的可讀性比較差
因爲它是binary的啊
我們人類的話打開這個東西我們可能就讀不出來對吧
全是全是這種二斤只啊
就亂碼啊
因爲用文本沒人去打開就是亂碼
你說你看不懂對吧
但是像rest API和graphql呢
因爲它是文本啊
你基本上就能夠看懂人類可讀的一種數據格式啊
這是跟第二個問題相關的一些信息分享給大家啊
好的這個視頻先到這裏
我們下個視頻再見
謝謝
