-
Notifications
You must be signed in to change notification settings - Fork 45
2019 tech review
-
现象
-
机房故障如风扇问题导致关机
-
金山云故障如升级网卡驱动热迁移导致cpu高
-
腾讯云服务器宕机、腾讯上海光纤受损(影响安卓应用宝平台)
-
腾讯CDN挂了(影响版本更新)
-
亚马逊服务器宕机(影响部分海外服务)
-
-
复盘
- 外部机房服务宕机不可避免,项目、运维这边都要做好预案,如数据库分开部署等,以在宕机时损失达到最小
-
现象
-
策划配置错误、redis超时导致奖励重发、三方活动漏洞刷
-
代码动态修改了配置表奖励、排行榜重复出现同一个人(跳表)导致同一个人收到多封邮件
-
补偿脚本循环bug导致多发、策划将测试数据提交了、运营补偿发错道具
-
SDK被刷订单(跨月未做排重)、领奖相关逻辑业务抛出异常导致刷、购买逻辑发一个很大的正数/负数导致
-
整数溢出变为负数导致逻辑bug、奖励领取状态字段未存库导致反复领取
-
-
影响主要项目
所有项目
-
复盘
后端业务逻辑明确防御式编程:The Server is the man
- 客户端请求参数强校验
- 关键逻辑内方法都要try/catch,避免一个方法抛出异常,影响其他方法
- 资源增减逻辑必须遵循’先扣后加、检查负数、避免溢出‘,必须在代码层面避免’刷资源‘问题
- 关键逻辑内的null判断,如不能因为日志打印抛空中断业务逻辑
- 目前Java redis底层捕获了异常,业务层无感知,相关项目需注意此问题避免返回默认值造成逻辑bug
- 整数计算时一定要考虑溢出问题
排序集合如ConcurrentSkipListSet或者TreeSet,在元素添加后,再尝试改变某元素内部用于排序的值后,则出现无法remove的情况,需要注意此问题
对于策划、运营配错/发错等问题则需要从流程上规避,如增加多次确认等
刷资源的原因通常很小,但是影响巨大,很有可能要回档,所以无论是策划、程序、运营都要有checklist
-
ThreadLocal
-
现象
数据错乱、串号等,出现场景如充值回调、battle回调到玩家线程时拿到错误了threadlocal数据
-
复盘
- 使用ThreadLocal一定要谨慎,本身是一个好东西,但是在多线程交互的时候一定要多注意
-
-
多线程
- 现象
- 腾讯系游戏聊天多线程调用SDK导致进程crash(jni)
- LinkedHashMap + ReentrantReadWriteLock 实现LRUCache导致登录卡死
- HashMap死循环(排行榜、活动)、key重复导致无法登录
- 客户端sdk回调多线程操作lua_state闪退、多线程异步加载spine闪退
- 战斗异步callback的上下文 + 重连卡死
- 复盘
- HashMap是非线程安全,多线程环境下一定要注意
- 客户端使用多线程要注意,会出现crash
- 引入battleserver后,backend逻辑线程调用battle后会直接返回,如果此时battle耗时,那么转菊花下线后重连进来要考虑回调发送的消息上下文问题
- 现象
-
现象
-
battleserver复盘时间长、Crash、内存占用过高
-
内存泄露、死循环、luajit table 65535、响应时间长
-
战斗逻辑bug
-
-
复盘
-
避免多线程调用同一个luastate
-
服务器端复盘可关闭luajit模式
-
战报JSON解析优化、luastate配置合理、频繁GC影响复盘、预热
-
luajit32位内存限制,避免多版本造成luastate泄露,可考虑luajit64位
-
战斗逻辑复杂,最好有战斗模拟器工具模拟所有组合情况,避免线上出现bug
-
-
现象
- 腾讯运维操作合服/新服失误、集团运维操作失误如迁移、项目运维操作失误如删库
- 更新https证书导致cdk接口不可用、cdk生成过慢、cdk失败因在执行删除过期码导致数据库压力过大、cdk地址更新未及时通知项目组
- 版本更新发布时间长、版本更新流程规范如在某些情况下建议整包(hotfix、hotfix config后)、patch上传优化
- ES集群Crash、Python脚本性能问题
- redis集群/单例方式注意事项、redis清理过期key、keys *、单文档大小超过16M
-
影响主要项目
- 所有项目
-
复盘
-
运维工作必须要严格按照规范和checklist走
-
版本发布的基础组件,不能出问题
-
运维脚本、三方中间件都要严格测试
-
cdkey、gm等系统也要保证服务,否则也会对项目组产生影响
-
-
优化
内存(泄露、大量离线Player、空间换时间)
CPU(只处理感兴趣的事件、避免频繁操作redis)
日志(异步、无用日志)
JVM(版本升级、cms gc优化)
数据库存储(算法优化、带宽/CPU平滑)
mongo(副本集切换、writeconcern、传输压缩)
使用db做数据库表
资源多线程加载
帧率根据机型适配
天眼接入
拆玩家登录消息
-
上线问题
-
刷号、网络攻击、加速、IOS充值延迟到账
-
数据库文件损坏、热更crash、越狱设备修改游戏
-
ios审核问题、UC渠道屏蔽字、sdk bug(使用最新sdk)
-
海外:移动网络无法连接服务器
-
其他时间问题
- 跨年
- quartz调度误差
- 线程定时任务偶尔会运行时间不对
-
- sdk使用一些非法接口
- 苹果提审将拒绝使用WebView,使用WKWebView
- 审核人员vpn连不上游戏
- Android 64位支持
- android可以考虑用FireBase推送
- 线上项目,出现bug正常,只要不是刷资源的bug
- 防御式编程 + 契约式编程 = The Server is the Man
- 最无奈的问题就是反复出现,重复踩坑
- 友商不给力的时候,你一定要坚挺
-
异步编程
- callback、future、reactive、coroutine
-
新架构设计支持弹性动态扩展能力和高可用容灾能力