Node.js 中的 cluster 模塊
Node.js 中的 cluster 模塊是用來(lái)實(shí)現(xiàn)多進(jìn)程并行處理請(qǐng)求的,它的原理是將主進(jìn)程作為負(fù)載均衡器,將請(qǐng)求分發(fā)給子進(jìn)程進(jìn)行處理。cluster 模塊通過(guò) fork() 方法在主進(jìn)程中創(chuàng)建多個(gè)子進(jìn)程,這些子進(jìn)程會(huì)共享父進(jìn)程的端口,從而可以監(jiān)聽(tīng)同一個(gè)端口的請(qǐng)求。當(dāng)一個(gè)請(qǐng)求到來(lái)時(shí),主進(jìn)程會(huì)將其分發(fā)給子進(jìn)程處理,實(shí)現(xiàn)了并行處理請(qǐng)求的效果。
在 cluster 模塊中,主進(jìn)程作為一個(gè)管理者,主要負(fù)責(zé)創(chuàng)建子進(jìn)程、維護(hù)進(jìn)程間的通信、監(jiān)控子進(jìn)程的狀態(tài)等任務(wù)。而子進(jìn)程則負(fù)責(zé)實(shí)際處理請(qǐng)求。
cluster 模塊提供了四種負(fù)載均衡策略:輪詢(round-robin)、最小連接數(shù)(least-connection)、IP哈希(ip-hash)和隨機(jī)(random)。默認(rèn)的負(fù)載均衡策略是輪詢,即將請(qǐng)求依次分發(fā)給每個(gè)子進(jìn)程。可以通過(guò)設(shè)置 cluster.schedulingPolicy 屬性來(lái)指定負(fù)載均衡策略。
另外,cluster 模塊還提供了一些事件,例如 fork、online、listening、disconnect、exit 等,可以用來(lái)監(jiān)聽(tīng)進(jìn)程的生命周期和狀態(tài)變化,從而更好地管理和監(jiān)控子進(jìn)程。