1、RPC
1)名词解释
- Remote Process Call,远程过程调用;
- 将原来的本地调用转变为调用远程的服务器上的方法;
- RPC的实现包括客户端和服务端,服务的调用方与服务的提供方。
-
一次RPC调用:服务调用方发送RPC请求到服务提供方,服务提供方根据调用方提供的参数执行请求方法,将执行结果返回给调用方。
-
调用参数及响应结果的序列化和反序列操作;
-
服务提供方的压力增加,服务需要扩容;
-
服务的路由和负载均衡:随着服务提供者的增加,不同的服务之间需要进行分组,以隔离不同的业务,避免互相影响;
-
服务消费者通过获取服务提供者的分组信息和地址信息进行路由,服务提供者为一个集群,需要根据相应的负载均衡策略选取其中一台进行调用。
-
对象的序列化:任何类型的数据都需要转换成二进制流在网络上进行传输。将对象转换为二进制流的过程是序列化;将二进制流恢复为二进制流的过程称为对象的反序列化。
-
HTTP:采用HTTP1.1;属于应用层协议;无状态协议
-
JSON:JavaScript Object Notation,轻量级的数据交换格式。
-
XML:Extensible Markup Language,可扩展标记语言;
-
RESTful:Resource Representational State Transfer,后端将资源发布为URI,前端通过URI访问资源,并通过HTTP动词表示要对资源进行的操作。
-
SOAP:简单对象访问协议是一种数据交换协议规范,是一种轻量的、简单的、基于XML的协议的规范。SOAP协议和HTTP协议一样,都是底层的通信协议,只是请求包的格式不同而已,SOAP包是XML格式的。
SOAP的消息是基于xml并封装成了符合http协议,因此,它符合任何路由器、 防火墙或代理服务器的要求。
SOAP可以使用任何语言来完成,只要发送正确的soap请求即可,基于soap的服务可以在任何平台无需修改即可正常使用。
-
SOA(Service-Oriented Architecture),中文全称:面向服务的架构。
通俗点来讲,SOA提倡将不同应用程序的业务功能封装成“服务”并宿主起来,通常以接口和契约的形式暴露并提供给外界应用访问(通过交换消息),达到不同系统可重用的目的。
SOA是一个组件模型,它能将不同的服务通过定义良好的接口和契约联系起来。服务是SOA的基石。
-
微服务和SOA的区别
微服务是SOA架构演进的结果。两者说到底都是对外提供接口的一种架构设计方式,随着互联网的发展,复杂的平台、业务的出现,导致SOA架构向更细粒度、更通过化程度发展,就成了所谓的微服务了。
总之,微服务是SOA发展出来的产物,它是一种比较现代化的细粒度的SOA实现方式。
SOA与微服务的区别在于如下几个方面:
- 微服务相比于SOA更加精细,微服务更多的以独立的进程的方式存在,互相之间并无影响;
- 微服务提供的接口方式更加通用化,例如HTTP RESTful方式,各种终端都可以调用,无关语言、平台限制;
- 微服务更倾向于分布式去中心化的部署方式,在互联网业务场景下更适合。
2、服务的路由和负载均衡
-
服务的路由:在SOA架构中,服务消费者通过服务名称,在众多服务中找到要调用的服务的地址列表。
-
服务的负载均衡:负载较高的服务通常对应着多台服务器组成的集群。在请求到来时,为了将请求均衡地分配到后端服务器,负载均衡程序将从服务对应的地址列表中,通过相应的负载均衡算法和规则,选取一台服务器进行访问;
-
服务配置中心:动态注册和获取服务信息,统一管理服务名称和其对应的服务器列表信息;
-
负载均衡算法:
- 轮询(round robin):将请求按顺序轮流地分配到后端服务器上;
- 随机(random):根据后端服务器列表的大小值来随机选取其中一台进行访问;
- 源地址哈希(hash):获取客户端访问的IP地址值,通过哈希函数计算得到一个数值,用该数值对服务器的列表的大小进行取模,得到的就是要访问的服务器的序号;
- 加权轮询(weight round robin):将请求顺序且按照权重分配到后端;
- 加权随机(weight random)
- 最小连接数(least connections):根据后端服务器当前的连接情况,动态地选取其中当前积压连接数最少的一台服务器来处理当前请求;
-
动态配置规则:groovy脚本实现
-
Zookeeper
- zk集群通过zab(zookeeper atomic broadcast)协议来保持数据的一致性;
-
zab协议包括:leader selection和atomic broadcast阶段;
-
zk实现了一个层次命名空间的数据模型,每个结点znode,当结点发生变化时,watch机制会发出相应的通知给订阅其状态的客户端;
-
结点类型:持久,临时、持久顺序、临时顺序;
-
zkClient解决watcher一次性注册问题;
本文仅仅用于作者学习与总结,若有不妥之处,敬请指出!
参考资料:
《大型分布式网站架构设计与实践》 提取码:n4gh
《阿里P8架构师谈:Restful、SOAP、RPC、SOA、微服务之间的区别 》
《Dubbo与注册中心Zookeeper的交互过程》