在Shopify拒绝微服务:他们会怎么做


代号是DockerCon 2015!这是我们在旧金山参加的为期两天的会议上的一个演讲。如果您对代码船的码头工人支持感兴趣,click here

Simon Eskildsen在码头上谈论如何Shopify获得了一个简单的基础架构解决方案,该解决方案支持大规模的分布式弹性路由和发现系统。

作为Shoppiy的基础设施工程师,Eskildsen向他的听众解释说,Shoppiy拒绝复杂服务发现协议和分布式微服务的传统概念。相反,它们使用通过域名系统发现的更大、更有弹性的应用程序。

西蒙·爱斯基摩森,2015年

微服务不能解决所有问题

爱斯基摩森强调,首先,微服务不是构建每一个基础设施的终极解决方案。他指出,应用程序弹性要重要得多。由微服务组成的分布式应用程序容易受到攻击。

他建议看看他所谓的弹性成熟度金字塔。测试可以应用到您的应用程序中,以增加测试弹性级别的严重性。如下图所示,金字塔应该随着基础设施的增长而攀升。

Resiliency pyramid

Eskildsen指出,应用程序的一个关键指标应该是弹性,而不是可读性、关注点分离、粒度可伸缩性或微服务的任何主要参数。应用程序的设计应该是经验性的,而不是随意设计的。

因此,Shopify不使用微服务也许并不奇怪。相反,爱斯基摩森说,该公司使用更少,但更大的应用程序。

关注发现

爱斯基摩森说,发现是服务、元数据和编排的基础设施的真实来源。

您应该考虑该方法的目标是区域发现还是全局发现,但无论如何,发现主干应该具有以下特征:

  • 没有单点故障
  • 陈旧读取>无读取
  • 读取的数量级大于写入的数量级
  • 快速收敛

爱斯基摩森指出,服务发现通常过于复杂。DNS作为一种服务发现协议对大多数用例来说都很好。出于几个具体原因,Shopify决定使用域名系统实现服务发现:

  • 它有弹性
  • 很简单
  • 在大多数情况下,它都可以访问应用编程接口
  • 它得到了全球的支持

使用域名系统的决定也部分基于等待码头工人发布类似码头工人网络的东西,which it announced last Monday

话虽如此,爱斯基摩森在周一的讲话还是为一个相当具体的问题勾勒出了一个具体的解决方案。许多代码船用户将通过简单的Docker组合堆栈进行测试,这不需要接触任何更复杂的东西,比如开箱即用的服务发现。就容器而言,微服务非常适合许多较小的服务,而不是较少的较大服务。

当然,爱斯基摩森关于减速和考虑简单解决方案的主要观点将永远适用于任何基础设施设计。

幻灯片

DockerCon SF 2015: Resilient Routing and DiscoveryDocker, Inc.