你如何优雅地将关键任务系统升级到完全不同的系统?

在我职业生涯的12年以上的时间里,我还没有克服这个障碍,我怀疑这个答案根本不容易,甚至是不可能的,所以我在这里问大家。

假设你遇到了极其严重的问题,只能通过从一个平台转移到另一个平台来解决 – 无论是在select多年前select的平台时犯的错误,还是仅仅超出了系统最初devise的平台。 你一定知道,随着时间的推移,这种残余将永远意味着要testing所有肯定会导致技术支持的东西几乎是不可能的 – 我们都知道这会导致客户stream失。 不是说客户已经不抱怨已经存在的严重问题!

到目前为止,我发现的最好的方法是制定一个转换计划,在几个客户端上testing它,在十几个客户端上testing它,在一百个客户端上testing它,然后最终完成所有的转换祈求你已经弄清楚了所有的错误,并且动物副产品不会以最壮观的方式撞上通风系统。

但是,这并不意味着它不会。

所以说,你正在从Exchange到Exim(甚至只是Sendmail到Exim)。 你如何处理?

这是一个棘手的问题,根据具体情况而有所不同。 关键问题是:

  • 有一个后备计划你做什么,有一个如何快速返回到旧系统的计划。 如果你不能这样做,那么需要更多的testing。
  • testing你最常用的function。 看看你的日志或测量哪些function使用最多,更关键。 testingfunction更彻底。
  • 有几个用户,包括你自己“活”在新的服务器多天。 时间的长短取决于变化的剧烈程度。 (即“你应该是第一个testing者)
  • 如果可能,同时运行新的服务。 如果您可以在中间放置代理并转发某些请求或用户,则可以提供帮助。
  • 在负载平衡群集中运行。 这与之前的说法类似。 如果您可以在负载平衡的情况下运行这两个服务,请尝试一下。 顺利的话,你可以逐渐摆脱旧的服务。
  • 保持旧服务器数周或更长时间。 当我不确定是否需要使用旧服务器时,我保留了几个月的旧服务器。 将其closures或断开networking电缆,以确保服务器上没有隐藏的依赖关系。
  • 确保新的服务可以处理负载。 逐步部署并监控系统性能,同时逐渐将更多stream量移至新系统。
  • 在做事的时候,要确保失败是可见的,直接的。 你希望失败发生得早,并且很容易识别。

使用DNS对你有利。 设置这两个服务来响应相同的DNS名称,但DNS指向一个或另一个(或两者作为循环)。 使用Linux和Windows上的本地主机文件覆盖DNS,并能够在展开之前和之后validation设置。 这也使得在部署之后更容易进行故障排除。 只需将本地主机文件更改为旧服务器,看看有问题的机器上是否还有问题。 设置TTL的低,以允许快速回退。 像Cisco的GSS这样的负载均衡器可以用于此。 我可以使用iptables从池中取出特定的负载平衡主机。

对于Apache来说,使用反向代理是一个很好的方式来逐个迁移网站。 对于其他人,使用DNS,代理或可能的iptables框给你如何控制转换的选项。