RPC和CAP

RPC

RPC(Remote Procedure Call Protocol)—— 远程过程调用协议,它是一种通过 网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些 传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI 网络通信模型中,RPC跨越了 传输层和 应用层。RPC使得开发包括网络 分布式多程序在内的应用程序更加容易。

RPC简单的来说就是像调用本地服务一样调用远程服务。

那么,netty是什么东西呢,跟RPC有什么关系?

Netty提供异步的、 事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的 网络服务器和客户端程序

RPC要做到用户无感知的调用远程服务必定要经过网络传输,而netty正好是是Java编写的快速开发高性能高可靠性的网络编程框架。

目前使用netty作为传输层的RPC框架很多,国内知名的有dubbo,motan等。

下面以新浪开源的motan为例,说明netty在RPC的位置:

下图中transport即使使用netty实现的。

图片

  总结来说,netty就是解决RPC网络传输的。

分布式RPC需要解决哪些问题呢?

protocol:传输协议

proxy:client代理,服务引用方调用方法通过代理发送远程消息

codec:协议编解码压缩等

transport:协议传输

registry:注册中心,服务注册服务发现

cluster:负载均衡,服务容错策略

其他:服务降级,服务隔离,服务治理

CAP

CAP理论是分布式系统非常基础和重要的概念,想了解分布式系统就绕不开它,这里简单对此理论的基础概念做下介绍。

首先需要注意一点:

CAP仅适用于原子读写的NOSQL场景中,并不适合数据库系统。

CAP理论概念

一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。

简单介绍:

  • 一致性(Consistence) :所有节点访问同一份最新的数据副本
  • 可用性(Availability):每次请求都能获取到非错的响应——但是不保证获取的数据为最新数据
  • 分区容错性(Partition tolerance) : 分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。

需要注意,此处的C和A与数据库事务中的ACID中的C和A不是同一个东西,他们的C都表示一致性,但是事
务的A表示Atomicity原子性,而这里的A是Availability可用性。


C A P详细介绍

C —— Consistency 一致性

一致性指“all nodes see the same data at the same time”,即更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致,所以,一致性,说的就是数据一致性。

对于一致性,可以分为从客户端和服务端两个不同的视角。从客户端来看,一致性主要指的是多并发访问时更新过的数据如何获取的问题。从服务端来看,则是更新如何复制分布到整个系统,以保证数据最终一致。

一致性是因为有并发读写才有的问题,因此在理解一致性的问题时,一定要注意结合考虑并发读写的场景。

从客户端角度,多进程并发访问时,更新过的数据在不同的进程如何获取的不同策略,决定了不同的一致性。

三种一致性策略:

  • 强一致性 要求更新过的数据都能马上被后续访问看到
  • 弱一致性 能容忍后续的部分或全部访问看不到更新过的数据
  • 最终一致性 要求过一段时候之后能访问到更新过的数据

CAP理论中说不可能同时满足的这个C指的是强一致性

A —— Availability 可用性

可用性指“Reads and writes always succeed”,即服务一直可用,而且是正常响应时间。

对于一个可用性的分布式系统,每一个非故障的节点必须对每一个请求作出响应。所以,一般我们在衡量一个系统的可用性的时候,都是通过停机时间来计算的。

系统可用性描述

通常我们描述一个系统的可用性时,我们说淘宝的系统可用性可以达到5个9,意思就是说他的可用水平是99.999%,即全年停机时间不超过(1-0.99999)*365*24*60 = 5.256 min,这是一个极高的要求。

好的可用性主要是指系统能够很好的为用户服务,不出现用户操作失败或者访问超时等用户体验不好的情况。一个分布式系统,上下游设计很多系统如负载均衡、WEB服务器、应用代码、数据库服务器等,任何一个节点的不稳定都可以影响可用性。

P —— Partition Tolerance分区容错性

分区容错性指分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。

分区容错性和扩展性紧密相关。在分布式应用中,可能因为一些分布式的原因导致系统无法正常运转。好的分区容错性要求能够使应用虽然是一个分布式系统,而看上去却好像是在一个可以运转正常的整体。比如现在的分布式系统中有某一个或者几个机器宕掉了,其他剩下的机器还能够正常运转满足系统需求,或者是机器之间有网络异常,将分布式系统分隔未独立的几个部分,各个部分还能维持分布式系统的运作,这样就具有好的分区容错性。

简单点说,就是在网络中断,消息丢失的情况下,系统如果还能正常工作,就是有比较好的分区容错性。

一般我们说的分布式系统,P:分区容错性(partition-tolerance)这个是必需的,这是客观存在的。

CAP是无法完全兼顾的,从上面的例子也可以看出,我们可以选AP,也可以选CP。但是,要注意的是:不是说选了AP,C就完全抛弃了。不是说选了CP,A就完全抛弃了!

在CAP理论中,C所表示的一致性是强一致性(每个节点的数据都是最新版本),其实一致性还有其他级别的:

  • 弱一致性:弱一致性是相对于强一致性而言,它不保证总能得到最新的值;

  • 最终一致性(eventual consistency):放宽对时间的要求,在被调完成操作响应后的某个时间点,被调多个节点的数据最终达成一致

可用性的值域可以定义成0到100%的连续区间

 

所以,CAP理论定义的其实是在容忍网络分区的条件下,“强一致性”和“极致可用性”无法同时达到


参考链接:分布式的CAP理论概念
参考链接:RPC概念

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值