Thursday, February 25, 2016

design uber这题到底怎么答!

http://www.mitbbs.com/article_t/JobHunting/33150121.html

发信人: mitu9090 (mitu), 信区: JobHunting
标  题: design uber这题到底怎么答!
发信站: BBS 未名空间站 (Wed Feb 24 04:10:05 2016, 美东)

请大家讨论一下吧!

我能想到的,在real面试中我可能会这么说:

1. 首先看用户和司机在app上都需要什么功能:
  1)用户:设目的地、list附近的车,
  2)司机:查看顺路乘客、查看附近乘客、自动报单供选择、直接分配单子
2. 根据需求,系统分为几层:
  1)load balancer
  2)web server
  3)数据存储(包括user/driver的meta data,位置信息,历史订单与奖励信息、聊
天信息)
  4)逻辑处理(user和driver的match,driver在接user的路上信息推送、奖励分配)
3. 具体每层系统的设计:

1* load balance:
  1)按app的IP地址分配地理位置最近,或者latency最小的web server
  2)在人口密集地(NY、BEIJING),选负载较少的server
2* web server层
  1)nothing special
3* 数据储存和设计
  1)user/driver的meta data存在key-value的cache中,如memcached,后面的
permanent storage用SQL with replica。全国的信息可以centralize一份。
  2)位置信息,储存结构为网格化,即按照经纬度把位置分为5km见方的grid,用key-
val结构的cache存,双向存储(user/driver为key、position为value,然后position
为key,user为value)。不需要后面permanent storage支持。cache使用replica。按
照地区设置server。
  3)历史订单与奖励信息,基本同(1),不需要设置key-value cache,直接用SQL存
,因为不要求快速查询,奖励信息如优惠券等可以offline计算。
  4)聊天信息,等同(3)
4* 逻辑处理层
  1)user/driver match的logic在本地server做,奖励信息计算等在全国数据库中
offline做。
  2)处理移动端offline的情况


我能想到的就这些,抛砖引玉,请大家讨论、指正补充。





 

No comments:

Post a Comment