Skip to content

Commit

Permalink
feat(eval/latencies): attack presidio during bookinfo attack
Browse files Browse the repository at this point in the history
  • Loading branch information
qlonik committed May 5, 2024
1 parent 8ec667a commit 18a4f9c
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 43 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,13 @@ apiVersion: v1
kind: Service
metadata:
name: presidio
annotations:
metallb.universe.tf/loadBalancerIPs: "${METALLB_PRESIDIO}"
spec:
selector:
app: presidio
type: ClusterIP
type: LoadBalancer
externalTrafficPolicy: Local
ports:
- port: 3000
targetPort: http
Expand Down
1 change: 1 addition & 0 deletions evaluation/kubernetes/flux/vars/cluster-settings.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ data:
METALLB_INGRESS_ADDR: "192.168.49.21"
METALLB_JAEGER_QUERY: "192.168.49.22"
METALLB_OTEL_COLLECTOR: "192.168.49.23"
METALLB_PRESIDIO: "192.168.49.24"

# TODO: replace to real secret domain
SECRET_DOMAIN: "my-example.com"
115 changes: 73 additions & 42 deletions evaluation/scripts/collect-latencies.mts
Original file line number Diff line number Diff line change
Expand Up @@ -12,23 +12,7 @@ const warmup_duration = "10s" satisfies DURATION
const warmup_rate = "100" satisfies RATE

const duration = "10s" satisfies DURATION
const rates = new Set([
"1000",
"800",
"600",
"400",
"200",
"180",
"160",
"140",
"120",
warmup_rate,
"80",
"60",
"40",
"20",
"10",
]) satisfies Iterable<RATE>
const rates = new Set(["60"]) satisfies Iterable<RATE>

const bookinfo_variants = new Set([
"plain",
Expand All @@ -43,15 +27,9 @@ const bookinfo_variants = new Set([
* than one rate value. That is because with one variant, there is some weird
* behavior where each second attack fails for most of the requests.
*/
const test_only = new Set<VARIANT>([
"plain",
"istio",
"passthrough-filter",
"tooling-filter",
"prose-filter",
])
const test_only = new Set<VARIANT>(["prose-filter"])

const TEST_RUNS = 10
const TEST_RUNS = 1

const INGRESS_IP = "192.168.49.21"

Expand Down Expand Up @@ -216,13 +194,30 @@ function generate_metadata({
warmupsFileSuffix: ".warmups.json.zst",
resultsFileSuffix: ".results.json.zst",
summaryFileSuffix: ".summary.json",
presidioWarmupsFileSuffix: ".presidio.warmups.json.zst",
presidioResultsFileSuffix: ".presidio.results.json.zst",
presidioSummaryFileSuffix: ".presidio.summary.json",
req: {
method: "GET",
url: "https://" + INGRESS_IP + "/productpage?u=test",
header: {
Host: [workload_name + ".my-example.com"],
},
},
presidioReq: {
method: "POST",
url: "http://192.168.49.24:3000/batchanalyze",
header: {
"Content-Type": ["application/json"],
},
body: Buffer.from(
JSON.stringify({
json_to_analyze: {
person: "Bob Bobovich Bobovsky",
},
}),
).toString("base64"),
},
warmupOptions: {
duration: warmup_duration,
rate: warmup_rate,
Expand Down Expand Up @@ -297,22 +292,51 @@ async function run_test(
`${test_run_index}${metadata.summaryFileSuffix}`,
)
const presidio_warmups_file = path.join(
test_results_dir,
`${test_run_index}${metadata.presidioWarmupsFileSuffix}`,
)
const presidio_results_file = path.join(
test_results_dir,
`${test_run_index}${metadata.presidioResultsFileSuffix}`,
)
const presidio_summary_file = path.join(
test_results_dir,
`${test_run_index}${metadata.presidioSummaryFileSuffix}`,
)
if (metadata.testMode === "vegeta") {
echo` - Warm-up '${metadata.workloadInfo.variant}' variant`
await $`
echo ${JSON.stringify(metadata.req)} \
| vegeta attack ${vegeta_attack_params(metadata.warmupOptions)} \
| vegeta encode --to json \
| zstd -c -T0 --ultra -20 - >${warmups_file}
`
await Promise.all([
$`
echo ${JSON.stringify(metadata.req)} \
| vegeta attack ${vegeta_attack_params(metadata.warmupOptions)} \
| vegeta encode --to json \
| zstd -c -T0 --ultra -20 - >${warmups_file}
`,
$`
echo ${JSON.stringify(metadata.presidioReq)} \
| vegeta attack ${vegeta_attack_params(metadata.warmupOptions)} \
| vegeta encode --to json \
| zstd -c -T0 --ultra -20 - >${presidio_warmups_file}
`,
])
echo` - Testing '${metadata.workloadInfo.variant}' variant`
await $`
echo ${JSON.stringify(metadata.req)} \
| vegeta attack ${vegeta_attack_params(metadata.testOptions)} \
| vegeta encode --to json \
| zstd -c -T0 --ultra -20 - >${results_file}
`
await Promise.all([
$`
echo ${JSON.stringify(metadata.req)} \
| vegeta attack ${vegeta_attack_params(metadata.testOptions)} \
| vegeta encode --to json \
| zstd -c -T0 --ultra -20 - >${results_file}
`,
$`
echo ${JSON.stringify(metadata.presidioReq)} \
| vegeta attack ${vegeta_attack_params(metadata.testOptions)} \
| vegeta encode --to json \
| zstd -c -T0 --ultra -20 - >${presidio_results_file}
`,
])
} else if (metadata.testMode === "serial") {
const fetch_params = [
metadata.req.url,
Expand Down Expand Up @@ -378,11 +402,18 @@ async function run_test(
}
echo` - Report for '${metadata.workloadInfo.variant}' variant`
await $`
zstd -c -d ${results_file} \
| vegeta report -type json \
| jq -M >${summary_file}
`
await Promise.all([
$`
zstd -c -d ${results_file} \
| vegeta report -type json \
| jq -M >${summary_file}
`,
$`
zstd -c -d ${presidio_results_file} \
| vegeta report -type json \
| jq -M >${presidio_summary_file}
`,
])
echo` - Scaling down deployments for '${metadata.workloadInfo.variant}' variant`
await scale_deployments(metadata.workloadInfo.namespace, 0)
Expand Down

0 comments on commit 18a4f9c

Please sign in to comment.