有状态和无状态的架构风格分析

REST,表述性状态转移(REpresentational State Transfer)的简称。是当前比较热门的一种web架构风格。

REST的特征如下:

1,所有的东西都称为资源,通过uri来定义,只也是资源的唯一ID;

2,使用标准的http方法对资源进行操作;

3,所有的通信都是无状态的;

虽然REST包含无状态性(statelessness)的观念,但是在实际的应用中,只是要求服务器端不能保持除了单次请求之外的,任何与其通信的客户 端的通信状态。

如果要获取一个用户的信息,那么uri可能就会是/user/12317,并使用get方法获取信息。当我们修改用户信息是uri可能还是user/12317,但是使用的是put方法来进行操作。所以,在rest风格的架构中,定义uri是非常关键且重要的事情。

这样的风格使得无状态约束的服务器的变化对客户端是不可见的,在系统伸缩性上有很大的好处。

传统的架构中喜欢使用有状态的通信,即客户端或服务器端会保留用户的一些信息,客户端的叫Cookie,服务器端的叫Session。关于Cookie和Session的更多信息,参见本博收藏的《浅谈http的无状态性》。

系统的无状态性或有状态性其实可以共存的,这是根据具体的特点来决定的,只有最合适的架构才是最好的架构 。比如说对个人信息的管理最好是无状态的;如果是购物车的话,使用Session或是Cookie会更好一些。

通过SOA的理念,我们可以把有状态和无状态的服务分开实现和部署,这样的系统架构应该更加的合理一些。

猜你喜欢

转载自rock.iteye.com/blog/709112