Skip to content

Instantly share code, notes, and snippets.

@numbbbbb
Created February 19, 2016 02:32
Show Gist options
  • Save numbbbbb/0b7539435dd9e0ce3d7f to your computer and use it in GitHub Desktop.
Save numbbbbb/0b7539435dd9e0ce3d7f to your computer and use it in GitHub Desktop.

用 Parse 做后端服务是个坏主意

如果你还没不知道的话,Facebook 将要关闭它之前收购的后端服务(BaaS, Backend as a Service)Parse。这令很多开发者感到很失望,甚至有被 Facebook 背叛的感觉。我在 Twitter 上发过一张别人在 Parse 关闭前其官网的截图,这张截图基本说明了一切:

(从创业公司到世界500强,成百上千的开发者信任我们)

:/ 我不需要强调,他们已经做到了,上千个开发者“信任我们”。你可以从他们对于自己设想的表达中看出为什么开发者有这样的背叛感。还有谁会想要使用 React Native, React JS, HHVM, Relay, 或者任何其他的 Facebook 的技术呢?尤其是知道了他们可能会仅仅是随机地终止某项服务之后。 当然,这些服务都是开源的,社区可以接管它们,但是开源项目需要维护者,并且公司支持对项目来说受益无穷。Facebook 已经证明了我们不能信任他们,但是这对于那些曾经使用过 Facebook API 或其他社交网络第三方 API 的人来说并不是很惊讶。我稍后会讲到这些,但是现在我们暂时彻底地改变话题,来谈论另一个人们避而不谈却心知肚明的事情:Twitter…或者说 Twitter Fabric, 它现在拥有了Crashlytics(译注:一个应用崩溃分析工具)并且融合了 Felix Krause 的一系列令人惊叹的工作成果。 但是为了理解 Twitter 之前如何对待它的开发社区的,我想我们应该说到一个叫做 Meerkat 的应用。我保证我们会回到 Parse 和 Facebook 的,但是这个故事是与 Parse 殊途同归,所以请耐心点看下去。

Meerkat

一点背景故事:我住在得克萨斯州奥斯汀,这意味着每年 SXSW(South By Southwest, 西南偏南,在奥斯汀举办的音乐节)我都能近距离接触到一些创业公司,它们来年会变得更大,例如,Twitter, Foursquare, GameSalad, 甚至是 Four-Hour Work Week 都是在 SXSW 上亮相的。这是一些较大的成功者,然而每年还是有众多天真的创业者出现在奥斯汀来展示他们的工作成果,并希望它们能获得音乐节上人们的青睐。2015年,SXSW 上出现了一个毫无疑问的胜者——Meerkat。

Meerkat 从根本上来说是一个实时流媒体P2P平台,人们可以用它通过自己的iPhone直接直播给其他用户,它征服了 SXSW 。在去年 SXSW 期间,只要在奥斯汀四处走走,到处都能看得到Meerkat 衬衫。任何名人都在直播现场音乐, SWSX 会议,他们的午餐,或者仅仅是他们正在做的任何事。然后,突然之间……这些全都停止了,有一个非常明确的原因: 在 Meerkat 发展的鼎盛阶段, Twitter 切断他们的 API 权限并只提前两小时通知他们。 如果你对 iOS 上的 App Store 很熟悉的话,你就理解了这是种什么情况,考虑到即使 Meerkat 的家伙们能够重写他们的整个应用,使其不再依赖于 Twitter API,他们也不能使一个应用在两小时之内通过审核并且以更新的方式上架 App Store ……事实上,这个流程大概需要三周左右。 在 Meerkat 发展的鼎盛阶段, Twitter 切断他们的 API 权限并只提前两小时通知他们。 从我个人的角度来说,我当时一点也不惊讶。但是许多人都想不明白为什么 Twitter 这么做…… 他们否违反了 API 协议?他们做的事情是违法的吗? 呃,并没有…… 事实上,Twitter 决定封杀这个多年来最成功的基于 Twitter 的应用的原因是,他们有了自己的正在酝酿的竞争对手,叫做 Periscope, 在这里我不想把它们联系起来。 因此如今我们在这里,有了 Twitter 希望获得开发社区的信任。可叹……

Parse

瞧,我告诉过你们我们会回到 Parse 的话题! 看起来 Twitter 和 Facebook 基本上是社交媒体硬币上相反的两个面,但在我看来信任他们的任何一个都会有相似的后果。当我考虑一家科技公司在未来将如何继续发展时,我总是重复那句咒语:“向钱看”。这句咒语通常说明了大公司在未来如何表现良好,尤其是上市公司( TWTR 和 FB 都是上市公司)。美国上市公司对股东负责,向股东报告季度财报,因此有时会损害它们的消费者或合作伙伴的利益。当我看到 Parse 有如此巨大的“免费使用”的阀值,感到很困惑。在我看来99%的应用(或者更多)都绝不需要超出那个阀值,而且即使他们超出了,他们只需要付一点点钱。因此 Facebook 推出他们的开发工具的具体动机究竟是什么,尤其是它们的 BaaS ?我认为答案非常简单,他们想要你的数据,但是结果是这些数据没有用。所以他们决定,Parse 不再值得他们花费时间,他们不能从向成百上千开发者提供免费后端服务来获得利润,因此他们关闭了这个服务。用 Facebook 的话说:

We’re proud that we’ve been able to help so many of you build great mobile apps, but we need to focus our resources elsewhere.(我们为帮助你们这么多人开发很棒的应用感到骄傲,但是我们需要在别处集中我们的资源。) 翻译:“你们没有让我挣到足够多的钱。” Facebook 通过广告获得了他们的账本底线,正如 Twitter,正如现在世界上市值最高的、已经超过 Apple 的公司 Google。事实上只有一家平台供应商不是通过广告获得主要利润,那就是 Apple。

向钱看

我今天早先在 Twitter 上发了一条:

People asking me how to replace Parse in their code: If you don’t build & host your own server code, your backend is always in danger.(人们问我如何在他们的代码中替换 Parse:如果你不自己开发自己的服务器代码,你的后端总是在危险中) 这是事实,你真的不能如此轻率地将后端托给这些社交媒体公司。你一定要通过向钱看来找到当事方的动机。如果他们的动机不是通过向你提供极好的服务来获得他们的账本底线,那么这个服务就不太可能能维持很久。如果你是一家创业公司的创始人或CEO,这也是一种很好的计算自己的生意的方法。当你和别人共事时,你一定要确定他们的财务上的动机是和你一样的,否则总会决裂的。这也同样适用于雇员、联合创始人、合作伙伴以及供应商。

Facebook API

回到 Facebook API 的早期阶段,你可以轻易地取回用户的通讯录,这就是导致大堆来自 Facebook 游戏的垃圾邮件以及 Farmville(译注:Zynga开发的一款游戏) 崛起的原因。但是 Facebook 不喜欢那样,于是他们切断了这一特权,导致损害了许多应用,并且损害了 Zynga (译注:一家社交游戏公司,其游戏多发布在社交网站上)的股价。说真的,看看这对 Zynga 的股票的影响:

如果你的事业依赖于一个应用,那么你的后端是一个你要绝对掌控的企业资产。像 Salesforce 这样的云计算事业公司花了将近十年,才向成为大公司发展,而且即使今天,他们中的多数还使用本地托管版本的软件,原因是在一个运作良好的事业中,你要拥有所有关键性的部分,这会增加最初部署的费用和维护费用,但是没有这种掌控,你的生意是依赖于一些变化无常的人身上的,他们只想挖掘你的数据来提供广告,这些人是你想要控制你服务器的人吗?你有多信任 Facebook,Twitter 和 Google 呢?

建立你自己的后端

能为你的移动应用提供一刻可靠、可控的后端的唯一方法就是自己建立一个。我知道这听起来很难,但是用 Ruby on Rails 或者 NodeJS 来为你的移动应用提供简单的 API 真的没那么难。坦白说,Parse 的基于 javascript 的事件的后端服务,和你自己用 express (译注:基于 Node.js 平台的 web 开发框架)写一个 NodeJS 应用, 为了 API 传输抓取一些 node modules,并把全部数据备份到一个 MongoDB 数据库无甚差别。如果这听起来很难的话,只要花上几个小时读一些在线教程,你就会知道自己做这些多简单了。或者,你可以雇佣我的公司,我们做这些都是轻车熟路了。无耻的广告植入 如果你雇佣供应商为你建立后端服务,确保你能拿到源代码,以及必要的工具。Docker 是个为应用包含整个环境的不错的工具,而且像 Heroku 这样的服务可以很简单地部署 Rails 应用。 有趣事实:写这篇文章的95%过程中,我这搞笑的 Twitter 嵌入插件弄坏了所有的版式,我不得不重排了所有的东西。^_^

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment