gpt4 book ai didi

sql-server - 不停止更新生产 IIS 网站和 SQL Server 数据库

转载 作者:行者123 更新时间:2023-12-02 13:18:32 31 4
gpt4 key购买 nike

有一个使用测试数据库的测试服务器。我们在测试服务器上测试网站。如果没问题,我们会将网站和数据库架构从测试服务器更新到生产服务器。但这种方法非常痛苦且危险。

首先,我们必须将用户重定向到维护页面,因此网站会暂停一段时间。

第二,如果更新时出现问题,我们必须回到旧网站,因为我们不能让网站长时间处于维护模式。

因此,我正在寻找一种可靠的解决方案来更新 IIS 网站和 Sql Server 数据库,而不会丢失数据并使用维护模式。有什么办法可以做到这一点吗?大型网站如何在不丢失数据和不暂停的情况下做到这一点。

我们考虑过使用候选版本网站。我们计划暂时使用这个 RC 网站。首先,我们更新 RC 站点,然后交换 RC 和生产网站之间的绑定(bind)。但这次数据库有问题。因为我们可以更改数据库架构,而旧数据库无法与新数据库一起使用。因此,如果我们使用带有临时数据库的临时站点,则会出现数据丢失。此外,如果临时站点使用旧的生产数据库,则更新后的网站将无法使用旧数据库。所以我需要一个可靠且实用的解决方案来解决这个问题。

最佳答案

这比您想象的要复杂几个数量级。具体而言,这与 HA 无关,也与连续集成无关。这些都无法提供您所需要的,它们只是更复杂的难题的一部分。

根本不可能以透明/无视架构更改的方式编写代码更改发生时。您最多可以以支持 v.N 和 v.N+1 模式的方式编写代码,这本身就是一个很大的挑战。但不可能以支持架构从 v.N 过渡到 v.N+1 的方式编写代码。对于在模式上运行的代码来说,部署引起的模式更改必须是原子的。由于架构更改本身不能是原子的,因此升级有两种可能的途径:

  • 在架构更改期间使代码脱机。这就是你现在正在做的,也是最安全的方法。当然,这意味着服务可用性的停机时间以及您已经经历过的风险(升级失败的回滚、升级时间过长等)。这种方法的一个变体是将服务重定向到数据的只读副本,并提供降级的服务体验(在停机期间不可能进行任何更改),这可能是可接受的,也可能是 Not Acceptable ,具体取决于业务细节。

  • 待机升级。这意味着您需要拍摄服务数据的快照(各种 HA 解决方案可能会提供开箱即用的备用快照,例如日志传送)。升级快照,然后将真实服务数据上发生的所有事务应用到升级后的快照上。这总是很棘手,因为它需要一种技术来检测、捕获和应用更改(例如更改跟踪、复制、自定义解决方案等),并且需要将每个更改转换为新的、升级的模式。一旦升级后的架构与主服务的更改保持同步,服务就可以重定向到升级后的架构。这种重定向也比听起来复杂得多。对于选择何时切断旧模式并停止接受新更改的人来说,同时确保所有更改都应用于新升级的模式数据库本身就是一项挑战。另一个挑战是解决代码理解升级前和升级后架构版本的冲突。正如我所说,开发处理这两种情况的代码是有问题且容易出错的,因此一种解决方案是再次使服务短时间离线并替换代码。另一种解决方案是拥有一个备用服务,运行处理升级后数据库架构的代码并连接到升级后数据库,并将实时请求重定向到您的备用升级服务。

当必须升级更大的已部署解决方案的特定服务时,我什至没有触及服务交互的棘手主题。这是service API protocol back compatibility的时候在让升级后的服务与其对等服务一起发挥作用方面发挥着重要作用。

最终没有任何 Elixir 。我亲眼目睹了单机大型数据库部署花了几周来推出版本 N+1,其中转录复制连续向升级后数据库架构提供升级前数据库的更改。我亲眼目睹了数千台机器分阶段部署版本 N+1,这是在几天的时间内启用代码和数据更改以实现升级后的全部功能的复杂舞蹈。这个问题简直就是

关于sql-server - 不停止更新生产 IIS 网站和 SQL Server 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11668971/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com