分布式基础知识

#分布式基础知识

##计算机网络
OSI七层:
从上往下 应用层、表现层、会话层、传输层、网络层、数据链层、物理层
TCP/IP四层:
从上往下 应用层、传输层、网络层、网络接口层

##网络IO
主要接触的以TCP/IP UDP协议栈的socket网络通信
socket网络编程主要有三种实现方式:BIO 、NIO 、AIO
1、BIO 阻塞式 一个socket套接字需要一个线程来处理,在建立连接、读数据、写数据
都可能发生阻塞。
2、NIO 非阻塞式 事件驱动的思想,采用Reactor模式
Reactor统一管理所有的handler,把出现的事件交给相应的handler处理
Reactor对所有客户端的socket的事件处理,派发到不同的线程中。
3、AIO 就是异步IO 采用Proactor模式
与NIO的一个区别就是 NIO在有通知时可以进行操作。
AIO在有通知时就已经完成操作了。

##集群里session问题
1、什么是session?Http协议本身是无状态的,在会话开始时,生成一个唯一标识(sessionid)
通过cookie返回给浏览器,下次请求时浏览器带上保存的sessionid,这样服务器就可以知道这个请求属于哪个
应用。如果浏览器禁用了cookie,那么就可以把标识放在URL参数中。类似这样
http://www.baidu.com/?sessionId=dasdasda01njasdas就可以了。
2、解决方案

a.session Sticky
在负载均衡上“动手脚”
服务器宕机或重启,session数据失效
会话层的开销较大
负载均衡成为有状态,内存、容灾方面压力大。

b.session Replication
依靠web容器自身复制session。
session复制消耗带宽
用户量相当大的时候,session占用较大的存储空间。

c.session数据集中存储
统一存储session数据
但session的读写操作引入了网络IO,存在延时与不稳定的问题。
集群的情况下,出错率高。

d.cookie Based
在cookie中携带session数据,但受到cookie长度限制,session的长度会受到限制
从安全方面考虑,cookie存储在本地,不安全。
从性能上考虑,增加了带宽的消耗。
每次请求响应都带有session数据,性能消耗。

posted @ 2016-12-09 20:57  John95  阅读(1115)  评论(0编辑  收藏  举报