高并发系统设计建议

/ Javaspringboot / 0 条评论 / 1584浏览

首先这些数据在网络上传输需要时间 其次双十一出现cpu满载情况,应考虑减轻cpu负载,所以不管是请求数据还是返回数据都需要服务器做处理,而服务器在写网络时通常都要做压缩和序列化,而且咱们是springcloud,使用的json序列化,非常消耗 CPU,所以减少传输的数据量可以减少 CPU 的使用。例如减少在服务端上的拼接,格式处理(由小变大的处理)。

用户请求的页面返回后,浏览器渲染这个页面还要包含其他的额外请求,包括CSS/JavaScript、图片,以及 Ajax 请求,这些应该尽量少。因为浏览器每发出一个请求,都要建立连接要做三次握手,解析,处理就导致了上面1说的问题。所以减少请求数可以显著减少以上这些因素导致的资源消耗。 例如,能用js处理的,就不要去服务器请求,比如本次双十二的一些需求,倒计时等相关功能,js能处理,就别单独请求一次服务器了。

用户发出请求到返回数据这个过程中,需求经过的中间的节点数越短越好。 因为每经过一个节点,一般都会产生一个新的 Socket 连接。 我们现在是ngxin+Gateway+eruka+服务本身,4个节点转发。 每增加一个连接节点都会增加新的不确定性,同时消耗cpu,增加网络响应时常。 所以缩短请求节点可以增加可用性。 如果为了双十二,应急用,可以把多个相互强依赖的服务合并部署在同tomcat里,不走eruka,避免socket,把远程过程调用(RPC)变成 JVM 内部之间的方法调用。

大招:考虑不用Feign 的json序列化和反序列化(换protobuf?或者hessian?)

比如本次双十二,必须强依赖商品信息(虽然我也不知道卖啥)、用户信息,这些要保留。成交列表啥的不重要的东西,这些整个双十二流程不是非要不可的信息,可以干掉,别分享机器资源(cpu,内存,数据库磁盘iops)。

有钱多部署。

使得用户双十二时不需要刷新整个页面,而只需要点击购买按钮(或者异步刷新就一个ajax请求),把页面刷新的数据降到最少。

不用再调用依赖系统的后台服务获取数据,甚至不需要去缓存中查询数据,以减少系统调用。