利用微服务构建现代应用(一)

本文讲的是利用微服务构建现代应用(一),【编者的话】本文介绍了微服务如何消除传统的整体化软件架构存在的问题,微服务跟SOA的关系,微服务所利用的新技术如容器、编排框架等,以及使用微服务带来的好处。

本文是关于微服务的两篇博文中的第一篇。这篇博文介绍了微服务的背景知识,微服务所使用的新技术以及使用微服务带来的好处。

简介

随着互联网公司在高度竞争性的市场中需要快速灵活的复制其开发环境,应用程序的开发正变得越来越复杂。庞大并且整体的应用程序在过去是企业的竞争力,但是在新的情境中却使得快速部署新的服务成为了问题。而分散的和分布式开发会带来组织架构上的问题。基于此,用户的要求比过去任何时候更高 – 企业需要有效的扩展并且监控已部署的系统以确保高性能和一致的用户体验。当然,这一切都需要在服务不中断的情况下完成。

上述的这些趋势对软件架构模式提出了新的要求以使其能处理在当前时代下的需求。整体化的架构是一种传统的方式,但是存在诸多问题:不易于扩展,大的代码库难于维护,升级过程有很大的风险,前置的准备成本等,所有这些迫使企业寻求新的方法。

在过去几年,微服务的概念进入了人们的视野。由于其在提供模块化、可扩展、高可用的应用方面的能力以及促进组织架构融合方面的优势使得它迅速的被业界所接受。

整体化架构

在微服务之前,一个通用的软件设计模式是使用整体化架构。在这种模式下,应用程序在开发、测试、打包和部署阶段都是作为一个整体存在。代码库被整体编译,应用程序被作为一个实体部署。扩展需要将应用程序的二进制文件和依赖的库文件拷贝到不同的服务器上,这些应用程序一般都是单进程运行。这种整体化架构使得持续交付(一种包含了快速、迭代、升级安全的软件开发过程)变得充满挑战,因为哪怕是应用程序栈的最小增量版本也需要重新编译、重新链接和测试。 

什么是微服务?

微服务是一种将应用分解成小的自治服务的软件架构。服务通常仅关注某个特定的目标并保证服务之间的自治。每个服务被独立的开发、测试和部署,每个服务往往使用约定的API并通过网络进行通信,虽然在某些情况下网络可能是本地的。

微服务从SOA发展而来,SOA在本世纪初曾获得广泛的认可和流行,SOA是一种反对大型的整体化架构应用的方式。SOA和微服务的主要区别有:

  • SOAs是有状态的,而微服务是无状态的
  • SOAs倾向于使用企业级的服务总线进行通信,而微服务则使用更简单的通信系统
  • SOAs或许会有上百万行代码,而微服务往往仅有少于100行代码
  • SOAs强调重用(例如运行时代码、数据库等),而微服务则关注在尽量解耦
  • SOAs里的一个系统性变化需要修改软件的整体结构,而在微服务中的一个系统性变化将产生一个新的服务
  • SOAs更经常使用传统的关系型数据库,而微服务则更倾向于现代的、非关系型数据库。下面几节将介绍在微服务架构中使用非关系型数据库的好处。

许多架构师发现SOA存在通信协议的问题和缺乏有效的如何分割服务的指导,这些问题构成了微服务的基础,使得微服务成为了实现一个真正的SOA的最佳实践方法。

使微服务成为可能的新技术

需要部署成百甚至上千的服务的缺点跟微服务带来的好处(快速开发、可扩展)相比还是值得的。

新的技术的出现例如容器(Docker、LXC)和编排框架(Kubernetes、Mesos)消除了过去阻碍微服务架构使用的很多问题。

容器是轻量级的运行时环境,使用最少的性能和容量影响提供了隔离性和可扩展性。程序打包也被简化成了相同的环境可以同时支持开发、支持、测试和生产环境的版本,因此使得从开发到测试到QA到生产的过程变得更容易。容器在微服务环境中可以工作的很好因为它可以将服务隔离在单个的容器中。升级一个服务变成了一个可以自动化和可控的过程,在APIs保持不变的情况下修改一个服务不会影响到其它的服务。

图1:微服务中的容器

当组织开始在大规模环境中运行容器时,或许需要考虑使用编排框架来管理持续增加的复杂性。编排框架帮助部署和管理容器:部署主机、示例容器、错误处理、弹性伸缩。Kubernetes和Mesos是两个常见的编排框架可以使得在微服务环境中部署大量容器变得容易。

获取更多关于如何利用容器和MongoDB构建微服务架构的信息,下载我们的指南:构建微服务:解析容器和编排

微服务的好处

很多组织可以通过实施微服务来满足现代应用的需求,这些好处包括:

缩短产品上市时间:在整体化架构的应用中,任何微小的修改都需要重新部署整个应用栈,因此带来了更高的风险和复杂度。这造成了更长的版本周期,因为修改可能会被累积,直到达到某个阈值时才发布新的版本。使用微服务,对于某个服务的修改可以被迅速的提交、测试和部署,因为对此服务的修改跟系统的其它部分是不相关的。 

持续集成——一种每天数次集成和测试开发人员的代码改动的软件开发实践 – 因为有更少的功能需要去测试而变得更简单和快速。结果是版本的发布节奏更快,因为更少的代码需要被编译和重新测试。编排框架例如Kubernetes通过自动化上线、容器滚动更新和必要时的回滚进一步加快了产品上市的节奏。

灵活性和可扩展性:整体架构的应用需要系统中的全部组件同时扩展。如果某个服务需要更高的性能,唯一的选项就是扩展系统中的所有服务而不是仅仅扩展需要扩容的单个服务。使用微服务,仅需要额外能力的单个服务需要扩容。扩容通过部署更多的容器来实现、可以实现更有效的容量计划,更少的软件授权和更低的总体拥有成本;因为服务和软件可以更好的匹配。

图2:容器伸缩

弹性: 整体架构应用的一个主要问题是当某个服务失效时可能整个系统可能都会受到连累。在微服务中,各个服务之间的隔离性使得单个服务的失效不会扩展到系统的其它部分进而造成全局性的影响。如果使用容器,编排框架可以提供额外的弹性:当某个容器失效时,一个新的容器会被启动,进而实现完全的冗余和容量。 

组织架构匹配:微服务可以更好的匹配组织架构,因为团队的规模可以根据需要完成的任务进行更好的定义。团队可以被分成更小的小组并专注在应用的某个组件上。这对分布在不同地理位置的团队来讲是非常有用的。例如,在新加坡的团队处理三个服务,在旧金山的团队处理五个服务,这两个团队可以独立的发布和部署功能组件。 这可以帮助处理相同组件的不同职能的团队(Ops、Dev、QA)打破疆界和更好的合作。这也可以保证不同团队之间的沟通跟不同的服务之间的API相匹配。本质上来讲,服务之间的API定义了不同开发团队之间应该相互提供的服务的契约。 

降低成本:通过使用容器,应用和环境(设计、测试、生产、支持)可以共享相同的基础设施,结果是更高的硬件利用率和由于管理简化带来的成本降低。另外,微服务也会降低技术方面的开销。在整体化架构的应用中,重构一个大型应用的代码会带来开销(时间、资源)。通过将应用分解成可以通过API访问的微服务,代码重构可以逐个服务进行,结果是更少的时间去维护和更新代码。

这篇博文系列的第二部分,我们将讨论如何用MongoDB构建微服务。 

原文链接:Building Modern Applications with Microservices: Part 1(翻译:李光成)

================================================================
译者介绍
李光成,IBM中国研究院资深研究员,研究方向是云计算基础设施及技术。目前在做的是Docker资源隔离方面的研究项目。

原文发布时间为:2016-05-11

本文作者:liguangcheng 

本文来自合作伙伴DockerOne,了解相关信息可以关注DockerOne。

原文标题:利用微服务构建现代应用(一)

时间: 2024-08-01 22:01:38

利用微服务构建现代应用(一)的相关文章

利用微服务构建现代应用(二)

本文讲的是利用微服务构建现代应用(二),[编者的话]本文是如何用微服构建现代应用的第二部分,介绍了如何用MongoDB中实现微服务,在迁移到微服务之前需要考虑的问题以及使用MongoDB构建微服务架构的客户案例. 在上一篇博文中,我介绍了微服务的背景知识及其优势.本文将介绍如何使用MongoDB构建微服务以及在实施微服务的项目中应该要注意的问题. MongoDB如何实现微服务 企业要享受到微服务的好处需要一些基本的技术原则,其中最主要的是灵活的数据模型.冗余.自动化和可扩展性. 灵活的数据模型:

使用Spring Cloud和Docker构建微服务

本文讲的是使用Spring Cloud和Docker构建微服务,[编者的话]这是系列博文中的第一篇,本文作者使用Spring Cloud和Docker构建微服务平台,文章的例子浅显易懂. 本系列博文主要向大家介绍如何使用Spring Cloud和Docker构建微服务平台. 什么是Spring Cloud? Spring Cloud 是Pivotal提供的用于简化分布式系统构建的工具集.Spring Cloud引入了云平台连接器(Cloud Connector)和服务连接器(Service Co

为什么公司采用微服务以及他们如何获取成功

本文讲的是为什么公司采用微服务以及他们如何获取成功[编者的话]微服务架构设计是最近讨论最热的话题.随着最近几年互联网行业的迅猛发展,随着公司或者组织业务的不断扩张,需求不断的增加以及用户量的不断增加,单块架构的优势已逐渐无法适应互联网时代的快速变化,面临着越来越多的挑战.我们是否要开始使用微服务架构来避免单体式架构带来的挑战?微服务架构真的是我们想要的吗?什么样的场景应该拥抱微服务架构?本文从非技术的角度阐述了对微服务的理解,为什么公司选择微服务架构设计,以及分享使用微服务架构的成功经验. 这篇

中间件和微服务,Docker以及原生云架构的关系

微服务和Docker的发展势头 微服务和容器的主要目标是缩短软件开发时间,以及实现开发.部署以及运维的更大灵活性.为什么它过去几个月的发展势头这么猛?因为几乎所有科技巨头企业如亚马逊,谷歌,Facebook,Netflix都在这里激烈竞争. 微服务就像是一个面向服务的架构(SOA):这是一种架构和供应商技术分别独立的设计理念.因此,目前并没有明确的界定标准或规范.你永远需要在和其他人讨论之前定义你所理解的微服务术语.每个人都有不同的定义.在这篇文章中微服务是被开发,部署和独立缩放的服务.它们可以

微服务架构 原来应用开发还可以这么美好

单体应用这种传统开发思维已经难以在新时代站住脚了. 一个简单的应用会随着时间推移逐渐变大.在每次的sprint中,开发团队都会面对新"故事",然后开发许多新代码.几年后,这个小而简单的应用会变成了一个巨大的怪物. 一旦你的应用变成一个又大又复杂的怪物,那开发团队肯定很痛苦.敏捷开发和部署举步维艰,其中最主要问题就是这个应用太复杂,以至于任何单个开发者都不可能搞懂它.因此,修正bug和正确的添加新功能变的非常困难,并且很耗时.另外,团队士气也会走下坡路. 最后,单体式应用使得采用新架构和

深度剖析微服务架构的九大特征

微服务架构这个术语在过去几年渐成热门,它把一种特定的软件应用的设计方法描述为能够独立部署的服务的套件.尽管缺乏对这一架构类型的准确定义,但是在业务能力.自动化部署.智能端点.语言和数据的去中心化控制等方面,已经形成了某些普遍特征. 微服务,另一个在软件架构领域津津乐道的新词.尽管我们本能上倾向于对它不屑一顾,然而这一专业术语描述了一种目前越来越吸引人的软件系统的风格.我们已经看到近年来有许多项目使用了此类型,结果很鼓舞人心;因而对于我的诸多同事来说,这也就成为他们构建企业级应用时候的首选.然而,

微服务、容器与持续交付

本文件的是微服务.容器与持续交付[编者的话]就像木炭.火硝和硫磺遇到了一起.当微服务.容器和持续交付遇到了一起,这注定会掀起一场变革. 微服务 如果非要给微服务找一个理由,单一职责就足够了.我们把因相同原因而变化的东西聚合到一起,而把因不同原因而变化的东西分离开.我们称之为单一职责原则SRP. 尤其是大型和长期运营的项目群,随着时间的推移,需求一定是不断增加和变更的.但我们不希望掉进"焦油坑".我们希望我们的项目群是符合"开闭原则"的.在某个时期我们寄希望于一个统一

再论微服务架构之七宗罪

2014年年底,塔里克·阿贝卓布(TareqAbedrabbo,OpenCredo首席技术官)发表了一篇题为"微服务之七宗罪"的文章,他在此文确定了微服务架构七种常见的反发展模式.2016年一月,来自Voxxed的Danial Bryant发表了该文章的最终版,结合原文以及自己的经验对此文做了进一步的更新. 两人讨论的第一个问题都是构建错误的东西.就像Abedrabbo文章说的那样,可能是由于在定义项目范围和目标时含糊不清所造成的,或者像Bryant说的,试图利用最新的技术,而不是使用

现代企业架构下的微服务

本文讲的是现代企业架构下的微服务[编者的话]微服务架构获得了如此多的关注,大多数的企业IT从业者也正好奇它是如何影响其他的架构模式的:比如企业集成和API管理. 本篇博文的目的是提供一个视角: 在我们引入了微服务架构到企业中以后,现代的企业机构会看起来是什么样子.(如果你对微服务架构还很陌生的话,参阅我的前一篇博文.) 关于微服务如何适用到总体的IT版图的讨论, 我以解读Gartner关于微服务的报告来开始. 微服务架构,本质上是消除了很多的复杂性,包括设计的,开发的,部署的,以及跨服务/系统通