一个软件开发团队最近引起了不小的震动博客描述如何放弃了serverless建筑项目的巨石,削减90%的云基础设施成本。
但这不仅仅是任何团队;《华盛顿邮报》的作者是戈Kolny, Amazon Prime的高级软件开发工程师视频。
因为亚马逊的主要倡导者之一serverless计算市场的领军企业,更不用说云服务,后被视为值得称道的开放或把贵公司的定义下公共汽车。无论哪种方式,它引发了一场充满激情的来回在社交媒体平台上,专注于更大的问题:
- 有整个serverless / microservices /面向服务的体系结构(SOA)运动过头了?
- 传统单一的软件开发方法被低估了吗?
- 是时候为市场调整类似与云在一般情况下,我们看到一些公司在哪里移动应用从云数据中心和反思他们的云策略?2020欧洲杯预赛
现在已经尘埃落定,仔细检查'视频小组揭示了一些重要的经验教训,企业可以应用。但同样重要的是,他们面临的问题突出需要早期输入网络的优点当应用规划过程是刚刚开始。
到底是哪里出了错?
需要问的第一个问题是:这是一个极端例子,局外人,还是有着更广泛的影响?亚马逊团队处理实时视频流,所以不是一般的企业应用,但是外卖是普遍的任何开发过程涉及数据密集型、低延迟应用程序。
'视频是构建一个工具来分析视频流的质量问题,如视频冻结或缺乏同步音频和视频。在一个复杂的、多步骤的过程,一个媒体转换器打破了流视频帧和音频缓冲区,然后发送到缺陷探测器。每个缺陷检测器,软件使用算法来识别缺陷和发送实时通知,作为自己的运行microservice。
两个问题变得明显,团队开始大规模应用程序:有太多昂贵的调用Amazon S3存储,和流程来编排是很困难的。
Amazon Prime视频团队解释道:“我们设计了我们最初的解决方案作为一个分布式系统使用serverless组件(例如,AWS步骤功能或AWSλ),这是一个不错的选择来构建服务迅速。理论上,这将允许我们每个服务组件独立。”
“然而,我们使用了一些组件的方式让我们努力达到预期负载的比例限制在5%左右。此外,所有构件的整体成本太高了在大规模接受的解决方案。为了解决这个问题,我们所有组件移动到一个过程保持进程内存中的数据传输,也简化了编排逻辑。”
高级体系结构保持不变,最初的代码能够被重用和快速迁移到新架构,整合工作流到一个亚马逊弹性容器服务(ECS)的任务。
“我们的服务转移到一个庞然大物减少我们的基础设施成本90%以上。它也增加了我们的扩展能力。今天,我们能够处理成千上万的溪流,我们仍然有能力进一步服务规模,”研究小组写道。
反应是五花八门的
《华盛顿邮报》引发了长时间的讨论社交媒体。合伙人大卫•海涅迈尔汉森和CTO SaaS供应商37 signals,很快进入竞争。汉森自己最近引发了轰动,当他决定把公司的应用程序和数据亚马逊公共云。
汉森解雇了博客了这个基本立场:“我不否认可能情况有microservices-first架构是有道理的,但我认为他们是十分罕见的。绝大多数的系统更好的服务开始和保持雄伟的庞然大物。”
汉森认为microservices / SOA方法适用于大型企业和hyperscalers,但不一定对较小的组织。“如果你亚马逊和谷歌或其他任何软件组织成千上万的开发者,这是一个美妙的方式并行化改进的机会。每个服务可以与自己的时间,自己的团队员工,和目标。它可以独立进化,至少,不管其他的星座。当你达到一定规模时,根本没有其他合理的方式实现协调的努力。否则,每个人都能踩到对方的脚,你会不得不面对无尽的合并冲突。”
但是将应用程序分解成多个部分的问题是,它增加了复杂性。“每次你提取一个合作对象之间的协作系统,你接受一个受伤的世界的无数负债和故障状态,”汉森说。
他补充说,在今天的科技文化,传统的单一应用程序已成为“嘲笑。“但是他希望文化”拥抱自豪地庞然大物。”
他的庞然大物的定义是“一个集成的系统崩溃尽可能多的不必要的概念模型,消除尽可能多的不必要的抽象可以摆锤。这是一个盛大的“不”分发系统,以免真正阻止你做真正需要做的。”
行业资深的Adrian Cockcroft简历包括Sun Microsystems, eBay, Netflix,电池合资企业和AWS,来权衡不同的看法。
他认为,'视频团队基本上用不准确的术语;他们并没有真正回到一个庞然大物;他们只是重构他们最初的实现,科克罗夫特描述了作为一个最佳实践。
科克罗夫特说,“我'视频团队遵循一条叫Serverless第一,第一次尝试在建筑的东西放一起一步和λ调用函数。当你正在探索如何构建,构建一个原型在几天或几周是一个很好的方法。然后他们试图规模以应对高流量,发现一些状态转换的步骤的功能过于频繁,他们有一些过于健谈AWS Lambda函数之间的调用和S3。他们能够重用的工作代码结合成一个长期microservice使用ECS横向扩展,并通过Lambda函数调用。问题是他们称之为重构microservice-to-monolith过渡,当它显然microservice-refactoring一步,正是我建议人们做的。”
Cockroft并同意microservices已经超卖,和有一些反对组织意识到“Kubernetes的复杂性是有成本的,你不需要,除非你正在运行在大型团队的规模。”
他补充说,“我不提倡“serverless只有”,我建议如果你需要持续的高流量,低延迟,和更高的效率,那么你应该重新实现快速原型作为一个连续运行的自动定量容器,serverless-event驱动架构的一部分,这是他们所做的。”
6外卖IT人员应该记住
重要的教训,企业IT领导人可以从Amazon Prime的视频学习的例子。
1。这不是关于技术
“不要从技术;首先要说的是目标,“建议帕维尔暴君,Akamai的高级产品营销经理。“从你想要实现什么和构建的需求。”
在Funnel-Labs维贾伊纳亚尔,创始人兼首席执行官。io,表示同意。“如果你的方法问题和国家microservices庞然大物系统或不是答案之前你听说过这个问题,你首先射击,然后问问题。不计后果,会导致糟糕的决策。”
2。分析权衡
Microservices带来灵活性,使独立的开发、部署和可伸缩性的个人服务。他们还引入了复杂性,包括服务发现的需要,服务间通信和管理分布式系统。
serverless路线已经快速部署的优势,因为您正在构建应用程序的底层基础设施是由服务提供者对需求。
3所示。最初的设计是正确的
底层体系结构的应用程序将运行在首先必须正确,否则任何试图从原型到生产将遇到规模问题。
AWS专家和首席技术官大卫••加蒂说,“如果你设计的建筑不正确,它不会工作,将是昂贵的和复杂的。传递数据的概念从一个λ到另一个去做一些工作不是一个好主意;做所有的处理在一个λ。”He says the Amazon Prime Video team “made a bad design based on the workload needed, and now they are doing the right thing. This does not mean that all serverless is bad.”
4所示。简化语言和依赖关系
汉森说:“microservices疯狂可怕的副作用之一是倾向于接受一百万个不同的编程语言,框架,和生态系统。”他建议不超过两种语言;一个调整生产力,可以使用的绝大多数时间,和一个高性能的语言用于解决热点。
纳亚尔补充说,“如果你把你的服务分成100个不同的小服务,和你不能找出问题出现,和它们之间的依赖关系的蜘蛛网使部署一个噩梦,那是因为你把你的服务,而不考虑保持他们的目的明确、逻辑正交的。
5。针对具体的用例
Cockcroft说企业的工作负载是间歇性的和小规模是好候选人serverless方法使用亚马逊一步函数和λ。
“当microservices得当,他们经常目标狭窄,孤立,而且通常性能关键型的系统,”汉森补充道。
和暴君指出,尽管serverless方法提供了灵活性,要求microservices交谈和后端数据库会影响延迟。
6。考虑成本
因为serverless计算的供应商收取的时间代码运行时,它可能不符合成本效益和长时间运行的流程在serverless环境中运行一个应用程序。
然后是Amazon Prime视频团队学习课:存储成本可以咬你如果你不小心。AWS存储定价是基于层,一级快速访问更昂贵比慢层。最重要的是,客户收取每一个数据请求和数据传输,所以过度的应用程序可以很快的指控。