关于系统架构设计的心得(一)

一.概述

关于系统的架构设计,其实有很多内容,要想设计出足够灵活的软件系统,确实不是一件容易的事情,特别是面对我们日新月异的业务,业务的变动完全可以推翻你之前所做的所有设计,如何在复杂的业务中剥离出一些固定的规律,这大概就是系统架构的主要目的了。要想做好系统架构,你需要对业务有一个宏观层面的认识和理解,需要把你所面对的业务模块化,结构化,然后再针对每个模块每个结构进行详细的设计。当然这些模块的划分以及抽象,也需要你有一定的经验。

下面从模块划分,模型,关系,以及系统交互层面写写自己在设计方面的心得体会。

二.模块划分

模块的划分,是系统架构的首先要考虑的问题,我们当前的系统有那些模块,首先我们要考虑的是一个核心模块,我们需要对我们的业务作出一个高度的抽象,把一些共性的东西抽取出来,形成我们的核心系统模块,也就是我们的系统内核,基于系统内核,我们再抽象出一些个性化模块支持差异化的业务,但是核心模块在整个业务发证过程中应该保持不变,或者只需要微调就可以了。话虽这么说,但是达到这个目的并不是很容易,需要你有全局观才能保持内核模块的健壮和鲁棒。
其实做的好的话,你的内核模块是用来驱动你的差异化模块的,执行到某个核心的动作的时候,可以路由到具体的差异化模块中去执行。

三.模型

模型,非常重要,一个模型的设计决定了系统的能够支持的功能,如果模型设计的非常灵活,那么系统能支持的功能也就非常多。所以在设计模型的时候要仔细斟酌,模型中的每一个字段都要思考。看看那些东西是必须的,那些东西是毫无规律的,必须的并且毫无规律的东西都需要在模型中体现出来。那些有规律的可以通过配置来解决,有些场景必须有些场景不是必须的可以通过差异化存储来解决,差异化存储就是通过一个JSON字符串来存储,这是我目前经常使用的手段,而且在很多时候都非常有效。

四.关系

关系,也就是模型和模型之间的关系,一对多,多对多等等,模型梳理出来后,模型之间的关系其实显而易见。如果你的模型和模型之间的关系非常复杂,那就说明你梳理出来的模型是不合理的,我们之所以做设计,一个根本的目的就是把复杂的事情简单化,而不是把复杂的事情复杂化,把一个PD看来很复杂的业务做成一个开发看来很复杂的系统。

五.系统交互

关于系统交互,对于外部的系统,尽量先落库再处理。
①先落库,马上去处理,处理完后更新数据,这个是资金操作时需要考虑的一个原则。
②先落库,然后异步处理,直到处理成功或者处理一定次数后挂起,这也是一个简单但是非常重要的原则,因为你可以保证自身系统的稳定性,但是你无法要求你依赖的系统和你一样稳定。
③重要的操作,不要直接通过消息来交互,虽然消息解耦并且异步,但是你承受不起丢消息给你带来的排查和修复所浪费的时间成本。