Skip to content

docs(http3): Azure L7 지원 현황과 AGFC 실측 정리 - #70

Merged
hellices merged 2 commits into
mainfrom
agents/http3-performance-testing-mobile-aks-agfc
Sep 15, 2026
Merged

hellices merged 2 commits into
mainfrom
agents/http3-performance-testing-mobile-aks-agfc

Conversation

@hellices

@hellices hellices commented Sep 15, 2026 •

Copy link
Copy Markdown
Owner

요약

  • HTTP/3 개요와 Application Gateway·AGFC·Front Door·API Management의 공개 지원 정보를 사실 중심으로 정리했습니다.
  • 실제 AKS+AGFC 점검 결과와 로컬 모바일망 모의실험을 분리하고, 상세 테스트 절차는 공개 본문에서 제외했습니다.
  • 비식별화한 AGFC 결과 아티팩트와 재현 가능한 로컬 sample·원시 데이터를 topic package에 보존했습니다.
  • 신규 topic 추가를 막던 고정 문서 수 assertion을 catalog/실제 canonical 경로 검증으로 변경했습니다.

리뷰 시 주의사항

  • 실제 AGFC에서는 정상 HTTPS 리스너·백엔드에서 HTTP/2 7/7 성공, 강제 HTTP/3 0/7 성공(타임아웃)이 관측됐습니다. 타임아웃을 모든 지역·버전의 명시적 미지원 확정으로 확대하지 않습니다.
  • Application Gateway HTTP/3는 문서상 Preview이며 이 제품을 직접 실측하지 않았습니다. Front Door·API Management는 확인한 공식 문서에 HTTP/3 지원이 명시되지 않았다고만 표현합니다.
  • 로컬 성능 수치는 Azure L7·실제 모바일 기기의 성능이 아닙니다. 악화 사례와 fallback 결과도 포함합니다.
  • 공식 원문은 직접 대조했지만 Learn MCP 재검증을 수행할 수 없어 verification_status: needs-review를 유지합니다.
  • 임시 Azure 리소스는 삭제 완료를 확인했습니다. 비밀·실제 리소스 식별자·kubeconfig·실행 중 evidence 및 생성된 site는 포함하지 않습니다.

검증

  • python -m pytest tests/docs -q: 1,882 passed
  • metadata / sources / links / public-safety 검사 통과
  • mkdocs build --strict, search-index 검사, pre-Pages 감사 통과 (62/62 기준선 문서 보존, 현재 67개 문서)
  • sample go test -race -count=1 ./..., go mod verify, gofmt, bash -n run.sh 통과
  • 저장된 결과의 집계를 원시 데이터에서 재계산해 바이트 단위 일치 확인

GitHub Copilot 리뷰를 요청합니다.

HTTP/3 개요와 Azure L7 공개 지원 정보를 실제 AGFC 연결 결과 및 별도 로컬 성능 관측과 구분한다.

재현 가능한 로컬 sample과 비식별화한 실측 근거를 보존하고, 신규 topic을 허용하도록 문서 수 고정 테스트를 catalog 검증으로 바꾼다. 공식 원문 대조와 Learn MCP 재검증 상태를 구분해 needs-review를 유지한다.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Moderate issues remain in origin validation, benchmark setup/control behavior, and catalog-preservation testing.

Get a fresh assessment by requesting another Copilot review.

Pull request overview

Adds Azure HTTP/3 support documentation, sanitized AGFC observations, and a reproducible Dockerized Go benchmark with recorded results.

Changes:

  • Adds the HTTP/3 research topic and taxonomy entries.
  • Adds benchmark implementation, tests, orchestration, and evidence artifacts.
  • Updates documentation catalog validation for dynamically added topics.
File summaries
File Reviewed change
tests/docs/test_topics.py Canonical topic validation; preservation baseline requires follow-up.
tests/docs/test_faceted_discovery.py Catalog-derived discovery counts.
docs/services/azure-application-gateway-for-containers/http3-mobile-performance/samples/mobile-network-bench/transport_test.go Transport integration tests.
docs/services/azure-application-gateway-for-containers/http3-mobile-performance/samples/mobile-network-bench/summary.go Benchmark summaries and percentile calculations.
docs/services/azure-application-gateway-for-containers/http3-mobile-performance/samples/mobile-network-bench/server.go Local HTTP/2 and HTTP/3 server.
docs/services/azure-application-gateway-for-containers/http3-mobile-performance/samples/mobile-network-bench/sample.yml Benchmark sample manifest.
docs/services/azure-application-gateway-for-containers/http3-mobile-performance/samples/mobile-network-bench/run.sh Docker and network orchestration; setup and control behavior require changes.
docs/services/azure-application-gateway-for-containers/http3-mobile-performance/samples/mobile-network-bench/results/2026-09-15/trials.jsonl Raw benchmark trials.
docs/services/azure-application-gateway-for-containers/http3-mobile-performance/samples/mobile-network-bench/results/2026-09-15/summary.json Recorded benchmark summaries.
docs/services/azure-application-gateway-for-containers/http3-mobile-performance/samples/mobile-network-bench/results/2026-09-15/network.json Recorded network evidence.
docs/services/azure-application-gateway-for-containers/http3-mobile-performance/samples/mobile-network-bench/results/2026-09-15/environment.json Run metadata and checksums.
docs/services/azure-application-gateway-for-containers/http3-mobile-performance/samples/mobile-network-bench/README.md Usage and methodology documentation; capability requirements need clarification.
docs/services/azure-application-gateway-for-containers/http3-mobile-performance/samples/mobile-network-bench/payload.go Payload handling and verification.
docs/services/azure-application-gateway-for-containers/http3-mobile-performance/samples/mobile-network-bench/main.go CLI and result validation; origin validation requires changes.
docs/services/azure-application-gateway-for-containers/http3-mobile-performance/samples/mobile-network-bench/go.sum Dependency checksums.
docs/services/azure-application-gateway-for-containers/http3-mobile-performance/samples/mobile-network-bench/go.mod Go module definition.
docs/services/azure-application-gateway-for-containers/http3-mobile-performance/samples/mobile-network-bench/Dockerfile Pinned benchmark image.
docs/services/azure-application-gateway-for-containers/http3-mobile-performance/samples/mobile-network-bench/client.go HTTP/2 and HTTP/3 measurement client.
docs/services/azure-application-gateway-for-containers/http3-mobile-performance/samples/mobile-network-bench/bench_test.go Benchmark unit tests.
docs/services/azure-application-gateway-for-containers/http3-mobile-performance/samples/mobile-network-bench/.dockerignore Docker build-context restrictions.
docs/services/azure-application-gateway-for-containers/http3-mobile-performance/samples/agfc-protocol-check/sample.yml AGFC artifact manifest.
docs/services/azure-application-gateway-for-containers/http3-mobile-performance/samples/agfc-protocol-check/result.json Sanitized AGFC observations.
docs/services/azure-application-gateway-for-containers/http3-mobile-performance/samples/agfc-protocol-check/README.md AGFC artifact scope documentation.
docs/services/azure-application-gateway-for-containers/http3-mobile-performance/index.md HTTP/3 research documentation.
docs-taxonomy.yml Service and source taxonomy entries.
Review details

Suppressed comments (4)

docs/services/azure-application-gateway-for-containers/http3-mobile-performance/samples/mobile-network-bench/main.go:48

  • This validation still accepts origin strings such as https://server:8443? (ForceQuery is true while RawQuery is empty) and https://server:8443/%2F (Path is / while RawPath is non-empty). Because the unnormalized original string is then concatenated with /bytes, these inputs are accepted but every request targets the wrong path/query and the run fails instead of rejecting the invalid origin. Reject ForceQuery and non-empty RawPath (or validate a normalized origin), and add regression cases for both forms.
	if u.Scheme != "https" || u.Hostname() == "" || u.User != nil || u.RawQuery != "" || u.Fragment != "" || (u.Path != "" && u.Path != "/") {

docs/services/azure-application-gateway-for-containers/http3-mobile-performance/samples/mobile-network-bench/run.sh:147

  • The unshaped branch still installs a netem qdisc with limit 10000; the archived network.json records that qdisc as well. This contradicts the documented no-limit/no-added-queue baseline and means these measurements are not a true no-qdisc control; either use noqueue/remove the qdisc and regenerate the recorded dataset, or document and justify the queue limit.
                docker exec "$router" tc qdisc replace dev "$device" root netem limit 10000

docs/services/azure-application-gateway-for-containers/http3-mobile-performance/samples/mobile-network-bench/run.sh:100

  • The client drops CAP_NET_RAW, but the script later invokes ping under set -e. On Docker/Linux hosts that do not permit unprivileged ICMP sockets, this returns Operation not permitted and aborts every profile before measurements. Add NET_RAW to the client or explicitly configure and validate an unprivileged ping socket, then reflect that choice in the sample requirements.
    --cap-drop ALL --cap-add NET_ADMIN --read-only \

tests/docs/test_topics.py:1075

  • This makes the expected set come from the same current services tree that the catalog scans, so deleting an otherwise-unreferenced canonical index.md or whole topic makes both sides shrink and still passes. The old fixed count caught that class of accidental content loss; keep an independent baseline (for example, a maintained manifest/expected path set or another minimum-preservation check) while allowing new topics dynamically.
    assert {document.relative_path for document in catalog.documents} == canonical_paths
    assert len(catalog.documents) == len(canonical_paths)
    assert set(catalog.topics) == {path.parts[1:3] for path in canonical_paths}
  • Files reviewed: 23/25 changed files
  • Comments generated: 1
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

빈 query와 fragment가 있는 URL을 거부하고 origin을 파싱 결과로 구성한다. 클라이언트의 ICMP datagram 소켓 범위를 명시해 NET_RAW 추가 없이 ping 동작을 보장한다.

세 컨테이너의 NET_ADMIN 요구사항과 공통 netem 큐 한도를 설명하고, 문서 수가 유지되어도 독립 기준선 문서 누락을 검출하는 회귀 테스트를 추가한다. 기존 실측 데이터는 변경하지 않는다.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

@my-reviewer-agent my-reviewer-agent Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

검토 범위에서 보고할 이슈가 없습니다.

리뷰 범위: 변경사항 일부만 검토했습니다.

@hellices

Copy link
Copy Markdown
Owner Author

Copilot 리뷰 검토 및 처리 결과

수정 커밋: 4698766

의견 판단 및 처리
NET_ADMIN 대상 컨테이너 수 타당하여 수정했습니다. client·server·forwarding router 3개를 명시했습니다. 해당 인라인 스레드에도 답글을 남겼습니다.
origin URL 검증 빈 ? 및 #가 붙은 URL의 잘못된 수용을 재현하고 거부하도록 수정했습니다. origin은 파싱된 scheme/host로 정규화합니다. 리뷰의 /%2F 예시는 기존에도 거부됐으며, 그 동작도 회귀 테스트로 고정했습니다.
unshaped 기준 환경 qdisc를 제거해 과거 측정값을 다시 쓰지 않고, 모든 프로필에 방향별 netem 10,000-packet 큐 한도가 있음을 명확히 설명했습니다. unshaped는 지연·rate cap·임의 손실을 추가하지 않는다는 뜻이며 no-qdisc/무제한 큐를 뜻하지 않습니다. 공통 큐 구성을 유지하는 이유도 추가했습니다.
ICMP 권한 제한적인 ping socket 설정에서 실제 실패를 재현했습니다. NET_RAW를 더 부여하는 대신 **클라이언트 네트워크 namespace의 ping_group_range=0 0**을 명시했습니다. NET_ADMIN만 있는 동일 컨테이너에서 수정 전 실패·수정 설정 후 성공을 확인했습니다.
독립 문서 보존 기준 취지는 타당하지만 독립 기준은 이미 고정 Git 이력과 62개 문서 pre-Pages inventory로 존재합니다. 새 수동 목록이나 현재 문서 수 상한을 추가하지 않았습니다. 대신 기준선 문서를 삭제하고 무관한 topic으로 대체해 현재 문서 수가 그대로여도 실패하는 회귀 테스트를 추가했습니다.

검증

  • Go race 테스트 통과, URL 입력의 red/green 확인
  • 실제 Docker runner: 3개 네트워크 프로필, 12/12 trial·102/102 요청, ICMP 점검 통과
  • 문서 테스트 1,882개 및 8개 필수 문서 검증 모두 통과
  • 최신 커밋의 Documentation CI 통과
  • 기존 AGFC·로컬 성능 측정 데이터와 체크섬은 변경하지 않았습니다.
  • 검증용 컨테이너·네트워크·인증서 볼륨과 전용 로컬 VM은 정리했습니다.

리뷰 본문에만 있던 추가 의견 4건은 이 코멘트에 처리 근거를 정리했습니다. 별도 인라인 스레드가 없으므로 resolve 대상은 실제 생성된 인라인 스레드 1개입니다.

@hellices
hellices merged commit f45bf9d into main Sep 15, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants