草庐IT

云退出策略的八个关键步骤

Chris Tozz 2023-03-28 原文

如果企业将基于云计算的工作负载和应用程序迁移回内部部署设施,需要制定计划,按照一些关键的步骤开始迁移。

虽然许多人宣传采用云计算技术的好处,但云环境并不一定是运行所有应用程序的最佳场所。一些企业可能不喜欢失去对原有数据中心设施的控制,由于云计算提供商提供的工具的功能有限,企业可能失去可控性。当由于在云计算提供商的云平台外传输的数据量增长而导致出口率上升时,云计算成本将会成为一个问题。无论是什么原因,一些企业的工作负载不必在云端处理。

企业将其工作负载退出云平台可能与最初迁移到云平台一样复杂,但是,如果以系统的方式规划这个过程,并预测可能遇到的挑战,就有可能将应用程序从云中迁移回内部部署设施,而不会中断用户业务或丢失数据。

如果企业怀疑云托管应用程序是否符合预期,那么值得考虑云退出策略。以下介绍了如何执行反向迁移,将基于云计算的应用程序重新部署到内部部署设施。

1、分配足够的预算

将工作负载迁移回内部部署设施可能需要投资网络升级和新的监控、可观察性或安全工具,以帮助支持企业的内部部署设施运行工作负载。在某些情况下,企业可能需要增加员工。

一旦这些工作负载迁移到内部部署设施,企业需要确保可以分配足够的预算来支持工作负载。如果没有适当的财务准备,一旦工作负载离开云平台,将其遣返内部部署基础设施之后有可能无法提供支持。

2、让团队做好准备

如果必要,企业需要对其团队进行组织变革,指定工程师负责迁移项目。一旦应用重新部署,一定要分配特定的团队成员来支持它,特别是如果之前在迁移到云平台的过程中取消或减少了内部部署基础设施的支持。作为云遣返过程的一部分,确保可以将应用程序迁移或扩展它是至关重要的。

3、备份数据

如果企业的云托管应用程序创建或管理长期数据,则需要备份这些数据。这样做的方式取决于数据的存储方式。如果数据存在于数据库中,则可以对数据库创建快照,企业可以将对象存储数据复制到外部存储以创建备份。

确保数据备份与企业计划用于支持应用程序的数据技术兼容。一些专有的基于云的数据库和数据存储服务并没有企业可以在内部部署设施运行的对等服务。企业可能需要对数据进行转换,以便将其返回到内部部署设施。

4、备份应用程序

备份过程将根据应用程序的部署方式而有所不同。如果它是一个容器化的应用程序,可以在不经过复杂的快照过程的前提下迁移容器图像。如果要备份直接托管在虚拟机上的应用程序,可以对虚拟机创建快照,然后将快照转换为可以在内部部署设施托管的格式。

企业可以选择在内部部署设施重新部署应用程序的新实例,而不是尝试将基于云的实例迁移到其内部部署设施中。如果基于云的应用程序很难创建快照,或者如果想要更新到比在云中运行的应用程序更新的版本,这种方法是有意义的。

5、做好应急准备

在开始实际迁移过程之前,需要为可能中断迁移的紧急情况做好准备,例如停电或网络故障。这些意外事件很罕见,但也有可能发生。为了避免迁移失败或迁移时间过长,需要创建备份计划。

备份计划相当于保持应用程序的基于云的实例运行,直到能够成功地完成从云平台到内部部署设施的迁移。尽管如此,需要制定一个正式的计划,这样即使云迁移没有像预期的那样顺利进行,也不会惊慌失措。

6、实施迁移

在备份数据和应用程序之后,可以开始实施迁移。在大多数情况下,企业能够通过网络将数据和应用程序映像迁移到内部部署设施中。如果企业拥有大量数据,可能需要考虑采用其他数据传输服务,例如AWS Snowball。

7、验证新的应用程序实例

当企业的数据和应用程序迁移到内部部署设施时,在启用它们之前运行检查以确保它们按要求运行。企业需要确保没有数据损坏,并且内部部署数据的状态与基于云的实例的状态一致。

如果企业的应用程序在迁移过程中保持可操作,这可能会很棘手。可以使用rsync等工具执行快速同步,使两个版本的数据保持一致。

负载测试可以确保企业内部部署应用程序能够处理其期望的流量。安全扫描对于捕捉企业在工作负载迁移过程中可能遗漏的漏洞或配置风险很有价值。

8、让应用程序完全上线运行

如果企业的内部部署应用程序通过了所有验证检查,可以将所有应用程序请求重定向到内部部署实例,然后可以关闭基于云的实例。

这个过程通常包括更新DNS记录,使它们指向应用程序的正确实例。企业可能还需要配置负载平衡器和防火墙,以将流量正确地引导到内部部署应用程序实例。

有关云退出策略的八个关键步骤的更多相关文章

  1. ruby - Ruby 的 AST 中的 'send' 关键字是什么意思? - 2

    我正在尝试学习Ruby词法分析器和解析器(whitequarkparser)以了解更多有关从Ruby脚本进一步生成机器代码的过程。在解析以下Ruby代码字符串时。defadd(a,b)returna+bendputsadd1,2它导致以下S表达式符号。s(:begin,s(:def,:add,s(:args,s(:arg,:a),s(:arg,:b)),s(:return,s(:send,s(:lvar,:a),:+,s(:lvar,:b)))),s(:send,nil,:puts,s(:send,nil,:add,s(:int,1),s(:int,3))))任何人都可以向我解释生成的

  2. ruby - cucumber 特征和步骤定义 - 2

    我是Cucumber测试的新手。我创建了两个特征文件:events.featurepartner.feature并将我的步骤定义放在step_definitions文件夹中:./step_definitions/events.rbpartner.rbCucumber似乎在所有.rb文件中查找步骤信息。有没有办法限制该功能查看特定的步骤定义文件?我之所以要这样做,是因为即使我使用了--guess标志,我也会遇到不明确的匹配错误。我之所以要这样做,有以下几个原因。我正在测试CMS,并希望在不同的功能中测试每种不同的内容类型(事件和合作伙伴)。事件.特征Feature:AddpartnerA

  3. ruby - 在 ruby​​ 中生成一个进程,捕获 stdout,stderr,获取退出状态 - 2

    我想从ruby​​rake脚本运行一个可执行文件,比如foo.exe我希望将foo.exe的STDOUT和STDERR输出直接写入我正在运行rake任务的控制台.当进程完成时,我想将退出代码捕获到一个变量中。我如何实现这一目标?我一直在玩backticks、process.spawn、system但我无法获得我想要的所有行为,只有部分更新:我在Windows上,在标准命令提示符下,而不是cygwin 最佳答案 system获取您想要的STDOUT行为。它还返回true作为零退出代码,这可能很有用。$?填充了有关最后一次system调

  4. ruby - 如何在 Cucumber 步骤定义中使单词可选? - 2

    我在下面有一个步骤定义,它执行我想要它执行的操作,即它根据“PAGES”哈希的“page”元素检查页面的url。Then(/^Ishould(still)?beatthe"(.*)"page$/)do|still,page|BROWSER.url.should==PAGES[page]end步骤定义用于两者我应该在...页面我应该还在...页面但是,我不需要将“still”传递到block中。我只需要它是可选的以匹配步骤但不传递到block中。我该怎么做?谢谢。 最佳答案 您想将“静止”组标记为非捕获。这是通过使用?:启动组来完成的

  5. ruby - 为什么 return 关键字会导致我的 'if block' 出现问题? - 2

    下面的代码工作正常:person={:a=>:A,:b=>:B,:c=>:C}berson={:a=>:A1,:b=>:B1,:c=>:C1}kerson=person.merge(berson)do|key,oldv,newv|ifkey==:aoldvelsifkey==:bnewvelsekeyendendputskerson.inspect但是如果我在“ifblock”中添加return,我会得到一个错误:person={:a=>:A,:b=>:B,:c=>:C}berson={:a=>:A1,:b=>:B1,:c=>:C1}kerson=person.merge(berson

  6. ruby - 在 Ruby 中跳过额外的关键字参数 - 2

    我定义了一个方法:defmethod(one:1,two:2)[one,two]end当我这样调用它时:methodone:'one',three:'three'我得到:ArgumentError:unknownkeyword:three我不想从散列中一个一个地提取所需的键或排除额外的键。除了像这样定义方法之外,有没有办法规避这种行为:defmethod(one:1,two:2,**other)[one,two,other]end 最佳答案 如果不想写**other中的other,可以省略。defmethod(one:1,two:2

  7. ruby-on-rails - 覆盖 Controller 中的 protect_from_forgery 策略 - 2

    我想使用两种不同的protect_from_forgery策略构建一个Rails应用程序:一种用于Web应用程序,一种用于API。在我的应用程序Controller中,我有这行代码:protect_from_forgerywith::exception为了防止CSRF攻击,它工作得很好。在我的API命名空间中,我创建了一个继承self的应用程序Controller的api_controller,它是API命名空间中所有其他Controller的父类,我将上面的代码更改为:protect_from_forgery:null_session.遗憾的是,我在尝试发出POST请求时遇到错误:“

  8. ruby - 如何预期失败的步骤并传递 cucumber 中的失败? - 2

    我们想测试cucumber的步骤定义。我们希望能够检查的一件事是我们期望失败的测试实际上失败了。为此,我们想编写我们知道会失败的场景并将它们添加到我们的测试套件中,但标记或以其他方式表示它们以便当且仅当它们失败时它们“通过”。如何解决这个问题? 最佳答案 您应该测试负面状态。失败的步骤只是通过步骤的倒数。所以做这样的事情:Then/ishouldnotbetrue/dosome_value.should_notbe_trueend这就是我进行失败测试的方式。您还可以捕获异常等,并验证block是否确实抛出该异常lambdadosom

  9. ruby - ruby 方法查找中的*实际*步骤是什么? - 2

    我已经阅读了有关此主题的stackoverflow帖子以及包括APrimeronRubyMethodLookup在内的几篇文章,WhatisthemethodlookuppathinRuby.此外,我查看了RubyMetaprogramming2中的对象模型章节,在几个聊天室中询问,并做了thisredditthread。.除了学习C,我已经尽我所能来解决这个问题。如上述资源所述,这6个位置在接收对象(如fido_instance)的方法查找期间(按顺序)被检查。:fido_instance的单例类IClass(来自扩展模块)IClass(来自前置模块)类IClass(来自包含的模块)

  10. ruby-on-rails - 如何在不退出 IRB session 的情况下退出调试器? - 2

    这是一个长期存在的挫败感来源,但也许我遗漏了什么。如果我正在调试,并且我想退出调试器并返回到IRB或Rails控制台,“退出”将不起作用,因为它将退出IRB。“完成”似乎也与继续具有相同的效果。使用“删除”删除断点然后尝试“继续”或“完成”不起作用。有什么想法吗? 最佳答案 至少在byebug中,你可以这样做:evalreturn它具有计算当前函数的return语句的净效果。这有时会奏效,具体取决于调用堆栈的外观。现在虽然这不会删除当前断点....如果您只是想收回控制权,在大多数情况下这会做到这一点,具体取决于您的代码结构。在您的代

随机推荐