對於應用服務器來說,當客戶端來訪問時,是否會在服務器保存客戶端的信息(比如:session),如果保存,即客戶端的請求在服務端具備上下文關系,那么就是有狀態服務;
那么無狀態服務便是服務器端不保存客戶端的請求信息,服務器端能獲取到的信息全部來自於請求所攜帶的信息,或者在其他服務器保存的信息(比如專門存session的服務器)
從分布式角度 對比:有狀態服務,多台服務器就session的同步問題,就令人難受:1.大量數據同步,浪費帶寬。2. 多台服務器中都有相同的session副本,浪費大量的內存,3.有狀態,服務宕機可能會存在數據丟失 4.對於高可用的服務,快速擴容時必要的,然而有狀態的服務會有冷啟動的問題,必須先加載數據,方可對外提供服務
一個方案就是使用專門的session服務器來保存session,客戶端登陸的時候會去session服務器進行拿信息,這樣來看,對於應用服務器來說,所有的訪問都是無狀態了。
但是有狀態服務也有好處:不需要去調用別的服務,低延遲,不需要額外的存儲。
對於構建一個高可用的服務,CAP理論上:Consistency (all nodes see the same data at the same time)
Availability ( a guarantee that every request receives a response about whether it succeeded or failed)
Partition tolerance (the system continues to operate despite arbitrary partitioning due to network failures)
但是在實際中,一般只能保證AP 對於一致性,強一致性:實時都可以讀取到最新值,
弱一致性:寫入新值后,有的服務會讀取的到,有些服務讀取不到,
最終一致性:在一段時間后,都可以讀取到最新的值。