手机站:/m

数据库_怎么还原数据库_折扣

时间:2020-11-03 03:36编辑:淘客樊里来源:淘客樊里当前位置:主页 > 云存储 >

引入衍生事件来源

首先,什么是活动外包?这里有一个例子。以你的银行账户为例:在网上查看时,你首先注意到的往往是当前的余额。我们中有多少人深入了解我们是如何到达那里的?我们可能都会问类似的问题,比如:哪些付款已经结清?我的直接存款到了吗?为什么我要在丝芙兰花这么多钱?我们可以回答所有这些问题,因为构成我们平衡的各个事件都被存储起来了。事实上,正是这些事件的总和导致了我们的经常账户余额。简而言之,这就是事件来源。事件来源:初级与衍生现在想象一下在线订单系统环境中的事件源:您下了一个订单,并且能够在订单被确认、完成和发货时获得状态更新。就像银行余额一样,当前订单状态是通过查询给定订单的单个事件来计算的。下图描述了单个订单的事件流服务。如果你碰巧是一个单一订单服务的骄傲拥有者,那么你就可以开始了。但是如果你有多个订单服务呢?在那些经历了不止一个冲刺阶段的公司,往往会发生技术债务的累积。有时这种债务采取重复申请的形式。合并发生时,您会采用其他由于您无法控制的原因而无法立即停用或重写的应用程序。换言之,有时你会得到不止一个订单服务进入衍生事件来源!事件来源模式的观察方法试着想象一下为以下公司实施活动外包:卡博特湾侦探机构已经经营了20多年。他们最初是一家小型代理公司,主要从事临时业务,后来发展成为全球领先的在线背景调查供应商。为了遵守国际法和促进增长,他们收购了几家已经在海外活跃的公司,从而形成了技术资产的多样化组合。今天,他们的在线订购空间被分解成五种不同的服务,这些服务是用各种编程语言编写的。每个服务处理不同的地理区域,并且所有服务都是在不同的时间编写或获取的。他们最古老的订单服务已经有九年了,住在简历里,需要一个关于安吉拉·兰斯伯里的解释性舞蹈才能编译。这也是唯一一家经认证可在葡萄牙开展业务的订单服务。让我们以order created事件为例。在上面的场景中,我们必须更新所有五个服务以连接到Apache Kafka®,在每个服务内部的所有适当位置创建事件,然后将该事件生成到Kafka主题。如果您有维护遗留应用程序的经验,现在就开始努力吧。首先要考虑的是,是否可以从所有服务连接到Kafka。旧的服务可能与任何可用的api都不兼容。对于您希望退出的服务来说,将该服务升级到兼容是一项巨大的努力。此外,即使您确实设法从所有五个服务中生成事件,当您需要添加或更改模式时会发生什么情况?在当前的CI/CD世界中,必须将遗留应用程序合并到变更管理中可能是一个噩梦,尤其是当这种变更需要协调的多服务推送时。维持这样一个混合的环境可能是实现事件源的一个巨大障碍。这种情况就是衍生事件法的设计目的,也是你获得最大投资回报的地方。使用衍生事件源可以简化复杂的环境衍生事件源相当字面上是从已观察到的事件中派生事件。这与更常见的直接从发生事件的服务发出事件的做法不同。更改数据捕获(CDC)是当前最流行的事件派生源,尽管用户和应用程序日志也是有效的选项。如果您对更改数据捕获的更多细节感兴趣,请参阅Robin Moffatt的这篇优秀的博客文章:No more Silos:How to Integrated Your Databases with ApacheKafka and CDC。让我们看看如何使用派生事件源处理多订单服务。衍生事件来源可通过以下流程建模:观察创建源并定义要查找的内容查找/创建要观察的持久事件源;这可以是从应用程序写入的数据库、应用程序日志或包含需要观察的事件配置文件的任何其他源生成的更改数据定义事件配置文件:创建一组唯一的条件,可以应用这些条件来标识要观察的事件例如,为订单创建持久事件源:看看我们的订单服务后端商店。我们发现Order service1和orderservice5写入同一个Oracle数据库,而其余的服务使用MySQL。Oracle GoldenGate是一个产品,它允许我们为数据库中发生的每一个活动生成消息,包括数据库更新、插入和删除,我们都会得到它们。Debezium是一个类似的产品,可以与MySQL以及其他许多数据存储一起使用。以Oracle为例,我们设置了GoldenGate,现在可以访问数据库中发生的每一个事件。负责支持最老服务的主要开发人员盯着流入卡夫卡的更改数据消息,从支持一个古老应用程序的暴政中解脱出来后,她被汉密尔顿的原声音乐打断,惊动了几个旁观者和她的UPS女士。为MySQL设置Debezium也将遵循相同的过程,不过为了简洁起见,我们将继续关注Oracle服务。接下来,定义order created事件概要文件。订单服务1和订单服务5都使用同一个Oracle表来存储它们的订单。奇怪的是,这张桌子被命名为ORDERS。现在GoldenGate被设置为生成对Kafka的所有数据库更改,我们可以看看DB.订单主题,并查看ORDERS表中发生的每个插入、更新和删除操作。尽管两个服务都写入同一个表,但它们的写入方式不同。换言之,我们需要查找的配置文件,以了解是否已创建新订单,对于OrderService1和OrderService5是不同的。发生这种情况有很多原因,最简单的原因是技术差异一个服务可能使用Java持久化API并一次提交所有更改,而另一个服务可能插入新行,然后执行更新。对于我们的目标服务来说,上述事实确实如此。以下用于检测何时创建新订单的事件配置文件定义如下:订购服务1:在上收到的任何消息DB.订单具有插入操作类型的主题,其中订单号不为空。GoldenGate信息:{"表":DB.订单","op_type":"I","op_ts":"2019-10-16 17:34:20.000534","current tus":"2019-10-16 17:34:21.000000","pos":"0000000149000018018","之后":{"ORDER_NUM":8675309,…"更多列":""}}订购服务5:在上收到的任何消息DB.订单具有更新操作类型和订单号的主题在更新之前为null,在更新之后为not null。GoldenGate信息:{"表":DB.订单","op_type":"U","op_ts":"2019-10-16 17:34:20.000534","current tus":"2019-10-16 17:34:21.000000","pos":"0000000149000018023","before":{"ORDER_NUM":null,…"MORE_COLUMNS":"},"after":{"ORDER_NUM":42,…"MORE_COLUMNS":""}}对于所有剩余的服务,我们可以创建事件概要文件,以便定义所有服务。现在消息来源已经准备好观察了,我们知道我们在寻找什么。下一步是将观察到的事件转换成我们需要的事件。转换转换就是将观察到的信息转换成需要的事件,并提供相关的细节有许多框架可以在转换步骤中使用。我个人最喜欢的是卡夫卡溪流。使用Kafka流作为转换工具,可以重新设置事件密钥、操纵时间,最重要的是,创建复杂的事件聚合。您还可以在一个轻量级Java库中获得一次语义,仅此一项就足以为许多用例提供提示。回到我们的示例,我们使用Kafka流创建一个新的中央事件服务,该服务使用DB.订单主题。由于订单服务之间没有任何依赖关系,因此可以使用以下流。同样,使用两个Oracle服务:从中创建名为baseOrderStream的KStreamDB.订单话题使用baseOrderStream作为源,创建orderservice1kstream,应用为orderService1事件概要文件确定的过滤器,并映射源消息以创建派生事件使用baseOrderStream作为源,创建OrderService5KStream,应用为orderService5事件概要文件确定的筛选器,并映射源消息以创建派生事件流程最终看起来像下面所示的光荣示例:KStreambaseOrderStream=builder.溪流(DB.订单, 与…一起消费(stringSerde,jsonSerde));KStreamorderService1=baseOrderStream.filter(isInsert).filter(hasNonNullOrderNumber).map((键,值)->键值.pair(值.路径("after").path("订单号").asText(),createOrderCreatedEvent(值,订单服务_1));KStreamorderService5=baseOrderStream.filter(isUpdate).filter(hasNewNonNullOrderNumber).map((键,值)->键值.pair(值.路径("after").path("订单号").asText(),createOrderCreatedEvent(值,订单服务?5));中心事件服务使用与Order service 1的事件配置文件相匹配的消息:在orders表中插入的行在Order_NUMBER字段中的值不为null。接下来,编写一个order created事件消息,其中包含关于新ord的相关细节

上一篇网站服务器_前沿数控腾讯云_限量秒杀

下一篇百度云_网站连接数据库_学生机

云市场知识本月排行

云市场知识精选