有一个使用测试数据库的测试服务器。我们在测试服务器上测试网站。如果可以,我们会将网站和数据库架构从测试服务器更新为生产服务器。但是这种方法非常痛苦且危险。
首先,我们必须将用户重定向到维护页面,因此网站暂停了一段时间。
其次,如果更新时出现问题,我们必须回到旧网站,因为我们不能长时间将网站置于维护模式。
因此,我正在寻求一种可靠的解决方案来更新IIS网站和Sql Server数据库,而又不会丢失数据并使用维护模式。有什么办法吗?大型网站如何做到这一点而又不会造成数据丢失和暂停。
我们考虑过使用候选发布网站。我们计划暂时使用此RC网站。首先,我们更新RC网站,然后在RC和生产网站之间交换绑定(bind)。但是这一次数据库出现问题了。因为我们可以更改数据库架构,所以旧的架构无法使用新的数据库。因此,如果我们使用带有temp db的临时站点,则会丢失数据。另外,如果临时站点使用旧的生产数据库,则更新的网站将无法使用旧的数据库。因此,我需要一个坚实而实用的解决方案。
最佳答案
这比您想象的要复杂几个数量级。具体而言,这与HA无关,也与连续集成无关。这些都不能满足您的需求,它们只是更复杂的难题的一部分。
根本不可能以对模式更改透明/忽略的方式编写代码更改。充其量,您可以以支持v。N和v。N + 1模式的方式编写代码,这本身就是一个很大的挑战。但是不可能以支持模式的方式编写代码,因为它从v。N过渡到v。N + 1。对于在该模式上运行的代码,由部署引起的模式更改必须是原子的。由于架构更改本身不能是原子的,因此可以认为升级有两种可能的途径:
当必须升级更大部署的解决方案的特定服务时,我什至没有碰到服务交互的棘手问题。这是service API protocol back compatibility担当主要角色,以允许升级后的服务与其对等服务一起发挥作用的时候。
最终,没有任何 Elixir 。我目睹了单机大型数据库部署,历时数周才推出了N + 1版本,转录复制连续地为升级后DB架构提供了升级前DB的更改。我目睹了数以千计的机器分阶段部署N + 1版本的部署,这是在几天的时间内启用代码和数据更改以实现升级后的全部功能的复杂过程。这个问题仅仅是硬。
关于sql-server - 在不停止的情况下更新生产IIS网站和SQL Server数据库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11668971/