TL; DRïŒ
- Node.js v0.8ã§ã¯ãè¿œå èšå®ãªãã§Intel Core i7 Quad / 16 Gb RAMã§100äžã®åæHTTP Cometæ¥ç¶ãåŠçã§ããŸãã
- 1ã€ã®æ¥ç¶ã¯10 Kbãå°ãè¶ ããã¡ã¢ãªãæ¶è²»ããŸãïŒ4.1 Kb JavascriptããŒã+ 2.2 Kb Node.jsãã€ãã£ã+ 3.8 Kbã«ãŒãã«ïŒ..
- V8ã¬ããŒãžã³ã¬ã¯ã¿ãŒã¯ã500 MB以äžã®ã¡ã¢ãªã管çããããã«ã¯èšèšãããŠããŸããã è¶ éããå Žåã¯ãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã®ä»£æ¿ã¢ãŒãã«åãæ¿ããå¿ èŠããããŸããããããªããšããµãŒããŒã®ãå¿çæ§ããå€§å¹ ã«äœäžããŸãã
- ãã®ãããªçµéšã¯ãããªãèªèº«ã§å€ãã®è²»çšããããã«ç¹°ãè¿ãããšãã§ããŸãïŒãããŠãããã¹ãã§ãïŒïŒã
ã¯ããã«
å€åœã®ããã°ã§ã¯ã Mochiweb / Erlangã䜿çšããã¯ã©ã·ãã¯ãªA Million User Comet Applicactionãããææ°ã®Node.js w / 250kåææ¥ç¶ãŸã§ãåææ¥ç¶ã®æ倧æ°ã®ããã€ãã®ãã¹ããã¬ãã¥ãŒãããŸããã ç§ã®ãã¹ãã§éæãããã®ã¯ãåçŸæ§ã§ãã ä»ã®äººãåé¡ãªããã¹ãçµæãç¹°ãè¿ãããšãã§ããããã«ã ãã¹ãã§äœ¿çšããããã¹ãŠã®ã³ãŒãã¯githubã«æçš¿ãããŸããïŒ serverããã³client ãããããã
ãµãŒããŒ
1.é
ãã¡ããããã®ãããªãã¹ããå®è¡ããã«ã¯å°çšãµãŒããŒãå¿ èŠã§ãã ãæ°ã«å ¥ãã®ãã¹ãã£ã³ã°ãããã€ããŒã«æ³šæããããæ¢åã®ãããã€ããŒã䜿çšããŸãã Hetzner EX4 ïŒCore i7-2600 Quadã16Gb RAMïŒã䜿çšããŸãã ãããã¯éåžžã«å®äŸ¡ã§åŒ·åã§ãã
2.ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã
Ubuntu 12.04 LTSã䜿çšããŠããŸãã ããããç§ã®ãã¹ãã¯ä»ã®Linuxã§ã䜿çšã§ããŸãããããããªå€æŽãå¿ èŠã§ãã ã»ãšãã©ã®å Žåãããã¯ä»ã®OSã§ã¯æ©èœããŸããã ãããã¯ãŒã¯ã¯ãå€æ°ã®æ¥ç¶çšã«Linuxãã»ããã¢ããããããšã«ã€ããŠå€ãã®ããšã話ããŸããã åã°ããããšã«ãããã¯ã»ãšãã©å¿ èŠãããŸããã§ããïŒ
#/etc/security/limits.conf # ( ). * - nofile 1048576
#/etc/sysctl.conf # netfilter/iptables, : net.ipv4.netfilter.ip_conntrack_max = 1048576
3. Node.jsã®ã³ãŒã
ãã¹ãŠã®ãã¹ãã¯Node.js v0.8.3ã䜿çšããŸãã
æšæºã®ã¯ã©ã¹ã¿ãŒã¢ãžã¥ãŒã«ã䜿çšããŠãããã€ãã®ããã»ã¹ã«è² è·ãåæ£ããŸãïŒã³ã¢ã®æ°ã«ãã£ãŠïŒã Nagleã¢ã«ãŽãªãºã ãç¡å¹ã«ããŸã ã
// Server.js () var cluster = require('cluster'); var config = { numWorkers: require('os').cpus().length, }; cluster.setupMaster({ exec: "worker.js" }); // Fork workers as needed. for (var i = 0; i < config.numWorkers; i++) cluster.fork()
// Worker.js () var server = require('http').createServer(); var config = {...}; server.on('connection', function(socket) { socket.setNoDelay(); // . }); var connections = 0; server.on('request', function(req, res) { connections++; // '' 20 // = 50 1 var pingInterval = setInterval(function() { res.write('ping'); }, 20*1000); res.writeHead(200); res.write("Welcome!"); res.on('close', function() { connections--; clearInterval(pingInterval); pingInterval = undefined; }); }); server.listen(config.port);
䟿å®äžãäœãèµ·ãã£ãŠããã®ããç£èŠããããã«ã端æ«ã®å€ãã®ã·ã¹ãã ãã©ã¡ãŒã¿ã®è¿œè·¡ãšè¡šç€ºãããã³ãããã®ãã°ãè¿œå ããŸããã 次ã®ããã«ããµãŒããŒäžã§ãã®å¥è·¡ã®å¯Ÿè©±æ§ãèµ·åã§ããŸãã
git clone git://github.com/ashtuchkin/node-millenium.git cd node-millenium # 8888. node server.js
次ã®ãããªåçã衚瀺ãããŸãã
ããã§ã¯æ¬¡ã®ããšã«æ³šæããŠãã ããã
- ããã»ããµã®äœ¿çšçã¯ãã³ã¢ã®æ°ã«å¿ããŠã©ãã«ã§ããããŸãã ã€ãŸã 4ã³ã¢ããã»ããµã§ã¯ãæå€§è² è·ã¯400ïŒ ã§ãã
- ã䜿çšæžã¿ãã¡ã¢ãªã«ã¯buf +ãã£ãã·ã¥ã¯å«ãŸããŸããã ã€ãŸã 䜿çšããå¿ èŠããããŸã+ç¡æ+ïŒbuf +ãã£ãã·ã¥ïŒ=ãµãŒããŒäžã®åèšã¡ã¢ãªã
- åããã»ã¹ã«ã€ããŠããã®pidãããã»ããµè² è·å ±æïŒãŠãŒã¶ãŒ+ sysïŒãRSSã¡ã¢ãªãæ¥ç¶æ°ãos.memoryUsageïŒïŒã«ããheapUsed / heapTotalãããã»ã¹ã®å¿çæ§ã®3ã€ã®æ¬¡å ïŒãã£ãã¯ã以äžãåç §ïŒã衚瀺ãããŸãã
ããã»ã¹ã®ãã®ãå¿çæ§ããšã¯äœã§ããïŒ æ¡ä»¶ä»ãã§ãããã¯ã€ãã³ãã«ãŒãNode.jsã«ãã£ãŠåŠçãããåã«ã€ãã³ããåŸ æ©ããå¿ èŠãããéã§ãã ãã®ãã©ã¡ãŒã¿ã¯ãå°ãªããšããªã¢ã«ã¿ã€ã ã«äŸåããã¢ããªã±ãŒã·ã§ã³ã§ã¯éèŠã§ãããèšç®ããã®ã¯ããªãå°é£ã§ãã
次ã®ããã«æž¬å®ããŸãã
// Node.js 10 . var ticks = []; setInterval(function() { ticks.push(Date.now()); }, 10); // . setInterval(function() { // 1. : ticks[i] = ticks[i+1]-ticks[i] // 2. ticks (tick-avg), 90- (tick-max). // 3. . ticks.length=0; }, 1000);
ãšã©ãŒãšå ç®ã®ãã©ã³ã¹ãšããŠ10ããªç§ã®æž¬å®ééãéžæãããããšã«æ³šæããŠãã ããã ã·ã¹ãã è² è·ã 10/10/10ããªç§ã衚瀺ãããå Žåãããã¯Node.jsãåã€ãã³ãã®åŠçã«10ããªç§ãè²»ããããšãæå³ããŸããã ã€ãŸãã10 msã®æž¬å®ã°ãªããã䜿çšãããšãã€ãã³ãã«ãŒãã¯æ¯åç¡æã§ãçä¿¡ã€ãã³ããäžåºŠã«åŠçããæºåãã§ããŸããã€ãŸããã€ãã³ãåŠçã®å¹³åæéãå€§å¹ ã«ççž®ãããŸãã ã¬ããŒãžã³ã¬ã¯ã¿ãŒãŸãã¯é·æéã®æäœãæå¹ã«ãªããšãããã«ç¢ºèªããŠä¿®æ£ããŸãã
ãã°ã¯CSV圢åŒã§ç¶æããã1ç§ããšã«ã·ã¹ãã ã®ãã¹ãŠã®çµ±èšæ å ±ãèšé²ãããŸãïŒ githubã®ãªã¹ããåç §ïŒã
ã客ããŸ
å¥åŠãªããšã«ãå¿ èŠãªè² è·ãæäŸããããšã¯ããµãŒããŒãäœæãããããå°é£ã§ããã å®éã«ã¯ãTCPæ¥ç¶ã¯4ã€ã®[éä¿¡å IPãéä¿¡å ããŒããéä¿¡å IPãéä¿¡å ããŒã]ã«ãã£ãŠäžæã«æ±ºå®ãããããã1å°ã®ãã·ã³ãã1ã€ã®ãµãŒããŒããŒããŸã§ïŒéä¿¡å ããŒãã®æ°ã§ïŒåææ¥ç¶ã64,000ãè¶ ããŠäœæã§ããŸããã ããã§èª¬æããããã«ãç°ãªãIPã§16ã®ãããã¯ãŒã¯ã€ã³ã¿ãŒãã§ã€ã¹ãäœæããããšã¯å¯èœã§ããããã·ã³ããã¹ãäžã«ããå Žåã¯å°é£ã§ãã
ãã®çµæã1æéããã2ã»ã³ãã§Amazon EC2ãã€ã¯ãã€ã³ã¹ã¿ã³ã¹ã䜿çšããããšã決å®ãããŸããã ãã®ãããªãã·ã³ã¯ãããã»ããµãšç¹ã«ã¡ã¢ãªã®å¶éã«ãããçŽ25,000ã®æ¥ç¶ãå®å®ããŠä¿æããããšãããããŸããã ãããã£ãŠãå®è¡äžã®40åã®ã€ã³ã¹ã¿ã³ã¹ã¯100äžã®æ¥ç¶ãæäŸãã1æéããã0.8ãã«ã®è²»çšãããããŸãã ãŸã£ããåé¡ãããŸããã
ãããšã¯å¥ã«ãããã©ã«ãã§ã¯ãAmazonã¯ã1ã€ã®ãªãŒãžã§ã³ã§20ãè¶ ããã€ã³ã¹ã¿ã³ã¹ãçºçãããªãããšãèšããªããã°ãªããŸããã ãã®å¶éãå¢ãããªã¯ãšã¹ããæ®ãããããã€ãã®ãªãŒãžã§ã³ã§ã€ã³ã¹ã¿ã³ã¹ãäžããããšãã§ããŸãã ç§ã¯åŸè ãéžã³ãŸããã
æåã«ã1å°ã®ãã·ã³ãã»ããã¢ããããã«ã¹ã¿ã AMIäœæã¡ã«ããºã ã䜿çšããŠ40åã³ããŒããŸãããããã¯ãWebã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããŠç°¡åã«å®è¡ã§ããŸãã ãããããµããŒãããã®ãé£ããããŠç®¡çã§ããªãããšãå€æãããããå¥ã®ã¡ã«ããºã ã«åãæ¿ããŸããïŒ User Data and Cloud Init ã
ã€ãŸããæšæºã®Ubuntuã€ã¡ãŒãžã䜿çšããïŒåãªãŒãžã§ã³ã§ç°ãªãïŒãã€ã³ã¹ã¿ã³ã¹ã®èµ·åæã«ã¹ã¯ãªããããã©ã¡ãŒã¿ãŒãšããŠæå®ãããŸãã ã€ã³ã¹ã¿ã³ã¹ã®ã¬ã€ãºçŽåŸã«å®è¡ãããŸãã ãã®ã¹ã¯ãªããã§ã¯ããã¢ã·ã¹ãã ã«Node.jsãã€ã³ã¹ããŒã«ããå¿ èŠãªãã¡ã€ã«ãäœæããŠãç¹å®ã®ããŒãããªãã¹ã³ããããŒããå®è¡ããŸãã ããã«ããã®ããŒãã§ã¯ããµãŒããŒã®ã¹ããŒã¿ã¹ã確èªããããã³ãã³ãïŒããšãã°ãã©ã®IPã¢ãã¬ã¹ã§ç¢ºç«ããæ¥ç¶ã®æ°ïŒãæå®ãããã§ããŸãã ããŒã ããäœæ¥äžã®ããããŒã³ããŸã§ã®æéã¯çŽ2åã§ãã
ãã°ãããããš- ã¯ã©ã€ã¢ã³ãã³ãŒãã¯ãã€ã³ã¹ã¿ã³ã¹ãèµ·åããåã«ç·šéã§ããŸãã
ec2-fleetãããžã§ã¯ããšæ¬¡ã®ã³ãã³ãã䜿çšããŠãèªåã§è©Šãããšãã§ããŸãã
git clone git://github.com/ashtuchkin/ec2-fleet.git cd ec2-fleet # npm install # accessKeyId, accessKeySecret Amazon. # https://portal.aws.amazon.com/gp/aws/securityCredentials # , ( ) # ! Security Group 'default' # TCP 8889 source 0.0.0.0/0 - . nano aws-config.json # , , 10 . # . , . ./aws.js start 10 # ( top). . ./aws.js status # (, , ) ./aws.js set host <ip> # 1000 ./aws.js set n 1000 # - 25000 ./aws.js set n 25000 # . . ./aws.js set restart 1 # . - . ./aws.js stop all
ãã¹ã
ããã§ã¯ããã¹ããå§ããŸãããã ããããã³ä»¥äžã®ãã¹ãã§ã¯ã100äžã®æ¥ç¶ãäœæããæ¯ç§5äžã®ã¡ãã»ãŒãžãäœæããŸãã Node.jsããŒãžã§ã³v0.8.3ã åŠçã¯ããµãŒããŒã³ã¢ã®æ°ã«å¿ããŠ8ã€ã®ããã»ã¹ïŒãã¯ãŒã«ãŒãïŒã§å®è¡ãããŸãã
node server.js
æåã®ãã¹ãã§ã¯ãæšæºæ§æèªäœã§ãè¿œå ã®ãã©ã°ãªãã§node.jsãå®è¡ããŸãã æåã®ãã¹ããéå§ããŸãïŒãã¹ãŠã®åçã¯ã¯ãªãã¯å¯èœã§ãïŒïŒ
ãã¹ãŠã®ã°ã©ãã§ãé»ãç¹ç·ã¯æ倧å€ã100äžã®æ¥ç¶ã®æ°ã瀺ããŸãæ°Žå¹³-ãã¹ãã®éå§ããã®ç§æ°ãåçŽç·ã¯åã瀺ããŸãã ã¡ã¢ãªã°ã©ãã¯ä»¥äžã瀺ããŸãïŒåèš-䜿çšãããã¡ã¢ãªã®åèšæ°ïŒæãåºããšããã¹ãã¯åèšã¡ã¢ãªå®¹é16 Gbã®ãµãŒããŒã§å®è¡ãããŸããïŒãåèšnetto-æåã®ç§ãšæ¯èŒããåèšã®å¢å ïŒãã®ãã·ã³ã§ããã«ããã€ããå転ããŠããããå°å ¥ãããŸããïŒç§ã®ãããžã§ã¯ãã®ãã¡ãåèšã§ã1.3 GbïŒãRSSã¡ã¢ãªãJSããŒãåèšãJSããŒã䜿çšé-ãã¹ãŠã®node.jsããã»ã¹ã®RSSåèšå€ïŒãªã³ã¯ïŒãJSããŒãåèšãJSããŒã䜿çšéãå ããŠããŸãã
èŠèŠçã«ã¯ãç°è²ã®é åã®ãµã€ãºã¯ã«ãŒãã«ã«ãã£ãŠå²ãåœãŠãããã¡ã¢ãªã®éãé»è²ã®é å-node.jsã®ãã€ãã£ãæ§é ãç·-JSããŒãã瀺ããŠããŸãã
ã芧ã®ãšãããããŒã¯æã®åèšnettoã¯10 Gbã§ãããå®å®ããŠä¿æãããŠããŸãã å®éšåŸããã€ãã£ãã®node.jsæ§é ãé€ãããã¹ãŠã®ãã©ã¡ãŒã¿ãŒã¯å ã®å€ã«æ»ããŸãã 以äžã«æ»ããŸãããã
åããã¹ãã§ã®CPU䜿çšçïŒ
ããã§ã¯ãã¹ãŠãç°¡åã§ã-8ã³ã¢= 800ïŒ ã åèš-åèšè² è·ãCPUïŒåèšãšã»ãŒåãïŒ-node.jsããŠãŒã¶ãŒãSysããã»ã¹ã®åèšè² è·-ãããããŠãŒã¶ãŒã¢ãŒããšã«ãŒãã«ã®åèšè² è· ç·ã¯ã移åå¹³å10ç§ã§å¹³æ»åãããŸãã
ãã®ãã£ãŒãã¯ãççŽã«èšã£ãŠãç§ã倱æãããŸããã è² è·ã倧ãããããããäœã«è²»ããããŠããããæ確ã§ã¯ãããŸããã æ¥ç¶ã®åä¿¡ã¯æ£åžžã§ã1ç§ãããçŽ5ã7åã®æ¥ç¶ã§ãããæããã«ããã®ã·ããªãªã¯æé©åãããŠããŸãã ãã ããç¹ã«å€§èŠæš¡ãªãããã§ã¯ãåæã«ããè² è·ãå€§å¹ ã«å¢å ããŸãïŒã°ã©ãäžã§ãçŽ3åéã40äžã®æ¥ç¶ãããã«åæããããšãããšãã®è² è·ã®800ïŒ ïŒã
ã€ãã³ãã«ãŒãã®åäœãèŠãŠã¿ãŸãããã
ãã®ã°ã©ãã¯ã8人ã®ã¯ãŒã«ãŒã®å¹³åtick-avgå€ã瀺ããŠããŸãïŒæ®å¿µãªããããã°ã®ããtick-maxã¯åŸ©å ã§ããŸããã§ããïŒã ã¹ã±ãŒã«ã¯ã倧ããªå€åãåæ ããããã«å¯Ÿæ°ã§ãã é»è²ã®ç·ã¯ã20ç§ã®ç§»åå¹³åã瀺ããŠããŸãã
ã芧ã®ããã«ãå¹³åã§100äžã®æ¥ç¶ã§ãã€ãã³ãã«ãŒãã«ã¯1ç§ããã10åããã¢ã¯ã»ã¹ã§ããŸããïŒé»è²ã®ç·ã100ããªç§ïŒã ãã ãã¡ã§ãã 40äžã®æ¥ç¶ãåæããããšãå¹³åã€ãã³ãåŠçæéã¯400ããªç§ã«å¢å ããŸãã
Googleãæå³ããç®çã§äœ¿çšããå°èŠæš¡ã®ããã€ãã®å®éšãè¡ã£ãåŸãè² è·ã®äž»ãªéšåã¯ã¬ããŒãžã³ã¬ã¯ã¿ãŒã«ãã£ãŠåŒãèµ·ããããããšãããããŸããã ã ãã®åäœã®è²¬ä»»ã¯Node.jsãšV8ã®å¢çã®ã©ããã«ãããã¢ã€ãã«éç¥ã¡ã«ããºã ã«é¢é£ããŠããŸãã èŠããã«ãããã¯äœæ¥ãçŸåšè¡ãããŠããªãããšãšãç¹ã«JS HeapTotal> 128Mbã®å Žåã«Node.jsãæªçšããŠãããŽããã¯ãªãŒã³ã¢ããããæéãããããšã瀺ãV8ã®ã·ã°ãã«ã§ãã
node --nouse-idle-notification server.js
幞ããªããšã«ããã©ã°--nouse-idle-notificationãè¿œå ããããšã§ããã®ã·ã°ãã«ããªãã«ã§ããŸãã 2çªç®ã®ãã¹ãã§ããããããããã®ãèŠãŠã¿ãŸãããã
ãŸããã¡ã¢ãªæ¶è²»ã1 GBïŒ10ïŒ ïŒå¢å ããæåŸã®æ¥ç¶ã®5ååŸã«å®å®ããŠããããšãããããŸããããã¯äžè¬ã«æªããããŸããã ãŸããã°ã©ãã®ããã³ã®ãªãã®æ§è³ªãèŠããŸãã ãªãã§ïŒ
ç°¡åãªãã¹ãã§1人ã®ã¯ãŒã«ãŒã®ã¡ã¢ãªæ¶è²»éã®ã°ã©ããèŠãŠã¿ãŸãããã
ä»ã§ã¯æããã§ã-çŽ5åããšã«ãåã¯ãŒã«ãŒã§ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãè¡ãããåèšã¡ã¢ãªã®ã°ã©ãã«ãã®ããããã圢æãããŸãã
ããã»ããµãšã€ãã³ãã«ãŒããèŠãŠã¿ãŸãããã
ãŸããããã¯ã¯ããã«è¯ãã§ãïŒ 8åã®2ã3åã®ã³ã¢ãã100äžã®ååç©ãããŒããããŸãã
3çªç®ã®ãã¹ãã§ãã¬ããŒãžã³ã¬ã¯ã¿ãŒãIdleNotificationãªãã§ããŸãæ©èœãããã©ãããèŠãŠã¿ãŸãããã
ãã®ã°ã©ãã¯ããŸããé»è²ã®é åïŒNode.jsã®ãã€ãã£ãæ§é ïŒããŸã ãªãŒã¯ããŠããªãããåå©çšãããããšã瀺ããŠããŸãã 第äºã«ãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã®æ¹ãåªããŠããå¯èœæ§ããããŸãã
node --nouse-idle-notification --expose-gc server.js
ããŠãç§ãã¡ã¯ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãèªåãã¡ã®æã«åããŸãã ãã©ã°ã--expose-gcããæå®ããŠnode.jsãå®è¡ããgcïŒïŒãåŒã³åºããŸãã 4åç®ã®ãã¹ãã§ã¯1åéã«1åïŒ
ãŸããæªããªãã ã¡ã¢ãªã¯éåžžã«è¿ éã«è§£æŸãããããã»ããµã¯å¶åŸ¡ãããŸããã1åã«1åãtick-avgããŒã¹ããçºçããŸãã ããã¯è¯ã劥åã ãšæããŸãã
次ã¯ïŒ
ãŸããç¬ç«ãããã¹ãã§çµæã確èªããå¿ èŠããããŸãã ç§ã¯ãããç°¡åã«ããããã«ãã¹ãŠãããŸããã è¯ããã·ã³ãã¢ã€ãã«ç¶æ ã®å Žåã¯ãèªåã®éãé²ãã§ã¿ãŠãã ãã-ããã¯éåžžã«èå³æ·±ãã§ãã
第äºã«ããã®ãã³ãããŒã¯ãçŸå®ããã»ã©é ãããšã¯æããã§ãã ãããããå®éã®ã¢ããªã±ãŒã·ã§ã³ãšããŠãjabberãµãŒããŒã®é¡äŒŒç©ãäœæããåãããªã¥ãŒã ã§ãã¹ããããšããã§ãããã
ãããã«ãããçŸåšã®ãã¬ãŒã ã¯ãŒã¯ãNode.jsããã³V8éçºè ã®ãããªãæé©åã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã
第äžã«ãèŠã€ããã«ã¯ããã«å®éšãå¿ èŠã§ãã
- Nagleã¢ã«ãŽãªãºã ïŒsocket.setNoDelayïŒïŒïŒããªã³ãŸãã¯ãªãã«ããããšã«ãã圱é¿ãåãããã®ã
- æ¥ç¶ããšã«20ç§ã«1ã€ã®ã¡ãã»ãŒãžã§ã¯äžååã§ãã ãµãŒããŒã¯1ç§ãããããã€ã®ã¡ãã»ãŒãžãç¶æã§ããŸããïŒ ããããããã¯å®éã®ãããžã§ã¯ãã®å¶éã«ãªãã§ãããã
- / proc / sockstatã䜿çšããŠããœã±ããã®ã«ãŒãã«å²ãåœãŠãããæ£ç¢ºã«æ±ºå®ã§ããŸãã
- é»è²ã®é åã解æŸãããªãã®ã¯ãªãã§ããïŒNode.jsãã€ãã£ãïŒ ããã¯äœã§ãã ããã¯ã©ã®ããã«ä¿®æ£ã§ããŸããïŒ
- ãœã±ãããéãããšãéããããããã»ããµã«å€ãã®è² è·ããããã®ã¯ãªãã§ããïŒ
- TCPã®ã«ãŒãã«èšå®ãè©ŠããŠã¿ãŠãã ããããŸããnetfilter / conntrack / iptablesã¢ãžã¥ãŒã«ããªãã«ããŠãã ãããã¡ã¢ãªã«è¯ã圱é¿ãäžããå¯èœæ§ããããŸãã
- 40åã®AWSã€ã³ã¹ã¿ã³ã¹ã§ã¡ãœããã䜿çšããŠãä»ã®ãã¯ãããžãŒïŒErlangãJava NIOãTwistedãªã©ïŒããµãŒããŒã«ããŒãããŠã¿ãŠãã ããã ä»æ§ãæ¯èŒããŸãã
- ããã»ã¹ééä¿¡ã¯ã©ã®ãããé«éã§ããïŒ ããã»ã¹éã§ãªãŒãã³ãªèšè¿°åãæž¡ããéšå±ããšã«ã°ã«ãŒãåããŠãã¯ã©ã€ã¢ã³ãéã®å¯Ÿè©±ãããŒã«ã©ã€ãºããããšã¯å¯èœã§ããïŒ ããã¯å®éã®ãããžã§ã¯ãã§å€§ãã«åœ¹ç«ã¡ãŸãã