1.传统的网站结构为单一应用架构,也就是把所有的功能都放在一个项目工程里,部署在一台服务器上。
2.当访问量越来越大,我们需要通过不断添加服务器的方式来应对越来越大的访问量,产生了集群;或是将应用拆分成几个不相干的应用部署在不同的服务器上,产生了分布式系统。
集群:将相同的程序、功能部署在两台或是多台服务器上,这些服务器对外提供的功能是完全一样的,集群就是通过不同横向扩展增加服务器的方式,以提高服务的能力。
分布式系统:将两个或多个程序、功能分别运行在两台或多台主机服务器上,这些服务对外提供的功能并不一样,它们通过相互协作最终完成某一服务或是功能。
3.随着用户数的增加及业务的发展,拆分的应用越来越多,应用之间的交互及数据传输不可避免,则将核心业务抽取出来,作为独立的服务,形成稳定的服务中心,这其中就涉及到了RPC(远程过程调用),它主要为解决两个问题。
(1)解决分布式系统中,服务之间的调用问题。
(2)远程调用时,要能够像本地调用一样方便,让调用者感知不到远程调用的逻辑。
RPC数据传输协议:
在RPC中进行数据传输人们首先想到http协议,这是可行的,但是有些情况下并没有必要,毕竟我们只需要传输数据而已,不需要使用应用层的http协议,所以在不同的RPC框架里使用了自定义的适用于自身的数据传输协议。如:
dubbo(阿里)使用基于tcp的dubbo协议,面向java语音;
spring cloud使用http协议,面向java语言;
Grpc(谷歌)使用http2协议,跨语言,使用率最高;
Thrift(先facebook后apache),使用RPC协议,基于tcp,跨语言。
Tars:腾讯分布式框架。