E-Meeting现状
- 所有的请求都压倒了后端数据层,数据读写锁冲突严重,并发高响应慢
- 重复预订的问题(超卖)
- APP,PC部署在一起了
- 高峰期访问很慢
E-Meeting业务分析
- 正常流程: 查询会议室->锁定会议室(创建会议室)->更新会议室信息->通知开会
- 抢订流程: 定时开始->瞬时抢控->时间短,瞬时并发量高
E-Meeting技术挑战
- APP抢订会议室时间短,并发访问量大的特点,解决方案是将APP接口独立部署
- 负载压力,页面内容尽量静态化,用户请求不需要经过应用服务器
- 重复预订的问题(超卖)采用数据库事务和行级锁
- 前端: 扩容,限流,静态化
- 后端: 内存 + 排队
E-Meeting架构设计
- 尽量将请求拦截在系统上游
- 会议室预订(读多写少)【总共有60个会议室有1000个人抢,只有60个成功,其他都是查询】
- 把客户端逻辑放到数据库,避免网络延迟和GC影响
- 整个事务在数据库端完成,用存储过程写业务逻辑,服务端负责调用
- 保证减完不能等于负数 update number set x=x-1 where (x -1 ) >= 0;
E-Meeting站点层设计
- 按钮防重复(点击一次按钮后就变成灰色,禁止重复点击按钮)
- 同一个UID,限制访问频度,做页面缓存,X秒内到达站点层的请求,均返回同一页面
- 同一个item的查询,做页面缓存,X秒内到达站点层的请求,均返回同一页面
- 同一个IP限制访问频度,做页面缓存
E-Meeting服务层设计
- APP接口加入了10秒只能访问10次,之后再等10秒访问的限流操作
- 对于写请求,做请求队列,如果库存不够全部返回“已售完”
- 预处理阶段,把不必要的请求直接驳回
E-Meeting部署架构
- 使用Nginx或Apache将用户的请求分发到不同的机器上做 负载均衡
- 使用Redis减少数据库的请求量
- 调整IIS 7应用程序池队列长度 由原来的默认1000改为65535
- 调整IIS 7的appConcurrentRequestLimit设置 由原来的默认5000改为100000
c:windowssystem32inetsrvappcmd.exe set config /section:serverRuntime /appConcurrentRequestLimit:100000
- 调整machine.config中的processModel>requestQueueLimit的设置由原来的默认5000改为100000。
- 修改注册表,调整IIS 7支持的同时TCPIP连接数 由原来的默认5000改为100000。
reg add HKLMSystemCurrentControlSetServicesHTTPParameteris /v MaxConnections /t REG_DWORD /d 100000
E-Meeting运营维护
- 为了确保高峰期服务器资源足够支撑业务需要每天晚上0时重启IIS,短信服务,数据库IO清理的工作
- 检查Oracle数据库性能是否达标
- 高峰期的时间段检查网络稳定,Ping网络
- 高峰期的时间段检查内存,CPU 是否过高
posted @
2018-11-02 10:19
峡谷少爷
阅读(
376)
评论()
编辑
收藏
举报