分布式系统与RPC概述

分布式系统与RPC概述

目录

分布式系统与RPC概述

1、分布式系统

1.1 分布式系统概念

1.2 分布式系统的特点

1.3 分布式系统的优缺点

1.4系统的发展演变过程

2、RPC概述

2.1 什么叫RPC

2.2 有了Http接口,为什么还需要RPC呢

2.3 Http与RPC的对比


1、分布式系统

1.1 分布式系统概念

《分布式系统原理与范型》定义:

“分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统”

分布式系统(distributed system)是建立在网络之上的软件系统。

随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。

1.2 分布式系统的特点

(1)分布性:系统中的多台计算机之间没有主、从之分,即没有控制整个系统的主机,也没有受控的从机。

(2)透明性:系统资源被所有计算机共享。每台计算机的用户不仅可以使用本机的资源,还可以使用本分布式系统中其他计算机的资源(包括CPU、文件、打印机等)。

(3)同一性:系统中的若干台计算机可以互相协作来完成一个共同的任务,或者说一个程序可以分布在几台计算机上并行地运行。

(4)通信性:系统中任意两台计算机都可以通过通信来交换信息

1.3 分布式系统的优缺点

优点:

(1)经济:随着微处理机技术的发展,现在人们只需花不多的钱就能买到一个CPU芯片。分布式系统通常就是在一个系统中使用集中在一起的大量廉价CPU,可以得到比单个大型集中式系统好的多的性能价格比。 

(2)快速:分布式系统由于使用了并行处理技术,因此它总的计算能力比单个的大型集中式系统强很多。 

(3)可靠:分布式系统中工作负载都是分散在多台机器上,单个机器故障只会使一台机器停机,而不会影响其他机器,从而获得很高的可靠性。在系统中多台机器同时出现故障的概率是很低的,理想情况下,某一时刻如果有5%的计算机出现故障,系统仍能继续工作。因此对于关键性的应用,一般都采用分布式系统来获得高可靠性。 

(4)易扩充:分布式系统允许系统在需求增长时逐渐进行扩充。因此在分布式系统组成后,可以方便地添加若干台计算机,既不用修改软件,也不用另行设计硬件。 

(5)数据共享:允许多个用户访问一个公共的数据库。例如,机票预定系统中的每个售票员需要访问航班及座位信息,如果将航班及座位信息数据库给他们每人备份一个,其实是无法工作的,因为他们不知其他人已经卖了哪些座位,所以计算机必须互连。而互连本身就产生了分布式系统。 

(6)设备共享:共享并不局限于数据,有些昂贵的外围设备,如彩色激光打印机、照相排版机和大型存储设备等,都允许多个用户共享。 

(7)通信:使人们之间的通信变得更加容易,如通过电子邮件。 

(8)灵活性:分布式系统中将多台计算机连在一起,可以使工作能够在最合适的计算机上完成,可以使用最有效的方式将工作负荷分配到可用的机器上,即使某些计算机失效也可以使其工作在其他计算机上得到补偿。

缺点:

(1)故障排除难度高:由于分布在多台服务器上,故障排除和诊断问题难度较高。

(2)软件支持少:更少的软件支持是分布式计算机系统的主要缺点。

(3)网络基础设施成本高:网络基础设置问题,包括传输、高负载、信息丢失问题。

(4)安全性问题:开放式系统的特性让分布式计算机系统存在着数据的安全性和共享的风险问题。

 

传统单一架构与分布式服务化架构的对比:

             分布式系统与RPC概述_第1张图片

1.4系统的发展演变过程

分布式系统与RPC概述_第2张图片

 

(1)单一应用架构

当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。

                      分布式系统与RPC概述_第3张图片

 

适用于小型网站,小型管理系统,将所有功能都部署到一个功能里,简单易用。

缺点: 1、性能扩展比较难

       2、协同开发问题

       3、不利于升级维护

 

(2)垂直应用架构

当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。

              分布式系统与RPC概述_第4张图片

 

通过切分业务来实现各个模块独立部署,降低了维护和部署的难度,团队各司其职更易管理,性能扩展也更方便,更有针对性。

缺点: 公用模块无法重复利用,开发性的浪费。

(3)分布式服务架构

当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。

 

                       分布式系统与RPC概述_第5张图片

(4)流动计算架构

当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)[ Service Oriented Architecture]是关键

 

                         分布式系统与RPC概述_第6张图片

2、RPC概述

2.1 什么叫RPC

RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。

RPC主要用于公司内部的服务调用,性能消耗低,传输效率高,服务治理方便。HTTP主要用于对外的异构环境,浏览器接口调用,APP接口调用,第三方接口调用等。

    RPC原理图:     

   分布式系统与RPC概述_第7张图片

大致工作流程:
(1)解决通讯的问题,主要是通过在客户端和服务器之间建立TCP连接,远程过程调用的所有交换的数据都在这个连接里传输。连接可以是按需连接,调用结束后就断掉,也可以是长连接,多个远程过程调用共享同一个连接。
(2)解决寻址的问题,也就是说,A服务器上的应用怎么告诉底层的RPC框架,如何连接到B服务器(如主机或IP地址)以及特定的端口,方法的名称名称是什么,这样才能完成调用
(3)当A服务器上的应用发起远程过程调用时,方法的参数需要通过底层的网络协议如TCP传递到B服务器,由于网络协议是基于二进制的,内存中的参数的值要序列化成二进制的形式,也就是序列化(Serialize)或编组(marshal),通过寻址和传输将序列化的二进制发送给B服务器。
(4)B服务器收到请求后,需要对参数进行反序列化(序列化的逆操作),恢复为内存中的表达方式,然后找到对应的方法(寻址的一部分)进行本地调用,然后得到返回值。
(5)返回值还要发送回服务器A上的应用,也要经过序列化的方式发送,服务器A接到后,再反序列化,恢复为内存中的表达方式,交给A服务器上的应用。

 

2.2 有了Http接口,为什么还需要RPC呢

http接口是在接口不多、系统与系统交互较少的情况下,解决信息孤岛初期常使用的一种通信手段; http的优点就是简单、直接、开发方便。利用现成的http协议进行传输。但是如果是一个大型的网站,内部子系统较多、接口非常多的情况下,RPC框架的好处就显示出来了

(1)首先就是长链接,不必每次通信都要像http一样去3次握手什么的,减少了网络开销;

(2)其次就是RPC框架一般都有注册中心,有丰富的监控管理;发布、下线接口、动态扩展等,对调用方来说是无感知、统一化的操作。

(3)再次就是安全性。

(4)最后,就是最近流行的服务化架构、服务化治理,RPC框架是一个强力的支撑

2.3 Http与RPC的对比

  • 传输协议
    • RPC,可以基于TCP协议,也可以基于HTTP协议
    • HTTP,基于HTTP协议
  • 传输效率

    • RPC,使用自定义的TCP协议,可以让请求报文体积更小,或者使用HTTP2协议,也可以很好的减少报文的体积,提高传输效率
    • HTTP,如果是基于HTTP1.1的协议,请求中会包含很多无用的内容,如果是基于HTTP2.0,那么简单的封装以下是可以作为一个RPC来使用的,这时标准RPC框架更多的是服务治理
  • 性能消耗,主要在于序列化和反序列化的耗时

    • RPC,可以基于thrift实现高效的二进制传输
    • HTTP,大部分是通过json来实现的,字节大小和序列化耗时都比thrift要更消耗性能
  • 负载均衡

    • RPC,基本都自带了负载均衡策略
    • HTTP,需要配置Nginx,HAProxy来实现
  • 服务治理(下游服务新增,重启,下线时如何不影响上游调用者)

    • RPC,能做到自动通知,不影响上游
    • HTTP,需要事先通知,修改Nginx/HAProxy配置

参考:

https://www.web3.xin/index/article/595.html

你可能感兴趣的:(Dubbo)