为何选择MySQL替代品来建立HA产品库存

106 阅读7分钟

AllSaints是一家有27年历史的全球时尚零售企业,总部设在英国。我们在世界各地都有实体店,从历史上看,我们的业务在很大程度上依赖于实体店的销售。因此,让我感到惊讶和欣慰的是,我们的客户在大流行期间非常愿意改变他们的行为,在网上购物,这帮助我们保持健康的收入数字。

随着AllSaints在全球范围内的发展和扩张,我们发现我们基于MySQL的传统系统已经无法适应不断增长的客户群了。我在六年前加入AllSaints,并开始对我们的基础设施进行现代化和简化,以更好地适应未来的成功。我们已经将很多服务转移到GCP。我们一直在寻找机会,将工具引入内部,减少对第三方的依赖。

这篇文章讨论了我们在CockroachDB上建立的批发业务。我将介绍我们希望通过数据库解决的痛点,为什么我们选择CockroachDB而不是Spanner,我们的批发工作负载架构是什么样的,以及我们对CockroachDB的未来计划。

数据库痛点

像我们的批发平台这样的绿地项目,正是使用你所了解的新工具和纠正过去一些错误的好机会。对我们来说,最紧迫的问题是要确保我们利用微服务来提高工作效率。我们从未考虑过将MySQL部署在Kubernetes旁边。它并不适合。

我们还想避免将自己锁定在一个云供应商。锁定会损害应用架构的灵活性。现实上,我们现在不需要这种灵活性,但我们在未来会需要,这就是我们的架构。

高可用性不能成为拥有大量交易性工作负载的零售企业的痛点。不幸的是,我在过去已经看到了这一点。它导致了一些棘手的问题,比如销售不存在的股票。这不是你想感受的痛苦。

批发业务数据库的要求

我们的建筑师,Ali Rankine,知道我们应该为这个项目使用CockroachDB。所以我得把所有的功劳归功于他的这个决定。他是那种会阅读所有最新研究的创新建筑师,他知道CockroachDB与Spanner有多大的可比性,而且还有保持我们灵活性的附加价值。

我们对数据库的要求与你所期望的差不多,主要是关于产品库存和订单管理的用例。

  • 一个管理性的产品。我们是一个小团队。我们希望数据库能照顾好自己。
  • 高可用性。由于我上面所说的原因
  • Kubernetes的兼容性。使用微服务可以帮助我们快速透视/测试,使我们更有弹性。并非所有的数据库都适合于k8s。(CockroachDB是一个非常合适的。)
  • 良好的性能。这是个棘手的问题。分布式系统的性能是一门不同的学科。CockroachDB的沙盒环境会给你一个很好的指示,告诉你在生产中你可以期待什么。

为什么AllSaints选择了CockroachDB?

CockroachDB满足了上述所有的要求。由于这些原因,它很适合这个用例。但是我们还有另外两个目标,CockroachDB也符合这些目标。

面向未来的架构

我们希望在不增加大量成本的情况下证明我们的基础设施。我们希望致力于使用能够与我们一起成长的工具。我们很少购买现成的工具,因为我们希望能够完全控制我们的应用程序,从而控制时间框架。CockroachDB是一个值得购买的工具,因为它不会妨碍我们的时间框架。 当你看到CockroachDB正在构建的东西时,很明显,他们专注于多地区、多云的部署。这比我们目前的工作负荷所需要的马力更大。但这完全符合AllSaints的发展方向。

简单、高效的架构

我们希望我们的架构能够更加简单。刚才我提到了我们选择的CockroachDB的管理产品。我们是一个小团队,很多开发工作都是由承包商完成的。我们需要简单的堆栈,以保持生产力。CockroachCloud很简单,因为它消除了所有的操作任务。但它也只是一个简单的数据库。运转你的第一个节点是如此简单。查询数据很简单。添加用户很简单。扩展也很简单。在这一点上,CockroachDB符合我们的精神。

CockroachDB上的AllSaints零售批发工作负载

建立在CockroachDB上的批发应用是一个内部应用,销售团队使用它来处理与Zappos、Bloomingdales和Macy's等批发伙伴的订单。每一季我们都会将产品数据和订单数据加载到CockroachDB中,销售团队则使用该数据库来计划和执行该季的销售。这是一个新的应用程序,也是AllSaints的一个相对新的业务线。

这个应用建立在10多个微服务上,并与部署在CockroachCloud上的9个节点集群连接。这是批发应用的第一阶段。现在,一切都在CloudFlare Waf CDN后面运行。这就是我们目前锁定该应用的方式,仅供内部使用。因此,我们使用Cloudflare DNS的区域和Cloudflare区域锁定规则,代理回GCP的负载均衡器,将流量转发到Kubernetes集群。

看看这个架构吧。

high-availability-database-architecture

使用CockroachDB的便捷性

CockroachDB的基本承诺,如HA和Kubernetes的兼容性,都是真的。这也是预料之中的事。

我对它的易用性感到非常惊喜。我们的集群是为我们量身定做的,因为我们选择了管理型的解决方案,但很高兴的是,自从它们被启动以来,我们从来没有要求过帮助。我们的开发人员在适应新的数据库方面也很容易。有一次,他们需要对一个高插入工作负载的性能进行调整,这一切都非常直接,因为文档非常强大。

作为一个在公司里担任大多数事务的管理员的人,对我来说,增加新的用户和新的应用程序用户是如此的容易。

DB控制台已经成为我一直打开的两个标签之一(另一个是谷歌云控制台)。我不是一个开发人员,但我喜欢亲自动手。我喜欢基于网络的监控,所以我可以看到实时发生的情况。目前,节点间的延迟并不超级重要。但是,当我们在不同地区进行数据地理分区时,延迟将是有趣的观察。

将所有产品数据添加到CockroachDB中

AllSaints正在成长,批发方面的业务增长特别快。在这一点上,我们基本上被我们要销售的产品的数量所限制。所以,现在我们知道,我们可以计划更多的生产,并利用批发业务来销售这些产品。

所有这些都是说,这个工作量将扩大到多个地区。那时我们就有理由开始使用CockroachDB的地理分区功能,以达到性能和数据存储监管的目的。而且我们将与EDI的整合。我们目前使用RabbitMQ与数据库集成,但我们将增加EDI的功能,以便能够与批发商沟通。

最重要的是,我们计划增加存储在CockroachDB上的产品数据。现在,CockroachDB存储的是所有相关的批发产品数据。但我们正计划将所有的产品数据转移到CockroachDB上,这样我们就可以在一个地方拥有所有的库存,从而对所有的数据形成一个单一的、整体的看法。

总的来说,CockroachDB已经完全达到了我们的预期,甚至更多。但这仅仅是个开始。我们期待着业务的发展,以及对CockroachDB的进一步使用。

点击这里阅读AllSaints的完整案例研究。