设计思想

设计思想

执今之道,御今之有

世界是复杂的,有生命的,时时刻刻都在变化运动着,每时每刻都有旧的事物消失、新的事物诞生。任何旧的系统架构都无法直接应用在新的部件上,任何旧的理论也无法直接解释新产生的事物,架构和理论需要随着实践的发展而发展,需要不停地追赶不断运动变化着的物质现实。因此,没有提前设计好的、完美的、放之四海皆准的终极系统,只有在一定的现实条件之下相对可用的系统,并且这种系统也需要随着现实情况的变化,而调整乃至于重构其自身。所以,整个系统不能看成是绝对稳定的,系统的架构会随着各种各样内外部条件的变化而不断演进,其总有着发生变化的趋势。由此可见,系统的结构不仅仅源自于人为的刻意设计,而且还要受到各种因素的影响。这其中包括业务需求、软硬件性能、人员专业能力等技术性因素,还包括人事、经济、政策等非技术性因素。简而言之就是,系统架构并非是一开始就人为设计好的,而是各种因素综合作用的结果,并且其还会随着现实情况的变化而不断演进。

积极实践,逐步认识

要想获得对事物的认识,就必须先进行实践,因为知识只能从实践中产生。当遇到一个难以解决的问题时,自己应当先去调查这个问题的现状与历史,而不是仅仅局限于现有的知识范围。并且,调查不能只停留于书本之上,还应在现实中进行实际的调查。当问题的各方面都调查清楚了的时候,解决问题的思路也就有了。

构建系统也是如此,当自己完全不知道该如何构建合适的系统时,就应该先去了解和学习他人已经构建好的系统。然后,自己尝试着构建一个与现有系统相似的系统。自己最开始构建的系统,大概率会有各种各样的问题,有时还会崩溃,甚至于某些功能都未能实现。但这只是整个系统构建过程的其中一个环节,自己每重复一次这个过程就更多一分对系统的理解,系统也因此变得更加完善。一直重复此过程,直到系统已经初具规模,自己对系统也有了足够认识的时候,便可以开始着手构建符合自身需求的系统了。先通过实践来进行认识,然后再通过实践来验证和发展这一认识,而后又根据这一经过验证和发展的认识来指导进一步的实践。每经过一个实践与认识的循环,这两者就更进一步的得到了发展。

流水不腐,户枢不蠹

由于物质现实是变化运动的,所以,不能去预设系统的每个部分都是可靠的、静止的,而是要在每个部件都有可能出现问题的前提下去设计系统。即使某些部件使用了及其不稳定的代码,有严重的内存泄漏问题,每隔几分钟就会崩溃一次,但在整体系统设计得当、关键部件高可用、有自动化错误熔断和重建机制的依托下,在外部看来,系统整体仍然呈现出健壮和稳定的服务能力。

这也是控制论的重要方法之一,对于内部结构不断变化且不可预知的黑箱系统,根据其输出端的实际输出与理论值的差别,而不停地调整输入端的输入,使得其能在动态平衡中保持正常运行。亦即,通过负反馈循环让不稳定的系统时时刻刻调整其自身的状态,从而在运动中达到相对平衡。

自主可控,降本增效

自主可控的优点主要有两个:抗风险和低成本。

之所以自主可控能抗风险,一是因为系统的关键部分与外部隔离,在外部发生故障时,可通过更换第三方备选方案,来减少其对内部系统产生的影响,使得系统能更快地恢复运行。二是因为当系统自主可控时,他人无法从技术上威胁自己的核心利益,使得自己在与他人博弈时能获得一定的力量优势,从而消除某些可能会发生在外部的人为风险。

至于低成本也是得益于此,使他人在与自己博弈时没有决定性的优势。由于自己的核心部件自主可控,不依赖绑定某一厂商,有多种可替代方案。所以可在购买时选择更低价的产品,在议价时获得更大的谈判空间。在许多时候,产品的定价取决于交易双方的力量对比。当自身购买量足够多,且能随时选择其他替代方案时,产品的价格往往会变得极其低廉。

伸缩自如,扩展随意

为了适应时刻都有可能进行调整的系统架构,所以就要求系统中的部件也应是可变的,此种可变不仅表现为单个部件可支配资源的升降,还表现为多个相同部件数量的增减。于是在这种需求之下,人们将具体的、孤立的、有差异的单个资源,抽象为逻辑上的、统一调度的资源池。这使得人们能更加便捷的调整不同部件间的资源分配。

在面对系统架构变化时,除了要考虑物理配置与部件数量等资源上的增减,还应考虑与之配套的功能上的增减。如果系统的功能复杂,但其所拥有的资源有限,此时系统会变得不稳定、抗风险能力差,任何局部的突发事件都可能威胁整体的系统安全。反之,如果系统的功能简单,但其拥有的资源却又过剩,此时就会造成资源浪费、成本上升。总的来说就是,系统具有的功能要适应其所拥有的资源。当然,这只是单纯的基于技术性的考量之下所得出的结论。不过,如果将此处的资源理解为,影响系统的一切因素的话,以上结论依然成立。

物尽其用,按需选择

应根据实际需求来选择系统的部件。对于超过了设计使用年限的部件,如果其在实测时各方面的性能依然表现良好,能满足实际需求,那么就可以继续使用。类似的,对于系统中性能要求较高的部分,也应当使用性能较高的部件,对于需要稳定运行的部分,则应使用中规中矩最不容易出问题的部件。总而言之就是按需选择部件。

这里所说的“需”,不仅仅只是内部的、技术性的需求,还有外部的、非技术性的需求。比如,当需要迅速抢占市场,快速推出产品时,就应尽量简化架构,并选择易于快速上线的部件。此时,对于系统中存在的各种缺陷,可以选择性的进行临时处理或者直接忽略。又比如,当业务的总体利润远远高于其成本时,则应当选择在各方面都具有较高品质的部件。

分辨主次,逐个解决

在进行系统搭建的过程中会遇见各种各样的问题,这里列举一些搭建计算机系统时可能会遇到的问题,例如,硬件不兼容、内存条不识别、硬盘坏道、BIOS设置错误导致黑屏、设备温度或功耗过高降频等硬件问题。以及,驱动不识别硬件、软件源未加速、环境依赖安装失败、程序异常卡死崩溃、网络环境配置错误等软件问题。

面对这种种问题,首先要做的是分清主要问题和次要问题,先解决主要问题以实现在最小范围内的正确可用,然后再着手解决其他的问题。当主要问题在一定程度上得到了解决的时候,主要问题便不再是主要的问题,而是成为了次要的问题,取而代之的是其他次要问题中最主要的方面,这一过程就是主次矛盾相互转化的过程。在软件开发行业也有一个与之相符的经验总结:“先让它能用,再让它正确,最后让它快速。”

随着问题的解决、矛盾的转化,系统的特性也相应发生着变化,这一变化过程就是系统的演化过程。系统正是通过这种变化确立了其自身的存在。

思想来源:

实践论矛盾论

控制论与科学方法论

凤凰架构 - 构建可靠的大型分布式系统