筆記 | 大型網站的特點與設計宗旨

  • 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語句優化 - 記錄,分析,查找,優化
  • 索引優化 - 提升查詢速度,也降低了增刪改的效率
  • 分區 - 分區後,表面上還是一張表,但數據散列到多個位置了
  • 分表 - 子表,將一個大表按照一定的規則,分解成多張具有獨立存儲空間的實體表
  • 做好主從,讀寫分離,高可用……

Tags: