Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >关于大数据和数据库的一篇学习笔记

关于大数据和数据库的一篇学习笔记

作者头像
哒呵呵
发布于 2020-07-27 15:20:45
发布于 2020-07-27 15:20:45
7940
举报
文章被收录于专栏:鸿的学习笔记鸿的学习笔记

这篇文章来自于我非常崇敬的一个学者 Martin Kleppmann(下文用马丁指代) 的一篇访谈,包含了很多有趣的观点,比如为什么要写Designing Data-Intensive Applications(缩写为DDIA)这一本书,关于计算机行业专有名词乱用的点评,对分布式系统里广为流传的 CAP 定理的批评以及讨论了事件溯源(Event Sourcing)这种架构的适用场景和缺点,最后还附带了对计算机行业里去中心化趋势的看法。

Martin Kleppmann 是英国剑桥大学的分布式系统研究员,也是Designing Data-Intensive Applications一书的作者,Designing Data-Intensive Applications是目前数据领域的技术书籍里写的最好的一本书(我认为不带之一),这本书行文流畅,见解深刻,感兴趣的可以找到英文原版或者是中文翻译版读一读。

本文在翻译过程中们,删除了无意义的谈话,聚焦于核心观点。原文参见:https://martin.kleppmann.com/2019/06/27/hydra-interview.html

为什么要写 Designing Data-Intensive Applications 这一本书

得益于计算机行业的蓬勃发展,各种各样的软件、产品,无论是开源或者是闭源,总归是多了起来。相比于二十世纪的程序员,现在的程序员不再为了某个问题而需要“造轮子”(发明新的工具),GitHub 等网站上充斥着各种各样的工具,甚至于同一种场景会有五六种工具可以选择,以数据系统而言,数据库有非关系型数据库和关系型数据库,非关系型数据库中还有 Hbase、Cassandra等等,关系型数据库有 Oracle、MySQL等等,除了数据库外,数据系统里还有各式各样的流处理工具(Flink、Spark Steaming等等)、批处理工具(Spark、 MapReduce),让人眼花缭乱。程序员幸福于不需要花时间开发工具而苦恼于工具众多,不知道选什么才是最适合自己面临的业务场景。

然而现在的很多计算机书籍都没有回答好这个问题,比如,当读者在阅读有关 Cassandra 的书籍时,这本书会告诉你 Cassandra 是如何优秀,但是不会说 Cassandra 有哪些不适合的场景。DDIA 这本书就是告诉大家在构建一个大型的系统应该考虑哪些方面,然后如何确定哪种类型的技术可以帮你解决特定的问题,哪种技术不适合你需要解决的问题。

这就是 DDIA 这本书的意义。不过话说回来,计算机行业里没有万能的银弹,也就是说没有任何一种技术可以完美的解决所有的问题,选型就特别重要了。

反对计算机行业里的虚假宣传

这是我们行业存在的一个问题:当人们在谈论某种工具时,就会大肆宣传这种工具,这是可以理解的,因为这些工具是由公司发明的,显然这些公司希望能够推广这些产品,然后就会派人参加各种会议,说它的产品是多么的有些。有时候这种宣传会伪装成技术分享,但实际上依然是一种销售活动。作为行业内的人,我们需要正确地了解某些产品的优缺点,部分内容需要一种通用专有名词去描述,没有通用的专有名词的话,就无法放在同一维度下进行比较。当然,除了通用的专有名词外,还需要一些方法去推理并获知某些技术的优缺点。

所以对于程序员而言,了解某一种软件就必须认真仔细地去阅读官方文档,最好能够去部署并使用这个软件,因为对于官方文档而言,这个软件的开发者往往不会告诉你这个软件的真正缺点以及不适用场景,这个时候就需要个人分辨了。

CAP定理的问题

我认为在很多情况下,在计算机行业里,一项技术只能做某一件事而不能做另一件事,不是所谓的错误,而是某一种的权衡。但是 CAP 就是一个错误,而不是某种权衡。

CAP 定理从根本上讲是不够好的,而且也没有用。每当人们使用 CAP 定理证明它的架构设计或者是某种决策合理时,我认为他们理解错了 CAP 定理。CAP 作为一个定理的问题在于它只是说明了一件显而易见的事实,而且只讨论了一个被定义的非常狭隘的一致性模型,学术名叫线性化,以及一个被定义的非常狭隘的可用性模型:你希望每一个副本对于读取和写入而言都是完全可用的,即使这些副本无法与其它副本通信。这些定义是非常合理的,但是非常狭隘,许多应用程序根本就不能简单的划分到非常严格的一致性和可用性情况。这个时候,CAP 定理并不会告诉你更多的有用的信息,仅仅只是空洞的描述而已。

在 CAP 定理的严格定义下,有许多技术既不一致又不可用,实际上只是P!不是CP,不是CA,不是AP,只是P而已。从来就没有人这么说过,因为这看起来非常糟糕,但老实说,这有可能是一个非常合理的设计决策。实际上,我认为 CAP 定理没有任何帮助的原因在于:CAP 定理有很大的一部分只是很空洞的讨论。

事件溯源的适用场景

在读这个章节前可以先读下马丁写的Online Event Processing

首先事件溯源(Event Sourcing)是一种用于数据建模的机制:如果开发者的数据库有很多不同的表,并且开始无法管理好它,这些表又被很多事务更新。那么事件溯源这种方式就可以让开发者更加容易数据建模,因为事件可以非常直接的表示业务级别,用户正在操作什么,并且这种操作带来的后果是什么,也许是更新各种表。实际上开发者可以借由事件溯源将事件(动作)本身与其对下游的影响分隔开来。

这就是为什么可以使用 Kafka 之类的系统去构建一个高可用系统。从某种意义上来说,如果你在使用 Kafka 不一定在使用事件溯源方式,也有可能在使用事件这个概念。相反,你无需为了使用事件溯源而专门的使用 Kafka,你也可以使用特定的数据库。

当你想使用 Kafka 可能只是想方便地使用他的可扩展性:比如当你收到了很多数据,在单节点数据库上是很难处理的,就必须采用分区,并使用像 Kafka 这种事件日志方式去把工作分担到各个机器上。当你想集成多个不同类型的数据库时,例如不仅要更新关系型数据,也要更新 Elasticsearch 这样的全文搜索索引或者是像 Redis 这样的缓存系统,并且你希望一个事件在各个不同的系统上产生的效果是一样的,那么 Kafka 这种工具就很有用。

至于何时使用事件溯源,有一个很简单的原则:那就是使用最简单的方式去实现业务。例如当你的业务仅仅只是对数据库执行增删改查的操作,那么仅仅使用关系型数据库就好了。但是当你发现自己单纯地使用数据库这种方式时已经无法解决业务问题时,比如数据模型过于复杂,那么使用事件溯源的方式就很好了。

至于可扩展性的考虑,如果数据量足够少,那么就可以使用 PostgreSQL。但是如果数据量太大,那么就可以考虑 Kafka 这样的方式了。一切以实用作为标准。

事件溯源遇到的问题

当有很多消费者同时消费 Kafka 里的事件,比如当一个新的文档出现时,基于 Elasticsearch 的搜索系统需要让这文档可搜索,还需要将这文档放入到基于Memcached的键值缓存系统缓存数据,并且还需要更新关系型数据库里的数据。这个文档可以是任何事情,而且这些消费者系统都需要同时工作。这个时候就很需要事件溯源这种方式了。

这确实是一个挑战,实际上这需要跨不同类型的存储系统的“因果一致性”。当一个系统包含某个数据时,那么另一个系统也需要能看到这些数据,可惜的是,将不同存储系统之间的因果关系整合在一起是非常困难的,这不是事件溯源这种方式的错,而是无论使用哪一种方式或方法,都会遇到这个问题。

因为两种不同系统即使是同时写入,因为网络延迟的原因,导致到达系统的时间会略有不同,并且实际写入系统的时间也会略有不同。从而影响两个系统的使用者的观察状态。目前已经有一些人在研究解决这些问题。

一个很好的解决办法是,建立搜索引擎、缓存系统和数据库统一的一致性快照。如果仅仅只使用数据库的话,这种方式叫做快照隔离。快照隔离很重要的点在于任何人读取数据库,都只会看到独属于它的一份数据库数据库的副本,任何时候查看数据,都只是看到数据库某个时刻的快照状态。即使这个时候,数据被某一个事务更改了,实际上你依然会看到较旧的数据,因为这个较旧的数据也构成了一致性快照的一部分。

此时你想为 Elasticsearch 和 Memcached 这两个系统去建立一致性的快照是不可能的,因为像 Memcached,Redis 和 Elasticsearch 这种系统时没有有效的机制去建立可以和不同存储系统向匹配的快照,每个系统都只会考虑自己的情况,只能看到最新的数据,而不能看到较旧的数据。这就导致了不一致的情况。

对于这种情况,比较束手无力,因为要建立一致性快照这种事情需要对存储系统的底层代码进行改造,并且这种改造代价不能太大,因为有可能几秒钟就需要这样的一次快照。现在还没有一个存储系统满足这种条件,因此这是一个非常有趣的主题。

由事件溯源谈全局的快照隔离

全局的快照隔离实际上就是共享的多版本并发控制(https://en.wikipedia.org/wiki/Multiversion_concurrency_control)。

就像分布式事务系统一样。XA 分布式事务可以为解决这种问题提供一些帮助,但是就目前的情况而言,XA 并不适合,因为 XA 是一种基于锁的并发控制方式,这意味着当你在读取数据时,就必须对其进行锁定,让其他人无法在锁定的时候对数据进行修改。这导致了这类基于锁的并发控制方式的性能很差,所以在实践中还没有任何系统实际的使用它。换句话说,如果没有这种锁定的话,那么 XA 分布式事务也不会提供必要的隔离行为。所以我们需要的是一种新的可以提供跨不同系统的快照隔离机制,但是现在还没有看到实现这一目标的东西。

例如在微服务的宣传中,构建微服务的方式应该是每个微服务都有着自己的存储系统,自己的数据,而且另一个微服务不能直接访问另一服务的数据,因为这会破坏服务的封装。所以,每个服务仅仅只会管理自己的数据。

例如,您有一个用于管理用户的微服务,并且有一个保存着用户信息的数据库,其他所有想了解有关用户的信息的人都必须通过这个用户的微服务。从封装的角度来看,这很不错:因为你对其他服务隐藏数据库架构的详细信息。

但是,从不同服务之间的一致性的角度来看,现在遇到了一个大问题:我们可能在两个相互依赖的不同服务中拥有相同数据,并且在时间上,可能会轻易地以一项服务稍稍领先于另一项服务而告终,然后可能会导致有人读取不同的服务,从而导致结果不一致。而且我认为目前没有任何人构建微服务可以解决这个问题。

去中心化、边缘计算、存储

目前我们过于依赖服务器和集中化了。想一下,最初的因特网本来就是一个非常灵活的网络,可以通过数种不同的路径发送数据包,然后依然可以到达目的地。而且当一枚核弹袭击了某一个特定的美国城市时,其它的网络依然可以绕过系统的故障部分正常运行。这就是所谓的冷战设计。

现在我们将所有的东西都存储在云上了,比如基本上所有的东西都要经过 AWS 的一个数据中心。我们放弃了去中心化的想法,而是将所有的内容都存储在服务器上,也就是集中化了。所以我现在希望回到去中心化的路上,从某种意义上来说,将控制数据的权力从服务器交还给用户。

我想补充的一件事是很多人都在谈论去中心化,实际上谈论的是加密货币,因为他们还试图通过一种去中心化的方式将控制权从中央机构(如银行)转移到网络中。但这并不是我真正感兴趣的去中心化:因为我发现这些加密货币实际上仍然非常集中,在某种意义上,如果您要进行比特币交易,则必须使用比特币网络。因此一切东西都集中在这个特定网络上。虽然它的构建方式是分散的,没有单个控制节点,但是整个网络极其集中,因为必须通过该网络进行任何交易,无法通过其他方式。所以我觉得它仍然是一种集中化形式。

在使用加密货币的情况下,这种集中化可能是不可避免的,因为必须要用一个网络就达成的交易和未达成的交易达成共识。而这正是比特币网络所做的。但是有许多应用程序不需要像区块链这样的东西,因为更为灵活的数据模型。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 鸿的笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
豆瓣平均 9.x,分布式领域的 5 本神书!
你好,我是 Guide。上个周末简单整理了几本觉得还不错的分布式技术书籍,这里简单分享一下,希望对你系统学习分布式领域相关的知识能够有所帮助。
Guide哥
2022/11/07
3K0
豆瓣平均 9.x,分布式领域的 5 本神书!
一周技术学习笔记(第62期)-CQRS是”有点不同“的读写分离
图自https://time.geekbang.org/dailylesson/detail/100056986
王新栋
2022/06/15
4010
一周技术学习笔记(第62期)-CQRS是”有点不同“的读写分离
请不要再宣称数据库是 CP 或者 AP
在 Jeff Hodges 精彩的博客文章给年轻人关于分布式系统的笔记中,他建议我们用 CAP 定理来评论系统。很多人都听取了这个建议,描述他们的系统为"CP" (有一致性但在网络分区的时候不可用),“AP”(可用但是在网络分区的时候不一致) 或者有时候 "CA" (说明"我还没有读过 Coda 的五年前的文章")。
kirito-moe
2019/05/30
7560
豆瓣 9.7!这本技术书籍直接封神了
国内的豆瓣评分 9.7(满分 10.00),接近 90% 的人为这本书打了五星好评。
Guide哥
2021/12/21
9850
豆瓣 9.7!这本技术书籍直接封神了
设计数据密集型应用-Data-Intensive Application
读一本好书《设计数据密集型应用》- Designing Data-Intensive Application
王炸
2019/07/02
1.5K0
设计数据密集型应用-Data-Intensive Application
数据系统的未来------《Designing Data-Intensive Applications》读书笔记17
对于任何给定的数据问题,总会有多种解决方案。所有这些解决方案都会有不同的优缺点和权衡。因此,最合适的软件工具选择也要视情况而定。每一个软件,甚至一个所谓的“通用”数据库,都是为特定的使用模式而设计的。所以,在复杂的应用程序中,数据工具通常会串联起来共同工作。不存在有一个软件适合于使用数据的所有不同环境,因此不可避免地要将几个不同的软件串联在一起,以便更好帮助应用程序工作。
HappenLee
2018/09/05
1K0
数据系统的未来------《Designing Data-Intensive Applications》读书笔记17
如何系统性地学习分布式系统?
作者 | 伴鱼技术团队 本文的缘起是回答知乎圆桌会议「分布式系统之美」的问题「如何系统性地学习分布式系统?」,后面稍微整理了一下,形成了这一篇文章(知乎 ID:kylin)。 前
深度学习与Python
2020/10/23
3390
关于分布式系统数据一致性的那些事(二)
接上一篇文章(关于分布式系统数据一致性的那些事),继续更新一些关于分布式系统数据一致性方面的知识。
Bruce Li
2020/06/15
5550
一周技术学习笔记(第70期)-理解数据库的这两个问题,面试官会对你另眼相看
从我们学习关系型数据库的时候就知道了数据库有四种隔离级别。那么为什么要做隔离级别这样的设置呢。
王新栋
2022/12/01
2560
多研究些架构,少谈些框架
微服务现在辣么火,业界流行的对比的却都是所谓的Monolithic单体应用,而大量的系统在十几年前都是已经是分布式系统了,那么微服务作为新的理念和原来的分布式系统,或者说SOA(面向服务架构)是什么区别呢?
物流IT圈
2019/09/24
6070
多研究些架构,少谈些框架
它说你的代码有 Bug「GitHub 热点速览 v.21.44」
本周热点上的榜单大多数提升工作效率的实用工具,像是一个 API 管理所有通知消息(包括推送、邮件…)的 notifire,再是高速解析 JSON 文件的 simdjson,高性能对多个目标进行跟踪的 ByteTrack,一键启动多个虚拟机的 PD Runner…当中最神奇的还是要属于 IntelLab 开源的 Control Flag 能无差别(不区分编程语言)地检测代码中是否存在异常,从而帮你调试代码。
HelloGitHub
2021/11/02
6260
分布式系统学习资料汇总
因此只需要在“时空”两个维度对分布式系统进行把握,就能提纲挈领,愈学愈明。“时”表示分布式系统的演进脉络,可以通过阅读不同时期、学术界工业界的一些论文来把握。“空”表示分布式系统中所研究的基本问题的拆解,可以通过阅读一些书籍建立分布式系统的知识体系。本文将我在学习分布式系统知识过程搜集到的一些资料,按类别简单汇总,以飨诸君。资料排名没有先后,请按需采用。
木鸟杂记
2021/09/26
7010
多研究些架构,少谈些框架——一名阿里架构师的笔记
微服务架构和SOA区别 微服务现在辣么火,业界流行的对比的却都是所谓的Monolithic单体应用,而大量的系统在十几年前都是已经是分布式系统了,那么微服务作为新的理念和原来的分布式系统,或者说SOA(面向服务架构)是什么区别呢? 我们先看相同点: 需要Registry,实现动态的服务注册发现机制; 需要考虑分布式下面的事务一致性,CAP原则下,两段式提交不能保证性能,事务补偿机制需要考虑; 同步调用还是异步消息传递,如何保证消息可靠性?SOA由ESB来集成所有的消息; 都需要统一的Gateway来汇聚、编
Java架构
2018/05/04
7800
多研究些架构,少谈些框架——一名阿里架构师的笔记
DBLog:一种基于水印的变更数据捕获框架(论文翻译)
应用程序通常会使用多个异构数据库,每个数据库都用于服务于特定的需求,例如存储数据的规范形式或提供高级搜索功能。因此,对于应用程序而言,将多个数据库保持同步是非常重要的。我们发现了一系列尝试解决此问题的不同方式,例如双写和分布式事务。然而,这些方法在可行性、稳健性和维护性方面存在局限性。最近出现的一种替代方法是利用变更数据捕获(CDC)框架,从数据库的事务日志中捕获变更的行,并以低延迟将它们传递到下游系统。为了解决数据同步的问题,还需要复制数据库的完整状态,而事务日志通常不包含完整的变更历史记录。同时,某些应用场景要求事务日志事件的高可用性,以使数据库尽可能地保持同步。
tyrantlucifer
2023/10/03
7220
DBLog:一种基于水印的变更数据捕获框架(论文翻译)
微服务的最终一致性与事件流
微服务是指一个个单个小型业务功能的服务,由于各个微服务开发部署都是独立的,因此微服务天然是分布式的,因此,分布式系统的设计问题如CAP定理同样适合微服务架构,虽然微服务本身是无状态的,但是微服务是需要管理状态的。这些状态是指领域模型的状态或存储在自己的专有数据库中。 虽然我们使用微服务必须面对分布式系统,但是好的一方面是有很多关于如何建立复杂分布式系统的成熟模式和最佳实践。 典型的问题是微服务之间如果需要共享状态怎么办?实际是在分布式节点之间需要共享或复制状态。关于共享状态有几个解决方案: 1.微服务之间通过共享同一个数据库实现状态共享,但是因为微服务是使用自己专用的数据库,因此,数据库共享方案在微服务中是不适用的,违背了微服务架构宗旨。 2.通过调用同一个微服务实现状态共享,比如A服务和B服务需要共享C数据状态,而C数据状态是由C服务管理的,那么,A服务和B服务共同调用C服务不就是获得同一个C状态吗? 但是考虑到分布式系统下,A服务和B服务可能不在同一个节点服务器上,或者不同Docker VM中,那么服务之间调用就需要网络通讯,通常RPC是一种通过网络调用远程服务器上其他服务的同步方式,但是,RPC虽然将网络编程藏起来,其实藏是藏不住,结果造成抽象泄漏了。 "Asynch message-passing makes constraints of network programming firstclass instead of hiding them behind the RPC leaky abstraction"异步消息传递使得网络编程变成第一公民(显式),而不是像RPC隐藏了网络编程却造成抽象泄漏。 在分布式系统中使用异步消息必然会遭遇最终一致性。甚至可以说微服务是使用最终一致性的(microservices use eventual consistency) 最终一致性Eventual Consistency 最终一致性是一种用于描述在分布式系统中数据的操作模型,在分布式系统中状态是被复制然后跨网络多节点保存,其实在关系数据库集群中,最终一致性被用来在集群多个节点之间协调数据复制的写操作,数据库集群中这种写操作挑战是:各个节点接受到的写操作必须严格按照复制的次序进行,这个次序是有时间损耗的,从这个角度看,数据库在集群节点之间的这种状态复制还是可以被认为是一种最终一致性,所有节点状态在未来某个时刻最终汇聚到一个一致性状态,也就是说,最终达成状态一致性。 当构建微服务时,最终一致性是开发者 DBA和架构师频繁打交道的问题,当开始在分布式系统中进行状态处理时,头疼问题更加严重。核心问题是: 如何在保证数据一致性基础上保证高可用性呢? 事务日志 几乎所有数据库都支持高可用性集群,大多数数据库对系统一致性模型提供一个易于理解的方式,保证强一致性模型的安全方式是维持数据库事务操作的有序日志,理论上理由非常简单,一个事务日志是一系列数据更新操作的动作有序记录集合,当其他节点从主节点获得这个事务日志时,能够按照这种有序动作集合重新播放这些操作,从而更新自己所在节点的数据库状态,当这个事务日志完成后,次节点的状态最终会和主节点状态一致。 这种事务日志非常类似于财务中记账模型,或者类似银行储蓄卡打印出来的流水账,哪天存入一笔钞票(更新操作),哪天又提取了一笔钞票(更新操作),最后当前余额是多少(代表数据库当前状态)。 Event Sourcing Event sourcing事件溯源是借鉴数据库事务日志的一种数据持久方式,在ES中,事务单元变得更细粒度,使用一系列有序的事件来代表存储在数据库中的领域模型状态,一旦一个事件被加入事件日志,它就不能被移走或重新排序,事件被认为是不可变的,事件序列只能被追加方式存储。 因为微服务将系统切分成一个个松耦合的小系统,每个系统后面都独占自己的数据库,虽然,微服务是无态的,但是它需要操作自己数据库的状态,如何保证微服务之间操作数据库数据的一致性成了微服务实践中重要问题,使用ES能够帮助我们实现这点。 聚合可以被认为是产生任何对象的一致性状态,它提供校订方法用来进行重播产生对象中状态变化的历史。它能使用事件流提供分析数据许多必要输入,能够采取补偿方式对不一致应用状态实现事件回滚。 事件流共享 我们在微服务之间相互调用中通过引入异步机制,如果不同微服务之间存在共享的状态,或者说需要访问其他微服务的专用数据库,那么我们无需将本来专有的数据库共享出来,也无需在服务层使用2PC+RPC进行性能很慢的跨机同步调用,而是将改变这些共享状态的事件保存并共享,将领域事件以事务日志的方式记录下来,保存在一个统一的存储库,现在EventSourcing标准的存储库是 Apache Kafka。 也就是说,微服务之间共享的不是传统数据库,而是Apache Kafka,通过读取ES的事务日志和重新播放,我们可以得到任何时
物流IT圈
2019/07/30
1.1K0
微服务的最终一致性与事件流
DDIA:流积分就是快照,快照微分就得到了流
我们在这里讨论的事件溯源(event souring)和领域驱动设计(domain-driven design,DDD)社区中的相关概念有些相似之处。由于这个概念会牵扯出流式系统中的一些重要的思想,因此我们这里简单讨论一下。
木鸟杂记
2024/04/23
1060
DDIA:流积分就是快照,快照微分就得到了流
一篇文章了解 Apache Cassandra 是什么
Apache Cassandra 是一个开源的、分布式、无中心、弹性可扩展、高可用、容错、一致性可调、面向行的数据库,它基于 Amazon Dynamo 的分布式设计和 Google Bigtable 的数据模型,由 Facebook 创建,在一些最流行的网站中得到应用。
大数据和云计算技术
2019/10/08
1.3K0
微服务模式系列之九:独享数据库
译者自序: 熟悉我的朋友都知道,我很不喜欢翻译东西,因为在两种语言的思维方式之间做频繁切换对我来说是件很痛苦的事情。但是这次不一样,公司和同事的大力支持降低了我的痛苦指数,让我能够坚持把Chris Richardson的微服务模式系列文章翻译完,今天发布第九篇——《独享数据库》。 译者评论: 微服务模式中最为头疼的问题就是——数据问题,因为数据会散布在多个微服务之间,这通常意味着数据被分散到多个数据库中,这时微服务必须自行保证跨微服务的数据一致性,而无法利用数据库本身的机制解决。随之而来的是微服务滚动升级时
yuanyi928
2018/04/02
1.1K0
微服务模式系列之九:独享数据库
DDIA 笔记
本文为 design data-intensive applications 的读书笔记 第一部分:数据系统的基石 第一章:可靠性、可扩展性、可维护性 现今很多应用程序都是 数据密集型(data-intensive) 的,而非 计算密集型(compute- intensive)的。因此CPU很少成为这类应用的瓶颈,更大的问题通常来自数据量、数据复杂 性、以及数据的变更速度。 许多应 用程序都需要: 存储数据,以便自己或其他应用程序之后能再次找到 (数据库(database)) 记住开销昂贵操作的结果,加
王磊-字节跳动
2020/08/08
3K0
5、事件驱动数据管理
本书主要介绍如何使用微服务构建应用程序,这是本书的第五章。第一章介绍了微服务架构模式,讨论了使用微服务的优点与缺点。第二和第三章描述了微服务架构内通信方式的对比。第四章探讨了与服务发现相关的内容。在本章中,我们稍微做了点调整,研究微服务架构中出现的分布式数据管理问题。
Java架构师历程
2018/09/26
1.1K0
5、事件驱动数据管理
推荐阅读
相关推荐
豆瓣平均 9.x,分布式领域的 5 本神书!
更多 >
LV.1
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档