账务系统可伸缩,难点在于热点账户;热点账户即资金处理频繁、时间点密集、基于等待的数据库排它锁的大账户;正常情况下,我们开发人员首先是切入系统进行优化,但实际以业务为切入点会更好。首先对业务场景进行优化,实现进出资金隔日,业务错峰,拆分收支账户,收款方到账准时实化,收款方到账准时实化;接下来才是系统上的优化,系统上做到分布式锁、资金资源池机制、缓冲记账、并发控制、异步化;最后是账户层面的优化,不同账户制定不同的策略。比如中间账户:只登记账户明细流水,不更新余额,日终进行汇总轧差,一次性更新;待清算账户:采用单边记账方式,待清算账户不做余额更新并且不登记账户明细流水,待日终进行单边汇总;特定业务收费账户:异步分段补账等,这样的优化才是最有效的,而且扩展性好,后期的维护成本也低;
在解决了核心瓶颈点之后,设计架构的演进路线也很重要;因为我们做系统重构是不能停业务的,就好比飞机在飞行的过程中,进行换引擎的操作;基于以上目标,我们进行架构重构,就需要注意这三点:
1、要与业务发展路线合拍,顺势而为:切忌沉浸在自己的技术世界里面,因为公司首先是盈利组织,研发首先要服务好业务,才能驱动业务,才能长远发展,阻碍业务发展的研发团队和研发技术方案是不长久的,特别是对于一个竞争对手激烈的高度发展的公司;
2、专注主线、边界优先,步步为营:就像装修房子一样,可以先把墙装好,但内部的每一个房间不一定马上装修,因为我们内部是可控的,内部系统重构可以放后,但是要先做提供给边界系统的接口,这样既可以很好的控制风险,也便于多团队之间的协同作战;
3、定期可视化投入产出比:因为金融系统不可能把业务停下来,他一定是在业务发展的过程当中,需要实时评估,重构和业务发展是否合拍,这样便于获得集团的大力支持,减少各方的不理解,减少很多不必要的阻碍,消除部门壁垒,消除决策层的顾虑;
实施的过程当中,如何管控项目?
项目前:需要消除风险,获得支持,确定项目价值与范围,明确业务影响 ,获得相关干系人支持,用架构概念验证原型;
项目中:做到短、平、快,严格控制项目范围扩张,Rebase不可避免的业务需求;
项目发布时:做到稳定,用户体验连续,基于场景的立体化监控与报警,比如有时监控时我们常发现单个系统的耗时、成功率等指标都正常,但实际影响了整个调用链,影响了某个场景,所以一定需要基于场景做立体化监控。其次,每个核心链路上的系统一定要经过应急预案的演练。然后,要保持悲观主义的心态和终结者的思维,潜意识里面要假设重构时一定会有问题, 所以一定要守好上线的最后底线,要做到快速回滚和降级。
最后是阶段性复盘,聚焦目标,防止做的需求偏离业务目标,这一点对于研发管理者特别重要,通过这些回顾逐渐拿到和业务方的平等话语权;慢慢就会建立起和业务的一个很好的沟通渠道;
架构重构后需要验证合理性,怎么知道我们设计的架构就是满足我们的预期呢?主要包括3个方面:
1、新老场景的推演:新老场景是否都能支持;
2、核心服务的推演:上下游系统需要演练是否稳定 ,
3、非功能性的推演:系统是否可隔离、可配置、可监控、可回滚、无单点、无状态等;
主要推演架构的高可用、可伸缩、研发成本,运维成本和迁移成本5个指标,通过这5个指标在上述3个方面的推演,基本上就可以验证架构合理性了,其实做架构决策也可以参考这个依据,比如多个研发中心,让你做架构决策,这个系统谁做合适?特别是架构师怎么让自己的架构决策做到大家都认可,这种思维方式都可以参考;