±à¼ÍƼö: |
±¾ÎÄÖ÷Òª½éÉÜ4ÖÖ½â¾ö·½°¸ÊµÏÖ²¿ÊðÔÚKubernetesÖеÄgRPC·þÎñµÄload
balancing¡£
±¾ÎÄÀ´×ÔÓÚ΢ÐŹ«Ö¤ºÅGo¿ª·¢´óÈ« £¬ÓÉ»ðÁú¹ûÈí¼þLinda±à¼¡¢ÍƼö¡£ |
|
¡¾µ¼¶Á¡¿ÔÆÔÉú΢·þÎñµÄgRPC·þÎñÈçºÎʵÏÖ¸ºÔؾùºâ£¿±¾ÎĶԳ£¼û4ÖÖ·½°¸×öÁËÏêϸ½éÉÜ¡£
¶ÔÓÚÓ¦ÓóÌÐò¿ª·¢ÈËÔ±À´Ëµ£¬gRPCÊÇÒ»ÖÖÔ½À´Ô½ÆÕ±éµÄÑ¡Ôñ¡£ÓëÖîÈçJSON-over-HTTPÖ®ÀàµÄÌæ´úÐÒéÏà±È£¬gRPC¿ÉÒÔÌṩһЩÏÔ×ŵĺô¦£¬°üÀ¨´ó·ù½µµÍ£¨·´ÐòÁл¯£©³É±¾£¬×Ô¶¯ÀàÐͼì²é£¬¸ñʽ»¯µÄAPIºÍ¸üÉÙµÄTCP¹ÜÀí¿ªÏú¡£

µ«ÊÇgRPC½¨Á¢ÔÚHTTP/2Ö®ÉÏ£¬²¢ÇÒHTTP/2Éè¼ÆÎª¾ßÓе¥¸ö³¤ÆÚTCPÁ¬½Ó£¬ËùÓÐÇëÇó¶¼ÔÚ¸ÃTCPÁ¬½ÓÉϽøÐжà·¸´Ó㨶à¸öÇëÇó¿ÉÒÔÔÚͬһʱ¼äÔÚͬһÁ¬½ÓÉÏ´¦Óڻ״̬£©¡£µ«ÊÇÕâÒ²Òâζ×Å
gRPC ÐèÒªÌØÊâµÄ load balancing¡£
±¾ÎÄÖ÷Òª½éÉÜ4ÖÖ½â¾ö·½°¸ÊµÏÖ²¿ÊðÔÚKubernetesÖеÄgRPC·þÎñµÄload balancing¡£
1£©¿Í»§¶Ëlb + Name Resolver + Headless Service
¸Ã½â¾ö·½°¸ÊµÏÖµÄÊǿͻ§¶Ë¸ºÔؾùºâ¡£ÊµÏÖgRPC¿Í»§¶Ë¸ºÔØÆ½ºâÐèÒªÁ½¸öÖ÷Òª×é¼þ: name resolver
ºÍ load balancing policy¡£

µ±gRPC¿Í»§¶ËÏëÒªÓëgRPC·þÎñÆ÷½øÐн»»¥Ê±£¬ËüÊ×Ïȳ¢ÊÔͨ¹ýÏò resolver ·¢³öÃû³Æ½âÎöÇëÇóÀ´½âÎö·þÎñÆ÷Ãû³Æ£¬½âÎö³ÌÐò·µ»ØÒѽâÎöIPµØÖ·µÄÁÐ±í¡£
µÚ¶þ²¿·ÖÊǸºÔØÆ½ºâ²ßÂÔ¡£±ÈÈçgRPC-Go¿âÖеÄÁ½¸öÄÚÖòßÂÔÊÇroundrobinºÍgrpclb²ßÂÔ¡£grpclb²ßÂÔͨ³£ÓëÍⲿ¸ºÔؾùºâÆ÷Ò»ÆðʹÓ᣻¹ÓÐÒ»¸öbase²ßÂÔ£¬Í¨³£ÓÃÓÚ¹¹½¨¸ü¸´ÔÓµÄÑ¡ÔñËã·¨¡£¶ÔÓÚ½âÎöÆ÷·µ»ØµÄÿ¸ö·Ç¸ºÔؾùºâÆ÷µØÖ·£¬¸ºÔؾùºâ²ßÂÔ¶¼»á´´½¨Ò»¸öµ½¸ÃµØÖ·µÄÐÂ×ÓÁ¬½Ó¡£È»ºó£¬¸Ã²ßÂÔ·µ»ØÒ»¸öÑ¡ÔñÆ÷£¬¸ÃÑ¡ÔñÆ÷Ϊ¿Í»§¶ËÌṩһ¸ö½Ó¿Ú£¬ÒÔ¼ìË÷ÓÃÓÚ½øÐÐRPCµ÷ÓõÄ×ÓÁ¬½Ó¡£
ĬÈÏgRPC ʹÓà dns ×÷ΪÆä resolver¡£ËùÒÔÎÒÃÇÐèҪΪÎÒÃǵÄÓ¦Óô´½¨Headless
Service ¡£¹ØÓÚHeadless Service£¬ÎÒÃÇÕâÀï²»×÷Ïêϸ½éÉÜ£¬´ó¼Ò¿ÉÒÔ²ÎÔĹٷ½Îĵµ¡£´´½¨
Headless Service µÄ·þÎñ£¬Kubernetes½«Ôڸ÷þÎñµÄDNSÌõÄ¿Öд´½¨¶à¸öA¼Ç¼£¬¶øÃ¿¸öA¼Ç¼ÓëÖ®¶ÔÓ¦µÄÊÇÒ»¸öPod
IP¡£
2£©¼¯ÖÐʽProxy
ͨ¹ý¼¯ÖÐʽµÄ´úÀíÀ´½â¾ögRPC ¸ºÔؾùºâÒ²ÊÇÒ»ÖÖÁ÷ÐеĽâ¾ö·½°¸¡£±ÈÈçµ±ÎÒÃǵĿͻ§¶Ë´¦ÓÚ¹«Íø£¬ÎÒÃdzöÓÚ°²È«µÄ¿¼Á¿£¬²»¿ÉÄܽ«
server ÅäÖÃΪ¹«Íø¿É·ÃÎÊ£¬´Ëʱ¼¯ÖÐʽLB¾Í·Ç³£ÊʺÏÕâÖÖ³¡¾°¡£

¶øÈç¹ûÎÒÃǵķþÎñÊDz¿ÊðÔÚ kubernetes ÖУ¬ÄÇôѡÔñÒ»¸öÖ§³ÖgRPCµÄIngress Controller
¾Í¿ÉÒÔÍêÃÀ½â¾öÎÊÌâ¡£
Ŀǰ»ùÓÚ Envoy ʵÏÖµÄ Ingress Controller ¾ùÖ§³ÖgRPCµÄ¸ºÔؾùºâ¡£±ÈÈç
Contour£¬Ambassador£¬ GlooµÈ¡£Envoy ÊÇÒ»¸ö¿ªÔ´Ó¦Óò㣨µÚ 7 ²ã£©´úÀí£¬ÌṩÐí¶à¸ß¼¶ÌØÐÔ¡£¿ÉÒÔ¿ÉÒÔʹÓÃËüÀ´ÖÕÖ¹
SSL/TLS Á¬½Ó²¢½« gRPC Á÷Á¿Â·Óɵ½Êʵ±µÄ Kubernetes ·þÎñ¡£
±ÈÈçÎÒÃÇÔÚÉú²ú»·¾³¾ÍÊÇʹÓÃContourÀ´½â¾ögRPC ·þÎñ¸ºÔؾùºâµÄÎÊÌâ¡£

¶øÈç¹ûÄãÇ¡ºÃÔËÐÐÔÚAwsÉÏ£¬ÄÇôÄã¿ÉÒÔÑ¡ÔñALB ingress Controller¡£
¸Ã·½°¸ÓÅÊÆÊǿͻ§¶ËÎÞÐ踴ÔÓµÄÅäÖ㬶ø ingress ÓÖÊÇ kubernetes ±¾ÉíµÄ¸ÅÄûÓÐÆäËû¸ÅÄîµÄÒýÈë¡£
3£©Service Mesh
ĿǰËùÓеÄService Mesh ½â¾ö·½°¸¶¼Ö§³ÖgRPC·þÎñ¡£°üÀ¨IstioµÈÒÔEnvoy×÷ΪÊý¾ÝÃæµÄ
Mesh ½â¾ö·½°¸ºÍ Linkerd µÈ·ÇEnvoy×÷ΪÊý¾ÝÃæµÄMesh¡£
Mesh·½°¸±¾ÖÊÉÏÒÀ¾ÉÊÇProxy¡£ºÍ¼¯ÖÐʽProxy¶Ô±È£¬Ö»Êǽ«ProxyϳÁµ½Ã¿¸öClient£¬ÒÔSidecarµÄÐÎʽ´æÔÚ¡£

¸Ã·½°¸±È½Ï¸´ÔÓ£¬²»¹ýMesh½â¾ö·½°¸ÊÇÒ»¸öÍêÕûµÄ·þÎñÖÎÀí·½°¸£¬¿ÉÒÔʵÏÖ³ýÁ˸ºÔؾùºâÖ®ÍâµÄÆäËû¹¦ÄÜ£¬±ÈÈç¹ÊÕÏ×¢È룬ÏÞÁ÷£¬È۶ϵȣ¬¶øÇҾ߱¸·á¸»µÄ¿É¹Û²ìÐÔºÍÀ©Õ¹ÐÔ£¬ÒÔ¼°Ò»¸öÁãÐÅÈεÄÍøÂç¡£Èç¹ûÄãÇ¡ºÃÔÚÉú²ú»·¾³Â䵨ÁËMesh£¬ÄÇô¸Ã·½°¸ÊÇÄã×î¼ÑµÄÑ¡Ôñ¡£
4£©ÎÞ´úÀí xds ¸ºÔؾùºâ
xDS ±¾ÉíÊÇEnvoyÖеĸÅÄÏÖÔÚÒѾ·¢Õ¹ÎªÓÃÓÚÅäÖø÷ÖÖÊý¾ÝÆ½ÃæÈí¼þµÄ±ê×¼¡£×îа汾µÄgRPCÒѾ֧³Ö
»ùÓÚxDSµÄ¸ºÔØÆ½ºâ£¬Ä¿Ç°ÎªÖ¹£¬gRPCÍŶÓÔö¼ÓÁ˶ÔC-core£¬JavaºÍGoÓïÑÔµÄÖ§³Ö¡£
ÔÚxDS APIÁ÷³ÌÖУ¬¿Í»§¶ËʹÓÃÒÔÏÂÖ÷ÒªAPI£º
Listener Discovery Service (LDS): ·µ»Ø¼àÌýÆ÷×ÊÔ´¡£»ù±¾ÉÏÓÃ×÷gRPC¿Í»§¶ËÅäÖõÄroot¡£Ö¸ÏòRouteConfiguration¡£
Route Discovery Service (RDS): ·µ»ØRouteConfiguration×ÊÔ´¡£ÌṩÓÃÓÚÌî³ägRPC·þÎñÅäÖõÄÊý¾Ý¡£Ö¸Ïò¼¯Èº¡£
Cluster Discovery Service (CDS): ·µ»Ø¼¯Èº×ÊÔ´¡£ÅäÖÃÖîÈç¸ºÔØÆ½ºâ²ßÂԺ͸ºÔر¨¸æÖ®ÀàµÄÄÚÈÝ¡£Ö¸ÏòClusterLoadAssignment¡£
Endpoint Discovery Service (EDS): ·µ»ØClusterLoadAssignment×ÊÔ´¡£ÅäÖÃÒ»×é¶Ëµã£¨ºó¶Ë·þÎñÆ÷£©ÒÔʵÏÖ¸ºÔؾùºâ£¬²¢¿ÉÄܸæË߿ͻ§¶Ë¶ªÆúÇëÇó¡£

ΪÁËÀûÓÃxDS¸ºÔؾùºâ£¬gRPC¿Í»§¶ËÐèÒªÁ¬½Óµ½xDS·þÎñÆ÷¡£¿Í»§¶ËÐèÒªÔÚÓÃÓÚ´´½¨gRPCͨµÀµÄÄ¿±êURIÖÐʹÓÃxds½âÎöÆ÷¡£ÏÂͼÏÔʾÁËAPIµ÷ÓõÄ˳Ðò¡£

xDS·þÎñÆ÷¸ºÔð·¢ÏÖgRPC·þÎñÆ÷µÄ¶Ëµã²¢½«Æä´«´ï¸ø¿Í»§¶Ë¡£È»ºó£¬¿Í»§¶Ë»á¶¨ÆÚÇëÇó¸üС£
ÎÒÃÇʹÓà Envoy go-control-plane¿âÀ´ÊµÏÖxDS server¡£¶ÔÓÚ²¿ÊðÔÚKubernetesÖеÄgRPCµÄ·þÎñ£¬ÎÒÃÇ¿ÉÒÔʹÓÃk8s
client-goÀ´·¢ÏÖÄ¿±êEndPoints¡£

Ïà¶ÔÓÚ ¿Í»§¶Ëlb + Name Resolver + Headless Service£¬Ä¿Ç°xds
¸ºÔؾùºâÖ§³ÖµÄÓïÑÔ²»¹»·á¸»£¬ÕâÊÇÎÒÃÇÑ¡Ôñ¸Ã·½°¸Ê±£¬²»µÃ²»¿¼ÂǵÄÎÊÌâ¡£
ÕâÊÇÒ»ÖÖÎÞproxyµÄ¿Í»§¶Ë¸ºÔؾùºâ·½°¸¡£¶Ô±ÈMesh·½°¸£¬ÐÔÄܸüºÃ¡£µ«ÊǸ÷½°¸³õÖÔÊÇ×÷ΪService
Mesh ·½°¸µÄÒ»ÖÖ²¹³ä£¬²¢²»ÊÇÓÃÀ´Ìæ»»Mesh¡£
ÔÚÒÔϵij¡¾°ÖУ¬Äã¿ÉÒÔ¿¼ÂÇʹÓÃÎÞProxyµÄ·½°¸£º
¸ßÐÔÄÜ gRPC Ó¦Óã¬Äã²»Ïë³Ðµ£ÒýÈëSidecar´øÀ´µÄÑÓ³Ù¡£
ÎÞ·¨²¿Êð Sidecar ´úÀíµÄ»·¾³
Òì¹¹·þÎñÍø¸ñ |