一ã€API¾|‘关的用å¤?/span>
API¾|‘关我的分æžä¸ä¼šç”¨åˆ°ä»¥ä¸‹ä¸‰ç§åœºæ™¯ã€?nbsp;
二ã€API¾|‘关在ä¼ä¸šæ•´ä½“æž¶æž„ä¸çš„地ä½?/span>
一个ä¼ä¸šéšç€ä¿¡æ¯¾pÈ»Ÿå¤æ‚度的æé«˜åQŒå¿…然出现外部åˆä½œä¼™ä¼´åº”用ã€ä¼ä¸šè‡ªíw«çš„公网应用ã€ä¼ä¸šå†…¾|‘应用ç‰åQŒåœ¨æž¶æž„上应该将˜q™ä¸‰¿U应用区别开åQŒä¸‰¿U应用的安排¾U§åˆ«ã€è®¿é—®æ–¹å¼ä¹Ÿä¸ä¸€æ —÷€?å› æ¤åœ¨æˆ‘的设计丞®†è¿™ä¸‰ç§åº”用分别用ä¸åŒçš„¾|‘å…³˜q›è¡ŒAPI½Ž¡ç†åQŒåˆ†åˆ«æ˜¯åQšAPI¾|‘å…³åQˆOpenAPIåˆä¼™ä¼™ä¼´åº”用åQ‰ã€API¾|‘å…³åQˆå†…部应用)ã€API¾|‘å…³åQˆå†…部公¾|‘应用)ã€?/span>
三ã€ä¼ä¸šä¸åœ¨å¦‚何应用API¾|‘å…³
1ã€å¯¹äºŽOpenAPI使用的API¾|‘å…³æ¥è¯´åQŒä¸€èˆ¬åˆä½œä¼™ä¼´è¦ä»¥åº”ç”¨çš„å½¢å¼æŽ¥å…¥åˆ°OpenAPIòq›_°åQŒåˆä½œä¼™ä¼´éœ€è¦åˆ° OpenAPIòq›_°ç”Œ™¯·åº”用ã€?å› æ¤åœ¨OpenAPI¾|‘关之外åQŒéœ€è¦æœ‰ä¸€ä¸ªé¢å‘åˆä½œä¼™ä¼´çš„使用的åã^å°ç”¨äºŽåˆä½œä¼™ä¼ß_¼Œ˜q™å°±è¦æ±‚OpenAPI¾|‘å…³éœ€è¦æä¾›API¾l™è¿™ä¸ªç”¨æˆ·åã^å°è¿›è¡Œè®¿é—®ã€?如下架构:
当然如果是在½Ž€å•的场景下,å¯èƒ½òq¶ä¸éœ€è¦æä¾›ä¸€ä¸ªé¢å‘åˆä½œä¼™ä¼´çš„门户åQŒåªéœ€è¦ç”±å…¬å¸çš„è¿è¥ähå‘˜ç›´æŽ¥æ·»åŠ åˆä½œä¼™ä¼´åº”用id/密钥½{‰ï¼Œ˜q™ç§æƒ…况下也ž®×ƒ¸éœ€è¦åˆä½œä¼™ä¼´é—¨æˆ·å¾pÈ»Ÿã€?nbsp;
2ã€å¯¹äºŽå†…¾|‘çš„API¾|‘å…³åQŒåœ¨èµ·åˆ°çš„作用上æ¥è¯´å¯ä»¥è®¤äؓ是微æœåŠ¡¾|‘å…³åQŒä¹Ÿå¯ä»¥è®¤äؓ是内¾|‘çš„APIæœåŠ¡æ²È†òq›_°ã€?当ä¼ä¸šå°†æ‰€æœ‰çš„应用使用微æœåŠ¡çš„æž¶æž„½Ž¡ç†èµäh¥åQŒé‚£ä¹ˆAPI¾|‘å…³ž®Þp“våˆîCº†å¾®æœåŠ¡ç½‘å…³çš„ä½œç”¨ã€?而当ä¼ä¸šåªæ˜¯ž®†ç³»¾lŸä¸Ž¾pÈ»Ÿä¹‹é—´çš„调用ä‹É用rest api的方å¼è¿›è¡Œè®¿é—®æ—¶ä½¿ç”¨API¾|‘关对调用进行管ç†ï¼Œé‚£ä¹ˆAPI¾|‘关起到的就是APIæœåŠ¡æ²È†çš„作用ã€?æž¶æž„å‚考如下:
3ã€å¯¹äºŽå…¬å¸å†…部公¾|‘应用(如APPã€å…¬å¸çš„¾|‘ç«™åQ‰ï¼Œå¦‚æžœ½Ž¡ç†ä¸Šæ¯”较细è‡ß_¼Œåœ¨æž¶æž„上是å¯èƒ½ç”±ç‹¬ç«‹çš„API¾|‘å…³æ¥å¤„ç†è¿™éƒ¨åˆ†å†…部公网应用åQŒå¦‚果想比较½Ž€å•的处ç†åQŒä¹Ÿå¯ä»¥æ˜¯ä‹É用é¢å‘åˆä½œä¼™ä¼´çš„API¾|‘å…³ã€?如果使用独立的API¾|‘å…³åQŒæœ‰ä»¥ä¸‹çš„好处:
åŸÞZºŽä»¥ä¸Šçš„分æžï¼Œå¦‚æžœå…¬å¸æœ‰èƒ½åŠ›ï¼Œé‚£ä¹ˆ˜q˜æ˜¯å»ø™®®åˆ†å¼€ä½¿ç”¨åˆä½œä¼™ä¼´OPEN API¾|‘关和内部公¾|‘应用网兟ë€?/span>
å››ã€API¾|‘关有哪些竞争方æ¡?/span>
1ã€?em id="__mceDel" style="margin: 0px; padding: 0px;">对于Open APIòq›_°çš„API¾|‘å…³åQŒæˆ‘分æžåªèƒ½é€‰æ‹©API¾|‘å…³ä½œäØ“è§£å†³æ–ÒŽ¡ˆåQŒä¸šç•Œæ²¡æœ‰å‘现比较好的å¯ä»¥ç”¨æ¥ä½œä¸ºOpen APIòq›_°çš„å…¥å£çš„å…¶ä»–æ–ÒŽ¡ˆã€?nbsp;
2ã€å¯¹äºŽä½œä¸ºå¾®æœåŠ¡¾|‘关的API¾|‘å…³åQŒä¸šç•Œçš„选择å¯ä»¥é€‰æ‹©çš„è§£å†Ïx–¹æ¡ˆæ¯”较多åQŒä¹Ÿå–决于微æœåŠ¡å™¨çš„å®žçŽ°æ–ÒŽ¡ˆåQŒæœ‰ä¸€äº›å¾®æœåŠ¡æž¶æž„çš„å®žçŽ°æ–¹æ¡ˆæ˜¯ä¸éœ€è¦å¾®æœåŠ¡¾|‘关的ã€?/em>
五ã€API¾|‘关解决æ–ÒŽ¡ˆ
¿U有云开æºè§£å†Ïx–¹æ¡ˆå¦‚下:
公有云解å†Ïx–¹æ¡ˆï¼š
自开å‘è§£å†Ïx–¹æ¡ˆï¼š
å…ã€ä¼ä¸šæ€Žä¹ˆé€‰æ‹©API¾|‘å…³
如果是è¦é€‰æ‹©ä¸€‹Æ‘Ö·²æœ‰çš„API¾|‘å…³åQŒé‚£ä¹ˆéœ€è¦ä»Žä»¥ä¸‹å‡ 个斚w¢åŽ»è€ƒè™‘ã€?nbsp;
1ã€æ€§èƒ½ä¸Žå¯ç”¨æ€?/span>
如果一旦采用了API¾|‘å…³åQŒé‚£ä¹ˆAPI¾|‘å…³ž®×ƒ¼šä½œäØ“ä¼ä¸šåº”ç”¨æ ¸å¿ƒåQŒå› æ¤æ€§èƒ½å’Œå¯ç”¨æ€§æ˜¯å¿…é¡»è¦æ±‚çš„ã€?/span>
2ã€å¯æ‰©å±•性ã€å¯¾l´æŠ¤æ€?/span>
一‹Æ¾äñ”哿€ÀLœ‰ä¸èƒ½æ»¡èƒö生äñ”需求的地方åQŒå› æ¤éœ€æ±‚æ€è€ƒäñ”å“在如何˜q›è¡ŒäºŒæ¬¡å¼€å‘å’Œ¾l´æŠ¤åQŒæ˜¯å¦æ–¹ä¾¿å…¬å¸å›¢é˜ŸæŽ¥æ‰‹ç»´æŠ¤äñ”å“ã€?nbsp;
3ã€éœ€æ±‚匹é…度
需è¦è¯„ä¼°å„API¾|‘关在需求上是å¦èƒ½æ»¡‘»I¼Œå¦‚: 如果是OpenAPIòq›_°éœ€è¦ä‹É用API¾|‘å…³åQŒé‚£ä¹ˆéœ€è¦çœ‹API¾|‘关在åˆä½œä¼™ä¼´åº”用接入ã€åˆä½œä¼™ä¼´é—¨æˆ·é›†æˆã€è®¿é—®æ¬¡æ•°é™é¢ç‰OpenAPIæ ¸å¿ƒéœ€æ±‚ä¸ŠåŽÀL€è€ƒäñ”哿˜¯å¦èƒ½æ»¡èƒöè¦æ±‚ã€?如果是微æœåŠ¡¾|‘å…³åQŒé‚£ä¹ˆè¦ä»Žå¾®æœåŠ¡çš„è¿¾l´ã€ç›‘控ã€ç®¡ç†ç‰æ–šw¢åŽÀL€è€ƒäñ”哿˜¯å¦èƒö够强大ã€?/span>
4ã€æ˜¯å¦å¼€æºï¼Ÿå…¬å¸æ˜¯å¦æœ‰è‡ªå¼€å‘的能力åQ?/span>
现有的开æºäñ”å“如kongåQŒzuulåQŒorange都有基础的API¾|‘å…³çš„æ ¸å¿ƒåŠŸèƒ½ï¼Œ˜q™äº›å¼€æºäñ”å“大多离很好的ä‹É用有一定的è·ç¦»åQŒå¦‚åQšæ²¡æœ‰æä¾›ç®¡ç†åŠŸèƒ½çš„UI界é¢ã€ç›‘控功能弱ž®ï¼Œä¸æ”¯æŒOpenAPIòq›_°åQŒæ²¡æœ‰å…¬å¸è¿è¥ä¸Ž˜q维的功能ç‰ã€?当然开æºäñ”å“èƒ½èŽ·å–æºä»£ç ï¼Œå¦‚æžœå…¬å¸æœ‰æ¯”è¾ƒå¼ºçš„ç ”å‘能力,能holdä½è¿™äº›å¼€æºäñ”å“,¾l过二次开å‘kongã€zuul应该˜q˜æ˜¯é€‚应一些公å¸ï¼Œä¸è¿‡éœ€æ±‚注æ„以下一些点åQ?/span>
å¦å¤–kongæä¾›ä¼ä¸šç‰ˆæœ¬çš„API¾|‘å…³åQŒå½“然也是基于ngnix+lua的,ä¼ä¸šç‰ˆæœ¬å¯ä»¥è´ä¹°ä»–们的技术支æŒã€åŸ¹è®ç‰æœåŠ¡ã€ä»¥åŠæ‹¥æœ‰ç•Œé¢çš„½Ž¡ç†ã€ç›‘控ç‰åŠŸèƒ½ã€?/span>
5ã€å…¬æœ‰äº‘˜q˜æ˜¯¿U有äº?/span>
现在的亚马逊ã€é˜¿é‡Œã€è…¾è®¯äº‘都在æä¾›åŸºç¡€å…¬æœ‰äº‘çš„API¾|‘å…³åQŒå½“然这些网关的基础功能肯定是没有问题,但是二次开å‘,扩展功能ã€ç›‘控功能å¯èƒ½å°±ä¸èƒ½æ»¡èƒö部分用户的定刉™œ€æ±‚了。å¦å¤–很多ä¼ä¸šå› 䏸™‡ªíw«ä¿¡æ¯å®‰å…¨çš„åŽŸå› åQŒä¸èƒ½ä‹É用外¾|‘公有网的API¾|‘å…³æœåŠ¡åQŒè¿™æ ·å°±åªæœ‰é€‰æ‹©¿U有云的æ–ÒŽ¡ˆäº†ã€?nbsp;
在需求上如果åŸÞZºŽå…¬æœ‰äº‘çš„API¾|‘å…³åªèƒ½åšåˆ°ç”±å†…部ähå‘˜äØ“å¤–ç½‘äººå‘˜ç”Œ™¯·åº”用åQŒæ— 法åšåˆ°å®šåˆ¶çš„åˆä½œä¼™ä¼´é—¨æˆ·åQŒè¿™ä¹Ÿä¸é€‚åˆäºŽéƒ¨åˆ†ä¼ä¸šçš„需求ã€?nbsp;
å¦‚æžœä½œäØ“å¾®æœåŠ¡ç½‘å…»I¼Œå¤§å¤šæ•°æƒ…况下是希望网å…ÏxœåŠ¡å™¨å’ŒæœåŠ¡æä¾›æ–¹æœåŠ¡å™¨æ˜¯è¦åœ¨å†…ç½‘çš„ï¼Œåœ¨è¿™é‡Œæƒ…å†µä¸‹ä¹Ÿåªæœ‰ç§æœ‰äº‘çš„API¾|‘å…³æ‰èƒ½æ»¡èƒö需求ã€?nbsp;
¾l¼åˆä¸Šé¢çš„分æžï¼ŒåŸºç¡€å…¬æœ‰äº‘çš„API¾|‘å…³åªæœ‰æ»¡èƒö一部分½Ž€å•客æˆïLš„需求,对于很多ä¼ä¸šæ¥è¯´¿U有云的API¾|‘å…³æ‰æ˜¯æ£ç¡®çš„选择ã€?/span>
æ–‡ç« ä½œè€…ä»‹¾l:
æ¥è‡ªäºŽå°è±¹ç§‘技的架构师-专注于èÊYä»¶ç ”å‘基于åã^å°æ€§èÊYä»¶çš„ç ”å‘åQŒç›®å‰æˆ‘æ£åœ¨ç ”å‘一‹Æ‘ÖŸºäºŽNettyã€å“åº”å¼æž¶æž„çš„æ’ä»¶å¼çš„API¾|‘å…³åQŒå¸Œæœ›èƒ½å¯¹è¡Œä¸šå¸¦æ¥ä¸€äº›æ”¹å˜ã€?我希望与对OpenAPIã€å¾®æœåŠ¡ã€API¾|‘å…³ã€Service Mesh½{‰æ„Ÿå…´è¶£çš„æœ‹å‹å¤šäº¤æµã€?有兴‘£çš„æœ‹å‹è¯·åŠ æˆ‘çš„QQ¾Ÿ?44054462ã€?/span>
Internet的快速增长ä‹É多媒体网¾lœæœåС噍åQŒç‰¹åˆ«æ˜¯WebæœåŠ¡å™¨ï¼Œé¢å¯¹çš„访问者数é‡å¿«é€Ÿå¢žåŠ ï¼Œ¾|‘络æœåŠ¡å™¨éœ€è¦å…·å¤‡æä¾›å¤§é‡åƈå‘访问æœåŠ¡çš„èƒ½åŠ›ã€?例如Yahooæ¯å¤©ä¼šæ”¶åˆ°æ•°ç™¾ä¸‡‹Æ¡çš„讉K—®è¯äh±‚åQŒå› æ¤å¯¹äºŽæä¾›å¤§è´Ÿè²WebæœåŠ¡çš„æœåС噍æ¥è®²åQŒCPUã€I/O处ç†èƒ½åŠ›å¾ˆå¿«ä¼šæˆä¸ºç“¶é¢ˆã€?/p>
½Ž€å•çš„ æé«˜¼‹¬äšg性能òq¶ä¸èƒ½çœŸæ£è§£å†Œ™¿™ä¸ªé—®é¢˜ï¼Œå› 䨓å•å°æœåŠ¡å™¨çš„æ€§èƒ½æ€ÀL˜¯æœ‰é™çš„,一般æ¥è®ÔŒ¼Œä¸€å°PCæœåŠ¡å™¨æ‰€èƒ½æä¾›çš„òq¶å‘讉K—®å¤„ç†èƒ½åŠ›å¤§çº¦ä¸?000ä¸ªï¼Œæ›´äØ“é«˜æ¡£ 的专用æœåŠ¡å™¨èƒ½å¤Ÿæ”¯æŒ3000-5000ä¸ªåÆˆå‘访问,˜q™æ ·çš„èƒ½åŠ›è¿˜æ˜¯æ— æ³•æ»¡‘Œ™´Ÿè½½è¾ƒå¤§çš„¾|‘ç«™çš„è¦æ±‚。尤其是¾|‘络è¯äh±‚å…ähœ‰½H呿€§ï¼Œå½“æŸäº›é‡å¤§äº‹ä»¶å‘生时åQŒç½‘ ¾lœè®¿é—®å°±ä¼šæ€¥å‰§ä¸Šå‡åQŒä»Žè€Œé€ 戾|‘络瓉™¢ˆåQŒä¾‹å¦‚在¾|‘上å‘布的克林顿弹劾书就是很明显的例å。必™å»é‡‡ç”¨å¤šå°æœåС噍æä¾›¾|‘络æœåŠ¡åQŒåƈž®†ç½‘¾lœè¯·æ±‚分é…ç»™˜q™äº›æœåŠ¡å™?分担åQŒæ‰èƒ½æä¾›å¤„ç†å¤§é‡åÆˆå‘æœåŠ¡çš„èƒ½åŠ›ã€?/p>
当ä‹Éç”¨å¤šå°æœåС噍æ¥åˆ†æ‹…负载的时候,最½Ž€å•的办法是将ä¸åŒçš„æœåŠ¡å™¨ç”¨åœ¨ä¸åŒçš„æ–¹é¢ã€?按æä¾›çš„内容˜q›è¡Œåˆ†å‰²æ—Óž¼Œå¯ä»¥ž®†ä¸€å°æœåŠ¡å™¨ç”¨äºŽæä¾›æ–°é—»™åµé¢åQŒè€Œå¦ä¸€å°ç”¨äºŽæä¾›æ¸¸æˆé¡µé¢ï¼›æˆ–者å¯ä»¥æŒ‰æœåŠ¡å™¨çš„åŠŸèƒ½˜q›è¡Œåˆ†å‰²åQŒå°†ä¸€å°æœåŠ¡å™¨ç”¨äºŽæä¾›é™æ€é¡µé?讉K—®åQŒè€Œå¦ä¸€äº›ç”¨äºŽæä¾›CGI½{‰éœ€è¦å¤§é‡æ¶ˆè€—资æºçš„动æ€é¡µé¢è®¿é—®ã€‚然而由于网¾lœè®¿é—®çš„½H呿€§ï¼Œä½¿å¾—很难¼‹®å®šé‚£äº›™åµé¢é€ æˆçš„负载太大,如果ž®†æœåŠ¡çš„™åµé¢åˆ†å‰² 的过¾l†å°±ä¼šé€ æˆå¾ˆå¤§‹¹ªè´¹ã€‚äº‹å®žä¸Šé€ æˆè´Ÿè²˜q‡å¤§çš„页é¢å¸¸å¸¸æ˜¯åœ¨å˜åŒ–ä¸çš„,如果è¦ç»å¸¸æŒ‰ç…§è´Ÿè½½å˜åŒ–æ¥è°ƒæ•´™åµé¢æ‰€åœ¨çš„æœåŠ¡å™¨ï¼Œé‚£ä¹ˆåŠ¿å¿…å¯¹ç®¡ç†å’Œ¾l´æŠ¤é€ æˆæžå¤§çš„é—® é¢˜ã€‚å› æ¤è¿™¿U分割方法åªèƒ½æ˜¯å¤§æ–¹å‘的调整åQŒå¯¹äºŽå¤§è´Ÿè²çš„网站,æ ÒŽœ¬çš„解军_Šžæ³•è¿˜éœ€è¦åº”用负载å‡è¡¡æŠ€æœ¯ã€?/p>
è´Ÿè²å‡è¡¡çš„æ€èµ\下多å?æœåŠ¡å™¨äØ“å¯¹ç§°æ–¹å¼åQŒæ¯å°æœåŠ¡å™¨éƒ½å…·å¤‡ç‰ä»ïLš„åœîC½åQŒéƒ½å¯ä»¥å•独对外æä¾›æœåŠ¡è€Œæ— ™åÕd…¶ä»–æœåŠ¡å™¨çš„è¾…åŠ©ã€‚ç„¶åŽé€šè¿‡æŸç§è´Ÿè²åˆ†æ‹…技术,ž®†å¤–部å‘逿¥çš„请求å‡åŒ€åˆ†é… 到对¿U°ç»“æž„ä¸çš„æŸä¸€å°æœåŠ¡å™¨ä¸Šï¼Œè€ŒæŽ¥æ”¶åˆ°è¯äh±‚çš„æœåŠ¡å™¨éƒ½ç‹¬ç«‹å›žåº”å®¢æˆähœºçš„请求。由于å¾ç«‹å†…容完全一致的WebæœåŠ¡å™¨åÆˆä¸å¤æ‚,å¯ä»¥ä½¿ç”¨æœåŠ¡å™¨åŒæ¥æ›´æ–°æˆ–è€?å…׃ínå˜å‚¨½Iºé—´½{‰æ–¹æ³•æ¥å®ŒæˆåQŒå› æ¤è´Ÿè½½å‡è¡¡æŠ€æœ¯å°±æˆäؓ建立一个高负è²Web站点的关键性技术ã€?/p>
å¾?多网¾lœå议都支挓é‡å®šå?#8221;功能åQŒä¾‹å¦‚在HTTPåè®®ä¸æ”¯æŒLocation指ä×oåQŒæŽ¥æ”¶åˆ°˜q™ä¸ªæŒ‡ä×oçš„æµè§ˆå™¨ž®†è‡ªåЍé‡å®šå‘到Location指明的å¦ä¸€ä¸?URL上。由于å‘é€Location指ä×o比è“v执行æœåŠ¡è¯äh±‚åQŒå¯¹WebæœåŠ¡å™¨çš„è´Ÿè²è¦å°çš„多åQŒå› æ¤å¯ä»¥æ ¹æ®è¿™ä¸ªåŠŸèƒ½æ¥è®¾è®¡ä¸€¿Uè´Ÿè½½å‡è¡¡çš„æœåŠ¡å™¨ã€‚ä“Q何时å€?WebæœåŠ¡å™¨è®¤ä¸ø™‡ªå·Þp´Ÿè½½è¾ƒå¤§çš„æ—¶å€™ï¼Œå®ƒå°±ä¸å†ç›´æŽ¥å‘é€å›ž‹¹è§ˆå™¨è¯·æ±‚çš„¾|‘页åQŒè€Œæ˜¯é€å›žä¸€ä¸ªLocaction指ä×oåQŒè®©‹¹è§ˆå™¨åŽ»æœåС噍集¾Ÿ¤ä¸çš„å…¶ä»–æœåС噍ä¸?获得所需è¦çš„¾|‘页ã€?/p>
在这¿Uæ–¹å¼ä¸‹åQŒæœåŠ¡å™¨æœ¬èín必须支挘q™ç§åŠŸèƒ½åQŒç„¶è€Œå…·ä½“实现è“væ¥å´æœ‰å¾ˆå¤šå›°éš¾ï¼Œä¾‹å¦‚䏀尿œåŠ¡å™¨å¦‚ä½•èƒ½ä¿è¯å®ƒé‡å®šå‘过的æœåŠ?器是比较½Iºé—²çš„,òq¶ä¸”ä¸ä¼šå†æ¬¡å‘é€Location指ä×oåQŸLocation指ä×oå’Œæµè§ˆå™¨éƒ½æ²¡æœ‰è¿™æ–šw¢çš„æ”¯æŒèƒ½åŠ›ï¼Œ˜q™æ ·å¾ˆå®¹æ˜“在‹¹è§ˆå™¨ä¸Šå½¢æˆä¸€¿Uæ»å¾ªçŽ¯ã€‚å› æ¤è¿™¿Uæ–¹å¼å®žé™…应用当ä¸åƈä¸å¤šè§ï¼Œä½¿ç”¨˜q™ç§æ–¹å¼å®žçŽ°çš„æœåŠ¡å™¨é›†ç¾¤è½¯äšg也较ž®‘。有些特定情况下å¯ä»¥ä½¿ç”¨CGIåQˆåŒ…括ä‹É用FastCGI或mod_perlæ‰?å±•æ¥æ”¹å–„性能åQ‰æ¥æ¨¡æ‹Ÿ˜q™ç§æ–¹å¼åŽÕdˆ†æ‹…负载,而WebæœåС噍ä»ç„¶ä¿æŒç®€‹zã€é«˜æ•ˆçš„ç‰ÒŽ€§ï¼Œæ¤æ—¶é¿å…Location循环的ä“Q务将ç”Þq”¨æˆïLš„CGI½E‹åºæ¥æ‰¿æ‹…ã€?/p>
ç”?于基于æœåŠ¡å™¨è½¯äšg的负载å‡è¡¡éœ€è¦æ”¹åЍèÊYä»Óž¼Œå› æ¤å¸¸å¸¸æ˜¯å¾—ä¸å¿å¤±ï¼Œè´Ÿè²å‡è¡¡æœ€å¥½æ˜¯åœ¨æœåŠ¡å™¨è½¯äšg之外æ¥å®Œæˆï¼Œ˜q™æ ·æ‰èƒ½åˆ©ç”¨çŽ°æœ‰æœåС噍èÊYä»¶çš„¿Uç§ä¼˜åŠ¿ã€‚æœ€æ—©çš„è´?è½½å‡è¡¡æŠ€æœ¯æ˜¯é€šè¿‡DNSæœåŠ¡ä¸çš„éšæœºåå—è§£æžæ¥å®žçŽ°çš„åQŒåœ¨DNSæœåС噍ä¸åQŒå¯ä»¥äؓ多个ä¸åŒçš„地å€é…ç½®åŒä¸€ä¸ªåå—,而最¾lˆæŸ¥è¯¢è¿™ä¸ªåå—的客户机将在解æžè¿™ä¸?åå—æ—¶å¾—到其ä¸çš„一个地å€ã€‚å› æ¤ï¼Œå¯¹äºŽåŒä¸€ä¸ªåå—,ä¸åŒçš„客æˆähœºä¼šå¾—åˆîC¸åŒçš„地å€åQŒä»–们也ž®Þp®¿é—®ä¸åŒåœ°å€ä¸Šçš„WebæœåŠ¡å™¨ï¼Œä»Žè€Œè¾¾åˆ°è´Ÿè½½å‡è¡¡çš„目的ã€?/p>
例如如果希望使用三个WebæœåС噍æ¥å›žåº”对www.exampleorg.org.cnçš„HTTPè¯äh±‚åQŒå°±å¯ä»¥è®„¡½®è¯¥åŸŸçš„DNSæœåС噍ä¸å…³äºŽè¯¥åŸŸçš„æ•°æ®åŒ…括有与下é¢ä¾‹å类似的¾l“æžœåQ?/p>
www1 IN A 192.168.1.1www2 IN A 192.168.1.2www3 IN A 192.168.1.3www IN CNAME www1www IN CNAME www2www IN CNAME www3
æ¤åŽå¤–部的客æˆähœºž®±å¯èƒ½éšæœºçš„å¾—åˆ°å¯¹åº”wwwçš„ä¸åŒåœ°å€åQŒé‚£ä¹ˆéšåŽçš„HTTPè¯äh±‚也就å‘é€ç»™ä¸åŒåœ°å€äº†ã€?/p>
DNS è´Ÿè²å‡è¡¡çš„优ç‚ÒŽ˜¯½Ž€å•ã€æ˜“行,òq¶ä¸”æœåС噍å¯ä»¥ä½äºŽäº’è”网的ä“Qæ„ä½¾|®ä¸ŠåQŒå½“å‰ä‹É用在包括Yahoo在内的Web站点上。然而它也å˜åœ¨ä¸ž®‘缺点,一个缺ç‚ÒŽ˜¯ä¸?了ä¿è¯DNSæ•°æ®åŠæ—¶æ›´æ–°åQŒä¸€èˆ¬éƒ½è¦å°†DNS的刷新时间设¾|®çš„较å°åQŒä½†å¤ªå°ž®×ƒ¼šé€ æˆå¤ªå¤§çš„é¢å¤–网¾lœæµé‡ï¼Œòq¶ä¸”更改了DNSæ•°æ®ä¹‹åŽä¹Ÿä¸èƒ½ç«‹å³ç”Ÿæ•ˆï¼›½W¬äºŒç‚?是DNSè´Ÿè²å‡è¡¡æ— 法得知æœåŠ¡å™¨ä¹‹é—´çš„å·®å¼‚åQŒå®ƒä¸èƒ½åšåˆ°ä¸ºæ€§èƒ½è¾ƒå¥½çš„æœåŠ¡å™¨å¤šåˆ†é…请求,也ä¸èƒ½äº†è§£åˆ°æœåŠ¡å™¨çš„å½“å‰çжæ€ï¼Œç”šè‡³ä¼šå‡ºçŽ°å®¢æˆ¯‚¯·æ±‚集ä¸åœ¨æŸä¸€å°æœ 务器上的å¶ç„¶æƒ…况ã€?/p>
ä½¿ç”¨ä»£ç†æœåС噍å¯ä»¥å°†è¯äh±‚转呾l™å†…部的WebæœåŠ¡å™¨ï¼Œä½¿ç”¨˜q™ç§åŠ é€?æ¨¡å¼æ˜„¡„¶å¯ä»¥æå‡é™æ€ç½‘™å늚„讉K—®é€Ÿåº¦ã€‚å› æ¤ä¹Ÿå¯ä»¥è€ƒè™‘使用˜q™ç§æŠ€æœ¯ï¼Œè®©ä»£ç†æœåС噍ž®†è¯·æ±‚å‡åŒ€è½¬å‘¾l™å¤šå°å†…部WebæœåŠ¡å™¨ä¹‹ä¸€ä¸Šï¼Œä»Žè€Œè¾¾åˆ°è´Ÿè½½å‡è¡¡çš„目的ã€?˜q™ç§ä»£ç†æ–¹å¼ä¸Žæ™®é€šçš„ä»£ç†æ–¹å¼æœ‰æ‰€ä¸åŒåQŒæ ‡å‡†ä»£ç†æ–¹å¼æ˜¯å®¢æˆ·ä½¿ç”¨ä»£ç†è®‰K—®å¤šä¸ªå¤–部WebæœåŠ¡å™¨ï¼Œè€Œè¿™¿Uä»£ç†æ–¹å¼æ˜¯å¤šä¸ªå®¢æˆ·ä½¿ç”¨å®ƒè®¿é—®å†…部WebæœåŠ¡å™¨ï¼Œå›?æ¤ä¹Ÿè¢«ç§°ä¸ºåå‘ä»£ç†æ¨¡å¼ã€?/p>
实现˜q™ä¸ªåå‘代ç†èƒ½åŠ›òq¶ä¸èƒ½ç®—æ˜¯ä¸€ä¸ªç‰¹åˆ«å¤æ‚çš„ä»ÕdŠ¡åQŒä½†æ˜¯åœ¨è´Ÿè²å‡è¡¡ä¸è¦æ±‚特别高的效率,˜q™æ ·å®žçްèµäh¥ž®×ƒ¸æ˜¯ååˆ?½Ž€å•的了。æ¯é’ˆå¯¹ä¸€‹Æ¡ä»£ç†ï¼Œä»£ç†æœåŠ¡å™¨å°±å¿…é¡»æ‰“å¼€ä¸¤ä¸ª˜qžæŽ¥åQŒä¸€ä¸ªäØ“å¯¹å¤–çš„è¿žæŽ¥ï¼Œä¸€ä¸ªäØ“å¯¹å†…çš„è¿žæŽ¥ï¼Œå› æ¤å¯¹äºŽ˜qžæŽ¥è¯äh±‚æ•°é‡éžå¸¸å¤§çš„æ—¶å€™ï¼Œä»£ç†æœåŠ¡å™¨çš„è´Ÿè²ä¹?ž®±éžå¸æ€¹‹å¤§äº†åQŒåœ¨æœ€åŽåå‘ä»£ç†æœåŠ¡å™¨ä¼šæˆä¸ºæœåŠ¡çš„ç“‰™¢ˆã€‚例如,使用Apacheçš„mod_rproxyæ¨¡å—æ¥å®žçŽ°è´Ÿè½½å‡è¡¡åŠŸèƒ½æ—¶åQŒæä¾›çš„òq¶å‘˜qžæŽ¥æ•°é‡å?Apache本èínçš„åÆˆå‘连接数é‡çš„é™åˆ¶ã€‚一般æ¥è®ÔŒ¼Œå¯ä»¥ä½¿ç”¨å®ƒæ¥å¯¹è¿žæŽ¥æ•°é‡ä¸æ˜¯ç‰¹åˆ«å¤§åQŒä½†æ¯æ¬¡˜qžæŽ¥éƒ½éœ€è¦æ¶ˆè€—大é‡å¤„ç†èµ„æºçš„站点˜q›è¡Œè´Ÿè²å‡è¡¡åQŒä¾‹å¦‚æœå¯…R€?/p>
ä½?用åå‘代ç†çš„好处是,å¯ä»¥ž®†è´Ÿè½½å‡è¡¡å’Œä»£ç†æœåŠ¡å™¨çš„é«˜é€Ÿç¼“å˜æŠ€æœ¯ç»“åˆåœ¨ä¸€èµøP¼Œæä¾›æœ‰ç›Šçš„æ€§èƒ½åQŒå…·å¤‡é¢å¤–的安全性,外部客户ä¸èƒ½ç›´æŽ¥è®‰K—®çœŸå®žçš„æœåŠ¡å™¨ã€‚åÆˆä¸?实现èµäh¥å¯ä»¥å®žçŽ°è¾ƒå¥½çš„è´Ÿè½½å‡è¡¡ç–略,ž®†è´Ÿè½½å¯ä»¥éžå¸¸å‡è¡¡çš„分给内部æœåŠ¡å™¨ï¼Œä¸ä¼šå‡ºçŽ°è´Ÿè²é›†ä¸åˆ°æŸä¸ªæœåŠ¡å™¨çš„å¶ç„¶çŽ°è±¡ã€?/p>
¾|?¾lœåœ°å€è½¬æ¢ä¸ºåœ¨å†…部地å€å’Œå¤–部地å€ä¹‹é—´˜q›è¡Œè½¬æ¢åQŒä»¥ä¾¿å…·å¤‡å†…部地å€çš„计½Ž—机能访问外部网¾lœï¼Œè€Œå½“外部¾|‘络ä¸çš„è®¡ç®—æœø™®¿é—®åœ°å€è½¬æ¢¾|‘关拥有的æŸä¸€å¤–éƒ¨åœ°å€ æ—Óž¼Œåœ°å€è½¬æ¢¾|‘关能将其è{å‘åˆ°ä¸€ä¸ªæ˜ ž®„的内部地å€ä¸Šã€‚å› æ¤å¦‚果地å€è½¬æ¢¾|‘关能将æ¯ä¸ª˜qžæŽ¥å‡åŒ€è½¬æ¢ä¸ÞZ¸åŒçš„内部æœåŠ¡å™¨åœ°å€åQŒæ¤åŽå¤–部网¾lœä¸çš„计½Ž—机ž®±å„自与 自己转æ¢å¾—到的地å€ä¸ŠæœåС噍˜q›è¡Œé€šä¿¡åQŒä»Žè€Œè¾¾åˆ°è´Ÿè½½åˆ†æ‹…的目的ã€?/p>
åœ?å€è½¬æ¢å¯ä»¥é€šè¿‡è½¯äšgæ–¹å¼æ¥å®žçŽŽÍ¼Œä¹Ÿå¯ä»¥é€šè¿‡¼‹¬äšgæ–¹å¼æ¥å®žçŽ°ã€‚ä‹É用硬件方å¼è¿›è¡Œæ“作一般称ä¸ÞZº¤æ¢ï¼Œè€Œå½“交æ¢å¿…é¡»ä¿å˜TCP˜qžæŽ¥ä¿¡æ¯çš„æ—¶å€™ï¼Œ˜q™ç§é’ˆå¯¹OSI¾|?¾lœå±‚çš„æ“作就被称为第四层交æ¢ã€‚支æŒè´Ÿè½½å‡è¡¡çš„¾|‘络地å€è½¬æ¢ä¸ºç¬¬å››å±‚äº¤æ¢æœºçš„一¿Ué‡è¦åŠŸèƒ½ï¼Œç”׃ºŽå®ƒåŸºäºŽå®šåˆ¶çš„¼‹¬äšg芯片åQŒå› æ¤å…¶æ€§èƒ½éžå¸¸ä¼˜ç§€åQŒå¾ˆå¤šäº¤æ¢æœºå£?¿U°å…·å¤?00MB-800MB的第四层交æ¢èƒ½åŠ›åQŒç„¶è€Œä¹Ÿæœ‰ä¸€äº›èµ„料表明,在如æ¤å¿«çš„é€Ÿåº¦ä¸‹ï¼Œå¤§éƒ¨åˆ†äº¤æ¢æœºž®×ƒ¸å†å…·å¤‡ç¬¬å››å±‚交æ¢èƒ½åŠ›äº†ï¼Œè€Œä»…ä»…æ”¯æŒç¬¬ä¸‰å±‚ç”?至第二层交æ¢ã€?/p>
然而对于大部分站点æ¥è®²åQŒå½“å‰è´Ÿè½½å‡è¡¡ä¸»è¦æ˜¯è§£å†³WebæœåС噍处ç†èƒ½åŠ›ç“¶é¢ˆçš„åQŒè€Œéž¾|‘ç»œä¼ è¾“èƒ½åŠ›åQŒå¾ˆå¤šç«™ç‚¹çš„互蔾|‘连接带宽æ€Õd…±ä¹Ÿä¸˜q?0MBåQŒåªæœ‰æžž®‘的站点能够拥有较高速的¾|‘络˜qžæŽ¥åQŒå› æ¤ä¸€èˆ¬æ²¡æœ‰å¿…è¦ä‹É用这些负载å‡è¡¡å™¨˜q™æ ·çš„æ˜‚贵设备ã€?/p>
ä½?用èÊYä»¶æ–¹å¼æ¥å®žçްåŸÞZºŽ¾|‘络地å€è½¬æ¢çš„è´Ÿè½½å‡è¡¡åˆ™è¦å®žé™…的多,除了一些厂商æä¾›çš„解决æ–ÒŽ³•之外åQŒæ›´æœ‰æ•ˆçš„æ–¹æ³•是使用å…费的自ç”ÞpÊYä»¶æ¥å®Œæˆ˜q™é¡¹ä»ÕdŠ¡ã€‚å…¶ä¸åŒ…æ‹?Linux Virtual Server Projectä¸çš„NAT实现方å¼åQŒæˆ–者本文作者在FreeBSD下对natd的修订版本。一般æ¥è®ÔŒ¼Œä½¿ç”¨˜q™ç§è½¯äšgæ–¹å¼æ¥å®žçŽ°åœ°å€è½¬æ¢åQŒä¸å¿ƒè´Ÿè½½å‡è¡¡å™¨å?在带宽é™åˆÓž¼Œåœ?00MB的快速以太网æ¡äšg下,能得到最快达80MB的带宽,然而在实际应用ä¸ï¼Œå¯èƒ½åªæœ‰40MB-60MBçš„å¯ç”¨å¸¦å®½ã€?/p>
ä¸?é¢ä‹É用网¾lœåœ°å€è½¬æ¢æ¥å®žçŽ°è´Ÿè½½åˆ†æ‹…ï¼Œæ¯«æ— ç–‘é—®æ‰€æœ‰çš„¾|‘络˜qžæŽ¥éƒ½å¿…™å»é€šè¿‡ä¸å¿ƒè´Ÿè²å‡è¡¡å™¨ï¼Œé‚£ä¹ˆå¦‚果负è²ç‰¹åˆ«å¤§ï¼Œä»¥è‡³äºŽåŽå°çš„æœåŠ¡å™¨æ•°é‡ä¸å†åœ¨æ˜¯å‡ å°ã€åå‡?åŽÍ¼Œè€Œæ˜¯ä¸Šç™¾å°ç”šè‡Ïx›´å¤šï¼Œå³ä¾¿æ˜¯ä‹Éç”¨æ€§èƒ½ä¼˜ç§€çš„ç¡¬ä»¶äº¤æ¢æœºä¹Ÿå›žé‡åˆ°ç“‰™¢ˆã€‚æ¤æ—‰™—®é¢˜å°†è½¬å˜ä¸ºï¼Œå¦‚何ž®†é‚£ä¹ˆå¤šå°æœåŠ¡å™¨åˆ†å¸ƒåˆ°å„个互è”网的多个佾|®ï¼Œåˆ†æ•£¾|‘络è´?担。当然这å¯ä»¥é€šè¿‡¾l¼åˆä½¿ç”¨DNSå’ŒNATä¸¤ç§æ–ÒŽ³•æ¥å®žçŽŽÍ¼Œç„¶è€Œæ›´å¥½çš„æ–¹å¼æ˜¯ä‹É用一¿UåŠä¸å¿ƒçš„è´Ÿè½½å‡è¡¡æ–¹å¼ã€?/p>
在这¿UåŠä¸å¿ƒçš„è´Ÿè½½å‡è¡¡æ–¹å¼ä¸‹åQŒå³å½“客戯‚¯·æ±‚å‘é€ç»™è´Ÿè²å‡è¡¡å™¨çš„æ—¶å€™ï¼Œä¸å¿ƒè´Ÿè²å‡è¡¡å™¨å°†è¯äh±‚打包òq¶å‘é€ç»™æŸä¸ªæœåŠ¡å™¨ï¼Œè€ŒæœåŠ¡å™¨çš„å›žåº”è¯·æ±‚ä¸å†è¿”回给ä¸å¿ƒè´Ÿè²å‡è¡¡å™¨ï¼Œè€Œæ˜¯ç›´æŽ¥˜q”回¾l™å®¢æˆøP¼Œå› æ¤ä¸å¿ƒè´Ÿè²å‡è¡¡å™¨åªè´Ÿè´£æŽ¥å—òq¶è{å‘请求,其网¾lœè´Ÿæ‹…就较å°äº†ã€?/p>
上图æ¥è‡ªLinux Virtual Server ProjectåQŒäؓ他们使用IPéš§é“实现的这¿U负载分担能力的è¯äh±‚/回应˜q‡ç¨‹åQŒæ¤æ—¶æ¯ä¸ªåŽå°æœåŠ¡å™¨éƒ½éœ€è¦è¿›è¡Œç‰¹åˆ«çš„地å€è½¬æ¢åQŒä»¥‹Æºéª—‹¹è§ˆå™¨å®¢æˆøP¼Œè®¤äؓ它的回应为棼‹®çš„回应ã€?/p>
åŒæ ·åQŒè¿™¿Uæ–¹å¼çš„¼‹¬äšg实现方å¼ä¹Ÿéžå¸¸æ˜‚è´µï¼Œä½†æ˜¯ä¼šæ ¹æ®åŽ‚å•†çš„ä¸åŒåQŒå…·å¤‡ä¸åŒçš„ç‰ÒŽ®ŠåŠŸèƒ½åQŒä¾‹å¦‚对SSL的支æŒç‰ã€?/p>
ç”׃ºŽ˜q™ç§æ–¹å¼æ¯”è¾ƒå¤æ‚åQŒå› æ¤å®žçްè“væ¥æ¯”较困难,它的èµïL‚¹ä¹Ÿå¾ˆé«˜ï¼Œå½“剿ƒ…å†µä¸‹ç½‘ç«™åÆˆä¸éœ€è¦è¿™ä¹ˆå¤§çš„处ç†èƒ½åŠ›ã€?/font>
æ¯?较上é¢çš„è´Ÿè²å‡è¡¡æ–¹å¼åQŒDNS最å®ÒŽ˜“åQŒä¹Ÿæœ€å¸¸ç”¨åQŒèƒ½å¤Ÿæ»¡‘³ä¸€èˆ¬çš„需求。但如果需è¦è¿›ä¸€æ¥çš„½Ž¡ç†å’ŒæŽ§åˆÓž¼Œå¯ä»¥é€‰ç”¨åå‘ä»£ç†æ–¹å¼æˆ–NATæ–¹å¼åQŒè¿™ä¸¤ç§ä¹‹é—´˜q›è¡Œ 选择主è¦ä¾èµ–¾~“å†²æ˜¯ä¸æ˜¯å¾ˆé‡è¦åQŒæœ€å¤§çš„òq¶å‘讉K—®æ•°é‡æ˜¯å¤šž®‘ç‰æ¡äšg。而如果网站上对负载媄å“很厉害的CGI½E‹åºæ˜¯ç”±¾|‘站自己开å‘çš„åQŒä¹Ÿå¯ä»¥è€ƒè™‘在程åºä¸è‡ªå·± 使用Locactionæ¥æ”¯æŒè´Ÿè½½å‡è¡¡ã€‚åŠä¸å¿ƒåŒ–的负è²åˆ†æ‹…æ–¹å¼è‡›_°‘在国内当å‰çš„æƒ…况下还ä¸éœ€è¦ã€?br /> http://galaxystar.javaeye.com/blog/50546
˜q™ç¯‡çŸæ–‡æºäºŽcomp.lang.java.programmerè·Ÿcomp.lang.c++上å‘生的一场大辩论åQŒæ”¯æŒC++å’ŒJava
的两‹z¾ä¸åŒåŠ¿åŠ›å±•å¼€äº†æ–°ä¸–çºª½W¬ä¸€åœºå†²½H,跟脓å‘言‘…过350åQŒä¸¤‹zùNƒ½æœ‰å角压é˜üc€‚C++阵è¥çš„æ“‚ä¸ÀL˜¯
Pete BeckeråQŒACM会员åQŒDinkumware Ltd. 的技术副æ€È›‘。æ¤å›ç²¾é€šC++å’ŒJavaåQŒå¼€å‘过两ç§è¯è¨€çš?br />
æ ¸å¿ƒ¾cÕdº“åQŒä½†æ˜¯å´å¯¹C++ç‹‚çƒä¹‹æžåQŒè€Œå¯¹äºŽJava颇ä¸ä»¥äؓ然。åã^时谈到Javaçš„æ—¶å€™è¿˜å¥½ï¼Œä¸€æ—¦æœ‰äºø™ƒ†
敢用Javaæ¥æ‰¹åˆ¤C++åQŒç«‹åˆÕd¿ä¸ä½ç«çˆ†è„¾æ°”è·›_°†å‡ºæ¥åQŒä»¥åšéŸ§ä¸æ‹”çš„æ¯…åŠ›å’Œå¤§æ— ç•ç²¾¼œžä¸Žå¯Òމ‹å‘¨æ—‹åQ?br />
舌战¾Ÿ¤å„’åQŒå“ªæ€•åªå‰©ä¸‹ä¸€ä¸ªäh也è¦è¡€æˆ˜åˆ°åº•。这½{‰å¥‡äººå½“真少è§ï¼æˆ‘真奇怪他整天泡在usenet上,
ä¸ç”¨å·¥ä½œä¹ˆï¼Ÿä»–çš„è€æ¿P.J. Plauger如æ¤å®½å®å¤§é‡åQŸJava阵è¥ä¸»è§’是一个网åRazzi的兄弟,å¦å¤–æœ?br />
Sunå…¬å¸å¤§å鼎鼎的Peter van der Linden助阵åQŒå¦™è¯è¿žç ,寸土必争åQŒåŠ ä¸Šähå¤šåŠ¿ä¼—ï¼Œä¸€åº¦å æ®ä¼˜åŠÑ€?br />
C++阵è¥é‡Œå¤§æ‹¿è™½ç„¶å¾ˆå¤šï¼Œä½†æ˜¯å¤§å¤šæ•°æ²¡æœ‰Pete那么多闲工夫åQŒä¾‹å¦‚Greg ComeauåQŒComeauå…¬å¸è€æ¿åQ?br />
æ¯æ¬¡æ¥ä¸ªåªè¨€ç‰‡è¯åQŒå®žåœ¨å¸®ä¸äº†Pete多大忙。但是自从C++阵è¥ä¸å†’å‡ÞZ¸€ä¸ªæ— åå°å,¾|‘åCourage(勇气)åQ?br />
å‘动对Java GC机制的批判,形势ä¸ÞZ¹‹ä¸€å˜ã€‚C++阵è¥çœég¸‹å¤„于全攻之势åQŒJava阵è¥ç–²äºŽé˜²å®ˆåQŒåªèƒ?br />
招架è¯ß_¼š“ä½ ä»¬æ²¡æœ‰è¯æ®åQŒæ²¡æœ‰ç»Ÿè®¡èµ„æ–?#8221;åQŒåŞ势很被动ã€?/span>
垃圾攉™›†(GC)䏿˜¯ä¸€ç›´è¢«Java fans用æ¥ç‚«è€€åQŒå¼•ä»¥äØ“å‚²çš„ä¼˜ç‚¹ä¹ˆï¼Ÿæ€Žä¹ˆæˆäº†å¼Þq‚¹äº†ï¼Ÿæˆ‘大惑ä¸è§£ï¼Œå®šç›
一看,æ‰è§‰å¾—æ¤ä¸é¢‡æœ‰é“ç†ã€?/span>
首先åQŒJava Swing库å˜åœ¨å¤§é‡èµ„æºæ³„æ¼é—®é¢˜ï¼Œ˜q™ä¸€ç‚¹SUNéžå¸¸æ¸…楚åQŒç§°ä¹‹äØ“bugsåQŒæ£åœ¨æžåŠ›ä¿®æ£ã€‚但是看æ?br />
˜q™é‡Œçš„é—®é¢˜ææ€•ä¸ä»…是库编写者的ç–忽åQŒå¯èƒ½æ ¹æºåœ¨äºŽæ·±å±‚的机制åQŒæœªå¿…能够轻易解冻I¼Œæžä¸å¥½è¦ä¼¤ç‹åŠ¨éª¨ã€?br />
ä¸è¿‡˜q™ä¸ªé—®é¢˜ä¸æ˜¯é‚£ä¹ˆæ ÒŽœ¬åQŒC++阵è¥è§‰å¾—如果抓ä½å¯ÒŽ–¹çš„å¼±ç‚ÒŽ”»å‡»ï¼Œž®Þq®—是å 了上风也没什么说æœåŠ›ã€‚è°
没有¾~ºç‚¹å‘¢ï¼ŸäºŽæ˜¯åå…¶é“而行之,猛烈æ”Õd‡»Java阵è¥è§‰å¾—最得æ„的东西,Javaçš„GC机制本èínã€?/span>
é¦–å…ˆæ¥æƒ³ä¸€æƒ»I¼Œmemory leak到底æ„味ç€ä»€ä¹ˆã€‚在C++ä¸ï¼Œnew出æ¥çš„对象没有deleteåQŒè¿™ž®±å¯¼è‡´äº†memory
leak。但是C++早就有了克朘q™ä¸€é—®é¢˜çš„办法——smart pointerã€‚é€šè¿‡ä½¿ç”¨æ ‡å‡†åº“é‡Œè®¾è®¡¾_¾è‡´çš„auto_ptr
以åŠå„ç§STL容器åQŒè¿˜æœ‰ä¾‹å¦‚booståº?å·®ä¸å¤šæ˜¯ä¸ªå‡†æ ‡å‡†åº“了)ä¸çš„四个smart pointersåQŒC++½E‹åºå‘˜åªè¦?br />
èŠ×ƒ¸Šä¸€ä¸ªæ˜ŸæœŸçš„æ—‰™—´å¦ä¹ 最新的资料åQŒå°±å¯ä»¥æ‹ç€èƒ¸è„¯è¯ß_¼š“我写çš?/span>½E‹åºæ²¡æœ‰memory leak!”ã€?/span>
相比之下åQŒJavaä¼ég¹Žæ›´ä¼˜¿U€åQŒå› ä¸ÞZ»Žä¸€å¼€å§‹ä½ ž®×ƒ¸ç”¨è€ƒè™‘什么特ŒDŠçš„æœºåˆ¶åQŒå¤§èƒ†åœ°å¾€å‰newåQŒè‡ªæœ‰GC替ä½
收拾ŒD‹å±€ã€‚Javaçš„GC实际上是JVMä¸çš„一个独立线½E‹ï¼Œé‡‡ç”¨ä¸åŒçš„ç®—æ³?/span>½{–ç•¥æ¥æ”¶é›†heapä¸é‚£äº›ä¸å†æœ‰
reference指å‘的垃圑֯¹è±¡æ‰€å 用的内å˜ã€‚但是,通常情况下,GC¾U¿ç¨‹çš„优先çñ”æ¯”è¾ƒä½Žï¼Œåªæœ‰åœ¨å½“å‰?/span>½E‹åº
½Iºé—²çš„æ—¶å€™æ‰ä¼šè¢«è°ƒåº¦åQŒæ”¶é›†åžƒåœ¾ã€‚当ç„Óž¼Œå¦‚æžœJVM感到内å˜ç´§å¼ 了,JVM会主åŠ?/span>调用GCæ¥æ”¶é›†åžƒåœ¾ï¼ŒèŽ·å–
更多的内å˜ã€‚请注æ„åQŒJavaçš„GC工作的时机是åQ?. 当剽E‹åºä¸å¿™åQŒæœ‰½Iºé—²æ—‰™—´ã€?. ½Iºé—²å†…å˜ä¸èƒöã€?br />
现在我们考虑一¿U常è§çš„æƒ…况åQ?/span>½E‹åºåœ¨ç´§å¼ è¿è¡Œä¹‹ä¸ï¼Œæ²¡å“Ÿ½Iºé—²æ—‰™—´¾l™GCæ¥è¿è¡Œï¼ŒåŒæ—¶æœºå™¨å†…å˜å¾ˆå¤§åQ?br />
JVM也没有感到内å˜ä¸‘»I¼Œ¾l“果是什么?对了åQŒGCå½¢åŒè™šè®¾åQŒå¾—ä¸åˆ°è°ƒç”¨ã€‚于是,内å˜è¢«ä¸æ–åžå™¬ï¼Œè€Œé‚£äº?br />
æ—©å·²¾l用ä¸ç€çš„垃圑֯¹è±¡ä»åœ¨åœ¨å®è´µçš„内å˜é‡Œç¡å¤§è§‰ã€‚例如:
class BadGc {
public void job1() {
String garbage = "I am a garbage, and just sleeping in your precious memory, " +
"how do you think you can deal with me? Daydreaming! HAHA!!!";
....
}
public void job2() {...}
...
...
public void job1000() {...}
public static void main(String[] args) {
bgc = new BadGc();
bgc.job1();
bgc.job2();
...
bgc.job1000();
}
}
˜q行ä¸ï¼Œè™½ç„¶garbage对象在离开job1()之åŽåQŒå°±å†ä¹Ÿæ²¡æœ‰ç”¨äº†ã€‚ä½†æ˜¯å› ä¸?/span>½E‹åºå¿™ï¼Œå†…嘘q˜å¤Ÿç”¨ï¼Œæ‰€ä»¥GCå¾?br /> ä¸åˆ°è°ƒåº¦åQŒgarbage始终ä¸ä¼šè¢«å›žæ”Óž¼Œç›´åˆ°½E‹åº˜q行到bgc.job1000()时还íwºåœ¨å†…å˜é‡Œå˜²½W‘ä½ ã€‚æ²¡è¾™å§åQ?/span>
好了åQŒæˆ‘承认˜q™æ®µ½E‹åºå¾ˆå‚»ã€‚ä½†æ˜¯ä½ ä¸è¦ä»¥äØ“˜q™åªæ˜¯ç†è®ÞZ¸Šçš„å‡è®¾ï¼Œæ°æ°ç›¸ååQŒå¤§å¤šæ•°å®žç”¨ä¸çš„Java½E‹åºéƒ½æœ‰
¾cÖM¼¼çš„æ•ˆåº”。这ž®±æ˜¯ä¸ÞZ»€ä¹ˆJava½E‹åºç‹‚耗内å˜ï¼Œè€Œä¸”好僾l™å®ƒå¤šå°‘内å˜åƒéƒ½ä¸å¤Ÿã€‚ä½ èŠ×ƒ¸Šå¤§ç¬”çš„é“¶åæŠŠå†…å˜
ä»?28å‡åˆ°256åQŒå†å‡åˆ°512åQŒç»“果是åQŒä¸€æ—¦æ‰§è¡Œå¤æ‚ä“Q务,内嘘q˜æ˜¯è¢«è½»æ˜“填满,而且多出æ¥çš„˜q™äº›å†…å˜åªæ˜¯
用æ¥è£…垃圾,GC˜q˜æ˜¯ä¸ç»™é¢å地åƒå‘ég¸‡å”¤ä¸å‡ºæ¥ã€‚ç‰åˆîC½ 的内å˜ç»ˆäºŽå¿ƒåŠ›äº¤ç˜ï¼ŒGCæ‰å§—姗楘qŸï¼Œæ”¶æ‹¾ŒD‹å±€ã€‚è€?br />
且GC工作的方å¼ä¹Ÿå¾ˆä¸å¥½è¯„仸P¼Œä¸€¿U方法是一旦有æœÞZ¼šå›žæ”¶å†…å˜åQŒå°±æŠŠæ‰€æœ‰çš„åžƒåœ¾éƒ½å›žæ”¶ã€‚ä½ å¯ä»¥æƒŒ™±¡åQŒè¿™è¦?br />
花很长时é—?å‡ ç™¾M的垃圑֕ŠåQ?åQŒå¦‚æžœä½ ˜q™æ—¶ä¾¯æ£åœ¨åŽ‹ä¸‹å¼€ç‚®çš„æŒ‰é’®åQŒGCå´å«äº†æš‚定,好了åQŒä½ ½{‰æ»å§ï¼å¦ä¸€
¿U方法,得到æœÞZ¼šä¹‹åŽåQŒå›žæ”¶ä¸€äº›å†…å˜ï¼Œè®©JVM感到内å˜ä¸é‚£ä¹ˆç´§å¼ æ—¶ž®±æ”¶æ‰‹ã€‚结果呢åQŒå†…å˜é‡Œå§‹ç»ˆæœ‰å¤§æ‰¹åžƒ
圾,½E‹åºå§‹ç»ˆåœ¨åŠæÖM¸‹zÈš„è¡ç€ã€‚最åŽï¼ŒGCå¯ä»¥æ¯éš”一ŒD‰|—¶é—´å°±˜q行一‹Æ¡ï¼Œæ¯æ¬¡åªå›žæ”¶ä¸€éƒ¨åˆ†åžƒåœ¾åQŒè¿™æ˜¯çްåœ?br />
大部分JVM的方å¼ï¼Œ¾l“果是内å˜ä¹Ÿ‹¹ªè´¹äº†ï¼Œ˜q˜åЍä¸åŠ¨æš‚åœå‡ 百毫秒。难啊ï¼
å过æ¥çœ‹çœ‹C++利用smart pointerè¾¾æˆçš„æ•ˆæžœï¼Œä¸€æ—¦æŸå¯¹è±¡ä¸å†è¢«å¼•用,¾pÈ»ŸåˆÖM¸å®¹ç¼“åQŒç«‹åˆÕd›žæ”¶å†…å˜ã€‚è¿™
通常å‘生在关键ä“Q务完æˆåŽçš„æ¸…ç?cleanup)时期åQŒä¸ä¼šåª„å“关键ä“QåŠ¡çš„å®žæ—¶æ€§ï¼ŒåŒæ—¶åQŒå†…å˜é‡Œæ‰€æœ‰çš„对象
都是有用的,¾l对没有垃圾½Iºå 内å˜ã€‚æ€Žä¹ˆæ øP¼Ÿä¼ ç»Ÿã€æœ´ç´ çš„C++æ˜¯ä¸æ˜¯æ›´èƒœä¸€½{¹ï¼Ÿ
æ®ç»Ÿè®¡ï¼Œç›®å‰çš„Java½E‹åº˜q行期间å 用的内å˜é€šå¸¸ä¸ºå¯¹åº”C++½E‹åºçš?-20å€ã€‚é™¤äº†å…¶å®ƒçš„åŽŸå› åQŒä¸Šé¢æ‰€è¯´çš„æ˜¯ä¸€ä¸?br /> éžå¸¸ä¸»è¦çš„å› ç´ ã€‚æˆ‘ä»¬å¯¹memory leakå¦‚æ¤æ„¤æ¨åQŒä¸ž®±æ˜¯å› äØ“å®ƒå¯¼è‡´å¤§é‡çš„内å˜åžƒåœ¾å¾—ä¸åˆ°æ¸…除å—åQŸå¦‚果有äº?br /> GC之åŽåQŒåžƒåœ¾æ¯”以剘q˜æ¥åŠ¿æ‘v汹,那么GCåˆæœ‰ä»€ä¹ˆå¥½å¤„å‘¢åQ?/span>
当然åQŒC++çš„smart pointer现在会ä‹É用的äºÞZ¸å¤šï¼Œæ‰€ä»¥çŽ°åœ¨çš„C++½E‹åºæ™®éå˜åœ¨æ›´ä¸¥é‡çš„memory leak问题ã€?br /> 但是åQŒå¦‚果我奶奶跟舒马赫比赛车输掉了åQŒä½ 能够埋怨那辆èžRå么åQ?br /> http://www.594k.com/java/html/y2007m1/12051/