












我是一个独立开发者,已经持续多年开发维护一款自己的产品:升讯威在线客服与营销系统。从一开始的偶有用户尝试,到如今线上环境和私有化部署均有了越来越多的稳定用户,在这个过程中,我也在不断的提高着自己的技术广度和深度,我希望通过博客与更多朋友分享自己的学习过程和心得体会。
在本篇博客中,我会系统阐述我的升讯威客服系统线上使用环境(SaaS环境)是如何解决文件上传、存储、查看的问题的。
文件上传和存储使用主要服务于客服与访客聊天过程中的文件收发。在服务端主程序中直接集成文件上传下载功能,这是最简单,最容易部署的方式。升讯威客服系统也实现了这种方式,对于业务量不是很大的客户,这几乎是最佳选择,不用额外部署独立的文件服务器,既方便,又节省成本。
但是对于业务量较大的客户来说,这种通过服务端主程序提供文件上传下载的方式,会有一个比较大的弊端,就是占用主程序服务器的带宽。这会产生两个影响:
升讯威客服系统本身对带宽要求很小,5 Mbps 即可承载 2000 访客同时在线。但是,如果服务器的带宽需要同时为文件上传下载服务,则一个大图上传或查看瞬间就能把带宽拉满,造成用户使用瞬时卡顿。如果是上传或下载查看视频文件,则很可能会对带宽产生较长时间的影响,这对业务量较大,特别是与业绩挂钩的重要场景来说,是不可接受的。
通常云服务器附带的带宽都很贵,如果要在主程序服务器上兼顾业务数据的传输和文件上传下载,则需要购买更高的带宽,在业务量较大的情况下,这是相当大的一笔支出。
一个自然而然的方案,是使用公有云 OSS 文件存储服务。好处是接入方便,文件传输不占用主程序服务器的带宽。但是,又一个但是,这同样有两个弊端:
部分客户需要绝对安全可控。常见于政府、金融、保险、医疗等行业,这部分客户不接受公有云文件存储方案。
这是我在自己的官方在线使用环境(SaaS 环境)实际使用近一年后的体会:成本很高。以我使用的阿里云 OSS 文件存储服务为例,实际需要支出的费用包括:
还有一个隐含的成本,会被刷流量,我就被刷了,从某一天始始出流量直线拉升,连接数天持续维持在平时的数十倍规模,但主程序服务器及其它各项数据都正常,用户量正常,业务量正常,系统运行正常。并且在被刷之后的几天,就接到了阿里云代理商的推销电话,我无意关联引申什么,事情就是这么个事情。这是我彻底放弃阿里云 OSS 的一个关键导火索。
在使用了近一年阿里云的 OSS 服务后,随着升讯威客服系统在线使用环境(SaaS环境)用户量业务量的快速增长,交给阿里云的费用越来越多,购买的各种套餐消耗的越来越快。因为 SaaS 环境并不收费,是全免费使用的,阿里云这部分成本有点让人吃不消了。我把目光转向了海外 OSS 文件存储服务。
优势自不必说,免费的存储空间额度,流量额度堪称慷慨!至于什么各种流量包,还 TM HTTPS 请求数费用,更是闻所未闻。
一切都很完美,唯一一个弊端:中国大陆的部分用户访问存在障碍。虽然我提供的在线使用环境是免费使用的,但偶发的文件上传下载失败,会让用户误认为是系统本身的 BUG,这会带来负面影响。
至此,只剩下唯一的选择:自建文件服务器,用来满足大业务量场景下的文件上传、存储、下载。
这个想法我在早些时候有过,当时权衡服务器成本(硬盘和带宽),加上 CDN 成本之后,感觉并不合算,就一直细想,没落实。但随着自己线上环境使用量的增涨,受限于阿里云 OSS 的各种费用和海外 OSS 在国内的使用障碍,我只能开始研究自建文件服务器。
我把目光落在一台阿里云促销时购买的 200元/年 云服务器上,这台服务器配置不高,但带宽却不低,再一查居然有 80 GB 的磁盘存储空间,这不正好合适在上面搭一个文件服务吗?
并且我不知怎么的当时灵光一闪,感觉自己过去被“必须上CDN”这个思维给禁锢了,为什么必须上 CDN?阿里云服务器本身访问速度是能保证的,并且由于客服系统的特殊性,我不需要像大型互联网公司一样实现非常广泛的、高并发场景的文件分发。直白点说,文件服务器是服务于升讯威客服系统中的客服和访客聊天时,上传文件、查看文件用的,不存在单个文件需要被非常多的人同时访问的情况。只要能保证上传速度、访问速度即可,其实在这种情况下上 CDN 作用也是有限的,因为大部分流量都会回源,而 CDN 缓存的内容都是聊天记录中的图片和文件,除了客服和访客本人,其它人也看不到,客服也不会高频查看。
如此说来,这200元/年的服务器,岂不就完美解决了线上使用环境的文件存储和使用难题?剩下的事就是写一个与现有接口兼容的文件服务即可。
我的目标很明确,我不需要一个全能的、强大的独立文件服务器,我需要的是一个服务于升讯威客服系统的文件服务组件。在这个明确的目标之下,许多事是可以简化的,例如鉴权的流程,跨域的配置,都可以直接在文件服务器的配置文件中约定,不需要提供管理界面去配置。对我来说要实现的功能,核心就一个:
实现的方法并不复杂,业内主流的方案是按 AWS S3 的接口来实现即可。
有了这个独立的文件服务器组件,我的线上使用环境彻底解决了文件上传、存储、使用的长期难题,并且由于是与主程序服务彻底解耦的,未来即便阿里云这个 200 元/年的服务器用不了或者无法满足业务需要了,我也可以单独把这个文件服务轻松的迁移到任何服务提供商。
对于私有化部署的客户来说,也为他们提供了一个不使用公有云 OSS 服务的新方案,解决他们过去在不使用公有云 OSS 的情况下,只能用主程序服务来提供文件上传下载的弊端。
升讯威客服系统仍处于不断演进的过程中。
如果您曾经构建或部署过实时聊天系统,我非常期待与您交流心得。
无论您倾向于使用托管版还是自行部署(Self-hosting),都可以免费试用。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。