现在情况是,我们做的是小程序项目,推送用户瞬时访问量可能会达到百万到千万,我们服务器资源申请相对来说较轻松,服务器均为虚拟机,配置很高,中间件使用tomcat,由nginx来转发,还有redis做缓存,数据库单台mysql,读写查询没有分离,想问下如果想承受这么大的并发,需要如何利用服务器资源?比如如何部署,或者最好能提供架构图
是将我们的小程序链接发到公众号和网站的首页上面,然后用户点击这个链接进入到我们的小程序里,就是一个瞬时访问了过高导致的高并发的问题
我想看看知道怎么配置这7太服务器,才能承受这样高的瞬时访问量
这个你首先要做的是性能分析,看瓶颈在哪里,才能找到应对措施。好比去医院检查,首先要化验拍片,而不是一上来就问吃什么药,开什么处方。
你说了你用了单台mysql,你推送用户是怎么个推送?是往数据库插表,还是往外部推送?这些用户都在线么?非在线的用户需要实时被推送么?总之我不认为你这样的问题能够通过笼统的描述得到有效的回答。
根本都没有搞清楚状况给你的“架构图”,或者人家系统的照搬过来,有多少用处就可见一斑了。
这种类型的问题都可以被归结为服务容量问题,当前资源能够容纳的用户访问数量。这个问题不好回答,但是有法可依:
1、监控平台做到位,从网络流量、连接数、session数量、jvm内存、gc次数和停顿、接口调用量、接口响应时间等等
2、做性能压测,在半夜的时候对服务器进行压测,看一下服务器究竟能够达到的并发数有多少
做到这两点对于收集信息也就足够了,能够做到知己知彼,使用压测找到自己的瓶颈,看起来其他服务器不少,如果真的进行压测,就会发现或许里面存在一坨慢SQL,并发量一上去数据库就满了等问题。通过监控看用户访问习惯,然后给系统添加限流机制,保证大部分人可以正常看到。或者修改推送机制,将用户分100个组,每一次推送1个组,6个小时推送消息,这样就应该没问题了。
还有一些优化说两点:
1、数据库读写分离
2、jvm参数调优,mysql调优、nginx调优,tomcat参数调优,这些都需要尝试,保证榨干服务器性能
建议先别自己钻研了时间上来不及吧,直接找成熟的优化分析服务,比如
阿里的性能测试 PTS:https://www.aliyun.com/product/pts/?utm_content=se_1000101970
精灵云测:http://www.fairytest.com/elftest/perfapplyone
还有csdn的博客:
高并发环境下服务器该如何优化:https://blog.csdn.net/belalds/article/details/81106866
多线程处理、多线程处理、多线程处理,重要的事说三遍
尽量避免不必要的进程切换
设定进程优先级,基础服务靠前排
选择独享网络带宽、使用高带宽网络适配器提高网络i/O的速度
通过mmap系统调用来建立内存和磁盘文件的关联
做完这些没有改善你找我!