黑灰产监控与防御&Hertz 设计实践|青训营笔记

79 阅读3分钟

这是我参与「第五届青训营 」笔记创作活动的第9天

Hertz环境安装详细见

image.png

架构设计

Hertz从上到下分为:应用层、路由层、协议层和传输层,每一层各司其职,同时公共能力被统一抽象到公共层(Common)

应用层

应用层是和用户直接交互的一层,提供丰富易用的 API,主要包括 Server、Client 和一些其他通用抽象

Server 提供了注册 HandlerFunc、Binding、Rendering 等能力

Client 提供了调用下游和服务发现等能力,以及抽象一个 HTTP 请求所必须涉及到的请求(Request)、响应(Response)、上下文(RequestContext)、中间件(Middleware)等等

Hertz的Server和Client都能够提供中间件这样的扩展能力

应用层中一个非常重要的抽象就是对 Server HandlerFunc 的抽象

image.png

路由层

路由层负责根据 URI 匹配对应的处理函数。

协议层

传输层

Hz脚手架

Hertz 一并开源的还有一个易用的命令行工具 Hz,用户只需提供一个 IDL,根据定义好的接口信息,Hz 便可以一键生成项目脚手架,让 Hertz 达到开箱即用的状态

尝试之前

IDL 是什么

image.png

Hz 运行的整个流程如下:

  1. 当用户使用了 Hz 命令后,Hz 工具本身会被系统调用,生成一些 Layout 相关代码,比如 Main 函数、Gomod 等文件。同时,Hz 会拼接 Thriftgo 命令调用 Thriftgo 来生成与 IDL 定义相关的代码;
  2. Thriftgo 会解析 IDL 并生成对应的语法树,然后将语法树以及透传给插件的选项一起写入到标准输入中;
  3. 当插件得到了这些语法树以及选项之后,插件会先在标准输入中读取到 Thriftgo 传过来的内容,然后解析语法树,并根据用户在 IDL 中拓展的相关 HTTP 注解来生成目标文件的内容;
  4. 当 thrift-gen-hertz 插件执行完毕后,会通过标准输出的形式将结果返回,Thriftgo 会从中读入插件的执行结果,并生成目标文件;
  5. 将整个流程执行的结果返回给我们的命令行 Hz 工具,命令行工具会将最终的结果呈现给用户。

image.png

一个简单Demo

1.首先定义IDL,这里使用Thrift作为IDL的定义,编写一个名为 Demo 的 service

这个服务有一个 API: Hello,它的请求参数是一个 query,响应是一个包含一个 RespBody 字段的 Json。

虽然语法还没有学(

image.png

2.利用Hz来生成代码,并整理和拉取依赖

命令:

// GOPATH 下执行
hz new -idl idl/hello.thrift

// 整理 & 拉取依赖
go mod tidy

注意这里的命令要以管理员权限来执行,否则会报错并生成hz new的那个pingpong框架

一位大佬的笔记:

[ Go 框架三件套详解 | 青训营笔记 ] - 掘金 (juejin.cn)

image.png

自动生成的代码

image.png

3.修改hander,添加自己的逻辑,如图,一个简单的回复逻辑

image.png

4.编译运行项目

为啥Goland中就会失败呢???

image.png

5.测试

curl http://127.0.0.1:8888/hello?name=cjy

image.png

终于成功了,如图