多线程 & 并发架构
多线程
启动线程数 = [任务执行时间 / (任务执行时间 - IO等待时间)] * CPU内核数 (system load值 = CPU 核心数)
最佳启动线程数和 CPU 内核数量成正比,和 IO 阻塞时间成反比。如果任务都是 CPU 计算型任务,那么线程数最多不超过 CPU 内核数,因为启动再多线程,CPU 也来不及调度;相反如果是任务需要等待磁盘操作,网络响应,那么多启动线程有助于提高任务并发度,提高系统吞吐能力,改善系统性能。
线程并不是越多越好
线程创建本身是需要消耗资源的
在 CPU 上进行线程上下文切换也是需要消耗资源
new 一个对象的过程:静态代码块 -> 静态变量 -> 父类构造函数 -> 子类构造函数
高并发
高并发下存在的风险
网络带宽耗尽
服务器load飙升,停止响应
数据库瘫痪
秒杀系统
静态化
商品列表和详情页面都做静态化,本身商品是固定的变动不大,无需动态去数据库加载
静态化页面中首先并没有提交页面的url,使用js动态去后台获取已经可秒杀的商品id,如果可秒杀,后台加随机数生成提交页面的url,也就是说秒杀开始之前,没有人知道提交页面的url
图片合并
8张图片合并成1张,通过css偏移确定点击哪张图片
减少Http请求
多阀门拦截,大幅度限制进入服务器请求数量
限制进入秒杀页面,只有前1000个请求才能进入秒杀页面,之后的请求都会跳转到秒杀结束页面
限制进入下单页面,只有前100个请求才能进入下单页面,之后的请求都会跳转到秒杀结束页面
限制进入支付系统,同上
搜索引擎架构
网络爬虫:爬取各个类型的url,并做去重
建立倒排索引,计算链接关系(用于排序,保证搜索出来前面的数据就是用户真正需要的)
评论