我在我的服务器上部署了网易云音乐api、qq音乐api服务器。
最近在做统一api,刚做完搜索服务,于是我就打算测试一下这个接口的并发性。
本来我的目的是想测试一下自己定义的线程池的优劣,想调整参数改进一下线程池配置。
于是我用jmeter
进行压力测试,测试过程中我发现了现有结构的一些问题;
问题一、服务器带宽不够高,我的服务器只有5M、换算成流量就是640k/s,这对于返回30k的json来说,来20多个请求就完蛋了,带宽不够,而且cpu使用率最高也才40%多,完全浪费了他的最佳性能!我要压榨它的价值
画一个现有情况的架构图
这个架构图很明显缺陷太大了。
分析导致并发量小的原因
很明显1,3 过程由于带宽原因,只能有640k/s的速度。
发现json数据一般也比较大,可能是30-60kb,这并发量始终不可能有太大的变化。
改进方案
方案一、去掉云服务器这一层,可以提高并发量,利用客户端的的带宽 对网易云音乐服务器 和 qq音乐服务器 发请求。
做法是,将网易云音乐服务器和qq音乐服务器以及我日后写的springboot程序通过一个docker镜像构建起来,然后客户端通过虚拟机将这个docker镜像启动起来即可
方案二、保留云服务器这一层,云服务器只做请求转发,不做数据传输,数据直接从官方的服务器直接流向用户,这样可以有效避免带宽问题。
会发现从公网下载文件是很快的
方案三、直接替换nodejs,用springboot做一整套api,至于带宽问题我的做法是,将springboot部署到我空闲的电脑上,然后利用内网穿透原理实现服务器的作用。
我最终采取的方案,是方案三,因为我看了一些网易云音乐api的源码,以及qq音乐api的源码,非常的简单,我可以用java快速实现并且原生springboot项目,能让服务快速的继承进springboot生态圈
下面这个架构图是最简单的架构方式