ದೂತ. 1. ಪರಿಚಯ

ಶುಭಾಶಯಗಳು! "ರಾಯಭಾರಿ ಎಂದರೇನು?", "ಅದು ಏಕೆ ಬೇಕು?" ಎಂಬ ಪ್ರಶ್ನೆಗಳಿಗೆ ಉತ್ತರಿಸುವ ಒಂದು ಸಣ್ಣ ಲೇಖನ ಇದು. ಮತ್ತು "ಎಲ್ಲಿ ಪ್ರಾರಂಭಿಸಬೇಕು?".

ಇದು ಏನು

ಎನ್ವಾಯ್ ಎನ್ನುವುದು C++ ನಲ್ಲಿ ಬರೆಯಲಾದ L4-L7 ಬ್ಯಾಲೆನ್ಸರ್ ಆಗಿದ್ದು, ಹೆಚ್ಚಿನ ಕಾರ್ಯಕ್ಷಮತೆ ಮತ್ತು ಲಭ್ಯತೆಯ ಮೇಲೆ ಕೇಂದ್ರೀಕೃತವಾಗಿದೆ. ಒಂದೆಡೆ, ಇದು ಕೆಲವು ರೀತಿಯಲ್ಲಿ nginx ಮತ್ತು haproxy ಯ ಅನಲಾಗ್ ಆಗಿದೆ, ಅವರಿಗೆ ಕಾರ್ಯಕ್ಷಮತೆಯಲ್ಲಿ ಹೋಲಿಸಬಹುದು. ಮತ್ತೊಂದೆಡೆ, ಇದು ಮೈಕ್ರೊ ಸರ್ವಿಸ್ ಆರ್ಕಿಟೆಕ್ಚರ್ ಕಡೆಗೆ ಹೆಚ್ಚು ಆಧಾರಿತವಾಗಿದೆ ಮತ್ತು ಜುಲ್ ಅಥವಾ ಟ್ರಾಫಿಕ್‌ನಂತಹ ಜಾವಾ ಮತ್ತು ಗೋ ಬ್ಯಾಲೆನ್ಸರ್‌ಗಳಿಗಿಂತ ಕೆಟ್ಟದ್ದಲ್ಲದ ಕಾರ್ಯವನ್ನು ಹೊಂದಿದೆ.

haproxy/nginx/ರಾಯಭಾರಿಯ ಹೋಲಿಕೆ ಕೋಷ್ಟಕ, ಇದು ಸಂಪೂರ್ಣ ಸತ್ಯವೆಂದು ಹೇಳಿಕೊಳ್ಳುವುದಿಲ್ಲ, ಆದರೆ ಸಾಮಾನ್ಯ ಚಿತ್ರವನ್ನು ನೀಡುತ್ತದೆ.

nginx
ಹ್ಯಾಪ್ರೊಕ್ಸಿ
ರಾಯಭಾರಿ
ಟ್ರಾಫಿಕ್

ಗಿಥಬ್‌ನಲ್ಲಿ ನಕ್ಷತ್ರಗಳು
11.2k/ಕನ್ನಡಿ
1.1k/ಕನ್ನಡಿ
12.4k
27.6k

ನಲ್ಲಿ ಬರೆಯಲಾಗಿದೆ
C
C
ಸಿ ++
go

ಎಪಿಐ
ಯಾವುದೇ
ಸಾಕೆಟ್ ಮಾತ್ರ/ಪುಶ್
ಡೇಟಾಪ್ಲೇನ್/ಪುಲ್
ಎಳೆಯಿರಿ

ಸಕ್ರಿಯ ಆರೋಗ್ಯ ತಪಾಸಣೆ
ಯಾವುದೇ
ಹೌದು
ಹೌದು
ಹೌದು

ಟ್ರೇಸಿಂಗ್ ತೆರೆಯಿರಿ
ಬಾಹ್ಯ ಪ್ಲಗಿನ್
ಯಾವುದೇ
ಹೌದು
ಹೌದು

ಜೆಡಬ್ಲ್ಯೂಟಿ
ಬಾಹ್ಯ ಪ್ಲಗಿನ್
ಯಾವುದೇ
ಹೌದು
ಯಾವುದೇ

ವಿಸ್ತರಣೆ
ಲುವಾ/ಸಿ
ಲುವಾ/ಸಿ
ಲುವಾ/ಸಿ++
ಯಾವುದೇ

ಏಕೆ

ಇದು ಯುವ ಯೋಜನೆಯಾಗಿದೆ, ಬಹಳಷ್ಟು ಸಂಗತಿಗಳು ಕಾಣೆಯಾಗಿವೆ, ಕೆಲವು ಆರಂಭಿಕ ಆಲ್ಫಾದಲ್ಲಿವೆ. ಆದರೆ ರಾಯಭಾರಿ, ಅದರ ಯೌವನದ ಕಾರಣದಿಂದಾಗಿ, ವೇಗವಾಗಿ ಅಭಿವೃದ್ಧಿ ಹೊಂದುತ್ತಿದೆ ಮತ್ತು ಈಗಾಗಲೇ ಅನೇಕ ಆಸಕ್ತಿದಾಯಕ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಹೊಂದಿದೆ: ಡೈನಾಮಿಕ್ ಕಾನ್ಫಿಗರೇಶನ್, ಅನೇಕ ರೆಡಿಮೇಡ್ ಫಿಲ್ಟರ್‌ಗಳು, ನಿಮ್ಮ ಸ್ವಂತ ಫಿಲ್ಟರ್‌ಗಳನ್ನು ಬರೆಯಲು ಸರಳ ಇಂಟರ್ಫೇಸ್.
ಇದರ ಅನ್ವಯದ ಕ್ಷೇತ್ರಗಳು ಅನುಸರಿಸುತ್ತವೆ, ಆದರೆ ಮೊದಲು 2 ಆಂಟಿಪ್ಯಾಟರ್ನ್‌ಗಳಿವೆ:

  • ಸ್ಥಿರ ಹಿಮ್ಮೆಟ್ಟುವಿಕೆ.

ವಾಸ್ತವವೆಂದರೆ ಈ ಕ್ಷಣದಲ್ಲಿ ರಾಯಭಾರಿ ಕ್ಯಾಶಿಂಗ್ ಬೆಂಬಲವಿಲ್ಲ. ಗೂಗಲ್ ವ್ಯಕ್ತಿಗಳು ಇದನ್ನು ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದಾರೆ ಸರಿಪಡಿಸಲು. ಕಲ್ಪನೆಯನ್ನು ಒಮ್ಮೆ ಕಾರ್ಯಗತಗೊಳಿಸಲಾಗುತ್ತದೆ ರಾಯಭಾರಿ RFC ಅನುಸರಣೆಯ ಎಲ್ಲಾ ಸೂಕ್ಷ್ಮತೆಗಳು (ಮೃಗಾಲಯದ ಶಿರೋನಾಮೆಗಳು), ಮತ್ತು ನಿರ್ದಿಷ್ಟ ಅಳವಡಿಕೆಗಳಿಗಾಗಿ ಇಂಟರ್ಫೇಸ್ ಅನ್ನು ಮಾಡಿ. ಆದರೆ ಇದೀಗ ಅದು ಆಲ್ಫಾ ಕೂಡ ಅಲ್ಲ, ವಾಸ್ತುಶಿಲ್ಪವು ಚರ್ಚೆಯಲ್ಲಿದೆ, PR ತೆರೆಯಿರಿ (ನಾನು PR ಲೇಖನವನ್ನು ಬರೆಯುತ್ತಿರುವಾಗ, PR ಸ್ಥಗಿತಗೊಂಡಿತು, ಆದರೆ ಈ ಅಂಶವು ಇನ್ನೂ ಪ್ರಸ್ತುತವಾಗಿದೆ).

ಸದ್ಯಕ್ಕೆ, ಸ್ಟ್ಯಾಟಿಕ್ಸ್‌ಗಾಗಿ nginx ಅನ್ನು ಬಳಸಿ.

  • ಸ್ಥಿರ ಸಂರಚನೆ.

ನೀವು ಅದನ್ನು ಬಳಸಬಹುದು, ಆದರೆ ರಾಯಭಾರಿ ಅದು ಸೃಷ್ಟಿಯಾದದ್ದಲ್ಲ. ಸ್ಥಿರ ಕಾನ್ಫಿಗರೇಶನ್‌ನಲ್ಲಿರುವ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಬಹಿರಂಗಪಡಿಸಲಾಗುವುದಿಲ್ಲ. ಹಲವು ಕ್ಷಣಗಳಿವೆ:

yaml ನಲ್ಲಿ ಸಂರಚನೆಯನ್ನು ಸಂಪಾದಿಸುವಾಗ, ನೀವು ತಪ್ಪಾಗಿ ಗ್ರಹಿಸುತ್ತೀರಿ, ಡೆವಲಪರ್‌ಗಳನ್ನು ಶಬ್ದಾಡಂಬರಕ್ಕಾಗಿ ಬೈಯುತ್ತೀರಿ ಮತ್ತು nginx/haproxy ಸಂರಚನೆಗಳು ಕಡಿಮೆ ರಚನೆಯಾಗಿದ್ದರೂ ಹೆಚ್ಚು ಸಂಕ್ಷಿಪ್ತವಾಗಿವೆ ಎಂದು ಭಾವಿಸುತ್ತೀರಿ. ಅದು ವಿಷಯ. ಕೈಯಿಂದ ಸಂಪಾದಿಸಲು Nginx ಮತ್ತು Haproxy ಸಂರಚನೆಯನ್ನು ರಚಿಸಲಾಗಿದೆ, ಮತ್ತು ರಾಯಭಾರಿ ಕೋಡ್‌ನಿಂದ ಪೀಳಿಗೆಗೆ. ಸಂಪೂರ್ಣ ಸಂರಚನೆಯನ್ನು ವಿವರಿಸಲಾಗಿದೆ ಪ್ರೊಟೊಬುಫ್, ಪ್ರೋಟೋ ಫೈಲ್‌ಗಳಿಂದ ಅದನ್ನು ರಚಿಸುವುದು ತಪ್ಪು ಮಾಡುವುದು ಹೆಚ್ಚು ಕಷ್ಟ.

ಕ್ಯಾನರಿ, ಬಿ/ಜಿ ನಿಯೋಜನೆ ಸನ್ನಿವೇಶಗಳು ಮತ್ತು ಹೆಚ್ಚಿನವುಗಳನ್ನು ಸಾಮಾನ್ಯವಾಗಿ ಡೈನಾಮಿಕ್ ಕಾನ್ಫಿಗರೇಶನ್‌ನಲ್ಲಿ ಮಾತ್ರ ಅಳವಡಿಸಲಾಗಿದೆ. ಇದನ್ನು ಸ್ಥಿರವಾಗಿ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ ಎಂದು ನಾನು ಹೇಳುತ್ತಿಲ್ಲ, ನಾವೆಲ್ಲರೂ ಇದನ್ನು ಮಾಡುತ್ತೇವೆ. ಆದರೆ ಇದಕ್ಕಾಗಿ ನೀವು ಯಾವುದೇ ಬ್ಯಾಲೆನ್ಸರ್‌ಗಳಲ್ಲಿ ಊರುಗೋಲನ್ನು ಹಾಕಬೇಕು ರಾಯಭಾರಿ ಸೇರಿದಂತೆ.

ದೂತರು ಅನಿವಾರ್ಯವಾಗಿರುವ ಕಾರ್ಯಗಳು:

  • ಸಂಕೀರ್ಣ ಮತ್ತು ಕ್ರಿಯಾತ್ಮಕ ವ್ಯವಸ್ಥೆಗಳಲ್ಲಿ ಸಂಚಾರ ಸಮತೋಲನ. ಇದು ಸೇವಾ ಜಾಲರಿಯನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ, ಆದರೆ ಇದು ಒಂದೇ ಅಲ್ಲ.
  • ವಿತರಣೆ ಟ್ರೇಸಿಂಗ್ ಕಾರ್ಯಚಟುವಟಿಕೆ, ಸಂಕೀರ್ಣ ದೃಢೀಕರಣ ಅಥವಾ ಲಭ್ಯವಿರುವ ಇತರ ಕಾರ್ಯಚಟುವಟಿಕೆಗಳ ಅಗತ್ಯತೆ ರಾಯಭಾರಿ ಬಾಕ್ಸ್ ಹೊರಗೆ ಅಥವಾ ಅನುಕೂಲಕರವಾಗಿ ಅಳವಡಿಸಲಾಗಿದೆ, ಆದರೆ nginx/haproxy ನಲ್ಲಿ ನೀವು lua ಮತ್ತು ಸಂಶಯಾಸ್ಪದ ಪ್ಲಗಿನ್‌ಗಳಿಂದ ಸುತ್ತುವರಿದಿರಬೇಕು.

ಎರಡೂ, ಅಗತ್ಯವಿದ್ದರೆ, ಹೆಚ್ಚಿನ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಒದಗಿಸುತ್ತದೆ.

ಹೇಗೆ ಕೆಲಸ ಮಾಡುತ್ತದೆ

ದೂತರನ್ನು ಬೈನರಿಗಳಲ್ಲಿ ಡಾಕರ್ ಚಿತ್ರವಾಗಿ ಮಾತ್ರ ವಿತರಿಸಲಾಗುತ್ತದೆ. ಚಿತ್ರವು ಈಗಾಗಲೇ ಸ್ಥಿರ ಸಂರಚನೆಯ ಉದಾಹರಣೆಯನ್ನು ಹೊಂದಿದೆ. ಆದರೆ ರಚನೆಯನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಮಾತ್ರ ನಾವು ಅದರಲ್ಲಿ ಆಸಕ್ತಿ ಹೊಂದಿದ್ದೇವೆ.

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

ಡೈನಾಮಿಕ್ ಕಾನ್ಫಿಗರೇಶನ್

ನಾವು ಯಾವ ಸಮಸ್ಯೆಗೆ ಪರಿಹಾರವನ್ನು ಹುಡುಕುತ್ತಿದ್ದೇವೆ? ಲೋಡ್ ಅಡಿಯಲ್ಲಿ ನೀವು ಲೋಡ್ ಬ್ಯಾಲೆನ್ಸರ್ ಕಾನ್ಫಿಗರೇಶನ್ ಅನ್ನು ಮರುಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ; "ಸಣ್ಣ" ಸಮಸ್ಯೆಗಳು ಉದ್ಭವಿಸುತ್ತವೆ:

  • ಕಾನ್ಫಿಗರೇಶನ್ ಮೌಲ್ಯೀಕರಣ.

ಸಂರಚನೆಯು ದೊಡ್ಡದಾಗಿರಬಹುದು, ಅದು ತುಂಬಾ ದೊಡ್ಡದಾಗಿರಬಹುದು, ನಾವು ಎಲ್ಲವನ್ನೂ ಒಂದೇ ಬಾರಿಗೆ ಓವರ್ಲೋಡ್ ಮಾಡಿದರೆ, ಎಲ್ಲೋ ದೋಷದ ಸಾಧ್ಯತೆಗಳು ಹೆಚ್ಚಾಗುತ್ತವೆ.

  • ದೀರ್ಘಾವಧಿಯ ಸಂಪರ್ಕಗಳು.

ಹೊಸ ಕೇಳುಗರನ್ನು ಪ್ರಾರಂಭಿಸುವಾಗ, ಹಳೆಯದರಲ್ಲಿ ಚಾಲನೆಯಲ್ಲಿರುವ ಸಂಪರ್ಕಗಳನ್ನು ನೀವು ನೋಡಿಕೊಳ್ಳಬೇಕು; ಬದಲಾವಣೆಗಳು ಆಗಾಗ್ಗೆ ಸಂಭವಿಸಿದಲ್ಲಿ ಮತ್ತು ದೀರ್ಘಾವಧಿಯ ಸಂಪರ್ಕಗಳಿದ್ದರೆ, ನೀವು ರಾಜಿ ಮಾಡಿಕೊಳ್ಳಬೇಕು. ಹಲೋ, nginx ನಲ್ಲಿ ಕುಬರ್ನೆಟ್ಸ್ ಪ್ರವೇಶ.

  • ಸಕ್ರಿಯ ಆರೋಗ್ಯ ತಪಾಸಣೆ.

ನಾವು ಸಕ್ರಿಯ ಆರೋಗ್ಯ ತಪಾಸಣೆಗಳನ್ನು ಹೊಂದಿದ್ದರೆ, ಟ್ರಾಫಿಕ್ ಕಳುಹಿಸುವ ಮೊದಲು ನಾವು ಹೊಸ ಕಾನ್ಫಿಗರ್‌ನಲ್ಲಿ ಅವೆಲ್ಲವನ್ನೂ ಎರಡು ಬಾರಿ ಪರಿಶೀಲಿಸಬೇಕು. ಸಾಕಷ್ಟು ಅಪ್‌ಸ್ಟ್ರೀಮ್‌ಗಳಿದ್ದರೆ, ಇದು ಸಮಯ ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ. ಹಲೋ ಹ್ಯಾಪ್ರಾಕ್ಸಿ.

ಇದನ್ನು ಹೇಗೆ ಪರಿಹರಿಸಲಾಗಿದೆ ರಾಯಭಾರಿಸಂರಚನೆಯನ್ನು ಕ್ರಿಯಾತ್ಮಕವಾಗಿ ಲೋಡ್ ಮಾಡುವ ಮೂಲಕ, ಪೂಲ್ ಮಾದರಿಯ ಪ್ರಕಾರ, ನೀವು ಅದನ್ನು ಪ್ರತ್ಯೇಕ ಭಾಗಗಳಾಗಿ ವಿಂಗಡಿಸಬಹುದು ಮತ್ತು ಬದಲಾಗದ ಭಾಗವನ್ನು ಮರು-ಪ್ರಾರಂಭಿಸಬಾರದು. ಉದಾಹರಣೆಗೆ, ಕೇಳುಗ, ಮರುಪ್ರಾರಂಭಿಸಲು ದುಬಾರಿಯಾಗಿದೆ ಮತ್ತು ಅಪರೂಪವಾಗಿ ಬದಲಾಗುತ್ತದೆ.

ಸಂರಚನೆ ರಾಯಭಾರಿ (ಮೇಲಿನ ಫೈಲ್‌ನಿಂದ) ಈ ಕೆಳಗಿನ ಘಟಕಗಳನ್ನು ಹೊಂದಿದೆ:

  • ಕೇಳುಗ - ಕೇಳುಗನು ನಿರ್ದಿಷ್ಟ ಐಪಿ/ಪೋರ್ಟ್‌ನಲ್ಲಿ ನೇತಾಡುತ್ತಾನೆ
  • ವರ್ಚುವಲ್ ಹೋಸ್ಟ್ - ಡೊಮೇನ್ ಹೆಸರಿನ ಮೂಲಕ ವರ್ಚುವಲ್ ಹೋಸ್ಟ್
  • ಮಾರ್ಗ - ಸಮತೋಲನ ನಿಯಮ
  • ಕ್ಲಸ್ಟರ್ - ಬ್ಯಾಲೆನ್ಸಿಂಗ್ ಪ್ಯಾರಾಮೀಟರ್‌ಗಳೊಂದಿಗೆ ಅಪ್‌ಸ್ಟ್ರೀಮ್‌ಗಳ ಗುಂಪು
  • ಎಂಡ್ ಪಾಯಿಂಟ್ - ಅಪ್‌ಸ್ಟ್ರೀಮ್ ನಿದರ್ಶನ ವಿಳಾಸ

ಈ ಪ್ರತಿಯೊಂದು ಘಟಕಗಳು ಮತ್ತು ಕೆಲವು ಇತರವುಗಳನ್ನು ಕ್ರಿಯಾತ್ಮಕವಾಗಿ ಭರ್ತಿ ಮಾಡಬಹುದು; ಇದಕ್ಕಾಗಿ, ಕಾನ್ಫಿಗರೇಶನ್ ಅನ್ನು ಸ್ವೀಕರಿಸುವ ಸೇವೆಯ ವಿಳಾಸವನ್ನು ಕಾನ್ಫಿಗರೇಶನ್ ನಿರ್ದಿಷ್ಟಪಡಿಸುತ್ತದೆ. ಸೇವೆಯು REST ಅಥವಾ gRPC ಆಗಿರಬಹುದು, gRPC ಆದ್ಯತೆಯಾಗಿದೆ.

ಸೇವೆಗಳನ್ನು ಕ್ರಮವಾಗಿ ಹೆಸರಿಸಲಾಗಿದೆ: LDS, VHDS, RDS, CDS ಮತ್ತು EDS. ನೀವು ಸ್ಥಿರ ಮತ್ತು ಡೈನಾಮಿಕ್ ಕಾನ್ಫಿಗರೇಶನ್ ಅನ್ನು ಸಂಯೋಜಿಸಬಹುದು, ಸ್ಥಿರವಾದ ಸಂಪನ್ಮೂಲದಲ್ಲಿ ಕ್ರಿಯಾತ್ಮಕ ಸಂಪನ್ಮೂಲವನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಲಾಗುವುದಿಲ್ಲ.

ಹೆಚ್ಚಿನ ಕಾರ್ಯಗಳಿಗಾಗಿ, ಕೊನೆಯ ಮೂರು ಸೇವೆಗಳನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲು ಸಾಕು, ಅವುಗಳನ್ನು ADS (ಒಟ್ಟಾರೆ ಡಿಸ್ಕವರಿ ಸೇವೆ) ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ. ಜಾವಾ ಮತ್ತು ಅಲ್ಲಿ ಹೋಗಿ gRPC ಡೇಟಾಪ್ಲೇನ್‌ನ ಸಿದ್ಧ-ಸಿದ್ಧ ಅನುಷ್ಠಾನವಿದೆ, ಇದರಲ್ಲಿ ನೀವು ನಿಮ್ಮ ಮೂಲದಿಂದ ವಸ್ತುಗಳನ್ನು ಭರ್ತಿ ಮಾಡಬೇಕಾಗುತ್ತದೆ.

ಸಂರಚನೆಯು ಈ ಕೆಳಗಿನ ರೂಪವನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ:

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

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ