情景:资源包(众多文件的集合)要上传到oss上,而且要记录下资源包每次的签名(每个文件MD5后全部拼接的字符串MD5),有一个产品可以随意切换任意资源包的任意版本。
初始方案:资源每一次改变都作为一个版本存放在oss上,如下图:
初始方案流程图由于资源包不是每次差异都很小,而且修改很频繁,初始方案就有了明显的缺点:
1.每次上传都是全量上传,导致上传时间长
2.每次都是上传都在oss产生一个新的包,导致oss空间过大
为了节省时间,提出了用gitlab作为上传来优化,方案如下图:
gitlab优化方案图该方案流程有一个极大的缺点:流程比初始方案复杂度高。
对此方案我将实现分开了三个步骤
1.从本地服务器上传资源包到gitlab
2.产品引用资源,通知gitlab需要进行检出资源包到ecs本地
3.gitlab接收通知进行检出文件本地
在过程中遇到的几点问题:
1.gitlab项目ssh和http设置和返回要一致,不能在gitlab管理项目界面上显示是http而通过接口返回的是ssh,否则无法进行其他接口操作
2.需要在l服务器上需要设置好全局用户和用户邮箱。在linux服务器上有不同用户,注意不能和原来的用户有冲突
3.用接口为g本地itlab项目添加远程源时,需要添加上用户名和密码在远程源的url上。形式为http:://用户名:密码@远程源链接部分。特别注意,在密码中不能带有'@'字符,因为@后面部分gitlab自动识别为远程链接。
4.ecs服务器和oss也需要在同一个地方,刚开始就是用深圳的ecs挂载了北京的oss,gitlab检出到本地的速度相当慢,切换到深圳的oss时速度提高了5倍左右
用了gitlab后,一个资源包初次上传到初次检出的时间比之前的时间要长。在后面有增量的时候,速度比初始方案速度提高了30倍左右。收益还是值得的。
网友评论