最新要闻
- 百度手机曝光:后置双摄+4G网络 世界快资讯
- 骁龙888再就业!荣耀新平板入网:13英寸超大LCD屏_全球速看
- 德普拿下超级香水合约
- 速递!AI出来后第一个失业的是孙燕姿:为什么说她的音色不受法律保护
- 天天最资讯丨中国地形地貌最全的省份:你可能想不到
- 专家称睡满8小时是误区:张朝阳曾称四小时足够 睡多浪费
- 项目一个不留!OPPO放弃ZEKU自研芯片业务:多大代价都是最小代价 世界快资讯
- 法网公布奖金分配:总额提升12.3%,低排位选手获利,冠军230万欧-世界今日报
- 全球今热点:地位远超iPhone!苹果Reality Pro头显12月大规模量产:售价超2万
- 环球快播:小白也能辨别!买独显轻薄本必须要看的四大规格
- 马斯克:当Linda Yaccarino准备好时,我们会在Twitter Spaces进行实时音频对话,欢迎提问任何事情。-每日报道
- OPPO放弃自研芯片!马里亚纳X/Y官网页面悄然404_环球微速讯
- 天天快报!国外玩家质疑《塞尔达传说:王国之泪》涉嫌抄袭:照搬游戏机制
- 二次圆满成功!中国可重复火箭发动机传喜讯 今头条
- 在美国加州 我亲眼见到了Google对AI的孤注一掷_每日热闻
- 性能秒RTX 4060?AMD新显卡性能实测 光追是短板 今日报
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
世界快播:分布式系统常见问题
一.概述
分布式系统存在网络,时钟,以及许多不可预测的故障。分布式事务,一致性与共识问题,迄今为止仍没有得到很好的解决方案。要想完美地解决分布式系统中的问题不太可能,但是实践中应对特定问题仍有许多可靠的解决方案。本文不会谈及诸如BASE, CAP, ACID 等空泛的理论,只基于实践中遇到的问题提出可行的解决方案。
(资料图)
二.常见问题
1.读自己的写
现象: 用户在发布页发布了帖子,然后访问自己的主页查看帖子列表,并没有马上看到自己刚刚发布的帖子,等待1~2s后才看到
分析:后端db采取主从结构,复制任务在负载较高的情况下会有延迟。用户读取帖子列表查询的是从节点,所以无法及时看到刚刚发布的帖子。一般情况下延迟1~2s是可以接受的,但是为了更好的体验,可以做一些改进。
解决方案:
- 如果用户读取的是自己的主页,就访问主节点。如果访问是他人的主页,就访问从节点。只需要在db层路由即可。
- 客户端还可以记住最近更新时的时间戳,并附带在读请求中,据此信息,系统可以确保对该用户提供读服务时都应该至少包含了该时间戳的更新。如果不够新,要么交由另一个副本来处理,要么等待直到副本接收到了最近的更新
2.单调读
现象:用户查看某个帖子下面的评论,一会儿看到5条评论,一会儿看到6条评论。
分析:后端db采取主从结构,复制任务在负载较高的情况下会有延迟。用户读取评论列表查询的是从节点,但是两次读的是不同的从节点,当某个从节点具有明显延迟就会出现数据反复的现象。
解决方案:
- 确保同一个用户每次都是读取同一个副本,可以在db层进行路由。这是一种典型的sticky 请求路由。
replica = hash(user_id) % number_of_replica
3.负载倾斜与热点问题
现象:某个分区的数据明显比其他分区多,并且访问频率高,负载压力大。
分析:在某些特殊的业务场景下,比如官方或者名人账号有百万粉丝,当这些账号发布消息事件时,人们会对该消息进行评论,如果评论数据存储使用事件id进行hash,就会造成某个分区的负载产生倾斜。
解决:
- 在关键词,比如消息事件id,的开头或者结尾添加一个随机数。只需一个两位数的十进制随机数就可以将关键字的写做操作分布到100个不同的关键字上,从而分片到不同的分区上。这些特殊逻辑只应用在一些特殊账号上。
4.fencing令牌
现象:在采用分布式锁的情况下,数据库中的事务重复执行。
分析:在分布式锁环境中,客户端A执行事务超时,分布式锁被释放。客户端B执行事务插入数据。客户端A恢复后继续执行事务,重复插入数据。
解决方案:
- 这不是分布式事务的范畴。可以采用fencing令牌来解决。我们假设每次锁服务授予锁或租约时,同时还会返回一个fencing令牌,该令牌每授予一次就会递增。然后,要求客户端每次向存储系统发生写请求时,都必须包含所持有的fencing令牌。当使用zookeeper 作为锁服务时,可以用事务标识zxid,或节点版本cversion来充当fencing令牌,这两个都可以满足单调递增的要求。
5.Lamport时间戳
现象:客户端从两个分区获取两条不同的数据,比如事件a, b;a的序号小于b,但事实上b比a先发生。
分析:常见的有以下几种非因果序列发生器,产生的序列号与因果关系并不严格一致。
- 每个节点单独产生自己的一组序列号。
- 把墙上时间戳信息(物理时钟)附加在每个操作上。
- 预先分配好序列号的区间范围,比如节点A负责区间1~1000的序列号,节点B负责1001~2000。
解决方案:
- 使用Lamport时间戳。Lamport时间戳是一个kv对(计数器,节点ID)。核心流程:每个节点以及每个客户端都跟踪迄今为止所见到的最大计数器,并在每个请求中附带该最大计数器值。当节点收到请求(或者回复)时,如果发现请求内嵌的最大计数器大于节点自身的计数器,则它立即把自己的计数器修改为该最大值。
6.端到端的重复消除问题
现象:消息重复是非常普遍的,比如
- 生产者发送消息到消费者,消费者消费成功后宕机,但是却没有更新消费位置,消费者重启后就会重新消费。
- 常见的rpc调用,调用方因为网络问题没有收到被调用方的响应,选择重试。
- 2PC 分布式事务中,因为网络问题,也可能出现重复事务的问题。
- 用户在页面重复提交POST请求。
分析:端到端的重复问题是非常普遍的,在TCP 网络中也需要处理重复数据包的问题。有以下两种解决办法:
- 最有效的办法之一是使操作满足幂等性,即无论执行一次还是多次,确保具有相同的结果。比如以下语句无论执行多少次效果都是一致的。
update table set v = v2 where v = v1
- 可以为操作生成一个唯一的标识符如(UUID),服务端对此UUID 进行去重校验。
- 在典型的电商下单接口中采用了以上两种方法的结合:使用唯一标识符来进行去重,如果写入异常返回之前的订单。
create table order( # ... dedup_key varchar(60) not null comment "key to pretend order duplication", client_id, # ... unique uniq_dedup_key(dedup_key, client_id));@TransactionalOrder createOrder(Integer userId, String prodCode, Decimal amount, String dedupKey) { try { String orderId = createOrder(userId, prodCode, amount, deupKey); // insert a new order Order order = getOrderById(orderId); // read order from db order.setDuplicated(false); // 标记是否有重复下单 return order; } catch(UniqueKeyViolationException e) { // if duplicated order has existed, return previous order Order order = getOrderByDedupKey(dedupKey, clientId); order.setDuplicated(true); return order; } catch (Exception e) { // hanlde other errors and rollback transaction ... }}
7.唯一性约束
现象:在集群高并发的环境下,用户A创建用户marquezzzz,用户B同时创建了用户marquezzzz,两者的用户名相同,这违背了唯一性约束。
分析:创建用户名的逻辑是,先去db中查询是否有对应的用户名(步骤1),如果没有就创建,如果存在就更新用户的其他信息(步骤2)。用户A执行了步骤1, 用户B执行了步骤1和2,然后用户A执行了步骤2,这样生成了两个同名的用户。
解决方案:
- 串行化请求,将创建用户的请求串行化,比如发送到队列中,这样可以确保全局唯一性。
- 在db层进行唯一性约束,比如使用唯一索引,考虑到庞大的数据量,性能会下降。如果做了分表,唯一索引的方法也不太可行。
- 使用分布式锁,比如redis, zookeeper,redis伪代码如下:
boolean r = redisClient.setnx("userName", currentThread, 10s); // 使用 setnx 原子命令if (!r) { return false;}// 步骤1 查找db确保没有重名// 步骤2 插入用户redisClient.delete("userName");
8.时钟问题
现象:在许多app中,客户端会上报事件,但是事件的发生时间不准确
分析:app客户端时钟可能不准确,或者用户手动调整过系统时钟。
解决方案:
为了调整不正确的设备时钟,一种方法是记录三个时间戳:
- 根据设备的时钟,记录事件发生的时间, device_event_time
- 根据设备的时钟,记录将事件发生到服务器的时间, device_send_time
- 根据服务器时钟,记录服务器收到事件的时间, server_receive_time
事件真实发生时间 = device_event_time + (server_receive_time - device_send_time)
三.参考
《数据密集型应用系统设计》
https://cloud.tencent.com/developer/article/1121727
关键词:
世界快播:分布式系统常见问题
百度手机曝光:后置双摄+4G网络 世界快资讯
骁龙888再就业!荣耀新平板入网:13英寸超大LCD屏_全球速看
德普拿下超级香水合约
速递!AI出来后第一个失业的是孙燕姿:为什么说她的音色不受法律保护
天天最资讯丨中国地形地貌最全的省份:你可能想不到
专家称睡满8小时是误区:张朝阳曾称四小时足够 睡多浪费
项目一个不留!OPPO放弃ZEKU自研芯片业务:多大代价都是最小代价 世界快资讯
法网公布奖金分配:总额提升12.3%,低排位选手获利,冠军230万欧-世界今日报
全球今热点:地位远超iPhone!苹果Reality Pro头显12月大规模量产:售价超2万
环球快播:小白也能辨别!买独显轻薄本必须要看的四大规格
马斯克:当Linda Yaccarino准备好时,我们会在Twitter Spaces进行实时音频对话,欢迎提问任何事情。-每日报道
有赞一面:亿级用户DAU日活统计,有几种方案?-每日速递
每日快播:gazebo+rviz 仿真
OPPO放弃自研芯片!马里亚纳X/Y官网页面悄然404_环球微速讯
天天快报!国外玩家质疑《塞尔达传说:王国之泪》涉嫌抄袭:照搬游戏机制
二次圆满成功!中国可重复火箭发动机传喜讯 今头条
在美国加州 我亲眼见到了Google对AI的孤注一掷_每日热闻
性能秒RTX 4060?AMD新显卡性能实测 光追是短板 今日报
庄河市气象局发布雷电黄色预警【III级/较重】【2023-05-13】
成都惠蓉保报销有等待期吗? 当前播报
4K【龙与地下城:侠盗荣耀】
苹果MacBook新专利公布 掌托与触控板位置实现触控交互
深圳一公司通知母亲节放假3天 每位员工将收到一套礼盒
全国多地气温开始火速上升 北方将迎来今年首轮高温天气过程
电影《灌篮高手》宣布密钥延期 将延长上映至6月19日
DC电影公布《闪电侠》国内首波口碑 将于6月16日全国上映
bilibili云剪辑将于今年5月31日下线 其访问入口关闭
电视剧《庆余年2》宣布正式开机 其海报细节涉嫌抄袭国外艺术家
林志颖首次现身珠海赛车场 身体状态颇为不错
京都动画工作室纵火杀人案9月5日公审 为平成时代最致命案件
迪士尼真人巨制《小美人鱼》即将上映 现已宣布内地版配唱阵容
当前关注:第三章.数据库系统(重点)
使用Pandoc构建Acm模板-焦点简讯
Epic下周神秘游戏喜加4:不是老头环、大表哥2|世界要闻
6死20余伤!广州宝马X3撞人案动机公开:发泄个人情绪 焦点信息
苏丹首都喀土穆等地的武装冲突12日仍在持续|每日速递
剑指 Offer 03. 数组中重复的数字-头条
REITs审核关注事项优化 突出以“管资产”为核心
【新华解读】科创50ETF期权上市启动 丰富市场风险管理工具
先到先停!上海一男子交停车费,回来没有车位停,觉得保安在狡辩
卫士重生_世界新动态
《塞尔达传说:王国之泪》被玩家仅用94分钟通关|当前消息
树状数组--动态维护区间操作-新动态
记一次C++后台开发面试拷打过程
目录
快报:中国第二个陨石坑证实!10万年来最大规模的撞击
【世界报资讯】覆盖全球!我国自主研发的全球风暴潮、海啸监测预警系统正式上线运行
开心麻花进军人工智能领域 成立数字科技有限公司_天天热推荐
96核Zen4史无前例 AMD下代锐龙线程撕裂者被偷跑:再等4个月
离职前月薪不足一万 工作21小时!孟羽童去年统计为格力带货近400万_今日热闻
泛“舟”银河 再赴“天宫”——天舟六号货运飞船发射升空侧记_全球热闻
使用键盘控制gazebo小车模型运动-环球快报
环球讯息:桐柏农商银行:行长进万企 助力乡村振兴
全球观焦点:女硕士求职客服岗位被婉拒!HR教改简历
世界微速讯:危险!无人驾驶第一股 面临强制退市
喜大普奔!曝半幅式方向盘车辆不被允许上工信部公告 全球热消息
能跑100km!一文看懂小牛G400电动车:35L座桶堪比20寸行李箱
专家:我国网络建设可满足4K/8K视频分发 标清机顶盒拖了后腿 天天即时
博菲电气(001255.SZ):拟发行可转债募资不超3.9亿元 投于年产70000吨新能源复合材料制品建设项目|精选
redis持久化之AOF|速看料
勘设股份: 勘设股份关于向特定对象发行股票申请文件的审核问询函回复(修订稿)及募集说明书等申请文件更新的提示性公告 每日动态
叹息!殿堂级经典日漫《圣斗士星矢》 惨遭美国拍成超级大烂片_世界热资讯
“基尼太美” 兰博基尼旗舰超跑Revuelto上市:售价629.4994万元
环球今头条!配2.1英寸显示屏!鑫谷昆仑II 360 ARGB水冷散热器图赏
淄博一小区为外卖员配单车 网友盛赞:人性又安全_天天热推荐
世界第一座私人空间站来了!马斯克SpaceX背后输出
海南发布地质灾害气象风险预警 观天下
环球简讯:Python-单引号、双引号和三引号的作用和区别
全球观点:一致性哈希(哈希环)解决数据分布问题
云原生第三周--kubernetes组件详解|每日播报
记录--9个封装Vue组件的小技巧 每日讯息
CH32内部参考电压的使用-即时焦点
全球头条:【金融街发布】外汇局:一季度货物贸易顺差处于历史同期较高水平
每日精选:专访|田耳:文学或有江湖,写作难以停歇
饭一定要吃七分饱才健康?新研究推翻传统观念 全球热闻
全球简讯:欧洲人最爱!蔚来ET5旅行版实车亮相:真心优雅
当前要闻:环保人士赢了?大众董事长演讲被蛋糕袭击 官方回应:新能源车保护环境吗?
环球视讯!只做了2年 日本家电巨头巴慕达退出手机市场:价格比iPhone还贵
北方今年首轮高温来袭:14日起多地冲击35℃高温
世界观速讯丨促进消费潜能释放 4月份汽车市场产销量同比快速增长
手写Promise教程_then方法|今日热门
Json序列化对象后,使用Lombok后属性xAxis大写变成小写xaxis解决方法-天天时讯
微软本周不会为 Win11 Canary 或 Dev 频道发布新版本|精选
重庆未来三年将实施水利项目超1800个 环球短讯
跑分最高的安卓旗舰!已有1000多人下单iQOO Neo8系列|天天快看
NVIDIA一代神卡RTX 3060 Ti要停产了:清完库存即止
惊了!女网红用AI同时交往1000多个“男友” 年入4亿?-世界实时
电脑也能秒开3A大作!Win11或将引入Xbox Quick Resume功能-全球消息
世界速看:女大学生坐高铁拒绝补票刁难乘务长 后排乘客理论遭辱骂
团结就是力量合唱动作编排视频_团结就是力量合唱动作 焦点快报
如何注册appuploader账号
【申请教程】ChatGPT访问互联网插件-焦点信息
夺冠秘诀?华为软件精英挑战赛两届冠军这样复盘比赛经验
当前速讯:没关系,前端还死不了
Java设计模式【单例模式】 当前速读
【新华500】新华500指数(989001)12日收跌1.31%_每日消息
辅助工具管理器_辅助工具管理器-焦点关注
东莞一锂电池厂深夜大火:照亮整个天空 无人伤亡
部分男厕改女厕引不满 四川大学再回应:进一步完善优化