带读 |《Designing Data-Intensive Applications》(中文:数据密集型系统设计)
我在实习和工作的过程中发现技术方案的设计这一环节是后端开发散发魅力并且深深吸引我的地方,好的技术方案/架构设计 可以让整个系统开发的开发者开发更轻松 后续的维护 以及拓展更容易 遇到高并发、各种软硬件失效人为错误带来的挑战时更可靠,总而言之,这让我觉得像是在设计自己世界乐高,我对此很有兴趣,于是找到这本书。
数据系统基础
这里先给出了一个全文检索服务器的例子(之前《Go In Action》也拿搜索例子做为开篇,看来文本检索很受大家欢迎呀),,假定某个应用包含缓存层(例如Memcached)与全文索引服务器(如Elasticsearch或Solr),二者与主数据库保持关联,通常由应用代码负责缓存、索引与主数据库之间的同步,如下图所示
在设计这个系统的时候,我们需要
- 通过缓存正确地刷新来保证客户端们看到的效果一致;
- 系统出现局部失效的时候 保证数据的正确性和完整性
- 系统发生降级时为客户提供一致良好的表现。
- 负载增加时系统便于拓展
...
这本书主要围绕系统设计的
- 可靠性
- 可扩展性
- 可维护性
展开
可靠性
- 硬件故障
在设计系统考虑硬件可靠性的时候 我们需要考虑到 硬盘崩溃、内存故障、电网停电、网线被拔掉等情况。
应对的方案大致有:1.添加硬件冗余
(比如磁盘配置RAID,服务器配置双电源,热插拔CPU,数据中心添加备用电源,发电机等)2.滚动升级(后面会介绍) - 软件错误
特点时间值导致服务器崩溃,比如2012年6月30日发生的闰秒触发的Linux内核bug、依赖服务故障、级联故障等。
软件错误很多时候没办法快速解决,需要在系统设计之初认真检查各种交互和依赖,进行全面测试,进程隔离,提前设计好异常告警。 - 人为错误
经调查发现,运维人员的配置错误是某大型互联网服务下线的首要原因。
所以在系统设计的时候,我们可以先假定人是不可靠的,用最小的出错方式来设计系统、分离出最易出错的地方、充分测试、制定出错是快速恢复机制等。
未完待续。。。
参考
Kleppmann M. Designing data-intensive applications: The big ideas behind reliable, scalable, and maintainable systems[M]. " O'Reilly Media, Inc.", 2017.
推荐阅读
bug solved | export 'default' was not found in 'xxx'
原因:export 导出不止一个 需要用花括号解构出自己想要的例如:import Provider from 'mobx-react'改为import {Provider} from 'mobx-react'
LiberHome阅读 444
【十亿级高并发系统设计】如何设计一套高并发系统?
我们知道,高并发代表着大流量,高并发系统设计的魅力就在于我们能够凭借自己的聪明才智设计巧妙的方案,从而抵抗巨大流量的冲击,带给用户更好的使用体验。这些方案好似能操纵流量,让流量更加平稳的被系统中的...
椒太郎赞 1阅读 669
如何将微前端项目部署在同一台服务器同一个端口下
因为线上部署主应用时需要用到子应用的线上可访问地址,因此部署顺序应该是先部署子应用,保证子应用能够线上可访问后,再将子应用的线上可访问地址配置到主应用,最后再将主应用部署到线上环境。
京东云开发者阅读 612
系统设计:快速粗略计算系统容量和性能需求
"Back-of-the-envelope estimation",直译是信封背面估算的意思,"Back-of-the-envelope estimation"是一个短语,用于描述使用简化的假设和基本原理进行的粗略或快速计算,通常在信封背面或任何可用的纸上进行。...
气势凌人的鞭炮阅读 506
如何设计一个速率限制器(令牌桶/漏桶/固定窗口/滑动窗口)
在网络系统中,速率限制器被用来控制客户端或服务发送的流量的速率。在 HTTP 领域,速率限制器限制了在指定周期内允许发送的客户端请求的数量。如果 API 请求的数量超过了速率限制器定义的阈值,所有超出的调用都...
气势凌人的鞭炮阅读 501
系统设计面试的框架
你刚刚得到了梦寐以求的公司现场面试机会。招聘协调员给你发送了当天的日程安排。扫视这个列表,你对此感到非常满意,直到你的目光落在这个面试环节上——系统设计面试。
气势凌人的鞭炮阅读 486
一种通用的业务监控触发方案设计 | 京东云技术团队
业务监控是指通过技术手段监控业务代码执行的最终结果或者状态是否符合预期,实现业务监控主要分成两步:一、在业务系统中选择节点发送消息触发业务监控;二、系统在接收到mq消息或者定时任务调度时,根据消息中...
京东云开发者赞 1阅读 221
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。