高可用之接入层

来源:互联网 发布:淘宝818开学季 商城 编辑:程序博客网 时间:2024/05/20 01:47
接入层的作用
客户端海量长/短连接管理
TCP/HTTP[S]
建立与客户端通信的加密通道
数据合法性、正确性校验
整合成内部少量的长连接
Session管理
实施初步攻防
请求转发到逻辑层




接入层session如何设计


session 是请求读写的上下文 称之session(会话)


高可用要基于无状态


事实上业务总是有状态的,为什么?
用户购买商品 购物车信息 用户浏览记录

这些状态信息会随着用户操作变化而发生更新

那么接入层session如何设计


单机环境设计
单机不存在session共享的问题
处理比较简单
Session存放在本机内存
高可用无法保证
服务进程挂掉
宕机
Session丢失不可用

集群(多机)设计
Session复制
集群所有接入层服务器之间同步session数据
每台接入服务器都保存用户全量session数据
用户请求只需要访问其中一台机器,获取速度快
高可用保障
宕机部分机器没影响
session复制存在的问题
使用于接入层集群较少
如果集群量大 大量session复制通信 占用服务器资源和网络资源,
每一台机器存储全量用户Session,内存占用量大 甚至OutOfMemory
大型网站接入层数千台,同时在线用户达千万,不合适


Session绑定
根据用户请求负载到特定的接入层
特定用户请求路由到特定接入层服务器
部分网站使用
高可用如何保障
单点问题
可以通过复制机制来解决 Master-Slave

客户端保存Session
Session由服务端生成,储存到客户端
每次请求携带客户端Session
服务端若有更新返回给客户端存储
C/S
记录到Native中
B/S
Web
记录到Cookie中
缺点
Web Cookie中记录信息大小限制
每次请求都要传输Session
用户关闭、清理Session,用户请求不正常
优点
方案简单,支持服务端无缝伸缩
方案可用性高
较多网站都使用
Session高可用集群
接入层无状态化
统一高可用Session服务器
接入层分布式读写Session集群
状态分离
接入层本身无状态
Session集群有状态
分布缓存
NOSQL(Memcached/Redis)
RDBMS(MySQL/MongoDB)

接入层安全性
接入层是客户端和服务端的Interface
数据安全重要性不言而喻
保证数据安全性
连接通道加密
传输数据加密

技术实现方案
客户端和服务器之间所有请求(传输数据)都必须加密,提高效率,使用对称加密算法
对称加密密钥使用非对称加密算法经过两次协商确定
安全通道的建立必须满足
任何第三方无法伪造服务器
在破解客户端代码的情况,即使截取其他用户发送的加密请求,也无法解密
为了满足以上两个条件,客户端和服务器都必须要一个随机生成秘钥的过程

使用HTTPS
提供了数据安全的加密方式
单向加密
双向加密

单向加密
不安全
中间人攻击
双向加密
安全
客户端证书
配合

接口分级
HTTPS
HTTPS+短信验证

数据加密
解决数据明文问题
即使获取,无法破解明文
数据篡改无法避免
如何解决?
数字签名
例如md5的加密解密 双方约定一个统一的key

高可用接入层如何设计?
模块和数据分离
接入层模块无状态
动态线性伸缩
冗余
Session数据统一分布式存储
数据冗余保证
高可用性保证
Session绑定
每个Session同步复制
不存储Session
接入层
原创粉丝点击