对象存储的正确使用方法(小文件)

根据使用对象存储的经验,得出以下正确使用的方法。

1.所有的存储逻辑,包括对文件和数据库的增删改操作,都要基于对本地操作,也就是不需要使用任何的对象存储API。

2.所有的读取操作,也就是查操作,都直接使用对象存储服务,启用其镜像存储服务即可,这样所有本地的资源在被第一次访问时都会被自动同步到对象存储服务器中。

3.在本地的存储逻辑中,当对文件进行新增操作后,可以加一次对对象存储服务器相应新资源的访问逻辑,这样就自动实现了即时同步,而不用等第一个用户去访问,导致一定的体验损失(由于一般情况下,前后台的文件新增操作后,都自然会进行一次显示,所以这一步本质上天然由文件的上传者完成了,也即不需要编写额外的访问逻辑)。

4.对于删改逻辑,由于业务代码都只对本地操作,所以如果业务中删改逻辑很多(例如图片应用),那么对象存储服务器上等于会对任何文件做永久备份,如果成本太高,则可以在本地删改逻辑后,同步调用对象存储的API,对相应远程文件进行删改操作。如果仍旧想备份,可以将这个文件另行拷贝到备份文件夹。

5.需要的情况下启用图片自动压缩功能。

人人店上使用七牛云

由于服务器带宽问题,客户的人人店分销系统加载图片的速度一直非常的慢,系统虽然自带阿里云OSS和七牛云存储的功能,但是用的时候却有诸多问题。

1.在”系统选项”->”附件设置”下配置好”远程附件”中的七牛云相关信息后,页面返回为空白的问题。

这个问题是因在framework/model/attachment.mod.php中第30行,系统根据配置上传一个文件用于测试相关参数是否正确设置,而上传的这个本地文件不存在导致的,把这个*.ico文件改为一个本地存在的文件就好。

2.如果选用七牛云华南区的服务器,则配置无法通过上传测试的问题。

由于人人店系统版本的原因,可能选用的七牛云的SDK版本较旧(我们使用的系统上为7.0.6版),一些老版本的SDK是不包含华南等之后增加的服务器处理逻辑的,这里要给七牛云的SDK工程师一个差评,难道没想过公司会做大吗?低级错误。这个问题的解决只需要下载最新的七牛云SDK,并解压到framework/library下,取代原有的qiniu文件夹就好。

3.一切都配置成功了,似乎原有的商城仍旧没有使用相关配置的问题。

人人店有双重设置,这里需要进到相应公众号下的人人店管理系统中,在右上角的”系统设置”中,编辑组件信息,先启用七牛存储组件,然后在”公众号权限”中找到要授权七牛云存储的公众号并赋予七牛存储的组件使用权。最后,在上方的”数据”栏目里,就可以看到”七牛存储”的工具了,把之前的配置信息再在这里设置一遍就好了。注意,这里旧版的人人店系统会有存储区域选项,而且里面会只有华东和华北两个地区,由于我们已经更新了相关的七牛SDK,并且我们检查了新的SDK中的服务器选择代码,确认这个参数的传入是不会影响新的SDK的行为的,所以这里我们不用去选择他,新的SDK会根据我们的参数自动选择相应的服务器区域。

这一步配置好后,人人店往后新增的图片就都是使用的七牛云存储的相关空间了。如果之前系统已经有使用过,并且上传过一些图片资源的话,这个时候系统实际上在使用两套图片逻辑,既存量的图片将使用本地attachment目录下的文件,而增量的新图片将使用七牛云存储中的图片,并且增删改查都是这两套逻辑。

4.平滑迁移旧图片到七牛云

系统建议说直接将attachment文件夹上传到七牛云,当然,这是一种迁移的办法,如果想平滑迁移,可以使用七牛云的镜像存储功能,但是其使用文档写得有些错误,比如文档中说,要使用镜像存储,要求之前系统中的图片必须有一个单独的域名,这一点实际是错误的。人人店系统并没有给图片数据设置单独域名的功能,这里我们找到了一个解决方法,实际上只要原系统的图片都放在同一个目录下,并且使用src引用时都是用某个变量或者逻辑控制绝对地址,都可以比较方便的修改。(如果是相对地址或者绝对地址是写死到每一个src,需要对所有文件进行正则替换,替换成七牛中配置的新地址)

首先,在七牛云的镜像存储中设置好镜像源,直接使用原系统的图片目录地址就好,人人店的类似这样:http://www.yourdomain.com/attachment/,如果有多个目录,则可能需要建立多个存储空间,设立多个镜像存储。

然后,我们替换整个系统的图片地址头,在data/config.php文件中,我们并未找到相应的域名头配置变量,但是我们找到了$config[‘upload’][‘attachdir’] = ‘attachment’;,这说明,系统确实可以对图片的本地目录做统一的配置,进一步,全局搜索attachdir关键字,在framework/function/global.func.php下的第453行,找到了相应的设置,

TIM图片20170716160731

这个就是人人店系统对图片地址的控制逻辑,可以看到它有检查一个文件是否在本地存在,如果存在就会返回本地的链接,如果不存在,则会返回$_W[‘attachurl_remote’] . $src,这里我们猜测$_W[‘attachurl_remote’] 就是我们配置的七牛云的URL。

这里实现平滑迁移的方式很简单,将这一整段逻辑注释掉,直接使用七牛云的地址,即要求系统强制访问七牛云的空间,由于镜像存储的逻辑是,如果七牛空间没有图片,则到之前配置的镜像源下载图片到七牛云的空间,所以,将上面那段代码直接换成这样就好:$src = ‘你绑定使用的七牛云域名’ . $src;

设置好以后,不论是在前台的微信端,还是后台的管理端,人人店系统统一都会调用七牛云的资源了,每个资源被访问一次,就会被自动掉入到七牛云中,之后再访问就速度超快了。

最后,关于这个小技巧的一点思考,如果希望用户上传的新图片,都先在本地存一份,然后在七牛云也存一份,以保证系统可以不依赖七牛云运行,可以不对系统进行七牛的配置,只是更改第四个问题中的代码,这样,文件的上传实际上就到了本地(增删改查都将都是对本地的文件和数据库进行操作),但是读取的时候就被镜像存储功能自动拉到了七牛云,这样设置的话,有一个问题,就是无法删除掉七牛云上的文件,七牛云上的文件会越来越多,不过带来的好处就是可以随时切断客户的七牛云服务,或者更换对象存储服务商,方法就是把第四步的代码还原,或者切换到其他对象存储服务商的服务器即可(进一步的思考是,可以在这里加控制逻辑,根据不同服务商的收费方式或者负载能力,自动选择不同的对象存储服务商)。

 

Mac下App Store安装xcode太慢问题的解决

  • 在 App Store 中点击下载 Xcode
  • 通过 Spotlight 打开 活动监视器,输入 storedownloadd 并点击 ❗️ 按钮

    Paste_Image.png
  • 通过 command+F 查找 .pkg 并复制文件路径
    如果有多个文件,请选择路径中包含 497799835 的文件路径

  • 打开 Finder 并通过 shift+command+G 快捷键打开前往文件夹,粘贴文件地址后,点击 前往

    Paste_Image.png
  • 打开文件所在路径的父文件夹。并打开 mainfest.plist 文件。
  • 复制文件内的 App 下载地址。随后,您就可以通过常用的下载工具或者网盘开启下载模式了。

    然后找一台阿里云的服务器,最好是国内的,用wget下载该文件(注意:这个地址用迅雷下载仍旧很慢)
    wget -c –limit-rate=10000k 下载地址
    这里最好是要限速,不限速的情况下可能速度太快会被关黑洞,-c是断点续传。
    大概10分钟就能下好4G多的xcode,然后加大这台服务器的带宽,用迅雷下回本地就可以了。