架構(gòu)一詞,,比較飄渺,,隱藏在代碼的背后,似有似無(wú),。大家對(duì)于架構(gòu)師這個(gè)職位也褒貶不一,。大型網(wǎng)站不是設(shè)計(jì)出來(lái)的,而是逐步發(fā)展演化過(guò)來(lái)的,。 什么是架構(gòu),? 最高層次的規(guī)劃,難以改變的決定,,這些規(guī)劃和決定奠定了事物未來(lái)發(fā)展的方向和最終的藍(lán)圖,。 什么是軟件系統(tǒng)架構(gòu)? 有關(guān)軟件系統(tǒng)整體結(jié)構(gòu)與組件的抽象描述,,用于指導(dǎo)大型軟件系統(tǒng)各個(gè)方面的設(shè)計(jì),。 關(guān)于架構(gòu)師?(發(fā)現(xiàn)問(wèn)題à尋找突破à提出問(wèn)題à尋求支持à解決問(wèn)題à達(dá)成績(jī)效) 關(guān)注人而不是產(chǎn)品,,需找一個(gè)值得共同奮斗的目標(biāo),,營(yíng)造一個(gè)讓大家都能最大限度發(fā)揮自我價(jià)值的工作氛圍; 發(fā)掘人的優(yōu)秀,; 當(dāng)大家不再討論架構(gòu)的時(shí)候,,表明架構(gòu)已經(jīng)融入到項(xiàng)目、系統(tǒng)和開(kāi)發(fā)者中了,; 成就他人,,做成一個(gè)項(xiàng)目不但要給客戶(hù)創(chuàng)造價(jià)值,為公司盈利,,還要讓項(xiàng)目成員獲得成長(zhǎng),; 架構(gòu)師最大的價(jià)值不在于掌握了多少先進(jìn)的技術(shù),而在于將一個(gè)大系統(tǒng)切分為N個(gè)低耦合的子模塊的能力,,這些子模塊包含橫向的業(yè)務(wù)模塊,,也包含縱向的基礎(chǔ)技術(shù)模塊,這種能力一部分源自于專(zhuān)業(yè)的技術(shù)和經(jīng)驗(yàn),,還有一部分源自架構(gòu)師對(duì)于業(yè)務(wù)場(chǎng)景的理解,,對(duì)人性的把握,甚至對(duì)世界的認(rèn)知。 大型網(wǎng)站軟件系統(tǒng)的特點(diǎn) 1. 高并發(fā),、大流量(這個(gè)不用說(shuō),,要不也不叫大型網(wǎng)站了) 2. 高可用(用戶(hù)多,所以基本是要求7*24不間斷服務(wù)了) 3. 海量數(shù)據(jù)(用戶(hù)行為中產(chǎn)生的數(shù)據(jù)會(huì)更多) 4. 用戶(hù)分布廣泛,,網(wǎng)絡(luò)情況復(fù)雜(這個(gè)全國(guó)各地的網(wǎng)絡(luò)情況確實(shí)比較復(fù)雜) 5. 安全環(huán)境惡劣(由于面向的是公眾的網(wǎng)絡(luò),,所以各種安全問(wèn)題應(yīng)該都會(huì)有) 6. 需要快速變更,發(fā)布頻繁(互聯(lián)網(wǎng)公司的節(jié)奏一直比較快) 7. 漸進(jìn)式發(fā)展(在做的過(guò)程中可能需要多次試錯(cuò)和迭代) 大型網(wǎng)站架構(gòu)演化過(guò)程 1. 初始階段,,這個(gè)階段可能應(yīng)用服務(wù)器,、文件服務(wù)器、數(shù)據(jù)庫(kù)所有的資源都在同一臺(tái)服務(wù)器上 2. 應(yīng)用服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器拆分 3. 使用緩存改善網(wǎng)站的性能(貌似互聯(lián)網(wǎng)架構(gòu)中,,緩存是離不開(kāi)的話(huà)題了) 4. 使用應(yīng)用服務(wù)器的集群來(lái)改善網(wǎng)站的并發(fā)處理能力(不過(guò)一般是同構(gòu)的集群,,偽集群了) 5. 數(shù)據(jù)庫(kù)讀寫(xiě)分離(由專(zhuān)門(mén)的機(jī)器提供寫(xiě)服務(wù),專(zhuān)門(mén)的機(jī)器提供讀服務(wù),,如果讀寫(xiě)比例很大,,可以多態(tài)讀服務(wù)器) 6. 使用反向代理和CDN加速網(wǎng)站響應(yīng)(這兩個(gè)原理都是緩存,CDN部署在網(wǎng)絡(luò)提供商的機(jī)房,,使用戶(hù)在請(qǐng)求網(wǎng)站服務(wù)時(shí),,可以在距離自己最近的機(jī)房獲得數(shù)據(jù),反向代理則部署在網(wǎng)站的中心機(jī)房,,當(dāng)用戶(hù)請(qǐng)求到達(dá)中心機(jī)房后,,首先訪問(wèn)的服務(wù)器是反向代理服務(wù)器,如果反向代理服務(wù)器緩存用戶(hù)的請(qǐng)求資源,,可以直接返回給用戶(hù)) 7. 使用分布式文件系統(tǒng)和分布式數(shù)據(jù)庫(kù)系統(tǒng) 8. 使用NOSQL和搜索引擎 9. 業(yè)務(wù)拆分(這個(gè)更多的是業(yè)務(wù)層面的規(guī)劃了) 10. 分布式服務(wù)(從早起的COM+和CORBA,,到后來(lái)的SOP架構(gòu),目前比較熱門(mén)的是微服務(wù)架構(gòu)) 大型網(wǎng)站架構(gòu)演變的價(jià)值觀
架構(gòu)的模式
架構(gòu)的要素
網(wǎng)站的高性能架構(gòu)
性能測(cè)試指標(biāo)
性能測(cè)試的方法
Web前端性能優(yōu)化
應(yīng)用服務(wù)器性能優(yōu)化
1) 多線(xiàn)程(線(xiàn)程安全問(wèn)題:使用無(wú)狀態(tài)的對(duì)象,、使用局部對(duì)象,、并發(fā)訪問(wèn)資源添加鎖) 2) 資源復(fù)用(單例模式和對(duì)象池<對(duì)象創(chuàng)建比較耗時(shí)的情況下使用對(duì)象池能夠提升性能>) 3) 合理使用數(shù)據(jù)結(jié)構(gòu) 4) JVM中GC的優(yōu)化
合理使用緩存
服務(wù)器集群的Session管理
如何構(gòu)建高可用服務(wù)
高可用網(wǎng)站的軟件質(zhì)量保證
網(wǎng)站運(yùn)行監(jiān)控(不允許沒(méi)有監(jiān)控的系統(tǒng)上線(xiàn))
應(yīng)用服務(wù)器集群的伸縮性設(shè)計(jì)(伸縮性設(shè)計(jì)幾乎是稍微有點(diǎn)規(guī)模的網(wǎng)站的必須要求)
負(fù)載均衡的算法
分布式緩存的伸縮性設(shè)計(jì)(上線(xiàn)下線(xiàn)機(jī)器,,對(duì)于整個(gè)緩存集群的影響最?。?/p> 一致性Hash算法,先構(gòu)造一個(gè)長(zhǎng)度為0到2的32次方的整數(shù)環(huán),,根據(jù)節(jié)點(diǎn)名稱(chēng)的hash值,,將緩存服務(wù)器節(jié)點(diǎn)放置在Hash環(huán)上。 然后根據(jù)緩存數(shù)據(jù)的數(shù)據(jù)KEY的值計(jì)算得到hash值,,然后在hash環(huán)上順時(shí)針查找距離這個(gè)key的hash值最近的緩存服務(wù)器節(jié)點(diǎn),,從而完成key到服務(wù)器的hash映射查找。 在具體應(yīng)用中,,長(zhǎng)度為2的32次方的Hash環(huán)通常使用二叉樹(shù)查找來(lái)實(shí)現(xiàn),,二叉樹(shù)查找是查找小于查找數(shù)的最小數(shù)值,樹(shù)的最右邊和最左邊節(jié)點(diǎn)相連,,構(gòu)成環(huán)。 有個(gè)小問(wèn)題,,就是新加入節(jié)點(diǎn)3(原來(lái)有0,、1、2三個(gè)節(jié)點(diǎn)),,只影響到節(jié)點(diǎn)1,,也就是說(shuō)一部分原來(lái)需求訪問(wèn)1的緩存數(shù)據(jù)現(xiàn)在需要訪問(wèn)節(jié)點(diǎn)3,原來(lái)的0和2不受影響,,這樣的話(huà)0和2的緩存數(shù)據(jù)量和壓力是1和3的兩倍,,這種問(wèn)題咋解決呢? 使用虛擬層的手段,,將每臺(tái)物流緩存服務(wù)器虛擬為一組虛擬緩存服務(wù)器,,將虛擬服務(wù)器的hash值放置在hash環(huán)上,key在環(huán)上先找到虛擬服務(wù)器的節(jié)點(diǎn),,再得到物流服務(wù)器的信息,,最終的結(jié)果是,新加入一臺(tái)緩存服務(wù)器,,將會(huì)較為均勻的影響集群中已經(jīng)存在的所有服務(wù)器,。例如剛才討論的問(wèn)題,,新加入的節(jié)點(diǎn)3,對(duì)應(yīng)虛擬節(jié)點(diǎn)為V30,、V31,、V32,加入到一致性Hash環(huán)中,,將影響V01,、V12、V13,,這三個(gè)虛擬節(jié)點(diǎn)對(duì)應(yīng)0,、1、2三體物理機(jī),,這樣壓力就會(huì)均攤,。 擴(kuò)展性和伸縮性的區(qū)別 擴(kuò)展性是針對(duì)系統(tǒng)影響最小的情況下,系統(tǒng)功能可持續(xù)擴(kuò)展或提升的能力,。 伸縮性,,系統(tǒng)通過(guò)增加或者減少自身資源規(guī)模的方式增強(qiáng)或者減少計(jì)算處理事務(wù)的能力。 利用消息隊(duì)列降低系統(tǒng)的耦合性
利用分布式服務(wù)來(lái)打造可復(fù)用的業(yè)務(wù)平臺(tái)
1) 臃腫的注冊(cè)和發(fā)現(xiàn)機(jī)制 2) 低效的xml序列化手段 3) 開(kāi)銷(xiāo)相對(duì)比較高的http遠(yuǎn)程通信
1) 負(fù)載均衡(如何是TCP層面,,可以做到軟負(fù)載) 2) 失效轉(zhuǎn)移 3) 高效的遠(yuǎn)程通信 4) 整合異構(gòu)系統(tǒng) 5) 對(duì)應(yīng)用最小侵入 6) 服務(wù)版本管理 7) 實(shí)時(shí)監(jiān)控 8) 服務(wù)降級(jí) 9) 服務(wù)分組處理 10) 服務(wù)流控處理(SLA) 11) 按照機(jī)房等機(jī)型權(quán)重分發(fā)請(qǐng)求 網(wǎng)站的安全架構(gòu)
信息加密技術(shù)
1) 例如常見(jiàn)的MD5 2) 輸入的任何微小變化可能導(dǎo)致結(jié)果完全不同
1) 特點(diǎn)是算法簡(jiǎn)單,,加密解密效率高,,系統(tǒng)開(kāi)銷(xiāo)小 2) 缺點(diǎn)是使用同一個(gè)密鑰,有安全隱患 3) 例如DES算法和RC算法
1) 信息安全傳輸 a) 發(fā)送者A通過(guò)公開(kāi)途徑獲得信息接受者B的公鑰,,對(duì)信息進(jìn)行加密,然后通過(guò)非安全的通道把密文發(fā)送給B b) B得到密文之后,,用自己的私鑰解密,,獲得明文信息 2) 數(shù)字簽名 (和信息安全傳輸相反) a) 簽名者用自己的私鑰對(duì)信息進(jìn)行加密,然后發(fā)送給對(duì)方 b) 接收方用簽名者的公鑰對(duì)信息進(jìn)行解密,,獲得明文信息,, c) 由于私鑰只有簽名者擁有,,信息具有不可抵賴(lài)性,具有簽名的性質(zhì) 3) 常用的算法有RSA,,HTTPS中傳輸?shù)臑g覽器使用的數(shù)字證書(shū)實(shí)質(zhì)上是經(jīng)過(guò)權(quán)威機(jī)構(gòu)認(rèn)證的非對(duì)稱(chēng)加密的公鑰
一些常見(jiàn)的大型網(wǎng)站的故障案例
1) 注意日志的級(jí)別 2) 應(yīng)用程序自己的日志輸出配置和第三方組件的日志輸出分別配置
1) 數(shù)據(jù)庫(kù)做好監(jiān)控 2) 如果并發(fā)特別高的頁(yè)面,,使用緩存,切記不要使用數(shù)據(jù)庫(kù)
1) 例如一個(gè)單例對(duì)象中多處使用了synchronized,,這樣所有的并發(fā)請(qǐng)求都要排隊(duì)獲得唯一的一把鎖 2) 在使用鎖的時(shí)候一定要慎重啊
1) 緩存在提升性能的同時(shí),,在數(shù)據(jù)的一致性和系統(tǒng)的可運(yùn)維性方面帶來(lái)了很大的挑戰(zhàn)
|
|
來(lái)自: WindySky > 《架構(gòu)師知識(shí)體系》