大型分布式网站架构设计与实践1
第1章 面向服务的体系架构(SOA)
分布式应用架构的演变:单一应用架构—>垂直应用架构—–>分布式应用架构
1.1 基于TCP协议的RPC
1.1.1 RPC名词解释
1、RPC:remote process call,远程过程调用,有RMI、WebService等诸多成熟的方案
2、如果服务提供煮 一个集群而非单台机器,则需要根据相应的负载均衡策略,选取其中一台进行调用。
1.1.2 对象的序列化
1、无论是何种类型的数据,最终都转换成二进制流在网络上进行传输,数据的发送方需要将对象转换成为二进制流,才能在网络上进行传输,而数据的接收方则需要把二进制流再恢复为对象
2、序列化与反序列化
对象——>二进制流=====对象的序列化
二进制流———->对象======对象的反序列化
3、Java的序列化与反序列化
1.1.3 基于TCP协议实现RPC
java的socketAPI使用
1.2 基于Http协议的RPC
1.2.1 HTTP协议栈
1、HTTP协议属于应用层协议,它是构建在TCP和IP协议之上,处于TCP/IP体系架构中的顶端。
2、HTTP网络协议栈:网络接口层—->IP(网络层)—->TCP(传输层)—->HTTP(应用层)
3、协议请求和响应的格式
Request:
encode:0(0表示GBK,1表示UTF8)
commandlength:5
command:HELLO
Response:
encode:0(0表示GBK,1表示UTF8)
responselength:5
response:HELLO
1.2.2 http请求与响应
1、Web浏览器与Web服务器之间的一次HTTP请求与响应过程,需要以下几个步骤
<1>浏览器端根据所使用的http协议,解析出url对应的域名
<2>通过DNS域名解析,查询出应该域名对应的IP地址
<3>通过url解析出对应的端口号(如果是80端口,默认可以省略)
<4>浏览器发起并建立到IP所对应的80端口连接
<5>浏览器向服务器发送Get请求
<6>服务器响应浏览器的请求,浏览器读取响应,渲染网页
<7>浏览器关闭与服务器的连接
1.2.3 通过httpclient发送http请求
httpclient是Apache基金会下的一个子项目,它对http协议通信的过程进行了封装,提供高效且功能丰富的客户端编程工具包
1.2.4 使用HTTP协议的优势
优点:TCP协议实现的RPC过于底层,基于HTTP的屏蔽了底层细节,使用便捷和简单
缺点:比TCP协议传输的字节数更多
1.2.5 JSON和XML
将对象序列化成为JSON或XML格式,也可以在网络上非常方便地进行传输
1.2.6 RESful和RPC
1、RPC风格:http://hostname/provider.do?service=com.http.sayhello&format=json×tamp=2013-07-07-13-22-09&arg1=arg1&arg2=arg2
2、RESTful风格的URL
post、get、put、delete
1.2.7 基于HTTP协议的RPC的实现
1.3 服务的路由和负载均衡
1.3.1 服务化的演变
1、SOA架构中,服务消费者通过服务名称,在众多服务中找到要调用的服务的地址列表,称为服务的路由
2、在请求到来时,为了将请求均衡地分配到后端服务器,负载均衡程序将从服务对应的地址列表中,通过相应的负载均衡算法和规则,选取一台服务器进行访问,这个过程称为服务的负载均衡。
3、负载均衡:硬件:F5,软件:LVS,Nginx等
4、一个能够动态注册和获取服务信息的地方,来统一管理服务名称和其对应的服务器列表信息,称之为服务配置中心。
5、zookeeper的持久和非持久节点,可以让我们实时地感知到后端服务器的状态。
1.3.2 负载均衡算法
1、轮询法
算法:将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端每一台服务器,而不关心服务器实际的连接数和当前的系统负载。
缺点:轮询时,负载均衡算法无法获知是否有新增机器或下线机器
2、随机法
算法:通过系统随机函数,根据后端服务器列表的大小值来随机选取其中一台进行访问
3、源地址哈希法
算法:源地址哈希的思想是获取客户端访问的IP地址值,通过哈希函数计算得到一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是要访问的服务器的序号。一IP一机器。
4、加权轮询法
算法:配置高、负载低的机器配置更高的权重,让其处理更多的请求,而低配置、负载高的机器,则给其分配较低的权重,降低其系统负载。
5、加权随机法
算法:与加权轮询法类似,但不同的是,它是按照权重来随机选取服务器的,而非顺序。
6、最小连接数法
算法:根据后端服务器当前的连接情况,动态地选取其中当前积压连接数最小的一台服务器来处理当前请求,尽可能地提高后端服务器的利用效率,将负载合理地分流到每一台机器。
1.3.3 动态配置规则
groovy脚本+zookeeper的watch机制来实现动态配置规则
1.3.4 zookeeper介绍与环境搭建
1、zookeeper是一个针对大型分布式系统的可靠的协调系统,集群间通过zab协议来保持数据一致性。
1)配置维护
2)名字服务
3)分布式同步
4)组服务
详细见zookeeper的章节
1.3.5 zookeeper api使用简介
详细见zookeeper的章节
1.3.6 zkclient的使用
详细见zookeeper的章节
1.3.7 路由和负载均衡的实现
1、LVS、Nginx等负载均衡软件
2、通过zookeeper创建的节点,配合watcher机制,来实现服务注册及获取服务上下线的状态。
1.4 HTTP服务网关
1、网关的作用:
1)相应的权限与安全校验
2)到服务配置中心找到相应的服务名称节点
3)加载对应服务提供者的地址列表
4)根据负载均衡算法,发起远程调用
5)接收服务端响应,再输出给客户端app