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

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

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

简介

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

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

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

整体化架构

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

什么是微服务?

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

微服务从SOA发展而来,SOA在本世纪初曾获得广泛的认可和流行,SOA是一种反对大型的整体化架构应用的方式。SOA和微服务的主要区别有:
  • SOAs是有状态的,而微服务是无状态的
  • SOAs倾向于使用企业级的服务总线进行通信,而微服务则使用更简单的通信系统
  • SOAs或许会有上百万行代码,而微服务往往仅有少于100行代码
  • SOAs强调重用(例如运行时代码、数据库等),而微服务则关注在尽量解耦
  • SOAs里的一个系统性变化需要修改软件的整体结构,而在微服务中的一个系统性变化将产生一个新的服务
  • SOAs更经常使用传统的关系型数据库,而微服务则更倾向于现代的、非关系型数据库。下面几节将介绍在微服务架构中使用非关系型数据库的好处。

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

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

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

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

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

图1:微服务中的容器

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

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

微服务的好处

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

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

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

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

图2:容器伸缩

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

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

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

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

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

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

原文发布时间为:2016-05-11
本文作者:liguangcheng 
本文来自云栖社区合作伙伴DockerOne,了解相关信息可以关注DockerOne。
原文标题:利用微服务构建现代应用(一)
目录
相关文章
|
3月前
|
负载均衡 Java API
《深入理解Spring》Spring Cloud 构建分布式系统的微服务全家桶
Spring Cloud为微服务架构提供一站式解决方案,涵盖服务注册、配置管理、负载均衡、熔断限流等核心功能,助力开发者构建高可用、易扩展的分布式系统,并持续向云原生演进。
|
9月前
|
Cloud Native Serverless 流计算
云原生时代的应用架构演进:从微服务到 Serverless 的阿里云实践
云原生技术正重塑企业数字化转型路径。阿里云作为亚太领先云服务商,提供完整云原生产品矩阵:容器服务ACK优化启动速度与镜像分发效率;MSE微服务引擎保障高可用性;ASM服务网格降低资源消耗;函数计算FC突破冷启动瓶颈;SAE重新定义PaaS边界;PolarDB数据库实现存储计算分离;DataWorks简化数据湖构建;Flink实时计算助力风控系统。这些技术已在多行业落地,推动效率提升与商业模式创新,助力企业在数字化浪潮中占据先机。
518 12
|
10月前
|
机器学习/深度学习 设计模式 API
Python 高级编程与实战:构建微服务架构
本文深入探讨了 Python 中的微服务架构,介绍了 Flask、FastAPI 和 Nameko 三个常用框架,并通过实战项目帮助读者掌握这些技术。每个框架都提供了构建微服务的示例代码,包括简单的 API 接口实现。通过学习本文,读者将能够使用 Python 构建高效、独立的微服务。
|
10月前
|
存储 NoSQL 关系型数据库
微服务——MongoDB的应用场景
随着Web2.0时代的到来,传统关系型数据库(如MySQL)在高并发读写、海量数据存储及高可扩展性需求方面逐渐力不从心。而MongoDB凭借其灵活的文档结构和高效性能,在社交、游戏、物流、物联网和视频直播等场景中表现出色。这些场景通常具有数据量大、写入频繁且对事务要求不高的特点。选择MongoDB适合以下情况:应用无需复杂事务与join支持、需求不确定需快速迭代、需处理高QPS读写或超大规模数据存储、追求高可用性和快速水平扩展能力。相比MySQL,MongoDB能以更低的学习、开发和运维成本满足现代应用需求。
364 0
|
弹性计算 Kubernetes API
构建高效后端服务:微服务架构的深度剖析与实践####
本文深入探讨了微服务架构的核心理念、设计原则及实现策略,旨在为开发者提供一套系统化的方法论,助力其构建灵活、可扩展且易于维护的后端服务体系。通过案例分析与实战经验分享,揭示了微服务在提升开发效率、优化资源利用及增强系统稳定性方面的关键作用。文章首先概述了微服务架构的基本概念,随后详细阐述了其在后端开发中的应用优势与面临的挑战,最后结合具体实例,展示了如何从零开始规划并实施一个基于微服务的后端项目。 ####
|
Cloud Native 安全 持续交付
深入理解微服务架构及其在现代软件开发中的应用
深入理解微服务架构及其在现代软件开发中的应用
419 33
|
弹性计算 持续交付 API
构建高效后端服务:微服务架构的深度解析与实践
在当今快速发展的软件行业中,构建高效、可扩展且易于维护的后端服务是每个技术团队的追求。本文将深入探讨微服务架构的核心概念、设计原则及其在实际项目中的应用,通过具体案例分析,展示如何利用微服务架构解决传统单体应用面临的挑战,提升系统的灵活性和响应速度。我们将从微服务的拆分策略、通信机制、服务发现、配置管理、以及持续集成/持续部署(CI/CD)等方面进行全面剖析,旨在为读者提供一套实用的微服务实施指南。
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
790 5
|
监控 安全 持续交付
构建高效微服务架构:策略与实践####
在数字化转型的浪潮中,微服务架构凭借其高度解耦、灵活扩展和易于维护的特点,成为现代企业应用开发的首选。本文深入探讨了构建高效微服务架构的关键策略与实战经验,从服务拆分的艺术到通信机制的选择,再到容器化部署与持续集成/持续部署(CI/CD)的实践,旨在为开发者提供一套全面的微服务设计与实现指南。通过具体案例分析,揭示如何避免常见陷阱,优化系统性能,确保系统的高可用性与可扩展性,助力企业在复杂多变的市场环境中保持竞争力。 ####
202 2
|
监控 持续交付 API
深入理解微服务架构:构建高效、可扩展的系统
深入理解微服务架构:构建高效、可扩展的系统
270 4