wps栏目上的运服务怎么没有了
1011
2022-05-28
限时免费领取华为云微服务
TCC机制的数据最终一致性处理
在一个长事务中,一个由两台服务器一起参与的事务,服务器A发起事务,服务器B参与事务,B的事务需要人工参与,所以处理时间可能很长。如果按照ACID的原则,要保持事务的隔离性、一致性,A发起的事务中使用到的事务资源将会被锁定,不允许其他应用访问到事务过程中的中间结果,直到整个事务被提交或者回滚。这就造成事务A中的资源被长时间锁定,系统将不可用。
为了解决在事务运行过程中大颗粒度资源锁定的问题,业界提出一种新的事务模型,它是基于业务层面的事务定义。锁粒度完全由业务自己控制。它本质是一种补偿的思想。它把事务运行过程分成Try、Confirm/Cancel两个阶段。在每个阶段的逻辑由业务代码控制。这样就事务的锁粒度可以完全自由控制。业务可以在牺牲强隔离性的情况下,获取更高的性能。
Try:尝试执行业务
完成所有业务检查(一致性)
预留必须业务资源(准隔离性)
Confirm:确认执行业务
真正执行业务
不作任何业务检查
只是用Try阶段预留的业务资源
Confirm操作满足幂等性
Cancel:取消执行业务
释放Try阶段预留的业务资源
Cancel操作满足幂等性
与2PC协议比较
位于业务服务层而非资源层
没有单独的准备(Prepare)阶段,Try操作兼备资源操作与准备能力
Try操作可以灵活选择业务资源的锁定粒度
较高开发成本
POM中引入TCC事务对应的依赖包:
在microservice.yaml中添加进处理链:
cse: ...... handler: chain: Provider: default: perf-stats,tcc-server ......
定义服务实现类
@RpcSchema(schemaId = "helloworld") public class TccHelloworldImpl implements ITccHelloworld { private static final Logger LOGGER = LoggerFactory.getLogger(TccHelloServiceImpl.class); @Override @TccTransaction(confirmMethod = "confirm", cancelMethod = "cancel") public String sayHello(String name) { LOGGER.info("Try say hello from client, {}", name); return "Hello, " + name; } public String confirm(String name) { LOGGER.info("Confirm say hello from client, {}", name); return null; } public String cancel(String name) { LOGGER.info("Cancel say hello from client, {}", name); return null; } }
在支持TCC事务的方法上打上@TccTransaction标注,并注明confirmMethod和cancelMethod方法。confirmMethod和cancelMethod的参数和返回值必须和服务提供函数相同。如果Try正常执行,confirm方法也会被执行。如果Try抛出异常,则cancel会被执行。
注意:
如果不使用标注的方式发布服务,那么需要在实现类上面打上@Component标注。
TCC事务对业务逻辑定义需要有一定要求,TCC操作应该支持幂等性原则,否则容
易产生过度补偿等问题。
TCC支持运行在微服务多实例中,其原理是将事务数据统一存储到数据库中,TCC组件提供统一的事务存储接口,以便开发对接不同的数据库,只需要继承实现com.huawei.paas.cse.tcc.repository.CachableTransactionRepository类即可完成多实例TCC支持;也可参考com.huawei.paas.cse.tcc.repository包中简单的数据库存储类实现,已简单实现了Jdbc/redis/ZooKeeper的对接。
yaml文件中bizkeeper和tcc-server配置先后顺序会引起前台仪表盘不同的计数方式。若将tcc-server配置在bizkeeper前,仪表盘中显示server端一次调用,反之仪表盘显示两次调用,因为bizkeeper的计数在tcc-sever的打点前则会有2次restful接口调用。
TCC配置在microservice.yaml文件中,相关配置项如下。
配置项
默认值
取值范围
是否必选
含义
cse.tcc.transaction.repository
com.huawei.paas.cse.tcc.repository.FileSystemTransactionRepository
true/false
是
事务存储仓库
cse.tcc.transaction.repository.file.path
tcc
-
是
使用文件系统存储事务时,指定文件存储根路径,默认在当前目录的tcc文件夹下
cse.tcc.transaction.recover
true
true/false
是
是否启动恢复机制
立即体验华为微服务CSE:https://console.huaweicloud.com/cse/?region=cn-north-1#/cse/home
了解详情:https://www.huaweicloud.com/product/cse.html
微服务 ServiceComb 微服务引擎 CSE
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。