
几乎每家手机厂商都为用户提供了信息存储的云服云服务能力。通过一个账号,平列用户可以将手机系统中的台产各种常用的信息备份到云端,以便后续在合适的品系时间点查看或恢复自身的数据。然而由于用户量级巨大,手机设服务在设计系统的云服时候需要考虑的因素特别多 ,比如如何保证服务的平列稳定性,如何保证大文件的亿华云台产传输效率 ,以及如何保证用户文件的品系数据持久性等等 。
除此之外 ,手机设随着越来越多的云服终端用户开始使用vivo云服务,存储和计算的平列成本也与日俱增 。可能有部分人了解,台产某些手机厂商的品系云服务产品年度亏损数亿级别,而主要成本之处来自用户私人文件的存储成本。
另外,在安全方面,云服务在这块需要承担的源码下载使命更是重中之重 。某些厂商的云服务曾经出现过用户数据泄露 ,居然可以通过搜索引擎直接查询到用户的私人文件,这种事件一旦出现 ,对企业品牌的打击和影响可以说是非常巨大。
如上所述 ,云服务在建设过程中可以说是困难重重,那么vivo云服务在建设过程中 ,又是如何兼顾产品功能、模板下载资源成本、服务稳定性、数据安全等等诸多因素而进行设计的?且听后文细细分解。
二、产品能力与设计
2.1 功能介绍2.1.1 多设备数据同步能力

当今智能设备发展迅速,各个手机厂商相继推出了PAD、智能手表等设备 。因此不同设备之间的数据互通诉求也随之而来,一个帐号实现数据互通。
拿vivo为例 ,vivo帐号可以同时在vivo手机 、vivo PAD 、PC上登录,用户可以在手机、免费模板PAD、PC上同时对联系人、日历等内容进行编辑,一端编辑 ,多端可见。
这种多设备数据同步互通就是云服务的一项核心功能。当前云服务支持同步的数据项 :联系人 、日历 、便签、书签、黑名单 、蓝牙、WLAN,源码库后续会支持更多的数据项。
2.1.2 整机数据打包备份 、恢复能力

手机行业功能更新迭代很快 ,新的亮点功能会吸引用户购买新机。但是新机购买回来后 ,各种数据的设置 、新增对用户来说是个繁琐 、头疼的事情。
为了方便用户将旧手机的数据迁移到新手机上来,香港云服务器手机厂商提供了一些数据迁移工具。如我司的互传 ,新老手机放在一起通过蓝牙可以方便的将数据导入新手机上 。但是互传必须要求2个手机在一起 ,如果用户旧手机不在身边呢 ?
此场景下 ,云服务提供的整机打包功能很好的解决了此痛点。用户在使用旧手机期间,可以打开云服务的整机备份开关,云服务会自动将用户手机数据打成数据包备份至云端。
在用户购买新手机换机时,可以通过云服务快速选择老手机的打包数据进行恢复 ,方便快捷。
2.1.3 云盘能力

云盘是一种专业的互联网存储工具 ,是互联网云技术的产物,它通过互联网为企业和个人提供信息的储存,读取,下载等服务。具有安全稳定、海量存储的特点 。
在vivo云服务中,除了诸如联系人、短信等数据类型内容的备份恢复能力之外,文件类型的云端存储能力,即云盘的能力同样重要 。
用户可以将自己本地重要的图片 、视频 、文档等重要文件备份到云端 ,以便后续可以在云端后者在其他设备上可以访问到该文件,同时借助于云盘的能力 ,用户也可以方便快捷的释放整理本地空间。
除此之外 ,云盘还提供了丰富的文件周边功能 ,例如压缩文件的在线解压,视频的在线播放 ,以及文档在线协作等等 。
2.2 能力建设2.2.1 多设备数据一致性同步方案设计
云服务数据同步的方案采用的是类似于Git版本管理的概念 ,主要涉及2个行为:
推数据 :将本地设备增量数据推送至云端。拉数据:将云端增量数据拉取至本地 。主要需要了解的有以下2点:
增量数据识别;数据冲突处理。(1)增量数据识别
云服务采用的是基于数据版本的识别方案:云端每条数据都有自身的版本号 ,版本号逐步递增。
主要同步流程如下图 :

如图可见 ,增量数据同步过程并不复杂 ,整个流程总结如下:
客户端获取云端当前最大的数据版本sv;若客户端本地数据最大版本lv < sv,则证明云端数据有更新,客户端需要拉取云端增量数据;若lv = sv ,则客户端判断本地是否存在增量更新数据 ,若有则将本地增量数据推送到云端。(2)数据冲突处理
数据冲突出现在多设备同时使用的过程中 ,同时对同一条数据进行操作,造成数据冲突的情况 。
因此同步数据流程需要考虑数据冲突的场景。
常见的冲突解决方案有2种:a 、自动为用户解决冲突。b 、用户手动自行解决冲突 。
自动为用户解决冲突一般有以下方案:
以最新的数据修改时间为准 ,以修改时间最迟的设备的数据为准。(多设备时钟无法统一问题,后面上报的数据可能并不是用户实际上最后修改的)2条数据都保留。(会给用户造成数据重复的错觉,影响体验)用户手动自行解决冲突 :
参照git的冲突处理方式,冲突数据展示给用户 ,由用户自行选择内容的存留 ,最后将最终数据推送到云端 。
由于云服务对接了很多不同模块的数据:联系人 、日程 、浏览器书签,不同数据的特性不一样 ,每种数据的冲突处理的规则也不一样。因此云服务采用了将冲突数据返回给业务模块,供业务模块自行解决的策略 ,于业务方采用上述哪种解决方式 ,由业务方自行决策。
2.2.2 整机数据打包备份、恢复设计
云服务采用的是将本地不同模块的数据打包成文件 ,上传至云盘的方案 。

通过树形结构 ,将整个包 、不同模块、不同模块的数据文件进行关联 ,恢复数据时 ,通过父包parentId即可获取到所有的数据文件的metaId ,进行恢复即可。
此方案的优点 :方便快速扩展备份手机其他模块的数据,服务器基本上不需要进行改造。
当然此方案也存在劣势 :设备不同模块的数据格式对服务器属于黑盒,服务器难以针对模块的数据做实时的解析和展示 。
2.2.3 云盘方案设计
相对于数据项目的同步备份,云盘模块主要聚焦的是文件类型的云端存取。
和普通业务模型相比,云盘业务的显著特点是逻辑复杂,需要考虑的细节很多:例如空间占用 、数据安全 、大文件传输效率等等 ,因此整个的系统设计更加复杂 。
(1)、对象存储简介

《对象存储》是由云存储供应商提供的一套基于对象的海量存储服务 ,一般可以为用户可以提供海量、安全 、高可靠、低成本的数据存储能力。
在vivo云服务的存储逻辑中 ,用户的图片 、视频、音频等文件目前均存储在对象存储服务中。
由于早期vivo内部并无自建的对象存储能力,故一开始这部分数据均存放在公有云,随着近两年vivo自建对象存储能力的完善 ,目前公有云数据已完全迁移到了自建存储。
(2) 、云盘系统架构

如上图所示 ,云盘涉及到的周边模块众多,但是最核心的还是元数据模块 、空间管理模块 、文件处理这三个模块,概述如下:
元数据模块:主要用来描述文件的属性 ,例如文件的名称,文件的大小 ,媒体文件的长宽高等等。更抽象的 ,元数据模块保存了除了文件实体内容之外的所有信息。
但是,为了系统后续的可扩展性 ,我们针对元数据模块还进行了“动静”分离