使用Hibernate实现零停机

时间:2009-03-09 11:10:26

标签: hibernate high-availability

数据库(在这种情况下是MySQL)对Hibernate的生存(数据,架构......)有什么变化?

我问这个是因为Hibernate的停机时间为零。

更改数据库,将应用服务器拆分为两个群集,在其中一个群集上重新部署应用程序并切换应用程序。

由于 斯蒂芬

1 个答案:

答案 0 :(得分:1)

我将从个人经验中回答这个问题,而不是对hibernate的任何特殊见解。所以带上一粒盐。看起来也是一个模糊的问题,添加适当的评论。 :)

首先,更改/添加/删除未在hibernate中映射的模式的东西永远不会导致任何问题。所有hibernate确实会生成查询,因为它会将大量内容转换为SQL,只要这些查询继续有效,您的应用就会继续工作。这意味着向表中添加列或添加表不是问题,删除未映射的列也不是问题等等。

更有问题的是对映射的内容的更改。假设您将数字(10,0)更改为数字(11,0),这通常会起作用。如果您开始执行诸如将CHAR(1)字段更改为BIT字段或类似字段之类的内容,则需要对hibernate映射进行某些更改,这将使现有部署失败。这是常识。如果你必须做这样的更改,在常规数据库服务器上执行ALTER TABLE可能会锁定表,所以重新启动应用程序不是你最大的问题。

在高可用性下处理主要模式更改并不是hibernate直接处理的问题。 Hibernate假定传统的关系数据库,其中模式更改通常非常昂贵。

你提到的其他三个问题:

  • 更改数据源:可能需要重新启动应用
  • 拆分应用服务器:如果你的意思是我的意思,你可以简单地部署在不同的应用服务器上。如果需要切换,请在您的Web应用程序和客户之间使用某些东西来处理它们,即IP级负载均衡器或类似物。
  • 更改数据:适用于事务数据库和多个编写器的正常问题。 Hibernate最终可能会出现数据库视图不一致的情况。它可能会覆盖其他用户的更改,在某些情况下,这可能会产生一些例外情况,但您应该可以预测并采取类似AFAICT的情况。