Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >微服务架构(Microservices architecture)

微服务架构(Microservices architecture)

作者头像
一行舟
发布于 2022-08-25 06:14:48
发布于 2022-08-25 06:14:48
3570
举报
文章被收录于专栏:一行舟一行舟

定义

Microservices 是一种服务组织形式,很难有一个特别明确的定义,更多的是技术开发人员总结出来的一些共识。通常来说微服务架构包含一组「独立部署」的小服务,共同完成一个应用。

接下来我们通过微服务的历史、特点和遇到的问题来进一步了解微服务。

一点历史

早在 2005 年,Peter Rodgers 在 Web Services Edge 会议上的一次演讲中介绍了“Micro-Web-Services”这个术语。他主张 :Micro-Services 应该类似 Unix 系统的 Pipelines ;服务在运行时是多语言的,它们可以互相调用;复杂的业务逻辑应该隐藏在服务内部,对外只暴露简单的 api ;任何粒度的服务都可以对外提供服务。

在2007年, Juval Löwy 在他的著作中呼吁构建每一个 class 都是一个服务的系统。

2011 年5月在威尼斯附近举行的软件架构师研讨会使用术语 「micorservice」 来描述参与者最近一直在探索这种常见的架构风格。在2012年5月这个小组认为 「microservices」 是更合适的名字。

2012年3月,James Lewis 在克拉科夫的会议上也提出了要把一些相似的想法作为研究课题。Netflix 前云系统总监 Adrian Cockcroft 将这种方法描述为 「细粒度 SOA 。」

我个人感觉把微服务理解成一种极致的 SOA 架构是非常合理的。

特点

微服务具有以下特点:

  1. 服务体量小,可以有少数人开发和维护。
  2. 每一个服务最好是单独的代码仓库。
  3. 服务可以独立部署。
  4. 自己维护自己的业务数据,不直接对外暴露数据的存储逻辑。
  5. 服务之间通过 api 通信,服务的内部实现细节对外是隐藏的。
  6. 支持多语言。

好处

微服务的这些特点带来了很多好处:

  1. 单个服务逻辑简单,便于快速开发、迭代。
  2. 服务独立部署,可以针对不同特点的服务分配合适的资源,能有效提高资源利用率。
  3. 灵活扩展,方便增加新的服务,而不用过多地考虑原有逻辑。
  4. 技术自由,对应不同的业务使用合适的技术,方便技术选型。
  5. 提高系统的吞吐量。

如何实现

我认为实现微服务架构可以分两步进行:

  1. 服务拆分
  2. 服务治理

服务拆分

服务拆分分为垂直拆分(业务拆分)和水平拆分(分层)。

垂直拆分可以先按照大的领域拆分,然后在领域的内部再按照 api 拆分。比如说我们可以把公司先分成用户、搜索、评论、推荐几个大业务领域。

对于用户领域我们可以按照 api 的粒度进行具体服务的拆分。比如分为:注册服务、登录服务、会员管理服务等。

业务领域的垂直拆分往往需要根据业务的领域模型,对不同的模块进行拆分,很难有统一的标准;而且拆分的粒度还要结合团队规模,基础设施、访问量等维度统一考量。相对于水平拆分,垂直拆分往往更加考验架构师的综合能力。

水平拆分其实就是对整个业务流程进行分层,业界反倒是有一些通用的分层规则可以参考。总结了一个相对完善的微服务架构的示意图。

上图左侧代表静态资源服务,相对简单,采用 CDN 做缓存加速,后面连的是静态资源的存储地址。

上图右侧代表动态资源的访问链路。主要分为:网关层、业务逻辑层、数据逻辑层、存储层。网关层中 LVS 用来实现四层网络负载、Nginx 用来实现7层网络。业务网关用来实现鉴权、限流、生成 session 、协议转换等工作。BFF 层用来实现对业务模块进行数据组装和 SSR 。业务逻辑层以单个或多个 api 的粒度部署各服务,对于一些需要聚合的服务我们可以做一些服务包装,通过服务之间的分层把通用逻辑收敛起来。数据访问层把数据的存储逻辑封装起来,让业务模块不用关心底层数据库。存储层实现数据的最终存储。

通过水平分层可以在通用功能维度拆分服务,使各层的服务关心自己的功能。

服务治理

通过服务拆分,降低了单个服务的复杂性,但是同时也带来了很多问题:

  1. 服务数量变多了,不容易维护。
  2. 服务发布次数变多了。
  3. 请求链路变长了,RT时间变长。
  4. 服务出现故障不容易发现。
  5. 线上问题不方便排查。
  6. 服务之间出现依赖关系时不方便测试。

等等。

为了保障微服务架构下整个系统的高可用性,需要有一系列工具来解决上面这些问题。

我把常见问题及解决方案总结了一张思维导图:

我对图中的部分内容做一些解释:

我们的每一个服务都可能存在多个副本,也有可能分布在不同的机房里,上游服务调用下游服务时就需要知道每一个副本的调用信息,此时就需要注册中心来完成服务的注册和上游服务对下游服务的发现。

微服务之间通常会使用内网通信,此时可以采用 RPC 框架完成服务之间的调用。在微服务发展的中间阶段,网络延迟可接受的情况下直接通过 HTTP 调用也是可以的。

大量细小的服务,每一个都有可能出现故障,为了能比客户先发现问题并及时止损,所以需要有故障检测、故障处理、故障恢复。

微服务的可观测性也非常重要。随着请求链路变长,线上问题难以排查。在网关层给每一个请求添加 traceID,通过日志追踪系统,可以方便的追踪请求出现问题的模块及上下文信息。

服务之间的调用需要合理地选择集群、解决并行串行调用、解决流量均衡等问题。

需要有一个发布平台,方便服务快速发布,并能支持在发布时设置副本数量、资源分配、服务回滚等功能。

需要有多套测试方案,能完成线上的各种测试要求。

现在还没有一个大而全的架构能解决上述的所有问题,不过有很多开源的组件,可以在一些开源组件的基础上做封装或二次开发。图中的每一个问题都牵扯到很多技术细节,一个人很难搞定,需要有一个开发+运维的团队去协作完成任务。

其它

微服务架构并不适合所有业务场景,它适合快速迭代开发、追求吞吐量对响应延迟没有那么敏感的业务。

微服务架构的实现成本比较高,公司在转型时并不需要从单体架构一步到位,达到最终的完整微服务形态。比如说一个单体架构可以先在单体架构内部进行模块拆分,对表结构做拆分,这样再拆分为单个服务时就容易了很多。再比如,数据访问层和和业务逻辑层在初级阶段也可以放到一个项目中,在一个项目中我们可以通过 Dao 层分离数据和业务逻辑,这样在需要抽离数据逻辑层时就变得轻而易举。

最后,欢迎私信交流,指出文章的不足之处或提出您的疑虑。

相关链接

https://microservices.io/

https://en.wikipedia.org/wiki/Microservices

https://en.wikipedia.org/wiki/Service-oriented_architecture

https://docs.microsoft.com/en-us/azure/architecture/guide/architecture-styles/microservices

https://aws.amazon.com/cn/microservices/

https://e.naixuejiaoyu.com/detail/term_60641ec5c73b2_8TIxMm/25

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一行舟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
互联网架构究竟如何演进?
自身“捣鼓”架构多年,也时常与人交流架构的魅力。今天就互联网架构演进聊聊我的看法。 在我看来,互联网架构经历了单体架构、水平分层架构、面向服务架构、微服务架构以及服务网格架构等几个不同阶段,每个架构有什么特点?这些架构间有什么不同?为什么要演进?让我们一探究竟! 单体架构(Monoliths Architecture) 单体架构是指业务功能的实现全部在一个进程(process)内完成。二手交易平台标配的商品推荐功能,单体架构接受APP客户端发送的请求、从数据库获取推荐商品、对推荐的商品列表过滤/排序等业务处
玄姐谈AGI
2018/07/03
1.5K0
微服务Microservices——应用架构的未来
能够构建、演变和扩展大型应用程序对于组织来说是至关重要的,但是所涉及的挑战使其成为一项困难的任务。正因为如此,微服务已经成为构建现代云应用的主导模式,它将单个组件分解为独立的服务,这些服务围绕着特定的业务功能。
程序你好
2018/08/09
9510
微服务Microservices——应用架构的未来
微服务架构解析:跨越传统架构的技术革命
微服务架构(Microservices Architecture)是一种软件架构风格,它将一个大型的单体应用拆分为多个小而独立的服务,每个服务都可以独立开发、部署和扩展。每个微服务通常聚焦于某一个特定的业务功能或领域,能够通过轻量级的通信协议(如 HTTP/REST、消息队列等)与其他微服务进行交互。
用户7954602
2024/12/07
4880
微服务架构解析:跨越传统架构的技术革命
Chris Richardson微服务翻译:重构单体服务为微服务
Chris Richardson 微服务系列翻译全7篇链接: 微服务介绍 构建微服务之使用API网关 构建微服务之微服务架构的进程通讯 微服务架构中的服务发现 微服务之事件驱动的数据管理 微服务部署 重构单体应用为微服务(本文) 原文链接:Refactoring a Monolith into Microservices ---- 微服务重构的概述 将单体应用转化为微服务是应用现代化的一种形式,数十年来开发者们一直致力于此。因此,将应用重构为微服务时,我们可以借鉴其中的一些经验。 首先不要大规模地重写代码,
butterfly100
2018/04/17
5440
Chris Richardson微服务翻译:重构单体服务为微服务
从分层架构到微服务架构(五)之服务化架构
从本文开始,我们进入了《从分层架构到微服务架构》系列中分布式架构的介绍,本文要介绍的是服务化架构(Service-Based Architecture,SBA)。
元闰子
2022/04/08
7440
从分层架构到微服务架构(五)之服务化架构
【知识总结】3.微服务从架构到发布
企业级的应用一般都会面临各种各样的业务需求,而常见的方式是把大量功能堆积到同一个单体架构中去。比如:常见的ERP、CRM等系统都以单体架构的方式运行,同时由于提供了大量的业务功能,随着功能的升级,整个研发、发布、定位问题,扩展,升级这样一个“怪物”系统会变得越来越困难。
辉哥
2021/03/11
4720
【知识总结】3.微服务从架构到发布
关于微服务架构,你需要关注的那些点
今天谈到系统架构模式,很难不联想起微服务架构。企业或组织在系统架构的实践过程中,从最初的单体架构,之后走向 SOA,逐渐分布式之后,最终产生了微服务架构。
java思维导图
2018/10/24
1.2K0
关于微服务架构,你需要关注的那些点
互联网之总体架构设计篇
架构一直以来都被认为是高阶技术人员的代名词,但什么是架构,什么样的架构人员才称得上一个好的架构师,这是很难评判的。但是,要提高架构能力, 只寄希望于代码层级是远远不够的, 代码只能帮助我们解决执行力的问题,但架构的高度更多的是依赖战略(业务洞察力)以及战术问题(技术视野)来解决问题。
蒋老湿
2019/09/17
2K0
互联网之总体架构设计篇
微服务架构(Microservices)究竟是什么?
(摘自Introduction to Monolithic Architecture and MicroServices Architecture)
ayqy贾杰
2019/08/12
1.3K0
服务架构的进化
虽然在软件设计中划分了3层模型,但是对业务场景没有划分,一个典型的单体架构就是将所有的业务场景的表现层,业务逻辑层,数据访问层放在一个工程中最终经过编译,打包,部署在一台服务器上。
KunkkaWu
2022/07/18
8420
7、重构单体为微服务
本书主要介绍如何使用微服务构建应用程序,这是本书的第七章,也是最后一章。第一章介绍了微服务架构模式,讨论了使用微服务的优点与缺点。随后的章节讨论了微服务架构的方方面面:使用 API ​​网关、进程间通信、服务发现、事件驱动数据管理和部署微服务。在本章中,我们将介绍单体应用迁移到微服务的策略。
Java架构师历程
2018/09/26
5620
7、重构单体为微服务
微服务架构及其最重要的10个设计模式
微服务架构,独享数据库、事件驱动、CQRS、Saga、BFF、API 网关、Strangler、断路器、外部化配置、消费端驱动的契约测试
深度学习与Python
2021/01/06
1.3K0
微服务架构设计和其设计模式介绍
之前在推上看到一张图片,感觉总结的挺好,在我也展开总结了之后发现了这张图的原文,所以整体翻译了一遍。还是非常有价值的,值得学习。
黑光技术
2023/02/23
8550
微服务架构设计和其设计模式介绍
单体到微服务架构服务演化过程
在 Web 应用程序发展的早期,大部分工程是将所有的服务端功能模块打包到单个巨石型(Monolith)应用中,譬如很多企业的 Java 应用程序打包为 war 包,最终会形成如下的架构:
架构狂人
2023/09/28
4380
单体到微服务架构服务演化过程
微服务架构下的核心话题 (一):微服务架构下各类项目的顺势崛起
     在接触任何一个新鲜事物初期时,你一定有必要了解它,知道它能给你带来什么、有哪些优势、哪些弊端,最终要搞明白它是否合适你,再决定是否使用它。技术更是如此,这也就是常常所说的技术选型、架构选型,更是作为一个架构师必须衡量考虑的。在当前技术不断革新的趋势下,每天可能都有新的概念、新的体系、新的技术(框架)出现,微服务的出现,纷纷被众多技术人、公司所追捧,仿佛给传统项目的重构、新项目的研发带来了便捷、萌发了希望,但大家都真的了解它么?
xcbeyond
2020/01/18
4400
微服务架构下的核心话题 (一):微服务架构下各类项目的顺势崛起
交易系统架构演进之路(三):微服务化
我们 2.0 版本的交易系统整体架构就如上图所示,划分为了行情服务、客户端服务、撮合服务、管理端服务。行情服务主要对外提供推送行情数据的 WebSocket API。撮合服务就是一个内存撮合引擎,其输入是一个定序的委托订单队列,而输出包含成交记录和其他各种事件,包括撤单成功、撤单失败、订单进入了 Orderbook 等。撮合服务如果重启,则会从 MySQL 数据库查询出所有未成交订单,重新组成 Orderbook。客户端服务的核心功能就是接收和处理客户端各种 HTTP 接口请求,管理端则是提供给系统管理人员对整个系统的用户、订单、资产、配置等进行统一查看和管理。
Keegan小钢
2020/12/29
1.9K0
微服务(一)——单体架构 VS 微服务架构
    一个工程对应一个归档包(war),这个war包 包含了该工程的所有功能。我们成为这种应用为单体应用,也就是我们常说的单体架构。具体描述: 就是在我们的一个war包种,聚集了各种功能以及资源,比如JSP,JS,CSS等。
不愿意做鱼的小鲸鱼
2022/09/26
1.9K0
微服务(一)——单体架构 VS 微服务架构
[包子分享] 构架模式: Microservices Architecture
http://baozitraining.org 微服务构架是近年来比较流行的服务端应用构架,由其非常好的可伸缩性,稳定性以及灵活的协同开发模式而著称于世。越来越多的公司都或多或少地开始采用微服构架
包子面试培训
2018/04/19
8270
[包子分享] 构架模式: Microservices Architecture
什么是微服务架构
什么是微服务? 微服务(Microservices Architecture)是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。 微服务的概念源于2014年3月Martin Fowler所写的章“Microservices”http://martinfowler.com/articles/microservices.html 单体架构(Monol
程序员鹏磊
2018/02/09
1.4K0
什么是微服务架构
【微服务架构】什么是微服务? — 全面了解微服务架构
What is Microservices — Edureka 您有没有想过,什么是微服务以及扩展行业如何与它们集成,同时构建应用程序以满足客户的期望? 要了解什么是微服务,您必须了解如何将单体应用程序分解为独立打包和部署的小型微型应用程序。本文将让您清楚了解开发人员如何使用微服务根据需要扩展其应用程序。 在本文中,您将了解以下内容: 为什么是微服务? 什么是微服务? 微服务架构的特点 微服务架构的优势 设计微服务的最佳实践 使用微服务的公司 为什么是微服务? 现在,在我告诉你微服务之前,让我们看看在
架构师研究会
2022/04/24
2.5K0
【微服务架构】什么是微服务? — 全面了解微服务架构
推荐阅读
相关推荐
互联网架构究竟如何演进?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档