架构基础(三):架构原则,架构设计需要注意哪些问题?

一.设计原则

 架构设计我我们平时写代码不一样,两者的差异主要体现在“不确定性”上。对于编程来说,本质上是确定的,对于同样一段代码,不管是谁写的,不管什么时候执行,执行的结果应该都是确定的;而对于架构设计来说,本质上是不确定,并没有像编程语言那样的语法来进行约束,更多的时候是面对多种可能性时进行选择
 示例:

  • 是要选择业界最先进的技术,还是选择团队目前最熟悉的技术?
  • 是要选 MySQL 还是 MongoDB?团队对 MySQL 很熟悉,但是 MongoDB 更加适合业务场景?
  • 淘宝的电商网站架构很完善,我们新做一个电商网站,是否简单地照搬淘宝就可以了?

1.合适原则

合适优于业界领先。

 在进行架构设计的同时,需要考虑自身业务,而不是一味的去参照业界顶尖的规模,如:QQ、微信、淘宝架构。真正优秀的架构都是在企业当前人力、条件、业务等各种约束下设计出来的,能够合理地将资源整合在一起并发挥出最大功效,并且能够快速落地。

2.简单原则

简单优于复杂。

 软件架构设计是一门技术活,当我们进行架构设计时,会自然而然地想把架构做精美、做复杂,这样才能体现我们的技术实力,也才能够将架构做成一件艺术品。然而,“复杂”在制造领域代表先进,在建筑领域代表领先,但在软件领域,却恰恰相反,代表的是“问题”。

 软件复杂度的体现,主要有以下两个方面:

  • 结构的复杂性
    – 组成复杂系统的组件数量更多;
    – 组件之间的关系也更加复杂。

其问题主要有:
(1)组件越多,就越有可能其中某个组件出现故障,从而导致系统故障。
(2)某个组件改动,会影响关联的所有组件。
(3)定位一个复杂系统中的问题总是比简单系统更加困难。

  • 逻辑的复杂性

逻辑的复杂性来源于一个组件集中了太多的功能,修改协作困难;并且,其中某些业务还可能使用了一些复杂的算法,导致难以理解、修改困难。

 一个组件集中了太多功能,就会表现出一些逻辑复杂性的特征,为了解决这个问题,一般的手段是进行组件的拆分,但随着组件的细化,又会引入结构复杂性的一些特征,所以,在做结构设计的时候,需要权衡这两者。

3.演化原则

演化优于一步到位。

 维基百科对“软件架构”的定义如下:

从和目的、主题、材料和结构的联系上来说,软件架构可以和建筑物的架构相比拟。

 这个定义中,将建筑和软件架构做了一个比较,但是,两者之间是有一个本质区别的:对于建筑来说,永恒是主题;而对于软件来说,变化才是主题。
 也就是说,软件架构的本质是:软件架构需要根据业务发展不断变化,所以,我们在做软件架构设计的时候,不要试图一步到位设计一个软件架构,期望不管业务如何变化,架构都稳如磐石。


 架构设计的过程基本上可以总结为下面三个历程:

  • 首先,设计出来的架构要满足当时的业务需要。
  • 其次,架构要不断地在实际应用过程中迭代,保留优秀的设计,修复有缺陷的设计,改正错误的设计,去掉无用的设计,使得架构逐渐完善。-- 小重构
  • 最后,当业务发生变化时,架构要扩展、重构,甚至重写;代码也许会重写,但有价值的经验、教训、逻辑、设计等(类似生物体内的基因)却可以在新架构中延续。-- 大重构
     我们在做架构设计的时候,切勿贪大求全,或者盲目的照搬大公司的做法,而是要牢记软件架构的本质(软件架构需要根据业务发展不断变化)。认真分析当前业务的特点,明确业务面临的主要问题,设计合理的架构,快速落地以满足业务需要,然后在运行过程中不断完善架构,不断随着业务演化架构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值