使用REST理念构建可伸缩性的J2EE框架
1. 基于J2EE规范的框架通常会使用SESSION,而SESSION则会影响集群的效率,因为集群间要进行SESSION的同步;
而因为集群间要进行同步,也同时使得集群的扩展数据以及集群的空间距离有了限制;
对于需要超大规模机器(如1000台)以及需要跨地域部署(如中国,美国)的集群
对于超大规模机器可采用在负载均衡端进行校验的方式,而对于跨地域部署则必须采用一种可信任的信息校验算法来确保信息的正确性(可以看一下数字签名或MD5等)
或对于请求本身的CRUD进行不同规格的校验;
对于该架构,认为用户的状态应保留在客户端,服务端无须保留;但问题在于,因为全在客户端,如果客户端异常,保留的数据将全部丢失;
该架构要求客户端必须启用COOKIE;
方案:
使用将状态存留在客户端的办法,COOKIE存储的不仅是SESSION,还有COOKIE相关的用户ID,以及所有的状态;
服务器端前台的负载均衡或者APACHE用来认证ID及SESSION,如通过,则进行后面请求;
需了解内容:
负载均衡或者APACHE能否进行认证功能;
rest可使用加密的用户名密码串作为COOKIE,从而实现认证机制;其它状态则采用COOKIE存储;
该安全性相当于MD5,当然,因为其每次请求都提交串,故从安全性上讲,略小于MD5;
但同样,不通过网络监听以及浏览器的人工修改参数不可能做到攻击,故相对是安全的;
同时,需注意接口分离,即认证和认证数据缓存以及认证数据获取必须分离;
2. 缺点:
1. 用COOKIE来代替session ,从而实现客户端保持状态的功能,由于COOKIE一般只有4097字节(小于20个COOKIE,小于4K),即限制了状态可存信息的大小;可通过限制应用场景来保证大小不超出,或通过特殊的标志位来确保对这种情况做特殊处理(如服务器端启用SESSION或服务器端使用ThreadLocal存储,总之退化为有状态服务器);
2. 客户端保持状态,每次发送状态,会增加网络开销;
3. 模型的适用及假设
模型采用增加客户端与服务器端网络开销的代价来换取免除服务器端SESSION同步及相互通信的开销,从而使服务器可超大集群以及跨地域部署(需解决认证问题) 而网络开销的代价可通过跨地域部署来降低;
故模型的前提或者适用情形为:
服务器端的SESSION的主要作用为个人身份认证,以及极少量的个性化数据;
服务器端的瓶颈不在于网络和数据库,而在于应用服务器;
4. 需完善
1.信任的信息校验算法是否存在;
2.负载均衡端的校验必须足够简单,利于快速执行;
3.配合分布式文件系统,是否可以实现应用服务器与存储层的结合;
------REST可解决的问题是:
状态回服务端回到客户端,但带来的问题是:服务端如何确认客户端所提交的状态,客户端如何存储非常大的状态
加密/解密算法:
应当满足这件一种条件,数据加密传输,服务器端解密,但解密后应为与原数据不同的数据;
但要求,该数据与源数据必须是一对一的关系,同时,加密后的数据不可能通过其它方法还原为源数据;
1. 基于J2EE规范的框架通常会使用SESSION,而SESSION则会影响集群的效率,因为集群间要进行SESSION的同步;
而因为集群间要进行同步,也同时使得集群的扩展数据以及集群的空间距离有了限制;
对于需要超大规模机器(如1000台)以及需要跨地域部署(如中国,美国)的集群
对于超大规模机器可采用在负载均衡端进行校验的方式,而对于跨地域部署则必须采用一种可信任的信息校验算法来确保信息的正确性(可以看一下数字签名或MD5等)
或对于请求本身的CRUD进行不同规格的校验;
对于该架构,认为用户的状态应保留在客户端,服务端无须保留;但问题在于,因为全在客户端,如果客户端异常,保留的数据将全部丢失;
该架构要求客户端必须启用COOKIE;
方案:
使用将状态存留在客户端的办法,COOKIE存储的不仅是SESSION,还有COOKIE相关的用户ID,以及所有的状态;
服务器端前台的负载均衡或者APACHE用来认证ID及SESSION,如通过,则进行后面请求;
需了解内容:
负载均衡或者APACHE能否进行认证功能;
rest可使用加密的用户名密码串作为COOKIE,从而实现认证机制;其它状态则采用COOKIE存储;
该安全性相当于MD5,当然,因为其每次请求都提交串,故从安全性上讲,略小于MD5;
但同样,不通过网络监听以及浏览器的人工修改参数不可能做到攻击,故相对是安全的;
同时,需注意接口分离,即认证和认证数据缓存以及认证数据获取必须分离;
2. 缺点:
1. 用COOKIE来代替session ,从而实现客户端保持状态的功能,由于COOKIE一般只有4097字节(小于20个COOKIE,小于4K),即限制了状态可存信息的大小;可通过限制应用场景来保证大小不超出,或通过特殊的标志位来确保对这种情况做特殊处理(如服务器端启用SESSION或服务器端使用ThreadLocal存储,总之退化为有状态服务器);
2. 客户端保持状态,每次发送状态,会增加网络开销;
3. 模型的适用及假设
模型采用增加客户端与服务器端网络开销的代价来换取免除服务器端SESSION同步及相互通信的开销,从而使服务器可超大集群以及跨地域部署(需解决认证问题) 而网络开销的代价可通过跨地域部署来降低;
故模型的前提或者适用情形为:
服务器端的SESSION的主要作用为个人身份认证,以及极少量的个性化数据;
服务器端的瓶颈不在于网络和数据库,而在于应用服务器;
4. 需完善
1.信任的信息校验算法是否存在;
2.负载均衡端的校验必须足够简单,利于快速执行;
3.配合分布式文件系统,是否可以实现应用服务器与存储层的结合;
------REST可解决的问题是:
状态回服务端回到客户端,但带来的问题是:服务端如何确认客户端所提交的状态,客户端如何存储非常大的状态
加密/解密算法:
应当满足这件一种条件,数据加密传输,服务器端解密,但解密后应为与原数据不同的数据;
但要求,该数据与源数据必须是一对一的关系,同时,加密后的数据不可能通过其它方法还原为源数据;