• Email:
  • Feeds

  • Posts Tagged ‘facebook’


    FarmVille(美版开心农场)谈架构:所有模块都是一个可降级的服务


    在2009年Facebook Developer Garage Shanghai活动上,Five Minutes程延辉 介绍开心农场架构,让大家了解了SNS game的一些挑战和设计模式。

    由于农场游戏风靡全球,最近highscalability.com网站采访了美版开心农场FarmVille的Luke Rajlich,他介绍了FarmVille的部分架构资料(1)。

    所有模块都是一个可降级的服务

    For any web application, high latency kills your app and highly variable latency eventually kills your app.

    由于大型的网络应用需要依赖各种底层及内部服务,但是服务调用的高延迟是各种应用的最大问题,在竞争激烈的SNS app领域更是如此。解决此问题的方法是将所有的模块设计成一种可降级的服务,包括Memcache, Database, REST API等。将所有可能会发生大延迟的服务进行隔离。这可以通过控制调用超时时间来控制,另外还可以通过应用中的一些开关来关闭某些某些功能避免服务降级造成的影响。

    上面这点我也有一些教训,曾碰到过由于依赖的一些模块阻塞造成服务不稳定的现象。

    1. 某Socket Server使用了ThreadPool来处理所有核心业务。
    2. 不少业务需要访问内网的一个远程的User Service(RPC)来获取用户信息。
    3. User Service需要访问数据库。
    4. 数据库有时候会变慢,一些大查询需要10秒以上才能完成。

    结果4造成3很多调用很久才能执行完,3造成2的RPC调用阻塞,2造成1的ThreadPool堵塞,ThreadPool不断有新任务加入,但是老的任务迟迟不能完成。因此对于最终用户的表现是很多请求没有响应。部分用户认为是网络原因会手工重复提交请求,这样会造成状况并进一步恶化。上面的问题根本是没有意识到远程服务可能会超时或失败,把远程服务RPC调用当成一个本地调用来执行。

    解决思路一:RPC增加Timeout
    解决思路二:将RPC改成异步调用。

    另一分布式大牛James Hamilton谈到(2)上面这种做法就是他论文Designing and Deploying Internet-Scale Services中的graceful degradation mode(优雅降级)。

    FarmVille其他数据

    • FarmVille基于LAMP架构,运行在EC2上。
    • 读写比例是3:1。
    • 使用开源工具来做运维监控,如nagios报警,munin监控,puppet配置。另外还开发了很多内部的程序来监控Facebook DB, Memcache等。
    • 到Facebook接口的流量峰值达到3Gb/s,同时内部的cache还承担了1.5Gb/s。
    • 另外可动态调整到Facebook与Cache之间的流量,Facebook接口变慢时,可以利用cache数据直接返回,终极目的是不管发生了那个环节的故障,能够让用户继续游戏。

    小结

    尽管FarmVille公布了上面一些技术资料,凭借上面这些资料无法全部了解FarmVille的架构。但是所有模块都是一个可降级服务的概念值得设计大规模应用的同行参考。

    Resource

    1. How FarmVille Scales to Harvest 75 Million Players a Month
    2. Scaling FarmVille

    Facebook平台设计(二)

    上个月介绍了Facebook平台设计(一),再继续看f8 2008。f8平台推出在短短一年的应用开发者已经超过40万。keynote继续由Facebook创始人兼CEO Mark Zuckerberg主持(视频),Mark介绍了一年中不少成功的应用案例,如iLike推出4天就增长到100万用户,以及 livingsocial, Zynga等成功案例。主要的议题包括

    一、Facebook Connect

    Facebook开放平台之后围墙的问题依然存在,所有的用户所有的内容都在facebook网站的内部。facebook connect可以将facebook的用户,好友,feed和第三方网站作深度整合。将social graph扩大到所有的Web领域。到目前为止Facebook Connect的应用已经非常广泛,比如6月27号的Facebook Developer Garage Shanghai介绍了不少基于Facebook Connect的网站,如提供给外国人分享在上海活动图片的citymoments就非常不错。

    二、Facebook新的设计

    Mark介绍了很多Facebook新的设计, 比如应用可以不再局限在profile box里面,可以作为一个独立的profile tab, 相当一个独立的页面,应用开发商有更多独立的发挥空间。
    另外facebook开放了翻译工具, facebook的翻译工具可以让全球的用户帮助将第三方开发的应用翻译成各种本地语言,并由用户投票每个条目最合适的翻译结果。这个本来用于facebook平台自身的国际化,此次开放给第三方开发者。

    三、平台指导原则

    f8 keynote后半部分由Benjamin Ling主讲(视频),Ben也是一位神奇的人物。他本来在Google当产品总监,2007年跳槽到facebook做Director of Platform, 不过好像现在又跑回youtube去了。Ben是亚洲面孔,不知道是不是华人。他介绍了facebook平台的三大指导原则(Guide principle for great social app)

    1. meaningful/有意义
    a. social(graph), e.g. Green Patch
    b. useful/有用,如Carpool
    c. Expressive/表达, Graffiti, draw on friend profile
    d. Engaging, 比如2008/5,用户投入在playfish上的时间有9亿分钟。

    2. trustworthy/信任
    safe/安全, trusted
    secure – 平台越提供更多的privacy控制, 用户才会产生越多内容
    respectful
    transparent

    3. well designed/良好的设计
    clean, facebook平台确实很干净,值得陈赞, 因此平台要求应用也如此。
    fast, use more, 访问速度越快,用户用得越多。
    robust, 强壮

    原则总结起来就一句话,”keep the ecosystem safe for user, fair for developers“, 平台设计的目标是对用户安全,对开发者公平。

    国内开放API平台实践的一些问题

    随着在国外一些开放API的成功,国内开放的趋势尤其是在SNS领域也开始涌现,实际上开放的需求不局限SNS领域,所有的互联网应用都可以从开放API获得更多的用户使用等潜在的价值。Tim在这方面也进行了一些尝试和思考,这里初步探讨开放API产品及开发方面实践中需要面对的几个问题。

    一、设计开放API没有明显的标准可以遵循

    • 如何设计一个好的鉴权(authentication)体系,安全,便利,简单。
    • 如何设计一个好的用户SSO(Single Sign-On)体系,达到无缝的在第三方网站与平台之间切换,或者支持将平台的内容无缝嵌入第三方网站,类似facebook connect这样的体系。
    • 国外的一些标准是否适合引进,比如OpenIDOAuth,OpenID国内还没有成功案例或领头羊,因此支持OpenID的用途就大打了折扣。OAuth解决了平台对第三方应用的信任(authorization)问题,但对于国内的第三方开发者是否太复杂。

    二、缺少深度理解开放平台设计的产品及开发人员

    国内大部分从业人员可能都没一手接触国外的开放平台产品及API,可能没写过一个hello world的Facebook应用,说不出Gadget的原理或者理解twitter client跟服务器交互的具体流程。大部分从业人员可能简单的理解facebook就是开心网一样。因此即使有意愿也很难设计出能真实满足用户需要的接口。

    三、没有生态圈或者短期不能形成生态圈

    Facebook的魅力就是从f8 2007推出到2008 f8已经形成40万开发者的规模,这40万开发人员对Facebook Platform的稳定及成熟起了非常重要的作用。但对于国内每一个新的开放平台可能设计人员并不清楚下游开发者在哪里,也很难进一步了解潜在的需求,很容易造成闭门造车的局面。

    四、不清楚盈利模式

    由于找不到清晰的赢利模式,不但对于提供平台的公司还是对于下游的开发者都缺乏推动力,所以大部分公司都是抱着试试看的心态去公开一些非核心的API。另外平台本身也有顾虑开放API是否会对本身原有的业务带来冲击,因此在公司内部也不太容易得到大力的支持,所以都是在小圈子内充当着试验田的角色。