本文主要小结一下系统设计当中的trade-off

trade-off

trade-off翻译过来大致是折中的意思,也就是说系统设计通常牵扯的点比较多,有的设计方案这个方面比较好,但是又有其他缺点,没有十全十美的方案,只是在特定的上下文,特定的约束条件下,权衡选取比较合适的方案。但是一旦这个上下文或约束条件随着业务变化,基础设施变化等等,原来的折中的方案可能也就不合适了。于是就需要重新架构。

常见的trade-off

  • 缓存

以空间换取时间,牺牲内存来加快读取速度,但同时也带来一致性维护问题

  • 数据库三范式

以时间换取空间,数据库的范式设计,有些表仅仅有主键,但是业务查询经常需要带上姓名等其他字段,这个时候就得在展示层去根据用户id再去获取用户姓名去组装数据,在持久层保持了一致性,但是对于展示层来说得额外再去关联表或查询姓名,牺牲了时间。

  • CAP

比如nosql大多是选择以AP为主,牺牲C

  • 微服务

将单体架构拆分为微服务,则在部署成本上可能比单体架构要多一些,但是带来的是服务的拆分隔离之后的相对稳定性和可维护性,但是同时也可能带来诸多一致性问题。

  • 高级语言vs汇编语言

高级语言比汇编语言更容易让人掌握,但是最后还是要转为机器懂的0和1,相比汇编是牺牲了性能,但是带来的是可维护性。

  • bean vs map

java bean比map的好处是里头的属性类型确定,不像map是个黑盒,每次用数据都得根据key去换取,然后强转,无形之中就给编码带来很多坑,提醒了易错性,但是map的好处是通用;bean就是相对不如map那么万能,但是由于每个属性确定,用的时候直接调用getter去获取,也不用类型强转,有多少属性也很明了,提升了编程的可靠性,但是坏处就是不通用。

小结

本文只是粗略列举了一些trade-off,其他的还有待后续进一步提炼。

doc

  • Software Design Tradeoff Factors

[case3]聊聊系统设计中的trade-off相关推荐

  1. 异步通信在生活中的例子_聊聊工作中经常遇到的“异步”,你掌握了多少

    在我们编程的时候,经常会遇到一个概念--异步,诸如异步通信,异步线程,异步代码,异步调用,异步编程等等,那么 什么是异步呢? 为什么要异步? 异步的典型场景是什么? 如何使用异步呢? ...... 异 ...

  2. 聊聊 Linux 中的五种 IO 模型

    聊聊 Linux 中的五种 IO 模型 2016/04/21 · IT技术 · 8 评论 · iO, 同步, 异步, 阻塞, 非阻塞 分享到:0 本文作者: 伯乐在线 - 陶邦仁 .未经作者许可,禁止 ...

  3. java怎么解决重复支付问题_支付系统设计中,如何防止重复支付?

    wallet-2292428_1280.jpg 在我们支付系统设计中,经常会遇到这样一个问题,防止用户重复支付.用户明明只想购买一次,却因为系统问题,导致重复支付,带来额外的物流成本和扯皮退货的运营成 ...

  4. pypypy python_聊聊Python中的pypy

    PyPy是一个虚拟机项目,主要分为两部分:一个Python的实现和 一个编译器 PyPy的第一部分: 用Python实现的Python 其实这么说并不准确,准确得说应该是用rPython实现的Pyth ...

  5. vue 中provide的用法_聊聊Vue中provide/inject的应用详解

    众所周知,在组件式开发中,最大的痛点就在于组件之间的通信.在 Vue 中,Vue 提供了各种各样的组件通信方式,从基础的 props/$emit 到用于兄弟组件通信的 EventBus,再到用于全局数 ...

  6. java中什么是 伪共享_【Java】聊聊多线程中的伪共享现象

    首页 专栏 java 文章详情 0 聊聊多线程中的伪共享现象 小强大人发布于 1 月 27 日 什么是伪共享? 讲伪共享之前,让我们先乘坐时光机,回到大学课堂,来重温下计算机组成原理的基础知识.我们知 ...

  7. HTML文本下划线效果,聊聊CSS中文本下划线_CSS, SVG, masking, clip-path, 会员专栏, text-decoration 教程_W3cplus...

    在Web中给文本添加下划线常常出现在链接的文本上,早期一般使用text-decoration属性给文本添加下划线.删除线等.除了text-decoration之外,CSS还有很多技术方案可以给文本添加 ...

  8. axios 超时_聊聊 Vue 中 axios 的封装

    axios 是 Vue 官方推荐的一个 HTTP 库,用 axios 官方简介来介绍它,就是: Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中. 作为一 ...

  9. 秒杀系统设计中的业务性思考

    秒杀不是一个新鲜事物,特别是过去几年电商和互金业务的蓬勃发展,各种电商节的兴起,促使秒杀已经变成了非常重要的业务功能.我这几年也没少和"秒杀"打交道,和团队共同经历了各种挣扎后,积 ...

最新文章

  1. Java过滤器与SpringMVC拦截器之间的关系与区别
  2. pycharm 远程调试
  3. 计算机操作系统:处理机的调度
  4. 华为数据之道_华为规划的数字世界是什么样子的?
  5. k中心点聚类算法伪代码_聚类算法之——K-Means、Canopy、Mini Batch K-Means
  6. python for loop步进值_python-对for循环的结果进行排序时保持值连...
  7. react-native run-android的输出
  8. 电脑配置多个git账号
  9. 西电计算机学院导师苗启广,Xidian Media Lab
  10. 蹭B站源码泄露的热点来聊聊B站有趣的源码片段
  11. 方方格子授权码_助力上分!灌篮高手正版授权手游礼包码攻略及防守技巧汇总...
  12. U盘PE启动盘制作好后,如何进入PE系统?
  13. php处理excel图表,php导入excel的图片
  14. BZOJ3161: 孤舟蓑笠翁
  15. vscode 的setting.json的配置
  16. vue的jsx写法记录
  17. 使用idea构建父子类springboot项目教程,并教你启动子项目(构建项目集合)
  18. (七)VBS变量、数组使用
  19. python借助jieba包对单独test和txt文档进行中文分词
  20. 如何获取sha1值和MD5值

热门文章

  1. python 的 pointcloud 计算探路
  2. 原创 【我的OpenGL学习进阶之旅】介绍一下OpenGL ES的 遮挡查询
  3. Matlab使用Camera Calibrator工具箱标定相机
  4. 名智新系统的调试方法(转)
  5. 【移动网络】Ch. 2 移动网络基本原理 (Part1. 无线信道与数据率)
  6. saltstack自动化运维部署--安装apache\原码安装nginx服务
  7. oracle where 后面的条件中|| 是什么意思
  8. Tomcat debug 配置
  9. 任务管理器都关不掉应用程序进程怎么办?
  10. 国外域名注册商选择_如何在2020年选择最佳域名注册商(比较)