最近在看《从零开始学架构》,深入浅出通俗易懂,值得一看。作者将架构设计分为4个步骤,第一步:有的放矢-识别复杂度,解决复杂度带来的问题,是架构设计的本质。第二步:按图索骥-设计备选方案,利用备份冗余思维,多设计几套方案,不只是一种选择。第三步:深思熟虑-评估和选择备选方案,多维多角度的去比较方案的优劣,根据实际情况选择最合适的方案。第四步:精雕细琢-详细方案设计,落实方案的细节。
识别复杂度,明确目标和要解决的问题。流量太大,服务器经常宕机?某个功能引起整个应用不可用?数据库表数据太大,读写速度太慢?全文搜索很慢?分布式事务问题?
设计备选方案,多一种选择。当数据库单台达到瓶颈了,可以选择读写分离,也可以选择分库分表,分表又可以垂直分和水平分,水平分又有几种方案,可以使用以MySQL-proxy为基础,360开源的Atlas,Mycat也是一种不错的选择。单台服务器性能达到瓶颈,可以通过负载均衡,可以选择软件负载nginx也可以选择硬件负载F5。当通过加机器已经解决不了问题的时候,可以选择服务拆分。
360度评估和选择备选方案,从性能、复杂度、成本、可扩展、可用性、稳定性、安全性等纬度进行对比。一个刚创立的公司,可能最需要的是一个能快速上线的系统,这个系统应该尽量简单,成本足够小,更看重复杂度和成本。对于一个成熟的大公司,如BAT,可能要求的是高可用,高性能,大公司有的是资源,成本所占权重较小。对于银行来说安全更加重要,因为每一步操作都可能涉及金钱交易。选择哪个方案不是因为方案优的个数越多,也不是因为哪个方案技术更牛,也不是因为哪个方案我们更熟悉,更不是因为领导觉得哪个更好,最重要的是结合实际情况,选择最合适的。
详细方案设计,一旦选好方案,比如说要进行分库分表,分几个库,分多少张表,怎么分,怎么路由,是范围路由还是Hash路由,以后怎么扩展等等一系列的问题都要想清楚和设计好。
架构设计流程是一种方法,不只是适用于做架构设计,也同样适用于那些对自己影响较大又比较困难做决策的场景。比如最近同事讨论小孩上哪个幼儿园的问题,可以使用这个流程,列出多个幼儿园作为备选方案,然后对方案进行距离、学费、师资力量、升学率等多维度对比,选择一个最合适的方案,然后对这个方案进行细化,小朋友怎么去学校,怎么帮小朋友适应新环境等等。朋友最近在面临新工作选择,也可以使用这个方法,拿到的offer就是备选方案,然后对每种方案从薪资待遇、公司规模、对职业规划的影响程度、公司发展前景、公司距离等方面,根据自身情况对某个属性进行相应的加权,选择一个最合适的方案,选择好后需要详细设计方案,怎么去公司、怎么去适应新环境(同事相处、新的业务)等。不是有了这把锤子就能解决所有的问题,毕竟不是万能的,如果点个外卖、买件衣服都使用这个方法,那不是解决问题,而是带来新的问题。
学习架构设计流程的方法论,让手中多一把锤子,但不是所有的问题都是钉子,只能作为一种补充,面对问题的时候多一种选择。