Penyelesaian kluster Redis dan Node.js: Bagaimana untuk mencapai ketersediaan tinggi
Pengenalan:
Dengan perkembangan pesat Internet, pemprosesan data telah menjadi semakin besar dan kompleks. Untuk memastikan ketersediaan tinggi dan kebolehskalaan sistem, kami perlu menggunakan seni bina kluster teragih untuk mengendalikan keperluan menyimpan dan memproses sejumlah besar data. Redis, sebagai pangkalan data dalam memori berprestasi tinggi, digabungkan dengan Node.js sebagai bahasa pengaturcaraan bahagian belakang, boleh membina penyelesaian kluster teragih yang sangat tersedia.
Artikel ini akan memperkenalkan cara menggunakan Redis dan Node.js untuk melaksanakan penyelesaian kluster ketersediaan tinggi dan memberikan contoh kod yang berkaitan.
1. Penyelesaian kluster Redis
Redis menyediakan penyelesaian kluster terbina dalam yang boleh menggunakan mod Kluster Redis untuk mencapai perpecahan data dan ketersediaan tinggi.
cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 cluster-announce-ip <redis-server-ip> cluster-announce-port <redis-server-port>
Antaranya, <redis-server-ip>
dan <redis-server-ip>
和<redis-server-port>
分别是Redis服务器的IP地址和端口号。
redis-trib.rb
工具来创建Redis集群。命令如下所示:redis-trib.rb create --replicas 1 <redis-node1-ip>:<redis-node1-port> <redis-node2-ip>:<redis-node2-port> <redis-node3-ip>:<redis-node3-port> ...
其中,--replicas 1
表示每个主节点有一个从节点。<redis-node1-ip>:<redis-node1-port>
等表示每个Redis节点的IP地址和端口号。
ioredis
Selepas memulakan pelayan Redis, gunakan alat redis-trib.rb
untuk mencipta gugusan Redis. Perintahnya adalah seperti berikut:
const Redis = require('ioredis'); const redis = new Redis.Cluster([ { host: '<redis-node1-ip>', port: <redis-node1-port> }, { host: '<redis-node2-ip>', port: <redis-node2-port> }, { host: '<redis-node3-ip>', port: <redis-node3-port> }, ]); // 使用Redis集群进行操作 // ...
--replicas 1
bermaksud setiap nod induk mempunyai satu nod hamba. <redis-node1-ip>:<redis-node1-port>
dsb. mewakili alamat IP dan nombor port setiap nod Redis. ioredis
untuk melaksanakan operasi sambungan gugusan Redis. Contoh kod adalah seperti berikut: const cluster = require('cluster'); const os = require('os'); if (cluster.isMaster) { // 获取系统的CPU核心数 const numCPUs = os.cpus().length; // 创建工作进程 for (let i = 0; i < numCPUs; i++) { cluster.fork(); } // 监听工作进程的消息 cluster.on('message', (worker, message) => { // 处理消息 // ... }); // 监听工作进程的退出事件 cluster.on('exit', (worker, code, signal) => { // 重启工作进程 cluster.fork(); }); } else { // 工作进程的处理逻辑 // ... }
Buat proses utama
Proses utama bertanggungjawab mengurus dan mengedarkan permintaan kepada proses pekerja, dan mendengar mesej daripada proses pekerja. Contoh kod adalah seperti berikut:// 工作进程的处理逻辑 process.on('message', (message) => { // 处理消息 // ... // 发送消息给主进程 process.send(message); }); // 处理请求 function handleRequest(request) { // 处理逻辑 // ... // 返回结果 return result; }
// 创建Redis集群的连接 const redis = new Redis.Cluster([ { host: '<redis-node1-ip>', port: <redis-node1-port> }, { host: '<redis-node2-ip>', port: <redis-node2-port> }, { host: '<redis-node3-ip>', port: <redis-node3-port> }, ]); // Redis发布消息 redis.publish('channel', 'message'); // Redis订阅消息 redis.subscribe('channel', (err, count) => { // 处理订阅消息 }); // 接收Redis订阅的消息 redis.on('message', (channel, message) => { // 处理订阅消息 });
Menggunakan Redis untuk penyimpanan data dan caching
Dalam proses pekerja Node.js, kami boleh menggunakan Redis sebagai storan data dan penyelesaian caching. Melalui mod kluster Redis, data boleh diedarkan dan disimpan pada berbilang nod untuk meningkatkan prestasi pemprosesan data dan kebolehpercayaan.
Gunakan fungsi terbitkan dan langgan Redis
Atas ialah kandungan terperinci Penyelesaian kluster Redis dan Node.js: cara mencapai ketersediaan tinggi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!