背景
前不久开发了一款文档相关的服务,服务设计文档的生成以及显示,上线一段时间后,有人居然反映处理能力达不到他们的要求!!根据我们的测试结果,满足50人同时使用是没有问题的,客户就是上帝,赶紧提升服务能力。
方案构思
如何提高生成能力以及如何实现高可用的生成与展示是个问题!首先对现有的过程进行分析。
现有的流程分析
文档的生成流程:
- 用户在B端上传指定的材料
- S段处理请求,把结果save 到server本地
- B端发送展示请求,S端把相关材料返回到B
简单的流程如下图所示:
用户说服务能力不够,也就是说有很多的用户在同一时间发送转化请求,我的server处理不过来了。我需要做的是增加服务节点,让多个server 处理请求,这就是需要分布式的方法。但是这样会存在一个问题 - 为了展示的时候能够快速响应,我把数据存在了server本地,分布式方法如何保证我可以从生成文件的地方访问生成的文件?
- 如果一台生成的机器挂了,还可以访问到它生成的文件吗?
- 如何做到高可用,有一台活着就能提供正常服务
方案
整体的方案:
启动多个server ,采用负载均衡方式连接这些服务,挂一个统一数据库
- 微服务方案
- nginx 方案
客户的紧急需求决定了我只能采取nginx 方案,代码修改少,交付快。整体的结构图如下所示:
客户端通过代理访问对服务进行轮询,服务转完后把数据在统一数据库中进行备份,如果访问的时候,会加上服务的id 号码,如果在显示的时候健康检测没通过,则会把请求转发到其他服务,其他服务如果没有这个文件,则会从统一数据库中拉去,这样的话就基本做到了高可用,数据库的方式也是采用了集群部署的对象存储。实现起来也比较快