BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

GoTo 2017哥本哈根大会:Shopify如何支撑在线商务

| 作者 Andrew Morgan 关注 0 他的粉丝 ,译者 盖磊 关注 1 他的粉丝 发布于 2017年11月3日. 估计阅读时间: 4 分钟 | QCon北京2018全面起航:开启与Netflix、微软、ThoughtWorks等公司的技术创新之路!

亲爱的读者:我们最近添加了一些个人消息定制功能,您只需选择感兴趣的技术主题,即可获取重要资讯的邮件和网页通知

Shopify高级产品工程主管Simon Eskildsen在GoTo 2017哥本哈根大会上做报告,概述了Shopify是如何构建支持大规模销售的架构。报告内容涉及使用OpenResty配置NGINX实例、商店和Pod的隔离架构、故障转移策略等。

据Eskildsen介绍,Shopify为大量的在线商务提供服务,正支持超过50万家商户。其中不少商户只提供在线商店,它们的一个主要需求就是能将销售快速地交付给它们的客户。尽管驾驭销售流量本身并非难事,但是所面对的主要挑战在于创建一种可应付突发大流量的架构。

据Eskildsen介绍,Shopifys的首个优化调整就是在DNS层。对单个域在DNS层的流量优化是很容易实现的,但是对于多个域则是难以企及的。Shopify面对正是这样的问题,多个客户域都指向其IP。Spotify的做法是使用TCP/ICP任播(Anycast)技术,这是一种“gossip算法,其中每个ISP告知其近邻的所有ISP它知道如何路由的IP情况”。这基本上导致了流量总是会选择最近的IP。

Shopify也大量地使用了OpenResty。该工具允许使用Lua编写所需NGINX负载均衡器实现的任何功能。Eskildsen强调,就Shopify的使用情况来看,OpenResty是非常强大的。他相信,总体说来OpenResty并未在行业中得到充分的利用。他列出了在Shopify使用的一些模块:

  • Rule banner:通过查看不规则刷新、可疑IP地址等异常模式发现僵尸程序(bot),进而禁止这些异常模式。该模块的目的是关闭二级市场。

  • Edge cache:对缓存做优化,允许在负载均衡层而非应用层的缓存提供内容。

  • Checkout throttle:节流机制通过对一些商户进行排队,实现对这些商户在异常负载情况下的写入操作,从而防止一家商户变成同一片上其余商户的嘈杂邻居。

Eskildsen还介绍了Shopify引入的“Pod”概念。Pod用于应用层或数据层上,是一种完全隔离的Shopify实例,其中包含了很多的商店。在设计上是不允许Pod间和商店间通信,因为关键在于客户间的隔离。“商店隔离原则,所有的商店必须相互隔离”。

尽管每个Pod都包含了自身的有状态服务(例如数据库),无状态服务也是共享的。Eskildsen解释说,这样做的主要原因是自动扩展引入了过量的瓶颈问题。相比于新架构所考虑到的情况,流量尖峰会来得更快。

Eskildsen还概要地介绍了Pod负载均衡器。Pod负载均衡器用于均衡Pod间的商店,并确保负载的平均分布。为快速实现此目标,同时不损失数据的一致性,Shopify使用了MySQL的二进制日志,使数据库更改事件从旧实例流到新的实例。

对于跨区域迁移,Shopify还提供了一个称为“Pod Mover”的组件,以最小的宕机时间实现Pod的跨区域移动。当一个区域不工作时,就激活迁移。但是Eskildsen解释说,他们的最终目标是给出一个Slack命令,这样就可以在任一时刻触发此类故障迁移。

完整的演讲可在线观看,其中对这一架构做了更详细的解释

查看英文原文: GoTo Copenhagen 2017: How Shopify Powers Online Commerce

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT