
рдЯреАрдПрд▓; рдбреАрдЖрд░:
- Node.js v0.8 рдЖрдкрдХреЛ рдЗрдВрдЯреЗрд▓ рдХреЛрд░ i7 рдХреНрд╡рд╛рдб / 16 рдЬреАрдмреА рд░реИрдо рдкрд░ 1 рдорд┐рд▓рд┐рдпрди рдПрдХ рд╕рд╛рде HTTP рдзреВрдордХреЗрддреБ рдХрдиреЗрдХреНрд╢рди рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рд╡рд╕реНрддреБрддрдГ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗред
- 1 рдХрдиреЗрдХреНрд╢рди 10 Kb рд╕реЗ рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА (4.1 Kb Javascript рд╣реАрдк + 2.2 Kb Node.js рдиреЗрдЯрд┐рд╡ + 3.8 Kb рдХрд░реНрдиреЗрд▓) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
- V8 рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдХ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ~ ~ 500Mb рд╕реНрдореГрддрд┐ред рдпрджрд┐ рдЕрдзрд┐рдХ рд╣реЛ, рддреЛ рдЖрдкрдХреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдореЛрдб рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЕрдиреНрдпрдерд╛ рд╕рд░реНрд╡рд░ рдХреА рдЬрд╡рд╛рдмрджреЗрд╣реА рдмрд╣реБрдд рдХрдо рд╣реЛ рдЬрд╛рддреА рд╣реИред
- рдРрд╕рд╛ рдЕрдиреБрднрд╡ (рдФрд░ рдЪрд╛рд╣рд┐рдП!) рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЦрд░реНрдЪ рдХрд┐рдП рдмрд┐рдирд╛ рдЦреБрдж рдХреЛ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рдП (рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ рджреЗрдЦреЗрдВ)ред
рдкрд░рд┐рдЪрдп
рд╡рд┐рджреЗрд╢реА рдмреНрд▓реЙрдЧреЛрдВ рдореЗрдВ,
рдореЛрдЪреАрд╡рдм / рдПрд░реНрд▓рд╛рдВрдЧ рдХреЗ рд╕рд╛рде рдХреНрд▓рд╛рд╕рд┐рдХ
рдП рдорд┐рд▓рд┐рдпрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдзреВрдордХреЗрддреБ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реЗ , рд╣рд╛рд▓ рд╣реА рдореЗрдВ
Node.js w / 250k рд╕рдорд╡рд░реНрддреА рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрддрдо рдПрдХ рд╕рд╛рде рдХрдиреЗрдХреНрд╢рди рдХреЗ рдХрдИ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХреА рдЧрдИред рдореИрдВ рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдЬреЛ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рд╡рд╣ рд╣реИ рджреЛрд╣рд░рд╛рд╡ред рддрд╛рдХрд┐ рдЕрдиреНрдп рд▓реЛрдЧ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЕрдкрдирд╛ рдкрд░реАрдХреНрд╖рд╛ рдкрд░рд┐рдгрд╛рдо рджреЛрд╣рд░рд╛ рд╕рдХреЗрдВ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХреЗрдВред рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдХреЛрдб рдЬреАрдердм рдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рдереЗ:
рд╕рд░реНрд╡рд░ рдФрд░
рдХреНрд▓рд╛рдЗрдВрдЯ , рд╕реНрд╡рд╛рдЧрдд рд╣реИред
рд╕рд░реНрд╡рд░
1. рд▓реЛрд╣рд╛
рдмреЗрд╢рдХ, рдЖрдкрдХреЛ рдРрд╕реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд░реНрдкрд┐рдд рд╕рд░реНрд╡рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЗрд╕реЗ рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдкреНрд░рджрд╛рддрд╛ рд╕реЗ рдСрд░реНрдбрд░ рдХрд░реЗрдВ рдпрд╛ рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдореИрдВрдиреЗ
Hetzner EX4 (Core i7-2600 Quad, 16Gb RAM) рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛, рдпрд╣ рдХрд╛рдлреА рд╕рд╕реНрддрд╛ рдФрд░ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реИред
2. рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо
рдореИрдВ Ubuntu 12.04 LTS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд╢рд╛рдпрдж рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреНрдп рд▓рд┐рдирдХреНрд╕-рдПрд╕ рдореЗрдВ рдорд╛рдореВрд▓реА рдмрджрд▓рд╛рд╡ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдиреНрдп рдУрдПрд╕ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдиреЗрдЯрд╡рд░реНрдХ рдиреЗ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рд▓рд┐рдирдХреНрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рдмрд╛рддреЗрдВ рдХреА рд╣реИрдВред рдХреНрдпрд╛ рдкреНрд░рд╕рдиреНрдирддрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереА:
#/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 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рд╣рдо рдХрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ (рдХреЛрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рджреНрд╡рд╛рд░рд╛) рдкрд░ рд▓реЛрдб рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ
рдХреНрд▓рд╕реНрдЯрд░ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдирд╛рдЧрд▓ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдЕрдХреНрд╖рдо рдХрд░реЗрдВред
рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕ рдкрд░ рдирдЬрд░ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдХрдИ рд╕рд┐рд╕реНрдЯрдо рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЯреНрд░реИрдХрд┐рдВрдЧ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдЬреЛрдбрд╝рд╛, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЙрдирдХреЗ рд▓реЙрдЧрд┐рдВрдЧ рднреАред рдЖрдк рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдХреЗ рдЗрд╕ рдЪрдорддреНрдХрд╛рд░ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
git clone git://github.com/ashtuchkin/node-millenium.git cd node-millenium
рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд╕рдорд╛рди рдПрдХ рддрд╕реНрд╡реАрд░ рдорд┐рд▓рддреА рд╣реИ:

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдпрд╣рд╛рдБ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
- рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдкреНрд░рддрд┐рд╢рдд рдХреЛ рд╣рд░ рдЬрдЧрд╣ рдХреЛрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рджреА рдЧрдИ рд╣реИред рдпрд╛рдиреА 4-рдХреЛрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░, рдЕрдзрд┐рдХрддрдо рднрд╛рд░ 400% рд╣реИред
- 'рдкреНрд░рдпреБрдХреНрдд' рдореЗрдореЛрд░реА рдореЗрдВ buf + рдХреИрд╢ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИред рдпрд╛рдиреА рд╕рд░реНрд╡рд░ рдкрд░ + рдореБрдХреНрдд + (buf + рдХреИрд╢) = рдХреБрд▓ рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
- рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХрд╛ pid, рдкреНрд░реЛрд╕реЗрд╕рд░ рд▓реЛрдб рд╢реЗрдпрд░ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ + sys), RSS рдореЗрдореЛрд░реА, рдХрдиреЗрдХреНрд╢рди рдХреА рд╕рдВрдЦреНрдпрд╛, os.memoryUsage () рдХреЗ рдЕрдиреБрд╕рд╛рд░ heapUsed / heapTotal, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдЬрд╡рд╛рдмрджреЗрд╣реА рдХреЗ рддреАрди рдЖрдпрд╛рдо (рдЯрд┐рдХ, рдиреАрдЪреЗ рджреЗрдЦреЗрдВ) рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред
рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА "рдЬрд╡рд╛рдмрджреЗрд╣реА" рдХреНрдпрд╛ рд╣реИ? рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ, рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╡реЗрдВрдЯ рд▓реВрдк рдиреЛрдб.рдЬреЗрдПрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╡реЗрдВрдЯ рдХреЛ рдХрд┐рддрдирд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рдЙрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдЬреЛ рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЧрдгрдирд╛ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред
рд╣рдо рдЗрд╕реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдорд╛рдкреЗрдВрдЧреЗ:
рдореИрдВ рдЕрд▓рдЧ рд╕реЗ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ 10 рдПрдордПрд╕ рдХреЗ рдорд╛рдк рдЕрдВрддрд░рд╛рд▓ рдХреЛ рддреНрд░реБрдЯрд┐ рдФрд░ рдЬреЛрдбрд╝ рдХреЗ рдмреАрдЪ рд╕рдВрддреБрд▓рди рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ред рд╕рд┐рд╕реНрдЯрдо рд▓реЛрдбред рдпрджрд┐ 10/10 / 10ms рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ Node.js рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдирд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдкрд░ 10 рдПрдордПрд╕ рдЦрд░реНрдЪ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ 10 рдПрдордПрд╕ рдорд╛рдк рдЧреНрд░рд┐рдб рдХреЗ рд╕рд╛рде, рдЗрд╡реЗрдВрдЯ рд▓реВрдк рд╣рд░ рдмрд╛рд░ рдореБрдлреНрдд рд╣реИ рдФрд░ рдХрд┐рд╕реА рднреА рдЖрдиреЗ рд╡рд╛рд▓реА рдШрдЯрдирд╛ рдХреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдФрд╕рдд рд╕рдордп рдмрд╣реБрдд рдХрдо рд╣реИред рдпрджрд┐ рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░, рдпрд╛ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╕рдВрдЪрд╛рд▓рди рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╣рдо рддреБрд░рдВрдд рдЗрд╕реЗ рджреЗрдЦреЗрдВрдЧреЗ рдФрд░ рдареАрдХ рдХрд░реЗрдВрдЧреЗред
рд▓реЙрдЧ рдХреЛ CSV рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдмрдирд╛рдП рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдПрдХ рдмрд╛рд░ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рднреА рдХреБрд▓ рдЖрдВрдХрдбрд╝реЛрдВ рдХреЛ рдиреЛрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (
рдЧрд┐рдердм рдкрд░ рд╕реВрдЪреА рджреЗрдЦреЗрдВ)ред
рдЧреНрд░рд╛рд╣рдХреЛрдВ
рд╡рд┐рдЪрд┐рддреНрд░ рд░реВрдк рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдПрдХ рд╕рд░реНрд╡рд░ рдмрдирд╛рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рднрд╛рд░ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рдерд╛ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдЯреАрд╕реАрдкреА рдХрдиреЗрдХреНрд╢рди рдЪрд╛рд░ [рд╕реНрд░реЛрдд рдЖрдИрдкреА, рд╕реНрд░реЛрдд рдкреЛрд░реНрдЯ, рдбреЗрд╕реНрдЯ рдЖрдИрдкреА, рдбреЗрд╕реНрдЯ рдкреЛрд░реНрдЯ] рджреНрд╡рд╛рд░рд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдХ рдорд╢реАрди рд╕реЗ 1 рд╕рд░реНрд╡рд░ рдкреЛрд░реНрдЯ рддрдХ рдЖрдк 64 рд╣рдЬрд╛рд░ рд╕реЗ рдЕрдзрд┐рдХ рдПрдХ рд╕рд╛рде рдХрдиреЗрдХреНрд╢рди (рд╕реНрд░реЛрдд рдкреЛрд░реНрдЯ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ) рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣рд╛рдВ рд╡рд░реНрдгрд┐рдд рд╡рд┐рднрд┐рдиреНрди рдЖрдИрдкреА рдХреЗ рд╕рд╛рде 16 рдиреЗрдЯрд╡рд░реНрдХ рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдорд╢реАрди рд╣реЛрд╕реНрдЯ рдкрд░ рд╣реЛрдиреЗ рдкрд░ рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЕрдореЗрдЬрд╝реЕрди рдИрд╕реА 2 рдорд╛рдЗрдХреНрд░реЛ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ 2 рд╕реЗрдВрдЯ рдкреНрд░рддрд┐ рдШрдВрдЯреЗ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ред рдпрд╣ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдХрд┐ рдРрд╕реА рдорд╢реАрди, рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рд╕реАрдорд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рдФрд░, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореЗрдореЛрд░реА, рд▓рдЧрднрдЧ 25 рд╣рдЬрд╛рд░ рдХрдиреЗрдХреНрд╢рди рд░рдЦрддреА рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, 40 рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдЙрджрд╛рд╣рд░рдг рд╣рдореЗрдВ 1 рдорд┐рд▓рд┐рдпрди рдХрдиреЗрдХреНрд╢рди рдкреНрд░рджрд╛рди рдХрд░реЗрдВрдЧреЗ рдФрд░ рдкреНрд░рддрд┐ рдШрдВрдЯреЗ $ 0.8 рдЦрд░реНрдЪ рд╣реЛрдВрдЧреЗред рдпрд╣ рдХрд╛рдлреА рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИред
рдЕрд▓рдЧ-рдЕрд▓рдЧ, рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдореЗрдЬрд╝реЕрди рдЖрдкрдХреЛ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ ~ 20 рд╕реЗ рдЕрдзрд┐рдХ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рдЬреБрдЯрд╛рдиреЗ рджреЗрдЧрд╛ред рдЖрдк рдпрд╛ рддреЛ рдЗрд╕ рд╕реАрдорд╛ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдХрдИ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдмрд╛рдж рд╡рд╛рд▓рд╛ рдЪреБрдирд╛ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдПрдХ рдорд╢реАрди рд╕реНрдерд╛рдкрд┐рдд рдХреА рдФрд░ рдХрд╕реНрдЯрдо рдПрдПрдордЖрдИ рдирд┐рд░реНрдорд╛рдг рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ 40 рдмрд╛рд░ рдХреЙрдкреА рдХрд┐рдпрд╛ - рдпрд╣ рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╕рдорд░реНрдерди рдФрд░ рдЕрд╕рд╣рдиреАрдп рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдХ рдЕрдиреНрдп рддрдВрддреНрд░ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛:
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдФрд░
рдХреНрд▓рд╛рдЙрдб рдЗрдирд┐рдЯ ред
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдорд╛рдирдХ рдЙрдмрдВрдЯреВ рдЫрд╡рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╡реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВ) рдФрд░ рдЬрдм рдЙрджрд╛рд╣рд░рдг рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рдЙрдард╛рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдЙрджрд╛рд╣рд░рдг рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, рдореИрдВ рдирдВрдЧреЗ рд╕рд┐рд╕реНрдЯрдо рдкрд░ Node.js рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рдЖрд╡рд╢реНрдпрдХ рдлрд╛рдЗрд▓реЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реВрдВ рдФрд░ рдиреЛрдб рдХреЛ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рдЬреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреЛрд░реНрдЯ рдХреЛ рд╕реБрдирддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рдкреЛрд░реНрдЯ рдкрд░ рдЖрдк рд╕рд░реНрд╡рд░ рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рдпрд╣ рдХрдорд╛рдВрдб рднреА рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕ рдЖрдИрдкреА рдПрдбреНрд░реЗрд╕ рд╕реЗ рдХрд┐рддрдиреЗ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╣реИрдВред рдЯреАрдо рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ "рдбреНрд░реЛрди" рдХрд╛ рд╕рдордп рд▓рдЧрднрдЧ 2 рдорд┐рдирдЯ рд╣реИред
рдХреНрдпрд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ - рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд▓реЙрдиреНрдЪ рд╕реЗ рдкрд╣рд▓реЗ
рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЖрдк рдЕрдкрдиреЗ рдЖрдк рдХреЛ
ec2-рдмреЗрдбрд╝реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдФрд░ рдирд┐рдореНрди рдЖрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВ:
git clone git://github.com/ashtuchkin/ec2-fleet.git cd ec2-fleet
рдкрд░реАрдХреНрд╖рдг
рддреЛ рдареАрдХ рд╣реИ, рдЪрд▓реЛ рдкрд░реАрдХреНрд╖рдг рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рд╣рдо 1 рдорд┐рд▓рд┐рдпрди рдХрдиреЗрдХреНрд╢рди, 50 рд╣рдЬрд╛рд░ рд╕рдВрджреЗрд╢ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдХрд░реЗрдВрдЧреЗред Node.js рд╕рдВрд╕реНрдХрд░рдг v0.8.3ред рд╕рд░реНрд╡рд░ рдХреЛрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг 8 рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ ("рд╢реНрд░рдорд┐рдХреЛрдВ") рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдиреЛрдб server.js
рдкрд╣рд▓реЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ, рд╣рдо рдорд╛рдирдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рд╣реА рдЕрддрд┐рд░рд┐рдХреНрдд рдЭрдВрдбреЗ рдХреЗ рдмрд┐рдирд╛ рдиреЛрдб.рдЬреЗрдПрд╕ рдЪрд▓рд╛рдПрдВрдЧреЗред рд╣рдо рдкрд╣рд▓рд╛ рдкрд░реАрдХреНрд╖рдг рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ (рд╕рднреА рддрд╕реНрд╡реАрд░реЗрдВ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВ):

рд╕рднреА рдЧреНрд░рд╛рдлрд╝ рдкрд░, рдХрд╛рд▓реА рдмрд┐рдВрджреАрджрд╛рд░ рд░реЗрдЦрд╛ рдЕрдзрд┐рдХрддрдо 1 рдорд┐рд▓рд┐рдпрди рдХреЗ рд╕рд╛рде рдХрдиреЗрдХреНрд╢рди рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИред рдкрд░реАрдХреНрд╖рдг рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдХреНрд╖реИрддрд┐рдЬ - рд╕реЗрдХрдВрдб, рдКрд░реНрдзреНрд╡рд╛рдзрд░ рд▓рд╛рдЗрдиреЗрдВ рдорд┐рдирдЯ рджрд░реНрд╢рд╛рддреА рд╣реИрдВред рдореЗрдореЛрд░реА рдЧреНрд░рд╛рдлрд╝ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ: рдХреБрд▓ - рдкреНрд░рдпреБрдХреНрдд рдореЗрдореЛрд░реА рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ (рдореБрдЭреЗ рдпрд╛рдж рд╣реИ, рдкрд░реАрдХреНрд╖рдг 16 рдЬреАрдмреА рдХреА рдХреБрд▓ рдореЗрдореЛрд░реА рдХреНрд╖рдорддрд╛ рд╡рд╛рд▓реЗ рд╕рд░реНрд╡рд░ рдкрд░ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛), рдХреБрд▓ рдиреЗрдЯреНрдЯреЛ - рдкрд╣рд▓реЗ рд╕реЗрдХрдВрдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреБрд▓ рдореЗрдВ рд╡реГрджреНрдзрд┐ (рдпрд╣ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рдФрд░ рдЗрд╕ рдорд╢реАрди рдкрд░ рдХрддрд╛рдИ рд╣реИ рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ, рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рд╡реЗ ~ 1.3 рдЬреАрдмреА), рдЖрд░рдПрд╕рдПрд╕ рдореЗрдо, рдЬреЗрдПрд╕ рд╣реАрдк рдЯреЛрдЯрд▓, рдЬреЗрдПрд╕ рд╣реАрдк рдкреНрд░рдпреБрдХреНрдд - рдХреБрд▓ рдЖрд░рдПрд╕рдПрд╕ рдореВрд▓реНрдп (рд▓рд┐рдВрдХ), рдЬреЗрдПрд╕ рд╣реАрдк рдХреБрд▓, рдЬреЗрдПрд╕ рд╣реАрдк рд╕рднреА рдиреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЬреЗрдПрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВред
рдиреЗрддреНрд░рд╣реАрди, рдЧреНрд░реЗ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЖрдХрд╛рд░ рдХрд░реНрдиреЗрд▓ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рдВрдЯрд┐рдд рд╕реНрдореГрддрд┐ рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдкреАрд▓рд╛ рдХреНрд╖реЗрддреНрд░ - рдиреЛрдб рдХреА рдореВрд▓ рд╕рдВрд░рдЪрдирд╛рдПрдВред рдЬреЗрдПрд╕, рдЧреНрд░реАрди - рдЬреЗрдПрд╕ рд╣реАрдкред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдкрдиреЗ рдЪрд░рдо рдкрд░ рдХреБрд▓ netto 10 Gb рдФрд░ stably рд╣реЛрд▓реНрдб рд╣реИред рдкреНрд░рдпреЛрдЧ рдХреЗ рдмрд╛рдж, рд╕рднреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдореВрд▓ рдиреЛрдбреНрд╕ .js рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдЙрдирдХреЗ рдореВрд▓ рдореВрд▓реНрдпреЛрдВ рдкрд░ рд▓реМрдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдЗрдП рдиреАрдЪреЗ рдЙрдиреНрд╣реЗрдВ рд╡рд╛рдкрд╕ рд▓реЗрдВред
рдПрдХ рд╣реА рдкрд░реАрдХреНрд╖рдг рдкрд░ CPU рдЙрдкрдпреЛрдЧ:

рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ - 8 рдХреЛрд░ = 800%ред рдХреБрд▓ - рдХреБрд▓ рднрд╛рд░, рд╕реАрдкреАрдпреВ (рд▓рдЧрднрдЧ рдХреБрд▓ рдХреЗ рд╕рдорд╛рди) - рдиреЛрдб рдХрд╛ рдХреБрд▓ рднрд╛рд░ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рдПрд╕рдЖрдИрдПрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЛрдб рдФрд░ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдХреБрд▓ рд▓реЛрдб, рдХреНрд░рдорд╢рдГред 10 рд╕реЗрдХрдВрдб рдХреА рдЪрд▓рддреА рдФрд╕рдд рд╕реЗ рд▓рд╛рдЗрдиреЗрдВ рдЪрд┐рдХрдиреА рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред
рдЗрд╕ рдЪрд╛рд░реНрдЯ рдиреЗ, рдореБрдЭреЗ рдирд┐рд░рд╛рд╢ рдХрд┐рдпрд╛ред рднрд╛рд░ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдкрд░ рдЦрд░реНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХрдиреЗрдХреНрд╢рди рд░рд┐рд╕реЗрдкреНрд╢рди рд╕рд╛рдорд╛рдиреНрдп рдерд╛, рд▓рдЧрднрдЧ 5-7 рд╣рдЬрд╛рд░ рдХрдиреЗрдХреНрд╢рди рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб, рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдкрд░рд┐рджреГрд╢реНрдп рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд┐рдпреЛрдЧ рдмрд╣реБрдд рдЕрдзрд┐рдХ рднрд╛рд░ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмрдбрд╝реЗ рдмреИрдЪреЛрдВ рдореЗрдВ (рд▓рдЧрднрдЧ 3 рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдП рдЧреНрд░рд╛рдл рдкрд░, рд▓реЛрдб рдХрд╛ 800% рдЬрдм рдореИрдВрдиреЗ рддреБрд░рдВрдд 400 рд╣рдЬрд╛рд░ рдХрдиреЗрдХреНрд╢рди рддреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА)ред
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЗрд╡реЗрдВрдЯ рд▓реВрдк рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ:

рдпрд╣ рдЧреНрд░рд╛рдлрд╝ 8 рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдФрд╕рдд рдЯрд┐рдХ-рдПрд╡реА рдореВрд▓реНрдпреЛрдВ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ (рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЯрд┐рдХ-рдореИрдХреНрд╕ рдХреЛ рдмрдЧ рдХреЗ рдХрд╛рд░рдг рдмрд╣рд╛рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛)ред рдкреИрдорд╛рдирд╛ рдмрдбрд╝реЗ рдЙрддрд╛рд░-рдЪрдврд╝рд╛рд╡ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдШреБрдЧрдгрдХ рд╣реИред рдкреАрд▓реА рд░реЗрдЦрд╛ 20 рд╕реЗрдХрдВрдб рдХреА рдЪрд▓рддреА рдФрд╕рдд рджрд┐рдЦрд╛рддреА рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд╕рддрди, 1 рдорд┐рд▓рд┐рдпрди рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде, рдЗрд╡реЗрдВрдЯ рд▓реВрдк рдХреЗрд╡рд▓ 10 рдмрд╛рд░ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб (рдпреЗрд▓реЛ рд▓рд╛рдЗрди ~ 100 рдПрдордПрд╕) рддрдХ рдкрд╣реБрдБрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред рдЬрдм 400 рд╣рдЬрд╛рд░ рдХрдиреЗрдХреНрд╢рди рдХрд╛рдЯ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдФрд╕рдд рдШрдЯрдирд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕рдордп 400 рдПрдордПрд╕ рддрдХ рдмрдврд╝ рдЬрд╛рддрд╛ рд╣реИред
Google рдЕрдкрдиреЗ рдЗрдЪреНрдЫрд┐рдд рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рдЫреЛрдЯреЗ рдкреИрдорд╛рдиреЗ рдХреЗ рдХрдИ рдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд▓реЛрдб рдХрд╛ рдореБрдЦреНрдп рднрд╛рдЧ рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ "рднрд╛рд░реА" рдорд╛рд░реНрдХ рдФрд░ рд╕реНрд╡реАрдк рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо (рд╡реА 8 рдореЗрдВ рд╕реЗ рджреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ - рдЙрдирдореЗрдВ рд╕реЗ рджреЛ рдЕрднреА рднреА рдПрдХ "рд╣рд▓реНрдХрд╛" рд╕реНрдХреИрд╡реЗрдВрдЬ рд╣реИ) ред рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА Node.js рдФрд░ V8 рдХреЗ рдмреАрдЪ рдХреА рд╕реАрдорд╛ рдкрд░ рдХрд╣реАрдВ рд╣реИ, рдФрд░ рдЖрдЗрдбрд▓ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рддрдВрддреНрд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпрд╣ V8 рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрдд рд╣реИ рдХрд┐ рдЕрднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдпрд╣ рдХрдЪрд░рд╛ рд╕рд╛рдл рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ рдХрд┐ Node.js рдЧрд╛рд▓реА рджреЗ рд░рд╣рд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЕрдЧрд░ JS HeapTotal> 128Mbред
рдиреЛрдб --nouse-idle-notification server.js
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдо рдЗрд╕ рд╕рдВрдХреЗрдд рдХреЛ рдлреНрд▓реИрдЧ --nouse-idle-notification рд╕реЗ рдЬреЛрдбрд╝рдХрд░ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рд╣рдореЗрдВ рджреВрд╕рд░реЗ рдЯреЗрд╕реНрдЯ рдореЗрдВ рдХреНрдпрд╛ рджреЗрдЧрд╛:

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореЗрдореЛрд░реА рдХреА рдЦрдкрдд 1 рдЬреАрдмреА (10%) рдмрдврд╝ рдЧрдИ рдФрд░ рдЕрдВрддрд┐рдо рдХрдиреЗрдХреНрд╢рди рдХреЗ 5 рдорд┐рдирдЯ рдмрд╛рдж рд╕реНрдерд┐рд░ рд╣реЛ рдЧрдИ, рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЦрд░рд╛рдм рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЧреНрд░рд╛рдл рдХрд╛ "рдЖрд░рд╛" рд╕реНрд╡рднрд╛рд╡ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдХреНрдпреЛрдВ?
рдЖрдЗрдП рдПрдХ рд╕рд░рд▓реАрдХреГрдд рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдПрдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреА рд╕реНрдореГрддрд┐ рдЦрдкрдд рдХрд╛ рдЧреНрд░рд╛рдл рджреЗрдЦреЗрдВ:

рдЕрдм рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ - рд▓рдЧрднрдЧ 5 рдорд┐рдирдЯ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдореЗрдВ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдХреБрд▓ рдореЗрдореЛрд░реА рдХреЗ рдЧреНрд░рд╛рдл рдореЗрдВ "рджреЗрдЦрд╛" рд╣реЛрддрд╛ рд╣реИред
рд╣рдо рдкреНрд░реЛрд╕реЗрд╕рд░ рдФрд░ рдЗрд╡реЗрдВрдЯ рд▓реВрдк рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ:


рдЦреИрд░, рдпрд╣ рдмреЗрд╣рддрд░ рд╣реИ! 1 рдорд┐рд▓рд┐рдпрди рдпреМрдЧрд┐рдХ 8 рдХреЗ 2 рд╕реЗ 3 рдХреЛрд░ рд╕реЗ рд▓реЛрдб рд╣реЛрддреЗ рд╣реИрдВред
рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХрдЪрд░рд╛ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд┐рдирд╛ рдЧрд░рдмрд╛ рдХрд▓реЗрдХреНрдЯрд░ рддреАрд╕рд░реЗ рдЯреЗрд╕реНрдЯ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ:

рдпрд╣ рдЧреНрд░рд╛рдл рджрд░реНрд╢рд╛рддрд╛ рд╣реИ, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХрд┐ рдкреАрд▓рд╛ рдХреНрд╖реЗрддреНрд░ (Node.js рдореВрд▓ рд╕рдВрд░рдЪрдирд╛рдПрдВ) рдЕрднреА рднреА рд▓реАрдХ рдирд╣реАрдВ рд╣реБрдЖ рдерд╛, рд▓реЗрдХрд┐рди рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рджреВрд╕рд░реЗ, рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдмреЗрд╣рддрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдиреЛрдб --nouse-idle-notification --expose-gc server.js
рдЦреИрд░, рд╣рдо рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рдореЗрдВ рд▓реЗрддреЗ рд╣реИрдВред рдиреЛрдб рдХреЛ рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдПрдБ - "exex-gc "рдФрд░ рдХреЙрд▓ gc (); рдЪреМрдереЗ рдЯреЗрд╕реНрдЯ рдореЗрдВ рдПрдХ рдмрд╛рд░:



рдЦреИрд░, рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИред рдореЗрдореЛрд░реА рдХреЛ рдмрд╣реБрдд рдЬрд▓реНрджреА рдореБрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкреНрд░реЛрд╕реЗрд╕рд░ рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдорд┐рдирдЯ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЯрд┐рдХ-рдПрд╡реА рдлрдЯ рд╣реЛрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдордЭреМрддрд╛ рд╣реИред
рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ?
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕реНрд╡рддрдВрддреНрд░ рдкрд░реАрдХреНрд╖рдг рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдХрд┐рдпрд╛ред рдХреГрдкрдпрд╛, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЕрдЪреНрдЫрд╛ рдорд╢реАрди рдмреЗрдХрд╛рд░ рд╣реИ, рддреЛ рдЕрдкрдиреЗ рддрд░реАрдХреЗ рд╕реЗ рдЬрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ - рдпрд╣ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред
рджреВрд╕рд░реЗ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдпрд╣ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИред рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ, рдЬреИрдмрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдПрдирд╛рд▓реЙрдЧ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдФрд░ рдЙрд╕реА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред
рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рд░реВрдкрд░реЗрдЦрд╛ Node.js рдФрд░ V8 рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЖрдЧреЗ рдХреЗ рдЕрдиреБрдХреВрд▓рди рдореЗрдВ рдорджрдж рдХрд░реЗрдЧреАред
рддреАрд╕рд░рд╛, рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- рдирд╛рдЧрд▓ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдЪрд╛рд▓реВ / рдмрдВрдж рдХрд░рдиреЗ рд╕реЗ рдХреНрдпрд╛ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддрд╛ рд╣реИ (рд╕реЙрдХреЗрдЯ редрд╕реЗрдЯрдСрдирдбреЗрд▓реЗ ())ред
- рдкреНрд░рддрд┐ рдХрдиреЗрдХреНрд╢рди 20 рд╕реЗрдХрдВрдб рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдХрд┐рддрдиреЗ рд╕рдВрджреЗрд╢ рд░рдЦ рд╕рдХрддрд╛ рд╣реИ? рд╢рд╛рдпрдж рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдПрдХ рд╕реАрдорд╛ рд╣реЛрдЧреАред
- рдЖрдк / proc / sockstat рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЙрдХреЗрдЯ рдХреЗ рд▓рд┐рдП рдХрд░реНрдиреЗрд▓ рдЖрд╡рдВрдЯрди рдХреЛ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- рдХреНрдпреЛрдВ рдкреАрд▓реЗ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдореБрдХреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ (Node.js рджреЗрд╢реА)? рдпрд╣ рдХреНрдпрд╛ рд╣реИ рдпрд╣ рдХреИрд╕реЗ рддрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?
- рдмрдВрдж рд╕реЙрдХреЗрдЯреНрд╕ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рдЦреЛрд▓рдиреЗ рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдХреНрдпреЛрдВ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ?
- рдЯреАрд╕реАрдкреА рдХреЗ рд▓рд┐рдП рдХрд░реНрдиреЗрд▓ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рд╕рд╛рде рд╣реА рдиреЗрдЯрдлрд┐рд▓реНрдЯрд░ / рдХреЙрдирдЯреНрд░реИрдХ / рдЖрдИрдкреАрдЯреЗрдмрд▓реНрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдмрдВрдж рдХрд░реЗрдВ, рд╢рд╛рдпрдж рдпрд╣ рдореЗрдореЛрд░реА рдХреЛ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛ред
- 40 рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рд╕рд░реНрд╡рд░ рдХреЛ рдЕрдиреНрдп рддрдХрдиреАрдХреЛрдВ рдХреЗ рд╕рд╛рде рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ - рдПрд░реНрд▓рд╛рдВрдЧ, рдЬрд╛рд╡рд╛ рдПрдирдЖрдИрдУ, рдЯреНрд╡рд┐рд╕реНрдЯреЗрдб, рдЖрджрд┐ред рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВред
- рдЗрдВрдЯрд░рдкреНрд░реЛрд╕реЗрд╕ рд╕рдВрдЪрд╛рд░ рдХрд┐рддрдирд╛ рддреЗрдЬ рд╣реИ? рдХреНрдпрд╛ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рдХреЛ рд╕реНрдерд╛рдиреАрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмреАрдЪ рдПрдХ рдЦреБрд▓рд╛ рд╡рд┐рд╡рд░рдгрдХ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдХрдорд░реЗ рдореЗрдВ рд╕рдореВрд╣рд┐рдд рдХрд░рдирд╛ред рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдмрд╣реБрдд рдорджрдж рдХрд░реЗрдЧрд╛ред