微服务资源指南

“微服务”成为2014年的热门词汇。作为一种思考结构化应用程序的新方法,引起了人们的广泛关注。几年前我遇到过这种风格,在思想工作和其他方面与我的联系人交谈。这是许多优秀的人发现的一种有效的方式,可以与一个重要的系统类一起工作。但要从微服务思维中获得任何好处,你必须明白它是什么,如何做到这一点,以及为什么你通常应该做其他事情。

这是一个有用资源的指南,可以了解更多关于微服务的信息。这是个人对文章的选择,视频,书,播客可以教你更多关于微服务架构风格的知识。主要的选择有助于引导您浏览www.hdxh168.com上的资料,但我也会介绍一些我认为有价值的附加材料。它并没有试图成为一个全面的列表(我只是从外面的许多人中选择了几个介绍性的谈话),但这是我对你应该开始探索的地方的建议。

Microservices是什么?

简而言之,微服务体系结构风格是将单个应用程序开发为小型服务套件,每一个在它自己的进程中运行与轻量级机构沟通,通常是一个HTTP资源API。这些服务是围绕业务能力构建可独立部署通过完全自动化的部署机制。有一个最低限度的集中管理这些服务,它可以用不同的编程语言编写,并使用不同的数据存储技术。

--詹姆斯·刘易斯和马丁·福勒188bet足球充值

2013年末,听到我的圈子里关于微服务的讨论,我开始担心微服务没有明确的定义给SOA带来了很多问题)。所以我和我的同事在一起詹姆斯·里维斯,他是这种风格的更有经验的实践者之一。我们一起写的

118金宝博 网页

这篇文章激发了人们对微服务风格的兴趣,但是我们希望它的真正价值是识别我们在该领域中看到的微服务体系结构的共同特征。

  • 通过服务的组件化
  • 围绕业务能力组织
  • 产品不是项目
  • 智能端点和哑管道
  • 分散治理
  • 分散式数据管理
  • 基础设施自动化
  • bet188足球设计为失败
  • 进化型设计bet188足球

我们还研究常见的问题,如“微服务有多大”和“微服务与面向服务的体系结构之间的区别是什么”。

“我们使用它吗?”我们不使用它吗?

…到底是什么呢?”

在我的简短的介绍性谈话(约25分钟)我挑选出最重要的定义特征,将微服务与整体服务进行比较,并概述了第一个微服务系统投入生产前所做的重要工作。

James Lewis是我们最有经验的微服务顾问之一。在这软件工程广播播客(一小时)他用风格涵盖了大部分要点,包括部署问题,的大小,与SOA和社区中的关键人物进行比较。

微服务和分布式对象

当我写EAA的p时,我创造了我称之为分布式对象设计第一定律:“不要分布你的对象”。bet188足球这导致一些人问微服务是否违反本法,如果是这样,为什么我会支持他们?

微服务仅仅是SOA吗

从一开始,许多人都想知道微服务和面向服务的体系结构(SOA)之间的联系。詹姆斯和我写的关于这个有点在我们原来的文章中。马特·麦克拉蒂更详细地讨论了这个问题。,解释SOA的历史,将SOA和微服务比作移动而不是技术,并指出微服务运动需要从SOA的命运中学到的教训。

我应该什么时候使用它们?

像任何建筑风格一样:

    Microservices提供福利……

  • 强模块边界微服务强化模块化结构,这对于更大的团队来说尤其重要。
  • 独立部署简单的服务更容易部署,既然他们是自主的,当它们出错时,不太可能导致系统故障。
  • 技术多样性通过微服务,你可以混合多种语言,开发框架和数据存储技术。

    …但要付出代价

  • 分布分布式系统更难编程,因为远程调用很慢,而且总是有失败的风险。
  • 最终一致性对于分布式系统来说,保持强一致性是极其困难的,这意味着每个人都必须管理最终的一致性。
  • 操作的复杂性你需要一个成熟的运营团队来管理大量的服务,定期重新部署。

总结

(来自Microservice权衡(见表1)

我喜欢想到微服务系统,为了学习和管理这种风格,我们付出了生产力降低的代价。随着一个系统变得更加复杂,这种额外的好处被这样一个事实所抵消:样式减少了系统复杂性增加给我们带来的生产力损失。但是这个代价只值得为更复杂的软件工作付出。

微服务给小应用带来的复杂性包袱是许多人喜欢第一块整体策略。通过这种方法,即使你认为微服务可能会支付他们的溢价,不管怎样,你从一块巨石开始。一旦你意识到微服务是值得的,你就分解或者牺牲你最初的整体。Stefan Tilkov对此表示反对,这么说吧实际上,要建造一个容易分裂的整体太难了。两种方法,然而,同意您不应该尝试微服务,除非您非常了解该领域。

随着微服务在2014年的大肆宣传,thoughtworks技术咨询委员会(tab)开始关注项目选择一种无正当理由的微服务方法——我们称之为一种苦恼。微服务嫉妒

斯科特肖,ThoughtWorks是澳大利亚的技术主管,讨论了微服务嫉妒的问题在这个播客,记录于2015年3月的会议记录(18分钟)。

“尽管我们迄今的经验与单片应用相比是积极的,我们意识到,我们没有足够的时间做出全面的判断。”

--詹姆斯·刘易斯和马丁·福勒188bet足球充值

到目前为止,要对微服务的有效性做出深刻的判断还为时过早。你只知道几年之后软件系统的可修改程度,在开发团队出现重大变动之后。很可能周围环境有很多因素,无论是政治还是技术,这会影响微服务的成功。和大多数这些问题一样,我不希望我们很快就能得到结论性的答案——我们只能希望收集到我们作为团队能够分享他们经验的证据。

如何构建微服务

我的同事山姆·纽曼在过去的几年里,我们在全球范围内参与了许多微服务的工作。这本书汇集了我们工作中的经验教训,以及我们从其他分享经验的组织那里学到的经验。因此,对于如何使用微服务风格构建系统进行内聚描述,这是最好的起点。

测试

我一直是将测试集成到开发过程中的坚定拥护者,的概念自我测试代码

托比·克莱姆森把检查测试的信息平台在构建微服务系统时:需要考虑的各种测试,以及各种形式的测试如何提供不同的方法来探测系统中的错误。

有多大?

术语微型的服务非常注重服务的规模,大多数从业者发现这一点非常不幸。

安全性

微服务提出了重要的安全问题。潜在地,它们提供了使用具有不同授权需求的数据提供细粒度控制的机会。但和微服务方法的大多数优点一样,设置过程很复杂。山姆·纽曼的书的第9章对此作了详细的介绍,他概述了这些问题在microXchg的演讲。您还可以找到要问的重要问题的方便列表来自格雷厄姆·利亚。

会谈

在使用微服务系统投入生产之前,你需要确保关键的先决条件

  • 快速供应
  • 基本监测
  • 快速应用程序部署
  • Devops文化

“任何设计一个系统的组织……都将不可避免地产生bet188足球一个结构是该组织通信结构副本的设计。”

Melvin Conway,一千九百六十八

微服务的一个重要特征是围绕业务能力组织。软件体系结构通常是一种人的结构,大多数聪明的架构师都了解康威定律

谁用过它们?

关于微服务的讨论是建立在这种风格的早期经验之上的(不管他们是否使用这个名字)。幸运的是,许多早期的微服务用户都乐于谈论他们的体验:下面是一些示例。

前线的经验教训

我的同事扎马克·德哈尼把ThoughtWorks所吸取的教训结合在一起从我们的微服务经验来看,在那里,我们既看到了成功的项目,也不得不用构思不当的微服务架构来拯救项目。

Netflix的经验

网飞公司是微服务的典范之一,近年来,他们在微服务线路上进行了重大的系统重新设计。bet188足球阿德里安·科克洛夫特领导了这场努力,并继续他的演讲迁移到Microservices总结了他们学到的很多东西。

00年代初,亚马逊从Obidos单片应用程序到具有封装数据库和小型数据库的面向服务体系结构的著名转换,“两个披萨”队。尽管亚马逊从未使用过“微服务”这个词,微服务运动中的那些人从他们的经验中获得了很多灵感。2006 ACM队列采访沃纳·沃格斯,仍然是他们所做工作的最佳信息来源。

沃纳·沃格斯,亚马逊的首席技术官,谈论亚马逊的服务经验在2011年。

对我们来说,面向服务意味着用操作数据的业务逻辑封装数据,只有通过发布的服务接口才能访问。不允许从服务外部直接访问数据库,服务之间没有数据共享。

——沃纳·沃格斯

REA组是一家专注于房地产的澳大利亚网络公司,运行房地产网站.au网站。在20世纪10年代早期,他们开始用微服务方法取代单片应用程序,两年后部署了大约60个微服务。Beth Skurrie埃文·博特彻,和乔恩•屋檐分享他们的经验,描述了他们是如何攻击巨石发球的,为什么他们放弃了集成测试而选择了合同测试是什么导致他们构建(和开源)有用的契约测试库公约

一夜从一个RubyonRails整体移动到一组微服务。菲尔卡拉多在几篇博文中描述了他们的经历。

  • 我们最终如何使用微服务描述如何希望改进周期时间和生产力,使他们转向微服务。
  • 这篇文章写得比其他人晚,但最好先读,接下来是一个由三部分组成的系列,介绍工程细节。

  • 第1部分讨论建立在现有单片“母舰”之上的微服务。
  • 第2部分讨论了他们是如何将整块石头分开的。
  • 第3部分看看他们如何在scala和finagle中构建微服务

下面是一些我发现对描述微服务使用的实践经验很有用的博客。

兰迪·舒普描写使用微服务的经验从他在易趣网谷歌。他关注于从整体服务到微服务的共同演化路径,并描绘了谷歌的成熟服务环境。也值得一看他的后续访谈(带成绩单)它阐述了从这次经历中得到的一些教训。