本期内容介绍:

1. 如何用 Hertz 完成 HTTP 恳求

2. 恳求背面的流程与运转逻辑

3. Hertz 三高特性的具体解读

01 如何用 Hertz 完成 HTTP 恳求

假如要用一个软件或者一个网页来模仿是什么样子的呢?这里选用了一个十分常用的调试工具叫 Postman 进行一个模仿的恳求。

首先在下图第一个红框位置,选好咱们的 HTTP Method 便是 POST。在这里写好 URL 和恳求地址,以及咱们的数据地点的对应位置。之后咱们能够点击 Send 按钮进行发送。发送完毕后就能够看到咱们收到了小姐姐的一个呼应,这便是来自 Server 的一个呼应。

【Hertz 新手小册】Day 3.   如何用 Hertz 实现 HTTP 请求

假如咱们挑选运用 Hertz 完成这个代码,只需短短几行就能够完成(如下图所示)。

第一步,初始化 Hertz 的 Engine;

第二步,挑选一个对应的 HTTP Method 和注册的路由地址;

第三步,将真正的处理函数注册到这个路由上。

这个项目就能够运转了。

【Hertz 新手小册】Day 3.   如何用 Hertz 实现 HTTP 请求

那么如此简略的一个代码背面躲藏了什么东西呢?这就涉及到恳求背面的流程与运转逻辑。

02 恳求背面的流程与运转逻辑

1.事务层。事务层的作用是运用结构供给的 API 完成事务逻辑,结构供给 API 的易用性很大程度上决定了开发体会。

2.服务办理层/中间件层。在编写完事务逻辑之后,会进入到服务办理层,服务办理层包括熔断、限流等等。具体举例如下:

  • 熔断:比方说你经常约请小姐姐去吃烧烤,可是约请了几次对方没有回应,所以你下一次挑选不再进行约请,这个便是熔断。对应到微服务体系,假如某一个下流一直犯错,咱们能够挑选不恳求这个下流。
  • 限流:关于 Server,也便是小姐姐,假如你的恳求又要吃烧烤,吃完烧烤还要去看电影等等,小姐姐为了避免压力过大,会先回绝几个恳求,这就叫做限流。

【Hertz 新手小册】Day 3.   如何用 Hertz 实现 HTTP 请求

服务办理层其实是依托于中间件层的,中间件层是和恳求等级绑定的,有前处理逻辑和后处理逻辑。它的存在是为了将一些核心逻辑和通用逻辑区分隔。除了服务办理相关的逻辑外,中间件还能够有许多其他的用处,比方 Recovery 捕获反常的中间件、Metrics 组件获得恳求的耗时、以及链路追寻。

那么链路追寻具体是什么呢?比方小明因为腼腆不敢直接约请小姐姐吃烧烤,所以找了朋友老王帮忙问询,但老王一直没有回应。那么是老王没有帮忙问询仍是问询之后小姐姐没有回应呢?此刻关于小明而言无法得知的。因而咱们能够用链路追寻检查具体状况,现在 Hertz 也集成了 OpenTelemetry 和 OpenTracing 两种社区中十分干流的链路追寻实践。

3.协议编解码层。经过中间件层后,就能够进入协议编解码层。协议编解码层便是上述例子当中的明文协议,除此之外,还可能会涉及到其他的一些协议。例子中运用了 H1 协议,基于 H1 的不足,现在逐渐出现了 H2、H3 等。

4.传输层。编码完成后即可传输编码后的数据 Server,小姐姐依照对应的流程进行解码就完成了。

5.路由层。比较恳求的流程,小姐姐这边会多一个路由层。小姐姐可能会一起处理多个恳求,针对不同的工作要用不同的优先级和不同的处理方式,这个时候能够经过路由判断针对不同的恳求采用怎样的处理方式。

基于此,咱们的结构需求供给以下方面的支撑:

【Hertz 新手小册】Day 3.   如何用 Hertz 实现 HTTP 请求

  • 事务层,供给丰富好用的 API ,帮助用户更快地去构造出代码。

  • 中间件层,除了 Server 的中间件支撑外,Client 也期望能够支撑中间件,由此 Client 和 Server 的服务办理才能和一些可观测性的才能都会有很大提升。一起中间件能够将通用逻辑和事务逻辑分隔,用户只需求专心于自己的事务逻辑。

  • 路由层,能够供给丰富的路由功能。

  • 协议编解码层,满意多协议的支撑,如 H1、 H2 等等。

  • 传输层,不同的网络库适用的场景不一样,能够灵活地替换网络库。

03 Hertz 三高特性的具体解读

1.Hertz 是一个超大规模的企业级 HTTP 框 架,峰值 QPS 超过了 7 千万,最近这个数字仍在提高。 除了事务在用之外,还有许多其他的基础组件也在用 Hertz ,比方 Mesh 的控制面、压测平台、函数及服务 FaaS 等等,这验证了 Hertz 很强的稳定性。能够应对以下情形:

  • 咱们写代码时,发现了与一期不一致的成果,此刻可能会想是代码出了问题。可是假如发现自己的代码没有问题,反而这个问题来自于结构,这种体会是十分欠好的。
  • 假如用户随意改 API,可能会导致结构不兼容。可是关于 Hertz 这样一个超大规模企业级的结构,包括字节内部也采用了套壳的方式,版本办理就会十分地严格,不会出现很严重的不兼容状况,这是咱们拥有的一些其他结构无法比拟的稳定性优势。

2. 业界领先的吞吐和超低的时延。

  • 重点杰出“超低的时延”是因为现在时延对标的是用户体会。比方抖音 APP,假如一个视频刷了一分钟还没有出现,那用户就会放弃运用。相反时延越低,用户体会会越好。
  • “业界领先的吞吐”没有重点杰出是因为假如存在吞吐差的问题,其实能够经过一些横向水平扩展的、加机器的手法进行处理,这并不是一个瓶颈。可是水平扩展的办法没有办法处理时延问题。

3. Hertz 是一个开箱即用的结构,开箱即用代表 Hertz 的易用性。

  • Hertz 具有稳定性和时延的优越性,那如何让用户运用起来呢?假如结构用起来十分费事,用户仍是难以接受的。下降用户运用结构的成本,才是优先级更高的工作。
  • Hertz 供给了一个一键生成脚手架的工具 Hz,我们能够在 CloudWeGo 官网上找到相关的介绍,源码解读活动第二场直播也会主要对 Hz 的运用做一些实践共享。

4. 高扩展性、高应用性和高性能。

  • 三高是 CloudWeGo 一切项目都具有的一些特点,这里就不再具体展开。
  • 用户在运用中期望能够供给一个大而全的结构,Hertz 也是供给了一些许多默许的实践,比方链路追寻供给了 OpenTracing 和 OpenTelemetry 两套实践,关于许多用户来说现已能够满意其大部分的需求了。假如用户觉得不能够满意他们的某些需求,他们也能够经过结构供给的接口进行注入,这便是高扩展性的表现。

相关信息

官方 GitHub:github.com/cloudwego/h…

官方文档:www.cloudwego.io/zh/docs/her…

项目地址

GitHub:github.com/cloudwego

官网:www.cloudwego.io