BeetlSQL 3.2.0 发布,多库和微服务事务支持

栏目: 软件资讯 · 发布时间: 5年前

内容简介:本次发布主提供多库和微服务事务支持,使用了 BeetlSQL 的自带的 Saga 实现 新增多库和微服务 Saga 实现 修复代码生成因为重构带来的问题 Saga文档 Maven <dependency> <groupId>com.ibeetl</groupId> <...

本次发布主提供多库和微服务事务支持,使用了 BeetlSQL 的自带的 Saga 实现

  • 新增多库和微服务 Saga 实现
  • 修复代码生成因为重构带来的问题

Saga文档

Maven

<dependency>
  <groupId>com.ibeetl</groupId>
  <artifactId>beetlsql</artifactId>
  <version>3.2.0-RELEASE</version>
</dependency>

Saga 初期是长事务的解决方案,微服务流行后也可以为微服务提供事务解决方案。不同于传统的数据库事务或者 2 阶段提交,必须·依赖于数据库系统实现 ACID 事务,Saga 不依赖于特定系统(实际上也不可能让所有系统实现 ACID,比如 Redis,Mongdb),只要求特定系统能提供补偿操作,在出错的时候能执行补偿操作即可。因此可以很方便用在现代的微服务架构中。

一个长事务的例子,如订购电影票,分为选座位和支付俩个步骤。用户可能会花好几分钟才能能完成。另一个例子是下单旅游产品,需要酒店,飞机,旅行社各个系统协作。 关于Saga,我认为最好的文章是 https://docs.microsoft.com/en-us/azure/architecture/reference-architectures/saga/saga,因为他即告诉你什么是Saga。也告诉你Saga不完美的地方。

因此 Saga 的核心是补偿操作以及执行这些操作的任务的管理。下面列举了一些目前我认为的现在一些 Saga 框架实现的缺点

  • 补偿操作需要手动编写,这工作量不小,而且容易写错,需要仔细审核代码
  • 有些框架能自动根据 SQL 产生逆向 SQL,这有效减少了编写补偿的工作。但解析 SQL 和生成逆向 SQL 的难度非常大,会成为 Saga 框架的主要难点
  • 现在几乎所有的 Saga 框架将要改变编写微服务调用方式,因为 Saga 提倡通过消息调用来实现服务调用和补偿操作。不符合编写业务代码习惯,还是期望能在编写微服务的时候,像传统事务编程模式那样,微服务业务代码嵌套在一个 Saga 事务开始,提交或者回滚即可
  • 几乎所有的框架都要实现进行 Saga 编排,即 Saga 事务里那些微服务调用必须事先编排(配置)。这非常不灵活,因为业务时刻在变化。非常有可能升级了业务代码,却忘记重新编码。 程序员期望能像普通编写业务代码那样而不需要实现编排配置

BeetlSQL 的 Saga 实现试图解决上述问题。让微服务编程变得跟简单。

单系统多库 Saga 事务

@Test
public void simple(){
  SagaContext sagaContext = SagaContext.sagaContextFactory.current();
  UserMapper userMapper = sqlManager.getMapper(UserMapper.class);
  long count = sqlManager.allCount(User.class);
  try{
    sagaContext.start()
      
    User user = new User();
    user.setName("abc");
    userMapper.insert(user);
    //根据名字hash入不同数据库
    User user2 = new User();
    user2.setName("efg");
    userMapper.insert(user2);
    if(1==1){
      throw new RuntimeException("模拟异常");
    }
    sagaContext.commit();
    
  }catch(RuntimeException ex){
    sagaContext.rollback();
  }
  long  afterCount = sqlManager.allCount(User.class);
  Assert.assertEquals(count,afterCount);
}

微服务Saga事务,采用同样的编程方式

SagaContext sagaContext = SagaContext.sagaContextFactory.current();
try {
  sagaContext.start(gid);
  //模拟调用俩个微服务,订单和用户
  rest.postForEntity(orderAddUrl, null,String.class, paras);
  rest.postForEntity(userBalanceUpdateUrl, null,String.class, paras);
  if (1 == 1) {
    throw new RuntimeException("模拟失败,查询saga-server 看效果");
  }
} catch (Exception e) {
  sagaContext.rollback();
  return e.getMessage();
}

BeetlSQL 的目标是提供开发高效,维护高效,运行高效的数据库访问框架,在一个系统多个库的情况下,提供一致的编写代码方式。支持如下数据平台

  • 传统数据库:MySQL,MariaDB,Oralce,Postgres,DB2,SQL Server,H2,SQLite,Derby,神通,达梦,华为高斯,人大金仓,PolarDB 等
  • 大数据:HBase,ClickHouse,Cassandar,Hive
  • 物联网时序数据库:Machbase,TD-Engine,IotDB
  • SQL查询引擎:Drill,Presto,Druid
  • 内存数据库:ignite,CouchBase

阅读文档 源码和例子


以上所述就是小编给大家介绍的《BeetlSQL 3.2.0 发布,多库和微服务事务支持》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

认知盈余

认知盈余

[美] 克莱·舍基 / 胡泳、哈丽丝 / 中国人民大学出版社 / 2011-12 / 49.80元

“互联网革命最伟大的思考者”克莱•舍基 继《未来是湿的》之后最新力作 看自由时间如何变革世界的未来 如果说《未来是湿的》揭示的是“无组织的组织力量”, 那么《认知盈余》揭示的就是 “无组织的时间力量”。 腾讯董事会主席兼首席执行官马化腾首度亲笔作序倾情推荐 克莱•舍基说,美国人一年花在看电视上的时间大约2 000亿个小时,而这几乎是2 000个维基百科项目一年所需要的......一起来看看 《认知盈余》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

在线进制转换器
在线进制转换器

各进制数互转换器

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具