From 7172f932caaf930fa9393f5a9efd9908038fb0c4 Mon Sep 17 00:00:00 2001 From: Jun Kurihara Date: Tue, 28 Jun 2022 00:58:05 -0400 Subject: [PATCH] add bench docker --- Dockerfile | 8 ++++---- bench/bench.sh | 13 +++++++++++++ bench/docker-compose.yml | 33 ++++++++++++++++++++++++++++++++- bench/rpxy.toml | 17 +++++++++++++++++ config-example.toml | 2 ++ src/config/parse.rs | 9 +++++++-- src/config/toml.rs | 1 + src/constants.rs | 3 ++- 8 files changed, 78 insertions(+), 8 deletions(-) create mode 100644 bench/bench.sh create mode 100644 bench/rpxy.toml diff --git a/Dockerfile b/Dockerfile index ad8fcbc..f16840f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -24,14 +24,14 @@ RUN apt-get update && apt-get install -qy --no-install-recommends $BUILD_DEPS && curl -sSf https://sh.rustup.rs | bash -s -- -y --default-toolchain stable && \ export PATH="$HOME/.cargo/bin:$PATH" && \ echo "Building rpxy from source" && \ - cargo build --release --no-default-features && \ + cargo build --release && \ mkdir -p /opt/rpxy/sbin && \ - mv /tmp/target/release/rpxy /opt/rpxy/sbin/ && \ + mv /tmp/target/release/rust-rpxy /opt/rpxy/sbin/rpxy && \ strip --strip-all /opt/rpxy/sbin/rpxy && \ apt-get -qy purge $BUILD_DEPS && apt-get -qy autoremove && \ rm -fr ~/.cargo ~/.rustup && \ - rm -fr /tmp/* /var/tmp/* /var/cache/apt/* /var/lib/apt/lists/* /var/log/apt/* /var/log/*.log -rm -fr ~/.cargo ~/.rustup && \ + rm -fr /tmp/* /var/tmp/* /var/cache/apt/* /var/lib/apt/lists/* /var/log/apt/* /var/log/*.log &&\ + rm -fr ~/.cargo ~/.rustup && \ rm -fr /tmp/* /var/tmp/* /var/cache/apt/* /var/lib/apt/lists/* /var/log/apt/* /var/log/*.log COPY docker-bin/run.sh / diff --git a/bench/bench.sh b/bench/bench.sh new file mode 100644 index 0000000..ea3449a --- /dev/null +++ b/bench/bench.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +echo "----------------------------" +echo "Benchmark on rpxy" +ab -c 32 -n 10000 http://127.0.0.1:8080/ + +echo "----------------------------" +echo "Benchmark on nginx" +ab -c 32 -n 10000 http://127.0.0.1:8090/ + +echo "----------------------------" +echo "Benchmark on caddy" +ab -c 32 -n 10000 http://127.0.0.1:8100/ diff --git a/bench/docker-compose.yml b/bench/docker-compose.yml index dcc82f5..83067f9 100644 --- a/bench/docker-compose.yml +++ b/bench/docker-compose.yml @@ -15,13 +15,31 @@ services: options: max-size: "10m" max-file: "3" + networks: + bench-nw: + ipv4_address: 192.168.100.100 + + rpxy-rp: + image: jqtype/rpxy + container_name: proxy-rpxy + build: + context: ../ + restart: unless-stopped + ports: + - 127.0.0.1:8080:8080 + tty: false + privileged: true + volumes: + - ./rpxy.toml:/etc/rpxy.toml:ro + networks: + bench-nw: nginx-rp: image: jwilder/nginx-proxy:alpine container_name: proxy-nginx ports: - 127.0.0.1:8090:80 - restart: always + restart: unless-stopped tty: false privileged: true volumes: @@ -30,6 +48,8 @@ services: options: max-size: "10m" max-file: "3" + networks: + bench-nw: caddy-rp: image: caddy:2 @@ -40,3 +60,14 @@ services: tty: false volumes: - ./Caddyfile:/etc/caddy/Caddyfile:ro + networks: + bench-nw: + +networks: + bench-nw: + name: bench-nw + driver: bridge + ipam: + driver: default + config: + - subnet: 192.168.100.0/24 diff --git a/bench/rpxy.toml b/bench/rpxy.toml new file mode 100644 index 0000000..1c075ab --- /dev/null +++ b/bench/rpxy.toml @@ -0,0 +1,17 @@ +listen_port = 8080 +listen_port_tls = 8443 +listen_ipv6 = false + +max_concurrent_streams = 128 +max_clients = 512 + + +[apps] + +[apps.localhost] +server_name = 'localhost' +reverse_proxy = [ + # default destination if path is not specified + # Array for load balancing + { upstream = [{ location = '192.168.100.100', tls = false }] }, +] diff --git a/config-example.toml b/config-example.toml index 18f204b..2465d1f 100644 --- a/config-example.toml +++ b/config-example.toml @@ -13,6 +13,8 @@ listen_port_tls = 8443 max_concurrent_streams = 128 max_clients = 512 +listen_ipv6 = false + ################################### # Backend settings # ################################### diff --git a/src/config/parse.rs b/src/config/parse.rs index af518bd..ee89024 100644 --- a/src/config/parse.rs +++ b/src/config/parse.rs @@ -38,8 +38,13 @@ pub fn parse_opts(globals: &mut Globals, backends: &mut HashMap }, anyhow!("Wrong port spec.") ); - globals.listen_sockets = LISTEN_ADDRESSES - .to_vec() + let mut listen_addresses: Vec<&str> = LISTEN_ADDRESSES_V4.to_vec(); + if let Some(v) = config.listen_ipv6 { + if v { + listen_addresses.extend(LISTEN_ADDRESSES_V6.iter()); + } + } + globals.listen_sockets = listen_addresses .iter() .flat_map(|x| { let mut v: Vec = vec![]; diff --git a/src/config/toml.rs b/src/config/toml.rs index 23853d3..e57916e 100644 --- a/src/config/toml.rs +++ b/src/config/toml.rs @@ -6,6 +6,7 @@ use std::{collections::HashMap, fs}; pub struct ConfigToml { pub listen_port: Option, pub listen_port_tls: Option, + pub listen_ipv6: Option, pub max_concurrent_streams: Option, pub max_clients: Option, pub apps: Option, diff --git a/src/constants.rs b/src/constants.rs index 7e0f419..30a8e48 100644 --- a/src/constants.rs +++ b/src/constants.rs @@ -1,4 +1,5 @@ -pub const LISTEN_ADDRESSES: &[&str] = &["0.0.0.0", "[::]"]; +pub const LISTEN_ADDRESSES_V4: &[&str] = &["0.0.0.0"]; +pub const LISTEN_ADDRESSES_V6: &[&str] = &["[::]"]; // pub const HTTP_LISTEN_PORT: u16 = 8080; // pub const HTTPS_LISTEN_PORT: u16 = 8443; pub const TIMEOUT_SEC: u64 = 10;