PCon全球产品创新大会即将开幕,抢占最后的交流席位! 了解详情
写点什么

Adrian Cockcroft 重新审视微服务

  • 2015 年 4 月 15 日
  • 本文字数:2289 字

    阅读完需:约 8 分钟

2014 年八月,在由思科所举办的一场聚会活动中,Adrian Cockcroft 为参与者进行了一场关于微服务的演讲。来自于ActiveState 的John Wetherill 当时也出席了活动,他随后对Adrian 就微服务这一主题进行了采访,并根据采访内容在他自己的博客上撰写了一系列帖子。John 之后将这段采访内容发布到网上,以下的内容是此次采访中的某些亮点。

John 的第一个问题是有关于使用多语言进行开发的,虽然人们都认可这一点对于微服务的重要性,但 John 从来没有在实际应用中看到实例。

举例来说,Twitter 的微服务大部分是由 Scala 创建的,Hail-O(欧洲的 Uber)完全使用 Go,而 Seneca 的微服务框架都是 JavaScript 编写的。Pivotal 宣称 Java 与 Spring 是“用于微服务的语言”,而就我所知,Netflix 也将 Java 作为了标准,用于它的 Java 绑定功能。

因此,John 想知道的是,在开发微服务时,是使用多语言的方式更理想,还是专门使用一种单一的语言进行开发更合适?

Adrian 首先指出,Netflix 实际上就是一个多语言开发的环境,其中有一部分功能是使用 Python 实现的。那么他们是怎样做到在自己的平台上支持多语言的呢?

……为了支持多语言开发,Netflix 进行了一系列的工作。他们开源了一个通用的“边车”(sidecar)进程,称为 Prana,它将与平台进行交互。他们还为 Memcached(一个 c 应用程序)、 Elasticsearch Cassandra 创建了自定义的边车,它们将与系统进行聊天式交互,并从它们所监控的所有部分获取数据,并将数据附加到标准的监控工具中。

接下来 Adrian 谈到了使用多语言开发的原因,这种方式并不仅仅在 Netflix 中使用,这一点本质上可归结为许多公司中都存在着多种语言的开发并存的这一现实。核心服务或许会使用一种单一的主要语言,而其它语言的存在则出于特定于领域的原因,或许它们能够更好地处理某些当前所遇到的问题。

上周我在进行演讲时,参与的小组成员中有一部分是开发 Ruby 的,但多数都是开发 Node 的,而其中也有一部分人使用 Java。因此这些开发者们并非来自于统一的语言背景,但要实现这种统一的难度是相当大的,与之相比,人们反而更容易接受维护由多种语言开发的服务。

John 的下一个问题是,如果某些公司不具备必须的资源,或是没有得到管理层的支持,那么他们将如何引入微服务,以实现 Netflix 那样的成果?

Adrian 在回答这个问题时首先表示,他也认识到即使在 Netflix,事情也并非一蹴而就。而且在当时还不存在任何定义良好的模式或模板可供他们参考:

……我们在 2008 年时开始着手这一改变,我们阅读了由 Google 和 Amazon 所发布的各种核心的白皮书,并且吸收了我们之前所学到的知识。我们最终实现了目标,当然,团队中加入了许多非常有经验的、非常聪明的成员,其中有一部分人的年龄都已经超过 50 岁了,我们的年龄差不太多。这个系统并不是由一群年青人创建的,我们也不认为自己是世界上最先完成这个工程的人。

在过去 7 年间,整个 IT 界发生了很大的变化,许多公司都实施了云端部署与 DevOps。公有与私有的平台即服务系统不再是新鲜的概念了,并且各公司能够在各种不同的实现中选择最适合他们的系统。Netflix 当初所遇到的各种挑战在 2008 年或许还是非常复杂的,但如今已经变得不那么复杂了,而许多其他组织与公司也遇到了同样的挑战,并将他们的经验分享给业界。

我还发现了一个现象,即许多传统的大公司都开始了对微服务的探索,并且在深度上远远超出我的想象。请你们看看 DevOps Enterprise 会议上的这些视频,这个会议让我异常兴奋。……Nordstrom 走上了讲台,宣布“我们已经成功地对速度进行了优化,并且没有额外的成本”。美国国土安全部则谈到了他们在处理绿卡系统的生产环境中如何使用 Chaos Monkey(Netflix 的一套测试系统)的故事。请注意,我们现在谈论的是你的绿卡申请,美国政府的移民部门在他们的生产环境上运行 Chaos Monkey!听到这里时我差点从椅子上摔下去。

Adrian 接下来还谈到了其它公司,例如 Target 和 Macy’s,这些公司也谈到了他们在使用微服务方面的经验,以及他们如何启动微服务架构的故事。总的来说,他们希望能够发展得更快,然后他们听说了 DevOps 这回事,然后有人买了一本 Gene Kim 所编著的《凤凰项目》(Target 买了 23 本)。他们随后在一些小型项目中进行了一番尝试,看这些技术能够起到作用。

他们对新系统进行了评估,并观察它们的情况,最后他们发现,原本他们要进行一次产品发布,通常要一个季度或六个月时间,而现在他们能够做到一个季度发布上百次。他们的发布频率上升了两个数量级,这也意味着在同一段时间内能够发布的内容比起之前增长了上百倍。这种方式之所以有效,是因为这些工作单元非常小、易于理解、并且易于回滚。在生产环境中发现的问题以及停机现象则比之前少了一个数量级。

正如 Adrian 所提到的一样,对于 Target 和 Macy’s 来说,接下来的一个问题在于:它的成本有多高?由于这些公司并没有花费太多成本去创建他们所不需要的东西,也没有购置了大量的机器并让它们在大多数时间中处于闲置状态,因此 Adrian 在总结中表示,他们所耗费的成本大约是之前的一半。

使用微服务,你可以用同样数量或更少的人完成更多的内容,客户对你交付的产品满意度更高,并且你的发展速度通常会比你之前的团队更高。因此你能够更快地完成工作、完成工作所用的人日也更少,效率也得到了提高,能够更快地推出新功能并让它良好地运行。整个系统变得更加高效,并且减少了资源浪费,这一点也是敏捷的原则所在。

我们将继续关注该采访的下一部分内容,等到下一部分发布之后,我们也会在文章中继续进行总结。

查看英文原文 Adrian Cockcroft: Microservices Revisited

2015 年 4 月 15 日 06:321195
用户头像

发布了 428 篇内容, 共 157.8 次阅读, 收获喜欢 28 次。

关注

评论

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

技术架构演进的思考

gevin

架构演进

Git 报错:unable to update local ref

liuzhen007

28天写作 12月日更

架构实战营-模块1-作业

Pyel

「架构实战营」

日本公司诚招IT开发技术者

CITEC赛伯尔

Java c++ php Python 日语

Python Qt GUI设计:菜单栏、工具栏和状态栏的使用方法(拓展篇—2)

不脱发的程序猿

Python qt GUI设计 Qt Creator 菜单栏、工具栏、状态栏

彻底弄懂死锁

李子捌

Java、 28天写作 12月日更

第一周作业

lv

学习总结

努力的静静

「架构实战营」

Rust 元宇宙 15 —— 细节和重构

Miracle

rust 元宇宙

GrowingIO Terraform 实践

GrowingIO技术专栏

运维 SRE Terraform 项目实践 资源编排

第一模块作业

努力的静静

「架构实战营」

作业:架构实战营模块1

Poplar89

「架构实战营」

消费类电子线上问题定位,分析和解决落地

wood

硬件产品 28天写作 线上故障

「从0到1如何快速实现cli工具」

速冻鱼

大前端 cli JavaScrip 签约计划第二季 12月日更

微信业务架构图&&“学生管理系统”毕业架构设计

guodongq

「架构实战营」

你以为Vue3封装一个弹框组件很简单?

CRMEB

基于云的技术架构设计实践-第5篇

hackstoic

数据分析 云原生 数据可视化 业务分析 签约计划第二季

毕业总结

小智

架构训练营

微信业务架构图&学生管理系统毕业架构设计

Spring

架构实战营

我粗心,有救吗?

Justin

心理学 成长 28天写作

想给用户天涯若比邻的体验?业务全球化面临的三重挑战

声网Agora

网络

从实习到秋招成为一名安全工程师,我经历了什么

网络安全学海

面试 网络安全 信息安全 渗透测试 WEB安全

普华基础软件加入龙蜥并成为理事单位,共创开源操作系统新生态

OpenAnolis小助手

龙蜥社区

如何验证你的产品创意?

石云升

产品思维 28天写作 12月日更

TypeScript 之 Class(下)

冴羽

JavaScript typescript 翻译 大前端

Hoo虎符研究院 | Arweave调研报告

区块链前沿News

Arweave Hoo虎符 虎符交易所 虎符研究院 去中心化存储

我所理解的微服务

gevin

微服务 微服务架构

记录-今年最骄傲的一件事(2)

将军-技术演讲力教练

Spring AOP(一) AOP基本概念

程序员历小冰

spring aop 28天写作 12月日更

云ERP系统究竟是什么?

低代码小观

流程管理 ERP 业务流程管理 业务流程自动化

2021年面试落下帷幕,这些Java面试重灾区你知道吗?

不想秃头

Java redis 面试 分布式 多线程

Adrian Cockcroft重新审视微服务_SOA_Mark Little_InfoQ精选文章