作者 | David Linthicum
译者 | 卢鑫旺
策划丨诺亚
在决定将应用迁移到公有云之前,必须确定迁移方法。常见的两个迁移选项是lift-and-shift(“提升和转移”,也称“重新托管”)和rearchitect(重新架构)。
根据Pluralsight最近的云状态报告,75%的IT公司正在构建网络新应用程序和云创新。这意味着25%的应用程序需要用“提升和转移”(lift-and-shift)策略进行迁移。
因为它们只是按原样移动,开发人员不必更改应用的架构或设计,因此“提升和转移”过程所需的时间比“重新架构”的时间要少。但“提升和转移”策略也有缺点。比如,如果你将应用迁移到IaaS而无需任何修改,那么可能无法利用关键的云特性:自动缩放。其结果是,这些应用的运行方式仍然与本地部署的系统相同——在高峰期,企业将为实际使用的云存储和计算资源付出更多的代价。
也就是说,采用“提升和转移”云迁移的策略不能发挥出云平台的优势。通过转移或者叫重新托管上云的应用程序无法利用云的特性(如Serverless)或者云原生的特性(如Kubernetes和容器)。
“提升和转移”云迁移策略曾经是将应用程序和数据迁移到云中的最流行的方式,直到现在依然受到很多企业的欢迎。其基本思想是在不改动或者很少改动下直接把项目复刻到云上。那么现在我们有更好的方法吗?使用“提升和转移”云迁移策略又会让我们错失哪些云平台带来的优势呢?
企业需要对他们的应用程序进行现代化改进,以针对它们所在的云平台对其进行优化。这被大多数重视速度而非效率的企业视为代价高昂和低效的做法。事实上,这是“提升和转移”云迁移策略大流行期间的常态。
一些公司为了加快把项目迁移到云上,即使在最初进行了更多重构(针对目标云平台进行优化),也会先回到使用“提升和转移”云迁移策略,先把项目迁移到云上来。当时,企业认为把项目留在本地数据中心的系统风险更高,很多流行的做法限制了对传统数据中心的访问。这为IT部门提供了快速发展的许可,往往意味着跳过现代化步骤,例如针对目标云平台的应用程序重构,而是先直接把项目复刻到云上。
这样看来企业要付出更高的代价。如果你看看最近的调查,就会发现,云计算的成本远远高于大多数企业的预期。如此一来,董事会和执行团队可能会停止企业在云计算投入的增长,至少在他们找到问题所在之前是这样。
今天,大多数企业的想法是,我们需要放慢速度,这样才能走得更快。这意味着企业需要投资于重构应用程序上来,以获得云原生的好处。重构可以让企业以更低的成本将项目迁移到云上。
我最近看到的大多数有云计算标签的问题都是由于缺乏云成本监控和优化(finops)。大多数提升和转移的应用程序运行起来像自卸卡车,而实际上它们应该像一辆新的特斯拉一样。当然,更大的问题是业务受到了影响,在许多情况下,核心业务的失败可能会追溯到企业无法利用云计算实现其应有的功能——这是业务的真正力量倍增器。
底线是,大多数企业在提升和转移应用程序到云上时,都没有考虑到金钱和商业机会。更糟糕的是,他们甚至不知道自己在做什么。当业务走下坡路时,他们感到困惑,而转向云计算只会让情况变得更糟。
“提升和转移”云迁移策略不再是一种选择了吗?当然不是。所有的选择都应该摆在桌面上。对于无法从云原生特性中获益的应用程序来说,采用“提升和转移”云迁移策略来把项目上云是没问题的。但是,它不再是人们希望快速将应用程序迁移到公有云的首选解决方案。
原文链接:
https://www.infoworld.com/article/3678192/lift-and-shift-cloud-migrations-are-dying.html
卢鑫旺,51CTO社区编辑,编程语言爱好者,对数据库,架构,云原生有浓厚兴趣。
如何正确创建Rails迁移,以便将表更改为MySQL中的MyISAM?目前是InnoDB。运行原始执行语句会更改表,但它不会更新db/schema.rb,因此当在测试环境中重新创建表时,它会返回到InnoDB并且我的全文搜索失败。我如何着手更改/添加迁移,以便将现有表修改为MyISAM并更新schema.rb,以便我的数据库和相应的测试数据库得到相应更新? 最佳答案 我没有找到执行此操作的好方法。您可以像有人建议的那样更改您的schema.rb,然后运行:rakedb:schema:load,但是,这将覆盖您的数据。我的做法是(假设
使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta
我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or
我正在创建一个新的Rails3.1应用程序。我希望这个新应用程序重用现有数据库(由以前的Rails2应用程序创建)。我创建了新的应用程序定义模型,它重用了数据库中的一些现有数据。在开发和测试阶段,一切正常,因为它在干净的表数据库上运行,但是当尝试部署到生产环境时,我收到如下消息:PGError:ERROR:column"email"ofrelation"users"alreadyexists***[err::localhost]:ALTERTABLE"users"ADDCOLUMN"email"charactervarying(255)DEFAULT''NOTNULL但是我在迁移中有这
如果用户是所有者,我有一个条件来检查说删除和文章。delete_articleifuser.owner?另一种方式是user.owner?&&delete_article选择它有什么好处还是它只是一种写作风格 最佳答案 性能不太可能成为该声明的问题。第一个要好得多-它更容易阅读。您future的自己和其他将开始编写代码的人会为此感谢您。 关于ruby-on-rails-如果条件与&&,是否有任何性能提升,我们在StackOverflow上找到一个类似的问题:
我有一个模块:moduleMyModuledefdo_something#...endend由类使用如下:classMyCommandextendMyModuledefself.execute#...do_somethingendend如何验证MyCommand.execute调用了do_something?我已经尝试使用mocha进行部分模拟,但是当未调用do_something时它不会失败:it"callsdo_something"doMyCommand.stubs(:do_something)MyCommand.executeend 最佳答案
我想使用PostgreSQL中的point类型。我已经完成了:railsgmodelTestpoint:point最终的迁移是:classCreateTests当我运行时:rakedb:migrate结果是:==CreateTests:migrating====================================================--create_table(:tests)rakeaborted!Anerrorhasoccurred,thisandalllatermigrationscanceled:undefinedmethod`point'for#/hom
我有一个定义类的Ruby脚本。我希望脚本执行语句BoolParser.generate:file_base=>'bool_parser'仅当脚本作为可执行文件被调用时,而不是当它被irbrequire(或通过-r在命令行上传递)时。我可以用什么来包装上面的语句,以防止它在我的Ruby文件加载时执行? 最佳答案 条件$0==__FILE__...!/usr/bin/ruby1.8classBoolParserdefself.generate(args)p['BoolParser.generate',args]endendif$0==_
我想使用两种不同的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请求时遇到错误:“
我是Rails的新手,我是从Django背景开始接触它的。我已经接受了这样一个事实,即模型和数据库模式在Rails和在线Django中是分开的。但是,我仍在努力处理迁移。我的问题很简单-如何使用迁移向模型添加关系?例如,我现在有Artist和Song作为ActiveRecord::Base子类的空模型,没有任何关系。我需要开始做这件事:classArtist但是我如何使用railsgmigrate更改架构以反射(reflect)这一点?我正在使用Rails3.1.3。 最佳答案 现在,在Rails4中,您可以:classAddPro