《design data-intensive application》阅读笔记之一

于2017年末得知了一本神书《design data-intensive application》,读完即可惜,如果早拿到这本书,就不会纠结于很多分布式系统和数据库的书了。因为已通读完全书,觉得如果不写 一些东西,确实可惜了。希望中文版早日出来吧。 如果我们要设计一个data system,有什么是我们需要考虑的呢? 首先,应该是存储数据的database。且不论这些怎么存储,假设是一个txt文档。当这个txt文档数据量很小时,一眼就能看出我们需要的数据在哪了。当数据量随之增长时,眼睛就不够用了, 我们需要区分经常读取的数据(hot spot)和不怎么读取的数据,这部分经常读的数据,不可能存放在很慢的磁盘上了,每次读取都去需要全量加载,而是直接缓存放入内存,这就是cache。那么 突发紧急情况,我们又想读取那些老旧的数据,这部分数据肯定不会是存放在内存里,那么这时候我们就需要一个index去filter or search by keyword。除此之外,我们不会局限于这部分数据 我们还需要和其他的process交流,那么所谓的batch process和stream process应运而生。于是一个简单的data system诞生了。 可能我们在app上,我们会觉得我们只是按下一个按钮,但是仅仅是一个简单的data system,就已经如此让人惊叹了。对的,这仅仅只是一个简单的抽象,实际上,我们需要考虑如何保证 client看到的cache和stored data是一致的?如何确保某一台机器坏了,系统还能正常用?好了,你的boss突然想撒钱了,贪小便宜的client会使得你的系统load不断增长,这时你该如何保证? 不仅如此,client可不能忍受打开网页相应的缓慢,performance可不能放弃了。当然,还有各种各样神奇的问题在等着你。

不过在此书当中,抽象了三个factor去描述这些事。如下 一.reliability 系统应该持续工作,在正确的时间执行正确的事。这可不是一件容易的事 1.hardware fault 首先我们不应该保证我们的电脑随时随地都是可work的,我们会遇上hard disk crash、RAM becomes faulty、the power grid has a blackout等等,不要以为这些乱七八糟的不会发生 在一个拥有很多太机器的data center,这些是家常便饭。 2.software Errors 这个可能会是software bug(不局限于你写的程序,也有可能是系统的bug或者是某个不合常理的input),shared resource的失效(比如线程的共享内存),某个系统依赖的something 变慢了,甚至失去联系等等 3.Human Errors 这个呢,毕竟程序员也是人,bug不可避免。测试的重要性也在此得到了体现。 二.scalable 随着系统volume的增长,处理事情的能力也应该随之增长 这个不是我加机器就能是的系统的处理能力就能增长的。有两个东西需要考虑,describing load 这个决定着系统该如何设计。书中举了微博为例,当一个普通用户使用时,设计了一个 良好的关系模型,但是这个用户是某个名人时,那就需要使用消息分发了。describing performance 在batch process,考虑的应该是throughput。但是在online system,response time 就很重要了,而这个需要考虑到GC pause、TCP retransmission、the loss of network packet。。。 三.maintainability 系统应该设计的给人用的,而不是电脑。 这个估计很多程序员都会碰到,一个乱七八糟的legacy system,足够让人喝一壶了。评判标准很简单,可操作,简单,兼容。

原文发布于微信公众号 - 鸿的学习笔记(shujuxuexizhilu)

原文发表时间:2018-01-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张善友的专栏

MS MVC框架漩涡中的MonoRail未来

上个星期,Hamilton向微软MVC团队通报了Castle团队从现实应用中获得的所有复杂和不直观的需求,并告知他们如何处理这些事情。另外他还开发了一些集成案例...

1915
来自专栏云端架构

【云端架构】程序员常用四十个小技巧

4、注释贵精不贵多。杜绝大姨妈般的“例注”。漫山遍野的碎碎念注释,实际就是背景噪音。

4469
来自专栏跨界架构师

如何一步一步用DDD设计一个电商网站(二)—— 项目架构

    上一篇我们讲了DDD的核心概念(附上链接),并且设计了我们的上下文映射图,那么接下来就准备开始立项了,本篇文章的部分知识点可能对一部分人来说比较基础,可...

3241
来自专栏Python爬虫与算法进阶

爬虫学到什么程度可以去找工作

随便看看知乎上的教程就可以入门了,就Python而言,会requests当然是不够的,还需要了解scrapy和pyspider这两个框架,scrapy_redi...

2290
来自专栏一个会写诗的程序员的博客

20+个很棒的Android开源项目

20+个很棒的Android开源项目 本文摘自文章: 20+ Awesome Open-Source Android Apps To Boost Your D...

1212
来自专栏码匠的流水账

聊聊系统设计中的trade-off

trade-off翻译过来大致是折中的意思,也就是说系统设计通常牵扯的点比较多,有的设计方案这个方面比较好,但是又有其他缺点,没有十全十美的方案,只是在特定的上...

1773
来自专栏微信公众号:Java团长

以技术面试官的经验分享毕业生和初级程序员通过面试的技巧(Java后端方向)

本来想分享毕业生和初级程序员如何进大公司的经验,但后来一想,人各有志,有程序员或许想进成长型或创业型公司或其它类型的公司,所以就干脆来分享些提升技能和通过面试的...

951
来自专栏海天一树

结构化、半结构化和非结构化数据

结构化的数据是指可以使用关系型数据库表示和存储,表现为二维形式的数据。一般特点是:数据以行为单位,一行数据表示一个实体的信息,每一行数据的属性是相同的。举一个例...

7332
来自专栏SDNLAB

网络功能虚拟化系列:NFV的开源软件包

本文系SDNLAB社区译者计划发布文章,SDNLAB将与国外优质媒体和个人进行长期的内容合作,带来更多的优质技术文章,本文是<<网络功能虚拟化:新兴的虚拟化网...

3468
来自专栏IT技术精选文摘

《王者荣耀》2亿用户量的背后:产品定位、技术架构、网络方案等

5457

扫码关注云+社区

领取腾讯云代金券