最有挑战的事情,一般会有技术和项目管理的问题,相对来说业务的复杂程度决定了技术的难点,项目管理的问题一般都是如何统筹一个大的需求模板正常上线的排期管理问题
技术上
比如之前做过的一个活动分享挑战,门店新建活动,要求店员分享,客户到店消费后,统计客户到店消费次数和金额,生成活动龙虎榜,对店员分享成果排行,活动完成后需要记录信息链路较长,耗时较多,实时接口的调用,会导致接口超时,所以我们通过接入 mq 来异步削峰,前50名进店客户有礼品赠送,所以要保证mq的顺序消费,听过 messageQuqueSelect 中 hash 方法 hash 到同一个队列中,来保证顺序,通过责任链的设计模式,处理业务流程顺序,在通过分布式可重入锁解决,同一个客户进店后,不同活动下统计信息问题。业务中需要对客户的维度,活动的维度,店员维度等多方面统计,复杂程度相对较高,所以业务上实现就需要多多设计,减少线上出现问题的概率
结局线上问题,比如提醒单工程的 rss 使用率偏高一直告警,内存使用率高一般来说肯定是内存不够用了,我们先通过 jps 查询线程情况,再通过 jstat -gc 查询对应的 gc 情况,发现 ygc 和 fgc 没有很频繁 stp 时间也不是很长,排除了大对象直接进入老年代 gc频繁内存告警的情况,所以直接添加了 jvm 内存, 保证线上环境的内存安全线,线上环境不能直接 jmap -dump 生成 dump 文件分析,所以我们就通过 告警曲线观察了使用率的情况,发现一周内晚上的时候总是会偏高,查看了定时任务发现有轮训任务查询导致内存占用,我们就精简了对应的查询字段,解决这次的 rss 告警
管理上
相对来说一个大的需求上线,可能会涉及多方团队,比如刚刚说到的活动分享挑战,涉及到会员卡券中台,订单中台,大数据,财务中台,涉及团队较多,需要多方提供接口,消息,还有我们项目内部团队排期,预估上线时间,人力是否充足,是否需要接人还是延期上线,都需要统筹好。