解惑soft state

来源:互联网 发布:windows bat脚本 copy 编辑:程序博客网 时间:2024/06/07 14:56

 

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

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

 

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

 

然而,除了statelessstateful之外,还存在另外一种方式,就是我们之前提到的soft state。其实,你可以将softstate看做是stateless的一个特殊情况,它的定义就是“theserver promises to maintain state on behalf of the client, but only for alimited 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这个概念最早来源于计算机网络中的协议设计(protocoldesign),现在则被用于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


原创粉丝点击