关于保险网销系统大并发背景下的思考

1、业务分析

     1、正常的网销系统业务流程:

114336_xIuI_1579138.png

   2、业务特性

          大幅推广、瞬时抢购、定时上架、瞬间并发量大。

2、技术与挑战

     之前有幸参与了某公司团险在线销售项目,按照极限标准来进行系统设计,背景如下,某企业与保险公司签订了团险合作业务,企业在线员工30W人,企业会安排员工统一在某天早上6:00-8:00之间完成所有人员投保工作。

          购买流程主要包括:详情页面、测算页面、信息录入页面、确定页面,由于浏览器存在缓存机制,部分静态文件不需要再次请求服务器,为了使带宽有充足的传输能力,我们计算时,将不考虑浏览器缓存。

如下是通过LR压测的报告来分析现状系统的一个性能状况(这是之前系统的一个压测情况,不太理想)

虚拟用户数允许时间(s)总的吞吐量(byte)吞吐率(byte/s)总点击次数(请求次数)每秒点击次数通过事务失败事务通过事务平均时间失败事务平均时间
200319290,312,355907,22625,662807282712.27500.8470
250326302,793,940925,97525,485776923522.11601.0760
300330291,530,586880,75722,132674035171.21801.5620

从报表上可以计算出,我们取虚拟用户为200 的数据,平均每个请求大小为 =(总吞吐量/总请求数)=290,312,355/25,662 = 11312b = 11Kb = 1.4KB

 计算每个事务(每个完整购买的流程)包含的请求数量(失败的先不纳入) 25,662/728 = 35 个

说明:TPS 与 QPS 不是一个概念,如下描述的事务表示一整个购买流程。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

结论:通过压测,我能能得到一个TPS的总流量为 35*1.4=49KB

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

   

2.1并发数预估  

    系统用户数:可能使用系统的用户数

    在线用户数:在我们系统中访问并操作的用户数

    并发用户数:(在本文中,指的是某块业务的并发数)

    计算平均并发数:C=nL/T (n:表示登录用户数,即在线人数 ,L:平均时长,T指考察时间)

    峰值并发数 C' =C+3*(根号C)

     说明:结合团险在线销售经验,用户平均在2分钟之内能完成这个销售流程 

        C = 300000*1/120= 2500

        C‘ = 2500+ 3* √2500=  2650

2.2带宽计算(主要是计算上行带宽,一般企业中,下行带宽可以认为是没有限制的)

        备注: 在计算机网络中,网络传输率采用的是b/s(比特每秒),所以传统上我们所说机房100M带宽指的是100Mb/s  , 1B(字节)=8bit(比特)

        30W员工,集中投保时间为6:00-8:00

        TPS(一个全流程为一个事务) = 300000/(2*3600) = 42  ,经过上面的压测,计算的理论值,一个TPS的流量为49KB,那么带宽为 49*42KB/s = 2058KB/s

= 2MB/s = 16Mb/s  因此,需要为了这次活动,必须独享16M(上行带宽)带宽.

      极限峰值情况,根据并发情况,刚才计算一个TPS为49KB ,一个TPS包含4个页面,那么每个页面为12KB左右(我这边算平均值,应该使用流量统计工具,可以具体算出每个页面大小)。那么需要的带宽为 2650 *12=31800KB/s=31KB/s=248Mb/s ,当前服务器带宽为25M带宽,因此这个是相当不现实的。 因次秒杀活动/其他活动是,应该新增的网络带宽,必须和运营商重新购买或者租借。 为了减轻网站服务器的压力,需要将秒杀商品页面缓存在CDN,同样需要和CDN服务商临时租借新增的出口带宽 。因此建议,如果需要搞活动,最好是能上CDN。

3.3系统吞吐能力

     通过测试报告,我们可以看出,系统最优(200个并发用户的时候) TPS = 728/319=2.3个/S ,为了满足当前团购活动,系统要求的是  TPS(一个全流程为一个事务) = 300000/(2*3600) = 42  个/S  相差了21倍左右,因此理论上在带宽允许已经负载均衡的情况下,需要21台服务器才能支撑当前活动,目前最多能提供4台服务器。因此系统吞吐性能必须优化至少5倍以上。如下是当时的系统流程,并行结构。

     如上测试报告所述:QPS = 25,662/319= 80  ,而本次活动要求的QPS = (一个购买流程总请求数 35)*  300000/2*3600= 145  。

 

    154309_CVu5_1579138.png

1、在后续的排查过程中 发现核保设计查询的数据库比较大,且有多表关联查询,因此数据库SQL优化是必须要做的一部,加上一次关联查询话费了3S 中,如果我们能优化为1S,那么系统整个吞吐能力提升了3倍,如果能优化到 100ms,那么就是提升30倍,那么这个服务器数量理论上也将减少30倍。

2、高并发服务器建议调小 TCP 协议的 time_wait 超时时间,:操作系统默认 240 秒后,才会关闭处于 time_wait 状态的连接,在高并发访问下,服 务器端会因为处于 time_wait 的连接数太多,可能无法建立新的连接,所以需要在服务器上 调小此等待值,在 linux 服务器上请通过变更/etc/sysctl.conf 文件去修改该缺省值(秒):      net.ipv4.tcp_fin_timeout = 30

3、调大服务器所支持的最大文件句柄数(File Descriptor,简写为 fd)。 :主流操作系统的设计是将 TCP/UDP 连接采用与文件一样的方式去管理,即一个连接对 应于一个 fd。主流的 linux 服务器默认所支持最大 fd 数量为 1024,当并发连接数很大时很 容易因为 fd 不足而出现“open too many files”错误,导致新的连接无法建立。 建议将 linux 服务器所支持的最大句柄数调高数倍(与服务器的内存数量相关)。

4、调整tomcat连接池数量,线程大小默认是200 ,不是越多越好,线程越多,涉及到的线程切换会消耗大量的cpu资源。

 

3.4 如果在调优到极限的情况下(且不添加硬件的情况下),还是满足不了。那么,我们只能采用限流措施,进行重启与过载保护。

如果系统发生“雪崩”,贸然重启服务,是无法解决问题的。最常见的现象是,启动起来后,立刻挂掉。这个时候,最好在入口层将流量拒绝,然后再将重启

秒杀和抢购的场景,流量往往是超乎我们系统的准备和想象的。这个时候,过载保护是必要的。如果检测到系统满负载状态,拒绝请求也是一种保护措施。在前端设置过滤是最简单的方式,但是,这种做法是被用户“千夫所指”的行为。更合适一点的是,将过载保护设置在CGI入口层,快速将客户的直接请求返回。因此需要引入网关平台。

155530_ocex_1579138.png

转载于:https://my.oschina.net/wanhonghui/blog/849388

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值