更新时间:2024-02-01 GMT+08:00

技术架构

功能背景

主备模式的数据库系统在进行主备倒换、小版本升级和规格变更时,可能会中断用户会话,用户的应用程序需要感知会话变化并提供复杂的应对措施。

  • 判断数据库连接是否中断。
  • 判断事务是否中断。
  • 如何进行事务补偿。
  • 如何重建数据库会话上下文。

应用无损透明(ALT),在数据库系统切换与故障转移时,可以提供无损的应用连续性。

  • 避免连接和事务中断。
  • 无需用户对事务进行补偿。
  • 无需恢复和重建会话上下文。

注意事项

  • 开启或关闭ALT服务会重启RDS实例和代理实例。
  • 多数据库代理模式下不支持应用无损透明(ALT)功能。
  • 应用无损透明(ALT)功能事务排干机制超时时间,通过参数“rds_tac_drain_timeout”控制,默认为5s,取值范围为1-60s。
    • 业务压力较大或者事务执行时间较长时,建议增加超时时间。
    • 不建议调小超时时间,如果在该时间内有连接没有排干事务,则这些连接不具有ALT的能力。

架构图

应用无损透明(ALT)以用户连接为粒度,整个架构如图1所示。

图1 架构图
  1. 用户应用连接到数据库代理(Proxy)。
  2. 进行主备切换、规格变更或者小版本升级时,系统会复制用户的后台会话。
  3. 通过事务排干机制以达到安全的事务边界。

    安全的事务边界是指当前会话上的事务提交完成,开启下一个事务之前的状态,例如:

    • 开启autocommit的事务块每个语句执行完成时,可以达到事务边界。
      start transaction;
      DML; 
      commit;
    • 关闭autocommit时,当commit执行完成,达到事务边界。
    • 单独DML、DDL语句,执行完成,可以达到事务边界。
    • 使用表锁、备份锁、用户自定锁时,需要释放锁以后,达到事务边界。
    • XA事务需要进行提交或者回滚操作,达到事务边界。
  4. 转移会话上下文,切换用户后台会话。

    其中会话克隆能够拷贝和转移会话状态,包括会话系统变量、用户自定义变量和其他上下文,例如`db_name`。