回覆列表
  • 1 # 使用者9375263164546

    簡單的是pre-fork和reuse_port,pre-fork是以前的主流方式,首先在第一個程序當中建立監聽的socket,然後fork出子程序,子程序會繼承主程序的檔案號,於是監聽的socket可以在所有的fork出的子程序當中進行epoll和accept,如同讀取socket一樣,每個傳入的連線只能被一個子程序accept,於是誰搶到這個連線誰就處理,一般來說壓力最小的程序最容易搶佔到連線(最可能處於epoll的等待狀態下),大致上可以實現負載的均衡。新的reuse_port選項就更簡單了,增加這個選項可以讓多個程序監聽同一個埠,核心自動將傳入連線負載均衡到各個socket上,由各個程序處理,只要加一個選項然後啟動多個例項,一秒讓單程序服務變多程序。這裡改用多執行緒也是差不多的原理。另一種worker模式是由一個程序或者執行緒專門負責accept,一旦accept之後不做後續處理,立即將這個socket傳遞給worker執行緒或者程序,如果是程序的話,可以透過unix socket的sendmsg機制。也是一樣多執行緒和多程序都可以使用。用這種方式比較容易控制分發方式之類的,可以實現一些比如相同源IP地址hash到同一個後端程序之類的貌似有點意思其實沒大用的功能。一般來說對於大部分伺服器來說,監聽的埠是非常少的,web服務很可能只有一個80埠,你是不能透過讓不同程序監聽不同埠來實現負載平衡的,根本就平衡不了。

  • 中秋節和大豐收的關聯?
  • 用什麼詞語去形容美食好呢?就是形容它很美味,外表很光鮮,該怎麼形容,多發點詞語給我,四字詞語?