±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚ¾©¶«É̳ǻù´¡Æ½Ì¨²¿£¬±¾ÎÄÖ÷Òª½éÉÜÁ˾©¶«É̳ÇÉè¼ÆºÍʵ¼ùµÄÒ»Ì׸߿ɿ¿£¬¸ßÐÔÄܵĸºÔؾùºâÆ÷£¬ÎÒÃÇÃüÃûΪSKYLB¡£
|
|
ÕªÒª
Ëæ×ž©¶«ÒµÎñµÄ¸ßËÙÔö³¤£¬×÷ΪӦÓÃÈë¿ÚµÄ¸ºÔؾùºâ£¬´óÁ÷Á¿´ó²¢·¢´øÀ´µÄÌôÕ½Ô½À´Ô½ÑϾþ¡£±¾ÎÄÖ÷Òª½éÉÜÁ˾©¶«É̳ÇÉè¼ÆºÍʵ¼ùµÄÒ»Ì׸߿ɿ¿£¬¸ßÐÔÄܵĸºÔؾùºâÆ÷£¬ÎÒÃÇÃüÃûΪSKYLB¡£ÊÇÒ»¸öʹÓÃintel DPDK±¨ÎÄת·¢¿â£¬ÊµÏÖÔËÐÐÔÚͨÓÃX86·þÎñÆ÷ÉÏ×ÔÑеķֲ¼Ê½¸ºÔؾùºâ·þÎñ¡£ÅäºÏÍøÂç·ÓÉÆ÷µÄOSPF»òÕßBGPÐÒ飬×é³É³Ðµ£¾©¶«Êý¾ÝÖÐÐĺËÐÄËÄ²ã¸ºÔØ¾ùºâµÄ¼¯Èº¡£×î´óÏ޶ȵķ¢»ÓÆÕͨX86·þÎñÆ÷Ó²¼þ×ÊÔ´µÄÐÔÄÜ£¬ÊµÏÖÒ»Ì×ÊʺÏÓÚ¾©¶«É̳ÇÒµÎñµÄµÍ³É±¾£¬·Ö²¼Ê½£¬¸ßÐÔÄÜ£¬¿ÉÀ©Õ¹µÄÖÇÄܸºÔؾùºâϵͳ¡£
½éÉÜ
¾©¶«É̳ÇĿǰÊǹúÄÚ×î´óµÄµçÉÌÆóÒµ¡£¾©¶«µÄ»ú·¿ÄÚ²¿µÄÁ÷Á¿±¬Õ¨Ê½¿ìËÙµÄÔö³¤¡£ÔçÔÚ2016Äê³õ¾©¶«É̳ÇÒѾ½«ËùÓеÄÒµÎñϵͳȫ²¿Ç¨ÒƵ½ÈÝÆ÷ƽ̨JDOS£¬ÏßÉϰÙÍò+ÈÝÆ÷ʵÀýÎȶ¨ÔËÐС£´óÁ÷Á¿µÄ¸ºÔؾùºâµÄ·ÖÅäÏÔµÃÖÁ¹ØÖØÒª£¬Ò²ÊǾ©¶«É̳ÇÐÂÒ»´úÈí¼þ¶¨ÒåÊý¾ÝÖÐÐĵĹؼü»ù´¡·þÎñÉèʩ֮һ¡£
¸ºÔؾùºâÆ÷Ò»°ã½éÓÚÍøÂçÉϵÄ·ÓÉÆ÷Óëºó¶Ë·þÎñÆ÷Ö®¼ä£¬¸ºÔð½«Ã¿¸öÊý¾Ý°üͨ¹ýÒ»¶¨µÄ·þÎñÆ¥Å䣬½«Æäת·¢µ½ºó¶Ë·þÎñÆ÷½Úµã¡£³ä·Ö¿¼Âǵ½¾©¶«É̳ÇÊý¾ÝÖÐÐÄÈ«ÈÝÆ÷¼°È«Èý²ãBGP×éÍøµÄÄ£ÐÍ¡£ÒÔ¼°»ùÓÚDPDKµÄ¼¸ºõ´ïµ½Íø¿¨ÏÞËÙµÄÐÔÄÜ£¬ÎÒÃÇÔÚÉè¼Æ¸ºÔؾùºâʱ£¬½ö¿¼ÂÇʵÏÖÁËFULLNATģʽ£¬¼´³öÏòºÍÈëÏòµÄÁ÷Á¿¾ùͨ¹ý¸ºÔؾùºâÆ÷£¬»ù±¾Êý¾ÝÁ÷³ÌͼÈçÏÂͼ1Ëùʾ£º

ͼ1¸ºÔؾùºâÁ÷³Ìͼ
Ò»°ã¸ù¾ÝÒµÎñ¼°Á÷Á¿µÄ¹æÄ£µÄ²»Í¬½×¶ÎÀ´Ñ¡ÔñʹÓò»Í¬µÄ¸ºÔؾùºâ£¬Í¨³£ÎÒÃÇÔÚ¸ºÔؾùºâµÄÑ¡ÔñÉÏ´óÖÂÓÐÒÔÏÂÁ½¸ö·½Ïò£º1)Ó²¼þ¸ºÔؾùºâ£¬ÈçF5¡£CitrixNetscalerµÈ£»2)Èí¼þ¸ºÔؾùºâ£¬Èç»ùÓÚLVS£¬Haproxy£¬NginxµÈ¿ªÔ´Èí¼þÀ´ÊµÏֵĸºÔؾùºâ¡£¶ÔÓÚÉÏÊöÁ½ÖÖ¸ºÔؾùºâµÄÑ¡Ôñ£¬¸÷ÓÐÓÅȱµã£¬ÈçÏ£º
1£©Ó²¼þ¸ºÔؾùºâ
¿ÉÀ©Õ¹ÐÔÊÜÏÞ£¬ÎÞ·¨¸úÉÏÒµÎñÁ÷Á¿Ôö³¤µÄÐèÇó¡£ÒÔ¼°Èç618¡¢Ë«Ê®Ò»´ó´ÙµÈ˲¼äÁ÷Á¿¸ß·å¡£
ËäÈ»¿ÉÒԳɶԲ¿Êð±ÜÃâµ¥µã¹ÊÕÏ£¬µ«ÊÇÒ»°ãÖ»ÄÜÌṩ1+1ÈßÓà¡£
ȱ·¦»¥ÁªÍø¿ìËÙµü´úµÄÁé»îÐÔ£¬Éý¼¶³É±¾°º¹ó¡£
Ò»°ãÖ»Äܸù¾ÝÍøÂçµÄÇé¿öÀ´É趨¸ºÔؾùºâ£¬Î޹غõʵ¼ÊϵͳºÍÓ²¼þµÄÇé¿ö¡£
³É±¾½Ï¸ß¡£
2£©»ùÓÚ¿ªÔ´Èí¼þµÄ¸ºÔؾùºâ
¿ÉÒÔ¸ù¾Ýʵ¼ÊϵͳºÍÓ¦ÓõÄ״̬À´ºÏÀíµÄ¸ºÔØ£¬µü´ú¡¢À©ÈݺͲ¿ÊðÏà¶Ô·½±ã¡£
µ¥Ì¨¸ºÔؾùºâÐÔÄÜÏà¶Ô½Ï²î£¬ÐèÒªÓü¯ÈºÀ´Ö§³Å¸ºÔؾùºâµÄÕûÌåÐÔÄÜ¡£
ÐԼ۱Ƚϵ͡£
ÎÒÃǵÄÄ¿±ê£º
- Éè¼ÆÊµÏÖÒ»Ì׸߿ɿ¿¡¢¸ßÐÔÄÜ¡¢Ò×ά»¤¼°ÐԼ۱ȸߵÄL4¸ºÔؾùºâϵͳ,¡£
- »ùÓÚͨÓÃX86_64·þÎñÆ÷¿ò¼Ü£¬ÒÔ¼°Ö§³ÖDPDKÍø¿¨Ó²¼þ£¬Ò׿ª·¢ºÍÒÆÖ²¡£
- ·½±ã²¿Êð¡¢É¾³ýºÍά»¤£¬¼¯³Éµ½¾©¶«Èí¼þ¶¨ÒåÊý¾ÝÖÐÐÄ£¨JDOS2.0£©ÏµÍ³£¬×÷Ϊ¾©¶«ÏÂÒ»´úÈí¼þ¶¨ÒåÊý¾ÝÖÐÐĵĻù´¡×é¼þ¡£
- ¸ºÔؾùºâϵķþÎñÆ÷»ùÓÚϵͳӦÓøºÔØÁ÷Á¿¾ù̯£¬¸ºÔؾùºâÆ÷ÌṩN+1 ÈßÓ࣬½èÖúOSPF/BGP¿ØÖƸºÔؾùºâÆ÷µÄÁ÷Á¿¸ºÔØ¡£
- »ùÓÚϵͳӦÓü¶±ðµÄ̽»î£¬×Ô¶¯¹ÊÕϼì²â¼°Á÷Á¿¿ìËÙ»Ö¸´¡£
±¾ÎÄÖ÷Òª½éÉÜÁËSKYLBÒ»ÖÖ»ùÓÚDPDKƽ̨ʵÏֵĿìËÙ¿É¿¿µÄÈí¼þÍøÂç¸ºÔØ¾ùºâϵͳ¡£²»½ö¿ÉÒÔ¿ìËٵĺáÏòÀ©Õ¹£¬»¹¿ÉÒÔ×î´óÏ޶ȵÄÌáÉý¸ºÔؾùºâµ¥¸öNICµÄ´¦Àíת·¢ËÙ¶È£¬À´ÊµÏÖL4µÄ¸ºÔؾùºâ¡£½èÖúDPDKµÄÓÅÊÆ£¬Èç±ãÀûµÄ¶àºË±à³Ì¿ò¼Ü¡¢¾ÞÒ³ÄÚ´æ¹ÜÀí¡¢ÎÞËø¶ÓÁС¢ÎÞÖжÏpoll-mode Íø¿¨Çý¶¯¡¢CPUÇ׺ÍÐԵȵÈÀ´ÊµÏÖ¿ìËÙµÄÍø¿¨ÊÕ·¢¼°´¦Àí±¨ÎÄ£¬ºóÐø¿¼ÂÇTCP/IP Óû§Ì¬ÐÒéʵÏÖºÍÓÅ»¯£¬½ø¶øÊµÏÖL7¸ºÔؾùºâ¡£
ϵͳ¸ÅÀÀ
¹¤×÷³¡¾°
SKYLB²¿ÊðÔÚ¾©¶«ÈÝÆ÷¼¯ÈºJDOSµÄǰ¶Ë£¬¶ÔÓÚÒ»¸öÓ¦Óü¯Èº£¬·¢²¼Ò»¸ö»ò¶à¸öVIPµ½SKYLB·þÎñÉÏ£¬µ±¿Í»§¶ËÐèÒª·ÃÎÊÓ¦ÓýÚ×ÊÔ´URL£¬Ê×ÏÈͨ¹ýÓòÃû·ÃÎÊJDÖÇÄÜ·Ö²¼Ê½DNS·þÎñ£¨SKYDNSÏê¼ûhttps://github.com/ipdcode/skydns£©, SkyDns»áÖÇÄÜ·µ»Øµ±Ç°×î½üÇÒ״̬Õý³£ÇÒ¸ºÔØÕý³£µÄVIP·þÎñµÄIP,¿Í»§¶Ë¾Í»áÏòVIPÈ¥ÇëÇóÁ¬½Ó¡£
SKYLB½ÚµãÉÏÔËÐÐÁËÒ»¸ö·ÓÉ·¢²¼·þÎñagent£¬ÎÒÃÇʹÓøÃagentÓ뿪ÆôOSPF/BGPµÄ·ÓÉÆ÷×ö·Óɽ»»¥£¬µ±SKYLBµÄÉϲã·ÓÉÆ÷½ÓÊÕµ½ÇëÇóVIPµÄÊý¾Ý°üʱ£¬Â·ÓÉÆ÷ͨ¹ý£¨OSPF/BGP£©µÄµÈ¼Û¶à·¾¶×ª·¢ÐÒéÑ¡ÔñÒ»¸ö¿ÉÒÔʹÓõķ¢²¼¸ÃVIPµÄSKYLB½Úµã£¬½«±¨ÎÄת·¢¸øÒ»¸öSKYLB½Úµã¡£Í¨¹ýÕâÖÖ²ßÂÔÀ´ÊµÏÖVIPµÄ·¢²¼ºÍºáÏòÈÝÁ¿¸ºÔØÄÜÁ¦À©Õ¹¡£
µ±±¨ÎÄͨ¹ýÉÏÊö²½Öèµ½´ïSKYLB¸ºÔؾùºâºó£¬Í¨¹ý³£ÓõĸºÔؾùºâ²ßÂÔ(round robin£¬Ò»ÖÂÐÔhash £¬×îСÁ¬½ÓÊý)£¬½«Êý¾Ý°üË͵½ÏàÓ¦µÄºó¶ËÈÝÆ÷·þÎñ¡£
ϵͳ¼Ü¹¹
JingdongDatacenter Operating System(JDOS) ÊÇ»ùÓÚJDOSÌṩÎïÀí»ú/ÐéÄâ»ú/ÈÝÆ÷µÄͳһ¹ÜÀíϵͳ¡¢Å䱸Áé»îµÄÍøÂ绥Á¬¡¢¿É¿¿µÄ·Ö²¼Ê½¹²Ïí´æ´¢£¬ÊµÏÖÈí¼þ¶¨ÒåÊý¾ÝÖÐÐĵļÆËã×ÊԴͳһ¹ÜÀíºÍ¼¯Èº¹ÜÀí¡£Í¨¹ýʹÓÃJDOS£¬¿ÉÒÔÖ±½ÓѸËٵõ½ÈÎÒâÐèÒªµÄ¼ÆËã¡¢´æ´¢¡¢ÍøÂç¡¢°²È«µÈ·½ÃæµÄ×ÊÔ´ºÍÄÜÁ¦¡£SKYLB×÷ΪÕû¸öJDOSϵͳµÄÒ»¸öÖØÒª×é³É²¿·Ö£¬¸ºÔðÌṩ¼¯ÈºµÄL4¸ºÔؾùºâÄÜÁ¦£¬Í¨¹ýrestful APIµÈ½Ó¿ÚÓëJDOSϵͳ½»»¥¡£Óû§¿ÉÒÔͨ¹ýͳһµ÷¶È¹ÜÀíÆ½Ì¨±ã½ÝµÄ´´½¨¡¢É¾³ý¡¢Ç¨ÒƸºÔؾùºâϵͳ¡£Í¬Ê±¶à¸öÓ¦Ó÷þÎñ½øÐÐÁ÷Á¿·Ö·¢µÄ¸ºÔؾùºâ·þÎñ£¬´Ó¶øÀ©Õ¹Ó¦ÓÃϵͳ¶ÔÍâµÄ·þÎñÄÜÁ¦£¬²¢ÇÒͨ¹ýÏû³ýµ¥µã¹ÊÕÏÌá¸ßÓ¦ÓÃϵͳµÄ¿ÉÓÃÐÔ¡£
ϵͳµÄ»ù±¾¼Ü¹¹ÈçÏÂͼ2Ëùʾ£¬Ã¿Ò»¸ö¼¯ÈºÅ䱸һ×é¿ÉÈÝÔֵĸºÔؾùºâ¿ØÖÆÖÐÐÄ,Ö÷Ҫͨ¹ýrestful api½Ó¿Ú¸ºÔðÓëJDOSµ÷¶ÈÖÐÐĽ»»¥£¬½ÓÊÕvipµÄÅäÖÃÇëÇó¡£Í¬Ê±ÎÒÃÇÔÚÿһ¸öSKYLBµÄ½ÚµãÉÏÔËÐÐÒ»¸ö´úÀí½ø³Ì£¬¸Ã´úÀí½ø³Ìͨ¹ýgRPCÓë¿ØÖÆÖÐÐÄÁ¬½Ó¡£½ÓÊÕ¿ØÖÆÖÐÐÄÏ´ïµÄ´´½¨¼°É¾³ývip,ºó¶Ëserver endpoint·þÎñµÈһϵÁÐÖ¸Áͨ¹ýload balancer ÌṩµÄÃüÁîÐÐÖ´ÐÐÏàÓ¦µÄÖ¸Áî¡£½ÓÊÕload balancer ¹ØÓÚÁ÷Á¿¼°±¨ÎÄµÄ¼à¿ØÐÅÏ¢£¬¶ÔÓÚÁ÷Á¿¼°¼à¿Ø½øÐи澯£¬²¢ÇÒ֪ͨ¿ØÖÆÖÐÐĺ͵÷¶ÈÖÐÐĽøÐÐÀ©ÈݵȲÙ×÷¡£
´úÀí½ø³Ìͬʱ»¹¸ºÔðºó¶Ë·þÎñ server endpoint»ùÓÚ·þÎñ¿ÉÓÃÐԵĽ¡¿µ¼ì²é£¬¼°Ê±¸ù¾Ýºó¶Ë·þÎñµÄ״̬ͨ¹ýÃüÁîÐнøÐÐÌí¼ÓºÍɾ³ýµÄ²Ù×÷¡£

ͼ2ϵͳ¼Ü¹¹Í¼
ÓÅÊÆ
1£©À©Õ¹ÐÔ
Ö§³Ö¶¯Ì¬Ìí¼ÓºÍɾ³ýºó¶Ë·þÎñµÄÈÝÆ÷£¬ÊµÏÖÎÞ·ìµÄÉìËõ£»ÔÚÉ죬Ëõ¹ý³ÌÖУ¬¶ÔÏà¹Øµ÷ÓúͷÃÎÊÕßÎÞÓ°Ïì¡£
2£©¸ß¿ÉÓÃÐÔ
Ìṩ¶à»î¸ºÔؾùºâ£¬Óжà¸öVIP£¬ËüÃǶÔÓ¦Ò»¸öÓòÃû£¬×ÔÑÐDNS·þÎñSKYDNS»á¸ù¾ÝÇëÇóµÄ¿Í»§¶ËIPÖÇÄܽâÎö¿ÉÓõÄVIP£¬·µ»Ø¸øÓû§£¬´Ó¶øÊµÏÖ¸ü¸ßµÄ¿ÉÓÃÐÔ£»¼´Ê¹Ò»¸öVIP²»¿ÉÓã¬Ò²²»»áÓ°ÏìÒµÎñϵͳ¶ÔÍâÌṩ·þÎñ¡£Í¬Ê±½èÖúOSPF/BGPµÈÐÒéʵÏÖ¸ºÔؾùºâµÄºáÏòÀ©³ä
3£©·þÎñÄÜÁ¦×Ô¶¯¿Éµ÷
SKYLB¸ù¾ÝVIPʵ¼Ê½ÓÊÕÁ÷Á¿µÄ¸ºÔØÐèÒªµ÷Õû¸ºÔؾùºâµÄ·þÎñÄÜÁ¦£¬±ÈÈçÁ÷Á¿¡¢Á¬½ÓÊýµÄ¿ØÖƵÈÖ¸±ê¡£
¹¦ÄÜÌØµã
1£©ÐÒéÖ§³Ö
¸ºÔؾùºâÖ§³Ö°üº¬TCP¡¢UDPÐÒéµÄËÄ²ã¸ºÔØ¾ùºâ£¬Å䱸½¡È«µÄÁ´Â·¸ú×Ù»úÖÆ£¬ÒÔ¼°¶àÖÖµ÷¶È²ßÂÔ£¬Óû§¿ÉÒÔ¸ù¾Ý·þÎñµÄÐèÒª´´½¨ºÏÊÊ×Ô¼ºµÄ¸ºÔؾùºâ¡£
2£©¸ß¿ÉÓÃÐÔ
Ö§³ÖÈÝÆ÷µÄ½¡¿µ¼ì²é£¬³ý´«Í³µÄIP+Port£¬²¢¼ÓÈë¶ÔURL¼ì²é£¬±£Ö¤Ó¦ÓÿÉÓÃÐÔ£º ½¡¿µ¼ì²éƵÂÊ¿É×Ô¶¨Ò壻һµ©Ì½²âµ½Òì³££¬Ôò²»»á½«Á÷Á¿ÔÙ·ÖÅäµ½ÕâЩÒ쳣ʵÀý£¬±£Ö¤Ó¦ÓÿÉÓÃÐÔ¡£
3£©¼¯Èº²¿Ê𣬶à²ã´ÎÈÝ´í»úÖÆ£º ¸ºÔؾùºâ²ÉÓü¯Èº²¿Êð£¬Ö§³ÖÈÈÉý¼¶£¬»úÆ÷¹ÊÕϺͼ¯ÈºÎ¬»¤¶ÔÓû§Íêȫ͸Ã÷£¬½áºÏDNSʹÓû¹¿ÉÖ§³ÖÈ«¾Ö¸ºÔؾùºâ¡£
4£©Áé»îÐÔ
Ö§³Ö¶àÖÖÁ÷Á¿µ÷¶ÈËã·¨£¬Ê¹µÃÁ÷Á¿·ÖÅä¸ü¾ùÔÈ£º ¸ºÔؾùºâÖ§³Ö¼ÓȨÂÖѯºÍ×îСÁ¬½ÓÊýÕâÁ½ÖÖµ÷¶ÈËã·¨£¬¿É¸ù¾Ý×ÔÉíÐèÇóÑ¡ÔñÏàÓ¦µÄËã·¨À´·ÖÅäÓû§·ÃÎÊÁ÷Á¿£¬²¢Ö§³ÖÉèÖúó¶ËÈÝÆ÷È¨ÖØ£¬Ê¹µÃÁ÷Á¿µ÷¶È¸ü¾ùÔÈ£¬ÌáÉý¸ºÔؾùºâÄÜÁ¦¡£
Ö§³Ö»á»°±£³Ö£¬Âú×ãÓû§¸öÐÔ»¯ÐèÇó£º ¸ºÔؾùºâͨ¹ýIPµØÖ·ÊµÏֻỰ±£³Ö£¬¿É½«Ò»¶¨Ê±¼äÄÚÀ´×ÔͬһÓû§µÄ·ÃÎÊÇëÇó£¬×ª·¢µ½Í¬Ò»¸öºó¶ËÈÝÆ÷ÉϽøÐд¦Àí£¬´Ó¶øÊµÏÖÓû§·ÃÎʵÄÁ¬ÐøÐÔ¡£
5£©Ò×ÓÃÐÔ
Ìṩ¶àÖÖ¹ÜÀí;¾¶£¬ÇáËɲÙ×ݸºÔؾùºâ£º Óû§¿Éͨ¹ý¿ØÖÆÌ¨ÇáËÉʵÏÖ¸ºÔؾùºâÆ÷µÄÅäÖá¢Êͷŵȹ¦ÄÜ¡£ºóÐø»á¿ª·Å±ê×¼µÄAPI»òSDKÌṩ¸øÓû§£¬´Ó¶ø×Ô¼º¿ª·¢¶Ô¸ºÔؾùºâµÄ¿ØÖƹÜÀí¡£
ϵͳÉè¼Æ¼°¼¼ÊõʵÏÖ
¸ºÔؾùºâģʽѡÔñ
³£ÓõĸºÔؾùºâģʽÓÐDR£¬NAT£¬TUNNEL£¬FULLNAT¡£Ã¿ÖÖģʽ¶¼ÓÐ×Ô¼ºµÄÓÅÊÆºÍʹÓó¡¾°£¬ÒµÄÚ¶ÔÿÖÖģʽµÄ·ÖÎö±È½ÏÎĵµºÜ¶à£¬²»ÔÙ½éÉÜ¡£ÓÉÓÚJDOSÈÝÆ÷ÍøÂçÐèÒªVLAN¸ôÀ룬¶øFULLNAT¸ÕºÃÖ§³ÖLBºÍRS¿çVLANͨÐÅ£¬½áºÏÎÒÃÇ×ÔÉíÈÝÆ÷¼¯ÈºµÄÐèÇó£¬ÎÒÃÇÔÚʵÏÖSKYLBʱÖ÷Òª¿¼ÂÇÖ§³ÖFULLNATģʽ¡£Í¼3ÊÇSKYLBµÄFULLNAT¸ºÔؾùºâģʽÖÐÊý¾Ý°üµÄÁ÷Ïòͼ¡£SKYLBλÓÚ¿Í»§¶ËºÍºó¶Ë·þÎñÖ®¼ä£¬¶ÔÓÚ¿Í»§¶ËµÄÇëÇó±¨ÎÄ£¬½«Ä¿µÄµØÖ·Ìæ»»³Éºó¶Ë·þÎñµÄµØÖ·£¬Ô´µØÖ·Ìæ»»³ÉSKYLBµÄ±¾µØµØÖ·£¬¶ÔÓÚºó¶Ë·þÎñµÄÏìÓ¦±¨ÎÄ£¬½«Ä¿µÄµØÖ·Ìæ»»³É¿Í»§¶ËµØÖ·£¬Ô´µØÖ·Ìæ»»³ÉSKYLBµÄVIPµØÖ·¡£

ͼ3 FULLNATģʽÏÂSKYLBµÄÊý¾Ý°üÁ÷Ïòͼ
½èÖúDPDKʵÏÖ¸ßËÙת·¢
Data Plane DevelopmentKit£¨DPDK£©£ºÊÇÔËÐÐÔÚLinux Óû§Ì¬£¬ÊµÏÖX86ͨÓÃÆ½Ì¨ÍøÂ籨ÎÄ¿ìËÙ´¦ÀíµÄ¿âºÍÇý¶¯µÄ¼¯ºÏ£¬ÈçÏÂͼ4Ëùʾ£¬ÆäÖ÷ÒªÌØµã£º
¶àºË±à³Ì¿ò¼Ü¼°CPUÇ׺ÍÐÔ
ÿ¸öNUMA½ÚµãÓе¥¶ÀµÄCPUºÍ±¾µØÄÚ´æ
CPU·ÃÎʱ¾µØÄÚ´æËٶȱȷÃÎÊÔ¶¶ËÄÚ´æ¿ì£¬±ÜÃâCPU·ÃÎÊÔ¶¶ËÄÚ´æ
×¢ÒâÍø¿¨¹ÒÔØµÄNUMA½Úµã¾ÞÒ³ÄÚ´æ¹ÜÀí
¾ÞÒ³(HugePage)
ÆÕͨÄÚ´æÒ³Ãæ´óС4KB£¬¾ÞÒ³ÄÚ´æÒ³Ãæ´óС2MB/1GB
¼õÉÙÒ³±íÏîÊýÄ¿£¬½µµÍTLB miss
ʹÓôóÒ³Ãæ±ÈʹÓÃ4KµÄÒ³ÃæÐÔÄÜÌá¸ß10%~15%
Á㿽±´£¬±¨ÎÄÊý¾Ý¼°×ª·¢ÄÚ´æÁ㿽±´¡£
ÎÞËø¶ÓÁÐ
ʹÓÃÎÞËø¶ÓÁУ¬Èë¶Ó³ö¶ÓÎÞÐè×èÈûµÈ´ýËø×ÊÔ´
poll-modeÍø¿¨Çý¶¯
DPDKÍø¿¨Çý¶¯ÍêÈ«ÅׯúÖжÏģʽ£¬»ùÓÚÂÖѯ·½Ê½ÊÕ°ü

ͼ4 DPDKÏà¹ØÄ£¿é
°ü´¦Àí¼Ü¹¹ÊµÏÖ
ͼ5ÊÇSKYLB»ùÓÚRTCÊý¾Ý°ü´¦ÀíÄ£ÐÍʵÏֵļܹ¹¡£SKYLBÑ¡ÔñÒ»¸öºË×÷Ϊ¿ØÖƺˣ¬Ö´ÐÐÃüÁîÅäÖã¬ÓëÄں˽»»»£¬ARP±íά»¤µÈÈÎÎñ¡£ÆäËûµÄºË×÷Ϊ¹¤×÷ºË£¬Ã¿¸ö¹¤×÷ºËÂÖÑ¯Íø¿¨µÄÒ»¸öRX¶ÓÁУ¬Ö´ÐÐÊý¾Ý°ü´¦ÀíÈÎÎñ¡£SKYLBÀûÓÃÍø¿¨µÄRSS¹¦ÄÜʵÏÖ¿Í»§¶ËÇëÇó±¨ÎĵķÖÁ÷£¬ÀûÓÃÍø¿¨FDIR¹¦ÄÜʵÏÖºó¶Ë·þÎñÏìÓ¦±¨ÎĵķÖÁ÷¡£SKYLB¶Ô±¨ÎÄ·ÖÁ÷Ä¿µÄÊÇÒª±£Ö¤¿Í»§¶ËµÄÇëÇó±¨ÎÄºÍÆä¶ÔÓ¦µÄ·þÎñ¶ËÏìÓ¦±¨Îĵ½´ïͬһ¸ö¹¤×÷ºËÉÏ¡£ÔÚÕâ¸öÄ¿µÄ´ï³ÉµÄǰÌáÏ£¬SKYLBµÄÒµÎñʵÏÖ»á¼òµ¥ºÍ¸ßЧºÜ¶à¡£Ã¿¸ö¹¤×÷ºËά»¤Ò»ÕÅsession±í£¬Í¬ÓÚ±£´æ¿Í»§¶ËºÍºó¶Ë·þÎñµÄÁ¬½ÓÐÅÏ¢¡£SKYLB²»ÐèÒª¿¼ÂǶÔsession±í¼ÓËø£¬ÒòΪÿ¸ö¹¤×÷ºËµÄsession±í¶¼ÊǶÀÁ¢µÄ¡£

ͼ5 SKYLBµÄRTC°ü´¦ÀíÄ£ÐÍ¿ò¼Üͼ
ÎÒÃÇÉè¼ÆSKYLBÿ¸ö¹¤×÷ºË¶ÀÕ¼ÖÁÉÙÒ»¸öLIP£¬²¢½«LIPÐÅϢдÈëÍø¿¨ÅäÖá£Í¼6ÊÇÍø¿¨¶ÔIP±¨ÎÄ·ÖÁ÷µÄÁ÷³Ìͼ¡£Í¼ÖÐdst_ip¼´SKYLBΪÿ¸ö¹¤×÷ºË·ÖÅäµÄLIP¡£Íø¿¨¶Ôºó¶Ë·þÎñÏìÓ¦±¨ÎĵÄÄ¿µÄµØÖ·LIPÆ¥Åä³É¹¦£¬½«±¨ÎÄË͵½°ó¶¨µÄRX¶ÓÁУ¬Ã»ÓÐÆ¥ÅäµÄ±¨ÎÄÔò¿ÉÒÔÈÏΪÊǿͻ§¶ËµÄÇëÇó±¨ÎÄ£¬°´RSSÁ÷³Ì·ÖÅäRX¶ÓÁС£

ͼ6 Íø¿¨¶ÔIP±¨ÎÄ·ÖÁ÷¹ý³Ìͼ
SKYLBÔÚÆô¶¯¹ý³ÌÖл¹»áΪÿ¸öÎïÀí¿Ú´´½¨Ò»¸öKNI½Ó¿Ú£¬¿ØÖƺ˸ºÔðÂÖѯKNI½Ó¿Ú¡£¸Ã½Ó¿ÚÖ÷ÒªÓÃÓÚÍⲿ³ÌÐòquaggaÏò·ÓÉÆ÷·¢²¼VIPÐÅÏ¢£¬Agent¼ì²éºó¶Ë·þÎñ½¡¿µ×´Ì¬¡£
SKYLBĿǰ֧³ÖµÄ¸ºÔؾùºâµ÷¶ÈËã·¨ÓÐÒ»ÖÂÐÔhash£¬round robinºÍ×îСÁ¬½ÓÊýËã·¨¡£
SessionÎåÔª×飬SKYLB²ÉÓÃÎåÔª×éÀ´ÊµÏֻỰµÄ¹ÜÀí¹¦ÄÜ£¬ÈçÏÂͼ7 Ëùʾ£º

ͼ7 SKYLB ÎåÔª×é¹ÜÀíSession
¸ºÔؾùºâÈßÓàÉè¼Æ
SKYLBʹÓÃBGP»òÕßOSPFµÄģʽ×é³É¼¯Èº£¬Í¨¹ýÉÏÊöÐÒ齫Êý¾Ý°üÉ¢Áе½¼¯ÈºÖи÷¸ö½ÚµãÉÏ£¬±£Ö¤µ¥Ì¨SKYLB¹ÊÕÏ»òÕ߻ָ´ºóÄܶ¯Ì¬µÄ½«»úÆ÷Ìí¼Ó¼°É¾³ý¡£ÆäÈßÓàʵÏÖÉè¼ÆÈçÏÂͼ6Ëùʾ£º

ͼ8 SKYLBµÄÈßÓàÉè¼Æ
ÐÔÄÜÓÅ»¯Êµ¼ù
Á¼ºÃµÄÁ÷³ÌÉè¼ÆÊÇÐÔÄÜÌáÉýµÄ¹Ø¼ü£¬Õâ·½ÃæµÄÁ÷³ÌÉæ¼°ºÍÒµÎñÏà¹Ø£¬È±·¦¹²ÐÔ£¬Òò´Ë²»×öÏêϸ²ûÊö¡£Ö÷Òª½éÉÜSKYLBÐÔÄÜÓÅ»¯¹ý³ÌÖÐʹÓÃµÄÆäËûÓÅ»¯·½·¨¡£
Ç¡µ±µØÊ¹ÓÃrte_prefetch0()£¬¿ÉÒÔ¼õÉÙcache-miss´ÎÊý£¬±ÜÃ⵱ǰº¯Êý³ÉΪÐÔÄÜÈȵ㡣ÐÔÄܵ÷ÓŹ¤¾ßperf¿ÉÒÔ°ïÖúÎÒÃÇ·ÖÎöÓ¦¸ÃÔÚÄÄ´¦´úÂëʹÓÃԤȡ¡£ÀýÈçÎÒÃÇʹÓÃperf·¢ÏÖ±¨ÎÄ´¦Àíº¯ÊýÖÐÓÐÒ»¸ö´¦´úÂëÊÇÐÔÄÜÈȵ㣬¸Ã´úÂëÓÃÓÚ¶Áȡб¨ÎĵÄÀàÐÍ×ֶβ¢Åжϣ¬·ÖÎöÈÏΪºÜ¿ÉÄÜÊÇcache-missesÔì³ÉµÄ¡£ÔÚ½øÈ뱨ÎÄ´¦Àíº¯ÊýǰʹÓÃrte_prefetch0()£¬ÓÐЧ±ÜÃâ¸Ãº¯Êý³ÉΪÈȵ㡣
Ç¡µ±µØÊ¹ÓÃlikely()ºÍunlikely()£¬¿ÉÒÔ¼õÉÙ·ÖÖ§Ô¤²âʧ°ÜµÄ´ÎÊý¡£ÎÒÃÇÔÚSKYLB´úÂëµÄÒ»´¦·ÖÖ§Óï¾äÖÐʹÓÃunlikely()ÓÅ»¯£¬ÐÔÄÜÌáÉýÃ÷ÏÔ¡£·ÖÖ§Ô¤²âÓÅ»¯µã¿ÉÒÔ½èÖúperf·ÖÎöÈ·¶¨£¬Ò²¿ÉÒÔ¸ù¾Ý×Ô¼º¶Ô´úÂëÖ´ÐÐÁ÷³ÌµÄÀí½âÈ·¶¨¡£
¾¡Á¿¼õÉÙËøµÄʹÓá£SKYLBÖÐÅäÖÃÐÅÏ¢²»¾³£±ä»¯£¬ÎÒÃÇûÓе¥¶ÀΪÿ¸ö¿ÉÄÜÕùÓõÄ×ÊÔ´¼ÓËø£¬¶øÊÇÖ»ÓÃÒ»°ÑDPDKÌṩµÄ¶ÁÐ´Ëø£¬Ã¿¸ö¶ÁÏß³ÌÔÚ¼Ó¶ÁËøºó£¬´¦ÀíÒ»Åú±¨ÎÄ£¬È»ºóÊͷŶÁËø¡£¼È¼ò»¯Á÷³Ì£¬ÓÖ¼õÉÙÁ˲Ù×÷¶ÁÐ´ËøµÄ¿ªÏú(DPDK¶ÁÐ´ËøµÄ¿ªÏú²¢²»ÊǺܴó)¡£
ÐÔÄÜÊý¾Ý
²âÊÔ»·¾³£º
CPU£ºIntel(R) Xeon(R) CPU E5-2640 v3
NIC£ºintel 82599ES 10-GigabitSFI/SFP+ Network Connection
²âÊÔÅäÖãº
¸ºÔؾùºâģʽ£ºFULLNAT
µ÷¶ÈËã·¨£ºÒ»ÖÂÐÔhash
ÅäÖãºCPUÕ¼ÓÃ8ºË ÄÚ´æÕ¼ÓÃ4G
ÐÔÄܲâÊÔÊý¾Ý£º
1£©UDP·¢°ü£¬²âÊÔת·¢ÐÔÄÜ£¬ÎÒÃÇʹÓÃÁËSKYDNS×÷Ϊºó¶Ë·þÎñ£¬¿Í»§¶Ë²ÉÓÃUDPÇëÇóDNS

±í1 SKYLB»ùÓÚUDPµÄDNSÐÔÄܲâÊÔÊý¾Ý
2£©NGINX×÷Ϊºó¶Ë·þÎñ£¬Ñ¹²âHTTPÐÔÄÜ¡£
ÅäÖãºCPUÕ¼ÓÃ8ºË ÄÚ´æÕ¼ÓÃ4G

±í2 SKYLB HTTPÐÔÄܲâÊÔÊý¾Ý

ͼ9 SKYLB HTTP ÐÔÄܲâÊÔÖ¸±êͼ

ͼ10 SKYLBhttp ÐÔÄܲâÊÔÖ¸±êͼ
×ܽá
±¾ÎÄÖ÷Òª½éÉÜÁËSKYLB£¬Ò»ÖֵĻùÓÚintel DPDKƽ̨¿ª·¢µÄ¸ºÔؾùºâÆ÷¡£Æä½Ó½üÍø¿¨ÏßËÙ´¦Àí¼°×ª·¢ÄÜÁ¦£¬Áé»îµÄ²¿Ê𣬶àÑùµÄ¼à¿ØÒÔ¼°¿É¿¿µÄÎȶ¨ÐÔ¡£»ù±¾Éϸ²¸ÇËùÓÐ4²ã¸ºÔؾùºâµÄÒµÎñ´¦ÀíÐèÇó£¬ÅäºÏ¼¯Èº¹ÜÀíÒÔ¼°µ÷¶È£¬×÷Ϊ¾©¶«Êý¾ÝÖÐÐIJÙ×÷ϵͳ£¨JDOS£©µÄÒ»¸öÖØÒªµÄ×é³É²¿·Ö£¬ÔÚ¾©¶«Êý¾ÝÖÐÐÄ·¢»ÓÖÁ¹ØÖØÒªµÄ×÷Óá£
|