DDIA第十章
第十章:批处理 本书的前九章,讨论的都是请求、查询,以及相应的响应和结果。是在线系统,关注响应时间。 三种不同类型的系统: 服务(在线系统) 处理客户的请求或指令。衡量指标:响应时间,可用性。 批处理系统(离线系统) 跑一个作业,处理大量的输入数据,定时运行。衡量指标:吞吐量。 流处理系统(准实时系统) 介于在线系统和离线系统之间。消费输入并产生输出(不需要响应请求),在事件发生不久就对事件进行操作。 本章讨论批处理系统。 ...
第十章:批处理 本书的前九章,讨论的都是请求、查询,以及相应的响应和结果。是在线系统,关注响应时间。 三种不同类型的系统: 服务(在线系统) 处理客户的请求或指令。衡量指标:响应时间,可用性。 批处理系统(离线系统) 跑一个作业,处理大量的输入数据,定时运行。衡量指标:吞吐量。 流处理系统(准实时系统) 介于在线系统和离线系统之间。消费输入并产生输出(不需要响应请求),在事件发生不久就对事件进行操作。 本章讨论批处理系统。 ...
基于树莓派-piwigo/apache2 的家庭云相册搭建 背景 近期由于拍摄了很多我和胡小蕊在一起的照片,包括生活照片和出去游玩的照片,所以想搞一个家庭云相册,可以用于实时同步手机中的照片到云相册上。因为考虑到公有云相册的隐私安全保障问题,以及我想自己DIY一些功能。还有就是自己的手机内存问题以及手机自带的云相册需要付费申请更大的空间,我不想付费。因此我想可以利用树莓派作为服务器,寻找一个开源的云相册管理系统自己部署到服务器上,最好是带有软件的开源云相册。找来找去发现了这款PiWigo云相册,详细请见: PIWIGO 官网,这里是github地址: PIWIGO github仓库 ...
第九章:一致性与共识 构建容错系统的最好方法,是找到一些带有实用保证的通用抽象,实现一次,然后让应用依赖这些保证。比如事务。 我们需要了解系统能力的边界:哪些可行,哪些不可行。 ...
第八章: 分布式系统的挑战 分布式系统面临哪些挑战? ● 前面几章讨论的副本故障切换、复制延迟、事务控制; ● 本章讨论的不可靠网络、时钟和时序问题等等; ● 我们的假设:任何可能出错的东西都会出错。 ...
String 如何提升性能? 这几天我在看《Effective Java》,其中有一章提到我们在使用String的时候要慎用正则表达式,因为在注重性能的场景,这种方法不适用。我不懂是个什么情况,就去google了一下。于是把所有相关String的操作全部了解了一遍,也算是大概明白了为什么要慎用正则表达式。因此也来做个记录 ...
第七章:事务 为什么有事务? ● 分布式数据系统,可能会出各种错误。 ● 实现容错机制工作量巨大。需要仔细考虑所有可能出错的事情,并进行大量的测试,以确保解决方案真正管用。 ● 数十年来,事务(transaction) 一直是简化这些问题的首选机制。 什么是事务? ● 事务是应用程序将多个读写操作组合成一个逻辑单元的一种方式。 ● 从概念上讲,事务中的所有读写操作被视作单个操作来执行: ○ 整个事务要么成功(提交(commit))要么失败(中止(abort),回滚(rollback))。 ○ 如果失败,应用程序可以安全地重试。 ○ 对于事务来说,应用程序的错误处理变得简单多了,因为它不用再担心部分失败的情况了,即某些操作成功,某些失败(无论出于何种原因)。 事务是天然存在的吗? ● 不是天然存在,是为了简化应用编程模型而创建的。 ● 给应用程序提供了安全保证。 事务必须存在吗? ● 不是所有应用都要有事务 ● 有时候弱化事务保证、或完全放弃事务也是有好处的(例如,为了获得更高性能或更高可用性)。 ● 一些安全属性也可以在没有事务的情况下实现。 怎样知道你是否需要事务? ● 首先需要确切理解事务可以提供的安全保障,以及它们的代价。 ● 尽管乍看事务似乎很简单,但实际上有许多微妙但重要的细节在起作用。 ...
第六章: 分区 什么是分区? ● 对于非常大的数据集,或非常高的吞吐量,仅仅进行复制是不够的:我们需要将数据进行分区(partitions),也称为分片(sharding)。 ● 通常情况下,每条数据(每条记录,每行或每个文档)属于且仅属于一个分区。 ● 每个分区都是自己的小型数据库,尽管数据库可能支持同时进行多个分区的操作。 分区的优点? ● 分区主要是为了可伸缩性。 ● 大数据集可以分布在多个磁盘上,并且查询负载可以分布在多个处理器上。 ● 单个分区上运行的查询,每个节点可以独立执行对自己的查询,因此可以通过添加更多的节点来扩大查询吞吐量。 ● 大型、复杂的查询可能会跨越多个节点并行处理,尽管这也带来了新的困难。 本章内容 ● 分割大型数据集的不同方法 ● 索引如何与分区配合 ● 分区再平衡 ● 数据库如何路由到正确的分区 ...
这是一个计划 其实这本书我已经看了两遍了,只能说第二次比第一次收获更多,可能是第二次读的时候是已经工作了一段时间,读起来再也不是纸上谈兵,而是能够联系到工作上的实际场景,脑子中有了图像。但是这本案牍之书,读两遍肯定是远远不够的。因此最近我想开始读第三遍,这个时候边读边做一个读书笔记以此来鞭策自己,能够真的深入理解JVM。 ...
第五章:数据复制 复制的目的: ● 使得数据与用户在地理上接近(从而减少延迟) ● 即使系统的一部分出现故障,系统也能继续工作(从而提高可用性) ● 伸缩可以接受读请求的机器数量(从而提高读取吞吐量) 如果复制的数据不会随时间而改变,那复制就很简单:复制一次即可。 复制的难点在于复制数据的变更。 三种流行的变更复制算法: ...
最近有一些原因,导致我想把我的小米11Ultra刷个MIUI GLOBAL, 想起来上一次刷机还是在大学的时候用的redmi k20 pro, 当时只是为了获取到root权限然后使用模拟定位打卡软件避免早起跑操打卡。 ...