集群和負(fù)載均衡的區(qū)別 nginx

集群和負(fù)載均衡的區(qū)別 nginx

Nginx是一個(gè)免費(fèi)的,開(kāi)源的,高性能的服務(wù)器和反向**服務(wù)器軟件,同時(shí)它也可以為IMAP和POP3服務(wù)器**,以其高性能,穩(wěn)定性,豐富的功能,結(jié)構(gòu)簡(jiǎn)單,低資源消耗的特性換來(lái)廣大運(yùn)維者所喜愛(ài)。Nginx與傳統(tǒng)的服務(wù)器不同,不依賴(lài)線(xiàn)程來(lái)處理請(qǐng)求。

相反,它使用一個(gè)更可擴(kuò)展事件驅(qū)動(dòng)架構(gòu)(異步)。

這種結(jié)構(gòu)資源消耗較小,但更重要的是,可以承受較大的請(qǐng)求負(fù)荷。即使你不希望處理成千上萬(wàn)的請(qǐng)求,你仍然可以受益于Nginx的高性能和小的內(nèi)存占用,以及其豐富的功能。 Nginx的反向**:反向**指以**服務(wù)器來(lái)接受Internet上的連接請(qǐng)求,然后將請(qǐng)求轉(zhuǎn)發(fā)給內(nèi)部**上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給Internet上請(qǐng)求連接到客戶(hù)端,此時(shí)**服務(wù)器對(duì)外就表現(xiàn)為一個(gè)服務(wù)器,而此種工作模式類(lèi)似于LVS-NET模型。反向**也可以理解為web服務(wù)器加速,它是一種通過(guò)在繁忙的web服務(wù)器和外部**之間增加的 一個(gè)高速web緩沖服務(wù)器,用來(lái)降低實(shí)際的web服務(wù)器的負(fù)載的一種技術(shù)。

反向**是針對(duì)web服務(wù)器提高加速功能,所有外部**要訪(fǎng)問(wèn)服務(wù)器時(shí)的所有請(qǐng)求都要通過(guò)它,這樣反向**服務(wù)器負(fù)責(zé)接收客戶(hù)端的請(qǐng)求,然后到源服務(wù)器上獲取內(nèi)容,把內(nèi)容返回給用戶(hù),并把內(nèi)容保存在本地,以便日后再收到同樣的信息請(qǐng)求時(shí),它會(huì)將本地緩存里的內(nèi)容直接發(fā)給用戶(hù),已減少后端web服務(wù)器的壓力,提高響應(yīng)速度。因此Nginx還具有緩存功能。 反向**的工作流程:1)用戶(hù)通過(guò)域名發(fā)出訪(fǎng)問(wèn)請(qǐng)求,該域名被解析為反向**服務(wù)器的IP地址;2)反向**服務(wù)器接收用戶(hù)的請(qǐng)求;3)反向**服務(wù)器在本地緩存查找是否存在當(dāng)前用戶(hù)所請(qǐng)求的內(nèi)容,找到則直接把內(nèi)容返回給用戶(hù);4)如果本地沒(méi)有用戶(hù)請(qǐng)求的內(nèi)容,反向**服務(wù)器會(huì)以自己的身份去后端服務(wù)器請(qǐng)求同樣的信息內(nèi)容,并把信息內(nèi)容發(fā)給用戶(hù),如果信息內(nèi)容是可以被緩存的,則會(huì)將該內(nèi)容緩存在**服務(wù)器的本地緩存中。

反向**的好處:1)解決了網(wǎng)站服務(wù)器對(duì)外可見(jiàn)的問(wèn)題,提高了網(wǎng)站服務(wù)器的安全性;2)節(jié)約了有限的IP地址資源,后端服務(wù)器均可使用私有IP地址與**服務(wù)器進(jìn)行通信;3)加速了網(wǎng)站的訪(fǎng)問(wèn)速度,減輕了真是web服務(wù)器的負(fù)荷。(一)、調(diào)度算法Nginx的upstream指令用于指定proxy_pass和fastcgi_pass所使用的后端服務(wù)器,即nginx的反向**功能,因此可以將兩者結(jié)合起來(lái)使用以達(dá)到負(fù)載均衡的目的,而Nginx也支持多種調(diào)度算法:1、輪詢(xún)(默認(rèn))每個(gè)請(qǐng)求按時(shí)間順序逐一分配到不同的后端服務(wù)器,如果后端服務(wù)器down掉,則會(huì)跳過(guò)該服務(wù)器分配至下一個(gè)監(jiān)控的服務(wù)器。并且它無(wú)需記錄當(dāng)前所有連接的狀態(tài),所以它是一種無(wú)狀態(tài)調(diào)度。

2、weight指定在輪詢(xún)的基礎(chǔ)上加上權(quán)重,weight和訪(fǎng)問(wèn)比率成正比,即用于表明后端服務(wù)器的性能好壞,若后端服務(wù)器性能較好則可將大部分請(qǐng)求分配給它,已實(shí)現(xiàn)其力所能及。例如:我后端服務(wù)器172.23.136.148配置:E5520*2 CPU,8G內(nèi)存后端服務(wù)器172.23.136.148配置:Xeon(TM)2.80GHz * 2,4G內(nèi)存我希望在有30個(gè)請(qǐng)求到達(dá)前端時(shí),其中20個(gè)請(qǐng)求交給172.23.136.148處理,剩余10個(gè)請(qǐng)求交給172.23.136.149處理,就可做如下配置upstream web_poll {server 172.23.136.148 weight=10;server 172.23.136.149 weight=5;}3、ip_hash 每個(gè)請(qǐng)求按訪(fǎng)問(wèn)ip的hash結(jié)果分配,當(dāng)新的請(qǐng)求到達(dá)時(shí),先將其客戶(hù)端IP通過(guò)哈希算法進(jìn)行哈希出一個(gè)值,在隨后的請(qǐng)求客戶(hù)端IP的哈希值只要相同,就會(huì)被分配至同一個(gè)后端服務(wù)器,該調(diào)度算法可以解決session的問(wèn)題,但有時(shí)會(huì)導(dǎo)致分配不均即無(wú)法保證負(fù)載均衡。例如:upstream web_pool {ip_hash;server 172.23.136.148:80;server 172.23.136.149:80;}4、fair(第三方)按后端服務(wù)器的響應(yīng)時(shí)間來(lái)分配請(qǐng)求,響應(yīng)時(shí)間短的優(yōu)先分配。

upstream web_pool {server 172.23.136.148;server 172.23.136.149;fair;}5、url_hash(第三方)按訪(fǎng)問(wèn)url的hash結(jié)果來(lái)分配請(qǐng)求,使每個(gè)url定向到同一個(gè)后端服務(wù)器,后端服務(wù)器為緩存時(shí)比較有效。例:在upstream中加入hash語(yǔ)句,server語(yǔ)句中不能寫(xiě)入weight等其他的參數(shù),hash_method是使用的hash算法upstream web_pool {server squid1:3128;server squid2:3128;hash $request_uri;hash_method crc32;} 每個(gè)設(shè)備的狀態(tài)設(shè)置為:1.down 表示當(dāng)前的server不參與負(fù)載,用于ip_hash中2.weight 默認(rèn)為1.weight越大,負(fù)載的權(quán)重就越大。3.max_fails 允許請(qǐng)求失敗的次數(shù)默認(rèn)為1.設(shè)為0則表示關(guān)閉該項(xiàng)功能,當(dāng)超過(guò)**次數(shù)時(shí),返回proxy_next_upstream 模塊定義的錯(cuò)誤4.fail_timeout 在max_fails定義的失敗次數(shù)后,暫停的時(shí)間。5.backup 可以將其理解為備機(jī),其它所有的非backup機(jī)器down或者忙的時(shí)候,才會(huì)將請(qǐng)求分配給backup機(jī)器。

所以這臺(tái)機(jī)器壓力會(huì)最輕。 nginx支持同時(shí)設(shè)置多組的負(fù)載均衡,用來(lái)給不用的server來(lái)使用。 (二)、指令的使用1、upstream聲明一組可以被proxy_pass和fastcgi_pass引用的服務(wù)器;這些服務(wù)器可以使用不同的端口,并且也可以使用Unix Socket;也可以為服務(wù)器指定不同的權(quán)重。如:upstream web_pool { server coolinuz.9966.org weight=5; server 172.23.136.148:8080 max_fails=3 fail_timeout=30s; server unix:/tmp/backend3;}2、server語(yǔ)法:server name [parameters]其中的name可以是FQDN,主機(jī)地址,端口或unix套接字;如果FQDN解析的結(jié)果為多個(gè)地址,則每個(gè)地址都會(huì)被用到。

3、proxy_pass語(yǔ)法:proxy_pass URL;該指令用于指定**服務(wù)器的地址和URL將被映射為的URL或地址和端口。即用來(lái)指定后端服務(wù)器的地址或URL[端口]。4、proxy_set_header語(yǔ)法:proxy_set_header header value;該指令允許重新定義和添加一些將被轉(zhuǎn)移到被**服務(wù)器的請(qǐng)求頭部信息。例如:proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;注意:$proxy_add_x_forwarded_for包含客戶(hù)端請(qǐng)求頭中的\”X-Forwarded-For\”,與$remote_addr用逗號(hào)分開(kāi),如果沒(méi)有\(zhòng)”X-Forwarded-For\” 請(qǐng)求頭,則$proxy_add_x_forwarded_for等于$remote_addr 順便補(bǔ)上Nginx的內(nèi)置變量:$args, 請(qǐng)求中的參數(shù);$is_args, 如果已經(jīng)設(shè)置$args,則該變量的值為“?”,否則為“”。

$content_length, HTTP請(qǐng)求信息頭里的\”Content-Length\”;$content_type, 請(qǐng)求信息頭里的\”Content-Type\”;$document_root, 針對(duì)當(dāng)前請(qǐng)求所屬的root指令設(shè)置的根目錄路徑;$document_uri, 與$uri相同;$host, 請(qǐng)求信息中的\”Host\”,如果請(qǐng)求中沒(méi)有Host行,則等于設(shè)置的服務(wù)器名;$limit_rate, 對(duì)連接速率的限制;$request_method, 請(qǐng)求的方法,比如\”GET\”、\”P(pán)OST\”等;$remote_addr, 客戶(hù)端地址;$remote_port, 客戶(hù)端端口號(hào);$remote_user, 客戶(hù)端用戶(hù)名,認(rèn)證用;$request_filename, 當(dāng)前請(qǐng)求的文件路徑名$request_body_file, 客戶(hù)端請(qǐng)求主體的臨時(shí)文件名。$request_uri, 請(qǐng)求的URI,帶參數(shù);$query_string, 與$args相同;$scheme, 所用的協(xié)議,比如http或者是https,比如rewrite ^(.+)$ $scheme://example.com$1 redirect;$server_protocol, 請(qǐng)求的協(xié)議版本,\”HTTP/1.0\”或\”HTTP/1.1\”;$server_addr, 服務(wù)器地址,如果沒(méi)有用listen指明服務(wù)器地址,使用這個(gè)變量將發(fā)起一次系統(tǒng)調(diào)用以取得地址(造成資源浪費(fèi));$server_name, 請(qǐng)求到達(dá)的服務(wù)器名;$server_port, 請(qǐng)求到達(dá)的服務(wù)器端口號(hào);$uri, 請(qǐng)求的URI,可能和最初的值有不同,比如經(jīng)過(guò)重定向之類(lèi)的。5、proxy_read_timeout語(yǔ)法:proxy_read_timeout time;這個(gè)指令設(shè)置Nginx與后端服務(wù)器建立連接后。

等待后端服務(wù)器的響應(yīng)時(shí)間6、proxy_send_timeout語(yǔ)法:roxy_send_timeout time;該指令指定請(qǐng)求轉(zhuǎn)移到后端服務(wù)器的超時(shí)時(shí)間。整個(gè)傳輸?shù)囊髸r(shí)間不超過(guò)超時(shí)時(shí)間,但只有兩次寫(xiě)操作之間。如果在此時(shí)間之后的后端服務(wù)器將不采取新的數(shù)據(jù),然后nginx將關(guān)閉連接。

7、proxy_connect_timeout語(yǔ)法:proxy_connect_timeout time;該指令用來(lái)設(shè)置分配到后端服務(wù)器的連接超時(shí)時(shí)間。8、proxy_buffers語(yǔ)法: proxy_buffers the_number is_size;該指令設(shè)置緩沖區(qū)的數(shù)目和大小,缺省情況下,一個(gè)緩沖區(qū)的大小和頁(yè)面大小相同。9、proxy_buffer_size語(yǔ)法:proxy_buffer_size buffer_size;**緩沖區(qū),該指令用于保存用用戶(hù)的頭部信息。10、proxy_busy_buffers_size語(yǔ)法:proxy_busy_buffers_size size;用于當(dāng)系統(tǒng)負(fù)載較大,緩沖區(qū)不夠用時(shí),可以申請(qǐng)更大的proxy_buffers11、proxy_temp_file_write_size語(yǔ)法:proxy_temp_file_write_size size;用于指定緩存臨時(shí)文件的大小(三)、功能完善安裝配置第三方模塊,實(shí)現(xiàn)upstream中對(duì)后端web server的健康狀態(tài)檢測(cè):模塊****:https://github.com/cep21/healthcheck_nginx_upstreams;模塊名稱(chēng):ngx_http_healthcheck_module安裝配置方法:1、首先解壓healcheck模塊到某路徑下,這里假設(shè)為/tmp/healthcheck_nginx_upstreams#tar -xvf cep21-healthcheck_nginx_upstreams-16d6ae7.tar.gz -C /tmp/healthcheck_nginx_upstreams2、對(duì)nginx打補(bǔ)丁首先解壓nginx,并進(jìn)入nginx源碼目錄:# tar xf nginx-1.3.4.tar.gz# cd nginx-1.0.11# patch -p1 < /tmp/healthcheck_nginx_upstreams/nginx.patch而后編譯nginx,在執(zhí)行configure時(shí)添加類(lèi)似下面的選項(xiàng):–add-module=/tmp/healthcheck_nginx_upstreams所以,這里就使用如下命令:# ./configure \\–prefix=/usr/local/nginx \\–**in-path=/usr/**in/nginx \\–conf-path=/etc/nginx/nginx.conf \\–lock-path=/var/lock/nginx.lock \\–user=nginx \\–group=nginx \\–with-http_ssl_module \\–with-http_flv_module \\–with-http_stub_status_module \\–with-http_gzip_static_module \\–http-proxy-temp-path=/var/tmp/nginx/proxy/ \\–http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \\–with-pcre \\–add-module=/tmp/healthcheck_nginx_upstreams# make && make install ngx_http_healthcheck_module模塊的使用方法:1、此模塊支持的指令有:healthcheck_enabled##啟用此模塊healthcheck_delay##對(duì)同一臺(tái)后端服務(wù)器兩次檢測(cè)之間的時(shí)間間隔,單位毫秒,默認(rèn)為1000;healthcheck_timeout##進(jìn)行一次健康檢測(cè)的超時(shí)時(shí)間,單位為毫秒,默認(rèn)值2000;healthcheck_failcount##對(duì)一臺(tái)后端服務(wù)器檢測(cè)成功或失敗多少次之后方才確定其為成功或失敗,并實(shí)現(xiàn)啟用或禁用此服務(wù)器;healthcheck_send##為了檢測(cè)后端服務(wù)器的健康狀態(tài)所發(fā)送的檢測(cè)請(qǐng)求;如:healthcheck_send \”GET /health HTTP/1.0\” \’Host: coolinuz.9966.org\’;healthcheck_expected##期望從后端服務(wù)器收到的響應(yīng)內(nèi)容;如果未設(shè)置,則表示從后端服務(wù)器收到200狀態(tài)碼即為正確;healthcheck_buffer##健康狀態(tài)檢查所使用的buffer空間大小; healthcheck_status通過(guò)類(lèi)似stub_status的方式輸出檢測(cè)信息,使用方法如下:location /stat { healthcheck_status;}(四)、配置與實(shí)現(xiàn)配置代碼如下:http { upstream web_pool { server 172.23.136.148:80 weight=10; server 172.23.136.149:80 weight=5; healthcheck_enabled; healthcheck_delay 1000; healthcheck_timeout 1000; healthcheck_failcount 2; healthcheck_send \”GET /.health HTTP/1.0\”; } server { listen 80; location / { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://web_pool; proxy_connect_timeout 3; } location /stat { healthcheck_status; } }} 在這里設(shè)置“proxy_set_header”參數(shù),是因?yàn)镹ginx在做反向**的時(shí)候,要代替客戶(hù)端去訪(fǎng)問(wèn)服務(wù)器,所以,當(dāng)請(qǐng)求包經(jīng)過(guò)反向**后,在**服務(wù)器這里這個(gè)IP數(shù)據(jù)包的IP包頭做了修改,最終后端web服務(wù)器得到的數(shù)據(jù)包的頭部的源IP地址是**服務(wù)器的IP地址,這樣一來(lái),后端服務(wù)器的程序給予IP的統(tǒng)計(jì)功能就沒(méi)有任何意義,或者后端web服務(wù)器上有多個(gè)基于域名的虛擬主機(jī)時(shí),就要通過(guò)添加Header頭信息Host,用于指定請(qǐng)求的域名,這樣后端web服務(wù)器才能識(shí)別該反向**訪(fǎng)問(wèn)請(qǐng)求由哪個(gè)虛擬主機(jī)來(lái)處理。

(五)、小結(jié)通過(guò)以上我們可以看出Nginx的配置其實(shí)是比較其他的web服務(wù)器軟件是比較簡(jiǎn)單的,但是其實(shí)現(xiàn)的功能確實(shí)相當(dāng)強(qiáng)大豐富的。通過(guò)Nginx的反向**已經(jīng)支持靈活的正則表達(dá)式匹配,可以實(shí)現(xiàn)網(wǎng)站的動(dòng)、靜分離,讓動(dòng)態(tài)的php等程序網(wǎng)頁(yè)去訪(fǎng)問(wèn)php web服務(wù)器,讓緩存頁(yè)、圖片、javascript、css、flash去訪(fǎng)問(wèn)Squid等緩存服務(wù)器或文件服務(wù)器。加之Nginx對(duì)靜態(tài)內(nèi)容的高性能,高并發(fā)量,Nginx作為前端**負(fù)載均衡成為越來(lái)越多架構(gòu)師的首先方案。

服務(wù)器集群和服務(wù)器負(fù)載均衡有什么區(qū)別?

服務(wù)器集群:服務(wù)器集群就是指將很多服務(wù)器集中起來(lái)一起進(jìn)行同一種服務(wù),在客戶(hù)端看來(lái)就像是只有一個(gè)服務(wù)器。集群可以利用多個(gè)計(jì)算機(jī)進(jìn)行并行計(jì)算從而獲得很高的計(jì)算速度,也可以用多個(gè)計(jì)算機(jī)做備份,從而使得任何一個(gè)機(jī)器壞了整個(gè)系統(tǒng)還是能正常運(yùn)行。

服務(wù)器負(fù)載均衡:負(fù)載均衡(LoadBalancing)建立在現(xiàn)有**結(jié)構(gòu)之上,它提供了一種廉價(jià)有效透明的方法擴(kuò)展**設(shè)備和服務(wù)器的帶寬、增加吞吐量、加強(qiáng)**數(shù)據(jù)處理能力、提高**的靈活性和可用性。

分布式服務(wù)器:所謂分布式資源共享服務(wù)器就是指數(shù)據(jù)和程序可以不位于一個(gè)服務(wù)器上,而是分散到多個(gè)服務(wù)器,以**上分散分布的地理信息數(shù)據(jù)及受其影響的數(shù)據(jù)庫(kù)操作為研究對(duì)象的一種理論計(jì)算模型服務(wù)器形式。分布式有利于任務(wù)在整個(gè)計(jì)算機(jī)系統(tǒng)上進(jìn)行分配與優(yōu)化,克服了傳統(tǒng)集中式系統(tǒng)會(huì)導(dǎo)致中心主機(jī)資源緊張與響應(yīng)瓶頸的缺陷,解決了**GIS中存在的數(shù)據(jù)異構(gòu)、數(shù)據(jù)共享、運(yùn)算復(fù)雜等問(wèn)題,是地理信息系統(tǒng)技術(shù)的一大進(jìn)步。這個(gè)三種架構(gòu)都是常見(jiàn)的服務(wù)器架構(gòu),集群的主要是IT公司在做,可以保障重要數(shù)據(jù)安全;負(fù)載均衡主要是為了分擔(dān)訪(fǎng)問(wèn)量,避免臨時(shí)的**堵塞,主要用于電子商務(wù)類(lèi)型的網(wǎng)站;分布式服務(wù)器主要是解決跨區(qū)域,多個(gè)單個(gè)節(jié)點(diǎn)達(dá)到高速訪(fǎng)問(wèn)的目前,一般是類(lèi)似CDN的用途的話(huà),會(huì)采用分布式服務(wù)器。

集群、負(fù)載均衡與分布式有什么區(qū)別?

集群、負(fù)載均衡與分布式的區(qū)別:
1、Linux集群主要分成三大類(lèi)( 高可用集群, 負(fù)載均衡集群,科學(xué)計(jì)算集群)(下面只介紹負(fù)載均衡集群)
負(fù)載均衡集群(Load Balance Cluster)
負(fù)載均衡系統(tǒng)百科:集群中所有的節(jié)點(diǎn)都處于活動(dòng)狀態(tài),它們分?jǐn)傁到y(tǒng)的工作負(fù)載。一般Web服務(wù)器集群、數(shù)據(jù)庫(kù)集群和應(yīng)用服務(wù)器集群都屬于這種類(lèi)型。

負(fù)載均衡集群一般用于相應(yīng)**請(qǐng)求的網(wǎng)頁(yè)服務(wù)器,數(shù)據(jù)庫(kù)服務(wù)器。

這種集群可以在接到請(qǐng)求時(shí),檢查接受請(qǐng)求較少,不繁忙的服務(wù)器,并把請(qǐng)求轉(zhuǎn)到這些服務(wù)器上。從檢查其他服務(wù)器狀態(tài)這一點(diǎn)上看,負(fù)載均衡和容錯(cuò)集群很接近,不同之處是數(shù)量上更多。
2、負(fù)載均衡系統(tǒng): 負(fù)載均衡又有DNS負(fù)載均衡(比較常用)、IP負(fù)載均衡、反向**負(fù)載均衡等,也就是在集群中有服務(wù)器A、B、C,它們都是互不影響,互不相干的,任何一臺(tái)的機(jī)器宕了,都不會(huì)影響其他機(jī)器的運(yùn)行,當(dāng)用戶(hù)來(lái)一個(gè)請(qǐng)求,有負(fù)載均衡器的算法決定由哪臺(tái)機(jī)器來(lái)處理,假如你的算法是采用round算法,有用戶(hù)a、b、c,那么分別由服務(wù)器A、B、C來(lái)處理;
3、分布式是指將不同的業(yè)務(wù)分布在不同的地方。
而集群指的是將幾臺(tái)服務(wù)器集中在一起,實(shí)現(xiàn)同一業(yè)務(wù)。

?分布式中的每一個(gè)節(jié)點(diǎn),都可以做集群。?而集群并不一定就是分布式的。
舉例:就比如新浪網(wǎng),訪(fǎng)問(wèn)的人多了,他可以做一個(gè)群集,前面放一個(gè)響應(yīng)服務(wù)器,后面幾臺(tái)服務(wù)器完成同一業(yè)務(wù),如果有業(yè)務(wù)訪(fǎng)問(wèn)的時(shí)候,響應(yīng)服務(wù)器看哪臺(tái)服務(wù)器的負(fù)載不是很重,就將給哪一臺(tái)去完成。

而分布式,從窄意上理解,也跟集群差不多, 但是它的組織比較松散,不像集群,有一個(gè)組織性,一臺(tái)服務(wù)器垮了,其它的服務(wù)器可以頂上來(lái)。
分布式的每一個(gè)節(jié)點(diǎn),都完成不同的業(yè)務(wù),一個(gè)節(jié)點(diǎn)垮了,哪這個(gè)業(yè)務(wù)就不可訪(fǎng)問(wèn)了。

集群與分布式以及負(fù)載均衡之間的區(qū)別和聯(lián)系

首先,我們來(lái)聊聊什么是集群。 集群是指將我們的服務(wù)器由傳統(tǒng)的單臺(tái)服務(wù)器,部署為多臺(tái)。

一方面可以使我們的服務(wù)器并行運(yùn)行從而提高服務(wù)器的計(jì)算速度。

另一方面可以對(duì)我們的主服務(wù)器提供備份操作,提高系統(tǒng)的容錯(cuò)性。當(dāng)主服務(wù)出現(xiàn)宕機(jī)或者請(qǐng)求流量過(guò)高的時(shí)候,可以切換到其他服務(wù)器進(jìn)行響應(yīng),保障客戶(hù)端的穩(wěn)定運(yùn)行。 然后,我們來(lái)聊聊什么是分布式。 分布式是指將一個(gè)完整的業(yè)務(wù)線(xiàn)拆分成多個(gè)獨(dú)立的操作單元,各個(gè)操作單元之間可以獨(dú)立運(yùn)行,提供系統(tǒng)的高可用以及高拓展性。

比如,一個(gè)門(mén)戶(hù)網(wǎng)站有登陸,圖片,視頻。每一個(gè)都可以拆分成獨(dú)立的操作單元,并且每個(gè)操作單元可以部署在多臺(tái)服務(wù)器上,也就是形成我們的集群。

綜上所述,其實(shí)集群是多臺(tái)服務(wù)器做同樣的事情,而分布式則是做不同的事情。下面有一個(gè)通俗易懂的例子。一個(gè)飯館里面原來(lái)只有一個(gè)廚子,后來(lái)生意越來(lái)越好,一個(gè)人忙不過(guò)來(lái)了,于是又請(qǐng)了一個(gè)廚子,這兩個(gè)廚子之間的關(guān)系就是集群。

在后來(lái),為了把菜品做的很精致和細(xì)化。又請(qǐng)了一個(gè)專(zhuān)門(mén)切菜和配菜的配菜師,廚子和配菜師的關(guān)系就屬于分布式。**,又請(qǐng)了一個(gè)配菜師,這兩個(gè)配菜師也是屬于集群的關(guān)系。

總而言之,分布式和集群主要作用是就是為了解決系統(tǒng)的高可用以及高并發(fā)。 **,在聊聊負(fù)載均衡。 負(fù)載均衡是一種方法,常用的是nginx反向**,其實(shí)負(fù)載均衡是可以理解為搭建集群的一部分,屬于集群服務(wù)器的前置系統(tǒng)。比如,一個(gè)門(mén)戶(hù)網(wǎng)站,請(qǐng)求流量過(guò)高的時(shí)候,為了保障服務(wù)器的正常穩(wěn)定運(yùn)行,由nginx來(lái)均攤請(qǐng)求到后臺(tái)服務(wù)器。

盡量保障每臺(tái)服務(wù)器承受同等的負(fù)載。

如何通俗理解——>集群、負(fù)載均衡、分布式

在“高并發(fā),海量數(shù)據(jù),分布式,NoSql,云計(jì)算……”概念滿(mǎn)天飛的年代,相信不少朋友都聽(tīng)說(shuō)過(guò)甚至常與人提起“集群,負(fù)載均衡”等,但不是所有人都有機(jī)會(huì)真正接觸到這些技術(shù),也不是所有人都真正理解了這些“聽(tīng)起來(lái)很牛的”技術(shù)名詞。下面簡(jiǎn)單解釋一下吧。

(從一個(gè)網(wǎng)站上面看到的,例子很有趣,分享給大家) 集群(Cluster) 所謂集群是指一組獨(dú)立的計(jì)算機(jī)系統(tǒng)構(gòu)成的一個(gè)松耦合的多處理器系統(tǒng),它們之間通過(guò)**實(shí)現(xiàn)進(jìn)程間的通信。

應(yīng)用程序可以通過(guò)**共享內(nèi)存進(jìn)行消息傳送,實(shí)現(xiàn)分布式計(jì)算機(jī)。通俗一點(diǎn)來(lái)說(shuō),就是讓若干臺(tái)計(jì)算機(jī)聯(lián)合起來(lái)工作(服務(wù)),可以是并行的,也可以是做備份。 負(fù)載均衡(Load Balance) **的負(fù)載均衡是一種動(dòng)態(tài)均衡技術(shù),常見(jiàn)的實(shí)現(xiàn)方式是通過(guò)一些工具實(shí)時(shí)地分析數(shù)據(jù)包,掌握**中的數(shù)據(jù)流量狀況,把任務(wù)合理均衡地分配出去。這種技術(shù)基于現(xiàn)有**結(jié)構(gòu),提供了一種擴(kuò)展服務(wù)器帶寬和增加服務(wù)器吞吐量的廉價(jià)有效的方法,加強(qiáng)了**數(shù)據(jù)處理能力,提高了**的靈活性和可用性。

日常生活中到處都能看到“負(fù)載均衡”,一個(gè)超市的收營(yíng)員高峰期只能服務(wù)10位顧客,當(dāng)做活動(dòng)時(shí)有20位顧客需要服務(wù)的話(huà)可能就會(huì)排長(zhǎng)隊(duì),這樣購(gòu)物體驗(yàn)將會(huì)很差(就像客戶(hù)抱怨系統(tǒng)/網(wǎng)站訪(fǎng)問(wèn)太慢)。最簡(jiǎn)單的辦法就是再招個(gè)營(yíng)業(yè)員,重新開(kāi)通一個(gè)出口。負(fù)載均衡的核心就是“分?jǐn)倝毫Α薄?/p>

大規(guī)模集群,通常具備以下一些特點(diǎn): (1)高可靠性(HA) 利用集群管理軟件,當(dāng)主服務(wù)器故障時(shí),備份服務(wù)器能夠自動(dòng)接管主服務(wù)器的工作,并及時(shí)切換過(guò)去,以實(shí)現(xiàn)對(duì)用戶(hù)的不間斷服務(wù)。 (2)高性能計(jì)算(HP) 即充分利用集群中的每一臺(tái)計(jì)算機(jī)的資源,實(shí)現(xiàn)復(fù)雜運(yùn)算的并行處理,通常用于科學(xué)計(jì)算領(lǐng)域,比如基因分析、化學(xué)分析等。 (3)負(fù)載平衡(LB) 即把負(fù)載壓力根據(jù)某種算法合理分配到集群中的每一臺(tái)計(jì)算機(jī)上,以減輕主服務(wù)器的壓力,降低對(duì)主服務(wù)器的硬件和軟件要求。

當(dāng)然,以上的這些特點(diǎn),在某些適應(yīng)場(chǎng)合下是需要同時(shí)具備的。常用的集群又分以下幾種: load balance cluster(負(fù)載均衡集群) 一共有四兄弟開(kāi)裁縫鋪,生意特別多,一個(gè)人做不下來(lái),老是延誤工期,于是四個(gè)兄弟商量:老大接訂單, 三個(gè)兄弟來(lái)干活。 客戶(hù)多起來(lái)之后,老大根據(jù)一定的原則(policy) 根據(jù)三兄弟手上的工作量來(lái)分派新任務(wù)。

High availability cluster(高可用集群) 兩兄弟開(kāi)早餐鋪,生意不大,但是每天早上7點(diǎn)到9點(diǎn)之間客戶(hù)很多并且不能中斷。為了保證2個(gè)小時(shí)內(nèi)這個(gè)早餐鋪能夠保證持續(xù)提供服務(wù),兩兄弟商量幾個(gè)方法: 方法一:平時(shí)老大做生意,老二這個(gè)時(shí)間段在家等候,一旦老大無(wú)法做生意了,老二就出來(lái)頂上,這個(gè)叫做 Active/Standby.(雙機(jī)熱備) 方法二:平時(shí)老大做生意,老二這個(gè)時(shí)候就在旁邊幫工,一旦老大無(wú)法做生意,老二就馬上頂上,這個(gè)叫做Active/Passive.(雙機(jī)雙工) 方法三:平時(shí)老大賣(mài)包子,老二也在旁邊賣(mài)豆?jié){,老大有問(wèn)題,老二就又賣(mài)包子,又賣(mài)豆?jié){,老二不行了,老大就又賣(mài)包子,又賣(mài)豆?jié){.這個(gè)叫做Active/Active (dual Active)(雙機(jī)互備) (包子= application package, 互相照應(yīng)叫做heartbeat, 頂替對(duì)方工作叫做 failover/takeover. 如果兩個(gè)兄弟突然都瞎了聾了,不知道現(xiàn)在對(duì)方到底是否正在干活,都認(rèn)為自己要頂對(duì)方的工作,這個(gè)叫做brain-split, 然后需要第三者,比如他們的老爹來(lái)解決問(wèn)題,這個(gè)叫做tier-breaker, 或者讓他們兩個(gè)的媳婦過(guò)來(lái)拉走其中一個(gè),這個(gè)叫做fency。) high computing clustering(高性能計(jì)算集群) 10個(gè)兄弟一起做手工家具生意,一個(gè)客戶(hù)來(lái)找他們的老爹要求做一套非常復(fù)雜的仿古家具,一個(gè)人做也可以做,不過(guò)要做很久很久,為了1個(gè)星期就交出這一套家具,10個(gè)兄弟決定一起做。 老爹把這套家具的不同部分分開(kāi)交給兒子們作,然后每個(gè)兒子都在做木制家具的加工,**拼在一起叫貨。

老爹是scheduler任務(wù)調(diào)度器,兒子們是compute node. 他們做的工作叫做作業(yè)。 (其實(shí),還有一種,分布式存儲(chǔ)相關(guān)的集群,應(yīng)用于超大規(guī)模網(wǎng)站,云計(jì)算平臺(tái)等等。涉及點(diǎn)存儲(chǔ)方面的,這里就不介紹了) 嚴(yán)格來(lái)講,這些已經(jīng)超過(guò)了一般開(kāi)發(fā)人員的知識(shí)范疇了,想真正理解和掌握這些并不太容易,有時(shí)候需要真正的實(shí)踐而不是閉門(mén)造車(chē)。從運(yùn)維人員和系統(tǒng)架構(gòu)師的角度來(lái)看,不僅需要具備豐富的操作系統(tǒng)配置和管理的經(jīng)驗(yàn),更要具備**協(xié)議、存儲(chǔ)等相關(guān)的知識(shí)(懂算法和底層的就更完美了)。

從開(kāi)發(fā)人員和軟件架構(gòu)師的角度來(lái)看,需要考慮的重點(diǎn)又不同了。當(dāng)然,遠(yuǎn)遠(yuǎn)不止我所提到的這些?,F(xiàn)在的Web應(yīng)用一般都比較依賴(lài)于基礎(chǔ)架構(gòu),而越來(lái)越脫離了”純軟件架構(gòu)“的本質(zhì)。集群不是**的,但有時(shí)候確實(shí)相當(dāng)有用。

由于項(xiàng)目和工作關(guān)系,我本人目前主要使用的是微軟的技術(shù)體系(當(dāng)然,目前大都是基于windows平臺(tái)的)。有機(jī)會(huì)的話(huà),我可以將自己在這方面的研究和實(shí)踐分享出來(lái),更希望有興趣的朋友在一塊分享和交流。 總結(jié): 分布式是指將不同的業(yè)務(wù)分布在不同的地方,集群指的是將幾臺(tái)服務(wù)器集中在一起,實(shí)現(xiàn)同一業(yè)務(wù)。

在現(xiàn)有**結(jié)構(gòu)之上,負(fù)載均衡提供了一種廉價(jià)有效的方法擴(kuò)展服務(wù)器帶寬和增加吞吐量,加強(qiáng)**數(shù)據(jù)處理能力,提高**的靈活性和可用性。

在服務(wù)器架構(gòu)中,集群,負(fù)載均衡,分布式有什么區(qū)別嗎

集群就是很多的服務(wù)器來(lái)實(shí)現(xiàn)一種功能,向mysql,很多的服務(wù)器都安裝mysql,負(fù)載均衡就是用來(lái)調(diào)節(jié)的,比方說(shuō)有很多的用戶(hù)都在訪(fǎng)問(wèn)讀取數(shù)據(jù),可是讀取a服務(wù)器的mysql多,而讀取別的服務(wù)器的mysql就少,負(fù)載均衡把訪(fǎng)問(wèn)a的用戶(hù)轉(zhuǎn)給b一部分,防止a由于訪(fǎng)問(wèn)量過(guò)大造成宕機(jī)什么的。分布式就是有很多把服務(wù)器的相同功能分別部署在很多太計(jì)算機(jī)上,然后每個(gè)地方放上幾臺(tái),這幾臺(tái)負(fù)責(zé)提供本地的服務(wù),并且和總的服務(wù)器連接,保持?jǐn)?shù)據(jù)傳遞。