Kir Shatrov:Shopify从Rails开始,在这里他们真诚地喜欢这个框架。

RubyRussia会议上 Kir Shatrov将讨论Shopify架构。 世界上最大,最重的Rails应用程序之一如何在不改用微服务,Elixir和其他流行替代产品的情况下支持10年的业务增长? 在会议之前的一次传统采访中,Evrone的开发人员Anatoly Zaitsev向Kira提出了问题。

图片

告诉我你是如何开始事业的?

像许多人一样,我在学校编程。 我花了200美元熟悉了WordPress网站。 我了解了Ruby on Rails,并意识到用PHP花费数小时和数天的任务可以更快地解决。 在我看来,乘坐这趟火车是值得的:我买了一本关于Rails的书,开始逐步学习。 许多步骤无效,我放弃了课堂。 一年后,他回来了,尝试遍历在线教程,然后一切顺利。 直到那时,我才明白问题出在哪里:当本书被编写,翻译,印刷并送往商店时,一年甚至一年半过去了。 在这段时间内,Rails发生了很大的变化。 当然,这些说明不再起作用。 当我能够在线和阅读英语资料时,我轻松进入了Rails并进行了第一个业余爱好项目。

然后我遇到了RailsClub会议的创始人Oleg Balbekov,现在将其称为RubyRussia。 因此,我来​​到了Evrone,在那里工作了将近四年,并且由于优雅而聪明的同事,我得以成长。 Evrone起了很大的作用:有机会开放开源并发展。 然后我在Evil Martians工作,做了不同规模的项目-EBay,Groupon和Gett。 火星人拥有不同寻常的开源文化和实验,这远非所有团队都能做到的。 在项目之间或直接在项目之间,人们有机会参与开源。 事实证明,这不仅是开发AutoprefixerAnyCable的方式 。 结果,在会议上有一些事情要说。 我曾在俄罗斯的RailsClub,美国的RailsConf以及其他许多大型活动中发言。 而且由于我表现出色,我被发现并受邀在Shopify工作。

告诉我您如何搬到加拿大以及Shopify在此过程中如何提供帮助。

这种做法无法立即生效,搬迁困难重重:那时加拿大政府发动了罢工,根本没有人申请或改签签证,但一切都被允许了。 那是2013年至2014年,Shopify确实缺乏开发人员,他们开始将工程师从世界各地转移到他们自己。 此过程目前正在积极进行中。 如今,Shopify的规模如此之大,Shopify与加拿大政府共同制定了一项计划,可让您在三周内获得工作签证。 根据该计划,每年约有一百人搬家。 同时,不仅开源和知名演讲者都可以工作。 我们需要适合团队并编写良好代码的开发人员。

事实证明,如果您出色且专业地工作,那么进入Shopify无需庞大的往绩记录是可能的?

是的,是的。 能够谈论您的工作也很重要。 有人会说:“我修复了一个错误,并更新了Ruby版本,添加了新功能。” 而且,您可以从业务开发的角度讲述相同的问题,并解决其问题。 即使在接受此类公司的采访时,重要的是您在工作中引入了哪些创新,以及您如何参与社区:不仅编写了代码,而且例如,是一名志愿者,还帮助组织了Ruby会议。

您现在在Shopify到底在做什么?

任务是不同的。 我当然在写代码。 但是我很多时间都花在组织流程上。 例如,11月底将是黑色星期五。 对于从事电子商务的每个人来说,这是一年中最大的事件。 我们将从8月开始准备:我们需要就发布新功能与不同的团队达成共识,以与供应商和提供商达成共识。 在黑色星期五过去之后,我们进入了开始做新事情的阶段。 然后我必须戴上建筑师的帽子。

我自己决定,我愿意做不同的事情并尝试新事物,而不仅仅是编写代码。 但是我知道最喜欢编程的人,他们不想与三十个团队的参与者进行交流并参与流程的组织。 Shopify的一切都非常灵活;在公司内部,人们可以找到自己喜欢做的​​事情。

Shopify是一个很棒的平台。 您有几个客户?

官方数字是80万活跃商店。 这不仅是注册(还有更多),这些都是有生命的企业。

Shopify作为平台可为客户带来什么?

我们的重点是中小型企业。 小型企业通常只有一个主意:他们仍然不知道如何出售。 有必要解决许多问题:会计核算,付款和交货组织,为此选择合作伙伴。 我们的任务是节省企业家的时间,使他们尽可能少地处理日常问题。 我们自己承担这项工作。

如果您居住在Shopify提供全面支持的国家/地区,则意味着您无需选择付款系统,因为有Shopify Payments。 只要输入您的纳税详细信息,一切都会起作用。 与寄出货物时的情况相同:您打印不干胶标签,将其粘贴在包裹上然后寄出。 无需购买品牌,支付运费,Shopify会自动与邮件集成。 有仓库服务:您可以将商品发送到Shopify仓库,复杂的算法可以计算将其存储在哪个仓库中,以及如何确保在一天之内交付给客户。 这使小型企业可以与亚马逊和eBay竞争。

有一段时间,我致力于将项目移植到您的平台上。 这家商店有自己的库存,货物,客户群。 一切都非常方便:导出/导入,甚至连两次单击都可以连接第三方付款。 您拥有庞大的基础架构。 我是否正确理解大多数库(shopify api,shopify应用程序,shopify co)都是用Ruby和Rails编写的?

是的,是的。

经常将大量数据的不良性能归咎于Ruby。 当您需要扩展时,经常会缺少Ruby。 为什么Shopify使用此特定技术堆栈?

该公司从一个叫Toby的家伙开始,他喜欢滑雪板。 十二年前,他决定开设自己的商店来出售这些滑雪板。 他对用PHP,Java和XML进行此操作不感兴趣。 然后朋友David向他展示了他的新框架,使您可以快速创建Web应用程序。 该框架称为Ruby on Rails,Toby在其上建立了自己的滑雪板商店。 他喜欢框架的语言和想法,Toby是Rails的第一批贡献者之一。 那时,Rails甚至没有集中的git仓库! 人们只是交换了新版本。 因此Tobias LutkeDavid Heinemeyer Hansson开始研究Rails。 很快,托比意识到,开设自己的滑雪板商店而不是开设其他商店的整个平台要酷得多。

Tobias Lyutke是我们的创始人,他仍然是CEO。 在Shopify工作的15年中,他都可以在办公室找到。 该公司从Rails开始,它雇用了热爱此框架的人员。 他们看到了他们能够在Rails上构建所需功能的速度。 他们看到开发人员能够以多快的速度做某事,进行实验并交付生产。

我不认为该公司曾经认真考虑过改用其他产品的选择。 我认为,Web应用程序仍将依赖数据库。 到某处,取一些东西,重新格式化,粘贴模板,将其放入缓存中,然后给出结果。 它花费大部分时间。 Rails非常适合在100-300毫秒内呈现页面。 当然,如果需要8-10的渲染速度,则必须选择更快的速度,例如Go。 该公司设有一个部门,负责处理我们现有技术的基础架构,规模扩展和增长方向的研究。

您如何解决缩放和高负载问题?

我们有一个非常典型的堆栈:Rails,MySQL,Memcache,Redis。 当然,您已经在许多项目中使用了它。 在公司成立10周年的2014年某个时候,我们意识到我们需要的所有内容都无法放入一个数据库中。 您可以为MySQL服务器购买功能更强大的硬件,并且可以垂直增长,但是所有功能都有其局限性。

然后,我们认为分片将有助于水平增长。 就像SaaS一样,一个存储区的数据与另一个存储区的数据不重叠,我们可以非常简单地组织分片。 您无需在两个不同的商店之间进行联接。 使用我们的分片模型,成千上万个大小不同且负载不同的商店都生活在同一分片上。 碎片不仅包括数据库的本质,还包括其Redis,其Memcache等。 由于分片之间完全隔离,我们将整个Shopify分解为数百个小型Shopify。 每个人都可以托管在单独的区域中的单独区域,数据中心,提供商中。 如果您有100个碎片,而其中一个碎片掉落,它将仅影响1%的客户。 与一种资源下降时,一切都落到所有人身上的情况相比,这几乎是很少的。

这是使用分片的水平缩放。 并且不仅分片一个最重要的资源(数据库),而且隔离存储的所有组件。 出现其他有趣的问题。 例如,在某些分片上,有更多的商店,那里的人流量大,而人流量少。 负载更多,但负载更少。 我们必须解决在分片内部平衡存储的问题。

您要将商店从一个分片迁移到另一个分片吗?

当您需要解决此类问题时-是的。 我们有一个调整,我将在报告中详细描述。 将会有一个故事,讲述我们如何进入该方案,分片如何工作,这种方法不仅可以应用于我们的业务,还可以应用于其他业务。 我们自己必须开发一种工具,用于在分片和数据中心之间迁移存储。 基本上,需要迁移才能重新平衡。

然后,它变得非常有趣。 五年前,我们投资了一种可以独立运行Shopify实例的方法。 现在,我们的客户需要在特定司法管辖区拥有一个平台。 这种架构使我们能够构建仅在一个点隔离的实例。

松本行弘到达会议。 您想问他什么?

首先,我将描述上下文,以便使我的问题更加清楚。 据我所知,Ruby开发只有几个人,少于十个人,其中最多五个人。 大多数是日本人,他们已经做了很长时间了。 其中一些可以单手实现这种主要功能,例如行会或类型注释。 一切都与这些人息息相关。 而且,如果某个由Cookpad或Heroku赞助的人以某种方式实现了一项关键功能,那么事实就是如此。 但是有一个总线因素。

我认为,过去几年在Ruby中取得的最大进步是大公司发起的,因为大问题不能单独解决。 例如,Stripe雇用开发类型化编程语言的人员,并给予他们一年的研究时间。 事实证明,Sorbet不仅是类型检查的方法,而且是可以扩展的整个范例,其文档基于Stripe内部数百人的经验。 并且有很多这样的例子。 Oracle赞助Truffle,几人正致力于创建下一代虚拟机,重用Oracle内部数十位聪明人开发了数十年的虚拟机。

我想问一下Matz,他对与一小部分个人贡献者一起切实解决Ruby大问题有多少信念。 在主要赞助商的帮助下解决问题时,这种模型可以与实例竞争多少。

我们将在会议上讨论!

回想一下,它将于9月28日在莫斯科举行,所有详细信息和网站注册。

我们得到以下方面的支持:

主办单位-Evrone
一般合伙人-Toptal
金牌合作伙伴-Gett
银牌合作伙伴-ValarmJetBrainsBookmateCashwagon
铜牌合作伙伴-InSales

Source: https://habr.com/ru/post/zh-CN467479/


All Articles