C++ 全栈知识体系C++ 全栈知识体系
✿导航
  • 基础
  • 函数
  • 知识点
  • IO框架
  • 新版本特性
  • 数据库原理
  • SQL语言
  • SQL - MySQL
  • NoSQL - Redis
  • NoSQL - ElasticSearch
  • 算法基础
  • 常见算法
  • 领域算法
  • 分布式算法
  • 数据结构与算法
  • 计算机网络
  • 操作系统
  • 计算机组成
  • 开发
  • 测试
  • 架构基础
  • 分布式系统
  • 微服务
  • 中间件
  • 概念
  • 理论
  • 架构设计原则
  • 设计模式
  • 协议
  • 技术选型
  • 编码规范
  • 流水线构建 - CI/CD
  • 知识点 - Linux
  • 网站 - Nginx
  • 容器化 - Docker
  • 容器编排 - Kubernetes
  • 服务网格 - Service Mesh Istio
  • 常用快捷键 - Shortcut
  • 工具使用 - Tools
  • 开源项目
  • 学习项目
  • 个人项目
  • 项目开发
  • 项目Idea
  • 并发
  • 部署
  • 分布式
  • 知识
  • 问题
  • 编程语言与技术
  • 系统与架构
  • 软件开发实践
  • 数据处理与应用设计
  • 个人
  • 产品
  • 团队
  • 知识体系
  • Vue
关于
✿导航
  • 基础
  • 函数
  • 知识点
  • IO框架
  • 新版本特性
  • 数据库原理
  • SQL语言
  • SQL - MySQL
  • NoSQL - Redis
  • NoSQL - ElasticSearch
  • 算法基础
  • 常见算法
  • 领域算法
  • 分布式算法
  • 数据结构与算法
  • 计算机网络
  • 操作系统
  • 计算机组成
  • 开发
  • 测试
  • 架构基础
  • 分布式系统
  • 微服务
  • 中间件
  • 概念
  • 理论
  • 架构设计原则
  • 设计模式
  • 协议
  • 技术选型
  • 编码规范
  • 流水线构建 - CI/CD
  • 知识点 - Linux
  • 网站 - Nginx
  • 容器化 - Docker
  • 容器编排 - Kubernetes
  • 服务网格 - Service Mesh Istio
  • 常用快捷键 - Shortcut
  • 工具使用 - Tools
  • 开源项目
  • 学习项目
  • 个人项目
  • 项目开发
  • 项目Idea
  • 并发
  • 部署
  • 分布式
  • 知识
  • 问题
  • 编程语言与技术
  • 系统与架构
  • 软件开发实践
  • 数据处理与应用设计
  • 个人
  • 产品
  • 团队
  • 知识体系
  • Vue
关于
  • 概念

    • 概念 - 概述
    • 概念 - 计算机专有名词
    • 概念 - 正向代理和反向代理
    • 概念 - 云网络
    • 概念 - rest api
    • 概念 - 脑裂
  • 理论

    • 事务理论 - ACID
    • 分布式理论 - CAP
    • 分布式理论 - BASE
  • 架构设计原则

    • 架构设计原则 - 合适、简单、演化
    • 架构设计原则 - 高内聚、低耦合
    • 架构设计原则 - 正交四原则
    • 架构设计原则 - SOLID详解
    • 架构设计原则 - 分层架构MVC
    • 架构设计原则 - DDD领域驱动设计:贫血模型和充血模型
    • 架构设计原则 - DDD领域驱动设计
  • 设计模式

    • 创建型模式 - Create model

      • 创建型模式 - 单例模式(Singleton)
      • 创建型模式 - 工厂模式(Factory)
      • 创建型模式 - 抽象工厂(Abstract Factory)
      • 创建型模式 - 生成器(Builder)
      • 创建型模式 - 原型模式(Prototype)
    • 结构型模式 - Structural model

      • 结构型模式 - 外观(Facade)
      • 结构型模式 - 适配器(Adapter)
      • 结构型模式 - 桥接(Bridge)
      • 结构型模式 - 组合(Composite)
      • 结构型模式 - 装饰(Decorator)
      • 结构型模式 - 享元(Flyweight)
      • 结构型模式 - 代理(Proxy)
    • 行为型模式 - Behavioral model

      • 行为型模式 - 责任链(Chain Of Responsibility)
      • 行为型模式 - 策略(Strategy)
      • 行为型模式 - 模板模式(Template)
      • 行为型模式 - 命令模式(Command)
      • 行为型模式 - 观察者(Observer)
      • 行为型模式 - 访问者(Visitor)
      • 行为型模式 - 状态(State)
      • 行为型模式 - 解释器(Interpreter)
      • 行为型模式 - 迭代器(Iterator)
      • 行为型模式 - 中介者(Mediator)
      • 行为型模式 - 备忘录(Memento)
  • 协议

    • 协议 - Http
    • 协议 - SNMP
    • 协议 - NETCONF
    • 协议 - TLS和SSL
    • 协议 - Http-wiki
    • 协议 - TCP/IP
    • 协议 - Https常见的认证模式
  • 技术选型

    • 技术选型 - 常用的技术框架
    • 技术选型 - 如何写一个自己的项目
    • 技术选型 - 基于drogon实现用户中心后端
  • 编码规范

    • 编码规范 - Google C++ Style Guide
    • 编码规范 - 编程风格
    • 编码规范 - 头文件包含规范
    • 编码规范 - 常用编码命名规则
    • 编码规范 - 编码命名规范

架构设计原则 - 合适、简单、演化

    合适原则

    合适优于业界领先

    现在互联网时代,技术的迭代非常快。很多架构师在设计架构的时候的希望用最新的技术来进行设计,以期望达到更好的效果。

    但是,最新的技术往往不是最优的选择,哪怕新技术的效果很卓越(例如,谷歌,阿里,腾讯等企业的一些设计方案和技术)。对于大公司而言,很多时候效率和用户体验是第一位,用户量级也是亿级为单位,不得不自主研发内部的系统、架构和中间件,而且需要长期维护和更新。而这些对公司来说,都需要消耗时间、人力和金钱,小公司的话应该优先考虑使用现成成熟的技术,而不是什么模块都自主研发。

    对于架构师而言,不是一定要设计出最牛逼的架构,而是要结合当前环境,公司成本,业务场景等因素设计出最合适最合理的架构方案。基于这种考虑,选择不那么新,但是系统稳定,社区活跃,文档丰富的技术来进行架构设计显然要合适合理得多。

    简单原则

    简单优于复杂

    软件领域的复杂性体现在两个方面:

    1. 结构的复杂性

    结构复杂的系统几乎毫无例外具备两个特点:

    • 组成复杂系统的组件数量更多;
      • 组件越多,越有可能某个组件出现故障,从而导致系统故障。
        • 例如,组件的故障率为10%,三个组件系统的可靠性为(1-10%)^3=72.9%,而五个组件系统的可靠性为(1-10%)^5=59%,性能相差13%
    • 同时这些组件之间的关系也更加复杂。
      • 某个组件改动,会影响关联的所有组件,这些被影响的组件同样会继续递归影响更多的组件
      • 定位复杂系统问题比简单系统困难得多。
    1. 逻辑的复杂性
      • 意识到结构的复杂性后,第一反应可能就是“降低组件数量”,毕竟组件数量越少,系统结构越简。最简单的结构当然就是整个系统只有一个组件,即系统本身,所有的功能和逻辑都在这一个组件中实现。

    架构师的视角:在能够实现功能要求的条件下,采用更高效更低成本得解决问题。

    对于架构而言,是“房屋的框架”,开发都是基于架构设计开发的。架构复杂度每增加1分,开发的复杂度可能就会增加10分,对了,开发完成后还需要考虑运维的成本。所以架构设计在满足高可用、高性能、高扩展等等的前提下,一定要尽量简单。

    演化原则

    演化优于一步到位

    对于建筑来说,永恒是主题;而对于软件来说,变化才是主题

    这个原则不只是适用于架构设计,还适用于产品设计。

    再厉害的架构师或者产品经理都不可能一步登天,一下子就设计出完美的架构和产品。而事实上,优秀的架构和产品都是一步一步迭代出来的。比如:每天使用的微信,微信2011年推出至今,已经十年了,但是在十年前推出的微信和现在的微信天差地别,因为微信这十年一直在根据用户的使用情况和市场的发展等因素做着更新迭代,以满足用户使用。

    而且产品的不断迭代更加说明了产品活跃的生命力。如果产品不迭代了,那么在这高速发展的社会下,将很快就会被淘汰掉。

    产品如此,架构设计也一样,架构设计也需要根据技术的发展,用户量的增大,业务的扩展进行不断地迭代升级,最终演化成优秀的架构。

    Last Updated:
    Contributors: klc407073648
    Next
    架构设计原则 - 高内聚、低耦合