Websocket
websocket基于tcp全双工通信协议
- RFC 6455 source insight
open handshake 用来兼容http协议
http协议包较大
Netty-socket是socket.io的java实现
Connection: Upgrade
Upgrade: websocket
client—>server—>client
Sec-WebSocket-Key: 双方约定好计算关系(SHA-1 Base64-encode) 返回给客户端
Socket.IO 实现了实时双向的基于事件的通讯机制。旨在让各种浏览器与移动设备上实现实时app功能,模糊化各种传输机制。
Socket.IO 是跨平台,多种连接方式自动切换,做即时通讯方面的开发很方便,而且能和expressjs提供的传统请求方式很好的结合,即可以 在同一个域名,同一个端口提供两种连接方式:request/response, websocket(flashsocket,ajax…).
高并发
- 高连接
- 数据解析
- 数据广播
Redisson
redissonLock.lock()加锁 实现锁续命功能
redissonLock.unlock()
高并发分布式锁实现
分段锁 库存分段存储
不同段位的库存放置到不同cluster
秒杀
页面静态化
cdn加速
秒杀按钮点亮
回源
nas盘服务 js定时刷新后更改function
缓存
localCache一级缓存
Redis二级缓存
缓存一致性
最终一致性
多级缓存一致性
Redis channel订阅后将 无ack机制 无重发 不保证能发送到所有节点
cache过期时间
布隆过滤器
计算位置 二进制 向量 可存储到redis中getBit
防超卖
预下单:放redis中进行预减库存
异步下单
幂等性标识字段一定要全局唯一(分库分表 分布式)
订单号生成规则 分布式Id
8位日期+2位平台来源+2位支付方式+6位(redis:incr)生成
系统时间+用户id一部分+全局序列
雪花算法:对时间依赖严重
美团Leaf 全局ID唯一
百度:UUID生成器
RocketMq事务消息,2pc,SAGA,TCC
适合场景:没有资源竞争的场景,实时性相对滞后 下单之后删除购物车 加积分
限流防刷
秒杀地址隐藏:
- 隐藏
- 动态变化
增加验证码
/{token}/常规地址
redis设置并行量总和 令牌桶防刷
数据一致性维护
Canal 把自己伪装成mysql从服务器
存在数据覆盖问题 数据一定要带个版本号
databus