Uber利用Golang构建高性能地理查询服务实践( 五 )
最终 , Uber使用了折衷的办法:使用读写锁来同步对地理位置索引的访问 。 为了最大程度地减少锁争用 , 在将新的索引段交换到主索引中以用于服务查询之前 , 会建立新的索引段 。 和StorePointer/LoadPointer方法相比 , 锁的使用导致查询等待时间略有增加 , 但是代码库的简单性和可维护性方面有了非常大的提高 。
经验总结
回顾整个案例 , 整个服务重构取得了很好的效果 , 并给予了很多启示:
提高了团队生产力和快速迭代 。 对于C++ , Java或Node.js开发人员来说 , Golang通常只需要几天的时间就可以上手 , Golang项目代码简便易于维护和实施部署 。
高吞吐量 , 低延迟 。 在主要数据中心 , 该服务用了40台运行35% CPU的计算机 , 峰值负载为170k QPS 。 响应时间极大缩短:95%服务请求响应时间不大于5毫秒 。 99%服务请求时间不大于50毫秒 。
超级可靠 。 自启动以来 , 该服务的正常运行时间为99.99% 。 唯一的故障是由初学者编程错误和第三方库中的文件描述符泄漏错误引起 。 Golang的运行时没有发现任何问题 。
推荐阅读
- 地下城与勇士|DNF:团本毕业难度高?利用版本凑齐团本装备so easy!
- 三国杀|DNF:利用好活动即可独当一面!回归玩家养成指南
- 三国志战略版|三国志战略版:利用玄学抽卡,立马脱非入欧!抽不到橙你来找我!
- 我的世界|如果现实中你获得了Minecraft的“奶”,你会如何利用这个能力?
- 坦克世界|《坦克世界》杂谈,二雷时代的弊端,没好好利用话语权
- 蝴蝶|《天涯明月刀手游》困难苏夜来打法攻略,牵线机制利用好
- 原神|《原神》资源利用率大幅度降低,玩家:真就一次性大世界体验?
- 主机掌机类游戏|在《塞尔达传说:荒野之息》中,玩家利用暖暖草果玩起了梯云纵
- 第一桶金|梦幻西游:选择正确的游戏打开方式,利用五开赚取人生第一桶金!
- 梦幻西游|梦幻西游:利用好这个工具,做任务变的简单多了