分布式彈力設計之服務狀態(tài)

今天我們來談一談服務的狀態(tài),服務的狀態(tài)指的是請求是否與不同的服務實例相關。分為兩種,有狀態(tài)和無狀態(tài)。

無狀態(tài)服務重要特征是同一個輸入對于每個服務實例都會有確定的相同的輸出,它要求服務要么是沒有存數(shù)據(jù)只有算法,要么是所有節(jié)點的數(shù)據(jù)均相同。

舉個例子,例如電商系統(tǒng)有多個服務實例,用戶登陸認證后,向購物車中加入商品和查詢購物車中有哪些商品,對于這兩個操作無論分配到那個具體的服務實例,都可以保證得到的數(shù)據(jù)是一致的。

無狀態(tài)服務的優(yōu)點?

方便橫向擴展,運維簡單,可以很容易地增減節(jié)點

如何實現(xiàn)無狀態(tài)服務?

1 服務不保存數(shù)據(jù),服務只提供算法和邏輯,那么自然就不會有狀態(tài),例如有個壓縮文件的服務,他有多個實例,無論調(diào)用那個實例我們均可以得到壓縮的結果。

2 服務保存請求相關的數(shù)據(jù),同時這些數(shù)據(jù)在所有節(jié)點均相同,一般是通過引入第三方的存儲,多個服務實例,依賴同一個第三方服務。這樣也可以實現(xiàn)服務的無狀態(tài)。


有狀態(tài)的服務更加的常見,同一服務的不同實例所擁有的數(shù)據(jù)不一樣,同樣說到登陸這個場景,有狀態(tài)的服務是這樣的,用戶一的登陸狀態(tài)可能只保存在服務A中,當請求分配到服務B時,用戶是未登陸的狀態(tài)。那么有狀態(tài)的服務就必須要保證,每個請求都能準確的落到擁有它狀態(tài)的那個節(jié)點上。常用的做法用一致性hash算法,來實現(xiàn)請求的分配。


有狀態(tài)服務的優(yōu)點

1 本地保存著數(shù)據(jù),在處理時會減少網(wǎng)絡開銷。

2 模型簡單,可用性和一致性容易保證。

有狀態(tài)服務如何保證請求落到同一實例上?

1 簡單的hash取模,或者一致性hash

2 長連接


有狀態(tài)與無狀態(tài)最本質(zhì)的區(qū)別在于,節(jié)點的數(shù)據(jù)是否是全量數(shù)據(jù),無狀態(tài)的服務每個節(jié)點的數(shù)據(jù)均是全量。有狀態(tài)的服務則不是。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 國家電網(wǎng)公司企業(yè)標準(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 12,427評論 6 13
  • feisky云計算、虛擬化與Linux技術筆記posts - 1014, comments - 298, trac...
    不排版閱讀 4,354評論 0 5
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,569評論 19 139
  • 先做個記錄~深深地感到,愛情沒有工作重要
    柚子粒閱讀 204評論 0 0
  • 清晨,丘吉爾同西班牙軍隊一同前進。開始走了好幾天,一路風平浪靜。后來幾天里,隨著逼近敵人的陣地,與反叛者便有了交鋒...
    Joyce小熊閱讀 245評論 0 0

友情鏈接更多精彩內(nèi)容