据报道,Uber 仅在过去4年的时间里,业务就激增了 38 倍。Uber 首席系统架构师 Matt Ranney 在一个非常有趣和详细的访谈《可扩展的 Uber 实时市场平台》中告诉我们 Uber 软件是如何工作的。
本次访谈中没有涉及你可能感兴趣的峰时定价(Surge pricing,译注:当Uber 平台上的车辆无法满足大量需求时,将提升费率来确保乘客的用车需求)。但我们了解到 Uber 的调度系统,他们如何实现地理空间索引、如何扩充系统、如何提高可用性和如何处理故障,例如在处理数据中心故障时,他们甚至会把司机电话作为一个外部分布式存储系统用于恢复系统。
访谈的总体印象是 Uber 成长得非常快速。很多他们选择的的架构是快速成长的结果,同时也想让组建不久的团队可以尽可能快地移动。因为他们的主要目标是让团队的工程速度尽可能得快,所以在后台使用了大量的技术。
在经历一个稍显混乱但非常成功的开端后,Uber 似乎学习到很多:他们的业务和他们需要做什么才能成功。他们早期的调度系统只是为了送人。由于 Uber 的使命成长为除了送人以外,还要处理箱子和杂物(编注:Uber 已涉及快递业务。请看伯乐在线的这篇《Uber 用大数据的惊艳方式》),他们的调度系统已经被抽象并构建在可靠的和智能的架构基础上。
虽然 Matt 认为他们的架构可能有点疯狂,使用一致性哈希环和 gossip 协议的想法非常适合他们的使用场景。
很难不被 Matt 干事业的激情所迷住。当谈到他们的调度系统——DISCO,他兴奋地说就像学校里的旅行推销员问题(traveling salesman problem)。这是一个很酷的计算机科学问题。虽然解决方案不是最优的,但这是现实世界中一个规模很大,要求实时性,由容错和可扩展的部件建立起来的 问题。这是不是很酷?
让我们看看 Uber 内部是如何工作的。下面是我对 Matt’s 谈话的注释: