Saya cukup baru dalam pengembangan sisi server skala besar. Saya ingin menulis server menggunakan Node.js, tetapi sebelum melanjutkan, saya ingin tahu apa prinsip umum untuk menskalakan node hingga, katakanlah, 20 kueri per detik.
Layanan yang saya tulis sebagian besar akan menjadi antarmuka ke database, ditambah otentikasi dan validasi data input.
node.js
scalability
nornagon.dll
sumber
sumber
Jawaban:
Penyeimbang beban
Kemungkinan besar untuk situs paling sederhana, Anda tidak memerlukan penskalaan sama sekali. Hanya satu kotak akan membuat Anda terlindungi. Setelah itu Anda harus melakukan load balancing seperti yang Anda sebutkan yang hampir sama untuk setiap arsitektur (seperti yang Anda katakan, Anda dapat memulai beberapa proses node terlebih dahulu. Tetapi ketika Anda menjadi sangat besar Anda membutuhkan lebih banyak kotak).
Contoh load balancing 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://myproject; } } }
Redis
Tidak perlu repot untuk node.js. Anda harus menggunakan redis sebagai datastore Anda karena ini sangat cepat :). Bahkan ada pustaka ac untuk node saat Anda menggunakan node_redis .
Hiredis adalah apa yang memberi Anda kinerja kickass karena ia mengkompilasi ke kode C di dalam node. Berikut adalah beberapa tolok ukur dari redis saat digunakan dengan 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
Ketika Anda melihat angka-angka itu maka 20 / s TIDAK ADA :).
Autentikasi
Memperbarui:
everyauth
openid
Saya banyak menceritakan hal ini tetapi demi cinta Tuhan tolong jangan mencoba menerapkan sistem otentikasi Anda sendiri. Ini mungkin akan menjadi tidak aman (banyak yang bisa salah), banyak pekerjaan. Untuk otentikasi, Anda harus menggunakan facebook-connect, twitter single sign-in, dll menggunakan pustaka connect-auth yang sangat baik . Maka Anda dilindungi dengan aman karena mereka memiliki ahli yang menguji di sana sistem masuk untuk lubang dan juga tidak mengirimkan kata sandi melalui teks biasa tetapi terima kasih tuhan menggunakan https. Saya juga telah menjawab topik untuk pengguna yang ingin menggunakan facebook-connect .
validasi data masukan
Untuk memvalidasi input, Anda dapat menggunakan node-validator .
var check = require('validator').check, sanitize = require('validator').sanitize //Validate check('[email protected]').len(6, 64).isEmail(); //Methods are chainable check('abc').isInt(); //Throws 'Invalid integer' check('abc', 'Please enter a number').isInt(); //Throws 'Please enter a number' check('abcdefghijklmnopzrtsuvqxyz').is(/^[a-z]+$/); //Sanitize / Filter var int = sanitize('0123').toInt(); //123 var bool = sanitize('true').toBoolean(); //true var str = sanitize(' \s\t\r hello \n').trim(); //'hello' var str = sanitize('aaaaaaaaab').ltrim('a'); //'b' var str = sanitize(large_input_str).xss(); var str = sanitize('<a>').entityDecode(); //'<a>'
Ada juga pustaka formulir ini untuk membantu Anda membuat formulir.
sumber