hmily 2.1.0 版本的发布
总阅读量:157次
摘要: 原创出处 京东数科 「猫大人」欢迎转载,保留摘要,谢谢!
时隔一年,Hmily发布全新架构的2.1.0版本
感谢朋友们一路以来的支持,让大家久等了。在这一个版本中,我们团队重构了整个项目, 合理的划分功能模块,新增配置中心,调整底层存储结构,解决疑难bug,以及其他新功能的支持,也吸收了更多开源社区的优秀人才的加入。
架构全景图
功能
-
高可靠性 :支持分布式场景下,事务异常回滚,超时异常恢复,防止事务悬挂。
-
易用性 :提供零侵入性式的
Spring-Boot
,Spring-Namespace
快速与业务系统集成。 -
高性能 :去中心化设计,与业务系统完全融合,天然支持集群部署。
-
可观测性 :Metrics多项指标性能监控,以及admin管理后台UI展示。
-
多种RPC : 支持
Dubbo
,SpringCloud
,Montan
,sofa-rpc
等知名RPC框架。 -
日志存储 : 支持
mysql
,oracle
,mongodb
,redis
,zookeeper
等方式。 -
复杂场景 : 支持RPC嵌套调用事务。
重构部分
在模块划分上:
-
抽离出开箱即用的SPI自定义模块。
-
定义事务日志多种存储方式的SPI模块。
-
定义事务日志多种序列化方式的SPI模块。
-
新增配置中心,支持各种主流的配置中心(nacos,apollo,zookeeper等),并支持配置的动态刷新。
-
新增metrics模块,用来监控运行时候的各种信息。
-
抽离出核心的事务执行模块。
-
抽离出多种RPC支持模块。
-
抽离出spring与spring boot 支持模块。
在依赖包版本上:
-
guava升级到29.0
-
curator 升级到5.1.0
在代码质量上:
- 严格的check-style代码检查,秉承优雅,简单易懂原则(talk is cheap ,show you code)。
在开放性上:
- 社区奉行简单,快乐,和谐基本原则
在目标上:
- 打造一款高可用,高性能,简单易用金融级的分布式事务解决方案。
解决疑难bug:
-
dubbo
框架不支持注解方式的使用(spring-boot-starter-dubbo)。h -
motan
框架不支持注解方式的使用。 -
spring-cloud
用户如果使用feign与hystrix整合hmily时候的线程切换问题。 -
极端情况下事务日志序列化异常。
-
try阶段超时异常,导致事务悬挂bug。
-
confirm与cancel阶段异常时候,事务未能正确恢复bug。
-
在事务日志存储上,支持同步与异步2种模式,供用户选择。
用户使用与升级指南
对于hmily用户来说,只需三个步骤,即可解决RPC服务调用之间的柔性事务
- 引用hmily对各种rpc支持的jar包。
- 添加hmily配置。
- 在rpc接口方法上添加
@Hmily
注解。
依赖的变更
用户依赖的方式没有更改,只需要将版本升级到2.1.0。 下面举dubbo微服务列子
dubbo rpc 微服务
- dubbo接口服务依赖
<dependency> |
- dubbo服务提供者依赖(<2.7)
<dependency> |
hmily配置的变更
在新版2.1.0中,新增了hmily-config模块,支持本地与注册中心模式。用户首先需要在项目resouce
文件下新建一个名称为hmily.yml
的文件。默认路径为项目的 resource
目录下,也可以使用 -Dhmily.conf
指定,也可以把配置放在 user.dir
目录下。 优先级别 -Dhmily.conf
> user.dir
>resource
。 文件格式如下(一部分,以下是配置成本地模式):
server: |
如果你想将配置文件放在Nacos
配置中心:
- 第一步:
hmily: |
- 第二步:将hmily的配置,放在
nacos
配置中心上
如果你想将配置文件放在Apollo
配置中心:
- 第一步:
hmily: |
- 第二步:将hmily的配置,放在
apollo
配置中心上
还有其他的配置方式以及配置内容的详解,请参考:https://dromara.org/zh-cn/docs/hmily/config.html
注解方式的使用的变更
在之前的版本中,rpc接口与实现都只需要添加 @Hmily
注解, 现在需要进行变更,在rpc接口方法上是添加 @Hmily
,用来标识这是一个hmily分布式事务的接口方法, 在接口的方法实现上则需要添加 @HmilyTCC
,然后指定 confirm
与 cancel
方法名称.
举例(dubbo中say方法需要参与分布式事务):
public interface HelloService { |
举例(springcloud中say方法需要参与分布式事务):
- spring-cloud服务调用方
FeignClient
中
"helle-service") (value = |
- spring-cloud服务提供方
|
事务日志存储结构的更改
在使用上,用户使用或者升级不用关心,框架会默认初始化好。
下一个版本
-
因为调整了架构,在其他模式的支持上将会变得更加容易,在下一个版本,将会发布
TAC
模式(try-auto-cancel)使用此模式,将大大简化框架的使用程度,开发者不需要关心confirm
以及cancel
方法的开发,对老系统的改造提供了更好的兼容性,不用担心额外的开发任务,一切就交给 hmily 吧。 -
将对 brpc 用户进行支持。
-
将对 tars-rpc 用户进行支持。
社区共建
我们秉承和谐快乐,代码至上的原则,如果你有想法,愿意和我们一起成长,一起贡献,快来加入我们吧!
- github:https://github.com/dromara/hmily
- gitee:https://gitee.com/shuaiqiyu/hmily
- qq群: 162614487