目前我知道有几种用法
1. 镜像
2. 业务服务器 调用七牛
3. 客户端调用七牛SDK
4. 客户端调用七牛SDK,并且每次获取token,设置回调URL。
我想问的是在移动互联网APP场景下,最佳实践是哪一种?
第一种:只做CDN加速,耦合度低,第一次访问慢,第一次访问回源站拉取资源后同步到七牛空间。
第二种:业务服务器去操作七牛,客户端完全不知道七牛的存在,token在服务端比较安全,耦合度低。但是上传慢,客户端-->业务服务器-->再上传给七牛-->再返回给客户端。
第三种:客户端直接调用七牛上传,这里需要先请求业务服务器获取token,再上传文件给七牛。 耦合度高,上传下载速度快。这里的token会暴露,而且针对的是七牛的账户权限,而不是APP的用户权限。任意一个用户持有token都可以随意上传,除非token超时。而且如果设置超时,每次超时之后都需要重新请求token,带来客户端复杂性。然后客户端需要发起两次请求,先请求七牛上传成功后,请求自己的业务服务器完成其他逻辑。
第四种:与第三种区别在于,客户端发起一次请求后,由七牛去调用业务服务器。 但是客户端每次上传都需要请求token,并且设置回调URL。
这里没有提到删除图片,删除图片全是通过业务服务器获取管理凭证去删除,否则不可控,可随意删除空间图片。
我想问下,移动互联网场景下,七牛的最佳实践是什么? 为什么感觉都不够好?以上的我自己更倾向第二种,耦合度低,除了上传慢,无其他缺点。 请有经验的人给点意见。
还有,特别想知道像目前使用七牛的客户,比如美拍,下厨房等,他们的使用方式是怎么样的。
第一种和第二种本质上都是一样的,都是资源上传到业务服务器,然后以主动或者被动的方式将资源拉取或者上传到七牛,然后对外提供七牛的访问链接;这样样操作优点是客户端原有的业务逻辑几乎不需要调整,只需要修改客户端的访问链接,而服务端也只是多一个上传到七牛的程序(镜像拉取都不需要额外的程序);缺点是从服务端上传到七牛对服务端出入口带宽的压力依旧很大,而镜像回源拉取资源本质上机房间的网络状况也不可控;
第三种和第四种,上传下载操作基本一致,先说token的问题,token在暴露后确实第三方攻击者可以用token恶意上传,但是可以通过利用七牛默认不支持覆盖上传的特性,通过客户端设置生成上传策略中的
scope
和insertOnly
参数来配合保证,token上传且只能成功上传一次文件;关于客户端的复杂性,其实七牛都是有客户端的sdk,包括了android、ios、javascript的,在哪里获取token、是否进行重试、客户端接受响应,sdk中都进行了实现,其实只需要关注业务层面的就可以了;关于七牛目前的客户使用七牛的业务场景,可以参考七牛的提供的编程模型的推荐 http://developer.qiniu.com/docs/v6/api/overview/programming-model.html ,属于你的第四种方案,你这边认为第二种方式比较适合,和七牛推荐的编程模型不太一致,其实问题也不是很大,你的业务服务器如果能够承受大量的直接上传,同时有空余带宽将资源上传到七牛也是可行的,毕竟七牛还是可以灵活适应多种业务场景的。