
前面几期专栏,我跟你系统的聊了架构设计的主要目的是为了解决软件系统复杂度带来的问题,并分析了复杂度的来源。从今天开始,我会分两期讲讲架构设计的3个原则,以及架构设计原则的案例。成为架构师是每个程序员的梦想,但并不意味着把编程做好就能够自然而然地成为一个架构师,优秀程序员和架构师之间还有一个明显的鸿沟需要跨越,这个鸿沟就是“不确定性”。对于编程来说,本质上是不能存在不确定的,对于同样一段代码,不管是谁写的,不管什么时候执行,执行的结果应该都是确定的(注意:“确定的”并不等于“正确的”,有bug也是确定的)。而对于架构设计来说,本质上是不确定的,同样的一个系统,A公司和B公司做出来的架构可能差异很大,但最后都能正常运转;同样一个方案,A设计师认为应该这样做,B设计师认为应该那样做,看起来好像都有道理......相比编程来说,架构设计并没有像编程语言那样的语法来进行约束,更多的时候是面对多种可能性时进行选择。可是一旦涉及“选择”,就很容易让架构师陷入两难的境地,例如:· 是要选择业界最先进的技术,还是选择团队目前最熟悉的技术?如果选了最先进的技术后出了问题怎么办?如果选了目前最熟悉的技术,后续技术演进怎么办?· 是要选择Google的Angular的方案来做,还是选择Facebook的React来做?Angular看起来更强大,但React看起来更灵活?· 是要选MySQL还是MongoDB?团队对MySQL很熟悉,但是MongoDB更加适合业务场景?· 淘宝的电商网站架构很完善,我们新做一个电商网站,是否简单地照搬淘宝就可以了?还有很多类似的问题和困惑,关键原因在于架构设计领域并没有一套通用的规范来指导架构师进行架构设计,更多是依赖架构师的经验和直觉,因此架构设计有时候也会被看作一项比较神秘的工作。业务千变万化,技术层出不穷,设计理念也是百花齐放,看起来似乎很难有一套通用的规范来适用所有的架构设计场景。但是在研究了架构设计的发展历史、多个公司的架构发展过程(QQ、淘宝、Facebook等)、众多的互联网公司架构设计后,我发现有几个共性的原则隐含其中,这就是:合适原则、简单原则、演化原则,架构设计时遵循这几个原则,有助于你做出最好的选择。合适原则合适原则宣言:“合适优于业界领先”。优秀的技术人员都有很强的技术情结,当他们做方案或者架构时,总想不断地挑战自己,想达到甚至优于业界领先水平是其中一个典型表现,因为这样才能够展现自己的优秀,才能在年终KPI绩效总结里面骄傲地写上“设计了XX方案,达到了和Google相同的技术水平”“XX方案的性能测试结果大大优于阿里集团的YY方案”。但现实是,大部分这样想和这样做的架构,