መልእክተኛ 1 መግቢያ

ሰላምታ! ለጥያቄዎቹ መልስ የሚሰጥ አጭር ጽሑፍ ነው፡ “መልእክተኛ ምንድን ነው?”፣ “ለምን አስፈለገ?” እና "የት መጀመር?"

ይሄ ምንድን ነው

መልእክተኛ በከፍተኛ አፈጻጸም እና ተገኝነት ላይ ያተኮረ በC++ የተጻፈ የL4-L7 ሚዛን ነው። በአንድ በኩል፣ ይህ በተወሰነ መልኩ የ nginx እና haproxy አናሎግ ነው፣ በአፈጻጸም ከነሱ ጋር የሚነጻጸር። በሌላ በኩል፣ ወደ ማይክሮ ሰርቪስ አርክቴክቸር የበለጠ ያተኮረ ነው እና ከጃቫ እና ጂኦ ሚዛኖች የባሰ ተግባር የለውም፣ እንደ zuul ወይም traefik።

የሃፕሮክሲ/ nginx/መልእክተኛ የንፅፅር ሠንጠረዥ፣ ፍፁም እውነት ነው አይልም፣ ግን አጠቃላይ እይታን ይሰጣል።

ሲንክስ
ሀፕሮብሪ
ተልኳል
trafik

በ github ላይ ኮከቦች
11.2 ኪ / መስታወት
1.1 ኪ / መስታወት
12.4k
27.6k

ውስጥ ተፃፈ
C
C
በ C ++
go

ኤ ፒ አይ
የለም
ሶኬት ብቻ / ግፋ
የውሂብ አውሮፕላን / ጎትት
ጎትት

ንቁ የጤና ምርመራ
የለም
አዎ
አዎ
አዎ

ፍለጋን ይክፈቱ
ውጫዊ ተሰኪ
የለም
አዎ
አዎ

ጄደብሊውቲ
ውጫዊ ተሰኪ
የለም
አዎ
የለም

ቅጥያ
ሉዋ/ሲ
ሉዋ/ሲ
ሉአ/ሲ++
የለም

ለምን?

ይህ ወጣት ፕሮጀክት ነው, ብዙ ነገሮች ይጎድላሉ, አንዳንዶቹ በመጀመሪያ አልፋ. ግን ተልኳልበወጣትነቱ ምክንያት በፍጥነት እያደገ ነው እና ብዙ አስደሳች ባህሪዎች አሉት ተለዋዋጭ ውቅር ፣ ብዙ ዝግጁ የሆኑ ማጣሪያዎች ፣ የራስዎን ማጣሪያዎች ለመፃፍ ቀላል በይነገጽ።
የትግበራ ቦታዎች ከዚህ ይከተላሉ ፣ ግን በመጀመሪያ 2 ፀረ-ቅጦች አሉ-

  • የማይንቀሳቀስ ማገገሚያ።

እውነታው በአሁኑ ጊዜ በ ተልኳል ምንም የመሸጎጫ ድጋፍ የለም. ጎግል ሰዎቹ ይህንን እየሞከሩ ነው። አስተካክል. ሀሳቡ አንዴ ከገባ በኋላ ተግባራዊ ይሆናል። ተልኳል የ RFC ተገዢነት ሁሉም ስውር ዘዴዎች (አራዊት ራስጌዎች) እና ለተወሰኑ አተገባበርዎች በይነገጽ ይፍጠሩ። አሁን ግን አልፋ አይደለም፣ አርክቴክቸር እየተወያየ ነው፣ PR ክፍት (የPR ጽሑፉን በምጽፍበት ጊዜ PR ቀርቷል፣ ነገር ግን ይህ ነጥብ አሁንም ጠቃሚ ነው)።

ለአሁን፣ nginxን ለስታስቲክስ ይጠቀሙ።

  • የማይንቀሳቀስ ውቅር።

ሊጠቀሙበት ይችላሉ, ግን ተልኳል ለዛ አይደለም የተፈጠረው። በስታቲክ ውቅረት ውስጥ ያሉ ባህሪያት አይጋለጡም። ብዙ አፍታዎች አሉ፡-

በ yaml ውስጥ ያለውን ውቅረት ሲያርትዑ ይሳሳታሉ፣ ገንቢዎቹን በቃላት ይወቅሷቸው እና የ nginx/haproxy ውቅሮች ምንም እንኳን ብዙም የተዋቀሩ ቢሆኑም የበለጠ አጭር ናቸው ብለው ያስባሉ። ዋናው ነገር ይህ ነው። የNginx እና Haproxy ውቅር የተፈጠረው በእጅ ለማረም እና ነው። ተልኳል ከኮድ ለትውልድ. አጠቃላይ ውቅር በ ውስጥ ተገልጿል ፕሮቶቡፍከፕሮቶ ፋይሎች ማመንጨት ስህተት ለመሥራት የበለጠ ከባድ ነው።

ካናሪ፣ b/g የማሰማራት ሁኔታዎች እና ሌሎችም በመደበኛነት የሚተገበሩት በተለዋዋጭ ውቅር ብቻ ነው። ይህ በስታቲስቲክስ ሊከናወን አይችልም እያልኩ አይደለም፣ ሁላችንም እናደርጋለን። ግን ለዚህ ክራንች መልበስ ያስፈልግዎታል ፣ በማንኛውም ሚዛን ፣ ውስጥ ተልኳል ጨምሮ

መልዕክተኛው አስፈላጊ የሆኑባቸው ተግባራት፡-

  • ውስብስብ እና ተለዋዋጭ ስርዓቶች ውስጥ የትራፊክ ሚዛን. ይህ የአገልግሎት መረብን ያካትታል, ግን የግድ ብቸኛው አይደለም.
  • የተከፋፈለ የክትትል ተግባር፣ ውስብስብ ፍቃድ ወይም ሌላ ተግባር ውስጥ የሚገኝ አስፈላጊነት ተልኳል ከሳጥኑ ውጭ ወይም ምቹ በሆነ ሁኔታ ተተግብሯል ፣ ግን በ nginx/haproxy ውስጥ በሉአ እና አጠራጣሪ ተሰኪዎች መከበብ ያስፈልግዎታል።

ሁለቱም, አስፈላጊ ከሆነ, ከፍተኛ አፈፃፀም ይሰጣሉ.

ይህን ሥራ የሚያደርገው እንዴት ነው?

መልእክተኛ በሁለትዮሽ የሚሰራጨው እንደ ዶከር ምስል ብቻ ነው። ምስሉ አስቀድሞ የማይንቀሳቀስ ውቅር ምሳሌ ይዟል። ግን እኛ የምንፈልገው አወቃቀሩን ለመረዳት ብቻ ነው።

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። ተለዋዋጭ እና ተለዋዋጭ ውቅረትን ማጣመር ይችላሉ, ተለዋዋጭ ሀብቶች በስታቲስቲክስ ውስጥ ሊገለጹ የማይችሉበት ገደብ.

ለአብዛኛዎቹ ተግባራት, የመጨረሻዎቹን ሶስት አገልግሎቶች መተግበር በቂ ነው, እነሱም ኤዲኤስ (የተቀናጀ ግኝት አገልግሎት) ይባላሉ, ለ ጃቫ እና ወደዚያ ሂድ ዝግጁ የሆነ የጂአርፒሲ ዳታ አውሮፕላን ትግበራ አለ ይህም በውስጡ ያሉትን ነገሮች ከምንጩ ብቻ መሙላት ያስፈልግዎታል።

አወቃቀሩ የሚከተለውን ቅጽ ይወስዳል።

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 በመቆጣጠሪያ-አውሮፕላኑ እና መካከል ያለውን ትራፊክ እንዲቀንሱ ያስችልዎታል ተልኳል, ይህ ለትልቅ ውቅሮች ተስማሚ ነው. ግን መስተጋብርን ያወሳስበዋል፤ ጥያቄው ከደንበኝነት ምዝገባ ለመውጣት እና ለደንበኝነት ለመመዝገብ የግብአት ዝርዝር ይዟል።

የእኛ ምሳሌ ኤ.ዲ.ኤስን ይጠቀማል - አንድ ዥረት ለRDS፣ CDS፣ EDS እና ላልጨመረ ሁነታ። የመጨመሪያ ሁነታን ለማንቃት, መጥቀስ ያስፈልግዎታል api_type: DELTA_GRPC

ጥያቄው የመስቀለኛ መንገድ መለኪያዎችን ስለሚይዝ ለተለያዩ ሁኔታዎች የተለያዩ መርጃዎችን ወደ መቆጣጠሪያ-አውሮፕላኑ መላክ እንችላለን ተልኳል, ይህ የአገልግሎት መረብን ለመገንባት አመቺ ነው.

መሟሟቅ

ተልኳል ጅምር ላይ ወይም ከቁጥጥር-አውሮፕላኑ አዲስ ውቅረት ሲቀበሉ ፣የሀብት ማሞቂያው ሂደት ተጀምሯል። እሱ ወደ አድማጭ ማሞቂያ እና ክላስተር ማሞቂያ ተከፍሏል። የመጀመሪያው የሚጀመረው በ RDS/LDS ላይ ለውጦች ሲኖሩ፣ ሁለተኛው ደግሞ ሲዲኤስ/ኢዲኤስ ነው። ይህ ማለት የላይኞቹ ዥረቶች ብቻ ከተቀየሩ፣ ሰሚው እንደገና አይፈጠርም ማለት ነው።

በማሞቂያው ሂደት ውስጥ, በጊዜ ማብቂያ ጊዜ ከቁጥጥር-አውሮፕላኑ ጥገኛ ሀብቶች ይጠበቃሉ. ጊዜው ካለፈ, ጅምር ስኬታማ አይሆንም እና አዲሱ አድማጭ በወደቡ ላይ ማዳመጥ አይጀምርም.
የማስጀመሪያ ቅደም ተከተል፡ EDS፣ CDS፣ ንቁ የጤና ፍተሻ፣ RDS፣ LDS ንቁ የጤና ፍተሻዎች ከነቃ፣ ትራፊክ ወደላይ የሚሄደው ከተሳካ የጤና ምርመራ በኋላ ብቻ ነው።

አድማጩ እንደገና ከተፈጠረ፣ አሮጌው ወደ DRAIN ሁኔታ ውስጥ ይገባል እና ሁሉም ግንኙነቶች ከተዘጉ ወይም ጊዜው ካለፈ በኋላ ይሰረዛል --drain-time-s, ነባሪ 10 ደቂቃዎች.

እንዲቀጥል.

ምንጭ: hab.com

አስተያየት ያክሉ