首页 文章 精选 留言 我的

精选列表

搜索[VMware替代],共10000篇文章
优秀的个人博客,低调大师

一个 WordPress 国产替代版,JPress v4.1.2 发布

JPress 是一个使用 Java 开发的类似 WordPress 的产品,具有完善的模板和插件功能,并在此基础上新增了在线商城、会员中心以及和微信深度整合的功能。 到目前为止, 已经有10w+ 网站使用JPress 进行驱动,其中包括多个政府机构,200+上市公司,中科院、红+字会等。然而,JPress不仅仅只是建站,我们认为不管世界的互联网发生什么样的变化,APP、小程序都需要有网站支持,这才是我们的切入点。 JPress v4.0.9更新内容如下: 优化:升级 Layer 到最新版本 优化:优化产品,修改 Slug 为 "固定链接" 优化:后台菜单的 id 不显示的问题 优化:升级 Jboot 到最新版本 修复:固定链接可以填写纯数字的问题 修复:重命名类名 stringSplit 为 StringSplitDirective 修复:会员设置无法弹出选择 layer 的问题 修复:后台支付相关的页面,个别错位的问题 修复:在某些场景下,用户退出登录出现csrf token 错误的问题 说的再多,不如亲自一试。 在 阿里云(腾讯云)上一键通过 8080 端口运行 wget https://gitee.com/JPressProjects/jpress/raw/master/install.sh && bash install.sh 8080 一键运行视频教程:http://www.ketang8.com/course/study?chapterId=184 通过 Docker 上运行 curl -O https://gitee.com/JPressProjects/jpress/raw/master/docker-compose.yml && docker-compose up -d 通过 Eclipse 或者 Idea 等开发工具运行 1、在本地安装好 Java、Maven 等开发环境 2、将源码下载、并导入 eclipse 或者 idea 3、在项目的根目录,执行mvn clean install命令进行编译 4、在开发工具,右键运行starter/src/main/java/io.jpress.Starter下的main()方法 5、通过浏览器访问http://127.0.0.1:8080,进行自动安装 交流 官网:http://www.jpress.io 文档:http://doc.jpress.io 论坛社区:点击这里 插件列表:点击这里 模板列表:点击这里

优秀的个人博客,低调大师

一个 WordPress 国产替代版,JPress v4.1.1 发布

JPress 是一个使用 Java 开发的类似 WordPress 的产品,具有完善的模板和插件功能,并在此基础上新增了在线商城、会员中心以及和微信深度整合的功能。 到目前为止, 已经有10w+ 网站使用JPress 进行驱动,其中包括多个政府机构,200+上市公司,中科院、红+字会等。然而,JPress不仅仅只是建站,我们认为不管世界的互联网发生什么样的变化,APP、小程序都需要有网站支持,这才是我们的切入点。 JPress v4.0.9更新内容如下: 新增:后台和用户中心菜单的启用配置功能,可以通过其关闭某些菜单 优化:文章分类、文章、产品分类、产品和页面的模板选择 修复:微信页面无法正常支付的问题 修复:在某些情况下,非完整的 html 无法原样输出的问题 修复:微信小程序 API 应该是当 unioinid 不为空时才会去写入 unioinid,感谢@喜欢吃豆包 修复:第三方登录 或者 微信授权无法进行登录的问题 说的再多,不如亲自一试。 在 阿里云(腾讯云)上一键通过 8080 端口运行 wget https://gitee.com/JPressProjects/jpress/raw/master/install.sh && bash install.sh 8080 一键运行视频教程:http://www.ketang8.com/course/study?chapterId=184 通过 Docker 上运行 curl -O https://gitee.com/JPressProjects/jpress/raw/master/docker-compose.yml && docker-compose up -d 通过 Eclipse 或者 Idea 等开发工具运行 1、在本地安装好 Java、Maven 等开发环境 2、将源码下载、并导入 eclipse 或者 idea 3、在项目的根目录,执行mvn clean install命令进行编译 4、在开发工具,右键运行starter/src/main/java/io.jpress.Starter下的main()方法 5、通过浏览器访问http://127.0.0.1:8080,进行自动安装 交流 官网:http://www.jpress.io 文档:http://doc.jpress.io 论坛社区:点击这里 插件列表:点击这里 模板列表:点击这里

优秀的个人博客,低调大师

一个 WordPress 国产替代版,JPress v4.1.0 发布

JPress 是一个使用 Java 开发的类似 WordPress 的产品,具有完善的模板和插件功能,并在此基础上新增了在线商城、会员中心以及和微信深度整合的功能。 到目前为止, 已经有10w+ 网站使用JPress 进行驱动,其中包括多个政府机构,200+上市公司,中科院、红+字会等。然而,JPress不仅仅只是建站,我们认为不管世界的互联网发生什么样的变化,APP、小程序都需要有网站支持,这才是我们的切入点。 JPress v4.0.9更新内容如下: 优化:升级 Jboot、Jfinal 等到最新版本 修复:文章输入多个标签的时候,存入数据库保存的标签错误的问题 修复:文章、商品新建时,若保存两次会导致创建日期被清空的问题 修复:页面二次编辑时,状态设置错误的问题 说的再多,不如亲自一试。 在 阿里云(腾讯云)上一键通过 8080 端口运行 wget https://gitee.com/JPressProjects/jpress/raw/master/install.sh && bash install.sh 8080 一键运行视频教程:http://www.ketang8.com/course/study?chapterId=184 通过 Docker 上运行 curl -O https://gitee.com/JPressProjects/jpress/raw/master/docker-compose.yml && docker-compose up -d 通过 Eclipse 或者 Idea 等开发工具运行 1、在本地安装好 Java、Maven 等开发环境 2、将源码下载、并导入 eclipse 或者 idea 3、在项目的根目录,执行mvn clean install命令进行编译 4、在开发工具,右键运行starter/src/main/java/io.jpress.Starter下的main()方法 5、通过浏览器访问http://127.0.0.1:8080,进行自动安装 交流 官网:http://www.jpress.io 文档:http://doc.jpress.io 论坛社区:点击这里 插件列表:点击这里 模板列表:点击这里

优秀的个人博客,低调大师

一个 WordPress 国产替代版,JPress v4.0.9 发布

JPress 是一个使用 Java 开发的类似 WordPress 的产品,具有完善的模板和插件功能,并在此基础上新增了在线商城、会员中心以及和微信深度整合的功能。 到目前为止, 已经有10w+ 网站使用JPress 进行驱动,其中包括多个政府机构,200+上市公司,中科院、红+字会等。然而,JPress不仅仅只是建站,我们认为不管世界的互联网发生什么样的变化,APP、小程序都需要有网站支持,这才是我们的切入点。 JPress v4.0.9更新内容如下: 新增:文章编辑新增上传视频的功能 新增:新增 html2wxml 的 api 及其文档 优化:更新文章、产品、页面的 api 以及文档 优化:完善产品、购物车、优惠券的相关 API 修复:文章编辑器 标题 和 加粗无效的问题 修复:在 JPress 导入 eclipse 后,在某些情况下得到的资源路径错误的问题 修复:Menu.isUrlEquals 在二级目录下可能判断不正确的问题 修复:小程序用户未登录时无法获取option信息,提示信息有误 修复:关闭验证码后,后台登录验证码输入框不显示的问题 说的再多,不如亲自一试。 在 阿里云(腾讯云)上一键通过 8080 端口运行 wget https://gitee.com/JPressProjects/jpress/raw/master/install.sh && bash install.sh 8080 一键运行视频教程:http://www.ketang8.com/course/study?chapterId=184 通过 Docker 上运行 curl -O https://gitee.com/JPressProjects/jpress/raw/master/docker-compose.yml && docker-compose up -d 通过 Eclipse 或者 Idea 等开发工具运行 1、在本地安装好 Java、Maven 等开发环境 2、将源码下载、并导入 eclipse 或者 idea 3、在项目的根目录,执行mvn clean install命令进行编译 4、在开发工具,右键运行starter/src/main/java/io.jpress.Starter下的main()方法 5、通过浏览器访问http://127.0.0.1:8080,进行自动安装 交流 官网:http://www.jpress.io 文档:http://doc.jpress.io 论坛社区:点击这里 插件列表:点击这里 模板列表:点击这里

优秀的个人博客,低调大师

一个 WordPress 国产替代版,JPress v4.0.8 发布

JPress 是一个使用 Java 开发的类似 WordPress 的产品,具有完善的模板和插件功能,并在此基础上新增了在线商城、会员中心以及和微信深度整合的功能。 到目前为止, 已经有10w+ 网站使用JPress 进行驱动,其中包括多个政府机构,200+上市公司,中科院、红+字会等。然而,JPress不仅仅只是建站,我们认为不管世界的互联网发生什么样的变化,APP、小程序都需要有网站支持,这才是我们的切入点。 JPress v4.0.8更新内容如下: 新增:插件新增 @Path() @GetMapping() @PostMapping() 的支持 新增:插件新增 @ActionKey() 注解配置相对路径配置的支持 优化:升级 JFinal 和 Jboot 到最新版本 优化:优化模板的后台设置页面 优化:修改带有错别字的方法名 优化:验证码输入框添加 autocomplete="off" 属性 修复:插件开发时,在某些情况下后台可能无法显示插件菜单的问题 修复:验证码在某些情况下出现异常的问题 文档:完善微信小程序用户登录、注册、获取手机号的相关 API 及其文档 文档:完善模板开发的相关文档 文档:完善微信的相关文档 文档:完善用户的相关文档 文档:完善设置的相关文档 说的再多,不如亲自一试。 在 阿里云(腾讯云)上一键通过 8080 端口运行 wget https://gitee.com/JPressProjects/jpress/raw/master/install.sh && bash install.sh 8080 通过 Docker 上运行 curl -O https://gitee.com/JPressProjects/jpress/raw/master/docker-compose.yml && docker-compose up -d 通过 Eclipse 或者 Idea 等开发工具运行 1、在本地安装好 Java、Maven 等开发环境 2、将源码下载、并导入 eclipse 或者 idea 3、在项目的根目录,执行mvn clean install命令进行编译 4、在开发工具,右键运行starter/src/main/java/io.jpress.Starter下的main()方法 5、通过浏览器访问http://127.0.0.1:8080,进行自动安装 交流 官网:http://www.jpress.io 文档:http://doc.jpress.io 论坛社区:点击这里 插件列表:点击这里 模板列表:点击这里

优秀的个人博客,低调大师

一个 WordPress 国产替代版,JPress v4.0.7 发布

JPress 是一个使用 Java 开发的类似 WordPress 的产品,具有完善的模板和插件功能,并在此基础上新增了在线商城、会员中心以及和微信深度整合的功能。 到目前为止, 已经有10w+ 网站使用JPress 进行驱动,其中包括多个政府机构,200+上市公司,中科院、红+字会等。然而,JPress不仅仅只是建站,我们认为不管世界的互联网发生什么样的变化,APP、小程序都需要有网站支持,这才是我们的切入点。 JPress v4.0.7更新内容如下(包含 v4.0.6): 新增:模板编辑、文章编辑、页面编辑、产品编辑 的快捷键保存功能 新增:文章和产品搜索引擎的高亮显示... 新增:文章搜索引擎和产品搜索引擎切换后,自动重建搜索引擎的索引功能 优化:一键安装脚本,方便阿里云和腾讯云等服务器进行一键安装 优化:升级 Jboot JFinal 到最新版本 优化:日志框架由 logback 切换到 log4j2,性能更高 优化:重构 product-provider 模块的包结构 修复:文章和产品搜索引擎切换到 es 的时候可能出错的问题 修复:setting_v4.html 不能使用的问题 修复:ElasticSearch 在 Mysql8 下更新文章会导致类型出错的问题 修复:开启文章 Lucene 搜索引擎后,导致 elastic 包冲突的而造成 NoClassDefFoundError 的异常问题 修复:开启扁平化 URL 后,个别菜单可能无法正常高亮的问题 文档:完善系统配置的 Http API 相关文档和单元测试用例 文档:完善用户 Http API 相关的文档和单元测试用例 文档:完善文章相关 Http API 相关的文档和单元测试用例 文档:完善 API 签名算法的相关文档 说的再多,不如亲自一试。 在 阿里云(腾讯云)上一键通过 8080 端口运行 wget https://gitee.com/JPressProjects/jpress/raw/master/install.sh && bash install.sh 8080 通过 Docker 上运行 curl -O https://gitee.com/JPressProjects/jpress/raw/master/docker-compose.yml && docker-compose up -d 通过 Eclipse 或者 Idea 等开发工具运行 1、在本地安装好 Java、Maven 等开发环境 2、将源码下载、并导入 eclipse 或者 idea 3、在项目的根目录,执行mvn clean install命令进行编译 4、在开发工具,右键运行starter/src/main/java/io.jpress.Starter下的main()方法 5、通过浏览器访问http://127.0.0.1:8080,进行自动安装 交流 官网:http://www.jpress.io 文档:http://doc.jpress.io 论坛社区:点击这里 插件列表:点击这里 模板列表:点击这里

优秀的个人博客,低调大师

一个 WordPress 国产替代版,JPress v4.0.5 发布

JPress 是一个使用 Java 开发的类似 WordPress 的产品,具有完善的模板和插件功能,并在此基础上新增了在线商城、会员中心以及和微信深度整合的功能。 到目前为止, 已经有10w+ 网站使用JPress 进行驱动,其中包括多个政府机构,200+上市公司,中科院、红+字会等。然而,JPress不仅仅只是建站,我们认为不管世界的互联网发生什么样的变化,APP、小程序都需要有网站支持,这才是我们的切入点。 JPress v4.0.5更新内容如下: 优化:升级 Jboot 到 v3.9.18 最新版本 优化:获取当前页面的分页页码的代码 修复:用户中心非管理员账户无法查看内容和投稿的问题 修复:calmlog 模板的页面评论会产生 2 此评论的问题 修复:文章页面的评论 pageNumber 获取错误的问题 修复:用户注册时可能出现返回 json 内容,而未跳转登录页面的问题 说的再多,不如亲自一试。 在 Linux 上一键运行 wget https://gitee.com/JPressProjects/jpress/raw/master/install.sh && bash install.s 通过 Docker 上运行 curl -O https://gitee.com/JPressProjects/jpress/raw/master/docker-compose.yml && docker-compose up -d 通过 Eclipse 或者 Idea 等开发工具运行 1、在本地安装好 Java、Maven 等开发环境 2、将源码下载、并导入 eclipse 或者 idea 3、在项目的根目录,执行mvn clean install命令进行编译 4、在开发工具,右键运行starter/src/main/java/io.jpress.Starter下的main()方法 5、通过浏览器访问http://127.0.0.1:8080,进行自动安装 交流 官网:http://www.jpress.io 文档:http://doc.jpress.io 论坛社区:点击这里 插件列表:点击这里 模板列表:点击这里

优秀的个人博客,低调大师

一个 WordPress 国产替代版,JPress v4.0.4 发布

JPress 是一个使用 Java 开发的类似 WordPress 的产品,具有完善的模板和插件功能,并在此基础上新增了在线商城、会员中心以及和微信深度整合的功能。 到目前为止, 已经有10w+ 网站使用JPress 进行驱动,其中包括多个政府机构,200+上市公司,中科院、红+字会等。然而,JPress不仅仅只是建站,我们认为不管世界的互联网发生什么样的变化,APP、小程序都需要有网站支持,这才是我们的切入点。 JPress v4.0.4 更新内容如下: 新增:articles 路径的支持,用于渲染 "所有文章" 新增:products 路径的支持,用于渲染 "所有产品" 优化:增强文章、产品以及分类的固定连接支持 "-" 字符 优化:产品分类指令 productCategoryList 修改为 allProductCategories 优化:移除 AddonClassPath 的定义,Jboot 已经解决了动态加载的日志问题 优化:删除无用代码、重构 Service 的方法名称、移动 UrlUtils 的类到 utils 包下 优化:弹出的 layer 有小滚动条的问题 优化:安装时,某些 UI 细节错位的问题 优化:开启伪静态后,若没有填写后缀,默认后缀为 .html 优化:评论框以及前台导航菜单的样式细节 修复:后台商品编辑时无法显示最近标签的问题 修复:用户登录页面在某些情况下不跳转用户中心的问题 修复:用户中心下拉的购物车列表的产品无法点击的问题 修复:用户中心里,用户无法对产品评论进行删除的问题 修复:当开启扁平化 URL 后,文章详情、产品详情和页面的评论分页 URL 不正确的问题 修复:文章 tag 的 url 错误的问题 修复:在 tomcat 二级目录下,登录的验证码不能正确显示的问题 修复:后台的某些菜单无法显示的问题 修复:后台开启 扁平化 URL 不起作用的问题 修复:文章中 git 路径错误的问题 修复:设置伪静态后缀后,重启失效的问题 修复:后台启用第三方登录后,默认登录页面 UI 错位的问题 修复:自定义后台登录地址时,后台无法登录的问题 修复:git 上还保存着大写的 AdminLTE.min.css 的问题 修复:JPress初始化时可能的一些安全问题 修复:某些页面出现 js 错误的问题 修复:docker-compose.yml 版本号错误的问题 说的再多,不如亲自一试。 在 Linux 上一键运行 wget https://gitee.com/JPressProjects/jpress/raw/master/install.sh && bash install.s 通过 Docker 上运行 curl -O https://gitee.com/JPressProjects/jpress/raw/master/docker-compose.yml && docker-compose up -d 通过 Eclipse 或者 Idea 等开发工具运行 1、在本地安装好 Java、Maven 等开发环境 2、将源码下载、并导入 eclipse 或者 idea 3、在项目的根目录,执行mvn clean install命令进行编译 4、在开发工具,右键运行starter/src/main/java/io.jpress.Starter下的main()方法 5、通过浏览器访问http://127.0.0.1:8080,进行自动安装 交流 官网:http://www.jpress.io 文档:http://doc.jpress.io 论坛社区:点击这里 插件列表:点击这里 模板列表:点击这里

优秀的个人博客,低调大师

Zorin OS 15 Lite 发布,作为Windows 7的替代品

Zorin OS社区宣布,Zorin OS 15 Lite版已全面上市,该版本基于Xfce进行了优化,可在非常老的计算机上比Windows 7更快地运行。ZorinOS 15 Lite基于Canonical最新长期支持的Ubuntu18.04(Bionic Beaver)操作系统系列。 在新功能的添加方面,Zorin OS 15 Lite发行版的亮点包括桌面的刷新和精致外观,以及带有精美动画,六种颜色变体以及明暗模式的新颖,最小,简单和更受欢迎的主题。 同时,Zorin OS 15 Lite还具有内置的Snap,Flatpak和Flathub支持;新的Notifications Indicator带有“请勿打扰”选项,Linux 5.0内核系列,以及来自Ubuntu 18.04 LTS的大量幕后改进以及最新软件和安全更新。 官方建议:如果用户使用的是Windows 7,建议其在2020年1月之前进行Zorin OS的安装。 软件中心 文件浏览器 自动主题 计算器 Zorin OS 15 Lite 下载地址:https://linux.softpedia.com/get/System/Operating-Systems/Linux-Distributions/Zorin-OS-Lite-63978.shtml Zorin OS 15 Education Lite下载地址:https://linux.softpedia.com/get/System/Operating-Systems/Linux-Distributions/Zorin-OS-Educational-Lite-72221.shtml 详细信息:https://news.softpedia.com/news/zorin-os-15-lite-released-as-a-windows-7-replacement-based-on-ubuntu-18-04-lts-528245.shtml

优秀的个人博客,低调大师

【微服务】分布式事务的实现方法及替代方案

这两天正在研究微服务架构中分布式事务的处理方案, 做一个小小的总结, 作为备忘. 如有错误, 欢迎指正! 概念澄清 事务补偿机制: 在事务链中的任何一个正向事务操作, 都必须存在一个完全符合回滚规则的可逆事务. CAP理论: CAP(Consistency, Availability, Partition Tolerance), 阐述了一个分布式系统的三个主要方面, 只能同时择其二进行实现. 常见的有CP系统, AP系统. 幂等性: 简单的说, 业务操作支持重试, 不会产生不利影响. 常见的实现方式: 为消息额外增加唯一ID. BASE(Basically avaliable, soft state, eventually consistent): 是分布式事务实现的一种理论标准. 柔性事务 vs. 刚性事务 刚性事务是指严格遵循ACID原则的事务, 例如单机环境下的数据库事务. 柔性事务是指遵循BASE理论的事务, 通常用在分布式环境中, 常见的实现方式有: 两阶段提交(2PC), TCC补偿型提交, 基于消息的异步确保型, 最大努力通知型. 通常对本地事务采用刚性事务, 分布式事务使用柔性事务. 最佳实践 先上结论, 再分别介绍分布式事务的各种实现方式. 如果业务场景需要强一致性, 那么尽量避免将它们放在不同服务中, 也就是尽量使用本地事务, 避免使用强一致性的分布式事务. 如果业务场景能够接受最终一致性, 那么最好是使用基于消息的最终一致性的方案(异步确保型)来解决. 如果业务场景需要强一致性, 并且只能够进行分布式服务部署, 那么最好是使用TCC方案而不是2PC方案来解决. 注意: 以下每种方案都有不同的适用场合, 需要根据实际业务场景来选择. 两阶段提交(2PC) 两阶段提交(Two Phase Commit, 2PC), 具有强一致性, 是CP系统的一种典型实现. 两阶段提交, 常见的标准是XA, JTA等. 例如Oracle的数据库支持XA. 下图是两阶段提交的示意图: 图的上半是两阶段提交成功的演示, 下半是两阶段提交失败的演示. 关于两阶段提交网上有很多经典的讲解, 这里就不细说了 缺点 两阶段提交中的第二阶段, 协调者需要等待所有参与者发出yes请求, 或者一个参与者发出no请求后, 才能执行提交或者中断操作. 这会造成长时间同时锁住多个资源, 造成性能瓶颈, 如果参与者有一个耗时长的操作, 性能损耗会更明显. 实现复杂, 不利于系统的扩展, 不推荐. TCC (Try-Confirm-Cancle) TCC, 是基于补偿型事务的AP系统的一种实现, 具有最终一致性. 下面以客户购买商品时的付款操作为例进行讲解: Try: 完成所有的业务检查(一致性),预留必须业务资源(准隔离性); 体现在本例中, 就是确认客户账户余额足够支付(一致性), 锁住客户账户, 商户账户(准隔离性). Confirm: 使用Try阶段预留的业务资源执行业务(业务操作必须是幂等的), 如果执行出现异常, 要进行重试. 在这里就是执行客户账户扣款, 商户账户入账操作. Cancle: 释放Try阶段预留的业务资源, 在这里就是释放客户账户和商户账户的锁; 如果任一子业务在Confirm阶段有操作无法执行成功, 会造成对业务活动管理器的响应超时, 此时要对其他业务执行补偿性事务. 如果补偿操作执行也出现异常, 必须进行重试, 若实在无法执行成功, 则事务管理器必须能够感知到失败的操作, 进行log(用于事后人工进行补偿性事务操作或者交由中间件接管在之后进行补偿性事务操作). 优点 对比与前面提到的两阶段提交法, 有两大优势: TCC能够对分布式事务中的各个资源进行分别锁定, 分别提交与释放, 例如, 假设有AB两个操作, 假设A操作耗时短, 那么A就能较快的完成自身的try-confirm-cancel流程, 释放资源. 无需等待B操作. 如果事后出现问题, 追加执行补偿性事务即可. TCC是绑定在各个子业务上的(除了cancle中的全局回滚操作), 也就是各服务之间可以在一定程度上”异步并行”执行. 注意事项 事务管理器(协调器)这个节点必须以带同步复制语义的高可用集群(HAC)方式部署. 事务管理器(协调器)还需要使用多数派算法来避免集群发生脑裂问题. 适用场景 严格一致性 执行时间短 实时性要求高 举例: 红包, 收付款业务. 异步确保型 通过将一系列同步的事务操作变为基于消息执行的异步操作, 避免了分布式事务中的同步阻塞操作的影响. 这个方案真正实现了两个服务的解耦, 解耦的关键就是异步消息和补偿性事务. 这里以一个例子作为讲解: 执行步骤如下: MQ发送方发送远程事务消息到MQ Server; MQ Server给予响应, 表明事务消息已成功到达MQ Server. MQ发送方Commit本地事务. 若本地事务Commit成功, 则通知MQ Server允许对应事务消息被消费; 若本地事务失败, 则通知MQ Server对应事务消息应被丢弃. 若MQ发送方超时未对MQ Server作出本地事务执行状态的反馈, 那么需要MQ Servfer向MQ发送方主动回查事务状态, 以决定事务消息是否能被消费. 当得知本地事务执行成功时, MQ Server允许MQ订阅方消费本条事务消息. 需要额外说明的一点, 就是事务消息投递到MQ订阅方后, 并不一定能够成功执行. 需要MQ订阅方主动给予消费反馈(ack) 如果MQ订阅方执行远程事务成功, 则给予消费成功的ack, 那么MQ Server可以安全将事务消息移除; 如果执行失败, MQ Server需要对消息重新投递, 直至消费成功. 注意事项 消息中间件在系统中扮演一个重要的角色, 所有的事务消息都需要通过它来传达, 所以消息中间件也需要支持 HAC 来确保事务消息不丢失. 根据业务逻辑的具体实现不同,还可能需要对消息中间件增加消息不重复, 不乱序等其它要求. 适用场景 执行周期较长 实时性要求不高 例如: 跨行转账/汇款业务(两个服务分别在不同的银行中) 退货/退款业务 财务, 账单统计业务(先发送到消息中间件, 然后进行批量记账) 最大努力通知型 这是分布式事务中要求最低的一种, 也可以通过消息中间件实现, 与前面异步确保型操作不同的一点是, 在消息由MQ Server投递到消费者之后, 允许在达到最大重试次数之后正常结束事务. 适用场景 交易结果消息的通知等. 小结 不管是同步事务中的事务管理器(协调者), 还是异步事务中使用的消息中间件,若要达到一致性保证,都需要使用带有同步复制语义的 HAC 提供的高可用和高可靠特性,这些都是以性能为代价的,无疑成为了SOA 架构中的典型性能瓶颈之一.

优秀的个人博客,低调大师

微服务--分布式事务的实现方法及替代方案

这两天正在研究微服务架构中分布式事务的处理方案, 做一个小小的总结, 作为备忘. 如有错误, 欢迎指正! 概念澄清 事务补偿机制: 在事务链中的任何一个正向事务操作, 都必须存在一个完全符合回滚规则的可逆事务. CAP理论: CAP(Consistency, Availability, Partition Tolerance), 阐述了一个分布式系统的三个主要方面, 只能同时择其二进行实现. 常见的有CP系统, AP系统. 幂等性: 简单的说, 业务操作支持重试, 不会产生不利影响. 常见的实现方式: 为消息额外增加唯一ID. BASE(Basically avaliable, soft state, eventually consistent): 是分布式事务实现的一种理论标准. 柔性事务 vs. 刚性事务 刚性事务是指严格遵循ACID原则的事务, 例如单机环境下的数据库事务. 柔性事务是指遵循BASE理论的事务, 通常用在分布式环境中, 常见的实现方式有: 两阶段提交(2PC), TCC补偿型提交, 基于消息的异步确保型, 最大努力通知型. 通常对本地事务采用刚性事务, 分布式事务使用柔性事务. 最佳实践 先上结论, 再分别介绍分布式事务的各种实现方式. 如果业务场景需要强一致性, 那么尽量避免将它们放在不同服务中, 也就是尽量使用本地事务, 避免使用强一致性的分布式事务. 如果业务场景能够接受最终一致性, 那么最好是使用基于消息的最终一致性的方案(异步确保型)来解决. 如果业务场景需要强一致性, 并且只能够进行分布式服务部署, 那么最好是使用TCC方案而不是2PC方案来解决. 注意: 以下每种方案都有不同的适用场合, 需要根据实际业务场景来选择. 两阶段提交(2PC) 两阶段提交(Two Phase Commit, 2PC), 具有强一致性, 是CP系统的一种典型实现. 两阶段提交, 常见的标准是XA, JTA等. 例如Oracle的数据库支持XA. 下图是两阶段提交的示意图: 2pc 图的上半是两阶段提交成功的演示, 下半是两阶段提交失败的演示. 关于两阶段提交网上有很多经典的讲解, 这里就不细说了, 可以参考前面的链接. 缺点 两阶段提交中的第二阶段, 协调者需要等待所有参与者发出yes请求, 或者一个参与者发出no请求后, 才能执行提交或者中断操作. 这会造成长时间同时锁住多个资源, 造成性能瓶颈, 如果参与者有一个耗时长的操作, 性能损耗会更明显. 实现复杂, 不利于系统的扩展, 不推荐. TCC (Try-Confirm-Cancle) TCC, 是基于补偿型事务的AP系统的一种实现, 具有最终一致性. TCC流程 下面以客户购买商品时的付款操作为例进行讲解: Try: 完成所有的业务检查(一致性),预留必须业务资源(准隔离性); 体现在本例中, 就是确认客户账户余额足够支付(一致性), 锁住客户账户, 商户账户(准隔离性). Confirm: 使用Try阶段预留的业务资源执行业务(业务操作必须是幂等的), 如果执行出现异常, 要进行重试. 在这里就是执行客户账户扣款, 商户账户入账操作. Cancle: 释放Try阶段预留的业务资源, 在这里就是释放客户账户和商户账户的锁; 如果任一子业务在Confirm阶段有操作无法执行成功, 会造成对业务活动管理器的响应超时, 此时要对其他业务执行补偿性事务. 如果补偿操作执行也出现异常, 必须进行重试, 若实在无法执行成功, 则事务管理器必须能够感知到失败的操作, 进行log(用于事后人工进行补偿性事务操作或者交由中间件接管在之后进行补偿性事务操作). 优点 对比与前面提到的两阶段提交法, 有两大优势: TCC能够对分布式事务中的各个资源进行分别锁定, 分别提交与释放, 例如, 假设有AB两个操作, 假设A操作耗时短, 那么A就能较快的完成自身的try-confirm-cancel流程, 释放资源. 无需等待B操作. 如果事后出现问题, 追加执行补偿性事务即可. TCC是绑定在各个子业务上的(除了cancle中的全局回滚操作), 也就是各服务之间可以在一定程度上”异步并行”执行. 注意事项 事务管理器(协调器)这个节点必须以带同步复制语义的高可用集群(HAC)方式部署. 事务管理器(协调器)还需要使用多数派算法来避免集群发生脑裂问题. 适用场景 严格一致性 执行时间短 实时性要求高 举例: 红包, 收付款业务. 异步确保型 通过将一系列同步的事务操作变为基于消息执行的异步操作, 避免了分布式事务中的同步阻塞操作的影响. 这个方案真正实现了两个服务的解耦, 解耦的关键就是异步消息和补偿性事务. 这里以一个例子作为讲解: 异步确保型 执行步骤如下: MQ发送方发送远程事务消息到MQ Server; MQ Server给予响应, 表明事务消息已成功到达MQ Server. MQ发送方Commit本地事务. 若本地事务Commit成功, 则通知MQ Server允许对应事务消息被消费; 若本地事务失败, 则通知MQ Server对应事务消息应被丢弃. 若MQ发送方超时未对MQ Server作出本地事务执行状态的反馈, 那么需要MQ Servfer向MQ发送方主动回查事务状态, 以决定事务消息是否能被消费. 当得知本地事务执行成功时, MQ Server允许MQ订阅方消费本条事务消息. 需要额外说明的一点, 就是事务消息投递到MQ订阅方后, 并不一定能够成功执行. 需要MQ订阅方主动给予消费反馈(ack) 如果MQ订阅方执行远程事务成功, 则给予消费成功的ack, 那么MQ Server可以安全将事务消息移除; 如果执行失败, MQ Server需要对消息重新投递, 直至消费成功. 注意事项 消息中间件在系统中扮演一个重要的角色, 所有的事务消息都需要通过它来传达, 所以消息中间件也需要支持 HAC 来确保事务消息不丢失. 根据业务逻辑的具体实现不同,还可能需要对消息中间件增加消息不重复, 不乱序等其它要求. 适用场景 执行周期较长 实时性要求不高 例如: 跨行转账/汇款业务(两个服务分别在不同的银行中) 退货/退款业务 财务, 账单统计业务(先发送到消息中间件, 然后进行批量记账) 最大努力通知型 这是分布式事务中要求最低的一种, 也可以通过消息中间件实现, 与前面异步确保型操作不同的一点是, 在消息由MQ Server投递到消费者之后, 允许在达到最大重试次数之后正常结束事务. 适用场景 交易结果消息的通知等. 小结 不管是同步事务中的事务管理器(协调者), 还是异步事务中使用的消息中间件,若要达到一致性保证,都需要使用带有同步复制语义的 HAC 提供的高可用和高可靠特性,这些都是以性能为代价的,无疑成为了SOA 架构中的典型性能瓶颈之一.

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册