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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
ϵͳÐÔÄܲâÊÔ¼°µ÷ÓÅ
 
À´Ô´£ºwww.51ste.com ·¢²¼ÓÚ£º 2017-1-5
  1962  次浏览      30
 

1ϵͳÐÔÄܶ¨Òå

ÐÔÄܲâÊÔ£¬Ö÷ÒªÊÇͨ¹ý×Ô¶¯»¯µÄ²âÊÔ¹¤¾ßÄ£Äâ¶àÖÖÕý³£¡¢·åÖµÒÔ¼°Òì³£¸ºÔØÌõ¼þÀ´¶ÔϵͳµÄ¸÷ÏîÐÔÄÜÖ¸±ê½øÐвâÊÔ¡£ÏµÍ³ÐÔÄÜÖ÷Òª°üÀ¨Á½¸öÖµ£º

ÍÌÍÂÁ¿£¨Throughtput£©£¬¼´Ã¿ÃëÖÓ¿ÉÒÔ´¦ÀíµÄÇëÇóÊý£¬ÊÂÎñÊý¡£

ϵͳÑÓ³Ù£¨Latency£©£¬Ò²¾ÍÊÇϵͳÔÚ´¦ÀíÒ»¸öÇëÇó»òÒ»¸öÊÂÎñʱµÄÑÓ³Ù¡£

ËüÃÇÁ½ÕßÖ®¼äµÄ¹ØÏµ£º

ThroughputÔ½´ó£¬Latency»áÔ½²î¡£ÇëÇóÁ¿¹ý´ó£¬ÏµÍ³·±Ã¦£¬ÏìÓ¦ËÙ¶È×ÔÈ»µÍ¡£

LatencyÔ½ºÃ£¬ÄÜÖ§³ÖµÄThroughput¾Í»áÔ½¸ß¡£ÒòΪLatency¶Ì˵Ã÷´¦ÀíËٶȿ죬ÓÚÊǵ¥Î»Ê±¼äÄھͿÉÒÔ´¦Àí¸ü¶àµÄÇëÇó¡£

2ϵͳÐÔÄܲâÊÔ

Òª²âÊÔϵͳµÄÐÔÄÜ£¬ÐèÒªÎÒÃÇÊÕ¼¯ÏµÍ³µÄThroughputºÍLatencyÕâÁ½¸öÖµ¡£

Ê×ÏÈ£¬ÐèÒª¶¨ÒåLatencyÕâ¸öÖµ£¬Èç¶ÔÓÚÍøÕ¾Ê×Ò³ÏìӦʱ¼ä±ØÐèÊÇ4ÃëÒÔÄÚ£¨¸ù¾Ý²»Í¬µÄÒµÎñÀ´¶¨Ò壩

Æä´Î£¬×¼±¸ÐÔÄܲâÊÔ¹¤¾ß£¬Ò»¸ö¹¤¾ßÓÃÀ´ÖÆÔì¸ßÇ¿¶ÈµÄThroughput£¨Í¨³£ÓÐLoadrunner¡¢JmeterµÈ£©£¬ÁíÒ»¸ö¹¤¾ßÓÃÀ´²âÁ¿Latency¡£¹ØÓÚÈçºÎ²âÁ¿Latency£¬Äã¿ÉÒÔÔÚ´úÂëÖвâÁ¿£¬µ«ÊÇÕâÑù»áÓ°Ïì³ÌÐòµÄÖ´ÐУ¬¶øÇÒÖ»ÄܲâÊÔµ½³ÌÐòÄÚ²¿µÄLatency£¬ÕæÕýµÄLatencyÊÇÕû¸öϵͳ¶¼ËãÉÏ£¬°üÀ¨²Ù×÷ϵͳºÍÍøÂçµÄÑÓʱ£¬Ò»°ãÐÔÄܲâÊÔ¹¤¾ß¶¼ÓÐÅäÌ××é¼þ¡£

×îºó£¬¿ªÊ¼ÐÔÄܲâÊÔ¡£²»¶ÏµØÌáÉý²âÊÔ»·¾³µÄThroughput£¬È»ºó¹Û²ìϵͳµÄ¸ºÔØÇé¿ö£¬Èç¹ûϵͳ¶¥µÃס£¬ÄǾ͹۲ìLatencyµÄÖµ¡£ÕâÑù£¬¾Í¿ÉÒÔÕÒµ½ÏµÍ³µÄ×î´ó¸ºÔØ£¬²¢ÇÒÄã¿ÉÒÔÖªµÀϵͳµÄÏìÓ¦ÑÓʱÊǶàÉÙ¡£

ÏÂÃæÖ÷Ҫͨ¹ýÈý¸ö´óµÄ²½ÖèÀ´ËµÃ÷ÐÔÄܲâÊÔʵʩ¹ý³Ì£º

ǰÆÚ×¼±¸

1¡¢È·¶¨Óû§¡¢ÒµÎñ¡¢ÏµÍ³ÐèÇó£¨Ä¿±ê£©

È·¶¨Êµ¼ÊÒµÎñÐèÇó

Ö÷Ҫȷ¶¨Óû§µÄÒµÎñÇëÇó·Ö²¼µÈ£ºÖ÷ÒªÒµÎñÇëÇ󡢯½¾ùÈÕ½»Ò×Á¿¡¢Äê½»Ò×Á¿¡¢·åÖµ½»Ò×Á¿µÈµÈ¡£

È·¶¨ÏµÍ³ÐèÇó

Ö÷Òª¹¤×÷ÊÇ·ÖÎöϵͳµÄÐÔÄÜÐèÇó¡¢È·¶¨ºÏÀíµÄÐÔÄÜÄ¿±ê¡£

È·¶¨¿Í»§µÄÐèÇóºÍÆÚÍû

ÔÚÐèÇó·ÖÎöÎĵµµÄÖ§³ÖÏ£¬¶ÔÈí¼þϵͳÉϵÄÓû§ÒµÎñʹÓÃÇé¿ö½øÐзÖÎö£¬Ìá³öÎÒÃÇËù¹Ø×¢µÄÐÔÄܲâÊÔÐèÇ󣬲¢¸æÖªÒµÎñÈËÔ±¡£ÈÃÒµÎñÈËÔ±À´ÅжÏÎÒÃǵÄÐÔÄÜÐèÇóÊÇ·ñÂú×ã¿Í»§µÄÕæÊµÐèÇó¡£

2¡¢È·¶¨ÏµÍ³Àà±ð

·ÖÇåϵͳÀà±ðÊÇÎÒÃÇÕÆÎÕʲôÑù¼¼ÊõµÄǰÌá£¬ÕÆÎÕÏàÓ¦¼¼Êõ×öÐÔÄܲâÊԲſÉÄܳɹ¦¡£ÀýÈ磺ϵͳÀà±ðÊÇB/S½á¹¹£¬ÐèÒªÕÆÎÕHTTPЭÒ飬java£¬C#£¬htmlµÈ¼¼Êõ¡£»òÕßÊÇC/S½á¹¹£¬¿ÉÄÜÒªÁ˽â²Ù×÷ϵͳ£¬winsock£¬comµÈ¡£

3¡¢È·¶¨ÏµÍ³¹¹³É

²»Í¬µÄϵͳ¹¹³ÉÐÔÄܲâÊÔ»áµÃµ½²»Í¬µÄ½á¹û¡£

4¡¢È·¶¨Êµ¼ÊÍøÂç´ø¿í

±ãÓÚ²âÊÔʱ¶Ô´ø¿í×öÄ£Ä⣬¾¡¿ÉÄÜÕæÊµµÄ·´À¡´ø¿íʹÓÃÇé¿ö¡£

5¡¢È·¶¨²âÊÔ·þÎñÆ÷Óë²âÊÔ»úÅäÖÃÇåµ¥

Á˽âÐÔÄܲâÊÔÓ²¼þ×ÊÔ´£¨°üÀ¨Ëù²â·þÎñÆ÷£¬²âÊÔ»úµÈ£©£¬¸ù¾Ýʵ¼ÊÇé¿öÌí¼ÓÉ豸¡£

6¡¢ÏµÍ³¹¦ÄÜÁ÷³Ìͼ

±ãÓÚ²âÊÔÈËÔ±·ÖÎöϵͳÄÄЩģ¿éÒ׳öÏÖÆ¿¾±£¬´Ó¶øÕë¶ÔÐÔ×öÐÔÄܲâÊÔ¡£

7¡¢²âÊÔʱ¼äÆÀ¹À

¸ù¾Ý²âÊÔʱ¼ä£¬Öƶ¨ÏàÓ¦µÄ²âÊÔÖ´ÐвßÂÔ¡£

ÔÚÎÒµÄʵ¼ÊÐÔÄܲâÊÔ¹¤×÷ÖУ¬»á°ÑÉÏÃæ×÷ΪÎÊÌâÁбíµÄÐÎʽ´òÓ¡³öÀ´£¬È»ºóͨ¹ý²»¶Ï¹µÍ¨ºÍ·ÖÎöÈ¥ÍêÉÆËü£¬ÒÔ±ã°ïÖúÎÒºóÆÚ¸üºÃµÄÖÆ¶¨ÐÔÄܲâÊÔ²ßÂÔ¡£ÕâÑùµÄÎÊÌâÁбíÈ磺

¾ßÌåÄÄЩҵÎñÐèÒª×öÐÔÄܲâÊÔ£¿

´Ó²âÊÔÀàÐÍÀ´¿´£¨ÁгöÐÔÄܲâÊÔÀàÐÍ¡¢¶ÔÓ¦µÄ½âÊͼ°Ö¸±ê£¬·½±ãµ÷²é¶ÔÏó²Î¿¼£©£¬Òª¶ÔÐÔÄܹؼüÒµÎñ×öÒÔÉÏÒ»Ïî»ò¶àÏî²âÊÔ£¿

²ÉÓÃʲôϵͳ²¿Êð»·¾³£¿ÏµÍ³µÄ°æ±¾ºÍλÊýÊǶàÉÙ£¿

¡­¡­

²âÊÔʵʩ

1¡¢¸ù¾ÝǰÆÚ×¼±¸Öƶ¨±àдÐÔÄܲâÊÔ·½°¸

Ó¦¸Ã°üÀ¨ÐÔÄܲâÊÔͨ¹ýµÄ±ê×¼¡¢Ëù²âµÄ¶ÔÏó£¨ÒµÎñ»ò³¡¾°£©¡¢²âÊÔ»·¾³ËµÃ÷¡¢²âÊÔËùÓÃʱ¼ä¼°×ÊÔ´£¬²âÊÔ²ßÂԵȡ£

2¡¢Éè¼ÆÐÔÄܲâÊÔÓÃÀý

Ö¸µ¼²âÊÔÈËÔ±½øÐÐÐÔÄܲâÊÔ¡£

3¡¢±àдÐÔÄܲâÊԽű¾

²âÊԽű¾Ó¦¸Ã¾ßÓпÉÖØ¸´Ö´ÐÐÐÔ£¬¿É²¢·¢Ö´ÐÐÐÔ£¬Äܾ¡¿ÉÄÜÕæÊµÄ£Äâµ¥Óû§ÒµÎñʹÓó¡¾°¡£

4¡¢Ä£ÄâÔËÐг¡¾°

ÓÃÐÔÄܹ¤¾ßÄ£ÄâÓû§¸ºÔØÊ¹ÓÃϵͳµÄ³¡¾°¡£

5¡¢ÅäÖÃÔËÐг¡¾°

±»²â»·¾³Ó¦¸ÃÔÚ²âÊÔǰ×öºÃ±¸·Ý£»ÅäÖðüÀ¨±»²âϵͳÈÕÖ¾¡¢Öмä¼þ£¨MySQL¡¢ApacheµÈ£©Ê¹ÓÃÇé¿ö¡¢·þÎñÆ÷×ÊԴʹÓÃÇé¿öµÄÊý¾ÝÊվݣ»ÔËÐÐÓ¦±ÜÃâżȻÐÔʼþ£¬ËùÒÔÒ»¸ö²âÊÔ³¡¾°Ó¦¸ÃÖÁÉÙÔËÐÐÁ½´Î¼°ÒÔÉÏ¡£

Æ¿¾±·ÖÎöºÍÐÔÄÜÓÅ»¯

Æ¿¾±·ÖÎöÄѵãÔÚÓÚÀí½âÊÕ¼¯µ½µÄÊý¾Ý·´À¡µÄÕæÊǺ¬Ò壬ËùÒÔÒªÇó²âÊÔÈËÔ±¾ß±¸ÏàÓ¦µÄ¼¼Êõ֪ʶ´¢±¸£¨°üÀ¨Êý¾Ý¿âµÄ֪ʶ¡¢¼ÆËã»úÔ­Àí֪ʶ¡¢ÍøÂç»ù´¡¡¢¸÷Öмä¼þÐÔÄܼÆÁ¿º¬ÒåµÈ£©£¬ÕâÀïÏȽöÁоÙÏÂÐÔÄܲâÊÔ½á¹û·ÖÎöÔ­Ôò£º

°ÑÊÂʵÓëÍÆ²â·Ö¿ª£¬×ÜÊÇÓÃʵ¼ÊµÄÖ¤¾ÝÀ´Ö¤Ã÷ÄãµÄÍÆ²â£»

ÔÚûÓÐ×ã¹»Ö¤¾Ýǰ£¬²»¶Ô³ÌÐò½øÐÐÓÅ»¯£»

ÓÅÏÈÑéÖ¤¼òµ¥µÄ¼ÙÉè£¨ÍÆ²âÆ¿¾±£©£»

ÈÕÖ¾ÎļþÖÐûÓдíÎó²»´ú±íÕæµÄûÓдíÎó£»

´Óϵͳµ½Ó¦ÓᢴÓÍâµ½ÄÚ½øÐвã²ã°þÀ룬ËõС·¶Î§£»

·¶Î§ËõСºó£¬ÔÙ·Ö¸î³É¶à¸öµ¥Ôª£¬¶Ôÿ¸öµ¥Ôª½øÐÐÂÖ·¬Ñ¹Á¦²âÊÔ£¬À´Ö¤Ã÷»òÕß·ñ¶¨ÊÇÄĸöµ¥ÔªÒýÆðµÄÐÔÄÜÎÊÌâ ¡£

Æ¿¾±ÓÅ»¯Ó¦¸ÃÓÐÄѵ½Ò׵ĽøÐÐÓÅ»¯£¬ÏÂÃæÎªÍÆ¼ö£¨Ó¦¸ù¾Ý¹«Ë¾Êµ¼ÊÇé¿öµ÷Õû£©£º

·þÎñÆ÷Ó²¼þÆ¿¾±->ÍøÂçÆ¿¾±->·þÎñÆ÷²Ù×÷ϵͳƿ¾±->Öмä¼þÆ¿¾±->Ó¦ÓÃÆ¿¾±

3¶¨Î»ÐÔÄÜÆ¿¾±

3.1²é¿´²Ù×÷ϵͳ¸ºÔØ

ϵͳÓÐÎÊÌâÊ×ÒªÐèÒª¿´µÄÊDzÙ×÷ϵͳ±¨¸æ¡£²é¿´²Ù×÷ϵͳµÄCPUÀûÓÃÂÊ£¬ÄÚ´æÊ¹ÓÃÂÊ£¬²Ù×÷ϵͳµÄIO£¬»¹ÓÐÍøÂçµÄIO£¬ÍøÂçÁ´½ÓÊýµÈ¡£

ÏÈ¿´CPUÀûÓÃÂÊ£¬Èç¹ûCPUÀûÓÃÂʲ»¸ß£¬µ«ÊÇϵͳµÄThroughputºÍLatencyÉϲ»È¥ÁË£¬Õâ˵Ã÷³ÌÐò²¢Ã»ÓÐæÓÚ¼ÆË㣬¶øÊÇæ×öÆäËüÊ£¬±ÈÈçIO¡££¨ÁíÍ⣬CPUµÄÀûÓÃÂÊ»¹Òª¿´ÄÚºË̬µÄºÍÓû§Ì¬µÄ£¬ÄÚºË̬µÄÉÏÈ¥ÁË£¬Õû¸öϵͳµÄÐÔÄܾÍÏÂÀ´ÁË¡£¶ø¶ÔÓÚ¶àºËCPUÀ´Ëµ£¬CPU 0 ÊÇÏ൱¹Ø¼üµÄ£¬Èç¹ûCPU 0µÄ¸ºÔظߣ¬ÄÇô»áÓ°ÏìÆäËüºËµÄÐÔÄÜ£¬ÒòΪCPU¸÷ºË¼äÊÇÐèÒªÓе÷¶ÈµÄ£¬Õâ¿¿CPU0Íê³É£©

È»ºó£¬ÎÒÃÇ¿ÉÒԲ鿴һÏÂIO´óС£¬IOºÍCPUÒ»°ãÊÇ·´×ÅÀ´µÄ£¬CPUÀûÓÃÂʸßÔòIO²»´ó£¬IO´óÔòCPU¾ÍС¡£¹ØÓÚIO£¬ÎÒÃÇÒª¿´Èý¸öÊ£¬Ò»¸öÊÇ´ÅÅÌÎļþIO£¬Ò»¸öÊÇÇý¶¯³ÌÐòµÄIO£¨Èç£ºÍø¿¨£©£¬Ò»¸öÊÇÄÚ´æ»»Ò³ÂÊ¡£ÕâÈý¸öʶ¼»áÓ°ÏìϵͳÐÔÄÜ¡£

È»ºó£¬²é¿´Ò»ÏÂÍøÂç´ø¿íʹÓÃÇé¿ö¡£

Èç¹ûCPU²»¸ß£¬IO²»¸ß£¬ÄÚ´æÊ¹Óò»¸ß£¬ÍøÂç´ø¿íʹÓò»¸ß¡£µ«ÊÇϵͳµÄÐÔÄÜÉϲ»È¥¡£Õâ˵Ã÷ÄãµÄ³ÌÐòÓÐÎÊÌ⣬±ÈÈ磬ÄãµÄ³ÌÐò±»×èÈûÁË¡£¿ÉÄÜÊÇÒòΪµÈÄǸöËø£¬¿ÉÄÜÊÇÒòΪµÈij¸ö×ÊÔ´£¬»òÕßÊÇÔÚÇл»ÉÏÏÂÎÄ¡£

ͨ¹ýÁ˽â²Ù×÷ϵͳµÄÐÔÄÜ£¬ÎÒÃDzÅÖªµÀÐÔÄܵÄÎÊÌ⣬±ÈÈ磺´ø¿í²»¹»£¬ÄÚ´æ²»¹»£¬TCP»º³åÇø²»¹»£¬µÈµÈ£¬ºÜ¶àʱºò£¬²»ÐèÒªµ÷Õû³ÌÐòµÄ£¬Ö»ÐèÒªµ÷ÕûÒ»ÏÂÓ²¼þ»ò²Ù×÷ϵͳµÄÅäÖþͿÉÒÔÁË¡£

3.2ʹÓÃprofiler²âÊÔ³ÌÐòÆ¿¾±

ʹÓÃij¸öProfilerÀ´²é¿´Ò»ÏÂÎÒÃdzÌÐòµÄÔËÐÐÐÔÄÜ¡£È磺JavaµÄJProfiler¡£Ê¹ÓÃProfiler¹¤¾ß£¬¿ÉÒÔÈÃÄã²é¿´³ÌÐòÖи÷¸öÄ£¿éº¯ÊýÉõÖÁÖ¸ÁîµÄºÜ¶à¶«Î÷£¬È磺ÔËÐеÄʱ¼ä £¬µ÷ÓõĴÎÊý£¬CPUµÄÀûÓÃÂÊ£¬µÈµÈ¡£

ÎÒÃÇÖØµã¹Û²ìÔËÐÐʱ¼ä×î¶à£¬µ÷ÓôÎÊý×î¶àµÄÄÇЩº¯ÊýºÍÖ¸Áî¡£ÕâÀï×¢Òâһϣ¬¶ÔÓÚµ÷ÓôÎÊý¶àµ«ÊÇʱ¼äºÜ¶ÌµÄº¯Êý£¬Äã¿ÉÄÜÖ»ÐèÒªÇá΢ÓÅ»¯Ò»Ï£¬ÄãµÄÐÔÄܾÍÉÏÈ¥ÁË¡£

ÒòΪProfiler»áÈÃÄãµÄ³ÌÐòÔËÐеÄÐÔÄܱäµÍ¶Ô´Ë£¬Ò»°ãÓÐÁ½¸ö·½·¨À´¶¨Î»ÏµÍ³Æ¿¾±£º

1£©ÔÚÄãµÄ´úÂëÖÐ×Ô¼º×öͳ¼Æ£¬Ê¹ÓÃ΢Ãë¼¶µÄ¼ÆÊ±Æ÷ºÍº¯Êýµ÷ÓüÆËãÆ÷£¬Ã¿¸ô10Ãë°Ñͳ¼Ælogµ½ÎļþÖС£

2£©·Ö¶Î×¢ÊÍÄãµÄ´úÂë¿é£¬ÈÃһЩº¯Êý¿Õת£¬×öHard CodeµÄMock£¬È»ºóÔÙ²âÊÔÒ»ÏÂϵͳµÄThroughputºÍLatencyÊÇ·ñÓÐÖʵı仯£¬Èç¹ûÓУ¬ÄÇô±»×¢Ê͵ĺ¯Êý¾ÍÊÇÐÔÄÜÆ¿¾±£¬ÔÙÔÚÕâ¸öº¯ÊýÌåÄÚ×¢ÊÍ´úÂ룬ֱµ½ÕÒµ½×îºÄÐÔÄܵÄÓï¾ä¡£

²é¿´»ã±à´úÂë¾­³£»á¸øÄãһЩÒâÏë²»µ½µÄ¶«Î÷ÈÃÄãÖªµÀΪʲô³ÌÐòµÄÐÔÄÜÊÇÄÇÑù¡£

¶ÔÓÚÐÔÄܲâÊÔ£¬²»Í¬µÄThroughput»á³öÏÖ²»Í¬µÄ²âÊÔ½á¹û£¬²»Í¬µÄ²âÊÔÊý¾ÝÒ²»áÓв»Í¬µÄ²âÊÔ½á¹û¡£ËùÒÔ£¬ÓÃÓÚÐÔÄܲâÊÔµÄÊý¾Ý·Ç³£ÖØÒª£¬ÐÔÄܲâÊÔÖУ¬ÎÒÃÇÐèÒª²âÊԹ۲첻ͬThroughputµÄ½á¹û¡£

4ÐÔÄܵ÷ÓÅ(´úÂë¼¼Êõϸ½Ú²ãÃæ)

Ò»°ãÀ´Ëµ£¬ÐÔÄÜÓÅ»¯Ò²¾ÍÊÇÏÂÃæµÄ¼¸¸ö²ßÂÔ£º

Óÿռ任ʱ¼ä¡£¸÷ÖÖcacheÈçCPU L1/L2/RAMµ½Ó²ÅÌ£¬¶¼ÊÇÓÿռäÀ´»»Ê±¼äµÄ²ßÂÔ¡£ÕâÑù²ßÂÔ»ù±¾ÉÏÊǰѼÆËãµÄ¹ý³ÌÒ»²½Ò»²½µÄ±£´æ»ò»º´æÏÂÀ´£¬ÕâÑù¾Í²»ÓÃÿ´ÎÓõÄʱºò¶¼ÒªÔÙ¼ÆËãÒ»±é£¬±ÈÈçÊý¾Ý»º³å£¬CDNµÈ¡£ÕâÑùµÄ²ßÂÔ»¹±íÏÖΪÈßÓàÊý¾Ý£¬±ÈÈçÊý¾Ý¾µÏ󣬸ºÔؾùºâʲôµÄ¡£

ÓÃʱ¼ä»»¿Õ¼ä¡£ÓÐʱºò£¬ÉÙÁ¿µÄ¿Õ¼ä¿ÉÄÜÐÔÄÜ»á¸üºÃ£¬±ÈÈçÍøÂç´«Ê䣬Èç¹ûÓÐһЩѹËõÊý¾ÝµÄËã·¨£¨Èç ¡°Huffman ±àÂëѹËõËã·¨¡± ºÍ ¡°rsync µÄºËÐÄËã·¨¡±£©£¬ÕâÑùµÄËã·¨ÆäʵºÜºÄʱ£¬µ«ÊÇÒòΪƿ¾±ÔÚÍøÂç´«Ê䣬ËùÒÔÓÃʱ¼äÀ´»»¿Õ¼ä·´¶øÄÜʡʱ¼ä¡£

¼ò»¯´úÂë¡£×î¸ßЧµÄ³ÌÐò¾ÍÊDz»Ö´ÐÐÈκδúÂëµÄ³ÌÐò£¬ËùÒÔ£¬´úÂëÔ½ÉÙÐÔÄܾÍÔ½¸ß¡£È磺¼õÉÙÑ­»·µÄ²ãÊý£¬¼õÉٵݹ飬ÔÚÑ­»·ÖÐÉÙÉùÃ÷±äÁ¿£¬ÉÙ×ö·ÖÅäºÍÊÍ·ÅÄÚ´æµÄ²Ù×÷£¬¾¡Á¿°ÑÑ­»·ÌåÄڵıí´ïʽ³éµ½Ñ­»·Í⣬Ìõ¼þ±í´ïµÄÖеĶà¸öÌõ¼þÅжϵĴÎÐò£¬¾¡Á¿ÔÚ³ÌÐòÆô¶¯Ê±°ÑһЩ¶«Î÷×¼±¸ºÃ£¬×¢Ò⺯Êýµ÷ÓõĿªÏú£¨Õ»ÉϵĿªÏú£©£¬×¢ÒâÃæÏò¶ÔÏóÓïÑÔÖÐÁÙʱ¶ÔÏóµÄ¿ªÏú£¬Ð¡ÐÄʹÓÃÒì³££¨²»ÒªÓÃÒì³£À´¼ì²éһЩ¿É½ÓÊܿɺöÂÔ²¢¾­³£·¢ÉúµÄ´íÎ󣩣¬¡­¡­ µÈµÈ£¬ÕâЩ¶«Î÷ÐèÒªÎÒÃǷdz£Á˽â±à³ÌÓïÑԺͳ£ÓõĿ⡣

²¢Ðд¦Àí¡£Èç¹ûCPUÖ»ÓÐÒ»¸öºË£¬ÄãÒªÍæ¶à½ø³Ì£¬¶àỊ̈߳¬¶ÔÓÚ¼ÆËãÃܼ¯Ð͵ÄÈí¼þ»á·´¶ø¸üÂý£¨ÒòΪ²Ù×÷ϵͳµ÷¶ÈºÍÇл»¿ªÏúºÜ´ó£©£¬CPUµÄºË¶àÁ˲ÅÄÜÕæÕýÌåÏÖ³ö¶à½ø³Ì¶àÏ̵߳ÄÓÅÊÆ¡£²¢Ðд¦ÀíÐèÒªÎÒÃǵijÌÐòÓÐScalability£¬²»ÄÜˮƽ»ò´¹Ö±À©Õ¹µÄ³ÌÐòÎÞ·¨½øÐв¢Ðд¦Àí¡£´Ó¼Ü¹¹ÉÏÀ´Ëµ£¬Õâ±íÔÙΪ¡ª¡ªÊÇ·ñ¿ÉÒÔ×öµ½²»¸Ä´úÂëÖ»ÊǼӼӻúÆ÷¾Í¿ÉÒÔÍê³ÉÐÔÄÜÌáÉý£¿

×ÜÖ®£¬¸ù¾Ý2£º8Ô­ÔòÀ´Ëµ£¬20%µÄ´úÂëºÄÁËÄã80%µÄÐÔÄÜ£¬ÕÒµ½ÄÇ20%µÄ´úÂ룬Äã¾Í¿ÉÒÔÓÅ»¯ÄÇ80%µÄÐÔÄÜ¡£ ÏÂÃæÎªÒ»Ð©×îÓмÛÖµµÄÐÔÄܵ÷Óŵĵķ½·¨£¬¹©²Î¿¼¡£

4.1Ëã·¨µ÷ÓÅ

Ëã·¨·Ç³£ÖØÒª£¬ºÃµÄËã·¨»áÓиüºÃµÄÐÔÄÜ¡£ÏÂÃæÎª¼¸¸öËã·¨µ÷ÓÅÀý×Ó£º

Ò»¸öÊǹýÂËËã·¨£¬ÏµÍ³ÐèÒª¶ÔÊÕµ½µÄÇëÇó×ö¹ýÂË£¬ÎÒÃǰѿÉÒÔ±»filter in/outµÄ¶«Î÷ÅäÖÃÔÚÁËÒ»¸öÎļþÖУ¬Ô­ÓеĹýÂËËã·¨ÊDZéÀú¹ýÂËÅäÖ㬺óÀ´ÎÒÃÇÕÒµ½ÁËÒ»ÖÖ·½·¨¿ÉÒÔ¶ÔÕâ¸ö¹ýÂËÅäÖýøÐÐÅÅÐò£¬ÕâÑù¾Í¿ÉÒÔÓöþ·ÖÕÛ°ëµÄ·½·¨À´¹ýÂË£¬ÏµÍ³ÐÔÄÜÔö¼ÓÁË50%¡£

Ò»¸öÊǹþÏ£Ëã·¨¡£¼ÆËã¹þÏ£Ëã·¨µÄº¯Êý²¢²»¸ßЧ£¬Ò»·½ÃæÊǼÆËãÌ«·Ñʱ£¬ÁíÒ»·½ÃæÊÇÅöײ̫¸ß£¬Åöײ¸ßÁ˾͸úµ¥ÏòÁ´±íÒ»¸öÐÔÄÜ¡£ÎÒÃÇÖªµÀ£¬Ëã·¨¶¼ÊǺÍÐèÒª´¦ÀíµÄÊý¾ÝºÜÓйØÏµµÄ£¬¾ÍËãÊDZ»´ó¼ÒËù³°Ð¦µÄ¡°Ã°ÅÝÅÅÐò¡±ÔÚijЩÇé¿öÏ£¨´ó¶àÊýÊý¾ÝÊÇÅźÃÐòµÄ£©ÆäЧÂÊ»á¸ßÓÚËùÓеÄÅÅÐòËã·¨¡£¹þÏ£Ëã·¨Ò²Ò»Ñù£¬¹ãΪÈËÖªµÄ¹þÏ£Ëã·¨¶¼ÊÇÓÃÓ¢ÎÄ×Öµä×ö²âÊÔ£¬µ«ÊÇÎÒÃǵÄÒµÎñÔÚÊý¾ÝÓÐÆäÌØÊâÐÔ£¬ËùÒÔ£¬¶ÔÓÚ»¹ÐèÒª¸ù¾Ý×Ô¼ºµÄÊý¾ÝÀ´ÌôÑ¡ÊʺϵĹþÏ£Ëã·¨¡£

·Ö¶øÖÎÖ®ºÍÔ¤´¦Àí¡£ÒÔǰÓÐÒ»¸ö³ÌÐòΪÁËÉú³ÉÔ±¨±í£¬Ã¿´Î¶¼ÐèÒª¼ÆËãºÜ³¤µÄʱ¼ä£¬ÓÐʱºòÐèÒª»¨½«½üÒ»ÕûÌìµÄʱ¼ä¡£ÓÚÊÇÎÒÃǰÑÎÒÃÇÕÒµ½ÁËÒ»ÖÖ·½·¨¿ÉÒÔ°ÑÕâ¸öËã·¨·¢³ÉÔöÁ¿Ê½µÄ£¬Ò²¾ÍÊÇ˵ÎÒÿÌì¶¼°Ñµ±ÌìµÄÊý¾Ý¼ÆËãºÃÁ˺óºÍǰһÌìµÄ±¨±íºÏ²¢£¬ÕâÑù¿ÉÒÔ´ó´óµÄ½ÚÊ¡¼ÆËãʱ¼ä£¬Ã¿ÌìµÄÊý¾Ý¼ÆËãÁ¿Ö»ÐèÒª20·ÖÖÓ£¬µ«ÊÇÈç¹ûÎÒÒªËãÕû¸öÔµģ¬ÏµÍ³ÔòÐèÒª10¸öСʱÒÔÉÏ£¨SQLÓï¾äÔÚ´óÊý¾ÝÁ¿ÃæÇ°ÐÔÄܳɼ¶ÊýÐÔϽµ£©¡£ÕâÖÖ·Ö¶øÖÎÖ®µÄ˼·ÔÚ´óÊý¾ÝÃæÇ°¶ÔÐÔÄÜÓкܰïÖú£¬¾ÍÏñmergeÅÅÐòÒ»Ñù¡£SQLÓï¾äºÍÊý¾Ý¿âµÄÐÔÄÜÓÅ»¯Ò²ÊÇÕâÒ»²ßÂÔ£¬È磺ʹÓÃǶÌ×ʽµÄSelect¶ø²»Êǵѿ¨¶û»ýµÄSelect£¬Ê¹ÓÃÊÓͼ£¬µÈµÈ¡£

4.2´úÂëµ÷ÓÅ

´úÂëÉϵĵ÷ÓÅ´óÖÂÓÐÏÂÃæÕ⼸µã£º

×Ö·û´®²Ù×÷¡£ÕâÊÇ×î·ÑϵͳÐÔÄܵÄÊÂÁË£¬ÎÞÂÛÊÇstrcpy, strcat»¹ÊÇstrlen£¬×îÐèҪעÒâµÄÊÇ×Ö·û´®Æ¥Åä¡£ËùÒÔ£¬ÄÜÓÃÕûÐÍ×îºÃÓÃÕûÐÍ¡£

¶àÏ̵߳÷ÓÅ¡£ÓÐÈË˵thread is evil£¬Õâ¸ö¶ÔÓÚϵͳÐÔÄÜÔÚijЩʱºòÊǸöÎÊÌâ¡£ÒòΪ¶àÏß³ÌÆ¿¾±¾ÍÔÚÓÚ»¥³âºÍͬ²½µÄËøÉÏ£¬ÒÔ¼°Ïß³ÌÉÏÏÂÎÄÇл»µÄ³É±¾£¬ÔõôÑùµÄÉÙÓÃËø»ò²»ÓÃËøÊǸù±¾£¨±ÈÈ磺¶à°æ±¾²¢·¢¿ØÖÆ(MVCC)ÔÚ·Ö²¼Ê½ÏµÍ³ÖеÄÓ¦Óà ÖÐ˵µÄÀÖ¹ÛËø¿ÉÒÔ½â¾öÐÔÄÜÎÊÌ⣩£¬´ËÍ⣬»¹ÓжÁÐ´ËøÒ²¿ÉÒÔ½â¾ö´ó¶àÊýÊǶÁ²Ù×÷µÄ²¢·¢µÄÐÔÄÜÎÊÌâ¡£ÁíÍ⣬Ï̲߳»ÊÇÔ½¶àÔ½ºÃ£¬Ï̼߳äµÄµ÷¶ÈºÍÉÏÏÂÎÄÇл»Ò²ÊǺܿäÕŵÄÊ£¬¾¡¿ÉÄܵÄÔÚÒ»¸öÏß³ÌÀï¸É£¬¾¡¿ÉÄܵIJ»ÒªÍ¬²½Ï̡߳£Õâ»áÈÃÄãÓкܶàµÄÐÔÄÜ¡£

ÄÚ´æ·ÖÅä¡£²»ÒªÐ¡¿´³ÌÐòµÄÄÚ´æ·ÖÅä¡£malloc/realloc/callocÕâÑùµÄϵͳµ÷Ó÷dz£ºÄʱ£¬ÓÈÆäÊǵ±ÄÚ´æ³öÏÖË鯬µÄʱºò¡£³Ø»¯¼¼Êõ£¬ÈçÏ̳߳أ¬Á¬½Ó³ØµÈ¡£³Ø»¯¼¼Êõ¶ÔÓÚһЩ¶Ì×÷ÒµÀ´Ëµ£¨Èçhttp·þÎñ£©Ï൱µÄÓÐЧ¡£ÕâÏî¼¼Êõ¿ÉÒÔ¼õÉÙÁ´½Ó½¨Á¢£¬Ï̴߳´½¨µÄ¿ªÏú£¬´Ó¶øÌá¸ßÐÔÄÜ¡£

Òì²½²Ù×÷¡£ÎÒÃÇÖªµÀUnixϵÄÎļþ²Ù×÷ÊÇÓÐblockºÍnon-blockµÄ·½Ê½µÄ£¬ÏñÓÐЩϵͳµ÷ÓÃÒ²ÊÇblockʽµÄ£¬È磺SocketϵÄselect£¬WindowsϵÄWaitforObjectÖ®ÀàµÄ£¬Èç¹ûÎÒÃǵijÌÐòÊÇͬ²½²Ù×÷£¬ÄÇô»á·Ç³£Ó°ÏìÐÔÄÜ£¬ÎÒÃÇ¿ÉÒԸijÉÒì²½µÄ£¬µ«ÊǸijÉÒì²½µÄ·½Ê½»áÈÃÄãµÄ³ÌÐò±ä¸´ÔÓ¡£Òì²½·½Ê½Ò»°ãҪͨ¹ý¶ÓÁУ¬Òª×¢Òâ¶ÓÁеÄÐÔÄÜÎÊÌ⣬ÁíÍ⣬Ò첽ϵÄ״̬֪ͨͨ³£ÊǸöÎÊÌ⣬±ÈÈçÏûϢʼþ֪ͨ·½Ê½£¬ÓÐcallback·½Ê½£¬µÈ£¬ÕâЩ·½Ê½Í¬Ñù¿ÉÄÜ»áÓ°ÏìÄãµÄÐÔÄÜ¡£µ«ÊÇͨ³£À´Ëµ£¬Òì²½²Ù×÷»áÈÃÐÔÄܵÄÍÌÍÂÂÊÓкܴóÌáÉý£¨Throughput£©£¬µ«ÊÇ»áÎþÉüϵͳµÄÏìӦʱ¼ä£¨latency£©¡£ÕâÐèÒªÒµÎñÉÏÖ§³Ö¡£

ÓïÑԺʹúÂë¿â¡£ÎÒÃÇÒªÊìϤÓïÑÔÒÔ¼°ËùʹÓõĺ¯Êý¿â»òÀà¿âµÄÐÔÄÜ¡£±ÈÈ磺STLÖеĺܶàÈÝÆ÷·ÖÅäÁËÄÚ´æºó£¬ÄÇÅÂÄãɾ³ýÔªËØ£¬ÄÚ´æÒ²²»»á»ØÊÕ£¬Æä»áÔì³ÉÄÚ´æÐ¹Â¶µÄ¼ÙÏñ£¬²¢¿ÉÄÜÔì³ÉÄÚ´æË鯬ÎÊÌâ¡£ÔÙÈ磬STLijЩÈÝÆ÷µÄsize()==0 ºÍ empty()ÊDz»Ò»ÑùµÄ£¬ÒòΪ£¬size()ÊÇO(n)¸´ÔÓ¶È£¬empty()ÊÇO(1)µÄ¸´ÔÓ¶È£¬Õâ¸öҪСÐÄ¡£ÈçJavaÖеÄJVMµ÷ÓÅÐèҪʹÓõÄÕâЩ²ÎÊý£º-Xms -Xmx -Xmn -XX:SurvivorRatio -XX:MaxTenuringThreshold£¬»¹ÐèҪעÒâJVMµÄGC£¬GCµÄÍþÁ¦´ó¼Ò¶¼ÖªµÀ£¬ÓÈÆäÊÇfull GC£¨»¹ÕûÀíÄÚ´æË鯬£©£¬ËûÔËÐеÄʱºò£¬Õû¸öÊÀ½çµÄʱ¼ä¶¼Í£Ö¹ÁË¡£

4.3ÍøÂçµ÷ÓÅ

ÏÂÃæÖ»½²Ò»Ð©¸ÅÄîÉϵĶ«Î÷¡£

1¡¢TCPµ÷ÓÅ

TCPÁ´½ÓÊÇÓкܶ࿪ÏúµÄ£¬Ò»¸öÊÇ»áÕ¼ÓÃÎļþÃèÊö·û£¬ÁíÒ»¸öÊǻῪ»º´æ£¬Ò»°ãÀ´ËµÒ»¸öϵͳ¿ÉÒÔÖ§³ÖµÄTCPÁ´½ÓÊýÊÇÓÐÏ޵ģ¬ÎÒÃÇÐèÒªÇå³þµØÈÏʶµ½TCPÁ´½Ó¶ÔϵͳµÄ¿ªÏúÊǺܴóµÄ¡£ÕýÊÇÒòΪTCPÊǺÄ×ÊÔ´µÄ£¬ËùÒÔ£¬ºÜ¶à¹¥»÷¶¼ÊÇÈÃÄãϵͳÉϳöÏÖ´óÁ¿µÄTCPÁ´½Ó£¬°ÑÄãµÄϵͳ×ÊÔ´ºÄ¾¡¡£±ÈÈçÖøÃûµÄSYNC Flood¹¥»÷¡£

ËùÒÔ£¬ÎÒÃÇҪעÒâÅäÖÃKeepAlive²ÎÊý£¬Õâ¸ö²ÎÊýµÄÒâ˼ÊǶ¨ÒåÒ»¸öʱ¼ä£¬Èç¹ûÁ´½ÓÉÏûÓÐÊý¾Ý´«Ê䣬ϵͳ»áÔÚÕâ¸öʱ¼ä·¢Ò»¸ö°ü£¬Èç¹ûûÓÐÊÕµ½»ØÓ¦£¬ÄÇôTCP¾ÍÈÏΪÁ´½Ó¶ÏÁË£¬È»ºó¾Í»á°ÑÁ´½Ó¹Ø±Õ£¬ÕâÑù¿ÉÒÔ»ØÊÕϵͳ×ÊÔ´¿ªÏú¡££¨×¢£ºHTTP²ãÉÏÒ²ÓÐKeepAlive²ÎÊý£©¶ÔÓÚÏñHTTPÕâÑùµÄ¶ÌÁ´½Ó£¬ÉèÖÃÒ»¸ö1-2·ÖÖÓµÄkeepalive·Ç³£ÖØÒª¡£Õâ¿ÉÒÔÔÚÒ»¶¨³Ì¶ÈÉÏ·ÀÖ¹DoS¹¥»÷¡£ÓÐÏÂÃæ¼¸¸ö²ÎÊý£¨ÏÂÃæÕâЩ²ÎÊýµÄÖµ½ö¹©²Î¿¼£©£º

net.ipv4.tcp_keepalive_probes = 5

net.ipv4.tcp_keepalive_intvl = 20

net.ipv4.tcp_fin_timeout = 30

¶ÔÓÚTCPµÄTIME_WAITÕâ¸ö״̬£¬Ö÷¶¯¹Ø±ÕµÄÒ»·½½øÈëTIME_WAIT״̬£¬TIME_WAIT״̬½«³ÖÐø2¸öMSL(Max Segment Lifetime)£¬Ä¬ÈÏΪ4·ÖÖÓ£¬TIME_WAIT״̬ϵÄ×ÊÔ´²»ÄÜ»ØÊÕ¡£ÓдóÁ¿µÄTIME_WAITÁ´½ÓµÄÇé¿öÒ»°ãÊÇÔÚHTTP·þÎñÆ÷ÉÏ¡£¶Ô´Ë£¬ÓÐÁ½¸ö²ÎÊýÐèҪעÒ⣬

net.ipv4.tcp_tw_reuse=1

net.ipv4.tcp_tw_recycle=1

ǰÕß±íÊ¾ÖØÓÃTIME_WAIT£¬ºóÕß±íʾ»ØÊÕTIME_WAITµÄ×ÊÔ´¡£

TCP»¹ÓÐÒ»¸öÖØÒªµÄ¸ÅÄî½ÐRWIN£¨TCP Receive Window Size£©£¬Õâ¸ö¶«Î÷µÄÒâ˼ÊÇ£¬ÎÒÒ»¸öTCPÁ´½ÓÔÚûÓÐÏòSender·¢³öackʱ¿ÉÒÔ½ÓÊÕµ½µÄ×î´óµÄÊý¾Ý°ü¡£ÎªÊ²Ã´Õâ¸öºÜÖØÒª£¿ÒòΪÈç¹ûSenderûÓÐÊÕµ½Receiver·¢¹ýÀ´ack£¬Sender¾Í»áÍ£Ö¹·¢ËÍÊý¾Ý²¢»áµÈÒ»¶Îʱ¼ä£¬Èç¹û³¬Ê±£¬ÄÇô¾Í»áÖØ´«¡£Õâ¾ÍÊÇΪʲôTCPÁ´½ÓÊǿɿ¿Á´½ÓµÄÔ­Òò¡£ÖØ´«»¹²»ÊÇ×îÑÏÖØµÄ£¬Èç¹ûÓжª°ü·¢ÉúµÄ»°£¬TCPµÄ´ø¿íʹÓÃÂÊ»áÂíÉÏÊܵ½Ó°Ï죨»áäĿ¼õ°ë£©£¬ÔÙ¶ª°ü£¬ÔÙ¼õ°ë£¬È»ºóÈç¹û²»¶ª°üÁË£¬¾ÍÖð²½»Ö¸´¡£Ïà¹Ø²ÎÊýÈçÏ£º

net.core.wmem_default = 8388608

net.core.rmem_default = 8388608

net.core.rmem_max = 16777216

net.core.wmem_max = 16777216

Ò»°ãÀ´Ëµ£¬ÀíÂÛÉϵÄRWINÓ¦¸ÃÉèÖóɣºÍÌÍÂÁ¿ * »ØÂ·Ê±¼ä¡£Sender¶ËµÄbufferÓ¦¸ÃºÍRWINÓÐÒ»ÑùµÄ´óС£¬ÒòΪSender¶Ë·¢ËÍÍêÊý¾ÝºóÒªµÈReceiver¶ËÈ·ÈÏ£¬Èç¹ûÍøÂçÑÓʱºÜ´ó£¬buffer¹ýСÁË£¬È·ÈϵĴÎÊý¾Í»á¶à£¬ÓÚÊÇÐÔÄܾͲ»¸ß£¬¶ÔÍøÂçµÄÀûÓÃÂÊÒ²¾Í²»¸ßÁË¡£Ò²¾ÍÊÇ˵£¬¶ÔÓÚÑÓ³Ù´óµÄÍøÂ磬ÎÒÃÇÐèÒª´óµÄbuffer£¬ÕâÑù¿ÉÒÔÉÙÒ»µãack£¬¶àһЩÊý¾Ý£¬¶ÔÓÚÏìÓ¦¿ìÒ»µãµÄÍøÂ磬¿ÉÒÔÉÙһЩbuffer¡£ÒòΪ£¬Èç¹ûÓжª°ü£¨Ã»ÓÐÊÕµ½ack£©£¬buffer¹ý´ó¿ÉÄÜ»áÓÐÎÊÌ⣬ÒòΪÕâ»áÈÃTCPÖØ´«ËùÓеÄÊý¾Ý£¬·´¶øÓ°ÏìÍøÂçÐÔÄÜ¡£ËùÒÔ£¬¸ßÐÔÄܵÄÍøÂçÖØÒªµÄÊÇÒªÈÃÍøÂ綪°üÂʷdz£·Ç³£µØÐ¡£¨»ù±¾ÉÏÊÇÓÃÔÚLANÀ£¬Èç¹ûÍøÂç»ù±¾ÊÇ¿ÉÐŵģ¬ÕâÑùÓôóÒ»µãµÄbuffer»áÓиüºÃµÄÍøÂç´«ÊäÐÔÄÜ£¨À´À´»Ø»ØÌ«¶à̫ӰÏìÐÔÄÜÁË£©¡£

2¡¢UDPµ÷ÓÅ

˵µ½UDPµÄµ÷ÓÅ£¬ ¾ÍµÃ˵MTU¡ª¡ª×î´ó´«Êäµ¥Ôª£¨ÆäʵÕâ¶ÔTCPÒ²Ò»Ñù£¬ÒòΪÕâÊÇÁ´Â·²ãÉϵĶ«Î÷£©¡£Ëùν×î´ó´«Êäµ¥Ôª£¬Äã¿ÉÒÔÏëÏñ³ÉÊǹ«Â·ÉϵĹ«½»³µ£¬¼ÙÉèÒ»¸ö¹«½»³µ¿ÉÒÔ×î¶à×ø70ÈË£¬´ø¿í¾ÍÏñÊǹ«Â·µÄ³µµÀÊýÒ»Ñù£¬Èç¹ûÒ»Ìõ·ÉÏ×î¶à¿ÉÒÔÈÝÏÂ100Á¾¹«½»³µ£¬ÄÇÒâζ×ÅÎÒ×î¶à¿ÉÒÔÔËËÍ7000ÈË£¬µ«ÊÇÈç¹û¹«½»³µ×ø²»Âú£¬±ÈÈçÆ½¾ùÿÁ¾³µÖ»ÓÐ20ÈË£¬ÄÇôÎÒÖ»ÔËËÍÁË2000ÈË£¬ÓÚÊÇÎÒ¹«Â·×ÊÔ´£¨´ø¿í×ÊÔ´£©¾Í±»ÀË·ÑÁË¡£ ËùÒÔ£¬ÎÒÃǶÔÓÚÒ»¸öUDPµÄ°ü£¬ÎÒÃÇÒª¾¡Á¿µØÈÃËü´óµ½MTUµÄ×î´ó³ß´çÔÙÍùÍøÂçÉÏ´«£¬ÕâÑù¿ÉÒÔ×î´ó»¯´ø¿íÀûÓÃÂÊ¡£¶ÔÓÚÕâ¸öMTU£¬ÒÔÌ«ÍøÊÇ1500×Ö½Ú£¬¹âÏËÊÇ4352×Ö½Ú£¬802.11ÎÞÏßÍøÊÇ7981¡£µ«ÊÇ£¬µ±ÎÒÃÇÓÃTCP/UDP·¢°üµÄʱºò£¬ÎÒÃǵÄÓÐЧ¸ºÔØPayloadÒªµÍÓÚÕâ¸öÖµ£¬ÒòΪIPЭÒé»á¼ÓÉÏ20¸ö×Ö½Ú£¬UDP»á¼ÓÉÏ8¸ö×Ö½Ú£¨TCP¼ÓµÄ¸ü¶à£©£¬ËùÒÔ£¬Ò»°ãÀ´Ëµ£¬ÄãµÄÒ»¸öUDP°üµÄ×î´óÓ¦¸ÃÊÇ1500-8-20=1472£¬ÕâÊÇÄãµÄÊý¾ÝµÄ´óС¡£µ±È»£¬Èç¹ûÄãÓùâÏ˵ϰ£¬ Õâ¸öÖµ¾Í¿ÉÒÔ¸ü´óһЩ¡££¨Ë³±ã˵һÏ£¬¶ÔÓÚijЩǧ¹âÒÔÌ¬ÍøÍø¿¨À´Ëµ£¬ÔÚÍø¿¨ÉÏ£¬Íø¿¨Ó²¼þÈç¹û·¢ÏÖÄãµÄ°üµÄ´óС³¬¹ýÁËMTU£¬Æä»á°ïÄã×öfragment£¬µ½ÁËÄ¿±ê¶ËÓÖ»á°ïÄã×öÖØ×飬Õâ¾Í²»ÐèÒªÄãÔÚ³ÌÐòÖд¦ÀíÁË£©

ÓÃSocket±à³ÌµÄʱºò£¬Äã¿ÉÒÔʹÓÃsetsockopt() ÉèÖà SO_SNDBUF/SO_RCVBUF µÄ´óС£¬TTLºÍKeepAliveÕâЩ¹Ø¼üµÄÉèÖ㬵±È»£¬»¹Óкܶ࣬¾ßÌå¿ÉÒԲ鿴һÏÂSocketµÄÊֲᡣ

×îºóUDP»¹ÓÐÒ»¸ö×î´óµÄºÃ´¦ÊÇmulti-cast¶à²¥£¬Õâ¸ö¼¼Êõ¶ÔÓÚÄãÐèÒªÔÚÄÚÍøÀï֪ͨ¶ą̀½áµãʱ·Ç³£·½±ãºÍ¸ßЧ¡£¶øÇÒ£¬¶à²¥ÕâÖÖ¼¼Êõ¶ÔÓÚ»ú»áµÄˮƽÀ©Õ¹£¨ÐèÒªÔö¼Ó»úÆ÷À´ÕìÌý¶à²¥ÐÅÏ¢£©Ò²ºÜÓÐÀû¡£

3¡¢Íø¿¨µ÷ÓÅ

¶ÔÓÚÍø¿¨£¬Ò²ÊÇ¿ÉÒÔµ÷Óŵģ¬Õâ¶ÔÓÚǧÕ×ÒÔ¼°ÍøÍø¿¨·Ç³£±ØÒª£¬ÔÚLinuxÏ£¬ÎÒÃÇ¿ÉÒÔÓÃifconfig²é¿´ÍøÉϵÄͳ¼ÆÐÅÏ¢£¬Èç¹ûÎÒÃÇ¿´µ½overrunÉÏÓÐÊý¾Ý£¬ÎÒÃǾͿÉÄÜÐèÒªµ÷ÕûÒ»ÏÂtxqueuelenµÄ³ß´ç£¨Ò»°ãĬÈÏΪ1000£©£¬ÎÒÃÇ¿ÉÒÔµ÷´óһЩ£¬È磺ifconfig eth0 txqueuelen 5000¡£LinuxÏ»¹ÓÐÒ»¸öÃüÁî½Ð£ºethtool¿ÉÒÔÓÃÓÚÉèÖÃÍø¿¨µÄ»º³åÇø´óС¡£ÔÚWindowsÏ£¬ÎÒÃÇ¿ÉÒÔÔÚÍø¿¨ÊÊÅäÆ÷Öеĸ߼¶Ñ¡ÏÖе÷ÕûÏà¹ØµÄ²ÎÊý£¨È磺Receive Buffers, Transmit BufferµÈ£¬²»Í¬µÄÍø¿¨Óв»Í¬µÄ²ÎÊý£©¡£°ÑBufferµ÷´ó¶ÔÓÚÐèÒª´óÊý¾ÝÁ¿µÄÍøÂç´«Êä·Ç³£ÓÐЧ¡£

4¡¢ÆäËüÍøÂçÐÔÄÜ

¹ØÓÚ¶à·¸´Óü¼Êõ£¬Ò²¾ÍÊÇÓÃÒ»¸öÏß³ÌÀ´¹ÜÀíËùÓеÄTCPÁ´½Ó£¬ÓÐÈý¸öϵͳµ÷ÓÃÒªÖØµã×¢Ò⣺һ¸öÊÇselect£¬Õâ¸öϵͳµ÷ÓÃÖ»Ö§³ÖÉÏÏÞ1024¸öÁ´½Ó£¬µÚ¶þ¸öÊÇpoll£¬Æä¿ÉÒÔÍ»ÆÆ1024µÄÏÞÖÆ£¬µ«ÊÇselectºÍpoll±¾ÖÊÉÏÊÇʹÓõÄÂÖѯ»úÖÆ£¬ÂÖѯ»úÖÆÔÚÁ´½Ó¶àµÄʱºòÐÔÄܺܲÒòÖ÷ÊÇO(n)µÄËã·¨£¬ËùÒÔ£¬epoll³öÏÖÁË£¬epollÊDzÙ×÷ϵͳÄÚºËÖ§³ÖµÄ£¬½öµ±ÔÚÁ´½Ó»îԾʱ£¬²Ù×÷ϵͳ²Å»ácallback£¬ÕâÊÇÓɲÙ×÷ϵͳ֪ͨ´¥·¢µÄ£¬µ«ÆäÖ»ÓÐLinux Kernel 2.6ÒÔºó²ÅÖ§³Ö£¨×¼È·ËµÊÇ2.5.44ÖÐÒýÈëµÄ£©£¬µ±È»£¬Èç¹ûËùÓеÄÁ´½Ó¶¼ÊÇ»îÔ¾µÄ£¬¹ý¶àµÄʹÓÃepoll_ctl¿ÉÄÜ»á±ÈÂÖѯµÄ·½Ê½»¹Ó°ÏìÐÔÄÜ£¬²»¹ýÓ°ÏìµÄ²»´ó¡£

ÁíÍ⣬¹ØÓÚһЩºÍDNS LookupµÄϵͳµ÷ÓÃҪСÐÄ£¬±ÈÈ磺gethostbyaddr/gethostbyname£¬Õâ¸öº¯Êý¿ÉÄÜ»áÏ൱µÄ·Ñʱ£¬ÒòΪÆäÒªµ½ÍøÂçÉÏÈ¥ÕÒÓòÃû£¬ÒòΪDNSµÄµÝ¹é²éѯ£¬»áµ¼ÖÂÑÏÖØ³¬Ê±£¬¶øÓÖ²»ÄÜͨ¹ýÉèÖÃʲô²ÎÊýÀ´ÉèÖÃtime out£¬¶Ô´ËÄã¿ÉÒÔͨ¹ýÅäÖÃhostsÎļþÀ´¼Ó¿ìËÙ¶È£¬»òÊÇ×Ô¼ºÔÚÄÚ´æÖйÜÀí¶ÔÓ¦±í£¬ÔÚ³ÌÐòÆô¶¯Ê±²éºÃ£¬¶ø²»ÒªÔÚÔËÐÐʱÿ´Î¶¼²é¡£ÁíÍ⣬ÔÚ¶àÏß³ÌÏÂÃæ£¬gethostbyname»áÒ»¸ö¸üÑÏÖØµÄÎÊÌ⣬¾ÍÊÇÈç¹ûÓÐÒ»¸öÏ̵߳Ägethostbyname·¢Éú×èÈû£¬ÆäËüÏ̶߳¼»áÔÚgethostbyname´¦·¢Éú×èÈû£¬Õâ¸ö±È½Ï±ä̬£¬ÒªÐ¡ÐÄ¡££¨¿ÉÒÔÊÔÊÔGNUµÄgethostbyname_r()£¬Õâ¸öµÄÐÔÄÜÒªºÃһЩ£© ÕâÖÖµ½ÍøÉÏÕÒÐÅÏ¢µÄ¶«Î÷ºÜ¶à£¬±ÈÈ磬Èç¹ûÄãµÄLinuxʹÓÃÁËNIS£¬»òÊÇNFS£¬Ä³Ð©Óû§»òÎļþÏà¹ØµÄϵͳµ÷ÓþͺÜÂý£¬ËùÒÔҪСÐÄ¡£

4.4ϵͳµ÷ÓÅ

1¡¢I/OÄ£ÐÍ

Ç°ÃæËµµ½¹ýselect/poll/epollÕâÈý¸öϵͳµ÷Óã¬ÎÒÃǶ¼ÖªµÀ£¬Unix/LinuxϰÑËùÓеÄÉ豸¶¼µ±³ÉÎļþÀ´½øÐÐI/O£¬ËùÒÔ£¬ÄÇÈý¸ö²Ù×÷¸üÓ¦¸ÃËãÊÇI/OÏà¹ØµÄϵͳµ÷Óá£Ëµµ½ I/OÄ£ÐÍ£¬Õâ¶ÔÓÚÎÒÃǵÄI/OÐÔÄÜÏàµ±ÖØÒª£¬ÎÒÃÇÖªµÀ£¬Unix/Linux¾­µäµÄI/O·½Ê½ÊÇ£º

µÚÒ»ÖÖ£¬Í¬²½×èÈûʽI/O¡£

µÚ¶þÖÖ£¬Í¬²½ÎÞ×èÈû·½Ê½¡£Æäͨ¹ýfctnlÉèÖà O_NONBLOCK À´Íê³É¡£

µÚÈýÖÖ£¬¶ÔÓÚselect/poll/epollÕâÈý¸öÊÇI/O²»×èÈû£¬µ«ÊÇÔÚʼþÉÏ×èÈû£¬ËãÊÇ£ºI/OÒì²½£¬Ê¼þͬ²½µÄµ÷Óá£

µÚËÄÖÖ£¬AIO·½Ê½¡£ÕâÖÖI/O Ä£ÐÍÊÇÒ»ÖÖ´¦ÀíÓë I/O ²¢ÐеÄÄ£ÐÍ¡£I/OÇëÇó»áÁ¢¼´·µ»Ø£¬ËµÃ÷ÇëÇóÒѾ­³É¹¦·¢ÆðÁË¡£ÔÚºǫ́Íê³ÉI/O²Ù×÷ʱ£¬ÏòÓ¦ÓóÌÐò·¢Æð֪ͨ£¬Í¨ÖªÓÐÁ½ÖÖ·½Ê½£ºÒ»ÖÖÊDzúÉúÒ»¸öÐźţ¬ÁíÒ»ÖÖÊÇÖ´ÐÐÒ»¸ö»ùÓÚÏ̵߳Ļص÷º¯ÊýÀ´Íê³ÉÕâ´Î I/O ´¦Àí¹ý³Ì¡£

µÚËÄÖÖÒòΪûÓÐÈκεÄ×èÈû£¬ÎÞÂÛÊÇI/OÉÏ£¬»¹ÊÇʼþ֪ͨÉÏ£¬ËùÒÔ£¬Æä¿ÉÒÔÈÃÄã³ä·ÖµØÀûÓÃCPU£¬±ÈÆðµÚ¶þÖÖͬ²½ÎÞ×èÈûºÃ´¦¾ÍÊÇ£¬µÚ¶þÖÖÒªÄãÒ»±éÒ»±éµØÈ¥ÂÖѯ¡£NginxÖ®ËùÒÔ¸ßЧ£¬ÊÇÆäʹÓÃÁËepollºÍAIOµÄ·½Ê½À´½øÐÐI/OµÄ¡£

ÔÙ˵һÏÂWindowsϵÄI/OÄ£ÐÍ£º

a£©Ò»¸öÊÇWriteFileϵͳµ÷Óã¬Õâ¸öϵͳµ÷ÓÿÉÒÔÊÇͬ²½×èÈûµÄ£¬Ò²¿ÉÒÔÊÇͬ²½ÎÞ×èÈûµÄ£¬¹ØÓÚ¿´ÎļþÊDz»ÊÇÒÔOverlapped´ò¿ªµÄ¡£¹ØÓÚͬ²½ÎÞ×èÈû£¬ÐèÒªÉèÖÃÆä×îºóÒ»¸ö²ÎÊýOverlapped£¬Î¢Èí½ÐOverlapped I/O£¬ÄãÐèÒªWaitForSingleObject²ÅÄÜÖªµÀÓÐûÓÐдÍê³É¡£Õâ¸öϵͳµ÷ÓõÄÐÔÄÜ¿ÉÏë¶øÖª¡£

b£©ÁíÒ»¸ö½ÐWriteFileExµÄϵͳµ÷Óã¬Æä¿ÉÒÔʵÏÖÒì²½I/O£¬²¢¿ÉÒÔÈÃÄã´«ÈëÒ»¸öcallbackº¯Êý£¬µÈI/O½áÊøºó»Øµ÷Ö®£¬µ«ÊÇÕâ¸ö»Øµ÷µÄ¹ý³ÌWindowsÊǰÑcallbackº¯Êý·Åµ½ÁËAPC£¨Asynchronous Procedure Calls£©µÄ¶ÓÁÐÖУ¬È»ºó£¬Ö»Óõ±Ó¦ÓóÌÐòµ±Ç°Ï̳߳ÉΪ¿É±»Í¨Öª×´Ì¬£¨Alterable£©Ê±£¬²Å»á±»»Øµ÷¡£Ö»Óе±ÄãµÄÏß³ÌʹÓÃÁËÕ⼸¸öº¯ÊýʱWaitForSingleObjectEx, WaitForMultipleObjectsEx,

MsgWaitForMultipleObjectsEx, SignalObjectAndWait ºÍ SleepEx£¬Ï̲߳Żá³ÉΪAlterable״̬¡£¿É¼û£¬Õâ¸öÄ£ÐÍ£¬»¹ÊÇÓÐwait£¬ËùÒÔÐÔÄÜÒ²²»¸ß¡£

c£©È»ºóÊÇIOCP ¨C IO Completion Port£¬IOCP»á°ÑI/OµÄ½á¹û·ÅÔÚÒ»¸ö¶ÓÁÐÖУ¬µ«ÊÇ£¬ÕìÌýÕâ¸ö¶ÓÁеIJ»ÊÇÖ÷Ị̈߳¬¶øÊÇרÃÅÀ´¸ÉÕâ¸öʵÄÒ»¸ö»ò¶à¸öÏß³ÌÈ¥¸É£¨ÀÏµÄÆ½Ì¨ÒªÄã×Ô¼º´´½¨Ị̈߳¬ÐÂµÄÆ½Ì¨ÊÇÄã¿ÉÒÔ´´½¨Ò»¸öÏ̳߳أ©¡£IOCPÊÇÒ»¸öÏ̳߳ØÄ£ÐÍ¡£Õâ¸öºÍLinuxϵÄAIOÄ£ÐͱȽÏÏàËÆ£¬µ«ÊÇʵÏÖ·½Ê½ºÍʹÓ÷½Ê½ÍêÈ«²»Ò»Ñù¡£

µ±È»£¬ÕæÕýÌá¸ßI/OÐÔÄÜ·½Ê½ÊǰѺÍÍâÉèµÄI/OµÄ´ÎÊý½µµ½×îµÍ£¬×îºÃûÓУ¬ËùÒÔ£¬¶ÔÓÚ¶ÁÀ´Ëµ£¬ÄÚ´æcacheͨ³£¿ÉÒÔ´ÓÖÊÉÏÌáÉýÐÔÄÜ£¬ÒòΪÄÚ´æ±ÈÍâÉè¿ìÌ«¶àÁË¡£¶ÔÓÚдÀ´Ëµ£¬cacheסҪдµÄÊý¾Ý£¬ÉÙд¼¸´Î£¬µ«ÊÇcache´øÀ´µÄÎÊÌâ¾ÍÊÇʵʱÐÔµÄÎÊÌ⣬Ҳ¾ÍÊÇlatency»á±ä´ó£¬ÎÒÃÇÐèÒªÔÚдµÄ´ÎÊýÉϺÍÏìÓ¦ÉÏ×öȨºâ¡£

2¡¢¶àºËCPUµ÷ÓÅ

¹ØÓÚCPUµÄ¶àºË¼¼Êõ£¬ CPU0ÊǺܹؼüµÄ£¬Èç¹û0ºÅCPU±»Óõùý¶àʱ£¬±ðµÄCPUÐÔÄÜÒ²»áϽµ£¬ÒòΪCPU0×÷ÓÃÊÇÓе÷Õû¹¦Äܵģ¬ËùÒÔ£¬ÎÒÃDz»ÄÜÈÎÓɲÙ×÷ϵͳ¸ºÔؾùºâ£¬ÒòΪÎÒÃÇ×Ô¼º¸üÁ˽â×Ô¼ºµÄ³ÌÐò£¬ËùÒÔ£¬ÎÒÃÇ¿ÉÒÔÊÖ¶¯µÄΪÆä·ÖÅäCPUºË£¬¶ø²»»á¹ý¶àµØÕ¼ÓÃCPU0£¬»òÊÇÈÃÎÒÃǹؼü½ø³ÌºÍÒ»¶Ñ±ðµÄ½ø³Ì¼·ÔÚÒ»Æð¡£

¶ÔÓÚWindowsÀ´Ëµ£¬ÎÒÃÇ¿ÉÒÔͨ¹ý¡°ÈÎÎñ¹ÜÀíÆ÷¡±Öеġ°½ø³Ì¡±¶øÖÐÓÒ¼ü²Ëµ¥Öеġ°ÉèÖÃÏà¹ØÐÔ¡­¡­¡±£¨Set Affinity¡­£©À´ÉèÖò¢ÏÞÖÆÕâ¸ö½ø³ÌÄܱ»ÔËÐÐÔÚÄÄЩºËÉÏ¡£

¶ÔÓÚLinuxÀ´Ëµ£¬¿ÉÒÔʹÓÃtasksetÃüÁîÀ´ÉèÖã¨Äã¿ÉÒÔͨ¹ý°²×°schedutilsÀ´°²×°Õâ¸öÃüÁapt-get install schedutils£©

¶àºËCPU»¹ÓÐÒ»¸ö¼¼Êõ½ÐNUMA¼¼Êõ£¨Non-Uniform Memory Access£©¡£´«Í³µÄ¶àºËÔËËãÊÇʹÓÃSMP(Symmetric Multi-Processor )ģʽ£¬¶à¸ö´¦ÀíÆ÷¹²ÏíÒ»¸ö¼¯ÖеĴ洢Æ÷ºÍI/O×ÜÏß¡£ÓÚÊǾͻá³öÏÖÒ»Ö´洢Æ÷·ÃÎʵÄÎÊÌ⣬һÖÂÐÔͨ³£Òâζ×ÅÐÔÄÜÎÊÌâ¡£NUMAģʽÏ£¬´¦ÀíÆ÷±»»®·Ö³É¶à¸önode£¬ ÿ¸önodeÓÐ×Ô¼ºµÄ±¾µØ´æ´¢Æ÷¿Õ¼ä¡£ÔÚLinuxÏ£¬¶ÔNUMAµ÷ÓŵÄÃüÁîÊÇ£ºnumactl ¡£ÈçÏÂÃæµÄÃüÁ£¨Ö¸¶¨ÃüÁî¡°myprogram arg1 arg2¡±ÔËÐÐÔÚnode 0 ÉÏ£¬ÆäÄÚ´æ·ÖÅäÔÚnode 0 ºÍ 1ÉÏ£©

numactl --cpubind=0 --membind=0,1 myprogram arg1 arg2

µ±È»£¬ÉÏÃæÕâ¸öÃüÁî²¢²»ºÃ£¬ÒòΪÄÚ´æ¿çÔ½ÁËÁ½¸önode£¬Õâ·Ç³£²»ºÃ¡£×îºÃµÄ·½Ê½ÊÇÖ»ÈóÌÐò·ÃÎʺÍ×Ô¼ºÔËÐÐÒ»ÑùµÄnode£¬È磺

$ numactl --membind 1 --cpunodebind 1 --localalloc myapplication

3¡¢Îļþϵͳµ÷ÓÅ

ÒòΪÎļþϵͳҲÊÇÓÐcacheµÄ£¬ËùÒÔ£¬ÎªÁËÈÃÎļþϵͳÓÐ×î´óµÄÐÔÄÜ£ºÊ×ÒªµÄÊÂÇé¾ÍÊÇ·ÖÅä×ã¹»´óµÄÄڴ棬Õâ¸ö·Ç³£¹Ø¼ü£¬ÔÚLinuxÏ¿ÉÒÔʹÓÃfreeÃüÁîÀ´²é¿´ free/used/buffers/cached£¬ÀíÏëÀ´Ëµ£¬buffersºÍcachedÓ¦¸ÃÓÐ40%×óÓÒ£»È»ºóÊÇÒ»¸ö¿ìËÙµÄÓ²ÅÌ¿ØÖÆÆ÷£¬SCSI»áºÃºÜ¶à£»×î¿ìµÄÊÇIntel SSD ¹Ì̬ӲÅÌ£¬Ëٶȳ¬¿ì£¬µ«ÊÇд´ÎÊýÓÐÏÞ¡£

½ÓÏÂÀ´£¬ÎÒÃǾͿÉÒÔµ÷ÓÅÎļþϵͳÅäÖÃÁË£¬¶ÔÓÚLinuxµÄExt3/4À´Ëµ£¬¼¸ºõÔÚËùÓÐÇé¿ö϶¼ÓÐËù°ïÖúµÄÒ»¸ö²ÎÊýÊǹرÕÎļþϵͳ·ÃÎÊʱ¼ä£¬ÔÚ/etc/fstabÏ¿´¿´ÄãµÄÎļþϵͳÓÐûÓÐnoatime²ÎÊý£¨Ò»°ãÀ´ËµÓ¦¸ÃÓУ©£¬»¹ÓÐÒ»¸öÊÇdealloc£¬Ëü¿ÉÒÔÈÃϵͳÔÚ×îºóʱ¿Ì¾ö¶¨Ð´ÈëÎļþ·¢ÉúʱʹÓÃÄĸö¿é£¬¿ÉÓÅ»¯Õâ¸öдÈë³ÌÐò¡£»¹Òª×¢ÒâÒ»ÏÂÈýÖÖÈÕ־ģʽ£ºdata=journal¡¢data=orderedºÍdata=writeback¡£Ä¬ÈÏÉèÖÃdata=orderedÌṩÐÔÄܺͷÀ»¤Ö®¼äµÄ×î¼Ñƽºâ¡£

µ±È»£¬¶ÔÓÚÕâЩÀ´Ëµ£¬ext4µÄĬÈÏÉèÖûù±¾ÉÏÊÇ×î¼ÑÓÅ»¯ÁË¡£

ÕâÀï½éÉÜÒ»¸öLinuxϵIJ鿴I/OµÄÃüÁ¡ª iotop£¬¿ÉÒÔÈÃÄã¿´µ½¸÷½ø³ÌµÄ´ÅÅ̶ÁдµÄ¸ºÔØÇé¿ö¡£

4.5Êý¾Ý¿âµ÷ÓÅ

1¡¢Êý¾Ý¿âÒýÇæµ÷ÓÅ

Êý¾Ý¿âµÄËøµÄ·½Ê½¡£Õâ¸ö·Ç³£µØÖØÒª¡£²¢·¢Çé¿öÏ£¬ËøÊǷdz£Ó°ÏìÐÔÄܵġ£¸÷ÖÖ¸ôÀë¼¶±ð£¬ÐÐËø£¬±íËø£¬Ò³Ëø£¬¶ÁÐ´Ëø£¬ÊÂÎñËø£¬ÒÔ¼°¸÷ÖÖдÓÅÏÈ»¹ÊǶÁÓÅÏÈ»úÖÆ¡£ÐÔÄÜ×î¸ßµÄÊDz»ÒªËø£¬ËùÒÔ£¬·Ö¿â·Ö±í£¬ÈßÓàÊý¾Ý£¬¼õÉÙÒ»ÖÂÐÔÊÂÎñ´¦Àí£¬¿ÉÒÔÓÐЧµØÌá¸ßÐÔÄÜ¡£NoSQL¾ÍÊÇÎþÉüÁËÒ»ÖÂÐÔºÍÊÂÎñ´¦Àí£¬²¢ÈßÓàÊý¾Ý£¬´Ó¶ø´ïµ½ÁË·Ö²¼Ê½ºÍ¸ßÐÔÄÜ¡£

Êý¾Ý¿âµÄ´æ´¢»úÖÆ¡£²»µ«Òª¸ãÇå³þ¸÷ÖÖÀàÐÍ×Ö¶ÎÊÇÔõô´æ´¢µÄ£¬¸üÖØÒªµÄÊÇÊý¾Ý¿âµÄÊý¾Ý´æ´¢·½Ê½£¬ÊÇÔõô·ÖÇøµÄ£¬ÊÇÔõô¹ÜÀíµÄ£¬±ÈÈçOracleµÄÊý¾ÝÎļþ£¬±í¿Õ¼ä£¬¶Î£¬µÈµÈ¡£Á˽âÇå³þÕâ¸ö»úÖÆ¿ÉÒÔ¼õÇáºÜ¶àµÄI/O¸ºÔØ¡£±ÈÈ磺MySQLÏÂʹÓÃshow engines;¿ÉÒÔ¿´µ½¸÷ÖÖ´æ´¢ÒýÇæµÄÖ§³Ö¡£²»Í¬µÄ´æ´¢ÒýÇæÓв»Í¬µÄ²àÖØµã£¬Õë¶Ô²»Í¬µÄÒµÎñ»òÊý¾Ý¿âÉè¼Æ»áÈÃÄãÓв»Í¬µÄÐÔÄÜ¡£

Êý¾Ý¿âµÄ·Ö²¼Ê½²ßÂÔ¡£×î¼òµ¥µÄ¾ÍÊǸ´ÖÆ»ò¾µÏñ£¬ÐèÒªÁ˽â·Ö²¼Ê½µÄÒ»ÖÂÐÔËã·¨£¬»òÊÇÖ÷Ö÷ͬ²½£¬Ö÷´Óͬ²½¡£Í¨¹ýÁ˽âÕâÖÖ¼¼ÊõµÄ»úÀí¿ÉÒÔ×öµ½Êý¾Ý¿â¼¶±ðµÄˮƽÀ©Õ¹¡£

2¡¢SQLÓï¾äÓÅ»¯

¹ØÓÚSQLÓï¾äµÄÓÅ»¯£¬Ê×ÏÈÒ²ÊÇҪʹÓù¤¾ß£¬±ÈÈ磺MySQL SQL Query Analyzer£¬Oracle SQL Performance Analyzer£¬»òÊÇ΢ÈíSQL Query Analyzer£¬»ù±¾ÉÏÀ´Ëµ£¬ËùÓеÄRMDB¶¼»áÓÐÕâÑùµÄ¹¤¾ß£¬À´ÈÃÄã²é¿´ÄãµÄÓ¦ÓÃÖеÄSQLµÄÐÔÄÜÎÊÌâ¡£ »¹¿ÉÒÔʹÓÃexplainÀ´¿´¿´SQLÓï¾ä×îÖÕExecution Plan»áÊÇʲôÑùµÄ¡£

»¹ÓÐÒ»µãºÜÖØÒª£¬Êý¾Ý¿âµÄ¸÷ÖÖ²Ù×÷ÐèÒª´óÁ¿µÄÄڴ棬ËùÒÔ·þÎñÆ÷µÄÄÚ´æÒª¹»£¬ÓÅÆäÓ¦¶ÔÄÇЩ¶à±í²éѯµÄSQLÓï¾ä£¬ÄÇÊÇÏ൱µÄºÄÄÚ´æ¡£

ÏÂÃæ¼òµ¥Ëµ¼¸¸ö»áÓÐÐÔÄÜÎÊÌâµÄSQL£º

1£©È«±í¼ìË÷¡£±ÈÈ磺select * from user where lastname = ¡°xxxx¡±£¬ÕâÑùµÄSQLÓï¾ä»ù±¾ÉÏÊÇÈ«±í²éѯ£¬ÏßÐÔ¸´ÔÓ¶ÈO(n)£¬¼Ç¼ÊýÔ½¶à£¬ÐÔÄÜÒ²Ô½²î£¨È磺100Ìõ¼Ç¼µÄ²éÕÒÒª50ms£¬Ò»°ÙÍòÌõ¼Ç¼ÐèÒª5·ÖÖÓ£©¡£¶ÔÓÚÕâÖÖÇé¿ö£¬ÎÒÃÇ¿ÉÒÔÓÐÁ½ÖÖ·½·¨Ìá¸ßÐÔÄÜ£ºÒ»ÖÖ·½·¨ÊÇ·Ö±í£¬°Ñ¼Ç¼Êý½µÏÂÀ´£¬ÁíÒ»ÖÖ·½·¨Êǽ¨Ë÷Òý£¨Îªlastname½¨Ë÷Òý£©¡£Ë÷Òý¾ÍÏñÊÇkey-valueµÄÊý¾Ý½á¹¹Ò»Ñù£¬key¾ÍÊÇwhereºóÃæµÄ×ֶΣ¬value¾ÍÊÇÎïÀíÐкţ¬¶ÔË÷ÒýµÄËÑË÷¸´ÔÓ¶ÈÊÇ»ù±¾ÉÏÊÇO(log(n)) ¡ª¡ªÓÃB-TreeʵÏÖË÷Òý£¨È磺100Ìõ¼Ç¼µÄ²éÕÒÒª50ms£¬Ò»°ÙÍòÌõ¼Ç¼ÐèÒª100ms£©¡£

2£©Ë÷Òý¡£¶ÔÓÚË÷Òý×ֶΣ¬×îºÃ²»ÒªÔÚ×Ö¶ÎÉÏ×ö¼ÆËã¡¢ÀàÐÍת»»¡¢º¯Êý¡¢¿ÕÖµÅжϡ¢×Ö¶ÎÁ¬½Ó²Ù×÷£¬ÕâЩ²Ù×÷¶¼»áÆÆ»µË÷ÒýÔ­±¾µÄÐÔÄÜ¡£µ±È»£¬Ë÷ÒýÒ»°ã¶¼³öÏÖÔÚWhere»òÊÇOrder by×Ö¾äÖУ¬ËùÒÔ¶ÔWhereºÍOrder by×Ó¾äÖеÄ×Ö¶Î×îºÃ²»Òª½øÐмÆËã²Ù×÷£¬»òÊǼÓÉÏʲôNOTÖ®ÀàµÄ£¬»òÊÇʹÓÃʲôº¯Êý¡£

3£©¶à±í²éѯ¡£¹ØÏµÐÍÊý¾Ý¿â×î¶àµÄ²Ù×÷¾ÍÊǶà±í²éѯ£¬¶à±í²éѯÖ÷ÒªÓÐÈý¸ö¹Ø¼ü×Ö£¬EXISTS£¬INºÍJOIN¡£»ù±¾À´Ëµ£¬ÏÖ´úµÄÊý¾ÝÒýÇæ¶ÔSQLÓï¾äÓÅ»¯µÃ¶¼Í¦ºÃµÄ£¬JOINºÍIN/EXISTSÔÚ½á¹ûÉÏÓÐЩ²»Í¬£¬µ«ÐÔÄÜ»ù±¾É϶¼²î²»¶à¡£ÓÐÈË˵£¬EXISTSµÄÐÔÄÜÒªºÃÓÚIN£¬INµÄÐÔÄÜÒªºÃÓÚJOIN£¬¸öÈ˾õµÃ£¬Õâ¸ö»¹Òª¿´ÄãµÄÊý¾Ý¡¢schemaºÍSQLÓï¾äµÄ¸´ÔÓ¶È£¬¶ÔÓÚÒ»°ãµÄ¼òµ¥µÄÇé¿öÀ´Ëµ£¬¶¼²î²»¶à£¬ËùÒÔǧÍò²»ÒªÊ¹Óùý¶àµÄǶÌ×£¬Ç§Íò²»ÒªÈÃÄãµÄSQLÌ«¸´ÔÓ£¬Äþ¿ÉʹÓü¸¸ö¼òµ¥µÄSQLÒ²²»ÒªÊ¹ÓÃÒ»¸ö¾Þ´óÎޱȵÄǶÌ×N¼¶µÄSQL¡£»¹ÓÐÈË˵£¬Èç¹ûÁ½¸ö±íµÄÊý¾ÝÁ¿²î²»¶à£¬ExistsµÄÐÔÄÜ¿ÉÄÜ»á¸ßÓÚIn£¬In¿ÉÄÜ»á¸ßÓÚJoin£¬Èç¹ûÕâÁ½¸ö±íÒ»´óһС£¬ÄÇô×Ó²éѯÖУ¬ExistsÓôó±í£¬InÔòÓÃС±í¡£

4£©JOIN²Ù×÷¡£ÓÐÈË˵£¬Join±íµÄ˳Ðò»áÓ°ÏìÐÔÄÜ£¬Ö»ÒªJoinµÄ½á¹û¼¯ÊÇÒ»Ñù£¬ÐÔÄܺÍjoinµÄ´ÎÐòÎ޹ء£ÒòΪºǫ́µÄÊý¾Ý¿âÒýÇæ»á°ïÎÒÃÇÓÅ»¯µÄ¡£JoinÓÐÈýÖÖʵÏÖËã·¨£¬Ç¶Ì×Ñ­»·£¬ÅÅÐò¹é²¢£¬ºÍHashʽµÄJoin¡££¨MySQLÖ»Ö§³ÖµÚÒ»ÖÖ£©

ǶÌ×Ñ­»·£¬¾ÍºÃÏñÊÇÎÒÃdz£¼ûµÄ¶àÖØÇ¶Ì×Ñ­»·¡£×¢Òâ£¬Ç°ÃæµÄË÷Òý˵¹ý£¬Êý¾Ý¿âµÄË÷Òý²éÕÒËã·¨ÓõÄÊÇB-Tree£¬ÕâÊÇO(log(n))µÄËã·¨£¬ËùÒÔ£¬Õû¸öËã·¨¸´·¨¶ÈÓ¦¸ÃÊÇO(log(n)) * O(log(m)) ÕâÑùµÄ¡£

HashʽµÄJoin£¬Ö÷Òª½â¾öǶÌ×Ñ­»·µÄO(log(n))µÄ¸´ÔÓ£¬Ê¹ÓÃÒ»¸öÁÙʱµÄhash±íÀ´±ê¼Ç¡£

ÅÅÐò¹é²¢£¬Òâ˼ÊÇÁ½¸ö±í°´ÕÕ²éѯ×Ö¶ÎÅźÃÐò£¬È»ºóÔٺϲ¢¡£µ±È»£¬Ë÷Òý×Ö¶ÎÒ»°ãÊÇÅźÃÐòµÄ¡£

×ÜÖ®£¬¾ßÌåÒª¿´Ê²Ã´ÑùµÄÊý¾Ý£¬Ê²Ã´ÑùµÄSQLÓï¾ä£¬Äã²ÅÖªµÀÓÃÄÄÖÖ·½·¨×îºÃ¡£

5£©²¿·Ö½á¹û¼¯¡£ÎÒÃÇÖªµÀMySQLÀïµÄLimit¹Ø¼ü×Ö£¬OracleÀïµÄrownum£¬SQL ServerÀïµÄTop¶¼ÊÇÔÚÏÞÖÆÇ°¼¸ÌõµÄ·µ»Ø½á¹û¡£Õâ¸øÁËÎÒÃÇÊý¾Ý¿âÒýÇæºÜ¶à¿ÉÒÔµ÷ÓŵĿռ䡣һ°ãÀ´Ëµ£¬·µ»Øtop nµÄ¼Ç¼Êý¾ÝÐèÒªÎÒÃÇʹÓÃorder by£¬×¢ÒâÔÚÕâÀïÎÒÃÇÐèҪΪorder byµÄ×ֶν¨Á¢Ë÷Òý¡£ÓÐÁ˱»½¨Ë÷ÒýµÄorder byºó£¬»áÈÃÎÒÃǵÄselectÓï¾äµÄÐÔÄܲ»»á±»¼Ç¼ÊýµÄËùÓ°Ï졣ʹÓÃÕâ¸ö¼¼Êõ£¬Ò»°ãÀ´ËµÎÒÃÇǰ̨»áÒÔ·ÖÒ³·½Ê½À´ÏÔÏÖÊý¾Ý£¬MySQLÓõÄÊÇOFFSET£¬SQL ServerÓõÄÊÇFETCH NEXT£¬ÕâÖÖFetchµÄ·½Ê½Æäʵ²¢²»ºÃÊÇÏßÐÔ¸´ÔÓ¶È£¬ËùÒÔ£¬Èç¹ûÎÒÃÇÄܹ»ÖªµÀorder by×ֶεĵڶþÒ³µÄÆðʼֵ£¬ÎÒÃǾͿÉÒÔÔÚwhereÓï¾äÀïÖ±½ÓʹÓÃ>=µÄ±í´ïʽÀ´select£¬ÕâÖÖ¼¼Êõ½Ðseek£¬¶ø²»ÊÇfetch£¬seekµÄÐÔÄܱÈfetchÒª¸ßºÜ¶à¡£

6£©×Ö·û´®¡£ÕýÈçÎÒÇ°ÃæËù˵µÄ£¬×Ö·û´®²Ù×÷¶ÔÐÔÄÜÉÏÓзdz£´óµÄجÃΣ¬ËùÒÔ£¬ÄÜÓÃÊý¾ÝµÄÇé¿ö¾ÍÓÃÊý×Ö£¬±ÈÈ磺ʱ¼ä£¬¹¤ºÅ£¬µÈ¡£

7£©È«ÎļìË÷¡£Ç§Íò²»ÒªÓÃLikeÖ®ÀàµÄ¶«Î÷À´×öÈ«ÎļìË÷£¬Èç¹ûÒªÍæÈ«ÎļìË÷£¬¿ÉÒÔ³¢ÊÔʹÓÃSphinx¡£

8£©ÆäËü¡£

²»Òªselect *£¬¶øÊÇÃ÷È·Ö¸³ö¸÷¸ö×ֶΣ¬Èç¹ûÓжà¸ö±í£¬Ò»¶¨ÒªÔÚ×Ö¶ÎÃûǰ¼ÓÉϱíÃû£¬²»ÒªÈÃÒýÇæÈ¥Ëã¡£

²»ÒªÓÃHaving£¬ÒòΪÆäÒª±éÀúËùÓеļǼ¡£ÐÔÄܲîµÃ²»ÄÜÔٲ

¾¡¿ÉÄܵØÊ¹ÓÃUNION ALL È¡´ú UNION¡£

Ë÷Òý¹ý¶à£¬insertºÍdelete¾Í»áÔ½Âý¡£¶øupdateÈç¹ûupdate¶àÊýË÷Òý£¬Ò²»áÂý£¬µ«ÊÇÈç¹ûÖ»updateÒ»¸ö£¬ÔòÖ»»áÓ°ÏìÒ»¸öË÷Òý±í¡£

5ÐÔÄܵ÷ÓÅ£¨ÒµÎñºÍÉè¼Æ²ãÃæ£©

ÎÞÂÛÄãÔõôÉè¼Æ£¬ÄãµÄϵͳһ¶¨ÒªÄÜÈÝÒ×µØË®Æ½À©Õ¹¡£Ò²¾ÍÊÇ˵£¬ÄãµÄÕû¸öÊý¾ÝÁ÷ÖУ¬ËùÓеĻ·½Ú¶¼ÒªÄܹ»Ë®Æ½À©Õ¹¡£

5.1ǰ¶ËÐÔÄÜÓÅ»¯¼¼Êõ

5.1.1ǰ¶Ë¸ºÔؾùºâ

ͨ¹ýDNSµÄ¸ºÔؾùºâÆ÷£¨Ò»°ãÔÚ·ÓÉÆ÷Éϸù¾Ý·ÓɵĸºÔØÖض¨Ïò£©¿ÉÒÔ°ÑÓû§µÄ·ÃÎʾùÔȵطÖÉ¢ÔÚ¶à¸öWeb·þÎñÆ÷ÉÏ¡£ÕâÑù¿ÉÒÔ¼õÉÙWeb·þÎñÆ÷µÄÇëÇó¸ºÔØ¡£ÒòΪhttpµÄÇëÇó¶¼ÊǶÌ×÷Òµ£¬ËùÒÔ£¬¿ÉÒÔͨ¹ýºÜ¼òµ¥µÄ¸ºÔؾùºâÆ÷À´Íê³ÉÕâÒ»¹¦ÄÜ¡£×îºÃÊÇÓÐCDNÍøÂçÈÃÓû§Á¬½ÓÓëÆä×î½üµÄ·þÎñÆ÷£¨CDNͨ³£°éËæ×Å·Ö²¼Ê½´æ´¢£©¡£¶Ôǰ¶ËÒ³ÃæÒ²ÓÐЩÓÅ»¯ÒªÇó£º

¼õÉÙǰ¶ËÁ´½ÓÊý

¼õÉÙÍøÒ³´óСÔö¼Ó´ø¿í

ǰ¶ËÒ³Ãæ¾²Ì¬»¯

5.1.2ÓÅ»¯²éѯ

ºÜ¶àÈ˲éѯ¶¼ÊÇÔÚ²éÒ»ÑùµÄ£¬ÍêÈ«¿ÉÒÔÓ÷´Ïò´úÀíºÏ²¢ÕâЩ²¢·¢µÄÏàͬµÄ²éѯ¡£ÕâÑùµÄ¼¼ÊõÖ÷ÒªÓòéѯ½á¹û»º´æÀ´ÊµÏÖ£¬µÚÒ»´Î²éѯ×ßÊý¾Ý¿â»ñµÃÊý¾Ý£¬²¢°ÑÊý¾Ý·Åµ½»º´æ£¬ºóÃæµÄ²éѯͳͳֱ½Ó·ÃÎʸßËÙ»º´æ¡£ÎªÃ¿¸ö²éѯ×÷Hash£¬Ê¹ÓÃNoSQLµÄ¼¼Êõ¿ÉÒÔÍê³ÉÕâ¸öÓÅ»¯¡££¨Õâ¸ö¼¼ÊõÒ²¿ÉÒÔÓÃ×ö¾²Ì¬Ò³Ã棩

5.1.3»º´æµÄÎÊÌâ

»º´æ¿ÉÒÔÓÃÀ´»º´æ¶¯Ì¬Ò³Ã棬Ҳ¿ÉÒÔÓÃÀ´»º´æ²éѯµÄÊý¾Ý¡£»º´æÍ¨³£ÓÐÄÇô¼¸¸öÎÊÌ⣺

1£©»º´æµÄ¸üС£Ò²½Ð»º´æºÍÊý¾Ý¿âµÄͬ²½¡£ÓÐÕâô¼¸ÖÖ·½·¨£¬Ò»ÊÇ»º´ætime out£¬Èûº´æÊ§Ð§£¬Öز飬¶þÊÇ£¬Óɺó¶Ë֪ͨ¸üУ¬Ò»Á¿ºó¶Ë·¢Éú±ä»¯£¬Í¨ÖªÇ°¶Ë¸üС£Ç°ÕßʵÏÖÆðÀ´±È½Ï¼òµ¥£¬µ«ÊµÊ±ÐÔ²»¸ß£¬ºóÕßʵÏÖÆðÀ´±È½Ï¸´ÔÓ £¬µ«ÊµÊ±ÐԸߡ£

2£©»º´æµÄ»»Ò³¡£ÄÚ´æ¿ÉÄܲ»¹»£¬ËùÒÔ£¬ÐèÒª°ÑһЩ²»»îÔ¾µÄÊý¾Ý»»³öÄڴ棬Õâ¸öºÍ²Ù×÷ϵͳµÄÄÚ´æ»»Ò³ºÍ½»»»ÄÚ´æºÜÏàËÆ¡£FIFO¡¢LRU¡¢LFU¶¼ÊDZȽϾ­µäµÄ»»Ò³Ëã·¨¡£

3£©»º´æµÄÖØ½¨ºÍ³Ö¾Ã»¯¡£»º´æÔÚÄڴ棬ϵͳ×ÜҪά»¤£¬ËùÒÔ£¬»º´æ¾Í»á¶ªÊ§£¬Èç¹û»º´æÃ»ÁË£¬¾ÍÐèÒªÖØ½¨£¬Èç¹ûÊý¾ÝÁ¿ºÜ´ó£¬»º´æÖؽ¨µÄ¹ý³Ì»áºÜÂý£¬Õâ»áÓ°ÏìÉú²ú»·¾³£¬ËùÒÔ£¬»º´æµÄ³Ö¾Ã»¯Ò²ÊÇÐèÒª¿¼Âǵġ£

Öî¶àÇ¿´óµÄNoSQL¶¼ºÜºÃÖ§³ÖÁËÉÏÊöÈý´ó»º´æµÄÎÊÌâ¡£

5.2ºó¶ËÐÔÄÜÓÅ»¯¼¼Êõ

Ç°ÃæÌÖÂÛÁËǰ¶ËÐÔÄܵÄÓÅ»¯¼¼Êõ£¬ÓÚÊÇǰ¶Ë¿ÉÄܾͲ»ÊÇÆ¿¾±ÎÊÌâÁË¡£ÄÇôÐÔÄÜÎÊÌâ¾Í»áµ½ºó¶ËÊý¾ÝÉÏÀ´ÁË¡£ÏÂÃæËµ¼¸¸öºó¶Ë³£¼ûµÄÐÔÄÜÓÅ»¯¼¼Êõ¡£

5.2.1Êý¾ÝÈßÓà

¹ØÓÚÊý¾ÝÈßÓ࣬Ҳ¾ÍÊÇ˵£¬°ÑÎÒÃǵÄÊý¾Ý¿âµÄÊý¾ÝÈßÓà´¦Àí£¬Ò²¾ÍÊǼõÉÙ±íÁ¬½ÓÕâÑùµÄ¿ªÏú±È½Ï´óµÄ²Ù×÷£¬µ«ÕâÑù»áÎþÉüÊý¾ÝµÄÒ»ÖÂÐÔ¡£·çÏձȽϴ󡣺ܶàÈ˰ÑNoSQLÓÃ×öÊý¾Ý£¬¿ìÊÇ¿ìÁË£¬ÒòΪÊý¾ÝÈßÓàÁË£¬µ«Õâ¶ÔÊý¾ÝÒ»ÖÂÐÔÓдóµÄ·çÏÕ¡£ÕâÐèÒª¸ù¾Ý²»Í¬µÄÒµÎñ½øÐзÖÎöºÍ´¦Àí¡££¨×¢Ò⣺ÓùØÏµÐÍÊý¾Ý¿âºÜÈÝÒ×ÒÆÖ²µ½NoSQLÉÏ£¬µ«ÊÇ·´¹ýÀ´´ÓNoSQLµ½¹ØÏµÐ;ÍÄÑÁË£©

5.2.2Êý¾Ý¾µÏñ

¼¸ºõËùÓÐÖ÷Á÷µÄÊý¾Ý¿â¶¼Ö§³Ö¾µÏñ£¬Ò²¾ÍÊÇreplication¡£Êý¾Ý¿âµÄ¾µÏñ´øÀ´µÄºÃ´¦¾ÍÊÇ¿ÉÒÔ×ö¸ºÔؾùºâ¡£°Ñһ̨Êý¾Ý¿âµÄ¸ºÔؾù·Öµ½¶ą̀ÉÏ£¬Í¬Ê±ÓÖ±£Ö¤ÁËÊý¾ÝÒ»ÖÂÐÔ£¨ÈçOracleµÄSCN£©¡£×îÖØÒªµÄÊÇ£¬ÕâÑù»¹¿ÉÒÔÓи߿ÉÓÃÐÔ£¬Ò»Ì¨·ÏÁË£¬»¹ÓÐÁíһ̨ÔÚ·þÎñ¡£

Êý¾Ý¾µÏñµÄÊý¾ÝÒ»ÖÂÐÔ¿ÉÄÜÊǸö¸´ÔÓµÄÎÊÌ⣬ËùÒÔÎÒÃÇÒªÔÚµ¥ÌõÊý¾ÝÉϽøÐÐÊý¾Ý·ÖÇø£¬Ò²¾ÍÊÇ˵£¬°ÑÒ»¸ö³©ÏúÉÌÆ·µÄ¿â´æ¾ù·Öµ½²»Í¬µÄ·þÎñÆ÷ÉÏ£¬È磬һ¸ö³©ÏúÉÌÆ·ÓÐ1ÍòµÄ¿â´æ£¬ÎÒÃÇ¿ÉÒÔÉèÖÃ10̨·þÎñÆ÷£¬Ã¿Ì¨·þÎñÆ÷ÉÏÓÐ1000¸ö¿â´æ£¬Õâ¾ÍºÃÏñB2CµÄ²Ö¿âÒ»Ñù¡£

5.2.3Êý¾Ý·ÖÇø

Êý¾Ý¾µÏñ²»Äܽâ¾öµÄÒ»¸öÎÊÌâ¾ÍÊÇÊý¾Ý±íÀïµÄ¼Ç¼̫¶à£¬µ¼ÖÂÊý¾Ý¿â²Ù×÷Ì«Âý¡£ËùÒÔ£¬°ÑÊý¾Ý·ÖÇø¡£Êý¾Ý·ÖÇøÓкܶàÖÖ×ö·¨£¬Ò»°ãÀ´ËµÓÐÏÂÃæÕ⼸ÖÖ£º

1£©°ÑÊý¾Ý°ÑijÖÖÂß¼­À´·ÖÀà¡£±ÈÈç»ð³µ¶©Æ±ÏµÍ³¿É°´¸÷ÖÖ³µÐÍ·Ö£¬¿ÉÒÔ°´Ê¼·¢Õ¾·Ö£¬¿ÉÒÔ°´Ä¿µÄµØ·Ö¡­¡­£¬·´Õý¾ÍÊǰÑÒ»Õűí²ð³É¶àÕÅÓÐÒ»ÑùµÄ×ֶε«ÊDz»Í¬ÖÖÀàµÄ±í£¬ÕâÑù£¬ÕâЩ±í¾Í¿ÉÒÔ´æÔÚ²»Í¬µÄ»úÆ÷ÉÏÒÔ´ïµ½·Öµ£¸ºÔصÄÄ¿µÄ¡£

2£©°ÑÊý¾Ý°´×ֶη֡£±ÈÈç°ÑһЩ²»¾­³£¸ÄµÄÊý¾Ý·ÅÔÚÒ»¸ö±íÀ¾­³£¸ÄµÄÊý¾Ý·ÅÔÚÁíÍâ¶à¸ö±íÀï¡£°ÑÒ»Õűí±äΪ1¶Ô1µÄ¹ØÏµ£¬ÕâÑù£¬Äã¿ÉÒÔ¼õÉÙ±íµÄ×ֶθöÊý£¬Í¬Ñù¿ÉÒÔÌáÉýÒ»¶¨µÄÐÔÄÜ¡£ÁíÍ⣬×ֶζà»áÔì³ÉÒ»Ìõ¼Ç¼µÄ´æ´¢»á±»·Åµ½²»Í¬µÄÒ³±íÀÕâ¶ÔÓÚ¶ÁдÐÔÄܶ¼ÓÐÎÊÌâ¡£µ«ÕâÑùÒ»À´»áÓкܶิÔӵĿØÖÆ¡£

3£©Æ½¾ù·Ö±í¡£ÒòΪµÚÒ»ÖÖ·½·¨ÊDz¢²»Ò»¶¨Æ½¾ù·Ö¾ù£¬¿ÉÄÜij¸öÖÖÀàµÄÊý¾Ý»¹ÊǺܶࡣËùÒÔ£¬Ò²ÓвÉÓÃÆ½¾ù·ÖÅäµÄ·½Ê½£¬Í¨¹ýÖ÷¼üIDµÄ·¶Î§À´·Ö±í¡£

4£©Í¬Ò»Êý¾Ý·ÖÇø¡£Ò²¾ÍÊǰÑͬһÉÌÆ·µÄ¿â´æÖµ·Öµ½²»Í¬µÄ·þÎñÆ÷ÉÏ£¬±ÈÈçÓÐ10000¸ö¿â´æ£¬¿ÉÒÔ·Öµ½10̨·þÎñÆ÷ÉÏ£¬Ò»Ì¨ÉÏÓÐ1000¸ö¿â´æ¡£È»ºó¸ºÔؾùºâ¡£

ÕâÈýÖÖ·ÖÇø¶¼ÓкÃÓлµ¡£×î³£ÓõϹÊǵÚÒ»ÖÖ¡£Êý¾ÝÒ»µ©·ÖÇø£¬Äã¾ÍÐèÒªÓÐÒ»¸ö»òÊǶà¸öµ÷¶ÈÀ´ÈÃÄãµÄǰ¶Ë³ÌÐòÖªµÀÈ¥ÄÄÀïÕÒÊý¾Ý¡£

5.2.4ºó¶Ëϵͳ¸ºÔؾùºâ

Ç°ÃæËµÁËÊý¾Ý·ÖÇø£¬Êý¾Ý·ÖÇø¿ÉÒÔÔÚÒ»¶¨³Ì¶ÈÉϼõÇá¸ºÔØ£¬µ«ÊÇÎÞ·¨¼õÇáÈÈÏúÉÌÆ·µÄ¸ºÔØ¡£Õâ¾ÍÐèҪʹÓÃÊý¾Ý¾µÏñÀ´¼õÇá¸ºÔØ¡£Ê¹ÓÃÊý¾Ý¾µÏñ£¬±ØÈ»ÒªÊ¹ÓøºÔؾùºâ£¬ÔÚºó¶Ë£¬ÎÒÃÇ¿ÉÄܺÜÄÑʹÓÃÏñ·ÓÉÆ÷ÉϵĸºÔؾùºâÆ÷£¬ÒòΪÄÇÊǾùºâÁ÷Á¿µÄ£¬ÒòΪÁ÷Á¿²¢²»´ú±í·þÎñÆ÷µÄ·±Ã¦³Ì¶È¡£Òò´Ë£¬ÎÒÃÇÐèÒªÒ»¸öÈÎÎñ·ÖÅäϵͳ£¬Æä»¹ÄÜ¼à¿Ø¸÷¸ö·þÎñÆ÷µÄ¸ºÔØÇé¿ö¡£

ÈÎÎñ·ÖÅä·þÎñÆ÷ÓÐһЩÄѵ㣺

¸ºÔØÇé¿ö±È½Ï¸´ÔÓ¡£Ê²Ã´½Ð棿ÊÇCPU¸ß£¿»¹ÊÇ´ÅÅÌI/O¸ß£¿»¹ÊÇÄÚ´æÊ¹Óøߣ¿»¹ÊDz¢·¢¸ß£¿»¹ÊÇÄÚ´æ»»Ò³Âʸߣ¿Äã¿ÉÄÜÐèҪȫ²¿¶¼Òª¿¼ÂÇ¡£ÕâЩÐÅÏ¢Òª·¢Ë͸øÄǸöÈÎÎñ·ÖÅäÆ÷ÉÏ£¬ÓÉÈÎÎñ·ÖÅäÆ÷Ìôѡһ̨¸ºÔØ×îÇáµÄ·þÎñÆ÷À´´¦Àí¡£

ÈÎÎñ·ÖÅä·þÎñÆ÷ÉÏÐèÒª¶ÔÈÎÎñ¶ÓÁУ¬²»ÄܶªÈÎÎñ£¬ËùÒÔ»¹ÐèÒª³Ö¾Ã»¯¡£²¢ÇÒ¿ÉÒÔÒÔÅúÁ¿µÄ·½Ê½°ÑÈÎÎñ·ÖÅ䏸¼ÆËã·þÎñÆ÷¡£

ÈÎÎñ·ÖÅä·þÎñÆ÷ËÀÁËÔõô°ì£¿ÕâÀïÐèҪһЩÈçLive-Standby»òÊÇfailoverµÈ¸ß¿ÉÓÃÐԵļ¼Êõ¡£ÎÒÃÇ»¹ÐèҪעÒâÄÇЩ³Ö¾Ã»¯Á˵ÄÈÎÎñµÄ¶ÓÁÐÈçºÎ×ªÒÆµ½±ðµÄ·þÎñÆ÷ÉϵÄÎÊÌâ¡£

Óкܶàϵͳ¶¼Óþ²Ì¬µÄ·½Ê½À´·ÖÅ䣬ÓеÄÓÃhash£¬Óеľͼòµ¥µØÂÖÁ÷·ÖÎö¡£ÕâЩ¶¼²»¹»ºÃ£¬Ò»¸öÊDz»ÄÜÍêÃÀµØ¸ºÔؾùºâ£¬ÁíÒ»¸ö¾²Ì¬µÄ·½·¨µÄÖÂÃüȱÏÝÊÇ£¬Èç¹ûÓÐһ̨¼ÆËã·þÎñÆ÷ËÀ»úÁË£¬»òÊÇÎÒÃÇÐèÒª¼ÓÈëеķþÎñÆ÷£¬¶ÔÓÚÎÒÃǵķÖÅäÆ÷À´Ëµ£¬¶¼ÐèÒªÖªµÀµÄ¡£ÁíÍ⣬»¹ÒªÖØËã¹þÏ££¨Ò»ÖÂÐÔhash¿ÉÒÔ²¿·Ö½â¾öÕâ¸öÎÊÌ⣩¡£

»¹ÓÐÒ»ÖÖ·½·¨ÊÇʹÓÃÇÀռʽµÄ·½Ê½½øÐиºÔؾùºâ£¬ÓÉÏÂÓεļÆËã·þÎñÆ÷È¥ÈÎÎñ·þÎñÆ÷ÉÏÄÃÈÎÎñ¡£ÈÃÕâЩ¼ÆËã·þÎñÆ÷×Ô¼º¾ö¶¨×Ô¼ºÊÇ·ñÒªÈÎÎñ¡£ÕâÑùµÄºÃ´¦ÊÇ¿ÉÒÔ¼ò»¯ÏµÍ³µÄ¸´ÔÓ¶È£¬¶øÇÒ»¹¿ÉÒÔÈÎÒâʵʱµØ¼õÉÙ»òÔö¼Ó¼ÆËã·þÎñÆ÷¡£µ«ÊÇΨһ²»ºÃµÄ¾ÍÊÇ£¬Èç¹ûÓÐһЩÈÎÎñÖ»ÄÜÔÚijÖÖ·þÎñÆ÷ÉÏ´¦Àí£¬Õâ¿ÉÄÜ»áÒýÈëһЩ¸´ÔÓ¶È¡£²»¹ý×ÜÌåÀ´Ëµ£¬ÕâÖÖ·½·¨¿ÉÄÜÊDZȽϺõĸºÔؾùºâ¡£

5.2.5Òì²½¡¢ throttle ºÍ ÅúÁ¿´¦Àí

Òì²½¡¢throttle£¨½ÚÁ÷·§£© ºÍÅúÁ¿´¦Àí¶¼ÐèÒª¶Ô²¢·¢ÇëÇóÊý×ö¶ÓÁд¦ÀíµÄ¡£

Òì²½ÔÚÒµÎñÉÏÒ»°ãÀ´Ëµ¾ÍÊÇÊÕ¼¯ÇëÇó£¬È»ºóÑÓʱ´¦Àí¡£ÔÚ¼¼ÊõÉϾÍÊÇ¿ÉÒ԰Ѹ÷¸ö´¦Àí³ÌÐò×ö³É²¢Ðеģ¬Ò²¾Í¿ÉÒÔˮƽÀ©Õ¹ÁË¡£µ«ÊÇÒì²½µÄ¼¼ÊõÎÊÌâ´ó¸ÅÓÐÕâЩ£¬a£©±»µ÷Ó÷½µÄ½á¹û·µ»Ø£¬»áÉæ¼°½ø³ÌÏ̼߳äͨÐŵÄÎÊÌâ¡£b£©Èç¹û³ÌÐòÐèÒª»Ø¹ö£¬»Ø¹ö»áÓе㸴ÔÓ¡£c£©Ò첽ͨ³£¶¼»á°éËæ¶àÏß³Ì¶à½ø³Ì£¬²¢·¢µÄ¿ØÖÆÒ²Ïà¶ÔÂ鷳һЩ¡£d£©ºÜ¶àÒ첽ϵͳ¶¼ÓÃÏûÏ¢»úÖÆ£¬ÏûÏ¢µÄ¶ªÊ§ºÍÂÒÐòÒ²»áÊDZȽϸ´ÔÓµÄÎÊÌâ¡£

throttle ¼¼ÊõÆäʵ²¢²»ÌáÉýÐÔÄÜ£¬Õâ¸ö¼¼ÊõÖ÷ÒªÊÇ·Àֹϵͳ±»³¬¹ý×Ô¼º²»ÄÜ´¦ÀíµÄÁ÷Á¿¸ø¸ã¿åÁË£¬ÕâÆäʵÊǸö±£»¤»úÖÆ¡£Ê¹ÓÃthrottle¼¼ÊõÒ»°ãÀ´ËµÊǶÔÓÚһЩ×Ô¼ºÎÞ·¨¿ØÖƵÄϵͳ£¬±ÈÈ磬ºÍÄãÍøÕ¾¶Ô½ÓµÄÒøÐÐϵͳ¡£

ÅúÁ¿´¦ÀíµÄ¼¼Êõ£¬ÊǰÑÒ»¶Ñ»ù±¾ÏàͬµÄÇëÇóÅúÁ¿´¦Àí¡£±ÈÈ磬´ó¼Òͬʱ¹ºÂòͬһ¸öÉÌÆ·£¬Ã»ÓбØÒªÄãÂòÒ»¸öÎÒ¾Íдһ´ÎÊý¾Ý¿â£¬ÍêÈ«¿ÉÒÔÊÕ¼¯µ½Ò»¶¨ÊýÁ¿µÄÇëÇó£¬Ò»´Î²Ù×÷¡£ÅúÁ¿´¦ÀíµÄÎÊÌâÊÇÁ÷Á¿µÍ£¬ËùÒÔ£¬ÅúÁ¿´¦ÀíµÄϵͳһ°ã¶¼»áÉèÖÃÉÏÁ½¸ö·§Öµ£¬Ò»¸öÊÇ×÷ÒµÁ¿£¬ÁíÒ»¸öÊÇtimeout£¬Ö»ÒªÓÐÒ»¸öÌõ¼þÂú×㣬¾Í»á¿ªÊ¼Ìá½»´¦Àí¡£

ËùÒÔ£¬Ö»ÒªÊÇÒì²½£¬Ò»°ã¶¼»áÓÐthrottle»úÖÆ£¬Ò»°ã¶¼»áÓжÓÁÐÀ´ÅŶӣ¬ÓжÓÁУ¬¾Í»áÓг־û¯£¬¶øÏµÍ³Ò»°ã¶¼»áʹÓÃÅúÁ¿µÄ·½Ê½À´´¦Àí¡£

µ«ÊÇ´ÓÒµÎñºÍÓû§ÐèÇóÉÏÀ´Ëµ¿ÉÄÜ»¹ÓÐһЩֵµÃÎÒÃÇÈ¥ÉîÈë˼¿¼µÄµØ·½£º1£©¶ÓÁеÄDoS¹¥»÷¡£2£©¶ÔÁеÄÒ»ÖÂÐÔ3£©¶ÓÁеĵȴýʱ¼ä¡£

   
1962 ´Îä¯ÀÀ       30
Ïà¹ØÎÄÕÂ

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

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

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

×îл¼Æ»®
ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ 12-11[±±¾©]
LLM´óÄ£ÐÍÓëÖÇÄÜÌ忪·¢ÊµÕ½ 12-18[±±¾©]
ǶÈëʽÈí¼þ²âÊÔ 12-25[±±¾©]
AIÔ­ÉúÓ¦ÓõÄ΢·þÎñ¼Ü¹¹ 1-9[±±¾©]
AI´óÄ£Ðͱàд¸ßÖÊÁ¿´úÂë 1-14[±±¾©]
ÐèÇó·ÖÎöÓë¹ÜÀí 1-22[±±¾©]

Ïà¹ØÎÄÕÂ


ר¼ÒÊӽǿ´ITÓë¼Ü¹¹
Èí¼þ¼Ü¹¹Éè¼Æ
ÃæÏò·þÎñÌåϵ¼Ü¹¹ºÍÒµÎñ×é¼þ
ÈËÈËÍøÒÆ¶¯¿ª·¢¼Ü¹¹
¼Ü¹¹¸¯»¯Ö®ÃÕ
̸ƽ̨¼´·þÎñPaaS

Ïà¹ØÅàѵ¿Î³Ì


ÃæÏòÓ¦Óõļܹ¹Éè¼ÆÊµ¼ù
µ¥Ôª²âÊÔ+ÖØ¹¹+Éè¼ÆÄ£Ê½
Èí¼þ¼Ü¹¹Ê¦¡ª¸ß¼¶Êµ¼ù
Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸ÀýÓëʵ¼ù
ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ¡ª¸ß¼¶Êµ¼ù
SOAÌåϵ½á¹¹Êµ¼ù

³É¹¦°¸Àý


Èñ°²¿Æ¼¼ Èí¼þ¼Ü¹¹Éè¼Æ·½·¨
³É¶¼ ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
ÉϺ£Æû³µ ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
±±¾© Èí¼þ¼Ü¹¹Éè¼Æ
ÉϺ£ Èí¼þ¼Ü¹¹Éè¼Æ°¸ÀýÓëʵ¼ù
±±¾© ¼Ü¹¹Éè¼Æ·½·¨°¸ÀýÓëʵ¼ù
ÉîÛÚ ¼Ü¹¹Éè¼Æ·½·¨°¸ÀýÓëʵ¼ù
ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ¡ª¸ß¼¶Êµ¼ù