#http-proxy #gateway #proxy #http #router

app satex

使用RUST开发的轻量、高性能HTTP网关,基于tokiohypertower构建。

3个版本

0.2.2 2024年1月23日
0.2.1 2024年1月19日
0.1.6 2024年1月18日

#886 in 网络编程

Apache-2.0

120KB
2K SLoC

Satex

使用RUST开发的轻量、高性能HTTP网关,基于tokiohypertower构建。

Build Status Crates.io

特点

  • 纯异步IO实现
  • 丰富的路由组件以及灵活的路由配置
  • 内置服务发现、健康检查以及多种负载均衡策略
  • 完全兼容towertower-http的生态,包括中间件、服务和工具等。

路由

逻辑结构

  • matcher:负责接收并解析进入的HTTP请求。通过精确匹配算法,它能快速地识别出请求的目标路径、方法以及其他相关参数。

  • layer:只有通过matcher匹配的请求才会进入layer 层,主要对请求进行增强或过滤。你可以在这一层添加各种过滤逻辑,例如权限验证、限流、日志记录等。它确保只有满足特定条件的请求能够继续传递。

  • service:负责处理经过layer层筛选的请求。你可以在这一层实现具体的业务逻辑,例如调用后端服务、处理数据等。

内置组件

  • Matcher

    名称 描述 使用文档
    Method 根据请求方法(如GET、POST等)进行匹配 文档
    Query 根据请求的查询参数进行匹配 文档
    Header 根据请求头信息进行匹配 文档
    Host 根据请求的主机名进行匹配 文档
    Path 根据请求路径进行匹配 文档
    RemoteAddr 根据客户端的IP地址进行匹配 文档
    Cookie 根据请求的Cookie进行匹配 文档
    Time 根据请求时间进行匹配 文档
  • Layer

    名称 描述 使用文档
    Cors 处理跨域请求 文档
    KeepHostHeader 保持原始的Host请求头 文档
    PathStrip 从请求路径中删除特定部分 文档
    RateLimit 限制请求频率 文档
    RewritePath 重写请求的接口地址 文档
    SetRequestHeader 设置请求头信息 文档
    SetResponseHeader 设置响应头信息 文档
    XForward 设置XForward信息 文档
    ConcurrentcyLimit 限制同时处理的请求数量 文档
    RequestBodyLimit 限制请求体的最大大小 文档
    SetStatus 设置响应状态码 文档
  • Service

    名称 描述 使用文档
    Echo 简单地返回接收到的请求内容 文档
    Static 提供静态文件服务 文档
    Proxy 反向代理服务,代理请求到另一个服务或地址。 文档
  • Discovery

    名称 描述 使用文档
    Builtin 内置的服务发现,通过配置的方式注册服务集合,内部会定时检测服务节点的可用性。 文档
  • LoadBalance

    名称 描述 使用文档
    IpHash IP哈希负载策略使用客户端的IP地址进行哈希计算,根据哈希值将请求分配给后端服务器。这样可以确保来自同一IP地址的请求始终被发送到同一台服务器,这有助于保持会话和状态信息的持续性。 文档
    Random 随机负载策略随机选择一台服务器将请求发送过去。这种策略简单且易于实现,适用于没有特殊需求的情况。 文档
    Sequential 顺序负载策略按照服务器列表的顺序依次将请求发送过去。这种策略适用于服务器性能基本一致的情况。 文档
    StandBy 备用负载策略在主服务器故障时,将请求切换到备用服务器上。这种策略可以提高系统的可用性和可靠性。 文档
    Weight 权重负载策略根据服务器的性能或权重值来分配请求。权重值高的服务器将获得更多的请求,而权重值低的服务器将获得较少的请求。这种策略可以帮助平衡服务器的负载,提高系统的性能和效率。 文档

配置文件

应用启动配置文件为satex.yaml,具体内容见示例配置

构建和启动

  • 1.构建

    • 安装RUST环境,按照官方文档初始化环境。

      国内可以使用rsproxy镜像加速下载。

    • 使用cargo进行安装,执行命令:cargo install satex即可安装最新版本的satex

    • 或者使用源码进行构建,下载源码到本地,在根目录执行cargo build --release,编译成功后在target/release 目录下可以找到satex

  • 2. 启动

    使用-c指定配置文件satex.yaml的路径

    satex -c exmaples/satex.yaml
    

许可证

本项目采用Apache 2.0许可证

依赖项

~26-37MB
~679K SLoC