42qu.com
基于 Th rift , 编写 VPS 管理系
统
以及等等胡思乱想 ...



张沈鹏
42q u .c o m 创始人
zs p 042@ g m ail.c o m

                          42qu.com , 找到给你答案的人
Th rift 是什么 ?

• 一个跨语言的远程调用框架

• 2007 年 Facebook 最初开发

• 2008 年 Apache 开源项目


                   42qu.com , 找到给你答案的人
Th rift 的项目初衷
fac e b o o k 创造 th rift 是为了解决
1 . 各系统间大数据量的传输通信
2 . 不同语言系统之间的跨平台

参考资料 :

   thrift 入门介绍
   http://wenku.baidu.com/view/95ed8e2c0066f5335a81213d.html


   Facebook 的系统架构
   http://coolshell.cn/articles/4549.html
   http://www.quora.com/What-is-Facebooks-architecture


                                                         42qu.com , 找到给你答案的人
Wh at is Fac e b o o k's arc h ite c tu re ?
• B u s in e s s lo g ic is e xp o s e d as s e rvic e s u s in g
  Th rift . S o m e o f th e s e s e rvic e s are
  im p le m e n te d in PH P, C + + o r Java d e p e n d in g
  o n s e rvic e re q u ire m e n ts (s o m e o th e r
  lan g u ag e s are p ro b ab ly u s e d ...)

• 业务逻辑以 S e rvic e 的形式存在,其使用
  Th rift 。这些 S e rvic e 根据需求的不同由 PH P ,
  C + + 或 Java 实现(也可以用到了其它的一些语
  言… … )

  h ttp ://www.q u o ra.c o m /Wh at- is - F ac e b o o ks - arc h ite c tu re
MVC
• 我个人的理解

View
• PH P = Pyth o n 中的模版层 ( 比如 m ako ,
  j j)
   in a


Controller
• Th rift , 背后各种语言
Th rift 谁在用 ?
                                                                                 联合创始人
                            Fac e b o o k   前首席技术官 C TO       亚当 · 德安杰罗 (Ad am D 'An g e lo )
            Fac e b o o k                     前项目工程师            查理 · 奇弗 (C h arlie C h e e ve r)




• Th rift 用于系统后端数据的通信
• 服务端是用 C + + 来实现的,客户端则是 p yth o n

参考资料
h ttp ://www.p h ilwh ln .c o m /q u o ras - te c h n o lo g y- e xam in e d #th rift



                                                           42qu.com , 找到给你答案的人
Th rift 谁在用 ?


h o n g q n ( 豆瓣 C TO )

   利用 Pas te S c rip t 简化基于 Th rift 的服务框架开发
   • h ttp ://www.s lid e s h are .n e t/h o n g q n /p as te - s c rip t- th rift


   合久必分,分久必合
   • h ttp ://www.s lid e s h are .n e t/h o n g q n /s s - 1 2662476



                                                       42qu.com , 找到给你答案的人
Th rift 谁在用 ?
                     中国宽带产业基金 (CBC Capital)
              主要投资者包括中信资本、新闻集团、电讯盈科、网通
领投的 7000 万美元的投资,该基金董事长为田溯宁 ( 前中国网通
                                CEO)




E ve rn o te ( 印象笔记 ) 用 Th irft 实现 API




                         42qu.com , 找到给你答案的人
RPC 有很多选择 ?

•   XML- RPC
•   S O AP
•   IC E
•   ...


               Wh y   Th rift ?
                            42qu.com , 找到给你答案的人
E ve rn o te 的心路历程


S o API To g e th e r: E ve rn o te an d Th rift

h ttp ://b lo g .e ve rn o te .c o m /te c h /201 1 /05/26/e ve rn o te - an d - th rift/




                                                          42qu.com , 找到给你答案的人
E ve rn o te 的心路历程
 在 2007 年当我们开始计划 E ve rn o te 服务的时候
 我们就知道在发布服务的那一天就需要同时支持

• 瘦客户端 ( 象浏览器 )
• 胖客户端

 这一点促使我们在设计 we b 用户界面之前就开始思考远
 程协议和客户端访问 API 接口

 而不是拖到几个月之后将 API 接口架在已经存在网站服务
 上

                         42qu.com , 找到给你答案的人
E ve rn o te 应用对 API 访问接口的需
                求
1 . 跨平台

08 年 2 月份发布的时候

产品代码有

 服务器端 JAVA
 客户端是 Win 32( 包括 Win Mo b ile ) C + +
 客户端 O b j C C o c o a (iO S )
          -

                            42qu.com , 找到给你答案的人
E ve rn o te 应用对 API 访问接口的需
                求
2. 二进制数据效率高



• 客户同步的便条信息中包含上百幅嵌入图,总共
  有 1 0M 字节大小

• 我们需要 API 接口用将近 1 5M 的带宽传输 1 5M
  的便条


                     42qu.com , 找到给你答案的人
E ve rn o te 应用对 API 访问接口的需
                求
3. 向上 / 向下兼容性



一旦有人在他的笔记本上安装了 1 .1 版

就不想在每次扩展数据模型时强迫升级本地软件




                 42qu.com , 找到给你答案的人
E ve rn o te 应用对 API 访问接口的需
                求
4. 各个语言原生支持

不想写针对每个客户端写大量解析 / 封装代码

这个费时又容易出错,也会使得 3 变得不切实际




                 42qu.com , 找到给你答案的人
E ve rn o te 应用对 API 访问接口的需
                求
5. 项目开源

 支持有标准可依或开源软件

 不想把服务 API 锁在一个商业产品上




                 42qu.com , 找到给你答案的人
E ve rn o te 应用对 API 访问接口的需
                求
6. 不要太大

 倾向于在每个移动客户端部署不超过 1 MB 的文件
 ,不要超过 200 个类




                 42qu.com , 找到给你答案的人
E ve rn o te 的人生抉择
•   我们花了几个月时间来研究和测试各种备选方案。 XML- RPC 和
    S O AP 在某些领域 ( 上面的 1 和 5) 很强。 Ze ro C 的 IC E 在别的领域
    (2 和 4) 很强。我们也争论过是否自己写一个专用的协议。

•   一个朋友推荐我们看一下 F ac e B o o k 最近开源的 Th rift 框
    架。 Fac e b o o k 在内部用它在后端服务器之间传递消息,它们之间经
    常跨越程序语言的界线 ( 如 p h p 到 c + + ) 。其他人好象也是用 Th ift
    做类似的事情:在后端服务器之间通信用。

•   我们寻求的跟上面这有一点不一样:这个框架可以用在服务器之间的
    通信中,但是也需要用在大量的客户端与服务器通过 in te rn e t 同步上
    。

    Th rift 是最适合我们需求
                                   42qu.com , 找到给你答案的人
Wh y Th rift ?
• 1 . 跨平台

• 我们用 Th rift 的接口定义语言定义好数据模
  型和服务操作

• 然后用它提供的编译器为各种不同语言生
  成客户端和服务器端的数据结构和服务接
  口调用。
                       42qu.com , 找到给你答案的人
Wh y Th rift ?
• 2. 二进制数据效率高


 如果我们指定二进制数据是 1 MB 的数据
 编码后在线路上传输的也就是 1 MB 左右




                  42qu.com , 找到给你答案的人
Wh y Th rift ?
• 3. 向上 / 向下兼容性

 这是 Th rift 真正适用的地方。如果你足够细心并
 且明白 th rift 是如何工作的话,你就能在不影响现
 有的客户端的情况下增加数据结构、字段、服务
 方法和函数参数


 3 年前发布的 Win d o ws 和 Mac 客户端在今天仍
 然能跟 E ve rn o te 同步

                     42qu.com , 找到给你答案的人
Wh y Th rift ?
• 4. 原生支持

 在那个时候
 Th rift 没有包含任何 O b j C C o c o a 支持
                     -

 这样我们 Mac 组的一个同事把这个加到了
 Th rift 编译器里。

                        42qu.com , 找到给你答案的人
Wh y Th rift ?
• 5. 代码开源


   F ac e b o o k
   把 th rift 交给了 ap ac h e 开源基金会




                       42qu.com , 找到给你答案的人
Wh y Th rift ?
• 6. 不要太大
 Th rift 运行库和生成的代码都很小,而且是直接了
 当。我能够很容易阅读和弄明白他们是如何工作
 的

 从那以后,它开始变得有点复杂

 因为开源 , 不同的贡献者添加了很多用例并作了
 一些优化,但是我要说,它跟其它方案比还是相
 当紧凑的

                   42qu.com , 找到给你答案的人
Wh y Th rift ?
• 最后的结果是 E ve rn o te 服务接口,这个让我们自己的客
  户 ( 几百个第三方应用 ) 使用原生代码跟一个通用的 API
  访问接口打交道。我们有超过 3 百万的活跃用户,经常在
  不同的平台上使用 e ve rn o te 。

数据更新 :

• 用户数量突破了 2500 万 , 超过 1 00 万的付费用户
• E ve rn o te C E O Ph il Lib in 指出, E ve rn o te 的付费用户占
  有率随着用户使用时间增长而增长。刚使用 E ve rn o te 一
  个月的用户中,付费的用户不超过 0.5% ,但在那些四年
  来一直陪伴 E ve rn o te 的老用户中,付费人群占到了 25%
  之多。
                                    42qu.com , 找到给你答案的人
为什么我要用 th rift
我在做什么事 ?



vp s .42q u .c o m
vp s .42q u .c o m
2 个月 , 1 1 6 个 VPS 用户
Wh o Are We ?


• vp s e e @ 南非

• p lan

• 我 ( 张沈鹏 )

                    42qu.com , 找到给你答案的人
Wh y we u s e th rift
• 我不懂虚拟化

• 他们不懂写网站

• 我不需要关心他们是怎么实现

• 他们不需要知道我是怎么实现
vp s .42q u .c o m 的 具体实现


h ttp s ://g ith u b .c o m /42q u /vp s

接口定义文件

h ttp s ://g ith u b .c o m /42q u /vp s /b lo b /m as te r/s aas .th rift
好处 1 : 强迫你去设计优雅的接口


PS : 传闻 G o o g le 流传着一句话
每一个优雅的接口背后都有一堆龌蹉的代码


接口是代码的防火墙 ( 隔离龌蹉的代码 )

明确责任的界限 ( 到底是谁的代码出了问题
 )
                 42qu.com , 找到给你答案的人
只暴露接口的哲学
  每个人只需要知道他应该知道的事情

乔布斯的保密哲学 ?
保证信息的最简化 , 不制造额外的信息噪音
和他的设计哲学其实是一样的

                所以 " 雷布斯 " 永远不是乔布斯
                           太多信息噪音 ...


PS : 我喜欢   比尔 . 盖茨   , 不喜欢乔布斯
                      42qu.com , 找到给你答案的人
S te ve Ye g g e :   Am azo n 的前员工,现任 G o o g le 员工




S te ve Y 对 Am azo n 和 G o o g le 平台的长篇大
                                论
   h ttp ://c o o ls h e ll.c n /artic le s /5701 .h tm l




                                    42qu.com , 找到给你答案的人
S te ve Ye g g e
•   我曾在 Am azo n 工作了六年半,现在,我在 G o o g le 的日子也差没不
    多这么长了。


•   对于这两家公司,有一件事总是萦绕着我— — 这种感觉一天比一天强
    烈─ ─ 那就是, Am azo n 每件事都做错了,而 G o o g le 每件事都做对
    了。


•   当然啦,这是很笼统的话,但却是惊人的准确,相当的疯狂吧。大概
    有一百甚至两百种不同的地方可以让我们去比较这两个公司,而
    G o o g le 可能在每一项都能胜出,如果我记的没错,除了其中 3 项以
    外。


•   因为,我曾用电子表格把这些项都列出来了,只是法务部门不会让我
    给任何人看,即使人事招募部门很喜欢这个报表。
但是
他们有一件事做的非常非
常好,其好到可以把其他
政治,理念,技术上的消
耗和混乱完全弥补回来。
有一天, Je ff B e zo s 下了一份命令

• 我们现在要说的这个人,是在多个严肃的公开场合说要来
  Am azo n 工作就应该付他钱才对的人。

• 当有人跟他意见不同时,他会递出写有他名字的黄色即时
  贴以提醒那个人“ 谁是公司的老大 ” 。这家伙是… …
  S te ve Jo b s

• 我想,除了没有品味和设计能力,他们很相似。千万别误
  解我, B e zo s 是个绝顶聪明的人,只不过他把那些正常
  的管控搞得像嗑了药的嬉皮士一样罢了。

• 所以,有一天, Je ff B e zo s 下了一份命令。当然,他总
  是这么干,这些命令对人们的影响来说就像用橡皮槌敲击
  蚂蚁一样。
命令有几个要点



    42qu.com , 找到给你答案的人
1


所有团队的程序模块都要以
通过 S e rvic e In te rfac e 方
式将其数据与功能开放出来


                  42qu.com , 找到给你答案的人
2




团队间的程序模块的信息通
信,都要通过这些接口。


         42qu.com , 找到给你答案的人
3
除此之外没有其它的通信方式

其他形式一概不允许:不能使用直接链结
程序、不能直接读取其他团队的数据库、
不能使用共享内存模式、不能使用别人模
块的后门、等等,等等,唯一允许的通信
方式只能是能过调用 S e rvic e In te rfac e 。


                     42qu.com , 找到给你答案的人
4



任何技术都可以使用。比如:
H TTP 、 C o rb a 、 Pu b s u b 、自定义
的网络协议、等等,都可以, B e zo s
不管这些
5
所有的 S e rvic e In te rfac e ,毫无
例外,都必须从骨子里到表面上设
计成能对外界开放的。

也就是说,团队必须做好规划与
设计,以便未来把接口开放给全
世界的程序员,没有任何例外。
6


不这样的做
  会被
 炒鱿鱼
hongq n

分久必合 , 合久必分
服务 VS 库
张沈鹏 补充 :)

 服务和库的本质区别 , 服务有数据

 • 库比作开源项目
   – 比如 d n s p o d 开源 d n s 服务器


 • 服务是一个解决方案
   – d n s p o d 提供免费的 d n s 解析服务

                               42qu.com , 找到给你答案的人
服务 VS 库

• 张沈鹏 补充 :)

 – 服务可以卖给全世界 ~ ^_^

  • S te ve Y 对 Am azo n 和 G o o g le 平台的长篇
    大论

  • 不要去做 "in - h o u s e p ro g ram m e r"

                               42qu.com , 找到给你答案的人
不要去做 "in - h o u s e s o ftware "
服务 VS 库

• Jo e l S p o ls ky 在耶鲁大学的演讲(上)

 Jo e l S p o ls ky 是一个美国的软件工程师,他的网络日志 "Jo e l谈软
 件 " ( Jo e l o n S o ftware )非常有名,读者人数可以排进全世界前
 1 00 名。




                               42qu.com , 找到给你答案的人
服务 VS 库

• 毕业以后, Jo e l先在微软公司干了一段日子,然后回到
  纽约,进入维亚康母公司( Viac o m ),为这家巨型的娱
  乐传播公司编写软件,成为 IT 部门里一个程序员( in -
  h o u s e p ro g ram m e r )

• 后来, Jo e l回忆起来,认为这是他一生中最痛苦的日子
  ,并且劝告计算机系的学生尽可能


  不要去做 " in- ho us e p ro g ra mme r"

                        42qu.com , 找到给你答案的人
服务 VS 库

in- ho us e p ro g ra mme r


传统公司 IT 部门里的程序员
只属于公司内部的维护人员
而不是直接从事核心业务的人员
h ttp ://www.ru an yife n g .c o m /b lo g /2007/1 2/jo e l_s p o ls ky_talk_at_yale _p art_i.h tm l
或
h ttp ://b lo g .c s d n .n e t/p o n g b a/artic le /d e tails /1 91 8649




                                                               42qu.com , 找到给你答案的人
in- ho us e p ro g ra mme r
• 因为做 in - h o u s e 软件,你永远不会像做
  fac e b o o k 那样实现的功能跟公司命运息息相关,
  后者你可以花上一个星期去捣鼓界面上的一个小
  特性,因为你的产品是要给大家用的
  你有机会实现真正漂亮的东东

• 另外,你能得到上司的重视,你的职业生涯与你
  的技术挂钩。

• 而作 in - h o u s e 软件你就只能跟另外两个人猥琐
  在一个阴暗的办公室角落,面朝没有窗户的墙壁
  ,挥汗如雨地猛敲 H TML 代码;而产品经理本人
  则坐在宽敞明亮的大办公室里面晃悠。
我的衍生



 不要开发一个东西
只打算给自己公司内部用
嗯, B e zo s 领悟到的大事是

为了销售书籍和各种商品需要的基础架构,这个
基础架构可以被转变成为绝佳计算平台
( C o m p u tin g Platfo rm )。

所以,现在他们有了 Am azo n E las tic C o m p u te
C lo u d (亚马逊弹性运算云平台
E C 2 ), Am azo n E las tic
Map Re d u c e , Am azo n Re latio n al D atab as e
S e rvic e (亚马逊关系数据库服务)

以及其他可到 AWS aws .am azo n .c o m 查得到的
一堆 S e rvic e
am azo n
亚马逊最奇怪的生意:

 土耳其机器人
 Mechanical Turk

 其代表的重要理念— — 一切与亚马逊老总杰夫 · 贝佐斯有
 关的事情都蕴含着重要理念— — 是将电脑无法完成的无数
 琐碎的脑力工作自动化

 IBM 的沃森( Watson )机器人也干不了这些事儿。(“
 亚马逊土耳其机器人” 是一种众包网络集市,能使计算机
 程序员调用人类智能来执行目前计算机尚不足以胜任的任
 务。
土耳其机器人
• 沃尔夫冈 · 冯 · 坎佩伦( Wo lfg an g vo n
  Ke m p e le n ) 1 770 年打造了一套所谓的自
  动下棋机,击败了当时一些最优秀的棋
  手,更让其他所有人目瞪口呆。奥妙所
  在:一位象棋大师藏在机器里头。
• 而藏在亚马逊的土耳其机器人里面则是数
  以千计的大活人,随时准备完成平台上发
  布的超过 1 5 万种工作。
用例

• 马特 · 理查森( Matt Ric h ard s o n )之手的
  奇特相机,设计初衷就是,如何用 20 个字
  来描述一张照片。

• 这款相机目前被称为“ 白描相机
  ( D e s c rip tive C am e ra )” ,使用一张文
  字描述的打印字条来取代实际拍摄的图
  像。
• h ttp ://te c h 2ip o .c o m /50980/
起源


亚马逊卖书

图书的商品信息需要人工去完善
总结
• 只有当你想把一个东西卖给全世界的时候
  你才有可能去把一个事情做好
        而不是 j s t wo rk
             u

• 只有当一个东西能卖到钱的时候
  你才有动力去把一件事情做好
广告 : 我们卖钱的服务
• 欢迎购买我们的 vp s
                        vp s .42q u .c o m



• p yth o n 网站开发 201 2 暑期 基础入门班 报名中
  1 6 天的课时 ( 周一 至 周五 下午 )
    收费 2500, 限 1 5 人
                           邮箱 :
  42q u .p y@ g m ail.c o m
42qu.com
找到给你答案的人

42qu thrift1

  • 1.
  • 2.
    基于 Th rift, 编写 VPS 管理系 统 以及等等胡思乱想 ... 张沈鹏 42q u .c o m 创始人 zs p 042@ g m ail.c o m 42qu.com , 找到给你答案的人
  • 3.
    Th rift 是什么? • 一个跨语言的远程调用框架 • 2007 年 Facebook 最初开发 • 2008 年 Apache 开源项目 42qu.com , 找到给你答案的人
  • 4.
    Th rift 的项目初衷 face b o o k 创造 th rift 是为了解决 1 . 各系统间大数据量的传输通信 2 . 不同语言系统之间的跨平台 参考资料 : thrift 入门介绍 http://wenku.baidu.com/view/95ed8e2c0066f5335a81213d.html Facebook 的系统架构 http://coolshell.cn/articles/4549.html http://www.quora.com/What-is-Facebooks-architecture 42qu.com , 找到给你答案的人
  • 5.
    Wh at isFac e b o o k's arc h ite c tu re ? • B u s in e s s lo g ic is e xp o s e d as s e rvic e s u s in g Th rift . S o m e o f th e s e s e rvic e s are im p le m e n te d in PH P, C + + o r Java d e p e n d in g o n s e rvic e re q u ire m e n ts (s o m e o th e r lan g u ag e s are p ro b ab ly u s e d ...) • 业务逻辑以 S e rvic e 的形式存在,其使用 Th rift 。这些 S e rvic e 根据需求的不同由 PH P , C + + 或 Java 实现(也可以用到了其它的一些语 言… … ) h ttp ://www.q u o ra.c o m /Wh at- is - F ac e b o o ks - arc h ite c tu re
  • 6.
    MVC • 我个人的理解 View • PHP = Pyth o n 中的模版层 ( 比如 m ako , j j) in a Controller • Th rift , 背后各种语言
  • 7.
    Th rift 谁在用? 联合创始人 Fac e b o o k 前首席技术官 C TO 亚当 · 德安杰罗 (Ad am D 'An g e lo ) Fac e b o o k 前项目工程师 查理 · 奇弗 (C h arlie C h e e ve r) • Th rift 用于系统后端数据的通信 • 服务端是用 C + + 来实现的,客户端则是 p yth o n 参考资料 h ttp ://www.p h ilwh ln .c o m /q u o ras - te c h n o lo g y- e xam in e d #th rift 42qu.com , 找到给你答案的人
  • 8.
    Th rift 谁在用? h o n g q n ( 豆瓣 C TO ) 利用 Pas te S c rip t 简化基于 Th rift 的服务框架开发 • h ttp ://www.s lid e s h are .n e t/h o n g q n /p as te - s c rip t- th rift 合久必分,分久必合 • h ttp ://www.s lid e s h are .n e t/h o n g q n /s s - 1 2662476 42qu.com , 找到给你答案的人
  • 9.
    Th rift 谁在用? 中国宽带产业基金 (CBC Capital) 主要投资者包括中信资本、新闻集团、电讯盈科、网通 领投的 7000 万美元的投资,该基金董事长为田溯宁 ( 前中国网通 CEO) E ve rn o te ( 印象笔记 ) 用 Th irft 实现 API 42qu.com , 找到给你答案的人
  • 10.
    RPC 有很多选择 ? • XML- RPC • S O AP • IC E • ... Wh y Th rift ? 42qu.com , 找到给你答案的人
  • 11.
    E ve rno te 的心路历程 S o API To g e th e r: E ve rn o te an d Th rift h ttp ://b lo g .e ve rn o te .c o m /te c h /201 1 /05/26/e ve rn o te - an d - th rift/ 42qu.com , 找到给你答案的人
  • 12.
    E ve rno te 的心路历程 在 2007 年当我们开始计划 E ve rn o te 服务的时候 我们就知道在发布服务的那一天就需要同时支持 • 瘦客户端 ( 象浏览器 ) • 胖客户端 这一点促使我们在设计 we b 用户界面之前就开始思考远 程协议和客户端访问 API 接口 而不是拖到几个月之后将 API 接口架在已经存在网站服务 上 42qu.com , 找到给你答案的人
  • 13.
    E ve rno te 应用对 API 访问接口的需 求 1 . 跨平台 08 年 2 月份发布的时候 产品代码有 服务器端 JAVA 客户端是 Win 32( 包括 Win Mo b ile ) C + + 客户端 O b j C C o c o a (iO S ) - 42qu.com , 找到给你答案的人
  • 14.
    E ve rno te 应用对 API 访问接口的需 求 2. 二进制数据效率高 • 客户同步的便条信息中包含上百幅嵌入图,总共 有 1 0M 字节大小 • 我们需要 API 接口用将近 1 5M 的带宽传输 1 5M 的便条 42qu.com , 找到给你答案的人
  • 15.
    E ve rno te 应用对 API 访问接口的需 求 3. 向上 / 向下兼容性 一旦有人在他的笔记本上安装了 1 .1 版 就不想在每次扩展数据模型时强迫升级本地软件 42qu.com , 找到给你答案的人
  • 16.
    E ve rno te 应用对 API 访问接口的需 求 4. 各个语言原生支持 不想写针对每个客户端写大量解析 / 封装代码 这个费时又容易出错,也会使得 3 变得不切实际 42qu.com , 找到给你答案的人
  • 17.
    E ve rno te 应用对 API 访问接口的需 求 5. 项目开源 支持有标准可依或开源软件 不想把服务 API 锁在一个商业产品上 42qu.com , 找到给你答案的人
  • 18.
    E ve rno te 应用对 API 访问接口的需 求 6. 不要太大 倾向于在每个移动客户端部署不超过 1 MB 的文件 ,不要超过 200 个类 42qu.com , 找到给你答案的人
  • 19.
    E ve rno te 的人生抉择 • 我们花了几个月时间来研究和测试各种备选方案。 XML- RPC 和 S O AP 在某些领域 ( 上面的 1 和 5) 很强。 Ze ro C 的 IC E 在别的领域 (2 和 4) 很强。我们也争论过是否自己写一个专用的协议。 • 一个朋友推荐我们看一下 F ac e B o o k 最近开源的 Th rift 框 架。 Fac e b o o k 在内部用它在后端服务器之间传递消息,它们之间经 常跨越程序语言的界线 ( 如 p h p 到 c + + ) 。其他人好象也是用 Th ift 做类似的事情:在后端服务器之间通信用。 • 我们寻求的跟上面这有一点不一样:这个框架可以用在服务器之间的 通信中,但是也需要用在大量的客户端与服务器通过 in te rn e t 同步上 。 Th rift 是最适合我们需求 42qu.com , 找到给你答案的人
  • 20.
    Wh y Thrift ? • 1 . 跨平台 • 我们用 Th rift 的接口定义语言定义好数据模 型和服务操作 • 然后用它提供的编译器为各种不同语言生 成客户端和服务器端的数据结构和服务接 口调用。 42qu.com , 找到给你答案的人
  • 21.
    Wh y Thrift ? • 2. 二进制数据效率高 如果我们指定二进制数据是 1 MB 的数据 编码后在线路上传输的也就是 1 MB 左右 42qu.com , 找到给你答案的人
  • 22.
    Wh y Thrift ? • 3. 向上 / 向下兼容性 这是 Th rift 真正适用的地方。如果你足够细心并 且明白 th rift 是如何工作的话,你就能在不影响现 有的客户端的情况下增加数据结构、字段、服务 方法和函数参数 3 年前发布的 Win d o ws 和 Mac 客户端在今天仍 然能跟 E ve rn o te 同步 42qu.com , 找到给你答案的人
  • 23.
    Wh y Thrift ? • 4. 原生支持 在那个时候 Th rift 没有包含任何 O b j C C o c o a 支持 - 这样我们 Mac 组的一个同事把这个加到了 Th rift 编译器里。 42qu.com , 找到给你答案的人
  • 24.
    Wh y Thrift ? • 5. 代码开源 F ac e b o o k 把 th rift 交给了 ap ac h e 开源基金会 42qu.com , 找到给你答案的人
  • 25.
    Wh y Thrift ? • 6. 不要太大 Th rift 运行库和生成的代码都很小,而且是直接了 当。我能够很容易阅读和弄明白他们是如何工作 的 从那以后,它开始变得有点复杂 因为开源 , 不同的贡献者添加了很多用例并作了 一些优化,但是我要说,它跟其它方案比还是相 当紧凑的 42qu.com , 找到给你答案的人
  • 26.
    Wh y Thrift ? • 最后的结果是 E ve rn o te 服务接口,这个让我们自己的客 户 ( 几百个第三方应用 ) 使用原生代码跟一个通用的 API 访问接口打交道。我们有超过 3 百万的活跃用户,经常在 不同的平台上使用 e ve rn o te 。 数据更新 : • 用户数量突破了 2500 万 , 超过 1 00 万的付费用户 • E ve rn o te C E O Ph il Lib in 指出, E ve rn o te 的付费用户占 有率随着用户使用时间增长而增长。刚使用 E ve rn o te 一 个月的用户中,付费的用户不超过 0.5% ,但在那些四年 来一直陪伴 E ve rn o te 的老用户中,付费人群占到了 25% 之多。 42qu.com , 找到给你答案的人
  • 27.
  • 28.
  • 29.
    vp s .42qu .c o m
  • 30.
    2 个月 ,1 1 6 个 VPS 用户
  • 31.
    Wh o AreWe ? • vp s e e @ 南非 • p lan • 我 ( 张沈鹏 ) 42qu.com , 找到给你答案的人
  • 32.
    Wh y weu s e th rift • 我不懂虚拟化 • 他们不懂写网站 • 我不需要关心他们是怎么实现 • 他们不需要知道我是怎么实现
  • 33.
    vp s .42qu .c o m 的 具体实现 h ttp s ://g ith u b .c o m /42q u /vp s 接口定义文件 h ttp s ://g ith u b .c o m /42q u /vp s /b lo b /m as te r/s aas .th rift
  • 34.
    好处 1 :强迫你去设计优雅的接口 PS : 传闻 G o o g le 流传着一句话 每一个优雅的接口背后都有一堆龌蹉的代码 接口是代码的防火墙 ( 隔离龌蹉的代码 ) 明确责任的界限 ( 到底是谁的代码出了问题 ) 42qu.com , 找到给你答案的人
  • 35.
    只暴露接口的哲学 每个人只需要知道他应该知道的事情 乔布斯的保密哲学? 保证信息的最简化 , 不制造额外的信息噪音 和他的设计哲学其实是一样的 所以 " 雷布斯 " 永远不是乔布斯 太多信息噪音 ... PS : 我喜欢 比尔 . 盖茨 , 不喜欢乔布斯 42qu.com , 找到给你答案的人
  • 36.
    S te veYe g g e : Am azo n 的前员工,现任 G o o g le 员工 S te ve Y 对 Am azo n 和 G o o g le 平台的长篇大 论 h ttp ://c o o ls h e ll.c n /artic le s /5701 .h tm l 42qu.com , 找到给你答案的人
  • 37.
    S te veYe g g e • 我曾在 Am azo n 工作了六年半,现在,我在 G o o g le 的日子也差没不 多这么长了。 • 对于这两家公司,有一件事总是萦绕着我— — 这种感觉一天比一天强 烈─ ─ 那就是, Am azo n 每件事都做错了,而 G o o g le 每件事都做对 了。 • 当然啦,这是很笼统的话,但却是惊人的准确,相当的疯狂吧。大概 有一百甚至两百种不同的地方可以让我们去比较这两个公司,而 G o o g le 可能在每一项都能胜出,如果我记的没错,除了其中 3 项以 外。 • 因为,我曾用电子表格把这些项都列出来了,只是法务部门不会让我 给任何人看,即使人事招募部门很喜欢这个报表。
  • 38.
  • 39.
    有一天, Je ffB e zo s 下了一份命令 • 我们现在要说的这个人,是在多个严肃的公开场合说要来 Am azo n 工作就应该付他钱才对的人。 • 当有人跟他意见不同时,他会递出写有他名字的黄色即时 贴以提醒那个人“ 谁是公司的老大 ” 。这家伙是… … S te ve Jo b s • 我想,除了没有品味和设计能力,他们很相似。千万别误 解我, B e zo s 是个绝顶聪明的人,只不过他把那些正常 的管控搞得像嗑了药的嬉皮士一样罢了。 • 所以,有一天, Je ff B e zo s 下了一份命令。当然,他总 是这么干,这些命令对人们的影响来说就像用橡皮槌敲击 蚂蚁一样。
  • 40.
    命令有几个要点 42qu.com , 找到给你答案的人
  • 41.
    1 所有团队的程序模块都要以 通过 S ervic e In te rfac e 方 式将其数据与功能开放出来 42qu.com , 找到给你答案的人
  • 42.
  • 43.
  • 44.
    4 任何技术都可以使用。比如: H TTP 、C o rb a 、 Pu b s u b 、自定义 的网络协议、等等,都可以, B e zo s 不管这些
  • 45.
    5 所有的 S ervic e In te rfac e ,毫无 例外,都必须从骨子里到表面上设 计成能对外界开放的。 也就是说,团队必须做好规划与 设计,以便未来把接口开放给全 世界的程序员,没有任何例外。
  • 46.
  • 47.
  • 51.
    服务 VS 库 张沈鹏补充 :) 服务和库的本质区别 , 服务有数据 • 库比作开源项目 – 比如 d n s p o d 开源 d n s 服务器 • 服务是一个解决方案 – d n s p o d 提供免费的 d n s 解析服务 42qu.com , 找到给你答案的人
  • 52.
    服务 VS 库 •张沈鹏 补充 :) – 服务可以卖给全世界 ~ ^_^ • S te ve Y 对 Am azo n 和 G o o g le 平台的长篇 大论 • 不要去做 "in - h o u s e p ro g ram m e r" 42qu.com , 找到给你答案的人
  • 53.
    不要去做 "in -h o u s e s o ftware "
  • 54.
    服务 VS 库 •Jo e l S p o ls ky 在耶鲁大学的演讲(上) Jo e l S p o ls ky 是一个美国的软件工程师,他的网络日志 "Jo e l谈软 件 " ( Jo e l o n S o ftware )非常有名,读者人数可以排进全世界前 1 00 名。 42qu.com , 找到给你答案的人
  • 55.
    服务 VS 库 •毕业以后, Jo e l先在微软公司干了一段日子,然后回到 纽约,进入维亚康母公司( Viac o m ),为这家巨型的娱 乐传播公司编写软件,成为 IT 部门里一个程序员( in - h o u s e p ro g ram m e r ) • 后来, Jo e l回忆起来,认为这是他一生中最痛苦的日子 ,并且劝告计算机系的学生尽可能 不要去做 " in- ho us e p ro g ra mme r" 42qu.com , 找到给你答案的人
  • 56.
    服务 VS 库 in-ho us e p ro g ra mme r 传统公司 IT 部门里的程序员 只属于公司内部的维护人员 而不是直接从事核心业务的人员 h ttp ://www.ru an yife n g .c o m /b lo g /2007/1 2/jo e l_s p o ls ky_talk_at_yale _p art_i.h tm l 或 h ttp ://b lo g .c s d n .n e t/p o n g b a/artic le /d e tails /1 91 8649 42qu.com , 找到给你答案的人
  • 57.
    in- ho use p ro g ra mme r • 因为做 in - h o u s e 软件,你永远不会像做 fac e b o o k 那样实现的功能跟公司命运息息相关, 后者你可以花上一个星期去捣鼓界面上的一个小 特性,因为你的产品是要给大家用的 你有机会实现真正漂亮的东东 • 另外,你能得到上司的重视,你的职业生涯与你 的技术挂钩。 • 而作 in - h o u s e 软件你就只能跟另外两个人猥琐 在一个阴暗的办公室角落,面朝没有窗户的墙壁 ,挥汗如雨地猛敲 H TML 代码;而产品经理本人 则坐在宽敞明亮的大办公室里面晃悠。
  • 58.
  • 59.
    嗯, B ezo s 领悟到的大事是 为了销售书籍和各种商品需要的基础架构,这个 基础架构可以被转变成为绝佳计算平台 ( C o m p u tin g Platfo rm )。 所以,现在他们有了 Am azo n E las tic C o m p u te C lo u d (亚马逊弹性运算云平台 E C 2 ), Am azo n E las tic Map Re d u c e , Am azo n Re latio n al D atab as e S e rvic e (亚马逊关系数据库服务) 以及其他可到 AWS aws .am azo n .c o m 查得到的 一堆 S e rvic e
  • 60.
    am azo n 亚马逊最奇怪的生意: 土耳其机器人 Mechanical Turk 其代表的重要理念— — 一切与亚马逊老总杰夫 · 贝佐斯有 关的事情都蕴含着重要理念— — 是将电脑无法完成的无数 琐碎的脑力工作自动化 IBM 的沃森( Watson )机器人也干不了这些事儿。(“ 亚马逊土耳其机器人” 是一种众包网络集市,能使计算机 程序员调用人类智能来执行目前计算机尚不足以胜任的任 务。
  • 61.
    土耳其机器人 • 沃尔夫冈 ·冯 · 坎佩伦( Wo lfg an g vo n Ke m p e le n ) 1 770 年打造了一套所谓的自 动下棋机,击败了当时一些最优秀的棋 手,更让其他所有人目瞪口呆。奥妙所 在:一位象棋大师藏在机器里头。 • 而藏在亚马逊的土耳其机器人里面则是数 以千计的大活人,随时准备完成平台上发 布的超过 1 5 万种工作。
  • 62.
    用例 • 马特 ·理查森( Matt Ric h ard s o n )之手的 奇特相机,设计初衷就是,如何用 20 个字 来描述一张照片。 • 这款相机目前被称为“ 白描相机 ( D e s c rip tive C am e ra )” ,使用一张文 字描述的打印字条来取代实际拍摄的图 像。 • h ttp ://te c h 2ip o .c o m /50980/
  • 63.
  • 64.
    总结 • 只有当你想把一个东西卖给全世界的时候 你才有可能去把一个事情做好 而不是 j s t wo rk u • 只有当一个东西能卖到钱的时候 你才有动力去把一件事情做好
  • 65.
    广告 : 我们卖钱的服务 •欢迎购买我们的 vp s vp s .42q u .c o m • p yth o n 网站开发 201 2 暑期 基础入门班 报名中 1 6 天的课时 ( 周一 至 周五 下午 ) 收费 2500, 限 1 5 人 邮箱 : 42q u .p y@ g m ail.c o m
  • 66.