von Mengmeng Lou Vor 11 Jahren
804
Mehr dazu
车次-时间表(key-value)可用redis
节省带宽
相同请求批量处理
防止系统被超流量搞垮
不提升性能
技术上
技术问题
4.消息机制
消息乱序
消息丢失
3.多线程多进程,并发控制麻烦
2.程序回滚复杂
1.被调用方结果返回,涉及进程间通信的问题
处理程序做成并行,课水平扩展
业务上
收集请求
健康各服务器负载
内存换页
并发
内存
CPU
分配任务
任务队列
需要考虑持久化
可以批量把任务分配给处理器
抢占式(拉)
下游服务器拿任务,简化系统复杂度
路由器是均衡流量的,流量不代表服务器繁忙程度
数据分区不能减轻热销商品的负载
10000库存=>10台*1000库存
eg:主键ID范围
第一种方式不一定平均
不常改的数据放到一个表里,常改的放到多个表里
减少字段数量
竖着分表
eg
车型
铁路局
线路
一张表拆成多张一样字段但不同类的表
eg:select where x=a 和 select where x=a-1 or x=a or x=a+1都可以
真正买再写数据
local cache
memcache
换存越大,重建越慢
系统维护会造成缓存丢失
和操作系统的内存换页和交换内存相似
LFU
LRU
FIFO
内存可能不够,需要把不活跃的换出内存
2.后端通知更新
实时性好
复杂
1.time out 重查
实时性差
简单
与数据库同步
不显示余票数量
显示有没有
每个查询做hash,可用nosql计划实现
查询结果缓存
nginx的sendfile功能让静态文件直接在内核心态交换,增加性能
gzip
静态化不常变的页面和数据
一次浏览后浏览器缓存很多,只有10k
12306首页900k
图标一个文件
CSS一个文件
把JS打成一个文件
用CSS分块展示
一个登陆查询页面
TCP链接后端不会立刻释放
用户会多页面访问
一次访问后浏览器会有cache,但依然很多
车票预订70个HTTP
主页60个HTTP连接
最后有CDN
因为http请求是短作业,所以简单的负载均衡
在路由器上根据路由的负载重定向
异步
缓存
B2C异步
不成功有确认邮件
延时处理
传统加锁
3.扣除库存
2.支付(可选)
1.占据库存
库存更新
库存查询、计算
B2C噩梦
不需要保证数据一致性,没有锁,容易水平扩展
事后抽奖
停止秒杀后批量写数据库
内存里cache放可秒杀的数量,分布式放,100商品,10台*10个
不操作后段数据,只对下单log
只接受前N个请求
一致性哈希
路由器
后端服务器垮了
带宽问题
十万是遥不可及的