12 个版本 (4 个重大更改)
0.6.0 | 2024 年 6 月 21 日 |
---|---|
0.5.2 | 2024 年 1 月 16 日 |
0.4.2 | 2024 年 1 月 3 日 |
0.4.1 | 2023 年 12 月 15 日 |
0.2.3 | 2023 年 12 月 1 日 |
#1 在 #闪亮
每月 45 次下载
105KB
2.5K SLoC
faucet 
轻松高效地扩展和部署管道 API 和闪亮应用程序。
摘要
欢迎使用 faucet,它是您部署管道 API 和闪亮应用程序的必备解决方案,速度极快且效率高。Faucet 是一个用 Rust 构建的轻量级服务器,提供轮询和 IP 哈希负载均衡,以实现 R 应用程序的平滑扩展和分布。无论是数据科学家、开发者还是 DevOps 爱好者,Faucet 都可以简化部署过程,使管理副本和有效平衡负载变得前所未有的简单。
特性
-
高性能: faucet 是以速度为核心设计的,利用 Rust 的性能优势确保您的 R 应用程序运行流畅且高效。
-
负载均衡: 在轮询和 IP 哈希负载均衡策略之间进行选择,以在多个实例之间分配传入请求,优化资源利用率。
-
副本: 通过运行多个副本轻松扩展您的管道 API 和闪亮应用程序,从而提高性能和可用性。
-
简化部署: faucet 简化了部署过程,使您的 R 应用程序快速启动变得轻而易举。
-
异步和并发: faucet 利用异步和并发处理,确保资源的最优利用和请求的响应处理。
使用方法
获取帮助
要显示帮助信息,请运行以下命令
faucet --help
启动管道 API
要启动管道 API,您只需指定包含 'plumber.R'
文件的目录。Faucet 将自动检测文件并启动 API。
faucet --dir /path/to/plumber/api
服务器默认将自动监听端口 3838
。要更改主机和端口,请使用 --host
标志指定绑定到服务的套接字地址。
faucet --dir /path/to/plumber/api --host 0.0.0.0:3000
默认情况下,faucet将启动与机器上逻辑核心数量相等的工人。要指定工人数量,请使用--workers
标志。
faucet --dir /path/to/plumber/api --workers 4
启动Shiny应用程序
要启动Shiny应用程序,您只需指定包含'app'.R'
文件的目录。faucet将自动检测文件并启动应用程序。
faucet --dir /path/to/shiny/app
服务器默认将自动监听端口 3838
。要更改主机和端口,请使用 --host
标志指定绑定到服务的套接字地址。
faucet --dir /path/to/shiny/app --host 0.0.0.0:3000
默认情况下,faucet将启动与机器上逻辑核心数量相等的工人。要指定工人数量,请使用--workers
标志。
faucet --dir /path/to/shiny/app --workers 4
注意:在Shiny应用程序中,faucet将强制使用IP哈希负载均衡。这是因为Shiny应用程序需要在客户端和服务器之间建立持久连接。如果使用轮询负载均衡,客户端将在每次请求时被重定向到不同的实例,从而导致连接丢失。
为Plumber API选择负载均衡策略
faucet支持Plumber API的两种负载均衡策略:轮询和IP哈希。默认情况下,faucet将使用轮询负载均衡。要更改策略,请使用--strategy
标志。
faucet --dir /path/to/plumber/api --strategy ip-hash
显式设置应用程序类型
默认情况下,faucet将尝试根据指定目录中的文件检测应用程序类型。如果您想显式设置应用程序类型,请使用--type
标志。
faucet --dir /path/to/plumber/api --type plumber
faucet --dir /path/to/shiny/app --type shiny
与Nginx/反向代理一起使用
如果您想在反向代理后运行多个faucet实例,或者您想启用HTTPS,您可以使用Nginx或任何其他反向代理。但是,为了确保faucet正确检测客户端IP地址,您需要设置X-Forwarded-For
或X-Real-IP
头。
Nginx
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://...;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
...
}
}
此外,在运行faucet时,您需要将-i
/ --ip-from
flat设置为x-forwarded-for
或x-real-ip
,具体取决于您在Nginx中设置的哪个头。
faucet --dir /path/to/plumber/api --ip-from x-forwarded-for
环境变量
每个选项/标志也可以使用环境变量设置,这在例如使用Docker时很有用。
选项/标志 | 环境变量 | 描述 |
---|---|---|
--dir |
FAUCET_DIR |
应用程序的路径 |
--host |
FAUCET_HOST |
绑定服务器的宿主和端口 |
--workers |
FAUCET_WORKERS |
要启动的工人数量 |
--strategy |
FAUCET_STRATEGY |
负载均衡策略 |
--type |
FAUCET_TYPE |
应用程序类型(shiny或plumber) |
--ip-from |
FAUCET_IP_FROM |
获取客户端IP地址的头部或方法 |
--rscript |
FAUCET_RSCRIPT |
Rscript可执行文件的路径 |
安装
选项1:二进制下载(Linux)
从GitHub Releases页面下载Linux的最新faucet版本。这应该适用于大多数Linux发行版。
FAUCET_VERSION="v0.5.2"
wget https://github.com/ixpantia/faucet/releases/download/$FAUCET_VERSION/faucet-x86_64-unknown-linux-musl -O faucet
# Make the binary executable
chmod +x faucet
# Move the binary to a directory in your PATH (e.g., user local bin)
mv faucet ~/.local/bin
选项2:使用Cargo安装(Linux,macOS,Windows)
使用Rust的包管理器Cargo安装faucet。
- 按照此处的说明安装Rust。
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
- 使用Cargo安装faucet。
cargo install faucet-server --version ^0.5
选项3:从源代码构建(Linux,macOS,Windows)
- 按照此处的说明安装Rust。
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
- 克隆faucet存储库。
git clone https://github.com/ixpantia/faucet.git
- 使用Cargo构建faucet。
cargo install --path .
依赖项
~9–19MB
~253K SLoC