慕课网秒杀系统高并发优化

基本内容:秒杀系统瓶颈分析、系统部署架构、应用服务器集群化后的session问题、nginx负载均衡算法、XSS与CSRF、正向代理与反向代理。

瓶颈:

    不是mysql慢,也不是java慢。而是事务在Java客户端执行:{发送第i条语句给mysql,等待mysql执行结果,根据业务逻辑判断执行第i+1条语句|commit|rollback操作}。发送一条sql语句与等待该语句执行结果存在相对很大的网络延迟,由于mysql执行事务会加锁,因此锁的持有时间会很长,导致系统并发度降低。

解决思路:减少锁的持有时间。

    深度优化:在mysql端执行事务。1.通过存储过程实现参数传递,在存储过程内部执行事务。2.客户端调用存储过程即可。

系统部署架构:

    1.用CDN做静态资源缓存(css,js,图片,静态模板),CDN一般部署在离用户最近的结点(网络跳数最少)。

    2.用nginx做负载均衡服务器。

    3.jetty,tomcat服务集群。即业务代码开发的地方。

    4.用redis集群做后端缓存层。

    5.mysql数据库存储层。分库(专库专用)/分表(垂直,水平)/分片。主从结构。

    6.hadoop集群对数据进行统计分析。

应用服务器集群化后的session问题

   (1)Session Sticky策略。把请求固定分发到某台web服务器上,主要有ip_hash算法或者通过SessionId映射。

   (2)Session Replication。把Session信息同步保存到所有web服务器上,可以解决单点问题。问题:带来session同步的额外开销;每台web服务器要保存所有的session数据,占用空间。session复制方案适合于集群节点数不太多的场景。

   (3)Session集中存储,用一台服务器专门用来保存Session信息,其它各web服务器向该服务器获取Session。问题:引入额外的web服务器与Session服务器的网络通信。

   (4)把Session保存在Cookie中。Session实体保存在客户端。问题:客户端对Cookie有大小限制;没有实现物理上的隔绝,可能有潜在的不安全性。

5类nginx负载均衡算法:

    (1)轮训。

    (2)加权轮询。考虑到各结点性能不一,更合理利用服务器资源。

    (3)ip_hash。对ip进行hash,同一个IP的访客固定访问一台的服务器,可以避免session共享问题。

    (4)url_hash。对url进行hash,使每个url定向到一台服务器上。

    (5)fair。按服务器响应时间来分配请求,优先分配给响应时间短的。

XSS与CSRF

    XSS:攻击者把恶意代码提交到后端服务器,由后端服务器渲染显示给正常访问者。

    CSRF:恶意网站窃取访问者的cookie信息,然后冒充访问者发送请求。解决方案:token隐藏域。

正向代理与反向代理

    在正向代理中,代理服务器与客户端同属一个LAN,对服务端透明。

   在反向代理中,代理服务器与服务端同属一个LAN,对客户端透明。反向代理也可以实现负载均衡功能,也在做静态资源缓存。

参:大型分布式网站架构设计与实践

https://www.imooc.com/article/20110?block_id=tuijian_wz

https://www.cnblogs.com/lvgg/p/6140584.html

https://www.cnblogs.com/sss4/p/7106084.html

https://www.cnblogs.com/Anker/p/6056540.html

猜你喜欢

转载自blog.csdn.net/away_lit/article/details/80254953