软件架构
软件系统架构不只是软件本身架构,它是一个全系统、全网络的架构,从层次上由低到高分为:
- 程序架构
- 系统架构
- 产品架构
- 生态、商业模式的架构
任何一个架构师,都是需要重点解决某方面的尖锐问题,同时避免在不合适的场景下,一种技术、一类框架或一种架构模式被滥用。架构就需要对整体框定好范围与约束。
架构设计不可能面面俱到,要解决或是发挥关键路径上的资源合理有效的最大价值。一个好的架构,不会随着时间或业务的变换,而需要进行大的破坏性的变化。
架构演进
从互联网公司的角度来看,他们认为架构都是在实际应用过程中的生长,一开始就设计和实施面面俱到的架构是不符合互联网快速交付的方式的,不要过度设计,谁也不知道业务上线后业务量将会是一个什么量。
架构的演进过程基本是围绕着性能,可靠性,扩展性,安全性,容灾展开。而对于可靠性,他们认为故障是不可能避免的,失败可能是常态,核心是如何地减少故障对用户或系统产生的影响范围。要提供有损服务,在故障的情况下,保证核心服务,可能放弃一些其它的服务。
相对于电信业务,互联网公司的业务更侧重于用户体验,极致的响应速度与简单易用的体验是第一个设计原则。而电信业务传统是更侧重于可靠性,甚至零无损。
架构师素质
架构师要能充分理解用户需要,充分协调和利用资源,满足需求; 具备基本的方法论,敏锐的观察力,善于对事物的抽象,提炼,简化。同时由于架构涉及到范围广,需要能快速学习新知识,善于学习关键点,不能由于过多限于细节而影响精力分配。
架构师很多时间是技术决策,需要能勇于应对变化,积极改变,敢于挑战。能够将方案落地,从解决系统的具体问题出发,能解决别人看不清的问题,也同时需要具有战略眼光,看得更远。
架构是上层建筑,影响深远,所以架构师需要善于识别和消除高风险,要广泛地吸收不同的意见,头脑风暴,风险识别、评估。对于风险进行排序,对于高风险点进行原型验证,切不可纯理论的架构,做成空中楼阁。
注:以上观点收集于公司内网某同事的输出,在此表示感谢。