草庐IT

乌克兰Raiffeisen银行的CTO谈战时的云迁移

Hryhorii Tatsyi 2023-03-28 原文

奥地利赖菲森国际银行(Raiffeisen Bank International)的子公司乌克兰赖菲森银行(Raiffeisen Bank Ukraine)在俄罗斯入侵乌克兰的那一天就开始了云迁移。在战火纷飞的三个月内,该公司已将1000多台服务器成功迁移至云端,在此过程中,从未发生过一次业务中断,也没有任何额外的供应商支持。

据悉,该银行是乌克兰最大的银行之一,拥有6000多名员工(其中800人从事技术工作)。此次,他们依靠一支足智多谋的远程工程师团队,成功实施了这项“上云”计划,使该银行能够获得基于云的优势,如速度和上市时间。乌克兰Raiffeisen银行的首席技术官(CTO)兼FinOps社区负责人Hryhorii Tatsyi与合作伙伴James Kaplan及麦肯锡的数据策略师Chett Rubenstein共同探讨了云迁移的挑战和好处,以下是采访摘录。

彻底的转型

James Kaplan:Hryhorii,你能简单介绍一下乌克兰Raiffeisen银行的云迁移之旅吗?Hryhorii Tatsyi:两年前,我们启动了一项技术转型计划,并采用了领域驱动设计(domain-driven design,DDD)架构。我们在公司内部建立了10个不同的领域,例如基于贷款、信用卡、支付、渠道、技术和安全等项目。这种转型一开始并没有与云连接,但这是我们银行的最终目标,也是我们前进的方向,我在2021年2月加入银行时曾与他们讨论了这个目标。目前,我们银行大约98%的业务都在云上运行。

James Kaplan:所以说,该银行在很大程度上是面向云的,那么其中有多少是迁移,有多少是新开发的?

Hryhorii Tatsyi:很难计算,但其中大约20%是新的,比如Kubernetes、微服务和所有很酷的东西,剩下的都是传统技术。即使是我们的传统技术也不算太差,可以利用关系数据库服务之类的东西。

使用云计算和FinOps节省时间和金钱

James Kaplan:你认为迁移到云计算的最大好处是什么?成本?速度?还是弹性?Hryhorii Tatsyi:最大的改进肯定是速度和产品上市时间。我们大大缩短了上市时间,团队可以在自己的账户上并行或单独工作,也更容易跟踪运营费用,每天,甚至每小时,都可以看到速度如何影响成本。我们在云计算上的花费比我们决定迁移时的预算要少。

迁移完成后,我们的账单是每月700000美元,因为我们在为不需要的功能买单。但在两个月内,我们的账单大幅减少,每月不到35万美元,这是通过我所创建的FinOps社区实现的。

当我们在两年前启动技术转型计划并采用领域驱动设计(DDD)时,来自每个领域的FinOps代表都参与了这个社区。每隔两周,我们就会收到FinOps社区的成果分享,这样一来,我们就能知道谁取得了最好的成绩,以及为什么。谁拥有最高效的EBS存储?谁拥有最高效的EC2实例?谁最省钱?

James Kaplan:开发团队要为使用付费吗?Hryhorii Tatsyi:这是心态/思维转变的一部分。你构建它,你运行它。你负责编写在此环境中运行的代码,费用由你的领域所有者或企业所有者支付。这就像你的企业为你的“玩具”买单,而你知道你的“玩具”现在值多少钱。我们正在使用Cudos来跟踪费用,它就像是FinOps的Grafana(一款可视化工具,用于展示数据)。

James Kaplan:退一步说,你能谈谈在采用云计算之后,运营模式发生了多大变化吗?技术团队和开发团队的工作改变了多少?

Hryhorii Tatsyi:可以说,它完全改变了我们的运营模式。我们利用InnerSource模型组建了一个新的Terraform团队,现在我们的平台完全是InnerSource的。以前,每个平台都有一个所有者,由他负责访问管理和互操作性。领域或部门可以看到这些平台,但不容易接触到它们。我的同事不得不向平台所有者发送书面的Jira请求来完成任何事情,这非常麻烦。最终,我们抛弃了这个模型。现在,我们的十个领域中的每一个都可以平等地访问我们的版本控制系统GitHub和我们所有的平台。每个领域现在都可以编写自己的Terraform脚本来提供技术资产和审查拉取请求。

炮火下的迁移之旅

Chett Rubenstein:我想聊聊去年的事件,你提到只用了3个月就成功迁移至云,你能给我们讲讲这个过程吗?Hryhorii Tatsyi:确实,我们只花了3个月就完成了这次迁移,因为形势所迫,我们别无选择。在最初的三个月里,我们每周工作7天,每天工作12个小时甚至更多,成功迁移了1000多个服务器。我们没有出现任何业务中断,也没有要求任何额外的供应商支持,而是用我们的双手、我们的头脑和我们的心力让一切都正常运行。在此过程中,我们可谓动力满满,因为我们有300多万客户依赖我们,如果我们失败了,乌克兰也会失败,因为人们会对银行系统失去信任。这就是我们动作如此之快,如此之安静,且没有关闭任何业务功能的原因。唯一的不足是,由于我们需要时间进行服务器转换和维护,因此减少了夜间的银行工作时间。

James Kaplan:所以说,你是在乌克兰的本地数据中心中运行了一部分可持续的数据环境。为了确保运营的连续性,你希望将这些数据从本地数据中心转移到全球云提供商,从而提供一定程度的距离和弹性,这是你永远无法在本地环境中获取的。你能够在三个月内迁移绝大部分环境,是因为你有充足的动力。如今,银行继续正常运作,它仍然是乌克兰经济的重要组成部分。这样说准确吗?

Hryhorii Tatsyi:是的,没错。

艰难的任务,果断的决定

James Kaplan:这是一个引人入胜的故事,坦率地说,也是一个非常鼓舞人心的故事,它突出了企业技术在许多方面的最佳状态。云迁移的决定是显而易见的吗?Hryhorii Tatsyi:可以说,这是我一生中做得最简单、最爽快的决定。当我在2022年2月24日(俄罗斯入侵乌克兰的那天)早上5点醒来时,我便决定马上开始云迁移。所以,我立即致电老板说,“我们开始吧!”

事实上,我们已经做了一些准备,并且明白如果入侵真的发生,我们就会这么做。幸运的是,我们有一位负责业务连续性管理(BCM)的高级经理Yevhen Baliutov,他为每个人做好了应对各种可能情况的准备。我今年31岁,我不相信这场战争会发生。但Yevhen却认为,“一切皆有可能。不要成为这种情况下的受害者。做好准备,做好你的工作,我们会处理好一切。”而事实也确实如他所料。

James Kaplan:在战争开始之前,云基础是否已经就位?Hryhorii Tatsyi:不,没有。事实上,即便我们想这么做,也做不到,因为法律禁止银行使用乌克兰以外的服务器。我们一向非常尊重法律,违反法律对我们来说是一条不可触及的红线。但2月24日的情况告诉我们,稍微对冲一下也是可以的。大概过了三四个小时,我们的管理人员说,“伙计们,请开始吧。”

没有路线图的迁移

James Kaplan:迁移过程中,你们在多大程度上遵循路线图,多大程度上边走边探寻答案?Hryhorii Tatsyi:我们只是有一个高层计划,说“我们会做这个,那个,还有那个。”但我们不知道该怎么做。我们知道我们应该迁移这些服务器,但不知道如何在现实中做到这一点。所以所有让它运行的决定都是在迁移过程中做出的。事实证明这是可行的,因为我们已经有了不同云平台的经验;我的团队中的大多数人都曾在不同的公司担任过不同的角色。当我初到Raiffeisen时,便着手组建了一支经验丰富的云计算团队,因为我知道云迁移迟早会发生。

James Kaplan:你的团队大部分是远程的还是现场的?Hryhorii Tatsyi:每个人都是远程工作。我们在文尼察、基辅、敖德萨都有员工,还有一些人来自国外,比如维也纳和塞尔维亚。

James Kaplan:这对你们来说是一种“一切照旧”的事情,而非特定的情况吗?Hryhorii Tatsyi:一半一半吧,因为新冠疫情的存在,我们实际上已经做好了随时迁移的准备。有些人已经远程工作,大约50%的人在我们的办公室现场工作。但由于战争,这一部分人也已移居到更安全的地方。

不要想太多,勇敢一点,去做就好

Chett Rubenstein:战争促使你们在三个月内完成了这些事情,这让我很着迷,也很受鼓舞。但是,在非战争情况下,我们是否可以借鉴一些经验来实现这种创新的速度和效率?我很想听听你的想法。

Hryhorii Tatsyi:无疑,战争是最大的激励因素。但即使没有战争,如果你足够勇敢,你决定去做,那就去做吧。不要想太多,照顾好你的产品,只管去做。一些和我们一起进行迁移的公司真的想太多了,总是在问,“如果……会发生什么?”你不可能总是进行真正的测试,所以尝试一下吧。你并不总是需要99.9%的服务水平协议。尽管去做。相信你的员工,勇敢行动起来。

James Kaplan:从你们的经验中学到的东西是否适用于其他地区的其他银行?或者来自Raiffeisen国际银行其他子公司的人看到这一点,是否可以通过采纳你关于积极迁移的建议进行迁移?Hryhorii Tatsyi:事实上,我们已经和不同的国家通了几个电话。明天我们将和斯洛伐克的Tatra Banka通话,她是我们小组的成员。我给他们的建议还是一样的:不要想太多,勇敢一点,去做就好。

有关乌克兰Raiffeisen银行的CTO谈战时的云迁移的更多相关文章

  1. ruby-on-rails - Ruby on Rails 迁移,将表更改为 MyISAM - 2

    如何正确创建Rails迁移,以便将表更改为MySQL中的MyISAM?目前是InnoDB。运行原始执行语句会更改表,但它不会更新db/schema.rb,因此当在测试环境中重新创建表时,它会返回到InnoDB并且我的全文搜索失败。我如何着手更改/添加迁移,以便将现有表修改为MyISAM并更新schema.rb,以便我的数据库和相应的测试数据库得到相应更新? 最佳答案 我没有找到执行此操作的好方法。您可以像有人建议的那样更改您的schema.rb,然后运行:rakedb:schema:load,但是,这将覆盖您的数据。我的做法是(假设

  2. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  3. ruby-on-rails - 在现有数据库上进行 Rails 迁移 - 2

    我正在创建一个新的Rails3.1应用程序。我希望这个新应用程序重用现有数据库(由以前的Rails2应用程序创建)。我创建了新的应用程序定义模型,它重用了数据库中的一些现有数据。在开发和测试阶段,一切正常,因为它在干净的表数据库上运行,但是当尝试部署到生产环境时,我收到如下消息:PGError:ERROR:column"email"ofrelation"users"alreadyexists***[err::localhost]:ALTERTABLE"users"ADDCOLUMN"email"charactervarying(255)DEFAULT''NOTNULL但是我在迁移中有这

  4. ruby-on-rails - Rails 迁移中的 PostgreSQL 点类型 - 2

    我想使用PostgreSQL中的point类型。我已经完成了:railsgmodelTestpoint:point最终的迁移是:classCreateTests当我运行时:rakedb:migrate结果是:==CreateTests:migrating====================================================--create_table(:tests)rakeaborted!Anerrorhasoccurred,thisandalllatermigrationscanceled:undefinedmethod`point'for#/hom

  5. ruby-on-rails - Rails 3 : belongs_to, has_one 和迁移 - 2

    我是Rails的新手,我是从Django背景开始接触它的。我已经接受了这样一个事实,即模型和数据库模式在Rails和在线Django中是分开的。但是,我仍在努力处理迁移。我的问题很简单-如何使用迁移向模型添加关系?例如,我现在有Artist和Song作为ActiveRecord::Base子类的空模型,没有任何关系。我需要开始做这件事:classArtist但是我如何使用railsgmigrate更改架构以反射(reflect)这一点?我正在使用Rails3.1.3。 最佳答案 现在,在Rails4中,您可以:classAddPro

  6. ruby-on-rails - Rails 4 从迁移索引中删除迁移 ID - 2

    如何在rakedb:migrate:status中删除带有“**NOFILE**”的迁移ID列表?例如:StatusMigrationIDMigrationName--------------------------------------------------up20131017204224Createusersup20131218005823**********NOFILE**********up20131218011334**********NOFILE**********我不明白为什么当我自己手动删除它时它仍然保留旧的迁移文件,因为我正在研究迁移的工作原理。这是为了记录吗?但

  7. ruby-on-rails - 即使没有挂起的迁移,Rails 迁移也非常缓慢 - 2

    我的生产Rails应用程序需要167秒来运行rakedb:migrate。可悲的是,没有要运行的迁移。我试图在检查是否有待处理的迁移时调整运行的迁移,但随后检查花费了同样长的时间。我心目中唯一的“借口”是数据库并不小,那里有1M条记录,但我看不出这有什么关系。我查看了日志,但没有任何迹象表明出了什么问题。我在运行ruby2.2.0rails4.2.0有没有人知道为什么会这样,是否有什么办法可以解决? 最佳答案 运行rakedb:migrate任务还会调用db:schema:dump任务,这将更新您的db/schema.rb。因此,即

  8. ruby-on-rails - 运行迁移时出现 Rails 迁移错误? - 2

    当我执行rakedb:migrate时,出现以下错误:rakeaborted!Gem::LoadError:Youhavealreadyactivatedrake10.2.2,butyourGemfilerequiresrake10.1.0.Usingbundleexecmaysolvethis.如何解决这个问题? 最佳答案 此错误是由于某些应用程序指定的gem版本可能与您安装的版本不同。尝试使用bundleexecrakedb:migrate。使用bundleexec保证程序在gemfile中指定的环境下运行。

  9. ruby-on-rails - 使用 PostgreSQL 适配器限制 ActiveRecord 迁移 5.0 中的文本列 - 2

    我的迁移看起来像这样classCreateQuestionings现在,当我运行$rakedb:migrate:reset时,在我的db/schema.rb中看不到限制:create_table"questionings",force::cascadedo|t|t.text"body",null:falseend我做错了吗还是这是一个错误?顺便说一下,我使用的是rails5.0.0.beta3和ruby​​2.3.0p0。 最佳答案 t.text在PostgreSQL和textdoesn'tallowforsizelimits中生成

  10. ruby-on-rails - Rails 3.1 引擎迁移不起作用 - 2

    我正在创建一个带有迁移的Rails3.1引擎。rakedb:migration在该引擎和主机应用程序内部运行良好。但是我需要将这个引擎包含到另一个Rails引擎中。第二个引擎包含用于测试的虚拟应用程序,我在该虚拟应用程序的application.rb添加了这一行:require'my_engine'在控制台中,我可以看到第一个引擎的类。rake-T给我app:my_engine_engine:install:migrations任务,但是当我运行这个任务时rakeapp:my_engine_engine:install:migrations我收到这个错误:rakeaborted!Don

随机推荐