从 6 月份 WWDC 苹果发布 CloudKit 开始,BaaS (Backend as a Service,也叫做 mBaaS,最前面的 m 代表 mobile ) 的概念一下子又走入了人们的视野。CloudKit 提供了基本的数据存储和用户账号功能,以后要写一个数据交互不是太复杂的应用/游戏,就不再需要自己来开发后端架构,直接连 CloudKit 就搞定了,这就是 BaaS 的价值。这里之所以说「又」,是因为在 13 年初 Facebook 收购 Parse 的时候,很多人也都被震惊到了,只是当时会有人觉得,真的有很多人会使用这种后端服务么?现在好了,连号令江湖的水果公司也加入到了服务商的行列,大家不得不重新审视 BaaS 的价值。
我们还是先来看看 CloudKit 可以为我们做什么吧。从目前公开的资料和 API 来看,CloudKit 有如下几个基本概念:
CKContainer —— 每个应用有一个 Container,应用之间的数据是隔离的,如果愿意数据可以跨应用共
CKDatabase —— 每一个 Container 都会包含两个 Database:公开的和私有的。公开的 Database 存放应用内共享的数据,需要开发者自己的 Apple ID 才能修改;私有的 Database 则存放单个用户相关的数据,需要终端用户自己的 Apple ID 才能访问。
CKRecord —— 代表 Database 里面一条结构化记录,是键值对的封装,所以可以存储任何数据。与 Parse 等提供的子类化数据模型不一样,CloudKit 中所有存储的数据只能是 CKRecord 类型,开发者需要使用一个名叫 Record Type 的字符串来区分不同类型的数据。
CKRecordZone —— CloudKit 还引入了 RecordZone 的概念,来给不同的数据进行分区,与 Mongodb 中的 collection 比较相似。
CKReference —— 类似于数据库中的「外键」概念,主要用来进行数据关联。CKRecord 中某一个属性的值,可以是另一个 CKRecord(譬如 Instagram 中的每张图片,都有一个作者字段),这时候属性值就可以是 CKReference 类型。按照 CloudKit API 的说明文档,这种引用的关联是可以做到反向查询和级联删除的,不过笔者好奇的是,对于一对多的关联模型,级联删除该怎么才能做到呢?
CKAsset —— 用来处理文件这种非结构化数据的存储,按照 API 的说明文档,可以高效支持上传和下载,看来苹果应该也是提供 CDN 支持的,但是国内用户应该就享受不到了。
CKQuery —— 主要用来获取数据,通过组合 Record Type、NSPredicate 和 NSSortDescriptor 来查询数据,不过从 API 说明文档看不出它能否支持 Parse 的级联获取。
CKSubscription —— 与 CKQuery 只是每次去拉 Server 端的数据不同,CKSubscription 提供了一种 Server 端主动 Push 的机制,通过组合 Record Type、NSPredicate 和 APNs Push,可以让 Client 端主动去监听 Server 端的数据变化,从而实时得到通知。
其实,对于苹果为什么要做 CloudKit,江湖上还流传着这样一则轶闻:当年苹果也是 Parse 的竟购方之一,只是 Facebook 为了打造开发者生态圈而志在必得,苹果只能铩羽而归,但是数据平台的价值又一直让苹果念念不忘,最后苹果的工程师和 PM 只能心一横,自己做一个 CloudKit 了。不过与其他 BaaS 平台相比,笔者认为 CloudKit 存在如下不足:
数据模型过于简单。数据之间的关联只能通过 CKReference 建立,这样的话对于多对多的映射模型就比较吃力,不管是读取还是存储,都会比 Parse 的方案繁琐很多。
不能自定义业务逻辑,没有类似于 Parse 的云代码功能,很多时候需要在客户端完成全部业务逻辑,这都会给开发带来一些不便,并且也会影响到移动设备的耗电和网络流量。
访问速度过慢,从我实际的测试来看,在 Wifi 下 API 的延迟都已经非常明显,要是再扩大到国内五花八门的网络环境,特别是弱网环境,数据访问的延迟会变成一个很大的障碍。而且,对于国内用户来讲 Apple ID 的利用率也不高。
不支持跨平台。所有的数据都是存放在 iCloud 里面,需要通过开发者或者最终用户的 Apple ID 才能访问,这样的服务方式让 Android 生态圈和 Web Application 等完全成为了另外的平行世界,对于第三方应用开发者来说,或许没有人能把自己的用户群全部押宝到 iOS 上。
在中国市场面临政策风险。从 WordPress、网盘、AWS 等的前车之鉴来看,所有的数据黑洞都会让监管部门感到无能为力,从而心生恐惧,他们只能使用最简单粗暴的办法来进行处理,那就是让你变的「不存在」。
在苹果的发布会之后,谷歌在今年的 IO 大会上也发布了 Google Driver for Work / Google Fit Platform,加上最早的 Facebook,三大巨头相继推出类似产品,让人们对 BaaS 服务的前景充满期待。CloudKit 存在的问题,可能就是其他第三方 BaaS 服务商们的机遇。在国外 Parse(http://www.parse.com) 和 Kinvey(http://www.kinvey.com) 都做得不错,StackMob 本来也算是领头羊之列的 player,但是被 Paypal 收购之后就立刻被关停,只能让人唏嘘。国内的 BaaS 服务提供商,多只在某一个领域出现,譬如推送领域的个推、统计领域的友盟,能够像 Parse 一样提供完整的平台能力,特别是后台数据存储能力的,目前来看只有 AVOS Cloud(http://www.avoscloud.com) 一家。并且 AVOS Cloud 的 API 设计是完全兼容 Parse 的,对于用惯了 Parse 服务的开发者来讲,可能会像碰到了孪生兄弟一样熟悉。
在所有人都在强调「移动!移动!」的今天,BaaS 或许能开创出一个新的云计算方向,让我们拭目以待吧。
创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。