野外的叶子:comparethemarket.com迁移到MongoDB,将应用程序推向市场的速度比关系型数据库快2倍


  • 管理員

    在创新的竞争对手:MongoDB、Microservices、Docker、Hadoop和Cloud。

        互联网和移动技术把权力牢牢地掌握在客户手中,世界上没有比这更好的比价服务,这里允许使用者只需点击或滑动即可找到最优惠的交易。comparethemarket.com已经发展成为英国主要的供货商,是国家最知名的品牌之一,但这种发展并非来自低价格或巧妙的营销。用Matthew Collinge的话说(comparethemarket.com技术和架构的副主任):“我们将技术视为竞争优势,当你在一个行业中作为价格比较服务具有竞争力的企业时,你需要通过以更高的质量和更低的成本更快地交付新的应用和功能来超越其他竞争者。 对我们来说,关键在于采用敏捷开发方法、持续交付、开源技术和云计算。”

    我和Matthew于他在伦敦的高级Shoreditch办公室里坐下来了解了很多:

    请先告诉我们一些与你们公司相关的事情。

        comparethemarket.com于2006年推出,在过去十年中迅速发展,成为英国领先的比价网之一。 我们为客户做出正确的选择广泛的产品提供一个简单的方法,包括电机、家庭、生活、旅游和宠物保险,以及公用设施提供商和金融产品,如信用卡和贷款。

    请描述你们的应用程序使用MongoDB的情况。

        在越来越多的微服务器运行在comparethemarket.com的情况下,我们使用MongoDB作为操作数据库。MongoDB由于其开发和性能特征的低摩擦而成为构建新服务的默认数据库选择。

        我们的比较系统需要有效收集客户的详细信息,然后将其安全地发送给不同的供货商,同时,我们需要数据库来进行实时分析,以便通过我们的网络和移动产品个性化客户体验。

    你们在MongoDB之前使用的是什么?

        MongoDB于2012年引进用于家庭保险比较服务。我们当时现有的服务是建立在Microsoft SQL Server的基础上的,但随着我们的服务越来越受欢迎,我们越来越难以扩展,要处理越来越大的流量。关系型数据库包含了许多功能,但是我们在性能开销方面付出了代价,降低了开发敏捷性。

    你们为什么选择MongoDB?

        我们希望能够配置每个应用程序和每个操作的一致性,有时候,能够立即读到自己的操作是非常必要的,所以需要很强的一致性。在其他情况下,最终的一致性是正确的, MongoDB为我们提供了与其他数据库无法比拟的满足我们需求的性能特性的可调整一致性。

        回到2012年,comparethemarket.com纯粹是一个运行在只支持Windows基础架构上的.NET商店。而MongoDB是同时支持Linux和Windows的少数几个非关系型数据库之一,因此开发人员很容易接手,也可以让我们的操作团队进行部署和运行。

    请描述一下你们关于MongoDB的部署

        我们目前正在运行混合环境,其中一些较旧的服务在我们的本地数据中心运行,而较新的微服务部署到Amazon Web Services。我们的目标是将所有内容移至云端。

        我们的本地架构包括五个节点MongoDB副本集,分布在三个数据中心,以提供复原与灾难恢复。 每个主数据中心部署两个完整的规范节点,并在次要位置部署仲裁器。 我们使用专用服务器叶片配置本地SSD存储和Ubuntu系统。

        在云服务中,相关微服务的每个微服务或逻辑分组都被配置有自己的在加密存储引擎中运行的MongoDB副本集,以进一步减少与安全性相关的表面积。 我们的MongoDB云实例领先于我们的本地集群,有些运行最新的3.2版本。 每个实例都使用“基础架构代码”设计模式配置了一个Ops Manager代理,具有来自策展基地AMI的完整测试套件和秘诀。

        在应用程序开发方面,我们使用Node.js上的JavaScript以及在CoreCLR和Docker上运行的.Net来简化业务流程。

    你们使用什么工具来管理MongoDB部署?

        操作自动化对于使我们能够快速启动新功能,并在规模上可靠地运行它们至关重要。 我们使用Ops Manager部署副本集并执行零停机升级并备份,与每24小时备份一次的SQL Server不同,在应用程序被发送到节点的期间,MongoDB备份将不断执行。因此,它们只在实时数据库后面运行了几秒钟,并且几乎是零性能开销。我们可以恢复到任何时间点,所以我们能够为业务提供更高的数据保证,更好的恢复点和恢复时间目标。

    您能分享你们在扩展MongoDB基础设施时观察到的最佳做法吗?

        以下几点:

    • 利用批量写入方法在单个数据库调用中插入或修改多个文档,这使得将大批量数据加载到MongoDB变得更简单快捷。
    • 对于可以容忍最终一致性的应用程序,请配置次要读取参数以能在副本集的所有成员上分布式查询。
    • 明智地使用索引。 MongoDB的次要索引使得对丰富的数据结构进行表达式查询非常快,但像任何数据库一样,它们不会免费获得,它们增加了您的工作集大小,并在写入数据库时必须更新。
    • 注意模式设计,确保根据应用程序的查询模式对数据建模。 如果您正在使用MMAP存储引擎,请评估插入新文件的性能影响,而不是将数据附加到现有文档。

    除了MongoDB,我想了解你们正在使用什么其他新一代的数据管理基础架构?

        在我们上一代的系统中,所有应用程序状态都存储在数据库中,然后每24小时将备份导入到数据仓库。但这种方法出现了几个问题:没有实时的洞察力:我们的分析流程针对老化的数据,任何应用程序更改都会打破ETL管道,随着更多应用程序和数据量的增加,管理开销也增加。

        当我们转移到微服务器时,我们已经对数据仓库和分析堆栈进行了现代化改造。虽然每个微服务器使用自己的MongoDB数据库,但重要的是我们可以维护服务器之间的同步,因此每个应用程序事件都将写入Kafka队列。事件处理针对队列运行,以识别可以触发特定操作的相关事件。例如自定义客户问题,触发电子邮件等。将有趣的事件写入MongoDB,因此我们可以实时在用户与我们的服务进行互动时个性化用户体验。事件处理目前在Node.js中编写,但我们也在使用Apache Spark或Storm进行评估。

        我们还将这些事件写入Hadoop,并将其与保险公司的客户数据与历史数据相结合并进行汇总和处理。这使我们能够构建丰富的“数据产品”,例如用户个人资料或政策优惠。然后将输出为BSON的数据导入我们的MongoDB操作数据库。我们正在研究利用AWS Lambda函数来进一步自动启动此过程。

    你如何衡量MongoDB对公司业务的影响?

        重要的是我们能够快速地将新产品推向市场以及向客户保证提供的服务质量,我们使用的技术是实现业务目标并赢得更大的竞争对手份额的关键推动力。

        Meerkat电影运动的一个很好的例子。我们只有一个月的时间来建立一个原型,然后在推出前用两个月的时间迭代MVP(最低可行性产品)。为了使它更有趣,这是我们第一个使用Node.js和AWS的大型项目,而不是用.NET和PREM工具,如果我们使用传统的关系型数据库,该项目将至少花费六个月的时间。 而MongoDB只需要三个月的时间。

        现在我们正在每周至少推出两次新功能,一些项目每周增加8次。我们正在努力不断推动开发团队所做的每一项任务,Docker容器、微服务器和MongoDB及其动态模式是我们持续交付流程的核心。

        而它不仅仅是速度,服务正常运行时间也至关重要,MongoDB的分布式设计提供了比SQL Server更好的主要优势。我们可以通过滚动重新启动来实现零停机升级,这是一个由Ops Manager实现的完全自动化的过程。在我们以前的数据库中,我们不得不采取停机的时间长达60分钟,如果我们需要回滚,则需要更长的时间间隔。我们可以在数据中心和AWS之间跨可用区域分布MongoDB,且其具有自我恢复功能,以便在系统中断时提供持续的可用性。而SQL Server将需要15-30分钟的时间恢复,在此期间我们的服务将被关闭,而所有这一切现在已经过去很久了!

    你们是否使用任何商业服务来支持MongoDB部署?

        我们使用MongoDB Enterprise Advanced。Ops Manager提供运行自动化的细粒度监控,按需培训意味着可以让我们的团队加快新的MongoDB技能上线速度和新员工快速适应,我们还可以直接访问MongoDB的工程团队,以迅速升级和解决任何问题。

    从MongoDB 3.2获得什么好处?

        我们在一些新服务上使用3.2版本。我们希望采用最新的版本,让它跟上MongoDB的步伐。我们的.NET应用程序的一大优点是可以访问新的C#和.NET驱动程序,并支持Async / Await程序设计模型。

    你会给在考虑使用MongoDB进行下一个项目的企业什么建议?

        分布式系统的领域需要从过去的扩大系统进行思想转变,开发更简单,但操作可能更复杂,尽管像Ops Manager这样的工具使运行系统更容易。尽管如此,请确保您了解分布式系统概念,以便您可以设计应用程序和流程,以充分利用MongoDB的分布式系统设计。

    最后,您还想补充什么?

        comparethemarket.com正在招聘! 我们一直在寻找有才华的工程师,希望他们通过应用技术实现业务价值。我们所有的最新的技术空缺都发布到我们的招聘页面。

    Matthew,谢谢你花时间与我们分享你的经验。

    要了解有关使用Docker和MongoDB构建微服务架构的更多信息,请下载我们的指南:Containers and Orchertration Explained。


登录后回复
 

与 萌阔论坛 的连接断开,我们正在尝试重连,请耐心等待