美文网首页菜鸟技术的进阶
如何降低系统复杂度

如何降低系统复杂度

作者: 奔跑的newbee | 来源:发表于2021-07-24 23:28 被阅读0次

定义

首先我们对复杂的系统下一个定义,复杂度越高的系统就是越混乱越难以维护的系统。同样复杂度是一个相对的概念,当系统中元素非常少时,想降低复杂度是十分简单的,而当一个系统本身元素及场景就非常多且复杂时,降低复杂度才是我们的挑战所在。
物理学中有熵增定律:一个系统处于孤立状态下,没有外力介入时,最终将达到熵的最大状态,即最混乱无序的状态。
这个定律适用于所有的物理学系统,而同样也适用于计算机软件系统。
我见到过很多系统,没有设计规范约束,没有发展方向指引,代码没有质量把关。 逐步就会发展为不可维护的状态,而后期维护的人对此怨声载道,却又无能为力,只能在一堆垃圾代码上面继续叠加垃圾。此时系统的熵无疑已经到了非常大的状态,即是非常混乱的状态。

方法

千呼万唤始出来,我们到底要如何降低系统的复杂度呢?本质思想如上所述,需要加入外力的干预,最好是强力的干预。而这个外力我认为就是架构设计思想和架构解耦工具。

从整体设计角度

1.架构分层

我认为分层几乎是系统设计中最重要的思想,可以参考计算机网络协议和计算机缓存设计等。

2.领域拆分

良好的领域拆分需要依赖系统设计人员对系统应用场景的深刻理解。且具备很好的抽象能力。

3.服务聚合

同拆分一样,找到同类的功能进行聚合,也是需要对场景的理解,且需要不断优化和尝试。

4.高度自治

系统拆分与聚合清晰后,需要独立模块有高度自治的能力。对外定义控制输入和输出协议,对内实现独立且明确的能力。

5.链路简单清晰

系统链路一定要简化,尤其系统核心链路。简单意味着好理解、易维护、稳定性强、容易扩展。

解耦工具-主要指常用的代码设计方法

1.事件消息机制
2.策略、责任链等设计模式
3.规则引擎
4.状态机
5.DDD 模式
6.流程拆分与编排

最后

最后,还是借用鲁迅的话,要设计一个理论上最优的架构并不难,难的是设计一个各种条件牵制下的一个“正正好好”的架构。
复杂度问题也是一样,当外力过度干涉,复杂的设计过多时,会让系统的开发人员难以理解和上手。学习成本和维护成本可能同样会很高。

相关文章

  • 如何降低系统复杂度

    定义 首先我们对复杂的系统下一个定义,复杂度越高的系统就是越混乱越难以维护的系统。同样复杂度是一个相对的概念,当系...

  • 前端好文章

    1.如何无痛降低 if else 面条代码复杂度

  • 什么时候用

    系统复杂度和微服务实时对效率的影响: 系统初期采用微服务反而会降低生产效率,随着系统复杂度的提升,微服务对生产效率...

  • 实用拜占庭容错算法

    实用拜占庭容错系统(PBFT)降低了拜占庭协议的运行复杂度,从指数级别降低到多项式级别(Polynomial),使...

  • [读书笔记]阅读小记

    如何无痛降低 if else 面条代码复杂度 if...if型痛点:复杂度指数型增长(详见原文)解决方法:将每个i...

  • 浅谈 Code Review 之事前准备

    随着业务规模扩大、团队组成变复杂,如何降低项目实施风险,降低软件复杂度变得尤为关键。 我从 Martin Flow...

  • MQ-面试

    目的 解耦、异步、削峰 问题 系统可用性降低,增加了mq环节,mq挂掉导致整个系统挂掉 系统复杂度提高,需要针对m...

  • 产生消息

    优点:解耦,削峰、数据分发 缺点:系统可用性降低(mq高可用)、系统复杂度提高(消息丢失、消息顺序、保证没有重复消...

  • 99. 恢复二叉搜索树

    使用morris遍历降低时间复杂度

  • 2019-10-30

    MQ MQ 优势 劣势 1.系统可用性降低 2.系统的复杂度提高 3.一致性 常见的MQ的产品:RabbitMQ,...

网友评论

    本文标题:如何降低系统复杂度

    本文链接:https://www.haomeiwen.com/subject/hktbmltx.html