無狀態(tài)應用:Stateless Application 是指并不會在會話中保存下次會話中去要的客戶端數(shù)據(jù)啄踊。 每一個會話都像首次執(zhí)行一樣,不會依賴之前的數(shù)據(jù)進行響應螟蝙。
有狀態(tài)的應用: Stateful Application 是指會在會話中保存客戶端的數(shù)據(jù),并在客戶端下一次的請求中來使用那些數(shù)據(jù)。
在無狀態(tài)應用中肌索,會話數(shù)據(jù)將會被存儲在客戶端或者透傳給需要的這些數(shù)據(jù)的服務。在開發(fā)離線應用時包蓝,這是一個非常重要的的因素驶社。通過這種方式來開發(fā),會話數(shù)據(jù)將會被存儲在終端用戶的設備上测萎,例如:當網(wǎng)絡不可用時亡电,用戶將數(shù)據(jù)存儲在自己的設備上,當網(wǎng)絡重新連接時硅瞧,會話數(shù)據(jù)將被上傳并復制到云中份乒。
在分布式系統(tǒng)中,無狀態(tài)應用使實現(xiàn)了分布式水平擴展成為可能腕唧。當分布式系統(tǒng)中的一個組建是無狀態(tài)時或辖,能夠在出現(xiàn)故障時輕松的重新部署,也能夠自由的水平擴展來適應負載枣接。組建之間也能夠方便的使用API來進行通信颂暇。
函數(shù)式編程(Functional Programming)是一種使用非常小的代碼段進行軟件開發(fā)的方法。每一個函數(shù)執(zhí)行的時候都仿佛是首次執(zhí)行但惶,不依賴于之前的內(nèi)容耳鸯。因為所有函數(shù)都是無狀態(tài)的,所以開發(fā)人員可以用多種方式來組裝函數(shù)膀曾,而不必擔心破壞了依賴關系县爬。
所以, 我們在開發(fā)微服務時添谊,一種實現(xiàn)方式是將所有的需要的數(shù)據(jù)進行透傳财喳。比如,當業(yè)務上需要從User類中獲取country國家這個屬性時斩狱,如果不是基于stateless app耳高,那么初期就會將獲取用戶身上的country散落在各個服務中。一旦user類上屬性發(fā)生變化喊废,例如country更加語義的被修改為countryCode祝高,那么帶來的修改量時巨大的,而且很有可能部署之后才發(fā)現(xiàn)對其他服務的影響。使用stateless app,則事情變的簡單了嚷硫,還是上面的例子全庸,每個服務都是通過API的參數(shù)來獲取country的value乞娄,即時user類中的屬性發(fā)生的變化诡延,也不會突然波及很多服務鸦概。
參考文章:
1, stateless app