Перейти к основному содержимому

Практикум — чтение технической документации

Всем

Как работать с этой главой

Ниже — выдержка из условной официальной документации продукта HelixBridge API Gateway (версия 3.2). Текст написан на английском в том же духе, что и документация Kubernetes, NGINX Ingress, Envoy или gRPC-Gateway: обзор, архитектура, конфигурация, безопасность, наблюдаемость, устранение неполадок.

Задание. Прочитайте английский блок без переводчика (или с переводчиком только для отдельных фраз). Отмечайте незнакомые слова, но не останавливайтесь на каждом. Цель — уловить смысл разделов, связки вроде rate limit → 429 → retry, mTLS → certificate rotation.

После прочтения откройте перевод на русский и сравните: совпали ли ваши выводы с формулировками автора?

Связанные материалы раздела: ключевые термины, аббревиатуры, англицизмы.


HelixBridge API Gateway — Reference Documentation (English)

Document ID: HB-GW-REF-3.2.1
Product: HelixBridge API Gateway
Release: 3.2 (LTS until 2028-06)
Audience: platform engineers, SREs, backend developers
Status: stable


1. Overview

HelixBridge API Gateway is a layer-7 reverse proxy and policy enforcement point that sits between clients and upstream microservices. It terminates TLS, authenticates callers, applies traffic policies, and routes requests based on hostnames, paths, headers, and weighted backend pools.

Unlike a plain load balancer, HelixBridge understands HTTP semantics: it can rewrite URLs, inject correlation identifiers, strip sensitive headers, and emit structured access logs compatible with OpenTelemetry. The control plane pushes configuration to data-plane nodes over a mutually authenticated gRPC stream; configuration changes are applied without dropping established connections when hot_reload is enabled.

Typical deployment patterns include:

  • Edge gateway — public internet traffic enters through HelixBridge before reaching internal clusters.
  • Mesh ingress — each Kubernetes namespace exposes services through a dedicated gateway instance.
  • BFF aggregation — a single external API surface fans out to multiple internal REST or gRPC backends.

The gateway does not execute business logic. It enforces cross-cutting concerns so application teams can assume a consistent security and reliability baseline.


2. Core concepts

Listener — a socket binding (:443, :8443, Unix domain socket) plus TLS settings and default filters.

Route — a rule that matches incoming requests and selects a cluster (upstream group).

Cluster — a logical upstream pool with load-balancing policy, health checks, circuit breaking, and optional outlier detection.

Filter chain — ordered middleware: authentication, rate limiting, body size checks, custom Lua or Wasm plugins.

Virtual host — a hostname-specific container for routes; enables multi-tenant gateways on one IP address.

Control plane — the helixbridge-cp service that stores desired state and streams snapshots to nodes.

Data plane — the helixbridge-dp process that handles live traffic; stateless and horizontally scalable.

Configuration is declarative. Operators describe desired state; the control plane reconciles drift and reports SYNCED, STALE, or FAILED per node.


3. Architecture

At a high level, clients connect to data-plane nodes. Each node maintains an in-memory route table refreshed from the control plane. Upstream connections are pooled per cluster to reduce TLS handshake overhead.

Client ──TLS──► [ helixbridge-dp ] ──mTLS──► [ Service A ]
│ [ Service B ]
└── logs/metrics ──► observability stack

North-south traffic flows from external clients inward. East-west traffic may also traverse HelixBridge when service-to-service calls require centralized policy (for example, mandatory JWT validation between internal teams).

The control plane persists configuration in etcd (default) or PostgreSQL (enterprise). Snapshots are versioned; rollback restores the previous snapshot ID within seconds.

Data-plane nodes elect no leader. Any node can serve any request as long as it has a current snapshot. Stale nodes are removed from DNS or load-balancer pools by the orchestrator when health checks report config_age > max_staleness.


4. Installation and bootstrap

Minimum requirements per data-plane instance:

ResourceMinimumRecommended (production)
CPU2 vCPU4–8 vCPU
Memory2 GiB8 GiB
Disk1 GiB (logs buffer)20 GiB SSD
Network1 Gbps10 Gbps

Install the binary package or Helm chart helixbridge/gateway version 3.2.x. The chart creates a DaemonSet (bare metal) or Deployment (cloud) plus a ClusterIP service for admin endpoints.

Bootstrap sequence:

  1. Deploy helixbridge-cp with persistent storage and admin credentials.
  2. Apply the bootstrap Gateway custom resource with at least one Listener and placeholder route.
  3. Register data-plane nodes with the join token from hbctl cluster join.
  4. Verify hbctl status nodes shows READY and config_version matches the control plane.

Admin API listens on 127.0.0.1:9901 by default. Never expose admin ports to untrusted networks without IP allowlists and separate TLS.


5. Configuration model

Configuration ships as YAML or JSON documents validated by JSON Schema gateway.schema.json. The root object contains listeners, virtual_hosts, clusters, and optional global_plugins.

Example minimal route:

virtual_hosts:
- name: api_public
domains: ["api.example.com"]
routes:
- match:
prefix: "/v1/orders"
route:
cluster: orders_svc
timeout: 15s
retry_policy:
retry_on: "5xx,reset,connect-failure"
num_retries: 2
per_try_timeout: 5s
clusters:
- name: orders_svc
type: STRICT_DNS
connect_timeout: 2s
lb_policy: ROUND_ROBIN
load_assignment:
endpoints:
- address: orders.orders-ns.svc.cluster.local
port: 8080
health_checks:
- timeout: 1s
interval: 5s
unhealthy_threshold: 3
healthy_threshold: 2
http_health_check:
path: "/healthz"

Idempotency keys — when clients send Idempotency-Key, HelixBridge can cache responses for POST routes marked idempotent: true in route metadata. Cache entries expire after idempotency_ttl (default 24 hours). Duplicate keys with different bodies yield 409 Conflict.

Timeouts cascade: route timeout caps end-to-end wait; per-try timeout applies to each retry attempt. Exceeding the route timeout returns 504 Gateway Timeout even if upstream eventually responds.


6. Traffic management

Load balancing supports ROUND_ROBIN, LEAST_REQUEST, RING_HASH (session affinity via header or cookie), and RANDOM.

Circuit breaking tracks concurrent connections, pending requests, and retry budgets per cluster. When thresholds trip, new requests fail fast with 503 Service Unavailable until the breaker half-opens.

Outlier detection ejects unhealthy endpoints after repeated 5xx or elevated latency; ejection duration grows exponentially up to max_ejection_time.

Rate limiting applies token buckets at global, per-route, or per-client scope. Keys derive from API keys, JWT sub, or client IP (/24 for IPv4). Exceeded limits return 429 Too Many Requests with Retry-After when configured.

Traffic splitting sends a percentage of requests to a canary cluster for blue/green or progressive delivery. Weights must sum to 100 per route.


7. Security

TLS termination — listeners reference tls_certificates secrets. Minimum protocol TLS 1.2; TLS 1.3 recommended. Cipher suites follow the MODERN preset unless overridden.

Mutual TLS to upstream — clusters may require client certificates issued by the internal PKI. Rotation is automatic when cert-manager annotations are present on the UpstreamTLS resource.

Authentication filters:

FilterPurpose
jwt_authValidates RS256/ES256 JWT against JWKS; optional audience and issuer checks
api_keyHeader X-Api-Key lookup in control-plane store
oauth2_introspectionRFC 7662 token introspection for opaque tokens
mtls_clientClient certificate required at listener

Failed authentication returns 401 Unauthorized. Missing scopes return 403 Forbidden.

Authorization uses Rego policies (OPA) or built-in RBAC roles bound to JWT claims. Policy evaluation occurs after authentication and before routing.

Sensitive headers (Authorization, cookies) are redacted in access logs when log_sensitive: false (default in production profiles).


8. Observability

Access logs — JSON lines with fields request_id, method, path, status, duration_ms, upstream_cluster, bytes_sent, user_agent. Correlate with application logs via X-Request-Id injection.

Metrics — Prometheus endpoint /metrics on admin port. Key series include hb_requests_total, hb_request_duration_seconds, hb_upstream_cx_active, hb_ratelimit_over_limit.

Distributed tracing — OpenTelemetry exporter (gRPC or HTTP). Sampling rate configured per listener; default head-based 10% in production templates.

Alerts — recommended thresholds:

  • p99 latency > 500 ms for 5 minutes
  • 5xx rate > 1% of traffic
  • any data-plane node STALE > 60 s
  • certificate expiry < 14 days

9. High availability and disaster recovery

Run at least three data-plane instances per availability zone behind an external load balancer. Control plane requires quorum (3 or 5 etcd members).

Configuration snapshots export to object storage on each successful apply. Disaster recovery procedure:

  1. Provision fresh control plane from latest snapshot.
  2. Rejoin data-plane nodes or replace them via Helm upgrade.
  3. Validate routes with synthetic checks (hbctl probe routes).

RPO for configuration is near-zero when etcd replication is healthy. RTO depends on automation; target < 15 minutes for regional failure.


10. Troubleshooting

SymptomLikely causeAction
502 Bad GatewayAll upstream endpoints unhealthyCheck upstream /healthz, network policies, mTLS trust
503 with UF flagCircuit breaker openReduce traffic or fix upstream errors; inspect hb_circuit_open metric
504Route or upstream timeout too lowIncrease timeout or optimize backend
429Rate limitReview quota; distribute clients; check burst settings
Config not updatingNode STALERestart dp pod; verify cp connectivity; check etcd latency
TLS handshake errorsCipher mismatch or expired certhbctl cert list; renew via cert-manager

Enable debug logging with HB_LOG_LEVEL=debug only on single nodes during incidents; verbose logs impact throughput.

Admin command cheat sheet:

hbctl status nodes
hbctl config get --version
hbctl routes test --host api.example.com --path /v1/orders
hbctl drain node gw-az1-02 # graceful shutdown

11. Upgrade notes (3.1 → 3.2)

  • Wasm plugin ABI bumped; rebuild custom plugins against SDK 3.2.0.
  • Default retry_policy no longer retries POST unless route sets retry_on: safe-methods-only.
  • Admin API requires authentication token; set HB_ADMIN_TOKEN before upgrade.
  • Deprecated legacy_ratelimit filter removed; migrate to local_ratelimit or global Redis backend.

Rolling upgrade order: control plane first, then data plane 25% at a time, verify error budget between waves.


12. Glossary (excerpt)

TermDefinition
UpstreamBackend service receiving proxied requests
DownstreamClient connecting to the gateway
SnapshotImmutable configuration version pushed to nodes
EjectionTemporary removal of unhealthy endpoint from pool
BFFBackend-for-frontend pattern aggregating APIs
JWKSJSON Web Key Set for JWT signature verification

13. Performance tuning

Throughput on a single data-plane node depends on TLS profile, filter chain depth, and log volume. For maximum requests per second, terminate TLS on an upstream hardware load balancer and speak plain HTTP to HelixBridge over a private VLAN, or use TLS session tickets with resumption enabled.

Worker threads — set HB_WORKER_THREADS to the number of physical cores. Oversubscribing CPU causes context switching and tail latency spikes. Connection limits — each downstream connection maps to file descriptors; raise ulimit -n above max_connections + upstream_pool_size.

Buffering — large upload bodies stream through the gateway when request_buffering: disabled. Enabling buffering simplifies retry logic but increases memory use. Downloads above 32 MiB should use chunked encoding to avoid OOM on small instances.

Keep-alive — reuse connections to upstream clusters with max_requests_per_connection: 1000 and idle timeout 60s. Disabling keep-alive doubles handshake cost for microservice chatter.

Benchmark with hb-bench before production cutover. Record baseline p50/p95/p99 at expected RPS; repeat after enabling JWT validation or Wasm plugins because cryptographic verification is rarely free.


14. Wasm plugin development

Custom filters compile to wasm32-wasi modules loaded at runtime. The SDK exposes hooks:

  • on_request_headers — mutate or reject before body arrives
  • on_request_body — inspect JSON or protobuf (size-capped)
  • on_response_headers — inject headers, set cookies
  • on_log — emit structured fields to access log pipeline

Plugins run inside a sandbox without filesystem or network unless explicitly granted through PluginCapability declarations. Memory per plugin instance is capped at 16 MiB by default.

Build pipeline example:

cargo build --target wasm32-wasi --release
hbctl plugin publish ./target/wasm32-wasi/release/my_filter.wasm \
--name custom_header_strip --version 1.0.0

Attach to a route via typed_per_filter_config. Misconfigured plugins that panic are isolated; the route returns 500 with header X-Plugin-Error and the node remains healthy.

Version skew between control plane and plugin ABI produces FAILED sync status. Always pin plugin SDK version in CI to the gateway LTS line you deploy.


15. Frequently asked questions

Does HelixBridge replace a service mesh sidecar?
Partially. It centralizes north-south policy. East-west mTLS between every pod may still use mesh sidecars unless you standardize on gateway-mediated internal routes.

Can I run multiple gateways behind the same IP?
Yes. Anycast or ECMP distributes flows; ensure snapshot versions stay aligned across zones to prevent inconsistent policy during rollout.

How do blue/green deployments interact with long-lived connections?
WebSocket and gRPC streams stick to the cluster selected at handshake. Drain nodes with hbctl drain and wait for active_connections == 0 before terminating pods.

Is request body logging supported?
Only when explicitly enabled per route with sampling; default denies logging bodies to meet PCI and GDPR constraints.

What about HTTP/3?
Experimental in 3.2 behind feature flag HB_ENABLE_QUIC. Production use requires UDP exposure and adjusted firewall rules.


16. Document history

VersionDateChanges
3.2.12026-03-01Clarified idempotency cache semantics
3.2.02025-11-15Wasm ABI, admin auth default
3.1.42025-06-02OPA policy hooks stable

Перевод на русский язык

Идентификатор документа: HB-GW-REF-3.2.1
Продукт: HelixBridge API Gateway
Релиз: 3.2 (LTS до 2028-06)
Аудитория: инженеры платформы, SRE, backend-разработчики
Статус: стабильный


1. Обзор

HelixBridge API Gateway — это обратный прокси уровня L7 и точка применения политик между клиентами и вышестоящими микросервисами. Он завершает TLS, аутентифицирует вызывающих сторон, применяет политики трафика и маршрутизирует запросы по имени хоста, путям, заголовкам и взвешенным пулам бэкендов.

В отличие от простого балансировщика нагрузки HelixBridge понимает семантику HTTP: может переписывать URL, внедрять корреляционные идентификаторы, удалять чувствительные заголовки и выдавать структурированные access-логи, совместимые с OpenTelemetry. Плоскость управления доставляет конфигурацию на узлы плоскости данных по взаимно аутентифицированному gRPC-потоку; при включённом hot_reload изменения применяются без разрыва уже установленных соединений.

Типичные схемы развёртывания:

  • Периферийный шлюз — трафик из публичного интернета сначала проходит через HelixBridge, затем попадает во внутренние кластеры.
  • Ingress в mesh — в каждом namespace Kubernetes сервисы публикуются через отдельный экземпляр шлюза.
  • Агрегация BFF — одна внешняя API-поверхность распределяет запросы по нескольким внутренним REST или gRPC бэкендам.

Шлюз не выполняет бизнес-логику. Он обеспечивает сквозные требования, чтобы команды приложений могли рассчитывать на единый базовый уровень безопасности и надёжности.


2. Базовые понятия

Listener (слушатель) — привязка сокета (:443, :8443, Unix domain socket) плюс настройки TLS и фильтры по умолчанию.

Route (маршрут) — правило сопоставления входящих запросов и выбора cluster (группы upstream).

Cluster (кластер) — логический пул upstream с политикой балансировки, health check, circuit breaking и опциональным outlier detection.

Filter chain (цепочка фильтров) — упорядоченные middleware: аутентификация, rate limiting, проверка размера тела, пользовательские плагины Lua или Wasm.

Virtual host — контейнер маршрутов для конкретного имени хоста; позволяет мультитенантный шлюз на одном IP.

Control plane (плоскость управления) — сервис helixbridge-cp, хранящий желаемое состояние и стримящий снимки на узлы.

Data plane (плоскость данных) — процесс helixbridge-dp, обрабатывающий живой трафик; без состояния, масштабируется горизонтально.

Конфигурация декларативна. Операторы описывают желаемое состояние; плоскость управления устраняет расхождения и сообщает по каждому узлу статус SYNCED, STALE или FAILED.


3. Архитектура

На верхнем уровне клиенты подключаются к узлам плоскости данных. Каждый узел держит в памяти таблицу маршрутов, обновляемую из плоскости управления. Соединения к upstream объединяются в пулы по кластерам, чтобы снизить накладные расходы TLS handshake.

Client ──TLS──► [ helixbridge-dp ] ──mTLS──► [ Service A ]
│ [ Service B ]
└── logs/metrics ──► observability stack

Трафик north-south идёт от внешних клиентов внутрь. Трафик east-west тоже может проходить через HelixBridge, когда вызовы между сервисами требуют централизованной политики (например, обязательная проверка JWT между внутренними командами).

Плоскость управления хранит конфигурацию в etcd (по умолчанию) или PostgreSQL (enterprise). Снимки версионируются; откат восстанавливает предыдущий ID снимка за секунды.

Узлы плоскости данных не выбирают лидера. Любой узел обслуживает любой запрос при актуальном снимке. Устаревшие узлы исключаются из DNS или пулов балансировщика оркестратором, когда health check показывает config_age > max_staleness.


4. Установка и начальная настройка

Минимальные требования на экземпляр плоскости данных:

РесурсМинимумРекомендуется (production)
CPU2 vCPU4–8 vCPU
Память2 GiB8 GiB
Диск1 GiB (буфер логов)20 GiB SSD
Сеть1 Gbps10 Gbps

Установите бинарный пакет или Helm-чарт helixbridge/gateway версии 3.2.x. Чарт создаёт DaemonSet (bare metal) или Deployment (облако) и сервис ClusterIP для админ-эндпоинтов.

Последовательность bootstrap:

  1. Разверните helixbridge-cp с постоянным хранилищем и учётными данными администратора.
  2. Примените начальный custom resource Gateway с хотя бы одним Listener и заглушкой маршрута.
  3. Зарегистрируйте узлы плоскости данных токеном из hbctl cluster join.
  4. Убедитесь, что hbctl status nodes показывает READY и config_version совпадает с плоскостью управления.

Admin API по умолчанию слушает 127.0.0.1:9901. Не выставляйте админ-порты в недоверенные сети без allowlist IP и отдельного TLS.


5. Модель конфигурации

Конфигурация поставляется как YAML или JSON с проверкой по JSON Schema gateway.schema.json. Корневой объект содержит listeners, virtual_hosts, clusters и опциональные global_plugins.

Пример минимального маршрута:

virtual_hosts:
- name: api_public
domains: ["api.example.com"]
routes:
- match:
prefix: "/v1/orders"
route:
cluster: orders_svc
timeout: 15s
retry_policy:
retry_on: "5xx,reset,connect-failure"
num_retries: 2
per_try_timeout: 5s
clusters:
- name: orders_svc
type: STRICT_DNS
connect_timeout: 2s
lb_policy: ROUND_ROBIN
load_assignment:
endpoints:
- address: orders.orders-ns.svc.cluster.local
port: 8080
health_checks:
- timeout: 1s
interval: 5s
unhealthy_threshold: 3
healthy_threshold: 2
http_health_check:
path: "/healthz"

Ключи идемпотентности — когда клиенты отправляют Idempotency-Key, HelixBridge может кэшировать ответы для маршрутов POST, помеченных в метаданных idempotent: true. Записи кэша истекают после idempotency_ttl (по умолчанию 24 часа). Повтор ключа с другим телом даёт 409 Conflict.

Таймауты каскадируются: таймаут маршрута ограничивает ожидание end-to-end; per_try_timeout действует на каждую попытку retry. Превышение таймаута маршрута возвращает 504 Gateway Timeout, даже если upstream ответит позже.


6. Управление трафиком

Балансировка поддерживает ROUND_ROBIN, LEAST_REQUEST, RING_HASH (привязка сессии по заголовку или cookie) и RANDOM.

Circuit breaking отслеживает одновременные соединения, ожидающие запросы и бюджеты retry по кластеру. При превышении порогов новые запросы быстро отклоняются с 503 Service Unavailable, пока breaker не перейдёт в half-open.

Outlier detection исключает нездоровые endpoint после повторяющихся 5xx или роста задержки; длительность исключения растёт экспоненциально до max_ejection_time.

Rate limiting применяет token bucket в глобальном масштабе, на маршрут или на клиента. Ключи строятся из API-ключей, JWT sub или IP клиента (/24 для IPv4). При превышении лимита — 429 Too Many Requests с Retry-After, если настроено.

Разделение трафика отправляет процент запросов в canary-кластер для blue/green или постепенной выкладки. Сумма весов по маршруту должна быть 100.


7. Безопасность

Завершение TLS — слушатели ссылаются на секреты tls_certificates. Минимум TLS 1.2; рекомендуется TLS 1.3. Наборы шифров следуют пресету MODERN, если не переопределены.

mTLS к upstream — кластеры могут требовать клиентские сертификаты внутреннего PKI. Ротация автоматическая при аннотациях cert-manager на ресурсе UpstreamTLS.

Фильтры аутентификации:

ФильтрНазначение
jwt_authПроверка JWT RS256/ES256 по JWKS; опционально audience и issuer
api_keyПоиск X-Api-Key в хранилище плоскости управления
oauth2_introspectionИнтроспекция непрозрачных токенов по RFC 7662
mtls_clientКлиентский сертификат обязателен на listener

Ошибка аутентификации — 401 Unauthorized. Недостаточные scope — 403 Forbidden.

Авторизация через политики Rego (OPA) или встроенные роли RBAC, привязанные к claims JWT. Политика выполняется после аутентификации и до маршрутизации.

Чувствительные заголовки (Authorization, cookies) редактируются в access-логах при log_sensitive: false (по умолчанию в production-профилях).


8. Наблюдаемость

Access-логи — строки JSON с полями request_id, method, path, status, duration_ms, upstream_cluster, bytes_sent, user_agent. Сопоставление с логами приложений через внедрение X-Request-Id.

Метрики — эндпоинт Prometheus /metrics на админ-порту. Ключевые серии: hb_requests_total, hb_request_duration_seconds, hb_upstream_cx_active, hb_ratelimit_over_limit.

Распределённая трассировка — экспортёр OpenTelemetry (gRPC или HTTP). Доля сэмплирования настраивается на listener; в production-шаблонах по умолчанию head-based 10%.

Рекомендуемые алерты:

  • p99 задержки > 500 ms в течение 5 минут
  • доля 5xx > 1% трафика
  • любой узел плоскости данных в STALE > 60 с
  • срок действия сертификата < 14 дней

9. Высокая доступность и аварийное восстановление

Запускайте минимум три экземпляра плоскости данных на зону доступности за внешним балансировщиком. Плоскость управления требует кворума (3 или 5 членов etcd).

Снимки конфигурации экспортируются в object storage при каждом успешном apply. Процедура DR:

  1. Развернуть новую плоскость управления из последнего снимка.
  2. Переподключить узлы плоскости данных или заменить их через Helm upgrade.
  3. Проверить маршруты синтетическими проверками (hbctl probe routes).

RPO конфигурации близок к нулю при здоровой репликации etcd. RTO зависит от автоматизации; цель < 15 минут при региональном сбое.


10. Устранение неполадок

СимптомВероятная причинаДействие
502 Bad GatewayВсе upstream endpoint нездоровыПроверить /healthz, network policy, доверие mTLS
503 с флагом UFОткрыт circuit breakerСнизить трафик или исправить ошибки upstream; метрика hb_circuit_open
504Слишком низкий таймаут маршрута или upstreamУвеличить timeout или оптимизировать бэкенд
429Rate limitПроверить квоту; распределить клиентов; настройки burst
Конфиг не обновляетсяУзел STALEПерезапустить pod dp; связь с cp; задержка etcd
Ошибки TLS handshakeНесовпадение шифров или просроченный сертификатhbctl cert list; обновить через cert-manager

Включайте debug-логи HB_LOG_LEVEL=debug только на отдельных узлах во время инцидента; подробные логи снижают пропускную способность.

Шпаргалка команд:

hbctl status nodes
hbctl config get --version
hbctl routes test --host api.example.com --path /v1/orders
hbctl drain node gw-az1-02 # graceful shutdown

11. Заметки об обновлении (3.1 → 3.2)

  • ABI плагинов Wasm обновлён; пересоберите плагины под SDK 3.2.0.
  • Политика retry_policy по умолчанию больше не повторяет POST, если маршрут не задаёт retry_on: safe-methods-only.
  • Admin API требует токен аутентификации; задайте HB_ADMIN_TOKEN до обновления.
  • Удалён устаревший фильтр legacy_ratelimit; мигрируйте на local_ratelimit или глобальный бэкенд Redis.

Порядок rolling upgrade: сначала плоскость управления, затем плоскость данных по 25% за волну, между волнами проверяйте error budget.


12. Глоссарий (фрагмент)

ТерминОпределение
UpstreamБэкенд-сервис, принимающий проксированные запросы
DownstreamКлиент, подключающийся к шлюзу
SnapshotНеизменяемая версия конфигурации, доставляемая на узлы
EjectionВременное исключение нездорового endpoint из пула
BFFПаттерн backend-for-frontend, агрегирующий API
JWKSJSON Web Key Set для проверки подписи JWT

13. Настройка производительности

Пропускная способность одного узла плоскости данных зависит от профиля TLS, глубины цепочки фильтров и объёма логов. Для максимума RPS завершайте TLS на аппаратном балансировщике и передавайте в HelixBridge plain HTTP по приватному VLAN либо включите TLS session tickets с возобновлением сессии.

Рабочие потоки — задайте HB_WORKER_THREADS по числу физических ядер. Перегруз CPU вызывает переключение контекста и всплески хвостовой задержки. Лимиты соединений — каждое downstream-соединение занимает файловый дескриптор; поднимите ulimit -n выше max_connections + upstream_pool_size.

Буферизация — большие тела запросов стримятся через шлюз при request_buffering: disabled. Включённая буферизация упрощает retry, но увеличивает расход памяти. Загрузки больше 32 MiB лучше отдавать chunked encoding, чтобы избежать OOM на малых инстансах.

Keep-alive — переиспользуйте соединения к upstream с max_requests_per_connection: 1000 и idle timeout 60s. Отключение keep-alive удваивает стоимость handshake при частых вызовах микросервисов.

Перед выводом в production измеряйте hb-bench. Зафиксируйте базовые p50/p95/p99 при ожидаемом RPS; повторите после включения JWT или Wasm-плагинов — криптографическая проверка редко бывает бесплатной.


14. Разработка Wasm-плагинов

Пользовательские фильтры компилируются в модули wasm32-wasi и загружаются в runtime. SDK предоставляет хуки:

  • on_request_headers — изменение или отклонение до прихода тела
  • on_request_body — разбор JSON или protobuf (с ограничением размера)
  • on_response_headers — внедрение заголовков, установка cookies
  • on_log — структурированные поля в конвейер access-логов

Плагины работают в песочнице без файловой системы и сети, если не выдано явно через PluginCapability. Память на экземпляр по умолчанию ограничена 16 MiB.

Пример сборки:

cargo build --target wasm32-wasi --release
hbctl plugin publish ./target/wasm32-wasi/release/my_filter.wasm \
--name custom_header_strip --version 1.0.0

Подключение к маршруту — через typed_per_filter_config. Падающий плагин изолируется; маршрут отвечает 500 с заголовком X-Plugin-Error, узел остаётся здоровым.

Расхождение ABI между плоскостью управления и плагином даёт статус синхронизации FAILED. Закрепляйте версию SDK плагина в CI на линии LTS шлюза, которую разворачиваете.


15. Частые вопросы

Заменяет ли HelixBridge sidecar service mesh?
Частично. Он централизует политику north-south. mTLS east-west между каждым pod может по-прежнему требовать sidecar mesh, если вы не стандартизируете внутренние маршруты через шлюз.

Можно ли несколько шлюзов на одном IP?
Да. Anycast или ECMP распределяет потоки; держите версии снимков согласованными между зонами, иначе при выкладке политика будет расходиться.

Как blue/green сочетается с долгими соединениями?
WebSocket и gRPC-потоки остаются на кластере, выбранном при handshake. Сливайте узлы через hbctl drain и ждите active_connections == 0 перед остановкой pod.

Логируется ли тело запроса?
Только при явном включении на маршруте с сэмплированием; по умолчанию тела не пишутся из соображений PCI и GDPR.

Поддерживается ли HTTP/3?
В 3.2 экспериментально под флагом HB_ENABLE_QUIC. Для production нужен UDP и правки firewall.


16. История документа

ВерсияДатаИзменения
3.2.12026-03-01Уточнена семантика кэша идемпотентности
3.2.02025-11-15Wasm ABI, аутентификация admin по умолчанию
3.1.42025-06-02Стабильные хуки политик OPA

Самопроверка после прочтения

Ответьте себе (устно или письменно) на русском или английском:

  1. Чем listener отличается от route и cluster?
  2. Что вернёт шлюз при срабатывании rate limit? А при circuit breaker?
  3. Зачем нужен заголовок Idempotency-Key и когда возможен 409?
  4. В каком порядке обновляют control plane и data plane при релизе 3.2?
  5. Какие три метрики или алерта вы бы настроили первыми в production?

Если на большинство вопросов ответили уверенно — вы прочитали документ на уровне рабочего B1–B2. Неизвестные слова занесите в личный глоссарий или в таблицу терминов.


См. также

См. также

Другие статьи этого же раздела в боковом меню (как на странице "О разделе").