[case3]聊聊系统设计中的trade-off

news/2024/6/18 21:24:52

本文主要小结一下系统设计当中的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

http://www.niftyadmin.cn/n/4252448.html

相关文章

存放在外存上的数据关机后_面试官:说说你对PG数据存储结构--逻辑结构和物理存储的理解...

概述今天主要讲讲PG的数据结构,PG数据存储结构分为:逻辑结构和物理存储。其中逻辑存储结构是内部的组织和管理数据的方式。物理存储结构是操作系统中组织和管理数据的方式。逻辑存储结构适用于不同的操作系统和硬件平台。一、逻辑存储结构逻辑结构包括&a…

每位设计师都应该拥有的50个CSS代码片段(下)

26. 固定宽度的居中布局 1 #page-wrap { 2 width: 800px; 3 margin: 0 auto; 4 } Code Source 我知道之前已经提到过怎样设置水平居中.在这里的代码是完美实现固定宽度的水平居中 . 27. CSS3 文本分列 1 #columns-3 { 2 text-align: justify; 3 -moz-column-co…

IO流异常:Stream closed

tags: 解决错误 今天在做SSH项目的时候&#xff0c;出现了这个错误。百思不得其解&#xff0c;网上的答案都不能解决我的问题..... 后来&#xff0c;一气之下就重新写&#xff0c;写了之后发现在JSP遍历集合的时候出错了。 <s:iterator value"rolePrivilegeSet"&g…

ubuntu16 黑主题_Ubuntu16.04更换漂亮绚丽flatabulous主题

Ubuntu16.04更换漂亮绚丽flatabulous主题更新sudo apt-get updatesudo apt-get upgrade安装unity-tweak-toolsudo apt-get install unity-tweak-tool安装 Flatabulous 主题sudo add-apt-repository ppa:noobslab/themessudo apt-get updatesudo apt-get install flatabulous-th…

python爬虫编辑软件_Python:爬虫和爬最好用的编辑器Pycharm最强使用技巧!

代码排版&#xff0c;自动PEP8pep8 是Python 语言的一个代码编写规范。如若你是新手&#xff0c;目前只想快速掌握基础&#xff0c;而不想过多去注重代码的的编写风格(虽然这很重要)&#xff0c;那你可以尝试一下这个工具 - autopep8首先在全局环境中(不要在虚拟环境中安装)&am…

玩转rocketMQ

下载地址https://github.com/alibaba/RocketMQ 安装环境需要jdk,maven,git http://maven.apache.org/download.html

在Ubuntu Trusty 14.04 (LTS) (64-bit)安装Docker的步骤

Ubuntu Trusty带来的是3.13.0 Linux kernel &#xff0c;需要准备所有ubuntu库的某些条件&#xff0c;docker安装包被称之为docker.io。(注&#xff1a;Ubuntu (和Debian)包含有一些比较旧的同样被称之为docker的KDE3/GNOME2安装包&#xff0c;因此此处的docker安装包被称之为d…

GIT无法自动忽略YellowRV1.1.uvgui.Administrator文件的解决方法

原来这个YellowRV1.1.uvgui.Administrator文件是在.gitignore之前被提交进服务器的&#xff0c;.gitignore对已经存在服务器里的文件是不起作用的。按照回答里投票最高的答案做了一下&#xff0c;问题解决 git rm --cachedYellowRV1.1.uvgui.Administrator git commit -m "…