微服务概述 | TW洞见

今日洞见

文章作者来自ThoughtWorks:James&Martin,译者来自ThoughtWorks:姚琪琳。

本文所有内容,包括文字、图片和音视频资料,版权均属ThoughtWorks公司所有,任何媒体、网站或个人未经本网协议授权不得转载、链接、转贴或以其他方式复制发布/发表。已经本网协议授权的媒体、网站,在使用时必须注明"内容来源:ThoughtWorks洞见",并指定原文链接,违者本网将依法追究责任。

“微服务”这个术语在过去几年如雨后春笋般涌现,它是一种构建可独立部署服务套件的软件设计方式。虽然这样的架构风格没有明确的定义,但它们在组织方式、业务能力、自动化部署、智能化终端以及对语言与数据的去中心化等方面具备共同的特征。

以下内容摘自Martin Fowler的网站

“微服务”,又一个出现在拥挤的软件架构街道的新名词。虽然我们的第一反应是不屑一顾,但它的确是一个出镜率越来越高的软件设计风格。在过去的几年中,我们已经看到很多的项目使用了微服务,目前来看效果不错,我们很多同事已经将它作为构建企业应用的默认方式。但很遗憾,并没有很多资料解释微服务是什么以及如何实现微服务。

简而言之,微服务是一种将单个应用以许多微小的服务所组成的服务套件的形式来构建软件的方法,每个微服务拥有自己的轻量级数据处理模块以及通信机制(通常是HTTP API的形式)。微服务围绕业务能力和各自独立的自动化部署机制构建而来。由于微服务需要极少的集中管理,因此各个服务可以使用不同的编程语言以及不同的存储技术。

为了解释微服务的设计风格,我们先来把它和单块架构风格做一个比较。单块架构的应用只有一个单元。企业应用常常包含三个主要部分:客户端用户界面(包括运行在用户计算机浏览器中的 HTML 页面和 JavaScript)、数据库(包括保存在常见的关系型数据库中的各种表)和服务器端应用程序。服务器端应用程序处理 HTTP 请求,执行业务逻辑,在数据库中检索和更新数据并选择和渲染 HTML 视图发送到浏览器。此服务器端应用程序是一个完整的、 单一的逻辑可执行单元。任何对系统的更改都需要构建和部署完整的服务器端应用程序的新版本。

这样的单块服务器是构建系统最自然的方式。所有处理请求的业务逻辑都在同一个进程中,它允许你使用编程语言的特性来将整个应用划分为类、函数及命名空间。利用某些方法,你可以在笔记本电脑中运行和测试应用程序,并使用部署流水线确保新的更改通过了测试,并部署到了生产环境中。最后你可以通过增加运行实例并进行负载均衡,对应用进行横向扩展。

单块应用是可行的,但越来越多的人在使用的过程中受挫,尤其是随着越来越多的应用被部署到云中。整个系统的更新周期是被绑在一起的——对应用的一小部分进行了更改,就需要整个系统重新构建和部署。随着时间的推移它往往很难保持一个良好的模块化结构,继而难以保证新的更改只影响其所在的模块。需要对应用进行扩展时,只能将整个应用一起进行扩展,而不是扩展应用中的某个部分,这也消耗了更多的资源。

这些挫折导致了微服务的架构方式:以服务套件的形式构建软件。微服务是独立部署的和可扩展的,每个服务都有明确的模块边界,甚至允许不同的服务使用不同的编程语言,它们甚至可以由不同的团队管理。

我们不认为微服务架构是什么创新,它的历史可以追溯到 Unix 年代的设计思想。但还没有足够多的人考虑过采用微服务架构,如果他们使用微服务,很多软件开发过程会变得更好。

了解更多信息:

詹姆斯和马丁的文章接着罗列了9个微服务的特点来定义什么是微服务架构,并探讨了其与面向服务的架构(SOA)的关系,最后论述了这种风格是否是企业软件的未来。

请到这里继续阅读:http://martinfowler.com/articles/microservices.html

James Lewis是ThoughtWorks的资深咨询师,也是技术顾问委员会的成员。James的兴趣点在整合企业级系统时采用小型的相互协作的服务构建应用。他已经成功得构建了许多采用微服务的系统,并且在最近的几年里一直是社区的活跃分子。

Martin Fowler是一位作家,演讲家和大名鼎鼎的软件开发者。如何组件化软件系统的问题一直困扰着他,一些模棱两可的答案并没有让他满意。他希望微服务不要辜负倡导者们所提出的承诺。

原文发布于微信公众号 - 思特沃克(ThoughtWorks)

原文发表时间:2016-06-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏企鹅号快讯

C语言真的太强大了,C几乎无处不在!

今天存在的许多C项目都是在几十年前开始的。 UNIX操作系统的开发始于1969年,其代码在1972年被重写为C语言。C语言实际上是为了将UNIX内核代码从汇编语...

4757
来自专栏用户2442861的专栏

教你阅读Python开源项目代码

作者:董伟明 链接:https://zhuanlan.zhihu.com/p/22275595 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,...

3881
来自专栏腾讯技术工程官方号的专栏

2017 Openstack Days China | 大规模云计算环境下的运维实践

企业 IT 部潘晓东专注于云计算技术,在虚拟化、云计算、服务运维领域有超过十年的工作经验。本文是将其在 OpenStack Days China 的分享进行整理...

5234
来自专栏SeanCheney的专栏

《Python分布式计算》 第8章 继续学习 (Distributed Computing with Python)前两章工具云平台和HPC调试和监控继续学习

这本书是一个简短但有趣的用Python编写并行和分布式应用的旅程。这本书真正要做的是让读者相信使用Python编写一个小型或中型分布式应用不仅是大多数开发者都能...

2954
来自专栏JAVA技术zhai

千万级流量的优化策略实战

性能优化涉及面很广。一般而言,性能优化指降低响应时间和提高系统吞吐量两个方面,但在流量高峰时候,性能问题往往会表现为服务可用性下降,所以性能优化也可以包括提高服...

4625
来自专栏企鹅号快讯

PHP 霸主地位被动摇,JIT 是穷途末路后的绝地反击?

关键时刻,第一时间送达! 摘要:PHP 是 Web 开发最常用的语言,自创建以来,PHP 语言经历了许多激烈的改进,其中性能是开发人员在评估新版本时考虑的主要标...

2547
来自专栏美团技术团队

性能优化模式

摘要 性能优化涉及面很广。一般而言,性能优化指降低响应时间和提高系统吞吐量两个方面,但在流量高峰时候,性能问题往往会表现为服务可用性下降,所以性能优化也可以包括...

4265
来自专栏向治洪

OtterTune来了,DBA怎么办

概述 最近几年,特别是随着云计算的发展,出现了行业向后重叠和推动的情况。数据库龙头企业Oracle最近几年重点转而向云的变革,它全力以赴在做的一件事情就是把所有...

2506
来自专栏杨建荣的学习笔记

MySQL分布式管理初步设计

中间件方案对于业务的使用相对是透明的,而且扩展性相对较好,这里说较好,是基于良好的架构设计,对于弹性伸缩的支持还是有限的。

912
来自专栏SDNLAB

SDN实战团分享(三十三):Hurricane分布式实时处理系统架构及SDN领域的应用

嘉宾简介:卢誉声,Autodesk软件研发工程师,从事平台架构方面的研发工作。 在此之前,他曾在思科系统(中国)研发中心云产品研发部工作,并参与了大规模分布式系...

3656

扫码关注云+社区

领取腾讯云代金券