解惑soft state

 

最早发现 soft state这个词,是在 brewer一篇 PPT中(不熟悉brewer的,可以看我前面写的一篇文章 ),里面提到了著名的 BASE 准则 :

Basically Availble

Soft-state

Eventual Consistency

 

当时对 soft state百思不得其解,查了很多资料,解释也是千奇百怪。其中,查阅了 brewer自己写的 paper【1】,里面的解释更加让人稀里糊涂。而在著名的 DBAnote的一篇 blog 中,则将 soft state理解为“无连接的”,这样的解释也没有太强的说服力。

 

直到最近,我才找到了一个比较合理的理解。在《Distributed Systems Principles and Paradigms, 2nd》的 3.4节,谈到 client-server架构中的 server端的设计,提出了一个很重要的问题,那就是 whether or not the server is stateless


所谓的 stateless,指的就是在 client server交互过程中, server端是否保存这个 client state(状态信息)。如果不保存,就是 stateless。注意,这里提到的 stateless,只是指 server端没有保存 client的状态信息,并不是说这个交互不存在状态信息。事实上,这个状态信息可以在 client端维护,在交互的时候,如果有必要, client可以将 state作为参数传递给 server。而在 server端一边,由于不需要保存 client的状态信息,可以极大地提高自身的 scalability performance(想象一下,如果一个 stateful server突然崩溃了,那么它要重新恢复到崩溃前的状态是多么的难,因为它不仅需要重启 server程序,还要找回所有 client的状态信息)。

在现在很流行的 REST架构风格中,就明确提出,“所有的操作都是无状态的( stateless)”。

 

stateless对应的就是 stateful server。这两者概念上完全相反,就不多解释了。

 

然而,除了 stateless stateful之外,还存在另外一种方式,就是我们之前提到的 soft state。其实,你可以将 soft state看做是 stateless的一个特殊情况,它的定义就是“ the server promises to maintain state on behalf of the client, but only for a limited time. After that time has expired, the server falls  back  to  default  behavior,  thereby discarding any information it kept on account of  the  associated  client”,简单翻译就是, server端会以 client的名义维护状态,但是仅仅维持一小段时间,过了这段时间, server就会将这些状态信息扔掉(听着有点像 cache)。

书中还提到, soft state这个概念最早来源于计算机网络中的协议设计( protocol design),现在则被用于 server设计中。更多的资料可以参考【2】。

 

顺带提一句,在DBAnote的那篇blog中,还将basically available翻译成“基本可用”,我觉着也不妥。basically在这里翻译成“主要地”更合适,表明BASE准则侧重于满足系统的可用性。事实上,BASE的基本思想就是牺牲数据的一致性来满足系统的高可用性。

 

(其实,到这我也只是对 soft state有了一个模糊地概念,离深入理解还差得远,不过毕竟找到了对应的资料,以后有空的话,可以直接读 paper。)

 

reference

【1】 Cluster-Based Scalable Network Services

【2】 On the Robustness of Soft State Protocols


你可能感兴趣的:(server,performance,reference,protocols,Paradigms,Scalability)