当前位置: 首页 > article >正文

【系统设计】俭约架构七大法则

目录

    • 简约架构(Frugal Architecture)
    • 设计阶段(DESIGN)
      • 法则一:将成本作为一种非功能性需求
      • 法则二:达成最终成本与业务保持一致的系统
      • 法则三:架构设计就是一系列权衡
    • 测量阶段(MEASURE)
      • 法则四:无法观测的系统导致无法估量的成本
      • 法则五:依托成本感知架构实现成本控制
    • 观察阶段(OBSERVE)
      • 法则六:成本优化是个渐进的过程
      • 法则七:没经挑战的成功会让人想当然
    • 阅读原文

简约架构(Frugal Architecture)

在亚马逊 CTO Werner Vogels 在向企业传达了一条信息:在做架构时,必须要考虑成本。当不考虑成本时,可以做很棒的创新,经济是会改变的,成本效益才是王道。在所描述的**[[简约架构]]** 中,分为三阶段七条法则。

俭约架构法则(The Laws of Frugal Architecture)

Simple laws for building cost-aware, sustainable, and modern architectures.

设计阶段(DESIGN)

法则一:将成本作为一种非功能性需求

Make Cost a Non-functional Requirement.

在系统设计和实现时,除了非功能需求外,还需要考虑到各种非功能需求,常见的就是性能(响应时长、QPS等)、稳定性(可靠性、可用性等)和安全性。在简约架构中,成本也是必须考虑的内容了。成本就是利润

法则二:达成最终成本与业务保持一致的系统

Systems that Last Align Cost to Business.
The durability of a system depends on how well its costs are aligned to the business model.

不赚钱的业务时很难生存的,如果是由于不考虑系统成本而造成业务不赚钱,那就更冤了。这条法则期望最终完成的系统是成本与业务保持一致的,既很好的支撑了业务,有没有浪费成本。所以,收起那些屎上雕花的手段吧

法则三:架构设计就是一系列权衡

Architecting is a Series of Trade-offs.

这条应该是架构的基础准则之一了,没有万能的方案,也没有黄金标准,只有基于场景的选择。在各个互相冲突的功能需求和非功能需求间、技术需求和业务需求间,如何
找到“甜蜜点”(sweet spot) 至关重要,这一点非常考验架构师的水平,也有一点考验运气。

测量阶段(MEASURE)

法则四:无法观测的系统导致无法估量的成本

Unobserved Systems Lead to Unknown Cost.

如果系统无法观测,那么对系统的真实情况就是一无所知。成本估量也就是未知数。构建观察能力需要成本,但节约这部分成本是非常短视的。可靠的观测才有可持续的发展

法则五:依托成本感知架构实现成本控制

Cost Aware Architectures Implement Cost Controls.

可观测的系统才能优化成本。设计良好的系统可以保持持续演进和持续优化。根据关键性程度(criticality)将组件分层:必须、重要、有了更好(nice-to-have)。

观察阶段(OBSERVE)

法则六:成本优化是个渐进的过程

Cost Optimization is Incremental.

既然简约架构将成本放在了重要位置,那么成本优化就是必须做的工作之一了。但罗马不是一天建成的,技术的进步、基础成本的下降等都会成为成本优化的因素,关键是要保持成本优化的思想,并持续观察和优化。

法则七:没经挑战的成功会让人想当然

Unchallenged Success Leads to Assumptions.

一直做得事情并不一定是正确的事情,可能仅仅是因为巧合。由于过去的成功而认为过去的方法、技术、语言、架构等都是绝对正确的,可能就为眼下和未来埋下了危险的种子了。需要时刻以怀疑的心态来寻找方法,从而发现系统中的优化点并保持改进。

阅读原文

除了法则名称,其余部分都是个人感想,并非翻译原文。愿意阅读原文的点击下面地址进入。
原文点这里


http://www.kler.cn/a/430350.html

相关文章:

  • 什么是 Merkle 树
  • Redis探秘Sentinel(哨兵模式)
  • 讲讲什么是 JSX ?
  • Linux Ubuntu 安装配置RabbitMQ,springboot使用RabbitMQ
  • 链式设计模式总结
  • 【游戏设计】游戏中复活点系统类型总结
  • SSM虾米音乐项目2--分页查询
  • Python Web 应用:FastAPI 与 SQLAlchemy ORM
  • 单词拼写纠正-03-72.力扣编辑距离 leetcode edit-distance
  • RISC-V架构下OP-TEE 安全系统实践
  • Python 爬虫 (1)基础 | XHR
  • ruoyi-nbcio为安全起见actuator为仅暴露health端点
  • 数据仓库实验二 实现警务数据仓库OLAP应用
  • 五天SpringCloud计划——DAY3之服务治理(Nacos+OpenFeign+OKHttp)
  • ubuntu16.04部署dify教程
  • 算法-字符串-165.比较版本号
  • 【UBOOT】【run_main_loop】uboot 启动 linux 内核
  • 使用javascript+canvas显示二叉树
  • DedeCMS最新注入漏洞(CNVD-2024-44514、CVE-2024-9076)
  • 怎么为开源项目做贡献提PR?