云后端之文件服务架构分享何少岳@比目科技自我介绍屌丝程序猿、产品狗,喜欢新技术、新产品、小玩意。2013.8成立广州市比目网络科技有限公司(),为开发者提供后端业务解决方案。核心业务:云数据库、文件服务、推送服务和一些扩展服务;提供Android、iOS、C#(wp、unity、windows)、Cocos2d-x、Js、PHP、Node、云端代码、RestApi等SDK/接口。Bmob文件服务的演变•V1.0Fastdfs接口对接+简单粗暴的HTTP表单POST•V2.0分片和断点续传、支持缩略图、频率控制(QPS)……但,还是无法做到差异化服务(独立带宽、独立服务器、流媒体)和更高级别的安全。•支持移动、联通、电信等网络;•支持跨机房部署;•支持文件分片上传、下载和断点续传、下载;•支持多文件并发上传服务;•支持并发控制和自定义带宽服务;•支持文件的扩展服务支持,如缩略图、视频流等;•有良好的安全控制权限。Bmob文件服务V3.0的特点•上传:-ParallelUpload(filename[],listener)并行上传-SerialUpload(filename[],listener)串行上传•下载:-ParallerDownload(filename[],listener)并行下载-SerialDownload(filename[],listener)串行下载•其他:-DelFile(filename[],listener)删除文件-ScaleImage(filename,ruleID,listener)根据规则生成缩略图-SetUrl(url)设置个性化域名Bmob文件服务提供的APIBmob文件服务架构示意图•分布式JobServer、AccessServer可以部署在不同的IDC。•可靠采用私有协议(BmobFileProtocol),接入加密,安全可靠。•轻量Server节点沟通采用多种轻量协议保证Server可用,如ping;业务交流为自定义协议。框架介绍Bmob文件服务架构——Server•支持跨机房部署;•基于epoll机制的server;•无单点问题,AccessServer、JobServer均支持多点;•支持线性扩展。Server层介绍Bmob文件服务架构——Server上传下载文件流程图Bmob文件服务架构——ServerServer层结构Bmob文件服务架构——ServerBFP的文件处理Bmob文件服务架构——ServerAccess&Job之间的通讯Bmob文件服务架构——Server•文件管理模块(增删改查、文件分组等);•用户角色控制(控制QPS、独立流量、服务器等);•统计报表模块(流量、请求等);CRM模块Bmob文件服务架构——ServerBmob文件服务架构——SDK•使用方便一个方法传递文件路径和监听(start、pause、cancel、progress、error、success)即可;•可靠BFP协议确保上传、下载成功,如:断点续传,断点、多点下载等;•传输BFP根据不同文件类型,如图片、流媒体,采用最优压缩算法,传输量少。SDK简介Bmob文件服务架构——SDK针对移动、联通、电信等网络•手机端移动网络环境复杂,网络会时常断开。解决这个问题,我们主要从两部分进行处理:SDK、AccessServer。1、SDK客户端网络异常时,进行缓存,后续断点续传;2、针对不同的网络运营商(移动、电信等),客户端SDK接入服务时,AccessServer会根据不同的网络地址及规则来切入到相应的JobServer。网络异常后缓存数据,作为续传依据。开发细节网络选择开发细节•支持跨机房部署,JobServer与AccessServer可以在不同的机房;•JobServer都在同一机房,AccessServer通过服务内的JobDespatch组件调配JobServer给SDK端使用;•多个JobServer跨机房;•多个机房之间的数据通过AccessCross组件同步。跨机房部署方面开发细节JobServer多机房开发细节A机房editlog记录哪些文件需同步,后调度处理这些文件同步,并记录状态。AccessCross架构开发细节•支持分片1、上传分片时,上传请求协商片大小,以片大小传输文件;2、下载分片时,下载请求协商片大小,以片大小下载文件;•支持续传1、上传异常时,下次请求上传以断点时片序继续上传;2、下载异常时,下次下载以断点时片序继续下载。文件分片和断点续传开发细节分片和续传架构开发细节SDK提供异步的上传方法,并且提供监听上传进度的接口,可以同时上传多个文件。多个文件的上传的处理是互不影响的。SDK网络框架将每个文件上传都封装成一个单独的请求对象,并放入发送队列任务中。子线程收到触发事件后,处理相关发送任务,发送数据到服务器。服务器依据请求进行相应的处理。多文件并发上传服务开发细节•并发控制AccessServer接受客户端的接入请求时,得到所需的连接信息。当客户端接入或断开JobServer时,JobServer服务report此信息,AccessServer依据ConnectionHelper控制相关的并发信息。•带宽控制AccessServer接受客户端的接入请求时,得到所需的连接信息。当客户端接入或断开Job服务时,Job服务report此信息,AccessServer依据Report信息及连接信息,依据规则将计算结果反馈给JobServer。JobServer根据结果控制当前的发送频次以达到控制带宽的目的。并发控制和自定义宽带服务开发细节开发细节并发控制和自定义宽带服务•全局文件扩展,上传完自动提交扩展任务(如生成水印、缩略图等);•SDK本地扩展,本地根据规则生成所需文件;•局部文件扩展,对外任务接口,客户端直接请求添加扩展任务。支持文件的扩展服务开发细节扩展服务框架开发细节•私有协议,传输加密,防止篡改;•App版本区分;•使用应用签名,验证来源合法性;•白名单、黑名单(主要是IP)。安全控制策略开发细节安全控制开发细节典型案例•流媒体文件的支持,如点播;•文件修改后的增量同步;后续