導(dǎo)讀 后臺產(chǎn)品經(jīng)理工作中較長出現(xiàn)的技術(shù)術(shù)語,我們都需要了解滴劲,本文從后臺開發(fā)所涉及到的技術(shù)術(shù)語出發(fā),基于系統(tǒng)開發(fā)顾复、架構(gòu)設(shè)計班挖、網(wǎng)絡(luò)通信、故障異常四個方面讓大家對后臺開發(fā)有一個清晰的了解芯砸。
一萧芙、系統(tǒng)開發(fā)
1. 高內(nèi)聚/低耦合
高內(nèi)聚指一個軟件模塊是由相關(guān)性很強(qiáng)的代碼組成,只負(fù)責(zé)一項任務(wù)假丧,也就是常說的單一責(zé)任原則双揪。模塊的內(nèi)聚反映模塊內(nèi)部聯(lián)系的緊密程度。
模塊之間聯(lián)系越緊密包帚,其耦合性就越強(qiáng)渔期,模塊的獨(dú)立性則越差。模塊間耦合高低取決于模塊間接口的復(fù)雜性渴邦、調(diào)用的方式及傳遞的信息疯趟。一個完整的系統(tǒng),模塊與模塊之間谋梭,盡可能的使其獨(dú)立存在信峻。通常程序結(jié)構(gòu)中各模塊的內(nèi)聚程度越高,模塊間的耦合程度就越低瓮床。
2. 過度設(shè)計
過度設(shè)計就是進(jìn)行了過多的面向未來的設(shè)計或者說把相對簡單的事情想復(fù)雜了盹舞,過度追求模塊化、可擴(kuò)展性隘庄、設(shè)計模式等踢步,為系統(tǒng)增加了不必要的復(fù)雜度。
3. 過早優(yōu)化
過早指的不是在開發(fā)過程的早期峭沦,而是在還沒弄清楚需求未來的變化的走向的時候。你的優(yōu)化不僅可能導(dǎo)致你無法很好地實(shí)現(xiàn)新的需求逃糟,而且你對優(yōu)化的預(yù)期的猜測有可能還是錯的吼鱼,導(dǎo)致實(shí)際上你除了把代碼變復(fù)雜以外什么都沒得到。
正確的方法是绰咽,先有質(zhì)量地實(shí)現(xiàn)你的需求菇肃,寫夠testcase,然后做profile去找到性能的瓶頸取募,這個時候才做優(yōu)化琐谤。
4. 重構(gòu) (Refactoring)
重構(gòu)(Refactoring)就是通過調(diào)整程序代碼改善軟件的質(zhì)量、性能玩敏,使其程序的設(shè)計模式和架構(gòu)更趨合理斗忌,提高軟件的擴(kuò)展性和維護(hù)性质礼。
5. 破窗效應(yīng)
又稱破窗理論,破窗效應(yīng)(Broken windows theory)是犯罪學(xué)的一個理論织阳。此理論認(rèn)為環(huán)境中的不良現(xiàn)象如果被放任存在眶蕉,會誘使人們仿效,甚至變本加厲唧躲。一幢有少許破窗的建筑為例造挽,如果那些窗不被修理好,可能將會有破壞者破壞更多的窗戶弄痹。最終他們甚至?xí)J入建筑內(nèi)饭入,如果發(fā)現(xiàn)無人居住,也許就在那里定居或者縱火肛真。
應(yīng)用在軟件工程上就是谐丢,一定不能讓系統(tǒng)代碼或者架構(gòu)設(shè)計的隱患有冒頭的機(jī)會,否則隨著時間的推移毁欣,隱患會越來越重庇谆。反之,一個本身優(yōu)質(zhì)的系統(tǒng)凭疮,會讓人不由自主的寫出優(yōu)質(zhì)的代碼饭耳。
6. 互不信任原則
指在程序運(yùn)行上下游的整個鏈路中,每個點(diǎn)都是不能保證絕對可靠的执解,任何一個點(diǎn)都可能隨時發(fā)生故障或者不可預(yù)知的行為寞肖,包括機(jī)器網(wǎng)絡(luò)、服務(wù)本身衰腌、依賴環(huán)境新蟆、輸入和請求等,因此要處處設(shè)防右蕊。
7. 持久化 (Persistence)
持久化是將程序數(shù)據(jù)在臨時狀態(tài)和持久狀態(tài)間轉(zhuǎn)換的機(jī)制琼稻。通俗的講,就是臨時數(shù)據(jù)(比如內(nèi)存中的數(shù)據(jù)饶囚,是不能永久保存的)持久化為持久數(shù)據(jù)(比如持久化至數(shù)據(jù)庫或者本地磁盤中帕翻,能夠長久保存)。
8. 臨界區(qū)
臨界區(qū)用來表示一種公共資源或者說是共享數(shù)據(jù)萝风,可以被多個線程使用嘀掸,但是每一次,只能有一個線程使用它规惰,一旦臨界區(qū)資源被占用睬塌,其他線程要想使用這個資源,就必須等待。
9. 阻塞/非阻塞
阻塞和非阻塞通常形容多線程間的相互影響揩晴。比如一個線程占用了臨界區(qū)資源勋陪,那么其它所有需要這個資源的線程就必須在這個臨界區(qū)中進(jìn)行等待,等待會導(dǎo)致線程掛起文狱。這種情況就是阻塞粥鞋。此時,如果占用資源的線程一直不愿意釋放資源瞄崇,那么其它所有阻塞在這個臨界區(qū)上的線程都不能工作呻粹。而非阻塞允許多個線程同時進(jìn)入臨界區(qū)。
10. 同步/異步
通常同步和異步是指函數(shù)/方法調(diào)用方面苏研。
同步就是在發(fā)出一個函數(shù)調(diào)用時等浊,在沒有得到結(jié)果之前,該調(diào)用就不返回摹蘑。異步調(diào)用會瞬間返回筹燕,但是異步調(diào)用瞬間返回并不代表你的任務(wù)就完成了,他會在后臺起個線程繼續(xù)進(jìn)行任務(wù)衅鹿,等任務(wù)執(zhí)行完畢后通過回調(diào)callback或其他方式通知調(diào)用方撒踪。
11. 并發(fā)/并行
并行(parallel)指在同一時刻,有多條指令在多個處理器上同時執(zhí)行大渤。所以無論從微觀還是從宏觀來看制妄,二者都是一起執(zhí)行的。
并發(fā)(concurrency)指在同一時刻只能有一條指令執(zhí)行泵三,但多個進(jìn)程指令被快速的輪換執(zhí)行耕捞,使得在宏觀上具有多個進(jìn)程同時執(zhí)行的效果,但在微觀上并不是同時執(zhí)行的烫幕,只是把時間分成若干段俺抽,使多個進(jìn)程快速交替的執(zhí)行。
二较曼、架構(gòu)設(shè)計
1. 高并發(fā) (High Concurrency)
由于分布式系統(tǒng)的問世磷斧,高并發(fā)(High Concurrency)通常是指通過設(shè)計保證系統(tǒng)能夠同時并行處理很多請求。通俗來講捷犹,高并發(fā)是指在同一個時間點(diǎn)弛饭,有很多用戶同時的訪問同一 API 接口或者 Url 地址。它經(jīng)常會發(fā)生在有大活躍用戶量伏恐,用戶高聚集的業(yè)務(wù)場景中孩哑。
2. 高可用 (High Availability)
高可用HA(High Availability)是分布式系統(tǒng)架構(gòu)設(shè)計中必須考慮的因素之一栓霜,它通常是指翠桦,一個系統(tǒng)經(jīng)過專門的設(shè)計,以減少停工時間,而保持其服務(wù)的高度可用性销凑。
3. 讀寫分離
為了確保數(shù)據(jù)庫產(chǎn)品的穩(wěn)定性丛晌,很多數(shù)據(jù)庫擁有雙機(jī)熱備功能。也就是斗幼,第一臺數(shù)據(jù)庫服務(wù)器澎蛛,是對外提供增刪改業(yè)務(wù)的生產(chǎn)服務(wù)器;第二臺數(shù)據(jù)庫服務(wù)器蜕窿,主要進(jìn)行讀的操作谋逻。
4. 冷備/熱備
冷備:兩個服務(wù)器,一臺運(yùn)行桐经,一臺不運(yùn)行做為備份毁兆。這樣一旦運(yùn)行的服務(wù)器宕機(jī),就把備份的服務(wù)器運(yùn)行起來阴挣。冷備的方案比較容易實(shí)現(xiàn)气堕,但冷備的缺點(diǎn)是主機(jī)出現(xiàn)故障時備機(jī)不會自動接管,需要主動切換服務(wù)畔咧。
熱備:即是通常所說的active/standby方式茎芭,服務(wù)器數(shù)據(jù)包括數(shù)據(jù)庫數(shù)據(jù)同時往兩臺或多臺服務(wù)器寫。當(dāng)active服務(wù)器出現(xiàn)故障的時候誓沸,通過軟件診測(一般是通過心跳診斷)將standby機(jī)器激活梅桩,保證應(yīng)用在短時間內(nèi)完全恢復(fù)正常使用。當(dāng)一臺服務(wù)器宕機(jī)后蔽介,自動切換到另一臺備用機(jī)使用摘投。
5. 異地多活
異地多活一般是指在不同城市建立獨(dú)立的數(shù)據(jù)中心,“活”是相對于冷備份而言的虹蓄,冷備份是備份全量數(shù)據(jù)犀呼,平時不支撐業(yè)務(wù)需求,只有在主機(jī)房出現(xiàn)故障的時候才會切換到備用機(jī)房薇组,而多活外臂,是指這些機(jī)房在日常的業(yè)務(wù)中也需要走流量,做業(yè)務(wù)支撐律胀。
6. 負(fù)載均衡 (Load Balance)
負(fù)載均衡宋光,是對多臺服務(wù)器進(jìn)行流量分發(fā)的負(fù)載均衡服務(wù)√烤可在多個實(shí)例間自動分配應(yīng)用程序的對外服務(wù)能力罪佳,通過消除單點(diǎn)故障提升應(yīng)用系統(tǒng)的可用性,讓您實(shí)現(xiàn)更高水平的應(yīng)用程序容錯能力黑低,從而無縫提供分配應(yīng)用程序流量所需的負(fù)載均衡容量赘艳,為您提供高效酌毡、穩(wěn)定、安全的服務(wù)蕾管。
7. 動靜分離
動靜分離是指在web服務(wù)器架構(gòu)中枷踏,將靜態(tài)頁面與動態(tài)頁面或者靜態(tài)內(nèi)容接口和動態(tài)內(nèi)容接口分開不同系統(tǒng)訪問的架構(gòu)設(shè)計方法,進(jìn)而提升整個服務(wù)訪問性能和可維護(hù)性掰曾。
8. 集群
單臺服務(wù)器的并發(fā)承載能力總是有限的旭蠕,當(dāng)單臺服務(wù)器處理能力達(dá)到性能瓶頸的時,將多臺服務(wù)器組合起來提供服務(wù)旷坦,這種組合方式稱之為集群掏熬,集群中每臺服務(wù)器就叫做這個集群的一個“節(jié)點(diǎn)”,每個節(jié)點(diǎn)都能提供相同的服務(wù)秒梅,從而成倍的提升整個系統(tǒng)的并發(fā)處理能力孽江。
9. 分布式
分布式系統(tǒng)就是將一個完整的系統(tǒng)按照業(yè)務(wù)功能拆分成很多獨(dú)立的子系統(tǒng),每個子系統(tǒng)就被稱為“服務(wù)”番电,分布式系統(tǒng)將請求分揀和分發(fā)到不同的子系統(tǒng)岗屏,讓不同的服務(wù)來處理不同的請求。在分布式系統(tǒng)中漱办,子系統(tǒng)獨(dú)立運(yùn)行这刷,它們之間通過網(wǎng)絡(luò)通信連接起來實(shí)現(xiàn)數(shù)據(jù)互通和組合服務(wù)。
10. CAP理論
CAP理論娩井,指的是在一個分布式系統(tǒng)中暇屋,Consistency(一致性)、Availability(可用性)洞辣、Partition Tolerance(分區(qū)容錯性)咐刨,不能同時成立。
一致性:它要求在同一時刻點(diǎn)扬霜,分布式系統(tǒng)中的所有數(shù)據(jù)備份都相同或者都處于同一狀態(tài)定鸟。
可用性:在系統(tǒng)集群的一部分節(jié)點(diǎn)宕機(jī)后,系統(tǒng)依然能夠正確的響應(yīng)用戶的請求著瓶。
分區(qū)容錯性:系統(tǒng)能夠容忍節(jié)點(diǎn)之間的網(wǎng)絡(luò)通信的故障联予。
簡單的來說,在一個分布式系統(tǒng)中材原,最多能支持上面的兩種屬性沸久。但顯然既然是分布式注定我們是必然要進(jìn)行分區(qū),既然分區(qū)余蟹,我們就無法百分百避免分區(qū)的錯誤卷胯。因此,我們只能在一致性和可用性去作出選擇威酒。
在分布式系統(tǒng)中窑睁,我們往往追求的是可用性话告,它的重要性比一致性要高,那么如何實(shí)現(xiàn)高可用卵慰,這里又有一個理論,就是 BASE 理論佛呻,它給 CAP 理論做了進(jìn)一步的擴(kuò)充裳朋。
11. BASE理論
BASE 理論指出:
Basically Available(基本可用)
Soft state(軟狀態(tài))
Eventually consistent(最終一致性)
BASE 理論是對 CAP 中的一致性和可用性進(jìn)行一個權(quán)衡的結(jié)果,理論的核心思想就是:我們無法做到強(qiáng)一致吓著,但每個應(yīng)用都可以根據(jù)自身的業(yè)務(wù)特點(diǎn)鲤嫡,采用適當(dāng)?shù)姆绞絹硎瓜到y(tǒng)達(dá)到最終一致性。
12. 水平擴(kuò)展/垂直擴(kuò)展
水平擴(kuò)展 Scale Out通過增加更多的服務(wù)器或者程序?qū)嵗齺矸稚⒇?fù)載绑莺,從而提升存儲能力和計算能力暖眼。
垂直擴(kuò)展 Scale Up 提升單機(jī)處理能力。
垂直擴(kuò)展的方式又有兩種:
(1)增強(qiáng)單機(jī)硬件性能纺裁,例如:增加CPU核數(shù)如32核诫肠,升級更好的網(wǎng)卡如萬兆,升級更好的硬盤如SSD欺缘,擴(kuò)充硬盤容量如2T栋豫,擴(kuò)充系統(tǒng)內(nèi)存如128G;
(2)提升單機(jī)軟件或者架構(gòu)性能,例如:使用Cache來減少IO次數(shù)谚殊,使用異步來增加單服務(wù)吞吐量丧鸯,使用無鎖數(shù)據(jù)結(jié)構(gòu)來減少響應(yīng)時間;
13. 平行擴(kuò)容
與水平擴(kuò)展類似嫩絮。集群服務(wù)器中的節(jié)點(diǎn)均為平行對等節(jié)點(diǎn)丛肢,當(dāng)需要擴(kuò)容時,可以通過添加更多節(jié)點(diǎn)以提高集群的服務(wù)能力剿干。一般來說服務(wù)器中關(guān)鍵路徑(如服務(wù)器中的登錄蜂怎、支付、核心業(yè)務(wù)邏輯等)都需要支持運(yùn)行時動態(tài)平行擴(kuò)容置尔。
14. 彈性擴(kuò)容
指對部署的集群進(jìn)行動態(tài)在線擴(kuò)容派敷。彈性擴(kuò)容系統(tǒng)可以根據(jù)實(shí)際業(yè)務(wù)環(huán)境按照一定策略自動地添加更多的節(jié)點(diǎn)(包括存儲節(jié)點(diǎn)、計算節(jié)點(diǎn)撰洗、網(wǎng)絡(luò)節(jié)點(diǎn))來增加系統(tǒng)容量篮愉、提高系統(tǒng)性能或者增強(qiáng)系統(tǒng)可靠性,或者同時完成這三個目標(biāo)差导。
15. 狀態(tài)同步/幀同步
狀態(tài)同步:狀態(tài)同步是指服務(wù)器負(fù)責(zé)計算全部的游戲邏輯试躏,并且廣播這些計算的結(jié)果,客戶端僅僅負(fù)責(zé)發(fā)送玩家的操作设褐,以及表現(xiàn)收到的游戲結(jié)果颠蕴。
特征:狀態(tài)同步安全性高高帖,邏輯更新方便,斷線重連快装悲,但是開發(fā)效率較低贱除,網(wǎng)絡(luò)流量隨游戲復(fù)雜度增加,服務(wù)器需要承載更大壓力寡键。
幀同步:服務(wù)端只轉(zhuǎn)發(fā)消息掀泳,不做任何邏輯處理,各客戶端每秒幀數(shù)一致西轩,在每一幀都處理同樣的輸入數(shù)據(jù)员舵。
特征:幀同步需要保證系統(tǒng)在相同的輸入下,要有相同的輸出藕畔。幀同步開發(fā)效率高马僻,流量消耗低而且穩(wěn)定,對服務(wù)器的壓力非常小注服。但是網(wǎng)絡(luò)要求高韭邓,斷線重連時間長,客戶端計算壓力大溶弟。
三仍秤、網(wǎng)絡(luò)通信
1. 連接池
預(yù)先建立一個連接緩沖池,并提供一套連接使用可很、分配诗力、管理策略,使得該連接池中的連接可以得到高效我抠、安全的復(fù)用苇本,避免了連接頻繁建立、關(guān)閉的開銷菜拓。
2. 斷線重連
由于網(wǎng)絡(luò)波動造成用戶間歇性的斷開與服務(wù)器的連接瓣窄,待網(wǎng)絡(luò)恢復(fù)之后服務(wù)器嘗試將用戶連接到上次斷開時的狀態(tài)和數(shù)據(jù)。
3. 會話保持
會話保持是指在負(fù)載均衡器上的一種機(jī)制纳鼎,可以識別客戶端與服務(wù)器之間交互過程的關(guān)連性俺夕,在作負(fù)載均衡的同時還保證一系列相關(guān)連的訪問請求都會分配到一臺機(jī)器上。用人話來表述就是:在一次會話過程中發(fā)起的多個請求都會落到同一臺機(jī)器上贱鄙。
4. 長連接/短連接
通常是指TCP的長連接和短連接劝贸。長連接就是建立TCP連接后,一直保持這個連接逗宁,一般會中間彼此發(fā)送心跳來確認(rèn)對應(yīng)的存在映九,中間會做多次業(yè)務(wù)數(shù)據(jù)傳輸,一般不會主動斷開連接瞎颗。短連接一般指建立連接后件甥,執(zhí)行一次事務(wù)后(如:http請求)捌议,然后就關(guān)掉這個連接。
5. 流量控制/擁塞控制
流量控制防止發(fā)送方發(fā)的太快引有,耗盡接收方的資源瓣颅,從而使接收方來不及處理。
擁塞控制防止發(fā)送方發(fā)的太快譬正,使得網(wǎng)絡(luò)來不及處理產(chǎn)生擁塞宫补,進(jìn)而引起這部分乃至整個網(wǎng)絡(luò)性能下降的現(xiàn)象,嚴(yán)重時甚至?xí)?dǎo)致網(wǎng)絡(luò)通信業(yè)務(wù)陷入停頓导帝。
6. 驚群效應(yīng)
驚群效應(yīng)也有人叫做雷鳴群體效應(yīng),不過叫什么穿铆,簡言之您单,驚群現(xiàn)象就是多進(jìn)程(多線程)在同時阻塞等待同一個事件的時候(休眠狀態(tài)),如果等待的這個事件發(fā)生荞雏,那么他就會喚醒等待的所有進(jìn)程(或者線程)虐秦,但是最終卻只可能有一個進(jìn)程(線程)獲得這個時間的“控制權(quán)”,對該事件進(jìn)行處理凤优,而其他進(jìn)程(線程)獲取“控制權(quán)”失敗悦陋,只能重新進(jìn)入休眠狀態(tài),這種現(xiàn)象和性能浪費(fèi)就叫做驚群筑辨。
7. NAT
NAT(Network Address Translation俺驶,網(wǎng)絡(luò)地址轉(zhuǎn)換),就是替換IP報文頭部的地址信息棍辕。NAT通常部署在一個組織的網(wǎng)絡(luò)出口位置暮现,通過將內(nèi)部網(wǎng)絡(luò)IP地址替換為出口的IP地址提供公網(wǎng)可達(dá)性和上層協(xié)議的連接能力。
四楚昭、故障異常
1. 宕機(jī)
宕機(jī)栖袋,一般情況下指的就是計算機(jī)主機(jī)出現(xiàn)意外故障而死機(jī)。其次抚太,一些服務(wù)器例如數(shù)據(jù)庫死鎖也可以稱為宕機(jī)塘幅,一些服務(wù)器的某些服務(wù)掛掉了,就可以這么說尿贫。
2. coredump
當(dāng)程序出錯而異常中斷時电媳,OS會把程序工作的當(dāng)前狀態(tài)存儲成一個coredunmp文件。通常情況下coredump文件包含了程序運(yùn)行時的內(nèi)存庆亡,寄存器狀態(tài)匆背,堆棧指針,內(nèi)存管理信息等身冀。
3. 緩存穿透/擊穿/雪崩
緩存穿透:緩存穿透是指查詢一個一定不存在的數(shù)據(jù)钝尸,由于緩存是不命中時需要從數(shù)據(jù)庫查詢括享,查不到數(shù)據(jù)則不寫入緩存,這將導(dǎo)致這個不存在的數(shù)據(jù)每次請求都要到數(shù)據(jù)庫去查詢珍促,進(jìn)而給數(shù)據(jù)庫帶來壓力铃辖。
緩存擊穿:緩存擊穿是指熱點(diǎn)key在某個時間點(diǎn)過期的時候,而恰好在這個時間點(diǎn)對這個Key有大量的并發(fā)請求過來猪叙,從而大量的請求打到db娇斩。
緩存雪崩:緩存雪崩是指緩存中數(shù)據(jù)大批量到過期時間,而查詢數(shù)據(jù)量巨大穴翩,引起數(shù)據(jù)庫壓力過大甚至down機(jī)犬第。
與緩存擊穿不同的是:存擊穿是熱點(diǎn)key失效,緩存雪崩是大量的key同時失效芒帕。
4. 500/501/502/503/504/505
500 Internal Server Error:內(nèi)部服務(wù)錯誤歉嗓,一般是服務(wù)器遇到意外情況,而無法完成請求背蟆〖郑可能原因: 1、程序錯誤带膀,例如:ASP或者PHP語法錯誤志珍;2、高并發(fā)導(dǎo)致垛叨,系統(tǒng)資源限制不能打開過多的文件所致伦糯。
501 Not implemented:服務(wù)器不理解或不支持請求的HTTP請求。
502 Bad Gateway:WEB服務(wù)器故障嗽元,可能是由于程序進(jìn)程不夠舔株,請求的php-fpm已經(jīng)執(zhí)行,但是由于某種原因而沒有執(zhí)行完畢还棱,最終導(dǎo)致php-fpm進(jìn)程終止载慈。可能原因:1珍手、Nginx服務(wù)器办铡,php-cgi進(jìn)程數(shù)不夠用;2琳要、PHP執(zhí)行時間過長寡具;3、php-cgi進(jìn)程死掉稚补;
503 Service Unavailable:服務(wù)器目前無法使用童叠。系統(tǒng)維護(hù)服務(wù)器暫時的無法處理客戶端的請求,這只是暫時狀態(tài)∠锰常可以聯(lián)系下服務(wù)器提供商五垮。
504 Gateway Timeout:服務(wù)器504錯誤表示超時,是指客戶端所發(fā)出的請求沒有到達(dá)網(wǎng)關(guān)杜秸,請求沒有到可以執(zhí)行的php-fpm放仗,一般是與nginx.conf的配置有關(guān)。
505 HTTP Version Not Supported:服務(wù)器不支持請求中所用的 HTTP 協(xié)議版本撬碟。(HTTP 版本不受支持)
除了500錯誤可能是程序語言錯誤诞挨,其余的報錯,都大概可以理解為服務(wù)器或者服務(wù)器配置出現(xiàn)問題呢蛤。
5. 內(nèi)存溢出/內(nèi)存泄漏
內(nèi)存溢出:內(nèi)存溢出(Out Of Memory)指程序申請內(nèi)存時惶傻,沒有足夠的內(nèi)存供申請者使用,或者說其障,給了你一塊存儲int類型數(shù)據(jù)的存儲空間银室,但是你卻存儲long類型的數(shù)據(jù),那么結(jié)果就是內(nèi)存不夠用静秆,此時就會報錯OOM,即所謂的內(nèi)存溢出粮揉。
內(nèi)存泄漏:內(nèi)存泄漏(Memory Leak)指程序中己動態(tài)分配的堆內(nèi)存由于某種原因程序未釋放或無法釋放巡李,造成系統(tǒng)內(nèi)存的浪費(fèi)抚笔,導(dǎo)致程序運(yùn)行速度減慢甚至系統(tǒng)崩潰等嚴(yán)重后果。
6. 句柄泄漏
句柄泄漏是進(jìn)程在調(diào)用系統(tǒng)文件之后侨拦,沒有釋放已經(jīng)打開的文件句柄殊橙。一般句柄泄漏后的現(xiàn)象是,機(jī)器變慢狱从,CPU飆升膨蛮,出現(xiàn)句柄泄漏的cgi或server的CPU使用率增加。
7. 死鎖
死鎖是指兩個或兩個以上的線程在執(zhí)行過程中季研,由于競爭資源或者由于彼此通信而造成的一種阻塞的現(xiàn)象敞葛,若無外力作用,它們都抑制處于阻塞狀態(tài)并無法進(jìn)行下去与涡,此時稱系統(tǒng)處于死鎖狀態(tài)或系統(tǒng)產(chǎn)生了死鎖惹谐。
8. 軟中斷/硬中斷
硬中斷:我們通常所說的中斷指的是硬中斷(hardirq)。
由與系統(tǒng)相連的外設(shè)(比如網(wǎng)卡驼卖、硬盤)自動產(chǎn)生的氨肌。
主要是用來通知操作系統(tǒng)系統(tǒng)外設(shè)狀態(tài)的變化。
軟中斷:1酌畜、通常是硬中斷服務(wù)程序?qū)?nèi)核的中斷怎囚;2、為了滿足實(shí)時系統(tǒng)的要求桥胞,中斷處理應(yīng)該是越快越好恳守。
linux為了實(shí)現(xiàn)這個特點(diǎn)考婴,當(dāng)中斷發(fā)生的時候,硬中斷處理那些短時間就可以完成的工作井誉,而將那些處理事件比較長的工作蕉扮,放到中斷之后來完成,也就是軟中斷(softirq)來完成颗圣。
9. 毛刺
在短暫的某一刻喳钟,服務(wù)器性能指標(biāo)(如流量、磁盤IO在岂、CPU使用率等)遠(yuǎn)大于該時刻前后時間段奔则。毛刺的出現(xiàn)代表這服務(wù)器資源利用不均勻,不充分蔽午,容易誘發(fā)其他更嚴(yán)重的問題易茬。
10. 重放攻擊
攻擊者發(fā)送一個目的主機(jī)已接收過的包,來達(dá)到欺騙系統(tǒng)的目的及老,主要用于身份認(rèn)證過程抽莱,破壞認(rèn)證的正確性。它是一種攻擊類型骄恶,這種攻擊會不斷惡意或欺詐性地重復(fù)一個有效的數(shù)據(jù)傳輸食铐,重放攻擊可以由發(fā)起者,也可以由攔截并重發(fā)該數(shù)據(jù)的敵方進(jìn)行僧鲁。攻擊者利用網(wǎng)絡(luò)監(jiān)聽或者其他方式盜取認(rèn)證憑據(jù)虐呻,之后再把它重新發(fā)給認(rèn)證服務(wù)器。
11. 網(wǎng)絡(luò)孤島
網(wǎng)絡(luò)孤島指集群環(huán)境中寞秃,部分機(jī)器與整個集群失去網(wǎng)絡(luò)連接斟叼,分裂為一個小集群并且發(fā)生數(shù)據(jù)不一致的狀況。
12. 數(shù)據(jù)傾斜
對于集群系統(tǒng)春寿,一般緩存是分布式的朗涩,即不同節(jié)點(diǎn)負(fù)責(zé)一定范圍的緩存數(shù)據(jù)。我們把緩存數(shù)據(jù)分散度不夠绑改,導(dǎo)致大量的緩存數(shù)據(jù)集中到了一臺或者幾臺服務(wù)節(jié)點(diǎn)上谢床,稱為數(shù)據(jù)傾斜。一般來說數(shù)據(jù)傾斜是由于負(fù)載均衡實(shí)施的效果不好引起的绢淀。
13. 腦裂
腦裂是指在集群系統(tǒng)中萤悴,部分節(jié)點(diǎn)之間網(wǎng)絡(luò)不可達(dá)而引起的系統(tǒng)分裂,不同分裂的小集群會按照各自的狀態(tài)提供服務(wù)皆的,原本的集群會同時存在不一致的反應(yīng)覆履,造成節(jié)點(diǎn)之間互相爭搶資源,系統(tǒng)混亂,數(shù)據(jù)損壞硝全。