筆記 | 大型網站的特點與設計宗旨
- 2019 年 11 月 10 日
- 筆記
閱讀文本大概需要 4 分鐘。

大型網站的9大特點
1. 高並發,流量大 2. 高可用 3. 大數據 4. 敏捷開發,迭代快 5. 用戶量龐大 6. 可持續升級 7. 安全級別高 8. 可彈性伸縮 9. 吞吐量高
高並發,流量大 網站的請求量大:
- 百度日均訪問量50億+;
- QQ早就突破1億用戶同時在線;
- 淘寶雙十一驚人的並發量
高可用
假設伺服器宕機了,用戶就無法訪問 我們就必須保證網站穩定的向用戶提供7*24小時不間斷的服務 哪怕有伺服器節點宕機了,依然用備用集確保服務正常訪問
大數據
通過大量伺服器已經存儲系統管理海量數據
敏捷開發,迭代快
需求快速變更,發布頻繁 提高用戶體驗,優化各種操作,形形色色的需求快速迭代, 一般大型網站,1~2周迭代一次,中小型網站發布更為頻繁
用戶量龐大
用戶分布廣,分散的用戶個體,分布在全國(全球)各地 網路情況複雜,各大運營商網路互通困難
可持續升級
所有的大型網站都是從小網站,一步一步從初創不斷發展到今天 逐步演變,單體,集群,分散式,微服務,
安全級別高
互聯網的開放性,使得更容易受到攻擊 樹大招風,你越牛X,就愈會有黑客和同行來攻擊你 伺服器安全漏洞,後台程式碼判斷,API介面暴露,可執行腳本上傳….
可彈性伸縮
伺服器可以動態的增加,不需要的時候可以適當的減少
吞吐量高
要保證用戶每次的請求響應速度是最快的
大型網站的設計宗旨
合久必分 快取和頁面靜態化 集群 CDN 分散式系統 非同步 NoSQL 資料庫優化
合久必分
- 分層是最常見的架構模式 MVC,便於程式碼的解耦和工作的合理分配
- 應用和靜態資源分離 將圖片,影片,css,js等資源文件,放置到專門的伺服器上。通過專門的域名去訪問 存放靜態資源的伺服器,一般都使用Nginx提供反向代理,理論上單個Nginx可以承受5萬並發
- 業務分離 分類各個業務模組,獨立出一個子系統或子服務
快取和頁面靜態化
- 快取是數據量大最直接的解決方案。
快取可以在第一次獲取數據的時候創建,也可以在程式啟動和快取失效之後立即創建。
- 記憶體快取:主要是 ConcurrentHashMap
- 快取框架:常用的有Ehcache,Memcache和redis等。
- 頁面靜態化,原理跟快取非常類似。
快取是保存數據,而頁面靜態化是保存帶數據的頁面。
使用模板技術生成,如 thymeleaf,freemaker等。
集群
- 高可用和負載均衡的手段
- 多台伺服器部署相同的應用構成一個集群
- 保證負載均衡的同時提升系統的可用性,互相災備
CDN
- 集群頁面快取伺服器,每個節點直接返回快取的頁面
- 網站發展到很龐大的時候,用戶分散全國各地
- 採用CDN,用戶可以訪問到最近的服務節點(聯通,電信,北京,上海)
分散式系統
- 多系統,多模組,多中間件,多伺服器共同協作整合的一個整體
- 將不同的業務放到不同的伺服器中,處理一個請求可能用到多台伺服器
- 分散式架構,分散式文件系統,分散式資料庫,分散式鎖,分散式事務,分散式配置,分散式限流,日誌收集
非同步
- 非同步解耦,生產者和消費者,消息隊列
- 在高並發時進行流量削峰
- 批量讀取 與 延遲修改
NoSQL
- NoSQL在處理海量數據的速度效率都是關係型資料庫無法匹敵的。
- 並且他的靈活性使網站的伸縮性得以很好的保證
資料庫優化
- 數據備份 - 定期為資料庫做好冷熱備份,不能因為節點宕機而導致數據丟失
- 表結構優化 - 通過引擎,欄位的選擇
- SQL語句優化 - 記錄,分析,查找,優化
- 索引優化 - 提升查詢速度,也降低了增刪改的效率
- 分區 - 分區後,表面上還是一張表,但數據散列到多個位置了
- 分表 - 子表,將一個大表按照一定的規則,分解成多張具有獨立存儲空間的實體表
- 做好主從,讀寫分離,高可用……