Dubbo学习(五)——系统设计/幂等性设计/顺序性设计/RPC设计

1.分布式服务接口的幂等性如何设计?

比如重复扣款

例子1:假如你有个服务提供一些接口供外部调用,这个服务部署在了 很多台机器上,接着有个接口就是付款接口。然用户在前端上操作的时候,一个订单不小心发起了两次支付请求,然后这俩请求分散在了这个服务部署的不同的机器上,所以导致,结果一个订单扣款扣两次

例子2:订单系统调用支付系统进行支付,结果不小心因为网络超时了,然后订单系统走了前面我们看到的那个重试机制,支付系统收到一个支付请求两次,而且因为负载均衡算法落在了不同的机器上,扣款2次

幂等性:就是一个接口多次发起同一个请求,这个接口得保证结果准确(比如不能多扣款、不能多插数据)

如何保证幂等性?(3点,主要结合自己业务来)

(1)每个请求必须有唯一标识。 比如订单支付请求肯定得包含订单id,一个订单id最多支付一次

(2)每次处理完请求后必须有一个记录标识这个请求处理过了。 

(3)每次接受请求需要进行判断之前是否处理过

2.分布式服务接口请求的顺序性如何保证?

例子:分布式系统还有一个常见问题,顺序性。一般系统是不需要顺序保证的,但是系统有时候可能确实是需要严格的顺序保证,比如服务 A 调用服务 B,先插入再删除。结果俩请求过去了,落在不同机器上,可能插入请求因为某些原因执行慢了一些,导致删除请求先执行了

引入顺序保障的弊端:比如使用分布式锁,会导致系统复杂度上升,而且会带来效率低下,热点数据压力过大等问题

3.如何自己设计一个类似 Dubbo 的 RPC 框架?

(1)服务的去注册中心注册,所以可以用zookeeper 做注册中心

(2)消费者需要去注册中心拿对应的服务信息,每个服务可能会存在多台机器

(3)要基于动态代理发起一个请求,这个动态代理就是本地的代理,这个代理会找到服务对应的机器地址

(4)要确定哪个机器发动的请求,得有个负载均衡算法,比如可以简单的随机轮询

(5)最后找到一台机器可以跟它发送请求了。

(6)服务器这边要根据自己的服务生成一个动态代理,监听某个网络端口,然后代理本地的服务代码。接收到请求的时候就调用对应服务代码

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值