Uber 架构(1)

此本部会更新内容,并不是最终版本


uber-taxi-for-web.jpg

uber是一家美国硅谷的科技公司。Uber在2009年,由加利福尼亚大学洛杉矶分校辍学生特拉维斯·卡兰尼克和好友加勒特·坎普(Garrett Camp)创立。因旗下同名打车APP而名声大噪。Uber目前已经进入中国大陆的60余座城市,并在全球范围内覆盖了70多个国家的400余座城市

Uber 的分享
参考硅谷之路
知乎
wiki

Uber 架构师 Ranny,重构了 Uber 的框架。


ranny.jpeg

Uber 主要使用两种语言javascriptpython,其中 javascript 助我一臂之力进入编程行业。而且也是我个人无论在工作和业余时间接触最多的一门语言,所以我对于 javascript 有着特殊的感情。现在 javascript 已经成为了跨平台的首选语言,浏览器端的汇编语言。

  • tchannel
    Ranny 说 Uber 已经从 HTTP+JSON 迁移到基于 TChannel 的 Thrift,TChannel 在 Node.js 中比 HTTP 快 20 倍。基于 RPC 进行服务间函数调用。并且屏蔽掉不同的语言的差异。

  • ringpop
     Ringpop是为了服务Uber不断扩大的用户量而产生的一个分布式架构,它能自动检测和恢复单点失败,并且实现负载均衡。一致性哈希(con.sistenthashing):将节点映射到哈希环上,给节点分配任务,实现负载均衡。

  • google s2
    Google 的 S2 基于地理的图数据库,按四边形对地图进行切分。S2 能够将球体分为小区 cell,每个小区有一个 id,地球大致是一个球形。S2 有两个重要特性:能够定义每个cell的分辨率,它能发现需要覆盖区域的cell。

通过阅读和整理资料今天给大家分享一下 Uber 的架构

幻灯片1.JPG

一切从简单开始,简化一些 uber 服务就是将司机派遣给乘客。前面是手机,中间是 PHP 负责业务逻辑后面是MySQL 数据。每 4 秒上传数据更新自己位置,来寻找客服进行匹配来支撑 uber 快速。不过要对应 Uber 业务极速的增长。

f112af399e1dfcb211b0b466f8615009.jpg

为了应对蜂拥而来增长

uber 将 PHP 变成多进程和多线程,同时访问数据,多个线程同查数据库,返给用户。


幻灯片2.JPG
highway-wallpaper.jpeg
  • 一个司机两个顾客:因为每个 php 都是独立访问数据库, 如果锁的机制没有做好,一个司机被两个 PHP 进程同时搜索数据库将司机派遣给两个乘客。
  • 两个司机一辆车 他们用两个 app,而这个时候如果只能派遣一次就出问题了
  • 一个账号两辆车 两个司机同乘一辆车,一个用户两辆车同时登录一个账号,用户位置不断漂移。
    0005018360041553_b.jpg

uber 如何应对挑战

hero2.jpg
幻灯片3.JPG

具体化一下,派遣服务后面 MySql 数据库, 用户可通过移动设备连接到派遣服务。
首先可以把一些影响派遣服务的逻辑拿出来,例如商业逻辑,用户绑定手机号,收付款这些业务,商业逻辑直接走 Python API 来调用,从而减轻派遣服务压力。

幻灯片4.JPG

进一步加一个消息队列,可以抵挡大量的请求。消息队列抵挡压力,同时将日志和位置存在mangoDB 中。这样分出几层,大家还可以在各个层级如果出现问题就可以重试。

消息怎么处理 需要消息管理获得请求就处理消息。
热升级代码 hot push code 升级 request Manager 。不关掉服务,以前处理掉一半的消息怎么办。


幻灯片5.JPG

谈到改进,改进影响 的商业逻辑绑定手机号,Python API 派遣服务
在这个基础将派遣服务变为 nodejs 地理位置将派遣数据库变为 mangodb 。javascript 越来越全面。 不但可以写前端也能写服务。我也受益 JavaScript 才进去这一行。

消息如何处理

require("request-manager")

this.requestManager = new RequestManager()

request.addListener('end',function(){
    var connection = self.requestManager.createContext({
        request:request,
        requestBody:requestBody,
        response:response
    });

    if(connection){
        self.processMessage(connection)
    }
});
幻灯片6.JPG

将许多数据放入内存提高查询速度
避免单点失败,最好是有几个 slave 进行热备。
按区域进行拆分几个区域。每个区域负责自己的服务。而且进行单线程处理,回避各种问题。


幻灯片7.JPG
幻灯片8.JPG
th (2).jpg

最后潜在的风险,雪崩现象 由于一些银行的返回有时候很难。请求超时并且后面不断重试,最后消息队列底部,这时候即使我们重新启动服务由于堆积的消息依旧会吧刚刚启动服务压垮。


crash.jpg

所以也需要快速机制来实现快速失败来避免雪崩想象。

避免单点失败

服务器如何热备

require("slave-master")

var severList = [{
    id:1,
    host:'localhost',
    path:'/',
    host:8000,
    rmPort:8001,
    smPort:8002
}]

this.slaveMaster = new SlaveMaster(serverID, serverList);
this.slaveMaster.onBecomingMaster = function(){
    //load dat from Mango
}

MongoDB 如何访问?

可以 mangodb 数据库的访问包裹一层。记录重试次数,配置这样大家同一调用

require("mango-wrapper")

this.mango = new MangoWrapper({
    replicaSet:settings.mango.replicaSet,
    daabaseName:'testDB',
    retryList:settings.mango.retryList,
    retryInterval:settings.mango.retryInterval,
    backupDir:settings.mango.backupDir,
    downDir:settings.mango.downDir,
    restoreInterval:settings.mango.restoreInterval
});

this.mango.insert('gpsLogs',gpsLog)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353

推荐阅读更多精彩内容