分布式面试 - 分布式服务接口请求的顺序性如何保证?

面试题

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

面试官心理分析

其实分布式系统接口的调用顺序,也是个问题,一般来说是不用保证顺序的。但是有时候可能确实是需要严格的顺序保证。给大家举个例子,你服务 A 调用服务 B,先插入再删除。好,结果俩请求过去了,落在不同机器上,可能插入请求因为某些原因执行慢了一些,导致删除请求先执行了,此时因为没数据所以啥效果也没有;结果这个时候插入请求过来了,好,数据插入进去了,那就尴尬了。

本来应该是 “先插入 -> 再删除”,这条数据应该没了,结果现在 “先删除 -> 再插入”,数据还存在,最后你死都想不明白是怎么回事。

所以这都是分布式系统一些很常见的问题。

面试题剖析

首先,一般来说,个人建议是,你们从业务逻辑上设计的这个系统最好是不需要这种顺序性的保证,因为一旦引入顺序性保障,比如使用分布式锁,会导致系统复杂度上升,而且会带来效率低下,热点数据压力过大等问题。

下面我给个我们用过的方案吧,简单来说,首先你得用 dubbo 的一致性 hash 负载均衡策略,将比如某一个订单 id 对应的请求都给分发到某个机器上去,接着就是在那个机器上因为可能还是多线程并发执行的,你可能得立即将某个订单 id 对应的请求扔一个内存队列里去,强制排队,这样来确保他们的顺序性。

但是这样引发的后续问题就很多,比如说要是某个订单对应的请求特别多,造成某台机器成热点怎么办?解决这些问题又要开启后续一连串的复杂技术方案......曾经这类问题弄的我们头疼不已,所以,还是建议什么呢?

最好是比如说刚才那种,一个订单的插入和删除操作,能不能合并成一个操作,就是一个删除,或者是什么,避免这种问题的产生。

转载来源:https://github.com/doocs/advanced-java/blob/master/docs/distributed-system/distributed-system-request-sequence.md

分布式面试 - 分布式服务接口请求的顺序性如何保证?相关推荐

  1. 分布式面试 - 分布式锁的常见问题

    分布式面试 - 分布式锁的常见问题 面试题 一般实现分布式锁都有哪些方式?使用 redis 如何设计分布式锁?使用 zk 来设计分布式锁可以吗?这两种分布式锁的实现方式哪种效率比较高? 面试官心理分析 ...

  2. API 面试四连杀:接口如何设计?安全如何保证?签名如何实现?防重如何实现?...

    点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料! 来源 | cnblogs.com/jurendage/p/1 ...

  3. 微服务接口限流的设计与思考(附GitHub框架源码)

    http://www.infoq.com/cn/articles/microservice-interface-rate-limit?useSponsorshipSuggestions=true&am ...

  4. Java实现elastic中服务接口性能指标统计(接口QPS、接口99响应时间等)并存入表

    近期需要对线上A服务接口进行健康度监控,即把A服务各个接口每天的性能指标进行统计并写入库表,便于对接口通过周期性数据进行全面分析及接口优化. 据调研了解,有2种解决方案可行: 1)目前服务接口请求信息 ...

  5. 内网环境如何访问钉钉服务接口

    环境描述 由于工作需要,业务项目需要部署在内网中,然后通过另一台可访问公网的服务器作为代理服务器,实现公网访问业务 #mermaid-svg-SarSs2WQHpvgFauu .label{font- ...

  6. 消息队列、RabbitMQ原理、消息队列保证幂等性,消息丢失,消息顺序性,以及处理消息队列消息积压问题

    消息队列 消息队列(Message Queue,简称MQ),从字面意思上看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已 常见的消息队列 RabbitMq ActiveM ...

  7. 分布式面试 - 如何基于 dubbo 进行服务治理、服务降级、失败重试以及超时重试?

    分布式面试 - 如何基于 dubbo 进行服务治理.服务降级.失败重试以及超时重试? 面试题 如何基于 dubbo 进行服务治理.服务降级.失败重试以及超时重试? 面试官心理分析 服务治理,这个问题如 ...

  8. 重复订单号校验_吊打面试官系列重复消费、顺序消费、分布式事务

    你知道的越多,你不知道的越多 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难. 作为一个在互联网公司面一次拿一次Of ...

  9. 大剑无锋之分布式和微服务分别是什么?【面试推荐】

    提出一个技术,大多都是为了解决某一难题. 分布式: 分布式的提出是:是为了解决单个物理服务器容量和性能瓶颈问题而采用的优化手段. 该领域需要解决的问题极多,在不同的技术层面上,又包括:分布式文件系统. ...

最新文章

  1. 解决ExcuteFile执行命令时出现“无效字符”的问题
  2. 如何修改容器的一些参数
  3. USB的端点描述符详解-重新排版
  4. 05_通过sql操作表中的数据_插入修改删除查询
  5. C#中泛型在Class上的实现
  6. AT3860-[AGC020F]Arcs on a Circle【dp】
  7. MPU和MCU的区别和选择
  8. 四川加油,中国人加油!我们永远不服输!
  9. linux内核启用64位除法,关于内核中的乘法和除法。
  10. python3 自动识图
  11. 方舟服务器物品代码,方舟:生存进化 全物品代码ID一览 物品修改代码大全
  12. SAS学习笔记27 卡方检验
  13. Python实现人脸识别检测,对主播进行颜值排行
  14. 小型水库雨水情测报设施建设-水库大坝水文监测
  15. mysql 云端连接_云服务器远程连接mysql数据库
  16. U盘EFI分区删不掉怎么办
  17. SEO技术:外链建设操作要点
  18. SNIPER python3.5环境配置成功记录
  19. Adobe illustrator 输入数学平方公式
  20. HTML——使用 img 标签插入 avi 文件

热门文章

  1. Magento: 添加first name 和 last name到newsletter Add additional fields to your newsl
  2. php 隐藏图片地址
  3. PHP正则表达式及实例
  4. PHP类UTF8编码内的繁简转换-繁体-简体
  5. 统计学习方法-李航(6)
  6. 【matplotlib】远程服务器使用报错 $DISPLAY
  7. 认识线程 java 1615387415
  8. dj鲜生-让应用的模型类生效,搬家到云服务器-非本地操作
  9. redis-python操作redis
  10. centos-安装python3-pip3