ืฉืึทื’ึฐืจึดื™ืจ. 1. ื”ืงื“ืžื”

ื‘ืจื›ื•ืช! ื–ื”ื• ืžืืžืจ ืงืฆืจ ืฉืขื•ื ื” ืขืœ ื”ืฉืืœื•ืช: "ืžื”ื• ืฉืœื™ื—?", "ืœืžื” ื–ื” ื ื—ื•ืฅ?" ื•"ืžืื™ืคื” ืœื”ืชื—ื™ืœ?".

ืžื” ื–ื”

Envoy ื”ื•ื ืžืื–ืŸ L4-L7 ืฉื ื›ืชื‘ ื‘-C++, ื”ืžืชืžืงื“ ื‘ื‘ื™ืฆื•ืขื™ื ื’ื‘ื•ื”ื™ื ื•ื–ืžื™ื ื•ืช. ืžืฆื“ ืื—ื“, ื–ื” ื‘ื“ืจืš ื›ืœืฉื”ื™ ืื ืœื•ื’ื™ ืฉืœ nginx ื•ื”ืคืจื•ืงืกื™, ื”ื“ื•ืžื” ื‘ื‘ื™ืฆื•ืขื™ื ืืœื™ื”ื. ืžืฆื“ ืฉื ื™, ื”ื•ื ืžื›ื•ื•ืŸ ื™ื•ืชืจ ืœืืจื›ื™ื˜ืงื˜ื•ืจืช ืžื™ืงืจื•-ืฉื™ืจื•ืชื™ื ื•ื™ืฉ ืœื• ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืœื ื’ืจื•ืขื” ื™ื•ืชืจ ืžืžืื–ื ื™ java ื•-go, ื›ื’ื•ืŸ zuul ืื• traefik.

ื˜ื‘ืœืช ื”ืฉื•ื•ืื” ืฉืœ ื”ืืคืจื•ืงืกื™/nginx/ืฉืœื™ื—, ื”ื™ื ืœื ืžืชื™ื™ืžืจืช ืœื”ื™ื•ืช ื”ืืžืช ื”ืžื•ื—ืœื˜ืช, ืื‘ืœ ื ื•ืชื ืช ืชืžื•ื ื” ื›ืœืœื™ืช.

nginx
ื”ืคืจื•ืงืกื™
ืฉืœื—
ื˜ืจืืคื™ืง

ื›ื•ื›ื‘ื™ื ื‘-github
11.2k/ืžืจืื”
1.1k/ืžืจืื”
12.4k
27.6k

ื›ืชื•ื‘ ื‘
C
C
C + +
go

API
ืœื
ืฉืงืข ื‘ืœื‘ื“/ื“ื—ื™ืคื”
ืžื˜ื•ืก ื ืชื•ื ื™ื/ืžืฉื™ื›ื”
ืœืžืฉื•ืš

ื‘ื“ื™ืงืช ื‘ืจื™ืื•ืช ืคืขื™ืœื”
ืœื
ื›ืŸ
ื›ืŸ
ื›ืŸ

ืคืชื— ืžืขืงื‘
ืชื•ืกืฃ ื—ื™ืฆื•ื ื™
ืœื
ื›ืŸ
ื›ืŸ

Jwt
ืชื•ืกืฃ ื—ื™ืฆื•ื ื™
ืœื
ื›ืŸ
ืœื

ื”ืืจื›ื”
Lua/C
Lua/C
Lua/C++
ืœื

ื‘ืฉื‘ื™ืœ ืžื”

ื–ื” ืคืจื•ื™ืงื˜ ืฆืขื™ืจ, ื—ืกืจื™ื ื”ืจื‘ื” ื“ื‘ืจื™ื, ื—ืœืงื ื‘ืืœืคื ื”ืžื•ืงื“ืžืช. ืื‘ืœ ืฉืœื—, ื’ื ื‘ืฉืœ ืฆืขื™ืจื•ืชื•, ืžืชืคืชื—ืช ื‘ืžื”ื™ืจื•ืช ื•ื›ื‘ืจ ื™ืฉ ืœื” ื”ืจื‘ื” ืชื›ื•ื ื•ืช ืžืขื ื™ื™ื ื•ืช: ืชืฆื•ืจื” ื“ื™ื ืžื™ืช, ืžืกื ื ื™ื ืจื‘ื™ื ืžื•ื›ื ื™ื, ืžืžืฉืง ืคืฉื•ื˜ ืœื›ืชื™ื‘ืช ืžืกื ื ื™ื ืžืฉืœืš.
ืžื›ืืŸ ื ื•ื‘ืขื™ื ืชื—ื•ืžื™ ื™ื™ืฉื•ื, ืืš ืจืืฉื™ืช ื™ืฉ 2 ืื ื˜ื™ ื“ืคื•ืกื™ื:

  • ืจืชื™ืขื” ืกื˜ื˜ื™ืช.

ื”ืขื•ื‘ื“ื” ื”ื™ื ืฉื›ืจื’ืข ื‘ ืฉืœื— ืื™ืŸ ืชืžื™ื›ื” ื‘ืžื˜ืžื•ืŸ. ื”ื—ื‘ืจ'ื” ืฉืœ ื’ื•ื’ืœ ืžื ืกื™ื ืืช ื–ื” ืœืชืงืŸ. ื”ืจืขื™ื•ืŸ ื™ื™ื•ืฉื ืคืขื ืื—ืช ืฉืœื— ื›ืœ ื”ื“ืงื•ื™ื•ืช (ื›ื•ืชืจื•ืช ื’ืŸ ื”ื—ื™ื•ืช) ืฉืœ ืชืื™ืžื•ืช RFC, ื•ืขื‘ื•ืจ ื™ื™ืฉื•ืžื™ื ืกืคืฆื™ืคื™ื™ื ืœื™ืฆื•ืจ ืžืžืฉืง. ืื‘ืœ ื‘ื™ื ืชื™ื™ื ื–ื” ืืคื™ืœื• ืœื ืืœืคื, ื”ืืจื›ื™ื˜ืงื˜ื•ืจื” ื ืžืฆืืช ื‘ื“ื™ื•ืŸ, PR ืคืชื•ื— (ื‘ื–ืžืŸ ืฉื›ืชื‘ืชื™ ืืช ืžืืžืจ ื™ื—ืกื™ ื”ืฆื™ื‘ื•ืจ, ื™ื—ืกื™ ื”ืฆื™ื‘ื•ืจ ืงืคืื•, ืื‘ืœ ื”ื ืงื•ื“ื” ื”ื–ื• ืขื“ื™ื™ืŸ ืจืœื•ื•ื ื˜ื™ืช).

ืœืขืช ืขืชื”, ื”ืฉืชืžืฉ ื‘-nginx ืขื‘ื•ืจ ืกื˜ื˜ื™ืงื”.

  • ืชืฆื•ืจื” ืกื˜ื˜ื™ืช.

ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ื–ื”, ืื‘ืœ ืฉืœื— ืœื ื‘ืฉื‘ื™ืœ ื–ื” ื”ื•ื ื ื•ืฆืจ. ืชื›ื•ื ื•ืช ื‘ืชืฆื•ืจื” ืกื˜ื˜ื™ืช ืœื ื™ื™ื—ืฉืคื•. ื™ืฉ ื”ืจื‘ื” ืจื’ืขื™ื:

ื‘ืขืช ืขืจื™ื›ืช ื”ืชืฆื•ืจื” ื‘-yaml, ืืชื” ืชื˜ืขื”, ืชื ื–ื•ืฃ ื‘ืžืคืชื—ื™ื ืขืœ ืžื™ืœื•ืœื™ื•ืช ื•ืชื—ืฉื•ื‘ ืฉืชืฆื•ืจื•ืช nginx/haproxy, ืœืžืจื•ืช ืฉื”ืŸ ืคื—ื•ืช ืžื•ื‘ื ื•ืช, ื”ืŸ ืชืžืฆื™ืชื™ื•ืช ื™ื•ืชืจ. ื–ื• ื”ื ืงื•ื“ื”. ื”ืชืฆื•ืจื” ืฉืœ Nginx ื•-Haproxy ื ื•ืฆืจื” ืœืขืจื™ื›ื” ื‘ื™ื“, ื• ืฉืœื— ืœื”ืคืงื” ืžืงื•ื“. ื›ืœ ื”ืชืฆื•ืจื” ืžืชื•ืืจืช ื‘ ืคืจื•ื˜ื•ื‘ื•ืฃ, ื™ืฆื™ืจืช ืื•ืชื• ืžืงื‘ืฆื™ ืคืจื•ื˜ื• ื”ื™ื ื”ืจื‘ื” ื™ื•ืชืจ ืงืฉื” ืœื˜ืขื•ืช.

ืชืจื—ื™ืฉื™ ืคืจื™ืกื” ืฉืœ Canary, b/g ื•ืขื•ื“ ื”ืจื‘ื” ื™ื•ืชืจ ืžื™ื•ืฉืžื™ื ื‘ื“ืจืš ื›ืœืœ ืจืง ื‘ืชืฆื•ืจื” ื“ื™ื ืžื™ืช. ืื ื™ ืœื ืื•ืžืจ ืฉืื™ ืืคืฉืจ ืœืขืฉื•ืช ืืช ื–ื” ื‘ืื•ืคืŸ ืกื˜ื˜ื™, ื›ื•ืœื ื• ืขื•ืฉื™ื ืืช ื–ื”. ืื‘ืœ ื‘ืฉื‘ื™ืœ ื–ื” ืืชื” ืฆืจื™ืš ืœืฉื™ื ืงื‘ื™ื™ื, ื‘ื›ืœ ืื—ื“ ืžื”ืื™ื–ื•ื ื™ื, ืคื ื™ืžื” ืฉืœื— ื›ื•ืœืœ

ืžืฉื™ืžื•ืช ืฉื”ืฉืœื™ื— ื—ื™ื•ื ื™ ืœื”ืŸ:

  • ืื™ื–ื•ืŸ ืชื ื•ืขื” ื‘ืžืขืจื›ื•ืช ืžื•ืจื›ื‘ื•ืช ื•ื“ื™ื ืžื™ื•ืช. ื–ื” ื›ื•ืœืœ ืืช ืจืฉืช ื”ืฉื™ืจื•ืช, ืื‘ืœ ื”ื™ื ืœื ื‘ื”ื›ืจื— ื”ื™ื—ื™ื“ื”.
  • ื”ืฆื•ืจืš ื‘ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืžืขืงื‘ ืžื‘ื•ื–ืจืช, ื”ืจืฉืื•ืช ืžื•ืจื›ื‘ื•ืช ืื• ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืื—ืจืช ื”ื–ืžื™ื ื” ื‘ ืฉืœื— ืžื—ื•ืฅ ืœืงื•ืคืกื” ืื• ืžื™ื•ืฉื ื‘ืฆื•ืจื” ื ื•ื—ื”, ืื‘ืœ ื‘-nginx/haproxy ืืชื” ืฆืจื™ืš ืœื”ื™ื•ืช ืžื•ืงืฃ ื‘-lua ื•ืชื•ืกืคื™ื ืžืคื•ืงืคืงื™ื.

ืฉื ื™ื”ื, ื‘ืžื™ื“ืช ื”ืฆื•ืจืš, ืžืกืคืงื™ื ื‘ื™ืฆื•ืขื™ื ื’ื‘ื•ื”ื™ื.

ืึตื™ืš ืžึทืคืขึดื™ืœึดื™ื ืึถืช ื–ึถื”

Envoy ืžื•ืคืฅ ื‘ืงื‘ืฆื™ื ื‘ื™ื ืืจื™ื™ื ืจืง ื›ืชืžื•ื ืช docker. ื”ืชืžื•ื ื” ื›ื‘ืจ ืžื›ื™ืœื” ื“ื•ื’ืžื” ืœืชืฆื•ืจื” ืกื˜ื˜ื™ืช. ืื‘ืœ ืื ื—ื ื• ืžืขื•ื ื™ื™ื ื™ื ื‘ื• ืจืง ื‘ืฉื‘ื™ืœ ืœื”ื‘ื™ืŸ ืืช ื”ืžื‘ื ื”.

ืชืฆื•ืจื” ืกื˜ื˜ื™ืช ืฉืœ envoy.yaml

static_resources:
  listeners:
  - name: listener_0
    address:
      socket_address:
        protocol: TCP
        address: 0.0.0.0
        port_value: 10000
    filter_chains:
    - filters:
      - name: envoy.http_connection_manager
        typed_config:
          "@type": type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager
          stat_prefix: ingress_http
          route_config:
            name: local_route
            virtual_hosts:
            - name: local_service
              domains: ["*"]
              routes:
              - match:
                  prefix: "/"
                route:
                  host_rewrite: www.google.com
                  cluster: service_google
          http_filters:
          - name: envoy.router
  clusters:
  - name: service_google
    connect_timeout: 0.25s
    type: LOGICAL_DNS
    # Comment out the following line to test on v6 networks
    dns_lookup_family: V4_ONLY
    lb_policy: ROUND_ROBIN
    load_assignment:
      cluster_name: service_google
      endpoints:
      - lb_endpoints:
        - endpoint:
            address:
              socket_address:
                address: www.google.com
                port_value: 443
    transport_socket:
      name: envoy.transport_sockets.tls
      typed_config:
        "@type": type.googleapis.com/envoy.api.v2.auth.UpstreamTlsContext
        sni: www.google.com

ืชืฆื•ืจื” ื“ื™ื ืžื™ืช

ืœืื™ื–ื• ื‘ืขื™ื” ืื ื—ื ื• ืžื—ืคืฉื™ื ืคืชืจื•ืŸ? ืืชื” ืœื ื™ื›ื•ืœ ืคืฉื•ื˜ ืœื˜ืขื•ืŸ ืžื—ื“ืฉ ืืช ืชืฆื•ืจืช ืžืื–ืŸ ื”ืขื•ืžืก ืชื—ืช ืขื•ืžืก; ื‘ืขื™ื•ืช "ืงื˜ื ื•ืช" ื™ืชืขื•ืจืจื•:

  • ืื™ืžื•ืช ืชืฆื•ืจื”.

ื”ืชืฆื•ืจื” ื™ื›ื•ืœื” ืœื”ื™ื•ืช ื’ื“ื•ืœื”, ื”ื™ื ื™ื›ื•ืœื” ืœื”ื™ื•ืช ื’ื“ื•ืœื” ืžืื•ื“, ืื ื ืขืžื™ืก ืขืœ ื”ื›ืœ ื‘ื‘ืช ืื—ืช, ื”ืกื™ื›ื•ื™ ืœื˜ืขื•ืช ืื™ืคืฉื”ื• ื’ื“ืœ.

  • ืงืฉืจื™ื ืืจื•ื›ื™ื.

ื‘ืขืช ืืชื—ื•ืœ ืžืื–ื™ืŸ ื—ื“ืฉ, ืืชื” ืฆืจื™ืš ืœื“ืื•ื’ ืœื—ื™ื‘ื•ืจื™ื ื”ืคื•ืขืœื™ื ืขืœ ื”ื™ืฉืŸ; ืื ืžืชืจื—ืฉื™ื ืฉื™ื ื•ื™ื™ื ืœืขืชื™ื ืงืจื•ื‘ื•ืช ื•ื™ืฉ ื—ื™ื‘ื•ืจื™ื ืืจื•ื›ื™ื, ืชืฆื˜ืจืš ืœื—ืคืฉ ืคืฉืจื”. ืฉืœื•ื, ื›ื ื™ืกืช kubernetes ืœ-nginx.

  • ื‘ื“ื™ืงื•ืช ื‘ืจื™ืื•ืช ืืงื˜ื™ื‘ื™ื•ืช.

ืื ื™ืฉ ืœื ื• ื‘ื“ื™ืงื•ืช ืชืงื™ื ื•ืช ืืงื˜ื™ื‘ื™ื•ืช, ืขืœื™ื ื• ืœื‘ื“ื•ืง ืืช ื›ื•ืœื ื‘ืชืฆื•ืจื” ื”ื—ื“ืฉื” ืœืคื ื™ ืฉืœื™ื—ืช ืชืขื‘ื•ืจื”. ืื ื™ืฉ ื”ืจื‘ื” ื–ืจืžื™ื, ื–ื” ืœื•ืงื— ื–ืžืŸ. ืฉืœื•ื ืคืจื•ืงืกื™.

ืื™ืš ื–ื” ื ืคืชืจ ื‘ ืฉืœื—ืขืœ ื™ื“ื™ ื˜ืขื™ื ืช ื”ืชืฆื•ืจื” ื‘ืื•ืคืŸ ื“ื™ื ืžื™, ืœืคื™ ืžื•ื“ืœ ื”ื‘ืจื™ื›ื”, ื ื™ืชืŸ ืœื—ืœืง ืื•ืชื” ืœื—ืœืงื™ื ื ืคืจื“ื™ื ื•ืœื ืœืืชื—ืœ ืžื—ื“ืฉ ืืช ื”ื—ืœืง ืฉืœื ื”ืฉืชื ื”. ืœืžืฉืœ, ืžืื–ื™ืŸ, ืฉื™ืงืจ ืœืืชื—ืœ ืžื—ื“ืฉ ื•ืœืขื™ืชื™ื ืจื—ื•ืงื•ืช ืžืฉืชื ื”.

ืชึฐืฆื•ึผืจึธื” ืฉืœื— (ืžื”ืงื•ื‘ืฅ ืœืžืขืœื”) ื™ืฉ ืืช ื”ื™ืฉื•ื™ื•ืช ื”ื‘ืื•ืช:

  • ืžืื–ื™ืŸ - ืžืื–ื™ืŸ ืชืœื•ื™ ื‘-ip/ื™ืฆื™ืื” ืกืคืฆื™ืคื™ื™ื
  • ืžืืจื— ื•ื™ืจื˜ื•ืืœื™ - - - ืžืืจื— ื•ื™ืจื˜ื•ืืœื™ ืœืคื™ ืฉื ื“ื•ืžื™ื™ืŸ
  • ืžึทืกืœื•ึผืœ - ื›ืœืœ ืื™ื–ื•ืŸ
  • ืืฉื›ื•ืœ - ืงื‘ื•ืฆื” ืฉืœ ืขืœื™ื•ืช ืขื ืคืจืžื˜ืจื™ ืื™ื–ื•ืŸ
  • ื ืงื•ื“ืช ืกื™ื•ื - ื›ืชื•ื‘ืช ืžื•ืคืข ื‘ืžืขืœื” ื”ื–ืจื

ื ื™ืชืŸ ืœืžืœื ื›ืœ ืื—ืช ืžื”ื™ืฉื•ื™ื•ืช ื”ืœืœื• ื•ืขื•ื“ ื›ืžื” ืื—ืจื•ืช ื‘ืื•ืคืŸ ื“ื™ื ืžื™; ืœืฉื ื›ืš, ื”ืชืฆื•ืจื” ืžืฆื™ื™ื ืช ืืช ื”ื›ืชื•ื‘ืช ืฉืœ ื”ืฉื™ืจื•ืช ืฉืžืžื ื• ืชืชืงื‘ืœ ื”ืชืฆื•ืจื”. ื”ืฉื™ืจื•ืช ื™ื›ื•ืœ ืœื”ื™ื•ืช REST ืื• gRPC, ืขื“ื™ืฃ gRPC.

ื”ืฉื™ืจื•ืชื™ื ื ืงืจืื™ื ื‘ื”ืชืืžื”: LDS, VHDS, RDS, CDS ื•-EDS. ืืชื” ื™ื›ื•ืœ ืœืฉืœื‘ ืชืฆื•ืจื” ืกื˜ื˜ื™ืช ื•ื“ื™ื ืžื™ืช, ืขื ื”ืžื’ื‘ืœื” ืฉืœื ื ื™ืชืŸ ืœืฆื™ื™ืŸ ืžืฉืื‘ ื“ื™ื ืžื™ ื‘ืชืฆื•ืจื” ืกื˜ื˜ื™ืช.

ืขื‘ื•ืจ ืจื•ื‘ ื”ืžืฉื™ืžื•ืช, ืžืกืคื™ืง ืœื™ื™ืฉื ืืช ืฉืœื•ืฉืช ื”ืฉื™ืจื•ืชื™ื ื”ืื—ืจื•ื ื™ื, ื”ื ื ืงืจืื™ื ADS (ืฉื™ืจื•ืช ื’ื™ืœื•ื™ ืžืฆื˜ื‘ืจ), ืขื‘ื•ืจ ืชืื•ื•ื” ื•ืขื‘ื•ืจ ืœืฉื ื™ืฉ ื™ื™ืฉื•ื ืžื•ื›ืŸ ืฉืœ gRPC dataplane ืฉื‘ื• ืืชื” ืจืง ืฆืจื™ืš ืœืžืœื ืืช ื”ืื•ื‘ื™ื™ืงื˜ื™ื ืžื”ืžืงื•ืจ ืฉืœืš.

ื”ืชืฆื•ืจื” ืœื•ื‘ืฉืช ืืช ื”ืฆื•ืจื” ื”ื‘ืื”:

ืชืฆื•ืจื” ื“ื™ื ืžื™ืช ืฉืœ envoy.yaml

dynamic_resources:
  ads_config:
    api_type: GRPC
    grpc_services:
      envoy_grpc:
        cluster_name: xds_clr
  cds_config:
    ads: {}
static_resources:
  listeners:
  - name: listener_0
    address:
      socket_address:
        protocol: TCP
        address: 0.0.0.0
        port_value: 10000
    filter_chains:
    - filters:
      - name: envoy.http_connection_manager
        typed_config:
          "@type": type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager
          stat_prefix: ingress_http
          rds:
            route_config_name: local_route
            config_source:
              ads: {}
          http_filters:
          - name: envoy.router
  clusters:
  - name: xds_clr
    connect_timeout: 0.25s
    type: LOGICAL_DNS
    dns_lookup_family: V4_ONLY
    lb_policy: ROUND_ROBIN
    load_assignment:
      cluster_name: xds_clr
      endpoints:
      - lb_endpoints:
        - endpoint:
            address:
              socket_address:
                address: xds
                port_value: 6565

ื›ืฉืืชื” ืจืฅ ืฉืœื— ืขื ื”ืชืฆื•ืจื” ื”ื–ื•, ื”ื•ื ื™ืชื—ื‘ืจ ืœืžื™ืฉื•ืจ ื”ื‘ืงืจื” ื•ื™ื ืกื” ืœื‘ืงืฉ ืืช ืชืฆื•ืจืช RDS, CDS ื•-EDS. ืžืชื•ืืจ ื›ื™ืฆื“ ืชื”ืœื™ืš ื”ืื™ื ื˜ืจืืงืฆื™ื” ืžืชืจื—ืฉ ื›ืืŸ.

ื‘ืงืฆืจื”, ืฉืœื— ืฉื•ืœื— ื‘ืงืฉื” ื”ืžืฆื™ื™ื ืช ืืช ืกื•ื’ ื”ืžืฉืื‘ ื”ืžื‘ื•ืงืฉ, ื”ื’ืจืกื” ื•ื”ืคืจืžื˜ืจื™ื ืฉืœ ื”ืฆื•ืžืช. ื‘ืชื’ื•ื‘ื”, ื”ื•ื ืžืงื‘ืœ ืžืฉืื‘ ื•ื’ืจืกื”; ืื ื”ื’ืจืกื” ื‘ืžื™ืฉื•ืจ ื”ื‘ืงืจื” ืœื ื”ืฉืชื ืชื”, ื”ื™ื ืœื ืžื’ื™ื‘ื”.
ื™ืฉื ืŸ 4 ืืคืฉืจื•ื™ื•ืช ืื™ื ื˜ืจืืงืฆื™ื”:

  • ื–ืจื gRPC ืื—ื“ ืขื‘ื•ืจ ื›ืœ ืกื•ื’ื™ ื”ืžืฉืื‘ื™ื, ื”ืกื˜ื˜ื•ืก ื”ืžืœื ืฉืœ ื”ืžืฉืื‘ ื ืฉืœื—.
  • ื ื—ืœื™ื ื ืคืจื“ื™ื, ืžืฆื‘ ืžืœื.
  • ื–ืจื ืื—ื“, ืžืฆื‘ ืžืฆื˜ื‘ืจ.
  • ื–ืจืžื™ื ื ืคืจื“ื™ื, ืžืฆื‘ ืžืฆื˜ื‘ืจ.

xDS ืžืฆื˜ื‘ืจ ืžืืคืฉืจ ืœืš ืœื”ืคื—ื™ืช ืืช ื”ืชืขื‘ื•ืจื” ื‘ื™ืŸ ืžื˜ื•ืก ื”ื‘ืงืจื” ืœื‘ื™ืŸ ืฉืœื—, ื–ื” ืจืœื•ื•ื ื˜ื™ ืขื‘ื•ืจ ืชืฆื•ืจื•ืช ื’ื“ื•ืœื•ืช. ืื‘ืœ ื–ื” ืžืกื‘ืš ืืช ื”ืื™ื ื˜ืจืืงืฆื™ื”; ื”ื‘ืงืฉื” ืžื›ื™ืœื” ืจืฉื™ืžื” ืฉืœ ืžืฉืื‘ื™ื ืœื‘ื™ื˜ื•ืœ ื”ืจืฉืžื” ื•ื”ืจืฉืžื”.

ื”ื“ื•ื’ืžื” ืฉืœื ื• ืžืฉืชืžืฉืช ื‘-ADS - ื–ืจื ืื—ื“ ืขื‘ื•ืจ RDS, CDS, EDS ื•ืžืฆื‘ ืœื ืžืฆื˜ื‘ืจ. ื›ื“ื™ ืœื”ืคืขื™ืœ ืžืฆื‘ ืื™ื ืงืจืžื ื˜ืœื™, ืขืœื™ืš ืœืฆื™ื™ืŸ api_type: DELTA_GRPC

ืžื›ื™ื•ื•ืŸ ืฉื”ื‘ืงืฉื” ืžื›ื™ืœื” ืคืจืžื˜ืจื™ื ืฉืœ ืฆื•ืžืช, ืื ื• ื™ื›ื•ืœื™ื ืœืฉืœื•ื— ืžืฉืื‘ื™ื ืฉื•ื ื™ื ืœืžื™ืฉื•ืจ ื”ื‘ืงืจื” ืขื‘ื•ืจ ืžืงืจื™ื ืฉื•ื ื™ื ืฉืœื—, ื–ื” ื ื•ื— ืœื‘ื ื™ื™ืช ืจืฉืช ืฉื™ืจื•ืช.

ื—ื™ืžื•ื

ืขืœ ืฉืœื— ื‘ืขืช ื”ืืชื—ื•ืœ ืื• ื‘ืขืช ืงื‘ืœืช ืชืฆื•ืจื” ื—ื“ืฉื” ืžืžื˜ื•ืก ื‘ืงืจื”, ืชื”ืœื™ืš ื—ื™ืžื•ื ื”ืžืฉืื‘ ื™ื•ืฆื ืœื“ืจืš. ื–ื” ืžื—ื•ืœืง ืœื—ื™ืžื•ื ืžืื–ื™ื ื™ื ื•ื—ื™ืžื•ื ืืฉื›ื•ืœ. ื”ืจืืฉื•ืŸ ืžื•ืคืขืœ ื›ืืฉืจ ื™ืฉ ืฉื™ื ื•ื™ื™ื ื‘-RDS/LDS, ื”ืฉื ื™ ื›ืืฉืจ CDS/EDS. ืžืฉืžืขื•ืช ื”ื“ื‘ืจ ื”ื™ื ืฉืื ืจืง ื‘ืžืขืœื” ื”ื–ืจืžื™ื ืžืฉืชื ื™ื, ื”ืžืื–ื™ืŸ ืœื ื ื•ืฆืจ ืžื—ื“ืฉ.

ื‘ืžื”ืœืš ืชื”ืœื™ืš ื”ื—ื™ืžื•ื ืฆืคื•ื™ื™ื ืžืฉืื‘ื™ื ืชืœื•ื™ื™ื ืžืžื™ืฉื•ืจ ื”ื‘ืงืจื” ื‘ืžื”ืœืš ื”ื–ืžืŸ ื”ืงืฆื•ื‘. ืื ืคืกืง ื”ื–ืžืŸ ืžืชืจื—ืฉ, ื”ืืชื—ื•ืœ ืœื ื™ืฆืœื™ื— ื•ื”ืžืื–ื™ืŸ ื”ื—ื“ืฉ ืœื ื™ืชื—ื™ืœ ืœื”ืื–ื™ืŸ ื‘ื™ืฆื™ืื”.
ืกื“ืจ ืืชื—ื•ืœ: EDS, CDS, ื‘ื“ื™ืงืช ื‘ืจื™ืื•ืช ืคืขื™ืœื”, RDS, LDS. ื›ืืฉืจ ื‘ื“ื™ืงื•ืช ืชืงื™ื ื•ืช ืคืขื™ืœื•ืช ืžื•ืคืขืœื•ืช, ื”ืชืขื‘ื•ืจื” ืชืขื‘ื•ืจ ื‘ืžืขืœื” ื”ื–ืจื ืจืง ืœืื—ืจ ื‘ื“ื™ืงืช ืชืงื™ื ื•ืช ืžื•ืฆืœื—ืช ืื—ืช.

ืื ื”ืžืื–ื™ืŸ ื ื•ืฆืจ ืžื—ื“ืฉ, ื”ื™ืฉืŸ ืขื•ื‘ืจ ืœืžืฆื‘ DRAIN ื•ื™ื™ืžื—ืง ืœืื—ืจ ืกื’ื™ืจืช ื›ืœ ื”ื—ื™ื‘ื•ืจื™ื ืื• ืคื’ ืชื•ืงืฃ ื”ื–ืžืŸ ื”ืงืฆื•ื‘ --drain-time-s, ื‘ืจื™ืจืช ืžื—ื“ืœ 10 ื“ืงื•ืช.

ื”ืžืฉืš.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”