我讀的是掃描版的PDF版本狮腿,此書出版于2013年9月,距離現(xiàn)在已經4年多呕诉,但對于我來說蚤霞,依然新鮮。書中的許多內容雖耳熟能詳义钉,但從未形成系統(tǒng)昧绣。以此筆記,感謝作者捶闸,也為自己留點資料夜畴。
前事不忘,后事之師删壮。念念不忘贪绘,必有回響
理論基礎:
大型網(wǎng)站核心架構要素: 性能、 可用性央碟、伸縮性税灌、擴展性、安全性
網(wǎng)站的價值在于它能為用戶提供什么價值,在于網(wǎng)站能做什么菱涤,而不是在于它是怎么做的苞也,所以在網(wǎng)站還是很小的時候就去追求網(wǎng)站的架構是舍本逐未,得不償失的粘秆。小型網(wǎng)產上最需要做的就是為用戶提供好的服務來創(chuàng)造價值如迟,得到用戶的認可,活下去攻走,野蠻生長殷勘。
產品在設計之初就需要一個明解的定位:什么是產品要實現(xiàn)的功能,什么不是產品提供的特性昔搂。在產品漫長的生命周期中玲销,會有形形色色的困難和誘惑來改變產品的發(fā)展方向,左右搖擺摘符。什么都想做的產品贤斜,最后有可能成為一個失去生命力的四不像
歸根結底,技術是為業(yè)務服務的议慰,技術選型和架構決策依賴業(yè)務乃至企業(yè)的業(yè)務上戰(zhàn)略規(guī)劃,離開業(yè)務發(fā)展的支撐和驅動奴曙,技術走不遠别凹,甚至會迷路
簡單的三層架構:應用層,服務層洽糟,數(shù)據(jù)層炉菲。
無狀態(tài)的服務(session記錄狀態(tài)),無狀態(tài)的對象(代碼級別)
服務的冪等性設計
CAP原理坤溃,認為一個提供數(shù)據(jù)服務的存儲系統(tǒng)無法同時滿足數(shù)據(jù)一致性拍霜、數(shù)據(jù)可用性、分區(qū)耐受性這三個條件薪介。
自動化發(fā)布祠饺、灰度發(fā)布
監(jiān)控數(shù)據(jù)采集乓旗,監(jiān)控管理霹期。事物的發(fā)展總是先求生存贱除,再求發(fā)展丸边,保證網(wǎng)站可用蚪黑,萬無一失膝藕,任重而道遠
計算機的任何ukdj下周都可以通過增加一個虛擬層來解決
一個良好申縮性架構設計的網(wǎng)站妨退,其設計總是走在業(yè)務發(fā)展的前面浓镜,在業(yè)務需要處理更多訪問和服務之前目木,就已經做好準備换途,當業(yè)務需要時,只需要購買或租用服務器簡單部署實施就可以了。技術團隊亦可高枕無憂军拟。
高手定律:這個世界只有遇不到的問題剃执,沒有解決不了的問題。高手之所以成為高手吻谋,是因為他們遇到了常人很難遇到的問題忠蝗,并解決了。
-
關于擴展性和申縮性:
- 擴展性:指對現(xiàn)有系統(tǒng)影響最小的情況下漓拾,系統(tǒng)功能可持續(xù)擴展或提升的能力阁最。表現(xiàn)在第ixyc基礎設施穩(wěn)定,不需要經常變更骇两,應用之間較少依賴和耦合速种,對需求變更可以敏捷響應。它是系統(tǒng)架構設計層面的開閉原則(對擴展開放低千,對修改關閉)配阵,架構設計考慮未來功能擴展,當系統(tǒng)增加新功能時示血,不需要對現(xiàn)有系統(tǒng)的結構和代碼進行修改
- 申縮性:指系統(tǒng)能夠增加(或減少)自身資源規(guī)模的方式棋傍,增強(減少)自己計算處理事務的能力。如果這種增減是成比例的难审,就被稱作線性伸縮性瘫拣。在網(wǎng)站架構中,通常指利用集群的方式增加服務器數(shù)量告喊、提高系統(tǒng)的整體事務吞吐能力麸拄。
網(wǎng)站安全性相關:防御應用攻擊 、信息加密和密鑰安全黔姜、信息過濾和反垃圾拢切、電子商務的風控
沒有絕對的安全,正如沒有絕對的自由一樣秆吵。網(wǎng)站的相對安全是通過提高攻擊門檻達到的淮椰。
故障舉例:
- 寫日志引發(fā)故障:磁盤空間不足
- 高并發(fā)訪問數(shù)據(jù)庫引發(fā)故障:高頻訪問頁面靜態(tài)化
- 高并發(fā)情況下鎖引發(fā)的故障:鎖操作要永遠謹慎
- 緩存引發(fā)的故障:當緩存已經成為網(wǎng)站架構不可或缺的一部分時,對緩存的管理就要提高到和其它服務器一樣的級別
- 應用啟動不同步引發(fā)的故障:注意校驗服務啟動的順序
- 大文件獨占磁盤引發(fā)的故障:存儲的使用需要根據(jù)不同文件類型和用途進行管理纳寂。比如大实苞、小文件獨立存儲
- 濫用生產環(huán)境引發(fā)的故障:訪問線上生產環(huán)境要規(guī)范、專人專管
- 不規(guī)范的流程引發(fā)的故障:代碼提交前使用diff工具進行比較烈疚,確認沒有提交不該提交的代碼黔牵。加強code review
- 不好的編程習慣引發(fā)故障:程序在處理輸入對象時,需要校驗
架構師篇
關注人而不是關注產品
一定要堅信:一群優(yōu)秀的人做一件他們熱愛的事爷肝,一定能取得成功猾浦。不管過程多么曲折陆错,不管外人看來有多么不可思議不靠譜
所以最好 的軟件項目管理不是制訂計劃,組織資源金赦,跟蹤修正項目進展音瓷,對成員進行激勵和懲罰,而是發(fā)掘項目組每個成員的優(yōu)秀潛能夹抗,讓大家理解并熱愛軟件產品最終的藍圖和愿景绳慎。每個人都是為實現(xiàn)自我價值而努力,不是為了領工資而工作漠烧。
一旦做到這一點杏愤,項目組每個成員都會自我驅動,自覺合作已脓,尋找達成目標的最優(yōu)路徑珊楼,并堅韌不拔的持續(xù)前進。整個過程度液,不需要拙劣的胡蘿卜和大捧厕宗,最好的獎勵就是最終達成的目標本身,最大的懲罰就是這個美好的目標沒有實現(xiàn)堕担。
這也是領導的真諦:尋找一個值得共同奮斗的目標已慢,營造一個讓大家都能最大限度發(fā)揮自我價值的工作氛圍。
沒有懶惰的員工霹购,只有沒被激發(fā)出來的激情佑惠。所有強迫員工加班的管理都,都應該為自己的無能而羞愧
發(fā)掘人的優(yōu)秀
是事情成就了人厕鹃,而不是人成就了事兢仰。
發(fā)掘人的優(yōu)秀比發(fā)掘優(yōu)秀的人更有意義
共享美好藍圖
- 藍圖應該是表述清楚的:產品要做什么乍丈,不做什么剂碴,要達到什么業(yè)務目標
- 藍圖應該是形象的:產品能為用戶創(chuàng)建什么價值、能實現(xiàn)什么樣的市場目標轻专、產品最終會長什么樣忆矛,都需要能形象想像出來
- 藍圖應該是簡單的:不管內部還是外部溝通,都能一名話說明白:我們在做什么请垛。
在項目過程中催训,架構師要保持對目標藍圖的關注,對任何偏離藍圖的設計和決定保持警惕宗收,錯誤的偏離要及時修正漫拭,必要的變更經大家討論,并需要重新獲得大家的認同混稽。
共同參與架構
- 不要只有架構師一個人捅有架構
- 讓其他人維護框架與架構文檔
學會妥協(xié)
不要企圖在項目中證明自己是正確的采驻,一定要記住审胚,你是來做軟件的,不是來當老大的礼旅。
成就他人膳叨,成就自己
活著不是為了工作,為是為了設計痘系、寫程序菲嘴,這些不是我們生活的目的。我們活著是為了成就我們自己汰翠,有原則要想成就自己龄坪,就必須首先成就他人。
每個人都有自己成就的目標奴璃,而工作是達成自我成就的一種手段:通過工作的挑戰(zhàn)悉默,發(fā)掘自我的潛能,重新認知我和世界苟穆。
職場
- 把“我的問題”表述成"我們的問題“
- 給上司提封閉式問題抄课,給下屬提開放式問題
- 指出問題而不是批評人
- 用贊同的方式提出問題。(所謂直言有諱是指想要表達的意圖要直截了當說明白雳旅,不要兜圈子跟磨,但是在表達方式上要有所避諱,照顧到當事人的感受攒盈。)
- 在解決我的問題之前抵拘,先解決你的問題
- 適當?shù)奶颖軉栴}
大型網(wǎng)站架構技術一覽
- 前端架構
瀏覽器優(yōu)化技術、CDN型豁、動靜分離僵蛛、圖片服務、反向代理迎变、DNS - 應用層架構
應用層是處理網(wǎng)站主要業(yè)務邏輯的地方
開發(fā)框架充尉、頁面渲染、負載均衡衣形、Session管理驼侠、動態(tài)頁面靜態(tài)化、業(yè)務拆分谆吴、虛擬化服務器
- 服務層架構
提供基礎服務倒源,供應用層調用,完成網(wǎng)站業(yè)務
分布式消息句狼、分布式服務笋熬、分布式緩存、分布式配置
存儲層架構
提供數(shù)據(jù)腻菇、文件的持久化存儲訪問和管理服務
分布式文件胳螟、關系數(shù)據(jù)庫苫拍、NoSql數(shù)據(jù)庫、數(shù)據(jù)同步后臺架構
網(wǎng)站應用中旺隙,除了要處理用戶實時訪問請求外绒极,還有一些后臺非實時數(shù)據(jù)分析要處理。
搜索引擎(站內)蔬捷、數(shù)據(jù)倉庫垄提、推薦系統(tǒng)數(shù)據(jù)采集與監(jiān)控
瀏覽器數(shù)據(jù)采集、服務器業(yè)務數(shù)據(jù)采集周拐、服務器性能數(shù)據(jù)采集铡俐、系統(tǒng)監(jiān)控、系統(tǒng)警報安全架構
web攻擊妥粟、數(shù)據(jù)保護數(shù)據(jù)中心機房架構
機房架構审丘、機柜架構、服務器架構
后記:
這是一本講大型網(wǎng)站架構設計的書勾给,但是大型網(wǎng)站不是設計出來的滩报,而是逐步演化出來的。所以播急,不要企圖去設計一個大型網(wǎng)站脓钾。
互聯(lián)網(wǎng)正在并將繼續(xù)改變這個世界,一切才剛剛開始桩警,你我正生縫其時可训。