怎么确保网站的可用性
歡迎支持筆者新作:《深入理解Kafka:核心設(shè)計(jì)與實(shí)踐原理》和《RabbitMQ實(shí)戰(zhàn)指南》,同時(shí)歡迎關(guān)注筆者的微信公眾號(hào):朱小廝的博客。
歡迎跳轉(zhuǎn)到本文的原文鏈接:https://honeypps.com/architect/how-to-ensure-the-usability-of-your-website/
??網(wǎng)站的高可用架構(gòu)設(shè)計(jì)的主要目的就是保證服務(wù)器硬件故障時(shí)服務(wù)依然可用、數(shù)據(jù)依然保存并能夠被訪問(wèn)。
??實(shí)現(xiàn)上述高可用架構(gòu)的主要手段是數(shù)據(jù)和服務(wù)的冗余備份及失效轉(zhuǎn)移。
??典型的分層模型是三層,即應(yīng)用層、服務(wù)層、數(shù)據(jù)層;各層之間具有相對(duì)獨(dú)立性,應(yīng)用層主要負(fù)責(zé)具體頁(yè)面邏輯處理;服務(wù)層負(fù)責(zé)提供可復(fù)用的服務(wù);數(shù)據(jù)層負(fù)責(zé)數(shù)據(jù)的存儲(chǔ)于訪問(wèn)。中小型網(wǎng)站在具體部署時(shí),通常將應(yīng)用層和服務(wù)層部署在一起,而數(shù)據(jù)層則另外部署。
??在復(fù)雜的大型網(wǎng)站架構(gòu)中,劃分的粒度會(huì)更小、更詳細(xì),結(jié)構(gòu)更加復(fù)雜,服務(wù)器規(guī)模更加龐大,但通常還是能夠把這些服務(wù)劃分到這三層中。
##高可用的應(yīng)用
??應(yīng)用層主要處理網(wǎng)站應(yīng)用的業(yè)務(wù)邏輯,因此有時(shí)也稱(chēng)作為業(yè)務(wù)邏輯層,應(yīng)用的一個(gè)顯著特點(diǎn)是應(yīng)用的無(wú)狀態(tài)性。
負(fù)載均衡,顧名思義,主要使用在業(yè)務(wù)量和數(shù)據(jù)量較高的情況下,當(dāng)單臺(tái)服務(wù)器不足以承擔(dān)所有的負(fù)載壓力時(shí),通過(guò)負(fù)載均衡手段,將流量和數(shù)據(jù)分?jǐn)偟揭粋€(gè)集群組成的多臺(tái)服務(wù)器上,以提高整體的負(fù)載處理能力。
目前,不管是開(kāi)源免費(fèi)的負(fù)載均衡軟件還是昂貴的負(fù)載均衡硬件,都提供失效轉(zhuǎn)移功能。
應(yīng)用服務(wù)器的高可用架構(gòu)設(shè)計(jì)主要基于服務(wù)無(wú)狀態(tài)這一特性,但是事實(shí)上,業(yè)務(wù)總是有狀態(tài)的。
web應(yīng)用中將這些多次請(qǐng)求修改使用的上下文對(duì)象稱(chēng)作會(huì)話(Session),單機(jī)情況下,Session可由部署在服務(wù)器上的Web容器管理。在使用負(fù)載均衡的集群環(huán)境中,由于負(fù)載均衡服務(wù)器可能會(huì)將請(qǐng)求分發(fā)到集群任何一臺(tái)應(yīng)用服務(wù)器上,所以保證每次請(qǐng)求依然能夠獲得正確的Session比單機(jī)時(shí)要復(fù)雜很多。
??集群環(huán)境下,Session管理主要有以下幾種手段。
##高可用的服務(wù)
??可復(fù)用的服務(wù)模塊為業(yè)務(wù)產(chǎn)品提供公共服務(wù),大型網(wǎng)站中這些服務(wù)通常都獨(dú)立分布式部署,被具體應(yīng)用遠(yuǎn)程調(diào)用。可復(fù)用的服務(wù)和應(yīng)用一樣,也是無(wú)狀態(tài)的服務(wù),因此可以使用類(lèi)似負(fù)載均衡的失效轉(zhuǎn)移策略實(shí)現(xiàn)高可用的服務(wù)。
??除此之外,具體實(shí)踐中,還有以下幾點(diǎn)高可用的服務(wù)策略。
運(yùn)維上將服務(wù)器進(jìn)行分機(jī)管理,核心應(yīng)用和服務(wù)有限使用更好的硬件,在運(yùn)維響應(yīng)速度上爺格外迅速。顯然,用戶(hù)及時(shí)付款購(gòu)物比能不能評(píng)價(jià)商品更重要,所以訂單、支付服務(wù)比評(píng)價(jià)服務(wù)有更高優(yōu)先級(jí)。同事在服務(wù)部署上也進(jìn)行必要的隔離,避免故障的連鎖反應(yīng)。
在應(yīng)用程序中設(shè)置服務(wù)調(diào)用的超時(shí)時(shí)間,一旦超時(shí),通信框架就拋出異常,應(yīng)用程序根據(jù)服務(wù)調(diào)度策略,可選擇繼續(xù)重試或者將請(qǐng)求轉(zhuǎn)移到提供相同服務(wù)的其他服務(wù)器上
應(yīng)用對(duì)服務(wù)的調(diào)用通過(guò)消息隊(duì)列等異步方式完成,避免一個(gè)服務(wù)失敗導(dǎo)致整個(gè)應(yīng)用請(qǐng)求失敗的情況。
當(dāng)然不是多有服務(wù)調(diào)用都可以異步調(diào)用,對(duì)于獲取用戶(hù)信息這類(lèi)調(diào)用,采用異步方式會(huì)延長(zhǎng)響應(yīng)時(shí)間,得不償失。對(duì)于那些必須確認(rèn)服務(wù)調(diào)用成功才能繼續(xù)下一步操作的應(yīng)用也不合適使用異步調(diào)用。
降級(jí)有兩種手段:拒絕服務(wù)及關(guān)閉服務(wù)
有些服務(wù)天然具有冪等性,比如講用戶(hù)性別設(shè)置為男性,不管設(shè)置多少次,結(jié)果都一樣。但是對(duì)轉(zhuǎn)賬交易等操作,問(wèn)題就會(huì)比較復(fù)雜,需要通過(guò)交易編號(hào)等信息進(jìn)行服務(wù)調(diào)用有效性校驗(yàn),只有有效的操作才能繼續(xù)執(zhí)行。
(注:冪等性是系統(tǒng)的接口對(duì)外一種承諾(而不是實(shí)現(xiàn)), 承諾只要調(diào)用接口成功, 外部多次調(diào)用對(duì)系統(tǒng)的影響是一致的. 聲明為冪等的接口會(huì)認(rèn)為外部調(diào)用失敗是常態(tài), 并且失敗之后必然會(huì)有重試.)
##高可用的數(shù)據(jù)
??保證數(shù)據(jù)存儲(chǔ)高可用的手段主要是數(shù)據(jù)備份和失效轉(zhuǎn)移機(jī)智。
##網(wǎng)站運(yùn)行監(jiān)控
??“不允許沒(méi)有監(jiān)控的系統(tǒng)上線“,這是許多網(wǎng)站架構(gòu)師在做項(xiàng)目上線評(píng)審時(shí)常說(shuō)的一句話。網(wǎng)站運(yùn)行監(jiān)控對(duì)于網(wǎng)站運(yùn)維和架構(gòu)設(shè)計(jì)優(yōu)化至關(guān)重要,運(yùn)維沒(méi)有監(jiān)控的網(wǎng)站,猶如駕駛沒(méi)有儀表的飛機(jī)。盲人騎瞎馬,夜班臨深淵而不知,生死尚且未卜,提高可用性、減少故障率就更無(wú)從做起了。
歡迎跳轉(zhuǎn)到本文的原文鏈接:https://honeypps.com/architect/how-to-ensure-the-usability-of-your-website/
歡迎支持筆者新作:《深入理解Kafka:核心設(shè)計(jì)與實(shí)踐原理》和《RabbitMQ實(shí)戰(zhàn)指南》,同時(shí)歡迎關(guān)注筆者的微信公眾號(hào):朱小廝的博客。
總結(jié)
以上是生活随笔為你收集整理的怎么确保网站的可用性的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 如何提升网站的性能?
- 下一篇: LVS:三种负载均衡方式比较+另三种负载