《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,足够让人喝一壶了。评判标准很简单,可操作,简单,兼容。

本文来自企鹅号 - 鸿的学习笔记媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ThoughtWorks

ArchUnit,架构守护神 | 雷达哔哔哔

ArchUnit是一个基于 Java 的测试库,用于检查代码的结构特性,如包和类的依赖关系、注解验证,甚至还能检查代码分层是否一致。我们很喜欢 ArchUnit...

2702
来自专栏LET

CPU简介

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

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

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

2320
来自专栏跨界架构师

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

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

3341
来自专栏FreeBuf

一张GIF引发的微信崩溃

今早,朋友发了一个表情给我,看下面,就是这个。。 ? 这不是天线宝宝卖萌系列表情包么,正当我看着俩宝宝撞屁股的GIF图寻开心的时候,微信突然卡死闪退了。。然后我...

3219
来自专栏云端架构

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

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

4479
来自专栏Python中文社区

Python=R+SQL/Hive?在数据分析与挖掘方面该选哪一个?

什么是R语言? R语言,一种自由软件编程语言与操作环境,主要用于统计分析、绘图、数据挖掘。R本来是由来自新西兰奥克兰大学的罗斯·伊哈卡和罗伯特·杰特曼开发(也因...

22210
来自专栏Java学习网

互联网高手教你如何搜集你想要的信息

  写在前面   几个月前,团队邀我做次内部的分享,主题是如何有效搜索信息。这是因为平时工作中,我经常会分享一些专业学习文档,而这些文档的出现往往很及时,回应一...

3678
来自专栏云计算D1net

云计算网络应用防火墙提高应用程序的安全性

人们通过云计算网络应用防火墙以确保未在本地托管的应用程序,这是可行的。行业专家马特·帕斯库奇解释它们是如何工作的,以及企业对此所需要了解哪些事情。 如今,网络应...

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

20+个很棒的Android开源项目

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

1232

扫码关注云+社区

领取腾讯云代金券