在过去的一年里,我一直是负责Wix的事件驱动消息基础设施(基于Kafka之上)的数据流团队的一员。该基础设施被 1400 多个微服务使用。...在 Wix,我们的MetaSite服务就是这种情况,它为 Wix 用户创建的每个站点保存了大量元数据,例如站点版本、站点所有者以及站点上安装了哪些应用程序-已安装的应用程序上下文。...在 Wix,我们将这些压缩主题用于内存中的 kv 存储,我们在应用程序启动时加载(使用)来自主题的数据。一个很好的好处(Redis 没有提供)是该主题仍然可以被其他想要获取更新的消费者使用。...在某些情况下,消费者和生产者之间可能会出现延迟,以防错误长时间持续存在。在这些情况下,有一个特殊的仪表板用于解锁和跳过我们的开发人员可以使用的消息。...在我们的示例中,Contacts Importer服务(在多个实例中)将使用带有索引的作业。每次完成处理某个作业时,它都需要使用 Job Completed事件更新 KV 存储。
在过去一年里,我一直是数据流团队的一员,负责Wix事件驱动的消息传递基础设施(基于 Kafka)。有超过 1400 个微服务使用这个基础设施。...在 Wix,我们的 MetaSite 服务就面临着这样的情况,它为 Wix 用户创建的每个站点保存了大量的元数据,比如站点版本、站点所有者以及站点上安装了哪些应用程序——已安装应用上下文(The Installed...Wix Events(供 Wix Users 管理事件传票和 RSVP)也可以使用 Bookings 的时区主题,并在一个国家因为夏令时更改时区时自动更新其内存 kv-store。...这将需要数据库上的悲观/乐观锁定,因为同一用户同一时间可能有多个订阅续期请求(来自两个单独的正在进行的请求)。...要了解更多信息,请观看我的视频“Kafka中的恰好一次语义”。 6.事件聚合 当你想知道整个批次的事件已经被消费时 在上半部分,我描述了在 Wix 将联系人导入到 Wix CRM 平台的业务流程。
在 Wix,我们的 MetaSite 服务就面临着这样的情况,它为 Wix 用户创建的每个站点保存了大量的元数据,比如站点版本、站点所有者以及站点上安装了哪些应用程序——已安装应用上下文(The Installed...这个服务被超过 100 万 RPM 的请求轰炸,它们需要获取站点元数据的不同部分。 从服务的各种 API 可以明显看出,它处理了客户端服务的太多不同的关注点。...在 Wix,我们将这些压缩主题用作内存中的 kv-store,我们在应用程序启动时加载(消费)来自主题的数据。这有一个 Redis 没有提供的好处,这个主题还可以被其他想要获得更新的用户使用。 ...Wix Events(供 Wix Users 管理事件传票和 RSVP)也可以使用 Bookings 的时区主题,并在一个国家因为夏令时更改时区时自动更新其内存 kv-store。...v=7O_UC_i1XY0 6事件聚合 当你想知道整个批次的事件已经被消费时 在上半部分,我描述了在 Wix 将联系人导入到 Wix CRM 平台的业务流程。后端包括两个服务。
,Wix 就经历过这类痛苦,有几次对建站工具修改代码时,意外的冲击到了网站服务功能,使所有的用户都受到了影响 后来Wix决定对架构进行服务化改造,把这两个功能拆分为不同的服务 改造过程漫长而复杂,在保持系统正常对外服务的同时...,把架构从一个单体改为100多个微服务,在技术构成上也改动很大,以 Scala,Jetty,Spring 为主 每个微服务都部署为一个单独应用,负责一个明确的职责,使用一个特定数据库,并且是无状态的,支持频繁部署...在初期,Wix有一个大型的Flash产品,包括了建站编辑器和Flash型站点,在2011年时改用了HTML5/Javascript结构,后来采用了React框架 Wix 的100多个微服务可以分为4个组...(1)Wix Public 负责对已经发布站点提供服务,技术构成为 Scala,Jetty,Spring,Mysql,用户创建的网站使用 React+JSON (2)Wix Editor 负责帮助用户创建网站...等,使用iframe整合第三方内容,并使用JS SDK 和 REST API 来突破iframe的限制 开发工具 Maven,Grunt,TeamCity 用于系统构建 使用 GitHub 的 Git
选用NoSQL数据库,经常是建立在其不实或者夸大的宣传,和对传统关系型数据库性能不佳的假定上。开发者在选择数据库时,会特别看重操作成本,以及稳定性和成熟性。...另外,本文也会提供给大家在MySQL中如此应用的参考。 当 用户点击一个链接到Wix网站时,他/她的浏览器会发送一个带有网站地址的HTTP请求给Wix的服务器。...在 Wix,我们发现,当我们“有创造性的”使用MySQL作为键值存储时,能够提供比上面提到的使用归一化数据模型或者其它大多数NoSQL数据库引擎更好 的性能。...如果字段在查询时不需要,则将其放到一个blob/text字段中(如JSON或者XML) 不要使用外键 设计你的模型,来确保查询时仅读取单独的一行 不要在表上使用alter命令。...修改表的命令引入了锁和停机时间,相反的,尝试使用实时迁移 当查询时: 使用主键或者索引查询记录 避免使用表连接 避免使用聚合函数 尽量在从库上执行较为复杂的查询(如BI,数据研究等),避免在master
本文基于前一篇文章已经建好的项目继续: 用 WiX 制作安装包:创建一个简单的 msi 安装包 添加 WixNetFxExtension 引用 在 msi 安装包项目的“Reference”上右键,“添加引用...虽然我们前面选择的 C:\Program Files (x86)\WiX Toolset v3.11\bin 看起来是个绝对路径,但实际上在 wixproj 项目里记录的是一个属性引用,因此可以很容易在团队成员之间共享和跨版本迁移...小提示 MSI 包只能判断 .NET Framework 是否存在,无法在不存在时执行 .NET Framework 的安装操作。...在 WiX 的配置文件 wxs 里,引用一个属性的方法是使用 元素。...下图是我魔改了 DEMO 后在 Windows 11 上的截图(放上来就是为了平衡美感的): 不过为了真实性,我还是找了台 Windows 7 纯净系统来测试: 如果点击“OK”,安装程序将直接退出
Jetpack Compose 使用更少的代码、强大的工具和直观的 Kotlin API 简化并加快了 Android 上的界面开发。...新建 Compose 项目 你可以更新到最新的 idea 2020.3,或者从 Github[3] 上拉取它的模板。这里我选择使用 idea。...具体文档可以参考官方 JetBrains/compose-jb[5] 仓库 打包 开发完成的应用可以直接打包为平台可执行文件。我使用的是 windows 平台。...然后将文件命名为 wix311.zip 放在 build/wixToolset 下,重新运行 packageMsi 。 当你认为你要编译成功时, Gradle 再次报错。...图标显示问题,在我这里显示一个黑框框。 但是,jvm 上的 GUI 技术有了新的发展未尝不是一件好事,可以一处编写,多端运行。
WiX 本身很强大,使用本来也没那么难。奈何 WiX 3 的官方文档可读性极差且长期不更新,于是新手在使用 WiX 制作安装包时极容易出问题,导致制作的安装包各种行为不正常。...虽然我写了一系列的 WiX 安装包入门教程来帮助大家避坑,还写了一些常见问题的解决方法,但大家遇到的问题总会比我整理的要多。所以教大家 查看日志 很多时候,看日志能帮助你快速找到原因。...以下是查看日志的方法: 如何查看用 WiX 制作的安装包的日志 Debugger.Launch() 如果安装过程能执行到你编写的 C# 代码中,那么可以在入口处加上 Debugger.Launch()...对比测试 如果出现的问题日志上说明不明显,代码也没执行到自定义引导程序部分,那么可以考虑对照正常状态的 WiX 项目替换组件调查。这可以快速将问题范围定位到某个文件甚至是某行代码上。...本文会经常更新,请阅读原文: https://blog.walterlv.com/post/how-to-debug-wix-burn-installer.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验
如果你没有完全按照我教程中提供的步骤来执行(例如你用了自己的项目名,却在复制关键代码时没有改成自己的),那么极有可能在最终生成安装包后无法运行。...本文记录一些跟着教程做时可能遇到的常见问题,帮助你在遇到问题后能及时找到解决方案。如果看完还没有解决你的问题,欢迎留言探讨,也可以尝试 调试 WiX 制作的安装包。...无法启动 exe 安装包 用 WiX Burn 制作托管安装包:出现 0x80070002 错误 用 WiX Burn 制作托管安装包:出现 0x80131508 错误 .NET Framework 始终会安装...getting-started-with-wix-toolset-the-pit-you-might-step-on.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。...欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://blog.walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。
“Reference”上右键,“添加引用…”; 在打开的“Add Reference”窗口中确保选中的是“浏览”标签,然后在查找范围中找到 Wix Toolset 的安装目录(如果没改,那么应该在 C:...根据 WiX 3 已开源的源码我们可以得知,本地安装 .NET Framework 时选取的目录为 redist\。...: 解释一下: 我创建了一个“Assets”文件夹用于存放刚下载好的 .NET Framework 的离线安装包(为了避免读者在概念上产生混淆,我刻意避开使用 redist 这个名字,以示说明解决方案内的文件夹结构仅为开发文件夹结构...(WiX 中定义这些文件名是全大写的,下载下来的是全小写的,虽然实际上大小写并不影响)。...,以避免陈旧错误知识的误导,同时有更好的阅读体验。
创建 WiX MSI 项目 在解决方案上右键,“添加”->“新建项目…”,然后在“添加新项目”窗口中搜索“WiX”,找到“Setup Project for WiX v3”。...注意,选择的模板要注意这些要点: 图标上标记了“wix”,标签上标记了“WiX” 模板简介中说明这是在创建“MSI”文件 引用目标项目 在 WiX MSI 项目(在本教程中,我取的名字为 Walterlv.Installer.Msi...因为如果你不填,编译会报错: ▲ 缺少厂商信息 这个信息在 Product 标签的特性上更改: 1 2 3 4 5 6 7 8 <Product Id="*" -- Name="Walterlv.Installer.Msi...另外,觉得不错可以提交一下代码,方便后续章节的学习。 附源代码 附上必要的源码,避免你在阅读教程时因模板文件的版本差异造成一些意料之外的问题。...,以避免陈旧错误知识的误导,同时有更好的阅读体验。
的总结: 以下为译文 Wix围绕扩展性上的努力可以用“定制化”三个字来总结——在仔细地审视了系统之后,以高可用和高性能为目标对系统进行了改善。...这个过程具备自我修复的特性。如果这里存在一个错误,当用户下一次更新其网站内容时,所有未完成的修改会被重新上传。 停用文件会做垃圾收集处理。...因为都使用了API,只需要改变实现方式就可以在数周内跨云服务供应商进行迁移。 在Google Compute Engine中遭遇失败。当他们从数据中心迁移到GCE时,很快就受到了谷歌云服务的限制。...公用部分丢失的情况:当负载均衡器配置只进行一半发生这个问题时,所有公共服务器都会丢失。或者当部署错误版本时,服务器则会抛出故障。...学到的知识 识别业务的关键路劲和关注点,仔细了解产品运行的方式,开发使用场景,尽力让你工作物有所值。 使用多云和多数据中心。为了更好的可用性,在关键路径上建立冗余。
创建 WiX EXE 项目 在解决方案上右键,“添加”->“新建项目…”,然后在“添加新项目”窗口中搜索“WiX”,找到“Bootstrapper Project for WiX v3”。...注意,选择的模板要注意这些要点: 图标上标记了“wix”,标签上标记了“WiX” 模板简介中说明这是在创建“EXE”文件 创建完后,记得去项目属性里改一下输出的文件名。...关于设置 MSI 和 EXE 安装包的 UpgradeCode 的更多细节,可以阅读我的另一篇博客: MSI 和 EXE 的 UpgradeCode 应该设置成相同还是不同?...▲ 卸载包 另外,觉得不错可以提交一下代码,方便后续章节的学习。 附源代码 附上必要的源码,避免你在阅读教程时因模板文件的版本差异造成一些意料之外的问题。...,以避免陈旧错误知识的误导,同时有更好的阅读体验。
本系列教程所需的所有源代码都已在 GitHub 上开源,你可以克隆下来学习和试验,也可以选择性忽略。...如果你在阅读教程时发现有些步骤不对(或者按步骤完成后依然无法跑通,或者遇到了各种奇葩问题),欢迎在评论区留言,或加我的 QQ 交流(450711383)。...解决方案 使用 WiX 创建一个简单的 msi 安装包 为 WiX 制作的 msi 安装包添加 .NET Framework 环境检查 使用 WiX 创建一个简单的 exe 安装包 为 WiX 制作的...前置会始终安装,即使目标电脑已经自带或装好 用 WiX Burn 制作托管安装包:出现 0x80070002 错误 用 WiX Burn 制作托管安装包:出现 0x80131508 错误 0x800b0109...://blog.walterlv.com/post/getting-started-with-wix-toolset.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。
点击中间最大的那个按钮“Install”即可开始安装: 安装完成之后,在中间的按钮上它会提示可以安装 Visual Studio 集成: 点击这个按钮后可安装 Visual Studio 插件。...你也可以考虑将 WiX 安装到你的某个 Visual Studio 项目中,这样打开此项目的所有开发人员在还原 NuGet 包后都自动拥有了 WiX 全套工具集。...使用 NuGet 的方式是按项目安装的,仅此解决方案(sln)有效。安装了此 NuGet 包的项目将可完全使用 WiX 工具集(因为包里包含了构建安装包需要的 MSBuild 属性)。... 如果感兴趣通过 NuGet 的方式来安装 WiX Toolset,我可以再写一篇专门使用此方式安装并在团队所有人电脑上可直接构建安装包的博客...,以避免陈旧错误知识的误导,同时有更好的阅读体验。
然而使用 WiX 的 NuGet 包有额外的好处,可以使得团队成员无需每人单独安装 Wix 工具集即可完整编译安装包。不过这涉及到一些 NuGet 相关的高级操作,我在其他博客里有说到。...为了保证教程依然便于入门,所以我使用单独安装 WiX 工具集的方式来讲解。 如果大家感兴趣使用 NuGet 的方式来完成整个打包项目的构建,替代现在单独安装的方式,我可以单独再写一篇高级教程。 2....在最终生成的捆绑包中,这个配置文件必须严格使用此名称。...请回到目录: WiX Toolset 安装包制作入门教程 运行效果: 关闭这个界面后,安装程序也将退出。 附源代码 附上必要的源码,避免你在阅读教程时因模板文件的版本差异造成一些意料之外的问题。...,以避免陈旧错误知识的误导,同时有更好的阅读体验。
Dev Hackathon: Wix Studio上的可复用创意Web开发领域持续演进,开发工具与平台不断革新。Wix Studio作为新兴平台,正在举办一场激动人心的Dev Hackathon活动。...黑客松核心内容开发挑战活动围绕两大技术挑战展开:Wix Blocks应用开发:使用独立编辑器创建包含原生Wix组件的全栈应用程序,要求实现代码与组件的无缝集成Wix Studio模板设计:构建可复用的网站模板...运行时间保障)完整的开发文档和技术支持资源参与要求参赛者需在2024年9月9日前提交:项目网站链接(展示应用/模板)Wix Blocks应用或模板直接访问链接技术演示视频(Wix提供全方位技术支持:Merge开发者社区技术交流频道Wix Studio Academy互动式教程应用商业化指导(通过Wix应用市场)完整的API文档和开发指南通过参与本次黑客松...,开发者可深入掌握Wix Studio的专业级开发能力,突破传统拖拽式建站工具的认知局限。
本文介绍安装 WiX Toolset 的两款 Visual Studio 插件,以便你能直接在 Visual Studio 里完整整套安装包的制作,无需使用命令行工具。...方法是: 启动 Visual Studio 2019,选“继续但无需代码”; 选菜单“扩展”->“管理扩展”; 在“联机”页中搜索“WiX”,找到“Wix Toolset Visual Studio 2019...Extension”,然后点“下载”; 接下来,关闭所有已经打开的 Visual Studio,等待自动弹出的插件安装界面; 在 VSIX Installer 界面中,点击“Modify”以应用插件的安装...如果你有自己的插件需要升级到支持 VS2022,可阅读我的另一篇博客: Visual Studio 2022 出来啦!...,以避免陈旧错误知识的误导,同时有更好的阅读体验。
在 WiX 安装包制作时,Product.wxs 文件中的 Product 标签中存在一些属性,这些属性应该如何设置才是比较合适的呢?...本文是对我另一篇入门教程博客的一点补充: 用 WiX 制作安装包:创建一个简单的 msi 安装包 Id、Version Id:产品 Id。 Version:产品版本。...特别把这几种升级类型的英文名称拿出来说,是因为我们在 Product.wxs 中配置升级策略时会使用到这些名称。了解这些升级方式有助于我们写出符合预期的升级策略。...双击 msi 文件时,Windows Installer 将弹出错误框: UpgradeCode 对于同一个产品,无论其产品 Id、Version 如何变化,都应该保持 UpgradeCode 不变,...,以避免陈旧错误知识的误导,同时有更好的阅读体验。
Wix是支持移动端的,并且它是自适应的,也就说当你设计好网页的时候,你可以花费很少的调整就生成移动端的网页。 Wix内置丰富的特效,你可以非常方便地为网页添加各种动效,让网页看起来更活泼。...当使用 Squarespace 创建网站时,你还可以获得免费的无限托管、顶级的安全性和可靠的资源。你还可以通过电子邮件、实时聊天或加入实时网络研讨会获得全天候的个性化支持。...它对电子商务进行了特殊的支持,使用多合一电子商务平台来建立的商店支持在线销售。同时,你也可以让您的产品在您的在线商店、Facebook、Instagram 和亚马逊上可用。...Elementor Elementor 与此列表中的其他所有内容不同,原因很简单:它不是独立的站点构建器。它是一个 WordPress 插件,它需要一个 WordPress 站点才能运行。...它的主要技术栈是VUE,代码在码云上开源。