大型分布式网站架构设计与实践阅读笔记1

大型分布式网站架构设计与实践阅读笔记1

面向服务的体系架构(SOA)

本章主要介绍和解决下面问题:

HTTP协议的工作方式与HTTP网络协议栈的结构?

如何实现基于HTTP协议和TCP协议的RPC调用,它们之间有何差别,分别适用何种场景?

如何实现服务的动态注册和路由,以及软负载均衡的实现?

1、基于TCP协议的RPC(TCP传输层)

RPC即远程过程调用。单台服务器的处理能力受硬件成本的限制,不可能无限制地提升。RPC将原来的本地调用转变为调用远端的服务器上的方法,给系统的处理能力和吞吐量带来了近似于无限提升的可能。RPC的实现包括客户端和服务端,即服务的调用方和服务的提供方。服务调用方发送RPC请求到服务提供方,服务提供方根据调用方提供的参数执行请求方法,将执行结果返回给调用方,一次RPC调用完成。

服务调用者的规模发展到一定阶段,对服务提供方的压力也日益增加,那么服务就需要扩容。随着服务提供者的增加和业务的发展,不同的服务之间需要进行分组,以隔离不同的业务,这样,就需要考虑服务的路由和负载均衡的问题。如果服务提供者为一个集群,那么服务消费者通过获取服务提供者的分组信息和地址信息进行路由,根据相应的负载均衡策略,选取其中一台进行调用。

不管哪种类型的数据,最终都需要转换成二进制流在网络上进行传输。数据的发送方需要将对象转换成为二进制流(对象的序列化),才能在网络上进行传输。数据的接收方需要将二进制流再恢复成对象(对象的反序列化)。

2、基于HTTP协议的RPC(HTTP应用层)

HTTP超文本传输协议,属于应用层协议,构建在TCP和IP协议之上,处于TCP/IP体系架构中的顶端。

web浏览器和web服务器之间的一次HTTP请求与响应过程,需要完成的步骤如下(例如:http://www.google.com:80/index.html):

(1)浏览器端根据所使用的HTTP协议,解析出url对应的域名 -> www.google.com

(2)通过DNS域名解析,查询出该域名对应的IP地址 -> 74.125.31.147

(3)通过url解析出对应的端口号(如果是80端口,默认可以省略) -> 80

(4)浏览器发起并建立到74.125.31.147的80端口的连接

(5)浏览器向服务器发送get请求

(6)服务器响应浏览器的请求,浏览器读取响应,渲染网页

(7)浏览器关闭与服务器的连接

基于TCP协议实现的RPC,由于位于协议栈的下层,能够更灵活的对协议字段进行定制、减少网路传输字节数等,但是较难实现跨平台的调用。

基于HTTP协议的RPC实现可以使用JSON或者XML格式的响应数据,通用,跨平台。但是HTTP是上层协议,发送同等内容的信息,使用HTTP传输所占用的字节数比使用TCP协议传输所占用的字节数更多,那么在同等网络环境下,通过HTTP协议传输相同内容,效率要低于TCP协议。当然,有其他方式缩小这一差距。

3、服务的路由和负载均衡

服务消费者通过服务名称,在众多服务中找到要调用的服务的地址列表,称为服务的路由;对于负载较高的服务来说,往往对应着多台服务器组成的集群,那么请求到来时,为了将请求均衡地分配到后端服务器,负载均衡程序将从服务对应的地址列表中,通过相应的负载均衡算法和规则,选取一台服务器进行访问,这个过程称为服务的负载均衡。

当服务越来越多,规模越来越大,对应的机器数量也越来越大,一旦服务路由或者负载均衡服务器宕机,依赖它的所有服务均将失效。那么就需要一个能够动态注册和获取服务信息的地方,来统一管理服务名称和其对应的服务器列表信息,称之为服务配置中心。当服务器宕机或者下线时,相应的机器需要能够动态地从服务配置中心里面移除,并且通知相应的消费者。

(1)负载均衡算法

轮询法:将请求按照顺序轮流的分配到后端服务器上,它均衡地对待后端每一台服务器,而不关心服务器实际的连接数和当前的系统负载。

随机法:通过系统随机函数,根据后端服务器列表的大小值来随机选取其中一台进行访问。

源地址哈希法:获取客户端访问的IP地址值,通过哈希函数计算得到一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是要访问的服务器的序号。

加权轮询法:给配置高、负载低的机器配置更高的权重,让其处理更多的请求,而配置低、负载高的机器,给其分配较低的权重,降低其系统负载。请求顺序的且按照权重分配给后端。

加权随机法:根据后端服务器不同的配置和负载情况,配置不同的权重。按照权重来随机选取服务器,而不是按照顺序。

最小连接数法:由于后端服务器的配置不尽相同,对于请求的处理有快又慢,根据后端服务器当前的连接情况,动态的选取其中当前积压连接数最少的一台服务器来处理当前请求,尽可能地提高后端服务器的利用率,将负载合理的分流到每一台服务器。

4、HTTP服务网关

网关接收外部的各种HTTP请求,完成相应的权限和安全校验,当校验通过后,根据传入的服务名称,到服务配置中心找到相应的服务名称节点。网关可以很好的解决安全问题,也可以通过服务名称进行服务的路由和负载均衡调度,使得不同的平台之间能够很好地复用公共的业务逻辑。

原文地址:https://www.cnblogs.com/zhoulonghai/p/13096996.html