随着互联网科技的发展,互联网行业的分工也会像其它行业一样逐渐细化,后端服务也是这样被抽象出来,即BaaS(后端即服务)。在移动后端服务系统(MBaaS)中,云服务公司为移动应用、智能设备开发者提供整合云后端的边界服务,包括文件数据存储、实时推送、即时通讯等实现难度较高的功能,以帮助开发者快速开发应用。
物联网时代,在国外BaaS服务已经受到巨头的重视,Facebook收购Parse、苹果发布了CloudKit、Google收购了Firebase:Parse、CloudKit、FIREBASE都是国外知名的BaaS类产品,巨头们都希望通过BaaS服务来完善生态。在今年三月举行的谷歌全球云用户会议上,谷歌云服务高级副总裁黛安·格林(Diane Greene)表示,“这将是一个长期性、永久性业务”。
除了国外巨头,国内也有数家创业公司瞄准于后端服务市场。云巴就是这样一种后端云服务产品,主要面向智能硬件提供跨平台、跨设备的实时消息交换服务。
云巴CEO张虎表示,对于开发者而言,有了后端服务,他们只需专注于具体业务和逻辑的实现,无需关心后端基础设施构建、运维、服务器托管、网络、性能调优等工作。对各巨头来说,则各有各的布局:
对于Facebook来说,
在收购Parse后,Facebook希望结束应用之间的信息孤岛状态,让不同应用之间的内容能够互通和无缝跳转,于是就发布了一个名为AppLinks“协议”,但这个协议背后则需要Parse这样的后端服务提供数据存储、计算能力、Push通知等一系列技术支撑。
但很不幸的是,在激烈的云服务竞争中,Parse战况不利,Facebook也于今年初关闭该服务。
而对于苹果来说,
CloudKit可以提供完善且有弹性的后端解决方案,帮助开发者减轻编写服务器代码和维护服务器的需求。很明显,苹果此举也是为了降低开发iOS应用的成本,维护iOS生态圈的繁荣。
除了收购Firebase,Google还在去年10月收购应用开发平台Divshot,并将其整合至FIREBASE,使得应用开发变得更为简单。
就像FIREBASE创始人James Tamplin在博客上说的那样,FIREBASE和Google Cloud Platform可以很好的互补。也许像苹果为iOS开发者提供了CloudKit那样,Google也可以利用类似的服务来为Android生态圈的开发者们提供便利。
归根结底,还是生态系统建设问题。
比如,做出一个视频的弹幕应用也会困难到要找第三方吗?
后端服务出现之前,应用、智能硬件的开发需要为其消息传输、数据统计、储存、实时通讯等功能自行搭建服务器架构,包括搭建数据库与服务器集群等等。但是,产品本身和互联网基础工作关系不大,这些工作属于产品企业的非主流业务,不仅复杂繁重,消耗的经历和资源过多,并将拉长产品最终走向市场的开发周期。张虎透露,一个不熟悉后端服务的应用或智能硬件创业团队,如果要自建后端服务,投入30人左右也需要耗时两到三年才能完成,而且效果未必能够专业,比如出现通讯延迟、消息发送成功率较低等。比如,某些通过蓝牙传输的智能手表,在实时显示上存在大约两秒的延迟。而这些投入——包括租用服务器等,甚至要耗费数千万人民币的成本,使得非主流业务成本还高于主产品。
所以,除了包办后端搭建,后端服务更重要的是解决效率问题——双向通信、数据采集和统计等过程的快速和稳定。以实时通信功能为例,张虎解释称,在一个家庭的智能水网系统中,后端服务可以实时采集每个感应水流的传感器的数据,然后分析每一段管道的水流速、流量,来达到监测水流是否泄漏的目的,同时可将结果发送到PC、手机端。如果发现水流速度和流量数据异常,那么系统可定位找出泄漏的部位。根据传感器的密集程度,最高可定位到米级范围。又比如说,智能儿童手表的对讲功能,一端的用户发出的音频首先经过服务器转录,再到达另一端设备接收,等等。
在这些场景下,信息传输的速度和稳定性成为了决定设备服务性能好坏的关键因素。张虎表示,如今智能硬件早已不限于手机、平板、可穿戴的范畴,也加入了机器人、智能家居等等,面对逐渐增长的场景和海量数据,降低通讯延迟、保证推送稳定等提高通讯效率的做法就成为了后端云服务的主要任务。目前,国外顶尖的水平是,PubNub公司创造的全球网络范围内最大250毫秒的延迟,相对而言,云巴面对国内网络则做到了60毫秒以内的延迟(注意是国内网络)。
以往,后端云服务主要针对于应用,张虎在创立云巴前,就主导创立了专注于为移动app提供后端服务的极光推送。而随着物联网和智能硬件的兴起,属于张虎第二次创业的云巴则针对智能硬件的实时通讯领域。
云巴CEO张虎表示,对比移动应用,智能设备开发对消息延迟更加敏感,对流量功耗上要求更高。在云巴的客户中,主动申请付费服务的更多来自于智能硬件用户。“移动应用的使用门槛较低,损失代价较少,消费者和开发者对其的期望较低。智能硬件不同,每一件产品都需要一定价格或成本来生产、买入,如果因为功能服务表现不佳,则更容易引来消费者的投诉,智能硬件商为了保证产品体验,宁愿选择付费。两者的差异是互联网的产品特点决定的。”这些选择付费的客户,云巴会为其提供通信的独享通道。
张虎表示,目前两个终端之间的通讯需要经过网关、路由等组成的二三十次跳数,那么保证消息的准确发送、快速发送,就需要减少网关的跳数,且突破单机限制。张虎表示,除了给付费用户提供独享通道这样的普遍模式,云巴做得更多的是“细活”,从架构上进行调整。
“也许我们都发现一个有趣的现象,一般游戏房间、聊天室等等一般最多容纳300或500人,这个特别的数字主要来源于:对一台服务器来说,300人的数据量是能够维持较好体验的水平。”张虎表示,一个架构的设计,即物理基因已经决定服务器的最佳容量,“但我们可以想办法突破这个单机限制,把数据分布到不同的服务器上,让通讯终端突破300人的限制。”
“其实最理想的方式也是把通讯降低到一跳,即所有任务在一个服务器完成然后发送,但这样有一个悖论:当把一个服务器做到强大时,一旦这个服务器出现问题,那么所有服务都将失效。”为此,云巴把服务器按照业务逻辑分成若干集群,当一个集群由于压力或者其他一些因素导致服务出现问题,那么另一个对等的集群就可以替代顶上,使服务稳定下来。
据悉,云巴目前使用的Cache集群是Couchbase集群和Redis集群。其中Couchbase可以让数据自动在多个节点备份,单节点失效不会影响业务,而且支持业务自动分片(autosharing)。所谓自动分片,就是把同类型的业务自动分配到不同的机器上。
每一个优秀的产品除了技术上的完善,还需要根据业务场景的打磨细节,根据细节做出一些取舍。比如,语言方面,云巴选择了非常冷门的Erlang语言。
Erlang是一种面向并发和消息的函数式编程语言。Erlang设定的是竞争式的协程,在Erlang编程语言中,Erlang进程是并发并且独立执行的,轻量并且有自己的堆栈空间。也就是说,每一个Erlang进程完全是私有的,两个Erlang进程之间的堆栈空间不会被共享。这就好比高架桥和并行的车道,相互是独立的,不能窜道,这样很大程度提高了运输的效率和速度。
对比C++、Java,Erlang只在一个小圈子内流行,但是,将线程放在用户空间内自行调度(协程)是为了获得尽可能大规模的并发能力,与Go\Nodejs的协作式不同,竞争式的决策则为大规模的多人开发提供了保证,避免某个协程的死循环或过量运算影响其他任务的进行。同时,Erlang维护和开发了一整套中间层工具OTP,而这些工具、框架也正是被用来开发诸如分布式服务器、错误处理、数据库等应用的利器。Erlang不提倡防御式编程,它认为程序既然遇到错误就应该让它崩溃,这样一旦出现错误就可以第一时间被发现,加以补救措施,可以将损失降到最小。