Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÁÄÁÄServiceMesh Êý¾ÝÃæ°å Envoy
 
×÷ÕߣºADDOPSÍŶӻôÃ÷Ã÷
  3004  次浏览      27
 2019-11-11
   
 
±à¼­ÍƼö:
ÎÄÕ½éÉÜÁËEnvoy ¶¼ÊÇ×öЩʲô¹¤×÷,Ó¦ÓóÌÐòÈçºÎÓë Envoy ½áºÏÀ´Ê¹Óõġ¢ÇëÇóÊÇÈçºÎתµ½ Envoy µÄµÈµÈ¡£
±¾ÎÄÀ´×ÔÓÚHULKÒ»Ïß¼¼ÊõÔÓ̸ £¬ÓÉ»ðÁú¹ûÈí¼þAlice±à¼­¡¢ÍƼö¡£

Envoy ¼ò½é

ÔÚ Service Mesh ģʽÖУ¬Ã¿¸ö·þÎñ¶¼Å䱸ÁËÒ»¸ö´úÀí¡°sidecar¡±£¬ÓÃÓÚ·þÎñÖ®¼äµÄͨÐÅ¡£ÕâЩ´úÀíͨ³£ÓëÓ¦ÓóÌÐò´úÂëÒ»Æð²¿Ê𣬲¢ÇÒËü²»»á±»Ó¦ÓóÌÐòËù¸ÐÖª¡£Service Mesh ½«ÕâЩ´úÀí×éÖ¯ÆðÀ´ÐγÉÁËÒ»¸öÇáÁ¿¼¶ÍøÂç´úÀí¾ØÕó£¬Ò²¾ÍÊÇ·þÎñÍø¸ñ¡£ÕâЩ´úÀí²»ÔÙÊǹÂÁ¢µÄ×é¼þ£¬ËüÃDZ¾ÉíÊÇÒ»¸öÓмÛÖµµÄÍøÂç¡£Æä²¿ÊðģʽÈçͼËùʾ£º

ÂÌÉ«²¿·Ö´ú±íÓ¦ÓóÌÐò

À¶É«²¿·ÖÔòÊÇsidecar

·þÎñÍø¸ñÊÇÓÃÓÚ´¦Àí·þÎñµ½·þÎñͨÐŵġ°×¨Óûù´¡ÉèÊ©²ã¡±¡£Ëüͨ¹ýÕâЩ´úÀíÀ´¹ÜÀí¸´ÔӵķþÎñÍØÆË£¬¿É¿¿µØ´«µÝ·þÎñÖ®¼äµÄÇëÇó¡£ ´ÓijÖ̶ֳÈÉÏ˵£¬ÕâЩ´úÀí½Ó¹ÜÁËÓ¦ÓóÌÐòµÄÍøÂçͨÐŲ㡣

EnvoyÊÇ Service Mesh ÖÐÒ»¸ö·Ç³£ÓÅÐãµÄ sidecar µÄ¿ªÔ´ÊµÏÖ¡£ÎÒÃǾÍÀ´¿´¿´ Envoy ¶¼ÊÇ×öЩʲô¹¤×÷¡£

Envoy Óõ½µÄ¼¸¸öÊõÓï

Host: ͨ³£ÎÒÃǽ« Host ¿´×öÊÇÒ»¸ö¾ß±¸ÍøÂçͨÐŹ¦ÄܵÄʵÌå(¿ÉÒÔÊÇһ̨ÎïÀí»ú£¬Ò²¿ÉÒÔÊÇÒ»Ì¨ÒÆ¶¯É豸µÈµÈ) ¡£ÔÚ Envoy ÖУ¬host ÊÇÒ»¸öÂß¼­ÍøÂçÖеÄÓ¦ÓÃ. ¿ÉÄÜÔËÐÐÔÚÓÉÓжà¸öÖ÷»ú×é³ÉµÄµ×²ãÓ²¼þ£¬Ö»ÒªËüÃǸ÷×Ô¶ÀÁ¢Ñ°Ö·¡£

Downstream: ÇëÇ󷢯ðÕß(·þÎñÇëÇó·½)¡£

Upstream: ÇëÇó½ÓÊÕÕß(·þÎñÌṩ·½)¡£

Listener: ·þÎñ(³ÌÐò)¼àÌýÕß¡£¾ÍÊÇÕæÕý¸É»îµÄ¡£ envoy »á±©Â¶Ò»¸ö»òÕß¶à¸ölistener¼àÌýdownstreamµÄÇëÇó¡£

Cluster: upstream ¼¯Èº¡£Envoy ͨ¹ý·þÎñ·¢ÏÖ¶¨Î»¼¯Èº³ÉÔ±²¢»ñÈ¡·þÎñ¡£¾ßÌåÇëÇóµ½Äĸö¼¯Èº³ÉÔ±ÊÇÓɸºÔؾùºâ²ßÂÔ¾ö¶¨¡£Í¨¹ý½¡¿µ¼ì²é·þÎñÀ´¶Ô¼¯Èº³ÉÔ±·þÎñ״̬½øÐмì²é¡£

Mesh: ÔÚ±¾ÎÄÖÐ "Envoy mesh" Ö¸µÄÊÇÓÉÒ»×é Envoy ´úÀí×é³ÉµÄ£¬Îª²»Í¬·þÎñÖ®¼ä¿É¿¿´«µÝÇëÇóµÄ·þÎñÍø¸ñ¡£

Runtime configuration: Envoy ÅäÖÃÊÇÈȸüеģ¬ÎÞÐèÖØÆô¡£

Filter£º ¹ýÂËÆ÷¡£ÔÚ Envoy ÖÐÖ¸µÄÊÇһЩ¡°¿É²å°Î¡±ºÍ¿É×éºÏµÄÂß¼­´¦Àí²ã¡£ÊÇ Envoy ºËÐÄÂß¼­´¦Àíµ¥Ôª¡£

Envoy »ù´¡¸ÅÄî

Ïß³ÌÄ£ÐÍ

Envoy ʹÓõ¥½ø³Ì¶àÏß³Ìģʽ¡£Ò»¸öÖ÷Ị̈߳¬¶à¸ö¹¤×÷Ï̡߳£Ö÷Ïß³ÌЭµ÷ºÍ¹ÜÀíÕâ¶à¸öÏß³ÌÀ´¹¤×÷¡£Ã¿¸öÏ̶߳¼¶ÀÁ¢¼àÌý·þÎñ£¬²¢¶ÔÇëÇó½øÐйýÂ˺ÍÊý¾ÝµÄת·¢µÈ¡£

Ò»¸öÁ¬½Ó½¨Á¢ºó£¬Õâ¸öÏ߳̽«»á¹ÜÀí¸ÃÁ¬½ÓµÄÕû¸öÉúÃüÖÜÆÚ¡£Í¨³£ Envoy ÊÇ·Ç×èÈûµÄ£¬¶ÔÓÚ´ó¶àÊýÇé¿ö½¨Òéÿ¸ö Envoy ÅäÖõŤ×÷Ïß³ÌÊýµÈÓÚ»úÆ÷µÄ CPU Ïß³ÌÊý¡£

Listeners

Envoy ÖÐÕæÕý¸É»îµÄ(ͨ³£ÊÇÒ»¸ö¼àÌý·þÎñ¶Ë¿ÚµÄ¹¤×÷Ïß³Ì)¡£

Envoy »áÆô¶¯Ò»¸ö»òÕß¶à¸ölistener£¬¼àÌýÀ´×Ô downstream µÄÇëÇó¡£µ± listener ½ÓÊÕµ½ÐµÄÇëÇóʱ£¬»á¸ù¾Ý¹ØÁªµÄfiltersÄ£°å³õʼ»¯ÅäÖÃÕâЩ filters£¬²¢¸ù¾ÝÕâЩ filters Á´¶ÔÕâЩÇëÇó×ö³ö´¦Àí£¨ÀýÈ磺ÏÞËÙ¡¢TLS ÈÏÖ¤¡¢HTTP Á¬½Ó¹ÜÀí¡¢MongoDB Ðá̽¡¢TCP ´úÀíµÈµÈ£©¡£

Envoy ÊǶàÏß³ÌÄ£ÐÍ£¬Ö§³Öµ¥¸ö½ø³ÌÅäÖÃÈÎÒâÊýÁ¿µÄ listeners¡£Í¨³£½¨ÒéÒ»¸ö»úÆ÷ÉÏÔËÐÐÒ»¸ö Envoy ½ø³Ì£¬¶ø²»¹ØÐÄÅäÖÃÁ˶àÉÙ¸ölisterners£¨ÈçÉÏ£º´ó¶àÊýÇé¿ölistenerÊýÁ¿µÈÓÚ»úÆ÷µÄCPUÏß³ÌÊý£©¡£

Ŀǰ Envoy Ö»Ö§³Ö TCP ÀàÐ굀 listeners¡£Ã¿¸ö listener ¶¼¿ÉÒÔ¶ÀÁ¢ÅäÖÃһЩL3/L4²ãµÄ filters¡£

Listener »¹¿ÉÒÔͨ¹ý listener ·¢ÏÖ·þÎñÀ´¶¯Ì¬»ñÈ¡¡£

Network (L3/L4) filters

network (L3/L4) filters ¹¹³ÉÁËEnvoyÁ¬½Ó´¦ÀíµÄºËÐÄ¡£ ÔÚ listener ²¿·ÖÎÒÃǽéÉܹý, ÿ¸ö listener ¿ÉÒÔ×éºÏʹÓöà¸ö filters À´´¦ÀíÁ¬½ÓÊý¾Ý¡£

ĿǰÓÐÈýÖÖÀàÐ굀 network (L3/L4) filters:

Read: µ± Envoy ½ÓÊÕÀ´×ÔÏÂÓηþÎñÇëÇóÊý¾Ýʱ±»µ÷Óá£

Write: µ± Envoy ÏòÉÏÓηþÎñ·¢ËÍÊý¾Ýʱ±»µ÷Óá£

Read/Write: ÉÏÃæÁ½ÖÖfileter¶¼Êǵ¥Ïò¿ØÖÆ£¬Read/Write filters ÔÚ½ÓÊÕÀ´×ÔÏÂÓηþÎñÇëÇóÊý¾ÝºÍÏòÉÏÓηþÎñ·¢ËÍÊý¾Ýʱ±»µ÷Óã¬ÊÇË«Ïò¿ØÖÆ¡£

ÕâЩ filter ͨ¹ý·ÖÎöԭʼ×Ö½ÚÁ÷ºÍÉÙÁ¿Á¬½Óʼþ(ÀýÈ磬TLSÎÕÊÖÍê³É£¬±¾µØ»òÔ¶³ÌÁ¬½Ó¶Ï¿ªµÈ)¶ÔÁ¬½Ó½øÐд¦Àí¡£

Network Filter(L7)/HTTP Filter

HTTP ЭÒéÊǵ±Ç°Ðí¶à·þÎñ¹¹½¨µÄ»ù´¡Ð­Ò飬×÷ΪºËÐÄ×é¼þ£¬Envoy ÄÚÖÃÁË HTTP Á¬½Ó¹ÜÀí filter¡£ ¸Ã filter ½«Ô­Ê¼Êý¾Ý×Ö½Úת»»³É HTTP ЭÒéÀàÐÍÊý¾Ý(±ÈÈ磺 headers¡¢body¡¢trailersµÈ)¡£Ëü»¹»á´¦ÀíһЩͨÓõÄÎÊÌâ(±ÈÈ磺requestÈÕÖ¾¡¢request IDÉú³ÉºÍrequest×·×Ù¡¢ÇëÇó/ÏìӦͷ¿ØÖÆ¡¢Â·Óɱí¹ÜÀíºÍ״̬Êý¾Ýͳ¼ÆµÈ)¡£

HTTP Á¬½Ó¹ÜÀíÌṩÁËÈýÖÖÀàÐ͵Äfilter£º

HTTP ЭÒéÊǵ±Ç°Ðí¶à·þÎñ¹¹½¨µÄ»ù´¡Ð­Ò飬×÷ΪºËÐÄ×é¼þ£¬Envoy ÄÚÖÃÁË HTTP Á¬½Ó¹ÜÀí filter¡£ ¸Ã filter ½«Ô­Ê¼Êý¾Ý×Ö½Úת»»³É HTTP ЭÒéÀàÐÍÊý¾Ý(±ÈÈ磺 headers¡¢body¡¢trailersµÈ)¡£Ëü»¹»á´¦ÀíһЩͨÓõÄÎÊÌâ(±ÈÈ磺requestÈÕÖ¾¡¢request IDÉú³ÉºÍrequest×·×Ù¡¢ÇëÇó/ÏìӦͷ¿ØÖÆ¡¢Â·Óɱí¹ÜÀíºÍ״̬Êý¾Ýͳ¼ÆµÈ)¡£

HTTP Á¬½Ó¹ÜÀíÌṩÁËÈýÖÖÀàÐ͵Äfilter£º

Decoder: ½âÎöÇëÇóÊý¾ÝÁ÷ʱ(headers£¬body£¬trailersµÈ)µ÷Óã¬ÊôÓÚÈë¿Úµ¥·½Ïò¿ØÖÆ¡£

Encoder: ±àÂëÏìÓ¦Êý¾ÝÁ÷ʱ(headers, body, and trailers)µ÷Óã¬ÊôÓÚ³ö¿Úµ¥·½Ïò¿ØÖÆ.

Decoder/Encoder: Decoder/Encoder ÓÃÓÚÈë/³ö¿ÚË«Ïò¿ØÖÆ.

HTTP Filters

HTTP protocols

Envoy HTTP Á¬½Ó¹ÜÀíÔ­ÉúÖ§³ÖHTTP/1.1, WebSockets ºÍ HTTP/2£¬Ôݲ»Ö§³Ö SPDY¡£

Envoy ¶Ô HTTP µÄÖ§³ÖÔÚÉè¼ÆÖ®³õ¾ÍÊÇÒ»¸öHTTP/2µÄ¶à·¸´ÓôúÀí¡£¶ÔÓÚ HTTP/1.1 ÀàÐÍÁ¬½Ó£¬±à½âÂëÆ÷½« HTTP/1.1 µÄÊý¾Ýת»»ÎªÀàËÆÓÚ HTTP/2 »òÕ߸ü¸ß²ãµÄ³éÏó´¦Àí¡£ÕâÒâζ×Å´ó¶àÊý´úÂë²»ÓùØÐĵײãÁ¬½ÓʹÓõÄÊÇ HTTP/1.1 »¹ÊÇ HTTP/2¡£

access log

HTTP Á¬½Ó¹ÜÀíÖ§³Ö access log£¬¿ÉÒԼǼ·ÃÎÊÈÕÖ¾£¬ÇÒ¿ÉÒÔÁé»îµÄÅäÖá£

HTTP ·ÓÉ

Envoy °üº¬ÁËÒ»¸ö HTTP router filter£¬¸Ã filter ¿ÉÒÔÓÃÀ´ÊµÏÖ¸ü¸ß¼¶µÄ·Óɹ¦ÄÜ¡£Ëü¿ÉÒÔÓÃÀ´´¦Àí±ßÔµÁ÷Á¿/ÇëÇó(ÀàËÆ´«Í³µÄ·´Ïò´úÀí)£¬Í¬Ê±Ò²¿ÉÒÔ¹¹½¨Ò»¸ö·þÎñÓë·þÎñÖ®¼äµÄ Envoy Íø¸ñ(µäÐ͵ÄÊÇͨ¹ý¶ÔHTTP headerµÈµÄ´¦ÀíʵÏÖµ½Ìض¨·þÎñ¼¯ÈºµÄת·¢)¡£

ÿ¸öHTTPÁ¬½Ó¹ÜÀí filter ¶¼»á¹ØÁªÒ»¸ö·ÓÉ±í¡£Ã¿¸ö·Óɱí»á°üº¬¶Ô HTTP Í·¡¢ÐéÄâÖ÷»úµÈµÄÅäÖÃÐÅÏ¢¡£

{
"cluster": "...",
"route_config_name": "route_config_example",
"refresh_delay_ms": "3000"
}
route_config_example:
{
"validate_clusters": "example",
"virtual_hosts": [
{
"name": "vh01",
"domains": ["test.foo.cn"],
"routes": [],
"require_ssl": "...",
"virtual_clusters": [],
"rate_limits":
"request_headers_to_add": [
{"key": "header1", "value": "value1"},
{"key": "header2", "value": "value2"}
]
},
],
"internal_only_headers": [],
"response_headers_to_add": [],
"response_headers_to_remove": [],
"request_headers_to_add": [
]
}

·ÓɱíÓÐÁ½ÖÖÅäÖ÷½Ê½£º

¾²Ì¬ÅäÖÃÎļþ¡£

ͨ¹ýRDS(Route discovery service) API¶¯Ì¬ÅäÖá£

RDS ÊÇÒ»×éAPIÓÃÀ´¶¯Ì¬»ñÈ¡±ä¸üºóµÄ·ÓÉÅäÖá£

router filter Ö§³ÖÈçϹ¦ÄÜ£º

Ö§³Ö Virtual hosts¡£Ó³Éä domains/authorities µ½Ò»ÏµÁеÄ·ÓɹæÔòÉÏ¡£[ºÍnginxµÈÒ»Ñù]¡£

»ùÓÚǰ׺ºÍ¾«È·pathµÄ¹æÔòÆ¥Åä(ÓеĶԴóСд¼ÈÃô¸Ð,ÓеIJ»Ãô¸Ð)¡£ ÓÉÓÚ Regex/slug »áʹµÃÓóÌÐòÀ´Åж¨Â·ÓɹæÔòÊÇ·ñÓëÆäËü¹æÔò³åÍ»ºÜÀ§ÄÑ, ËùÒÔ,ĿǰÔݲ»Ö§³Ö¡£ÓÉÓÚÕâ¸öÔ­Òò£¬ÎÒÃDz»½¨ÒéÔÚ·´Ïò´úÀí²ãÃæÊ¹ÓûùÓÚregex/slugµÄ·ÓÉ, µ±È»ÁË£¬Î´À´ÎÒÃÇ»á¸ù¾ÝÐèÇóÌí¼Ó¶ÔËüµÄÖ§³Ö¡£

Virual host ²ãÃæµÄ TLS ÖØ¶¨Ïò¡£ ·ÖÁ½Àࣺ

all£º ËùÓÐÇëÇó¶¼±ØÐëʹÓÃTLS¡£Èç¹ûÇëÇóûÓÐʹÓÃTLS£¬·µ»Ø302¡£

external_only£º Ö»ÒªÇóÍâÍøÇëÇóʹÓÃTLS¡£Èç¹ûÀ´×ÔÍâÍøµÄÇëÇóûÓÐʹÓÃTLS¡£ Èç¹û£¬¸Ä²ÎÊýûÓÐÅäÖ㬸Ãvirtual host½«²»»á¶ÔTLSÓÐÒªÇó¡£

·ÓɲãÃæ¶Ô Path/host ÖØ¶¨Ïò¡£

hostÖØÐ´¡£ Ö§³ÖÁ½ÖÖÖØÐ´·½Ê½£º

1. ¹Ì¶¨Öµ¡£host_rewrite²ÎÊýÅäÖá£

2. ¶¯Ì¬ÅäÖ᣸ù¾Ýupstream Ö÷»úµÄ DNS ÀàÐͶ¯Ì¬ÅäÖᣠ¾ßÌåµÄÖµÊÇÓÉcluster manager´ÓupstreamÖÐÑ¡³öÀ´µÄ£¬ÆäÖ÷»úÃû×÷ÎªÖØÐ´µÄÖµ¡£ ÕâÖÖ·½Ê½Ö»ÓÃÔÚrouteµÄÄ¿µÄ¼¯ÈºÊÇ strict_dns or logical_dns ÀàÐ͵ij¡¾°¡£ÆäËü¼¯ÈºÀàÐͲ»Æð×÷Óᣠ½« auto_host_rewrite ÉèÖÃtrue¼´¿É¡£ÕâÁ½¸ö²ÎÊý²»ÄÜͬʱʹÓá£

Ç°×ºÖØÐ´(prefix)¡£

·ÓɲãÃæ¶Ô Websocket upgrades. ÅäÖøùæÔòºó£¬À´×Ô HTTP/1.1 ¿Í»§¶Ëµ½¸Ã·ÓɹæÔòµÄÁ¬½Ó¶¼»á±»×ª»»³É WebSocket µÄÁ¬½Ó¡£ Èç¹ûÅäÖÃΪ true, Envoy ¶ÔÓڸ÷ÓɵĵÚÒ»¸öÇëÇóÐè´ø WebSocket upgrade headers¡£Èç¹ûûÓÐÌí¼Ó¸Ãheader£¬ÇëÇó½­±±¾Ü¾ø¡£Èç¹ûÉèÖÃÁË, Envoy ½«»áÔÚclientºÍupstream serverÖ®¼äÉèÖÃTCP´úÀí ¡£upstream ¸ºÔð¶Ï¿ª¸ÃÁ¬½Ó£¬·ñÔò Envoy ÈÎÈ»»áת·¢Êý¾Ýµ½¸Ãupstream server¡£

ÇëÇóÖØÊԺͳ¬Ê±ÉèÖà Envoy ÓÐÁ½ÖÖ·½Ê½À´ÉèÖÃÇëÇóÖØÊÔ¡£

1. ͨ¹ýrouteÉèÖá£

2. ͨ¹ýrequest headerÉèÖᣠ֧³ÖµÄÅäÖÃÏîÓУº 2.1 ×î´óÖØÊÔ´ÎÊý: ÿ´ÎÖØÊÔÖ®¼ä»áʹÓÃÖ¸ÊýÍ˱ÜËã·¨.ÁíÍ⣬ËùÓÐÖØÊÔ¶¼°üº¬ÔÚÕûÌåÇëÇó³¬Ê±Ö®ÄÚ¡£Õâ±ÜÃâÁËÓÉÓÚ´óÁ¿ÖØÊÔ¶øÐèÒª½Ï³¤µÄÇëÇóʱ¼ä¡£ 2.2 ÖØÊÔÌõ¼þ: ¿ÉÒÔ¸ù¾ÝÓ¦ÓõÄÐèÇóÅäÖô¥·¢ÖØÊÔµÄÌõ¼þ¡£ÀýÈ磺 ÍøÂç´íÎó, 5xx ·µ»ØÂë, ÃݵȵÄ4xx·µ»ØÂë, µÈµÈ¡£

ÔËÐÐʱ¶ÔÀ´×ÔÉÏÏÂÓÎÊý¾ÝµÄÐá̽¡£

ʹÓûùÓÚ weight/percentage-based µÄ·ÓÉ£¬¶ÔÀ´×Ô¶à¸öÉÏÓεÄÊý¾Ý½øÐвð·Ö¡£

ÈÎÒâ HTTP Í·Æ¥Åä·ÓɹæÔò¡£

Ö§³ÖÐéÄ⼯Ⱥ¡£

»ùÓÚ·ÓɵÄÓÅÏȼ¶¡£

»ùÓÚ·ÓÉµÄ hash ¸ºÔؾùºâ¡£ÐèÒªÔÚ header ÖÐÉèÖà hash ʹÓõIJßÂÔ¡£

¶ÔÓÚ·Ç TLS µÄת·¢Ö§³Ö¾ø¶Ô urls¡£

ÆäÖУºÖض¨Ïò¡¢³¬Ê±¡¢ÖØÊÔ¶ÔÓÚ websocket upgrades ÊDz»Ö§³ÖµÄ¡£

Connection pooling

¶ÔÓÚ HTTP ÀàÐÍ£¬Envoy ÌṩÁ˶ÔÁ¬½Ó³ØµÄ³éÏó£¬Á¬½Ó³ØÆÁ±Îµ×²ãЭÒéÀàÐÍ(HTTP/1.1¡¢HTTP/2)£¬ÏòÉϲãÌṩͳһµÄ½Ó¿Ú¡£Óû§²»ÓùØÐĵײãÊÇ»ùÓÚHTTP/1.1µÄ¶àÏ̻߳¹ÊÇ»ùÓÚHTTP/2µÄ¶à·¸´Ó÷½Ê½ÊµÏÖϸ½Ú¡£

TCP proxy

TCP ´úÀí£¬L3/L4²ãÁ¬½ÓµÄת·¢¡£ÕâÓ¦¸ÃÊÇ Envoy ×î»ù´¡µÄ¹¦ÄÜ¡£Ò»°ãÊÇ×÷Ϊ downstream ¿Í»§¶ËÓë upstream ·þÎñ¼¯ÈºÖ®¼äµÄÁ¬½Ó´úÀí¡£TCP ´úÀí¼È¿ÉÒÔµ¥¶ÀʹÓã¬Ò²¿ÉÒÔÓëÆäËü filter ×éºÏʹÓã¬ÀýÈç( MongoDB filter »òÕß ÏÞËÙfilter)¡£

ÔÚ TCP ´úÀí²ã»¹¿ÉÒÔÅäÖà route ²ßÂÔ£¬±ÈÈ磺 ÔÊÐíÄÄЩIP¶ÎºÍÄÄЩ¶Ë¿Ú½øÀ´µÄÇëÇó·ÃÎÊ£¬ÔÊÐí·ÃÎÊÄÄЩIP¶ÎºÍÄÄЩ¶Ë¿ÚµÄ·þÎñ¡£

TCP ´úÀíÅäÖÃÈçÏ£º

{
"name": "tcp_proxy",
"config": {
"stat_prefix": "...",
"route_config": "{...}"
}
}

stat_prefix£º ͳ¼ÆÊý¾Ýǰ׺£¬Ö÷ÒªÊÇÓÃÓÚÇø·Öͳ¼ÆÊý¾Ý¡£

route_config£º filter µÄ·ÓÉ±í¡£

ÀýÈ磺

{
"name": "tcp_proxy",
"config": {
"stat_prefix": "...",
"route_config": "{
"routes": [
{
"cluster": "...",
"destination_ip_list": [
"192.168.3.0/24",
"50.1.2.3/32",
"10.15.0.0/16",
"2001:abcd::/64"
],
"destination_ports": "1-1024,2048-4096,12345",
"source_ip_list": [
"192.168.3.0/24",
"50.1.2.3/32",
"10.15.0.0/16",
"2001:abcd::/64"
],
"source_ports": "1-1024,2048-4096,12345"


},
]
}"
}
}

¼òµ¥Ëµ£¬¾ÍÊÇÉÏÏÂÓηþÎñµÄ·ÃÎÊ¿ØÖÆ¡£

TPC ´úÀíÖ§³ÖµÄһЩͳ¼ÆÊý¾Ý£º

downstream_cx_total ´¦ÀíµÄÁ¬½Ó×ÜÊý.

downstream_cx_no_route ²»Æ¥ÅärouteµÄ×ÜÊý.

downstream_cx_tx_bytes_total ·¢Ë͸øÏÂÓεÄ×Ü×Ö½ÚÊý

downstream_cx_tx_bytes_buffered Gauge µ±Ç°ÎªÏÂÓηþÎñ»º´æµÄ×Ö½ÚÊý

downstream_flow_control_paused_reading_total ±»Á÷¿ØÔÝÍ£´ÓÏÂÓηþÎñ¶ÁÈ¡Êý¾ÝµÄ´ÎÊý

downstream_flow_control_resumed_reading_total ±»Á÷¿Ø¿ØÖÆÖØÐ´ÓÏÂÓηþÎñ¶ÁÈ¡Êý¾ÝµÄ´ÎÊý

gRPC µÄÖ§³Ö

Envoy ÔÚ´«Êä²ãºÍÓ¦ÓòãÁ½¸ö²ã¸øÓègRPCµÄ¸ß¶ÈÖ§³Ö¡£

Envoy Êǵ±Ç°¼«ÉÙÊýÄÜͬʱÕýÈ·Ö§³ÖHTTP/2 trailersºÍ´«ÊägRPCÇëÇóºÍÏìÓ¦µÄµÄHTTP´úÀí¡£

gRPC ÔËÐÐʱ¶ÔÓÚһЩÓïÑÔ¶øÑÔ»¹ÊDz»Ì«³ÉÊ졣Ϊ´Ë£¬Envoy Ö§³ÖÒ»¸ö½Ð gRPC bridge µÄ filter£¬ËüÔÊÐígRPCÇëÇóÄܹ»Í¨¹ýHTTP/1.1·¢Ë͸øEnvoy¡£ Envoy »á½«¸ÃÇëÇóת»»³ÉHTTP/2´«Ê䵽ĿµÄserver¡£ÏìÓ¦»á±»×ª»»³É HTTP/1.1 ·µ»Ø¡£

µ±×°ÁËbridge filterºó, bridge filter ³ýÁËÊÕ¼¯È«¾ÖHTTPͳ¼ÆÖ®Í⣬ÇŽӹýÂËÆ÷»¹ÊÕ¼¯Ã¿¸öRPCͳ¼ÆÐÅÏ¢¡£

gRPC-Web is supported by a filter that allows a gRPC-Web client to send requests to Envoy over HTTP/1.1 and get proxied to a gRPC server. It¡¯s under active development and is expected to be the successor to the gRPC bridge filter.

Ö§³Ö gRPC-web¡£Í¨¹ý filter Äܹ»½«Ê¹Óà HTTP/1.1 ·¢Ë͵½Envoy µÄ gRPC-Web ¿Í»§¶ËÇëÇó´úÀíµ½ gRPC server¡£¸Ã feature ÕýÔÚ¿ª·¢½×¶Î¡£

JSON ת»»Æ÷Ö§³Ö»ùÓÚ JSON µÄ RESTFUL ¿Í»§¶Ëͨ¹ý HTTP ·¢ËÍÇëÇó¸ø Envoy ²¢´úÀí¸ø gRPC ·þÎñ.

WebSocket µÄÖ§³Ö

Envoy Ö§³ÖHTTP/1.1Á¬½Óµ½WebSocketÁ¬½ÓµÄÇл»(ĬÈÏÊÇÖ§³ÖµÄ)¡£

Ìõ¼þ£º

client ÐèÒªÏÔʾÌí¼Ó upgrade headers ¡£

HTTP ·ÓɹæÔòÖÐÏÔʾµÄÉèÖÃÁË¶Ô websocketµÄÖ§³Ö(use_websocket)¡£

ÒòΪ Envoy ½« WebSocket connections ×÷Ϊ TCP connection À´´¦Àí£¬Òò´Ë£¬Ò»Ð©HTTPµÄÌØÐÔËü²»Ö§³Ö£¬ÀýÈ磺 ÖØ¶¨Ïò¡¢³¬Ê±¡¢ÖØÊÔ¡¢ÏÞËÙ¡¢ shadowing . µ«ÊÇ, prefix ÖØÐ´, host ÖØÐ´, traffic shifting and splitting ¶¼ÊÇÖ§³ÖµÄ.

Envoy¶ÔWebSocketµÄ´úÀíÊÇTCP²ã£¬ËüÀí½â²»ÁËWebSocket²ãµÄÓïÒ壬ËùÒÔ¶ÔÓÚÁ¬½Ó¶Ï¿ªÓ¦¸ÃÓÉupstreamµÄclientÀ´Ö÷¶¯¹Ø±Õ¡£

Envoy¶ÔWebSocketµÄÖ§³ÖÓënginx¶ÔWebSocketµÄÖ§³ÖÊÇÏàͬµÄ¡£

¸ß¼¶¸ÅÄî

¼¯Èº¹ÜÀíÆ÷(Cluster manager)

Envoy ¼¯Èº¹ÜÀíÆ÷¹ÜÀíËùÓÐ upstream ¼¯Èº½Úµã¡£

upstream ¼¯Èº½Úµã¶¼ÓÉһЩÁÐ L3/L4/L7 ²ã filter Á´×é³É£¬ËüÃÇ¿ÉÓÃÓÚÈÎÒâÊýÁ¿µÄ²»Í¬´úÀí·þÎñ¡£

¼¯Èº¹ÜÀíÆ÷Ïò filter Á´±©Â¶Ò»×éAPI£¬Õâ×éAPIÔÊÐí filters »ñÈ¡·¢Íù upstream ¼¯ÈºµÄL3/L4²ãµÄÁ¬½Ó»ò³éÏóµÄ HTTP Á¬½Ó³ØµÄÊý¾Ý¡£ÔÚ filter ´¦Àí½×¶Îͨ¹ý¶Ôԭʼ×Ö½ÚÁ÷µÄ·ÖÎöÈ·¶¨ÊÇÒ»¸öÁ¬½ÓÊÇ L3/L4 ²ãµÄÁ¬½Ó»¹ÊÇÒ»¸öÐ嵀 HTTP Á÷¡£

³ýÁË»ù±¾µÄÁ¬½ÓÀàÐÍ·ÖÎöÍ⣬¼¯Èº¹ÜÀíÆ÷»¹Òª´¦ÀíһЩÁеĸ´ÔÓ¹¤×÷£¬ÀýÈ磺֪µÀÄÄЩÖ÷»ú¿ÉÓúͽ¡¿µ£¬¸ºÔؾùºâ£¬ÍøÂçÁ¬½ÓÊý¾ÝµÄ±¾µØ´æ´¢£¬Á¬½ÓÀàÐÍ(TCP/IP, UDS)£¬Ð­ÒéÀàÐÍ(HTTP/1.1,HTTP/2)µÈ¡£

¼¯Èº¹ÜÀíÆ÷Ö§³ÖÁ½ÖÖ·½Ê½»ñÈ¡Ëü¹ÜÀíµÄ¼¯Èº½Úµã£º

ͨ¹ý¾²Ì¬µÄÅäÖÃÎļþ

ͨ¹ý¶¯Ì¬µÄ¼¯Èº·¢ÏÖAPI(CDS)¡£

CDS£ºCluster discovery service£¬ÊÇÒ»¸ö¿ÉÑ¡µÄAPI£¬EnvoyÓÃËüÀ´¶¯Ì¬µÄ»ñÈ¡cluster managerµÄ³ÉÔ±¡£

¼¯Èº¹ÜÀíÆ÷ÅäÖÃÏîÈçÏ£º

{
"clusters": [],
"sds": "{...}",
"local_cluster_name": "...",
"outlier_detection": "{...}",
"cds": "{...}"
}

Service discovery(SDS)

·þÎñ·¢ÏÖÓм¸ÖÖ·½Ê½£º

1.¾²Ì¬ÅäÖá£Í¨¹ýÅäÖÃÎļþÅäÖÃ(IP/PORT¡¢unix domain socketµÈ)¡£

2.»ùÓÚDNSµÄ·þÎñ·¢ÏÖ¡£

3.Original destination

4.Service discovery service (SDS)

5.On eventually consistent service discovery

¸ü¶à·þÎñ·¢ÏÖÄÚÈÝ

Ö÷¶¯½¡¿µ¼ì²é

¸ù¾ÝÅäÖõIJ»Í¬, Envoy Ö§³Ö3ÖÖ½¡¿µ¼ì²é·½Ê½¡£

1.»ùÓÚ HTTP

Envoy Ïò upstream ½Úµã·¢ËÍÒ»¸ö HTTP ÇëÇ󣬷µ»Ø 200 ´ú±í½¡¿µ, ·µ»Ø 503 ´ú±í¸Ãhost²»ÔÙ½ÓÊÕÇëÇó/Á÷Á¿¡£

»ùÓÚ HTTP µÄ½¡¿µ¼ì²éÖ§³Ö3ÖÖ²ßÂÔ£º

1.1 No pass through

ÕâÖÖģʽ Envoy ²»»á½«½¡¿µ¼ì²éµÄÇëÇóת·¢¸ø±¾µØµÄ·þÎñ£¬¶øÊǸù¾Ýµ±Ç°½ÚµãÊÇ·ñ±» draining ·µ»Ø 200 »òÕß 503.

1.2 Pass through

ÓëµÚÒ»ÖÖģʽ²»Í¬£¬ÕâÖÖģʽ Envoy »á½«½¡¿µ¼ì²éµÄÇëÇóת·¢¸ø±¾µØ·þÎñ£¬µ÷Óñ¾µØ·þÎñµÄ½¡¿µ¼ì²é½Ó¿Ú£¬·µ»Ø 200 »ò 503.

1.3 Pass through with caching

ÕâÖÖģʽÊÇǰÁ½ÖÖģʽµÄ¸ß¼¶°æ£¬µÚÒ»ÖÖ·½°¸Êý¾Ý²»Ò»¶¨×¼£¬µÚ¶þÖÖÇëÇó̫Ƶ·±»á¶ÔÐÔÄÜÓÐÓ°Ïì¡£

¸Ãģʽ¼ÓÁ˸ö»º´æµÄÖ§³Ö£¬ÔÚ»º´æÖÜÆÚÄÚ½á¹ûÖ±½Ó´Ó»º´æÖÐÈ¡£¬»º´æÊ§Ð§ºóÔÙÇëÇóÒ»´Î±¾µØ·þÎñ¼ÓÔØµ½»º´æÖС£

ÕâÊÇÍÆ¼öµÄÒ»ÖÖģʽ¡£ ½¡¿µ¼ì²éʱ Envoy Óë EnvoyÖ®¼äÊdz¤Á¬½Ó£¬ËûÃDz»»áÏûºÄÌ«´óÐÔÄÜ£»¶ÔÓÚ upstream ½Úµã¶øÑÔ£¬ÔòÊÇÐÂÇëÇóÐÂÁ¬½Ó¡£

2.»ùÓÚ HTTP µÄ½¡¿µ¼ì²éÖ§³ÖÉí·ÝÈÏÖ¤¡£

Èç¹ûÄãÔÚÔÆÆ½Ì¨ÖÐÓÃÁË×îÖÕÒ»ÖÂÐԵķþÎñ·¢ÏÖ·þÎñ»òÕßÈÝÆ÷»·¾³ÖУ¬¸ÏÉÏ·þÎñˮƽÀ©Õ¹£¬Õâ¸öʱºòÆäÖÐÒ»¸ö½Úµã¹ÒµôºóÓÖ"»Øµ½Æ½Ì¨"ÇÒʹÓõÄÊÇͬһ¸ö IP ÊÇÓпÉÄܵ쬵«ÊÇÈ·ÊDz»Í¬µÄ·þÎñ(ÔÚÈÝÆ÷·þÎñÖÐÓÈΪÃ÷ÏÔ)¡£Ò»ÖÖ½â¾ö·½°¸ÊÇ£¬¶Ô²»Í¬µÄ·þÎñʹÓò»Í¬µÄ½¡¿µ¼ì²éURL£¬µ«ÊÇÕâÖÖÅäÖø´ÔӶȷdz£¸ß¡£Envoy ²ÉÓõķ½°¸ÊÇÔÚ header ÖÐÌí¼ÓÒ»¸ö service_name Ñ¡ÏîÀ´Ö§³Ö¡£Èç¹ûÉèÖÃÁ˸ÃÑ¡ÏÔÚ½¡¿µ¼ì²éʱ»á¶Ô±È header ÖÐµÄ x-envoy-upstream-healthchecked-cluster ÊÇ·ñºÍ¸ÃÑ¡ÏîֵƥÅ䣬Èç¹û²»Æ¥ÅäÔò»áºöÂÔ¸ÃÇëÇó¡£

3.L3/L4

»ùÓÚL3/L4²ãµÄ½¡¿µ¼ì²é, Envoy Ïò upstream ½Úµã·¢ËͶ¨ÒåºÃµÄÒ»¸ö×Ö·û´®. Èç¹û upstream ½Úµã·µ»Ø¸ÃÖµ£¬Ôò´ú±í½¡¿µ, ·ñÔò²»½¡¿µ¡£

4.Redis

Envoy Ïò Redis ·¢ËÍÒ»¸ö PING ÃüÁî, ·µ»Ø PONG ´ú±í½¡¿µ, ÆäËüµÄ´ú±í²»½¡¿µ¡£

Passive health checking(¶Û̬¼ì²é)

Envoy ͨ¹ý Outlier detection ½øÐжÛ̬(ʵÔÚÊÇÕÒ²»³öÌ«ºÏÊʵĴÊ)¼ì²é

Outlier detection£¬ÓÃÀ´¼ì²éijЩ¼¯Èº³ÉÔ±ÔÚ¸ø¶¨·¶Î§ÄÚÊÇ·ñ¡°Õý³£¡±,²»Õý³£Ôò½«Æä´Ó¸ºÔؾùºâÁбíÖÐÒÆ³ý¡£

ÓÐʱºòÒ»¸ö½ÚµãËäÈ»ÔÚ½øÐÐÖ÷¶¯½¡¿µ¼ì²éÊÇÊÇÕý³£µÄ£¬µ«ÊÇ»á´æÔÚijЩ²»Õý³£µÄ״̬±»ÒÅ©µÄÇé¿ö£¬¶ø Outlier detection ÔòÊÇÃÖ²¹Õâ¸ö¡°Â©¶´¡±µÄ ¡£Ëüͨ¹ý¸ú¸ß¼¶µÄһЩËã·¨À´Åж¨¸Ã½ÚµãÊÇ·ñÊÇÕý³£µÄ¡£

Outlier detection ÓÐÁ½ÖÖ¼ì²éÀàÐÍ£º

»ùÓÚÁ¬ÐøµÄ 5xx ´íÎóÂë

upstream ³ÉÔ±Á¬ÐøN´Î·µ»Ø5xx´íÎóÂë, NĬÈÏΪ5(¿ÉÅäÖÃ)¡£

»ùÓڳɹ¦ÂÊ

»ùÓڳɹ¦Âʵļì²éÔÚÁ½ÖÖÇé¿öÏÂÊDz»´¦ÀíµÄ£º

Õë¶Ô¼¯ÈºÖе¥¸ö½Úµã

µ¥¸ö½ÚµãµÄÇëÇóÊýÁ¿ÔÚ¾ÛºÏÇø¼äÄÚÉÙÓÚoutlier_detection.success_rate_request_volumeֵʱ(ĬÈÏ100)¡£

¼¯Èº¼¶±ð

¼¯ÈºÖÐ outlier_detection.success_rate_minimum_hosts ¸ö½ÚµãÔÚ¼ì²éÖÜÆÚÄÚÇëÇóÁ¿¶¼Ð¡ÓÚ outlier_detection.success_rate_request_volume ʱ¡£

ÅäÖÃÏ

{
"consecutive_5xx": "...",
"interval_ms": "...",
"base_ejection_time_ms": "...",
"max_ejection_percent": "...",
"enforcing_consecutive_5xx" : "...",
"enforcing_success_rate" : "...",
"success_rate_minimum_hosts" : "...",
"success_rate_request_volume" : "...",
"success_rate_stdev_factor" : "..."
}

Ö÷¶¯½¡¿µ¼ì²éºÍ¶Û̬¼ì²é¿ÉÒÔÅäºÏʹÓã¬Ò²¿ÉÒÔµ¥¶ÀʹÓá£

Circuit breaking(¶Ï·Æ÷)

¶Ï·Æ÷ÊÇÒ»ÖÖ·Ö²¼Ê½µÄÏÞËÙ»úÖÆ£¬ËüÕë¶Ôÿ¸öupstreamµÄhostÉèÖã¬ÓÐʱºòÒ²ÐèÒªÕë¶ÔÕû¸öcluster½øÐÐÏÞÖÆ£¬ Õâ¸öʱºòÈ«¾ÖµÄÏÞËپͷdz£ÓбØÒªÁË¡£EnvoyÖ§³ÖÈ«¾ÖÏÞËÙ(L3/L4¡¢HTTP ¶¼Ö§³Ö)£¬ËüÓÐÒ»¸ö¼¯ÖеÄÏÞËÙ·þÎñ£¬ ¶ÔÓÚµ½´ï¸Ã¼¯ÈºµÄÿ¸öÁ¬½Ó£¬¶¼»á´ÓÏÞËÙ·þÎñÄÇÀï²éѯȫ¾ÖÏÞËÙ½øÐÐÅжϡ£ Envoy ÊÇͨ¹ýÒ»¸öÈ«¾ÖµÄgRPCÏÞËÙ·þÎñÀ´ÊµÏÖÈ«¾ÖÏÞËÙ¡£Í¨¹ýredisÀ´×öºó¶Ë´æ´¢¡£

Envoy µÄ¶Ï·Æ÷¿ÉÒÔ¿ØÖÆ envoy Óë downstream ½ÚµãµÄ×î´óÁ¬½ÓÊý¡¢¼¯Èº×î´óÖ§³ÖµÄ pending ÇëÇóÊý¡¢¼¯Èº×î´óÖ§³ÖµÄÇëÇóÊý(ÊÊÓÃHTTP/2)¡¢¼¯Èº´æ»î×î´ó̽²â´ÎÊý¡£

¶Ï·Æ÷ÅäÖãº

{
"max_connections": "...",
"max_pending_requests": "...", # ĬÈÏ 1024
"max_requests": "...", # ĬÈÏ 1024
"max_retries": "...", ĬÈÏ 3
}

max_connections£ºEnvoy Óë upstream ¼¯ÈºËùÓнڵãÄܹ»½¨Á¢µÄ×î´óÁ¬½ÓÊýÁ¿¡£¸Ã²ÎÊýÊÊÓÃÓÚHTTP/1.1£¬ÒòΪHTTP/2ÊÇʹÓõ¥¸öÁ¬½ÓÓëÿ¸öhost½¨Á¬£¬Á¬½Ó¸´ÓÃ(ĬÈÏ1024)¡£

max_pending_requests: µÈ´ýÏ̳߳ØÓпÉÓÃÁ¬½ÓʱµÄ×î´óÅŶÓÇëÇóÊýÁ¿¡£¸Ã²ÎÊýÊÊÓÃÓÚHTTP/1.1£¬HTTP/2²ÉÓöà·¸´Ó÷½Ê½£¬ÎÞÐèÅŶÓÇëÇó(ĬÈÏ 1024)¡£

max_requests: ¸ø¶¨Ê±¼äÄÚ×î´óÇëÇóÊý£¬¸Ã²ÎÊýÊÊÓÃÓÚHTTP/2£¬HTTP/1.1 ͨ¹ýmax_connectionsÀ´ÏÞÖÆ¡£(ĬÈÏ 1024)¡£

max_retries: ¸ø¶¨Ê±¼äÄÚEnvoyÓëÇëÇóupstream¼¯ÈºÊ±µÄ×î´óÖØÊÔ´ÎÊý£¬¸ÃÖµ²»ÒËÉèÖùý´ó£¬ÖØÊÔ¹ý¶à¿ÉÄÜ»á´øÀ´¸ü¶àÆäËüµÄ¼¶Áª¹ÊÕÏ£¬ÉõÖÁµ¼ÖÂÑ©±À¡£(ĬÈÏ 3)¡£

ÈȸüÐÂ

¼ò»¯²Ù×÷ÊÇEnvoyÒ»¸ö·Ç³£ÖØÒªµÄÉè¼ÆÄ¿±ê¡£³ýÁËÇ¿´óµÄͳ¼ÆºÍ±¾µØ¹ÜÀí½Ó¿Ú£¬ Envoy»¹¾ß±¸×ÔÉíÈÈÖØÆôµÄ¹¦ÄÜ¡£ ÕâÒâζ×Å Envoy Äܹ»È«×Ô¶¯µÄ¸üÐÂ×Ô¼º(°üÀ¨´úÂëºÍÅäÖõıä¸ü)£¬¶ø²»»á¶ªÊ§ÈκÎÁ¬½Ó¡£

¿´ÏÂÈȸüеĹý³Ì:

ͳ¼ÆÊý¾ÝºÍһЩlock¶¼·Åµ½Á˹²ÏíÄÚ´æÖС£½ø³ÌÔÚÖØÆôʱÕâЩÊý¾ÝÊdz־õ쬲»»á¶ªÊ§¡£

оɽø³Ìͨ¹ýRPCЭÒé½øÐÐͨÐÅ¡£

еĽø³ÌÔڽӹܾɽø³ÌµÄunix domain socketǰ£¬ÏÈÍê³ÉһϵÁеijõʼ»¯(±ÈÈ磺¼ÓÔØÅäÖÃ, ³õʼ»¯·þÎñ·¢Ïֺͽ¡¿µ¼ì²é, ÆäËü)¡£È»ºó£¬ÐµĽø³Ì¿ªÊ¼¼àÌý·þÎñ£¬²¢¸æËßÀϵÄEnvoy½ø³Ì½øÈëÇýÖð½×¶Î¡£

Ôھɽø³ÌÇýÖð½×¶Î, ¾ÉµÄ½ø³Ì³¢ÊÔÆ½»¬µÄ¹Ø±ÕÒÑ´æÔÚµÄÁ¬½Ó¡£¾ßÌåÈçºÎ×öÒªÒÀÀµÓÚÅäÖõÄfilters¡£ --drain-time-s ÅäÖÃÏîÓÃÀ´ÅäÖõȴýƽ»¬Í˳öµÄʱ¼ä¡£Èç¹ûƽ»¬Í˳ö»¨·ÑµÄʱ¼ä³¬¹ýÁËÕâ¸öÖµ£¬½ø³Ì»áÇ¿ÖÆ¹Ø±ÕºÍ»ØÊÕ¡£

ÇýÖð¹ý³Ì½áÊøºó, еÄEnvoy½ø³Ì¸æË߾ɵÄEnvoy½ø³Ì¹Ø±Õ×Ô¼º¡£²ÎÊý --parent-shutdown-time-s ÓÃÀ´ÅäÖùرÕ×Ô¼ºµÄ³¬Ê±Ê±¼ä¡£

Envoy µÄÈÈÖØÆôµÄÉè¼ÆÖ§³ÖÐÂÀϽø³Ìͬʱ´æÔÚʱҲÄÜÕý³£¹¤×÷¡£Ð¾ɽø³ÌÖ®¼äµÄͨÐÅÖ»ÄÜÊÇͨ¹ýunix domain socket¡£

Envoy ²¿Êð·½Ê½

ÕâÒ»¿éÊÇ´ó¼Ò¹Ø×¢µÄÖØµã£¬Ò²¾ÍÊÇÓ¦ÓóÌÐòÈçºÎÓë Envoy ½áºÏÀ´Ê¹Óõġ¢ÇëÇóÊÇÈçºÎתµ½ Envoy µÄµÈµÈ¡£

¸ù¾Ý²»Í¬µÄʹÓó¡¾°£¬EnvoyÓв»Í¬µÄ²¿Êð·½Ê½¡£

Service to service only

ÕâÊÇ×î¼òµ¥µÄ²¿ÊðºÍʹÓ÷½Ê½£¬ÔÚÕâÖÖ·½Ê½ÖÐ Envoy ×÷ΪÄÚ²¿ÓëÍⲿ·þÎñͨÐŵÄ×ÜÏß¡£Envoy Æô¶¯¶à¸ö listeners ÓÃÓÚ±¾µØÁ÷Á¿×ª·¢ºÍ·þÎñÓë·þÎñÖ®¼äµÄÁ÷Á¿×ª·¢¡£

ÉÏͼչʾÁË×î¼òµ¥µÄ Envoy ²¿Êð·½Ê½¡£ÔÚÕâÖÖ²¿Êð·½Ê½ÖÐ Envoy ³Ðµ£µÄÊÇSOA·þÎñÄÚ²¿Á÷Á¿µÄÏûÏ¢×ÜÏß½ÇÉ«¡£ÔÚÕâÖÖ³¡¾°ÖУ¬ Envoy »á±©Â¶Ò»Ð© listeners ÓÃÓÚ±¾µØÁ÷Á¿»òÕß±¾µØ·þÎñÓëÔ¶¶Ë·þÎñÖ®¼äÁ÷Á¿µÄת·¢¡£

listener ÀàÐÍ£º

Service to service egress listener

±¾µØ·þÎñµ½Ô¶¶Ë·þÎñµÄ³ö¿Ú listener¡£¸ÃÀàÐÍ listener »á¼àÌýÔÚij¸öÖ¸¶¨µÄ¶Ë¿ÚÉÏ£¬ËùÓÐÄÚ²¿Ó¦ÓóöÈ¥µÄÇëÇó¶¼Öض¨Ïòµ½¸Ã¶Ë¿ÚÉÏ£¬Óɸà listener ´¦Àí²¢×ª·¢µ½Ä¿µÄ·þÎñ¼¯Èº½Úµã¡£

ÀýÈ磺http://localhost:9001 »ò tcp://localhost:9001¡£ HTTP ºÍ gRPC ÀàÐÍÇëÇóʹÓà host header£¬HTTP/2ʹÓà authority header À´Ö¸¶¨·ÃÎʵÄÔ¶¶Ë·þÎñ¼¯Èº¡£ ÔÚÊý¾ÝÁ÷¾­ Envoy ¹ý³ÌÖÐ»á½øÐзþÎñ·¢ÏÖ¡¢¸ºÔؾùºâ¡¢ÏÞËٵȴ¦Àí¡£

±¾µØ Services Ö»ÐèÒªÖªµÀ±¾µØµÄEnvoy£¬ÎÞÐè¹ØÐÄËüÃÇ×Ô¼ºËù´¦µÄÍøÂçÍØÆË¼°»·¾³¡£

Service to service ingress listener

±¾µØ·þÎñµ½Ô¶¶Ë·þÎñµÄÈë¿Ú listener¡£¸Ã listener ÌṩԶ¶Ë Envoy µ÷Óñ¾µØ Envoy µÄ¶Ë¿Ú¡£

ÀýÈ磺http://localhost:9211¡£ ½øÈë±¾µØ Envoy µÄÇëÇó¶¼±»Â·ÓÉ/ÖØ¶¨Ïòµ½±¾µØ service µÄ¼àÌý¶Ë¿Ú¡£¸ù¾ÝÐèÒª£¬±¾µØµÄEnvoy »á½øÐÐһЩ»º´æ¡¢¶Ï·¼ì²éµÈ´¦Àí¡£

Optional external service egress listeners

ÓÐʱ£¬ÐèÒª·ÃÎÊÍⲿµÄ·þÎñ£¬´ËʱÐèÒªÌṩһ¸ö¶Ë¿ÚÌṩ·ÃÎÊ¡£ÒòΪ£¬ÓÐЩÍⲿ·þÎñSDK²»Ö§³Öhost headerµÄÖØÐ´À´Ö§³Ö±ê×¼µÄHTTP·´Ïò´úÀíÐÐΪ¡£

ÀýÈ磺http://localhost:9250 might be allocated for connections destined for DynamoDB.ÎÒÃǽ¨ÒéΪËùÓÐÍⲿ·þÎñʹÓñ¾µØ¶Ë¿Ú·ÓÉ£¬¶ø²»ÊÇʹÓÃÖ÷»ú·ÓɺÍרÓñ¾µØ¶Ë¿Ú·ÓÉ

Discovery service integration

¼¯³ÉÍⲿ·þÎñ·¢ÏÖ×é¼þÀ´Ìṩ·þÎñµ½·þÎñµÄ·¢ÏÖ¹¦ÄÜ¡£

service to service ģʽÅäÖÃÄ£°å

ÉÏͼչʾÁËÔÚ service to service ģʽǰÔö¼Ó Envoy ¼¯Èº×÷Ϊ7²ã·´Ïò´úÀíµÄ²¿Êðģʽ¡£

¸Ã²¿ÊðģʽÓÐÒÔÏÂÌØµã£º

TLS Ð¶ÔØ

ͬʱ֧³Ö HTTP/1.1 ºÍ HTTP/2

ÍêÕûµÄ HTTP 7²ã·ÓÉÖ§³Ö

ǰ¶ËµÄ Envoy ´úÀí¼¯ÈºÊ¹Óñê×¼µÄ ingress ¶Ë¿ÚÓëºó¶ËµÄ service to service ¼¯ÈºÍ¨ÐÅ¡£¶ÔÓÚºó¶Ë·þÎñ¼¯Èº½ÚµãʹÓ÷þÎñ·¢ÏÖ·½Ê½»ñÈ¡¡£Ç°¶ËµÄ Envoy ¼¯Èº½ÚµãÊÇÍêÈ«¶ÔµÈµÄÌṩ·þÎñ£¬Ã»ÓÐÈκβîÒì¡£

ÕâÖÖ·½Ê½ºÍ service to service ·½Ê½Ïà±È¶à³öÁË Ç°¶ËÆß²ã´úÀíµÄ²¿·Ö¡£¿ÉÒÔÊÊÅä¸ü¶àµÄʹÓó¡¾°¡£

Service to service plus front proxy ÅäÖÃÄ£°å

Ë«´úÀíģʽ

Ë«´úÀíģʽµÄÉè¼ÆÀíÄîÊÇ£º ¸ü¼Ó¸ßЧµÄÐ¶ÔØTLS¡¢¸ü¿ìËÙµÄÓëclient¶Ë½¨Á¢Á¬½Ó£¨¸ü¶ÌµÄTLSÎÕÊÖʱ¼ä£¬¸ü¿ìµÄTCPÓµÈû´°¿Úµ÷Õû£¬¸üÉٵĶª°üµÈµÈ£©¡£ ÕâЩÔÚË«´úÀíÉÏÐ¶ÔØTLSºóµÄÁ¬½Ó×îÖÕ¶¼»á¸´Óà ÒѾ­ÓëÊý¾ÝÖÐÐÄÍê³ÉÁ¬½Ó½¨Á¢µÄ HTTP/2 Á¬½Ó¡£

Service to service, front proxy, and double proxy ÅäÖÃÄ£°å

×ܽá

ÒÔÉϾÍÊÇServiceMesh Êý¾ÝÃæ°å EnvoyµÄ»ù±¾½éÉÜ¡£

 
   
3004 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

ÆóÒµ¼Ü¹¹¡¢TOGAFÓëArchiMate¸ÅÀÀ
¼Ü¹¹Ê¦Ö®Â·-ÈçºÎ×öºÃÒµÎñ½¨Ä££¿
´óÐÍÍøÕ¾µçÉÌÍøÕ¾¼Ü¹¹°¸ÀýºÍ¼¼Êõ¼Ü¹¹µÄʾÀý
ÍêÕûµÄArchimateÊÓµãÖ¸ÄÏ£¨°üÀ¨Ê¾Àý£©
Ïà¹ØÎĵµ

Êý¾ÝÖÐ̨¼¼Êõ¼Ü¹¹·½·¨ÂÛÓëʵ¼ù
ÊÊÓÃArchiMate¡¢EA ºÍ iSpace½øÐÐÆóÒµ¼Ü¹¹½¨Ä£
ZachmanÆóÒµ¼Ü¹¹¿ò¼Ü¼ò½é
ÆóÒµ¼Ü¹¹ÈÃSOAÂ䵨
Ïà¹Ø¿Î³Ì

ÔÆÆ½Ì¨Óë΢·þÎñ¼Ü¹¹Éè¼Æ
ÖÐ̨սÂÔ¡¢ÖÐ̨½¨ÉèÓëÊý×ÖÉÌÒµ
ÒÚ¼¶Óû§¸ß²¢·¢¡¢¸ß¿ÉÓÃϵͳ¼Ü¹¹
¸ß¿ÉÓ÷ֲ¼Ê½¼Ü¹¹Éè¼ÆÓëʵ¼ù