1.首当其冲的当属业务和技术的矛盾,业务快速发展,产品对需求的时间点要求感人
应对扑面而来的需求,工程师们往往疲于奔命,使用各种短平快的方法来满足业务的需求,长此以往,整个系统变得错综复杂,臃肿不堪,难以维护。一个好的架构需要在应对业务需求的同时,持续提炼通用化的模块,通用层基础且稳定。在通用模块的基础之上构建出适配层,由适配层处理复杂多变的业务需求,适配层灵活且多变。在技术上不断沉淀基础的通用模块,这不仅不会成为工程师们额外的开发负担,反而可以提升业务需求的实现效率,提高系统的健壮性和可持续发展。解决业务和技术这一对矛盾,需要工程师站在业务和技术中间,不偏不倚。
2.优秀的系统架构面对的第二个矛盾是技术和运营的矛盾
工程师们往往热爱新和奇的技术,重视新功能的开发,从0分做到60分的过程总是令人愉悦的,一切按照预期的演进是那么的美好。随着系统投入使用,数据规模越来越大、用户量和访问量逐步增大,算法效果需要不断提高,原有的架构暴露出来的问题也逐步增多。架构的演进进入了深水区,是抛弃原有架构进行重构,还是在现有系统中进行持续的演进,工程师们往往会遇到选择的难题。一个好的系统是要靠持续深入的运营来构建的,这里的运营是一个泛指的概念,指代构建系统中各种监控、调试信息、数据统计分析、数据对比等。一个系统不论是重构,还是持续演进,都需要开发全方位的运营系统来了解当前架构中的每一个环节。系统架构从60分演进到100分是一个艰苦的过程,没有一个系统是在一开发出来就解决了所有的问题的,提高运营能力是架构演进的基础,这本身不是一个技术问题,而是意识问题,需要工程师们做大量细致深入的调研和思考。
3.最后要说的是全局最优和局部最优的矛盾
我们在开发中常常遇到,当针对某个问题进行优化后,系统中又出了其他问题,也是俗话里说的头疼医头、脚疼医脚、治标不治本。当你是从0开始搭建一个系统,对系统的各个环节和历史演进非常清楚,也就比较容易的从全局角度思考和解决问题。但对于复杂系统,大部分工程师往往只关注到系统的某一部分,解决问题的思路是受限于眼界,容易陷入至局部最优,而且往往局部的解决办法相对全局而言更复杂更间接。工程师需要有开阔的眼界,从更高层面理解系统架构,从而了解问题产生的本质,从全局角度出发予以解决。