生成式AI领域的最新成果都在这里!抢 QCon 展区门票 了解详情
写点什么

为什么 Segment 从微服务回归单体

  • 2020-05-06
  • 本文字数:1519 字

    阅读完需:约 5 分钟

为什么Segment从微服务回归单体

几乎每个工程团队都考虑过在某个时候转向微服务,它们在带来好处的同时也让团队付出了代价。


在 QCon 伦敦大会上,Alexandra Noonan讲述了Segment如何将单体分解成微服务,然后几年后又回归单体架构。用 Noonan 的话说,“如果微服务的实现不正确,或者在没有解决系统中一些根本缺陷的情况下,把微服务当创可贴使用,那么你将无法进行新产品开发,因为你将淹没在巨大的复杂性中。”


微服务的引入首先是为了解决 Segment 单体应用的有限故障隔离问题。然而,随着公司的发展壮大,外部服务集成越来越多,支持微服务的运营开销变得难以承受。在决定回归单体时,他们提出了一个新的架构,充分考虑了公司发展过程中的扩展之痛。尽管在模块化、环境隔离和可见性方面做出了牺牲,但单体解决了运营开销这个主要的问题,让工程团队可以重回新特性开发。


Noonan 解释了 Segment 架构发展的几个关键点。在任何有经验的软件工程师看来,他们所面临的问题以及当时所做的决定都不陌生。事后,我们才能清楚哪些决定本可以更好。Noonan 通过一个时间轴逐个介绍了主要的决策点,并指出了系统架构每个状态的优缺点。


2013 年,Segment 开始采用单体架构。它运营开销比较低,但缺少环境隔离。Segment 的功能基础是集成来自许多不同提供商的数据。在单体中,到一个提供商目的地的连接有问题,就可能会对到所有提供商目的地的连接和整个系统产生不利影响。


迁移到微服务(每个目的地一个 worker 服务)解决了单体内部缺少隔离的问题。微服务还改进了整个系统的模块化和可视性,使团队可以轻松地查看队列长度和识别有问题的 worker。Noonan 指出,可见性也可以构建在单体应用上,但在微服务中不需要付出额外的成本。然而,微服务带来了更多的运营开销和代码重用相关的问题。


在 2016 年至 2017 年间,Segment 的市场飞速增长,新增 50 多个目的地,平均每月新增 3 个。对于少数目的地 worker 来说,每个服务一个代码库是可管理的,但是随着规模的扩大,这就变成了一个问题。对于所有 worker 中都有的类似行为,他们创建了共享库。然而,这产生了一个新的瓶颈,对共享代码的更改可能会花掉开发人员一周的时间,这主要是由于测试限制。创建多个版本的共享库可以加快代码更改的实现速度,但是也会抵消共享代码所带来的好处。


Noonan 指出了他们在微服务中采取一刀切方法的局限性。因为仅仅是添加新服务就需要大量的工作,所以其实现不是定制化的。尽管每个服务的负载和 CPU 资源需求有很大的不同,但所有服务都应用了同一个自动扩展规则。此外,对于真正的故障隔离,恰当的解决方案应该是每个客户每个队列一个微服务,但这将需要超过 1 万个微服务。


2017 年,在做了各种权衡之后,包括失去微服务所带来的好处,他们重归单体。新架构被命名为Centrifuge,它能够处理每天发送给数十个公共 API 的数十亿条消息。现在,他们有一个代码存储库,所有的目的地 worker 都使用共享库的同一个版本。较大的 worker 能够更好地处理峰值负载。新增目的地不会再增加运营开销,而部署只需几分钟。对企业来说,最重要的是,他们能够重新开始开发新产品。与微服务相比,新架构的模块化、环境隔离和可见性降低了,但 Segment 的团队认为,上述所有这些好处值得他们这样做。


这个演讲听起来就像是一名传统的工程师加入了一个有着悠久历史的项目。与会者对此展开了讨论,有人说,“好啦,很明显你不应该做他们做过的事”,类似这样的短评遭到了经验丰富的人士的反驳,他们认为,Segment 的大多数决定都是基于当时所能获得的最佳信息做出的。其中一个重要的结论是,花几天或几周时间做更多的分析,可以避免出现需要几年时间才能纠正的情况。


原文链接:


To Microservices and Back Again - Why Segment Went Back to a Monolith


2020-05-06 15:444472

评论

发布
暂无评论
发现更多内容

怎么看阿里拆中台这件事

agnostic

中台架构

Go 语言流行 ORM 框架 GORM 使用介绍

江湖十年

后端 ORM框架 ORM Go 语言 gorm

Java上进了,JDK21 要来了,并发编程再也不是噩梦了

Java你猿哥

Java jdk ssm

火山引擎DataLeap的Catalog系统搜索实践(三):Learning to rank与后续工作

字节跳动数据平台

数据湖 数据化 数据平台 大数据分析 DataLeap

华为云GaussDB以技术创新引领金融行业分布式转型

YG科技

技术驱动,数据赋能,华为云GaussDB给世界一个更优选择

YG科技

【2023华为云CodeArts Build 实战训练营】云端实战-玩转编译构建

华为云PaaS服务小智

云计算 华为云 华为开发者大会2023

Nautilus Chain上首个DEX PoseiSwap即将开启IDO,潜力几何?

大瞿科技

干货 | IDaaS 身份即服务背后的基石

Authing

Microsoft Remote Desktop下载,微软远程连接工具

Rose

microsoft remote desktop 微软远程桌面连接工具 mac远程链接

Focus Matrix for Mac(智能任务管理器) v1.6.1激活版

Rose

Focus Matrix Focus Matrix破解 focus matrix mac激活版 智能任务管理器

App Cleaner & Uninstaller:mac专业的系统清理优化工具

Rose

App Cleaner 系统清理工具 苹果mac系统优化 App Cleaner 破解

写给程序员的可逆计算理论辨析补遗

canonical

低代码 可逆计算 范畴论

国产自研数据库是更新换代首选

YG科技

mac高质量图像浏览处理软件 GraphicConverter 12 v12.0.3(6140)中文直装版

Rose

GraphicConverter 12中文 GraphicConverter破解 mac图像浏览器 GraphicConverter下载

爱了,Spring Cloud Alibaba内部微服务架构笔记真的太牛了

Java你猿哥

Java 微服务 微服务架构 Spring Cloud ssm

synchronized和Lock有什么区别?

javacn.site

强渡大渡河!华为云GaussDB支撑华为MetaERP系统全面替换

YG科技

宝兰德应用服务器软件与华为云GaussDB完成兼容互认证

YG科技

Nautilus Chain上首个DEX PoseiSwap即将开启IDO,潜力几何?

西柚子

如何从零实现一个简单的Spring Bean容器

Java你猿哥

Java spring ssm Spring Bean Java web

如何在企业中培养平台工程文化?

SEAL安全

平台工程 平台工程文化

简单好用的便利贴工具:Sticky 激活版

真大的脸盆

Mac Mac 软件 便利贴工具 便利贴软件

开源赋能 普惠未来|OpenHarmony诚邀您参与2023开放原子全球开源峰会

开放原子开源基金会

开源 OpenHarmony 开放原子

深度解析Seata AT 模式中性能优化与隔离保障的平衡之道

Java你猿哥

Java 数据 ssm 脏读

C语言编程-typedef

攻城狮Wayne

Xcode for Mac(开发工具)v14.3.1正式版

Rose

Xcode Mac版 Xcode中文版 Xcode破解版

MongoDB源码学习:原子操作WriteUnitOfWork

云里有只猫

mongodb 源码刨析

硬核!力扣官方首发了这套1568页LeetCode算法刷题笔记(彩页版)

Java你猿哥

面试 算法 LeetCode ssm

设计模式之不一样的责任链模式

越长大越悲伤

Java 设计模式

开源赋能 普惠未来|腾讯寄语2023开放原子全球开源峰会

开放原子开源基金会

开源 开放原子全球开源峰会 开放原子

为什么Segment从微服务回归单体_架构_Thomas Betts_InfoQ精选文章