您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

全新架构的 Hmily 分布式事务框架 2.1.1发布

时间:2020-09-29 10:08:46  来源:  作者:

来源:https://www.oschina.net/news/118917/hmily-2-1-1-released

感谢朋友们一路以来的支持,让大家久等了。在这一个版本中,我们团队重构了整个项目,合理的划分功能模块,新增配置中心,调整底层存储结构,解决疑难bug,以及其他新功能的支持,也吸收了更多开源社区的优秀人才的加入。

架构全景图

全新架构的 Hmily 分布式事务框架 2.1.1发布

 

功能

  • 高可靠性 :支持分布式场景下,事务异常回滚,超时异常恢复,防止事务悬挂。
  • 易用性 :提供零侵入性式的 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.0curator 升级到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>
          <groupId>org.dromara</groupId>
          <artifactId>hmily-annotation</artifactId>
          <version>2.1.0</version>
      </dependency>
  • dubbo服务提供者依赖(<2.7)
       <dependency>
            <groupId>org.dromara</groupId>
            <artifactId>hmily-dubbo</artifactId>
           <version>2.1.0</version>
        </dependency>
    or       <dependency>
            <groupId>org.dromara</groupId>
            <artifactId>hmily-spring-boot-starter-dubbo</artifactId>
           <version>2.1.0</version>
        </dependency>

hmily配置的变更

在新版2.1.0中,新增了hmily-config模块,支持本地与注册中心模式。用户首先需要在项目resouce文件下新建一个名称为hmily.yml的文件。默认路径为项目的 resource目录下,也可以使用 -Dhmily.conf 指定,也可以把配置放在 user.dir 目录下。优先级别 -Dhmily.conf > user.dir >resource。文件格式如下(一部分,以下是配置成本地模式):

  server:
    configMode: local
    AppName: account-dubbo
  #  如果server.configMode eq local 的时候才会读取到这里的配置信息.  config:
    appName: account-dubbo
    serializer: kryo
    contextTransmittalMode: threadLocal
    scheduledThreadMax: 16
    scheduledRecoveryDelay: 60
    scheduledCleanDelay: 60
    scheduledPhyDeletedDelay: 600
    scheduledInitDelay: 30
    recoverDelayTime: 60
    cleanDelayTime: 180
    limit: 200
    retryMax: 10
    bufferSize: 8192
    consumerThreads: 16
    asyncRepository: true
    autoSql: true
    phyDeleted: true
    storeDays: 3
    repository: mysql
repository:
  database:
    driverClassName: com.mysql.jdbc.Driver
    url : jdbc:mysql://127.0.0.1:3306/hmily?useUnicode=true&characterEncoding=utf8
    username: root
    password:
    maxActive: 20
    minIdle: 10
    connectionTimeout: 30000
    idleTimeout: 600000
    maxLifetime: 1800000

如果你想将配置文件放在`Nacos`配置中心:

  • 第一步:
hmily:
  server:
    configMode: nacos
    appName: xxxxx
  #  如果server.configMode eq local 的时候才会读取到这里的配置信息.remote:
  nacos:
    server: 192.168.3.22:8848
    dataId: hmily.properties
    group: DEFAULT_GROUP
    timeoutMs: 6000
    fileExtension: yml
    passive: true
  • 第二步:将hmily的配置,放在 nacos配置中心上

如果你想将配置文件放在`Apollo`配置中心:

  • 第一步:
hmily:
  server:
    configMode: apollo
    appName: xxxx
  #  如果server.configMode eq local 的时候才会读取到这里的配置信息.remote:
  apollo:
    appId: hmily-xxxxx
    configService: http://192.168.3.22:8080
    namespace: byin_hmily
    secret:
    fileExtension: yml
    passive: true
    env: dev
    meta: http://192.168.3.22:8080
  • 第二步:将hmily的配置,放在 apollo配置中心上

还有其他的配置方式以及配置内容的详解,请参考:https://dromara.org/zh-cn/docs/hmily/config.html

注解方式的使用的变更

在之前的版本中,rpc接口与实现都只需要添加 @Hmily 注解, 现在需要进行变更,在rpc接口方法上是添加 @Hmily,用来标识这是一个hmily分布式事务的接口方法, 在接口的方法实现上则需要添加 @HmilyTCC,然后指定 confirm 与 cancel方法名称.

举例(dubbo中say方法需要参与分布式事务):

public interface HelloService {
    @Hmily
    void say(String hello);
}public class HelloServiceImpl implements HelloService  {
    @HmilyTCC(confirmMethod = "sayConfrim", cancelMethod = "sayCancel")
    public void say(String hello) {
         System.out.println("hello world");
    }    public void sayConfrim(String hello) {
         System.out.println(" confirm hello world");
    }    public void sayCancel(String hello) {
         System.out.println(" cancel hello world");
    }}

举例(springcloud中say方法需要参与分布式事务):

  • spring-cloud服务调用方FeignClient中
@FeignClient(value = "helle-service")
public interface HelloService {    @Hmily
    @RequestMapping("/helle-service/sayHello")
    void say(String hello);}
  • spring-cloud服务提供方
@RestController
public class HelloController {
    private final HelloService helloService ;
    @Autowired
    public AccountController(HelloService helloService) {
        this.helloService= helloService;
    }    @RequestMapping("/sayHello")
    public void payment(String hello) {
        return helloService.say(hello);
    }}public interface HelloService {
    void say(String hello);
}public class HelloServiceImpl implements HelloService  {
    @HmilyTCC(confirmMethod = "sayConfrim", cancelMethod = "sayCancel")
    public void say(String hello) {
         System.out.println("hello world");
    }    public void sayConfrim(String hello) {
         System.out.println(" confirm hello world");
    }    public void sayCancel(String hello) {
         System.out.println(" cancel hello world");
    }}

事务日志存储结构的更改

在使用上,用户使用或者升级不用关心,框架会默认初始化好。

下一个版本

  • 因为调整了架构,在其他模式的支持上将会变得更加容易,在下一个版本,将会发布TAC模式(try-auto-cancel)使用此模式,将大大简化框架的使用程度,开发者不需要关心confirm以及cancel 方法的开发,对老系统的改造提供了更好的兼容性,不用担心额外的开发任务,一切就交给hmily吧。
  • 将对brpc用户进行支持。
  • 将对tars-rpc用户进行支持。

社区共建

我们秉承和谐快乐,代码至上的原则,如果你有想法,愿意和我们一起成长,一起贡献,快来加入我们吧!

  • github:https://github.com/dromara/hmily
  • gitee:https://gitee.com/shuaiqiyu/hmily


Tags:Hmily   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
感谢朋友们一路以来的支持,让大家久等了。在这一个版本中,我们团队重构了整个项目,合理的划分功能模块,新增配置中心,调整底层存储结构,解决疑难bug,以及其他新功能的支持,也吸收了更多开源社区的优秀人才的加入。...【详细内容】
2020-09-29  Tags: Hmily  点击:(248)  评论:(0)  加入收藏
▌简易百科推荐
为了构建高并发、高可用的系统架构,压测、容量预估必不可少,在发现系统瓶颈后,需要有针对性地扩容、优化。结合楼主的经验和知识,本文做一个简单的总结,欢迎探讨。1、QPS保障目标...【详细内容】
2021-12-27  大数据架构师    Tags:架构   点击:(3)  评论:(0)  加入收藏
前言 单片机开发中,我们往往首先接触裸机系统,然后到RTOS,那么它们的软件架构是什么?这是我们开发人员必须认真考虑的问题。在实际项目中,首先选择软件架构是非常重要的,接下来我...【详细内容】
2021-12-23  正点原子原子哥    Tags:架构   点击:(7)  评论:(0)  加入收藏
现有数据架构难以支撑现代化应用的实现。 随着云计算产业的快速崛起,带动着各行各业开始自己的基于云的业务创新和信息架构现代化,云计算的可靠性、灵活性、按需计费的高性价...【详细内容】
2021-12-22    CSDN  Tags:数据架构   点击:(10)  评论:(0)  加入收藏
▶ 企业级项目结构封装释义 如果你刚毕业,作为Java新手程序员进入一家企业,拿到代码之后,你有什么感觉呢?如果你没有听过多模块、分布式这类的概念,那么多半会傻眼。为什么一个项...【详细内容】
2021-12-20  蜗牛学苑    Tags:微服务   点击:(8)  评论:(0)  加入收藏
我是一名程序员关注我们吧,我们会多多分享技术和资源。进来的朋友,可以多了解下青锋的产品,已开源多个产品的架构版本。Thymeleaf版(开源)1、采用技术: springboot、layui、Thymel...【详细内容】
2021-12-14  青锋爱编程    Tags:后台架构   点击:(20)  评论:(0)  加入收藏
在了解连接池之前,我们需要对长、短链接建立初步认识。我们都知道,网络通信大部分都是基于TCP/IP协议,数据传输之前,双方通过“三次握手”建立连接,当数据传输完成之后,又通过“四次挥手”释放连接,以下是“三次握手”与“四...【详细内容】
2021-12-14  架构即人生    Tags:连接池   点击:(16)  评论:(0)  加入收藏
随着移动互联网技术的快速发展,在新业务、新领域、新场景的驱动下,基于传统大型机的服务部署方式,不仅难以适应快速增长的业务需求,而且持续耗费高昂的成本,从而使得各大生产厂商...【详细内容】
2021-12-08  架构驿站    Tags:分布式系统   点击:(23)  评论:(0)  加入收藏
本系列为 Netty 学习笔记,本篇介绍总结Java NIO 网络编程。Netty 作为一个异步的、事件驱动的网络应用程序框架,也是基于NIO的客户、服务器端的编程框架。其对 Java NIO 底层...【详细内容】
2021-12-07  大数据架构师    Tags:Netty   点击:(16)  评论:(0)  加入收藏
前面谈过很多关于数字化转型,云原生,微服务方面的文章。虽然自己一直做大集团的SOA集成平台咨询规划和建设项目,但是当前传统企业数字化转型,国产化和自主可控,云原生,微服务是不...【详细内容】
2021-12-06  人月聊IT    Tags:架构   点击:(23)  评论:(0)  加入收藏
微服务看似是完美的解决方案。从理论上来说,微服务提高了开发速度,而且还可以单独扩展应用的某个部分。但实际上,微服务带有一定的隐形成本。我认为,没有亲自动手构建微服务的经历,就无法真正了解其复杂性。...【详细内容】
2021-11-26  GreekDataGuy  CSDN  Tags:单体应用   点击:(35)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条