首页 > 其他分享 >一文快速了解微服务架构

一文快速了解微服务架构

时间:2024-02-06 23:00:37浏览次数:31  
标签:调用 服务 一文 故障 注册 服务提供者 架构 快速 请求

服务提供者按照一定格式的服务描述,向注册中心注册服务,声明自己能够提供哪些服务及服务的地址是什么,完成服务发布。

服务消费者请求注册中心,查询所需要调用服务的地址,然后以约定的通信协议向服务提供者发起请求,得到请求结果后再按照约定的协议解析结果。

在服务的调用过程中,服务的请求耗时、调用量及成功率等指标都会被记录下来用作监控,调用经过的链路信息也会被记录下来,用于故障定位和问题追踪。在此期间,如果调用失败,可以通过重试等服务治理手段来保证成功率。

一文快速了解微服务架构_微服务

微服务架构下,服务调用主要依赖以下几个基本组件:

1、服务描述

服务调用首先要解决的问题就是服务如何对外描述。比如,你对外提供了一个服务,那么这个服务的服务名是什么?调用这个服务需要提供哪些信息?调用这个服务返回的结果是什么格式的?该如何解析?这些就是服务描述需要解决的问题。

常用的服务描述方式包括RESTful API、XML配置及IDL文件3种。其中,XML配置方式多用作RPC协议的服务描述,通过*.xml配置文件来定义接口名、参数及返回值类型等。IDL文件方式通常用作Thrift和gRPC这类跨语言服务调用框架中,如gRPC就是通过Protobuf文件来定义服务的接口名、参数及返回值的数据结构。

2、注册中心

单体应用由于部署在同一个WAR包里,接口之间的调用属于进程内的调用。而拆分为微服务独立部署后,服务提供者该如何对外暴露自己的地址,服务调用者该如何查询所需要调用的服务的地址呢?此时就需要一个类似登记处的地方,能够记录每个服务提供者的地址以供服务调用者查询,在微服务架构里,这个地方就是注册中心。

如果用户提供了一个服务,要想让外部想调用这项服务的人知道,就需要一个类似注册中心的角色,服务提供者将自己提供的服务及地址登记到注册中心,服务消费者则从注册中心查询所需要调用的服务的地址,然后发起请求。

一般来讲,注册中心的工作流程如下。

  1. 服务提供者在启动时,根据服务发布文件中配置的发布信息向注册中心注册自己的服务。
  2. 服务消费者在启动时,根据消费者配置文件中配置的服务信息向注册中心订阅自己所需要的服务。
  3. 注册中心返回服务提供者地址列表给服务消费者。
  4. 当服务提供者发生变化,如有节点新增或者销毁,注册中心将变更通知给服务消费者。

一文快速了解微服务架构_微服务_02

3、服务框架

对于单体应用来说,不同功能模块之间相互交互时,通常是以类库的方式来提供各个模块的功能。对于微服务来说,每个服务都运行在各自的进程中,应该以何种形式向外界传达自己的信息呢?答案就是接口,无论采用哪种通信协议(HTTP或者RPC),服务之间的调用都通过接口描述来约定,约定内容包括接口名、接口参数及接口返回值。

通过注册中心,服务消费者就可以获取到服务提供者的地址,有了地址后就可以发起调用。但在发起调用前还需要解决以下几个问题。

通过注册中心,服务消费者就可以获取到服务提供者的地址,有了地址后就可以发起调用。但在发起调用前还需要解决以下几个问题。

  • 服务通信采用什么协议?就是说服务提供者和服务消费者之间以什么样的协议进行网络通信,是采用四层TCP、UDP协议,还是采用七层HTTP协议,还是采用其他协议。
  • 数据传输采用什么方式?就是说服务提供者和服务消费者之间的数据传输采用哪种方式,是同步还是异步,是在单连接上传输,还是多路复用。
  • 数据压缩采用什么格式?通常数据传输都会对数据进行压缩,以减少网络传输的数据量,从而减少带宽消耗和网络传输时间,如常见的JSON序列化、Java对象序列化及Protobuf序列化等。
4、服务监控

通常对于一个服务,人们最关心的是QPS(调用量)、AvgTime(平均耗时)及P999(99.9%的请求响应时间在多少毫秒以内)等指标。

一旦服务消费者与服务提供者之间能够正常发起服务调用,就需要对调用情况进行监控,以了解服务是否正常。通常来讲,服务监控主要包括3个流程。

  1. 指标收集:就是把每一次服务调用的请求耗时及成功与否收集起来,并上传到集中的数据处理中心。
  2. 数据处理:有了每次调用的请求耗时及成功与否等信息,就可以计算每秒服务请求量、平均耗时及成功率等指标。
  3. 数据展示:数据收集起来,经过处理后,还需要以友好的方式对外展示,才能发挥价值。通常都是将数据展示在Dashboard面板上,并且每隔10秒等间隔自动刷新,用作业务监控和报警等。
5、服务追踪

在单体应用拆分为微服务后,一次用户调用可能依赖多个服务,每个服务又部署在不同的节点上,如果用户调用出现问题,则需要有一种解决方案能够将一次用户请求进行标记,并在多个依赖的服务系统中继续传递,以便串联所有路径,从而进行故障定位。

微服务中服务追踪的工作原理大致如下。

  1. 服务消费者发起调用前,会在本地按照一定的规则生成一个requestid,发起调用时,将requestid当作请求参数的一部分,传递给服务提供者。
  2. 服务提供者接收到请求后,记录下这次请求的requestid,然后处理请求。如果服务提供者继续请求其他服务,会在本地再生成一个自己的requestid,然后把这两个requestid都当作请求参数继续往下传递。以此类推,通过这种层层往下传递的方式,一次请求,无论最后依赖多少次服务调用、经过多少服务节点,都可以通过最开始生成的requestid串联所有节点,从而达到服务追踪的目的。
6、服务治理

可以想象,拆分为微服务架构后,服务的数量变多了,依赖关系也变复杂了。比如一个服务的性能有问题时,依赖的服务都势必会受到影响。可以设定一个调用性能阈值,如果一段时间内一直超过这个值,那么依赖服务的调用可以直接返回,这就是熔断,也是服务治理最常用的手段之一。

服务监控能够发现问题,服务追踪能够定位问题所在,而解决问题就得靠服务治理了。服务治理就是通过一系列的手段来保证在各种意外情况下,服务调用仍然能够正常进行。在生产环境中,经常会遇到下列几种状况。

  • 单机故障。通常遇到单机故障后,都是靠运维发现并重启服务或者从线上摘除故障节点。然而集群的规模越大,越容易遇到单机故障,在机器规模超过100台以上时,仅靠传统的人工运维显然难以应对。而服务治理可以通过一定的策略,自动摘除故障节点,不需要人为干预,就能保证单机故障不会影响业务。
  • 单IDC故障。大家或许经常听说某某App,因为施工挖断光缆导致大批量用户无法使用的严重故障。而服务治理可以通过自动切换故障IDC的流量到其他正常IDC,从而避免因为单IDC故障引起的大批量业务受到影响。
  • 依赖服务不可用。如果你的服务依赖于另一个服务,当另一个服务出现问题时,会拖慢甚至拖垮你的服务。而服务治理可以通过熔断,在依赖服务异常的情况下,一段时期内停止发起调用而直接返回。这样一方面保证了服务消费者能够不被拖垮,另一方面也给服务提供者减少了压力,使其能够尽快恢复。

微服务是松藕合的,无论是在开发阶段还是部署阶段都是独立的。(能够快速响应,局部修改容易,一个服务出现问题不会影响整个应用。易于和第三方应用系统集成,支持使用不同的语言开发,允许融合最新技术。

每个微服务都很小,足够内聚,足够小,代码容易理解。团队能够更关注自己的工作成果,聚焦指定的业务功能或业务需求。但也带来了过多的运维操作,可能需要团队具备一定的DevOps技巧。当服务数量增加后,管理复杂性也会增加。

标签:调用,服务,一文,故障,注册,服务提供者,架构,快速,请求
From: https://blog.51cto.com/key3feng/9632679

相关文章

  • 单元化架构基本设计
    单元化架构基本设计关于架构分层的一些显著定义AccessLayer面向App客户端公网访问。ComputingLayer内网所有无状态的计算模块集合StorageLayer所有存储的集合关于单元化的一些显著定义单元(Set)单元的划分可以是任何维度,比如电商对的买家用户维度。单元对的......
  • 快速渲染效果图:设计师的高效工作流揭秘
    ​渲染技能是每个建模设计师需求的一个重要技能,尽管在许多设计公司里,建模和渲染往往是分开由各自的专家来完成。不过,一个全能型的建模师还是应该精通渲染技术。对于那些接外包项目来制作渲染效果图的设计师来说,掌握如何提速渲染变得尤为关键,因为这可以帮助他们提高工作效率,从而增......
  • 读《凤凰架构》感悟
    本书提供了一个完整的网站代码,网站名字是:凤凰书店。该网站是一个网上卖书的站点。类似于互联网最早期的亚马逊书城、当当网。一个传统的互联网网站。值得关注的是该书提供的不仅仅是勉强把这个网站实现出来的代码,而是用非常好的标准和风格实现了,并且实现了5套,让读者观察5套网站代......
  • AI热点概念解读:一文搞懂这些热词
    自ChatGPT问世以来,AI的风口就来了。AI是一门研究如何使计算机具有类似人类智能的学科。自从ChatGPT-3.5给大家带来了极大的震惊之后,全民都在谈论AI,在这个AI大时代背景之下,如果你想进一步了解AI相关热词含义,从而更好的理解当下AI的基础原理,本文就不容错过。如今,当你找专业人......
  • 分层架构
    分层架构(layeredarchitecture)是最常见的软件架构,也是事实上的标准架构。如果你不知道要用什么架构,那就用它。这种架构将软件分成若干个水平层,每一层都有清晰的角色和分工,不需要知道其他层的细节。层与层之间通过接口通信。虽然没有明确约定,软件一定要分成多少层,但是四层的结构......
  • 微核架构
    微核架构(microkernelarchitecture)又称为"插件架构"(plug-inarchitecture),指的是软件的内核相对较小,主要功能和业务逻辑都通过插件实现。内核(core)通常只包含系统运行的最小功能。插件则是互相独立的,插件之间的通信,应该减少到最低,避免出现互相依赖的问题。 优点良好的功能延......
  • 事件驱动架构
    事件(event)是状态发生变化时,软件发出的通知。事件驱动架构(event-drivenarchitecture)就是通过事件进行通信的软件架构。它分成四个部分。 事件队列(eventqueue):接收事件的入口分发器(eventmediator):将不同的事件分发到不同的业务逻辑单元事件通道(eventchannel):分发器与处理......
  • 微服务架构
    微服务架构(microservicesarchitecture)是服务导向架构(service-orientedarchitecture,缩写SOA)的升级。每一个服务就是一个独立的部署单元(separatelydeployedunit)。这些单元都是分布式的,互相解耦,通过远程通信协议(比如REST、SOAP)联系。  微服务架构分成三种实现模式。RE......
  • 云架构
    云结构(cloudarchitecture)主要解决扩展性和并发的问题,是最容易扩展的架构。它的高扩展性,主要原因是没使用中央数据库,而是把数据都复制到内存中,变成可复制的内存数据单元。然后,业务处理能力封装成一个个处理单元(prcessingunit)。访问量增加,就新建处理单元;访问量减少,就关闭处理单元......
  • SDN关键技术及架构
    SDN是软件定义网络的简称,在SDN中,网络的控制面与数据面分离,并且通过中心控制器进行统一管理。SDN的主要目标是提高网络的灵活性、可编程性和智能化程度,从而更好地适应不断变化的业务需求。SDN可以通过控制器来管理网络设备,控制网络流量和优化网络服务质量。SDN还可以使网络更加安全......