Równoważenie obciążenia
Najprawdopodobniej w przypadku najprostszych witryn w ogóle nie potrzebujesz skalowania. Tylko jedno pudełko zapewni Ci ochronę. Następnie powinieneś zrobić równoważenie obciążenia, jak wspomniałeś, które jest prawie takie samo dla każdej architektury (tak jak mówisz, że możesz najpierw uruchomić wiele procesów węzłowych. Ale kiedy zrobisz się naprawdę duży, potrzebujesz więcej pudełek).
Przykład równoważenia obciążenia Nginx :
http {
upstream myproject {
server 127.0.0.1:8000 weight=3;
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
}
server {
listen 80;
server_name www.domain.com;
location / {
proxy_pass http:
}
}
}
Redis
20 zapytań na sekundę
Nie przejmuj się node.js. Powinieneś używać redis jako magazynu danych, ponieważ jest niesamowicie szybki :). Istnieje nawet biblioteka AC dla węzła, gdy używasz node_redis .
npm install hiredis redis
Hiredis zapewnia niesamowitą wydajność, ponieważ kompiluje się do kodu C w węźle. Oto kilka testów porównawczych redis używanych z hiredis.
PING: 20000 ops 46189.38 ops/sec 1/4/1.082
SET: 20000 ops 41237.11 ops/sec 0/6/1.210
GET: 20000 ops 39682.54 ops/sec 1/7/1.257
INCR: 20000 ops 40080.16 ops/sec 0/8/1.242
LPUSH: 20000 ops 41152.26 ops/sec 0/3/1.212
LRANGE (10 elements): 20000 ops 36563.07 ops/sec 1/8/1.363
LRANGE (100 elements): 20000 ops 21834.06 ops/sec 0/9/2.287
Jeśli spojrzysz na te liczby, 20 / s to NIC :).
Poświadczenie
Aktualizacja:
Mówię to dużo, ale na miłość boską, proszę, nie próbujcie wdrażać własnego systemu uwierzytelniania. Prawdopodobnie będzie to niebezpieczne (wiele może się nie udać), dużo pracy. Do uwierzytelniania należy używać Facebook-connect, jednokrotnego logowania na Twitterze itp., Korzystając z doskonałej biblioteki connect-auth . Wtedy jesteś bezpieczny, ponieważ mają ekspertów testujących tam systemy logowania pod kątem dziur, a także nie przesyłają haseł zwykłym tekstem, ale dzięki Bogu używają https. Odpowiedziałem również na temat użytkownika, który chciał skorzystać z facebook-connect .
walidacja danych wejściowych
Aby sprawdzić poprawność danych wejściowych, możesz użyć walidatora węzłów .
var check = require('validator').check,
sanitize = require('validator').sanitize
check('test@email.com').len(6, 64).isEmail();
check('abc').isInt();
check('abc', 'Please enter a number').isInt();
check('abcdefghijklmnopzrtsuvqxyz').is(/^[a-z]+$/);
var int = sanitize('0123').toInt();
var bool = sanitize('true').toBoolean();
var str = sanitize(' \s\t\r hello \n').trim();
var str = sanitize('aaaaaaaaab').ltrim('a');
var str = sanitize(large_input_str).xss();
var str = sanitize('<a>').entityDecode();
Dostępna jest również biblioteka formularzy, która ułatwia tworzenie formularzy.