ሰላምታ! ለጥያቄዎቹ መልስ የሚሰጥ አጭር ጽሑፍ ነው፡ “መልእክተኛ ምንድን ነው?”፣ “ለምን አስፈለገ?” እና "የት መጀመር?"
ይሄ ምንድን ነው
መልእክተኛ በከፍተኛ አፈጻጸም እና ተገኝነት ላይ ያተኮረ በC++ የተጻፈ የL4-L7 ሚዛን ነው። በአንድ በኩል፣ ይህ በተወሰነ መልኩ የ nginx እና haproxy አናሎግ ነው፣ በአፈጻጸም ከነሱ ጋር የሚነጻጸር። በሌላ በኩል፣ ወደ ማይክሮ ሰርቪስ አርክቴክቸር የበለጠ ያተኮረ ነው እና ከጃቫ እና ጂኦ ሚዛኖች የባሰ ተግባር የለውም፣ እንደ zuul ወይም traefik።
የሃፕሮክሲ/ nginx/መልእክተኛ የንፅፅር ሠንጠረዥ፣ ፍፁም እውነት ነው አይልም፣ ግን አጠቃላይ እይታን ይሰጣል።
ሲንክስ
ሀፕሮብሪ
ተልኳል
trafik
በ github ላይ ኮከቦች
11.2 ኪ / መስታወት
1.1 ኪ / መስታወት
12.4k
27.6k
ውስጥ ተፃፈ
C
C
በ C ++
go
ኤ ፒ አይ
የለም
ሶኬት ብቻ / ግፋ
የውሂብ አውሮፕላን / ጎትት
ጎትት
ንቁ የጤና ምርመራ
የለም
አዎ
አዎ
አዎ
ፍለጋን ይክፈቱ
ውጫዊ ተሰኪ
የለም
አዎ
አዎ
ጄደብሊውቲ
ውጫዊ ተሰኪ
የለም
አዎ
የለም
ቅጥያ
ሉዋ/ሲ
ሉዋ/ሲ
ሉአ/ሲ++
የለም
ለምን?
ይህ ወጣት ፕሮጀክት ነው, ብዙ ነገሮች ይጎድላሉ, አንዳንዶቹ በመጀመሪያ አልፋ. ግን ተልኳልበወጣትነቱ ምክንያት በፍጥነት እያደገ ነው እና ብዙ አስደሳች ባህሪዎች አሉት ተለዋዋጭ ውቅር ፣ ብዙ ዝግጁ የሆኑ ማጣሪያዎች ፣ የራስዎን ማጣሪያዎች ለመፃፍ ቀላል በይነገጽ።
የትግበራ ቦታዎች ከዚህ ይከተላሉ ፣ ግን በመጀመሪያ 2 ፀረ-ቅጦች አሉ-
- የማይንቀሳቀስ ማገገሚያ።
እውነታው በአሁኑ ጊዜ በ ተልኳል ምንም የመሸጎጫ ድጋፍ የለም. ጎግል ሰዎቹ ይህንን እየሞከሩ ነው።
ለአሁን፣ 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