網站技術架構

天天吃發表於2019-01-19

《大型網站技術架構:核心原理與案例分析》筆記

高可用性

什麼是可用性?

可用性(Availablility)是指服務可被有效訪問的特性,不是指有用性(Usability)。

能夠保證服務永遠可用嗎?

保證服務永遠可用幾乎是一件不可能完成的任務。

實現高可用的手段

  1. 由叢集提供服務,通過負載均衡手段將請求分發到具體節點上,在節點不可用時,從服務註冊列表中清楚。
  2. 分級管理。高優先順序的服務擁有更好和更多的資源。
  3. 超時設定。控制訪問的超時,防止大量的請求即佔用資源,又無法獲得響應。
  4. 服務降級。對一些請求直接失敗,防止機器負載過高導致機器崩潰,結果導致整個服務崩潰。

預釋出和線上釋出的區別

預釋出和線上釋出的唯一不同是沒有配置在負載均衡服務中,所以外部無法訪問預發環境的機器。

保證服務可用性的意義

工程師對應用做出效能的優化、程式碼的重構,但是未必能讓人直觀感受到,也許你的領導都不知道你做這件事情的意義何在。但是,如果你的產品出現了重大故障,那麼CEO都會知道你的名字。

伸縮性

什麼是伸縮性

指系統能夠通過增加(減少)自身資源規模的方式增強(減少)自己計算處理事務的能力。

什麼是一致性Hash

在快取服務中,會根據使用者的key將資料快取至某個快取節點,選擇節點的過程需要用到hash值。

傳統演算法:將key的hash值模快取節點數目,獲得index,則該index對應的節點就是資料要快取入的節點。這種方法的缺點是動態的新增、下線快取節點時,會導致大量的快取無法命中和快取遷移。
一致性hash:構建一個長度為$2^{32}$的環,所有的快取節點會散佈到環中的某些位置上,需要快取的資料根據key計算hash值後會對映到環中的某個位置,然後找到不小於該位置且最近的快取節點,作為其資料存放的節點。在動態的新增快取節點時,只有和它相鄰的快取節點中的資料受到影響。該方法的問題是,當新增節點時,會導致環上的快取節點疏密不均,從而使得每個快取節點上的快取數量不均勻。

一致性hash+虛擬節點。上述問題的解決方案是在一致性hash演算法的基礎上,每個快取節點會被當做多個虛擬節點分散到環中。所以在新增一個新的快取節點時,會當做多個虛擬節點新增到環中,這樣就防止環中快取節點疏密不均的問題。

擴充套件性

什麼是擴充套件性

指對現有系統影響最小的情況下,系統功能可持續擴充套件或提升的能力。

SOA是實現服務擴充套件性的一種方式

SOA(面向服務的設計架構)是將不同的業務模組劃分為不同的服務,這些服務具有高內聚和低耦合的特點,通過服務發現機制,可以方便的釋出新的服務以提供新的功能。

NoSQL是實現資料庫擴充套件性的一種方式

修改關係型資料庫的schema是困難的,並且對於稀疏性的資料而言,關係型資料庫會浪費儲存空間。而NoSQL可以提供列族來靈活的增減列屬性,並且不要求每個資料都具有所有的屬性。

不斷上新產品是網際網路公司的生存本能

網際網路公司不停上新產品是其生存的本能,誰能更快更好地推出更多的新產品,誰就活得更滋潤,那麼工程師就要做好準備應付這種局面。

網路安全

加密技術

  1. 單向雜湊加密。對明文進行加密,加密演算法固定,但是無法通過密文解密為明文。通常用於對使用者密碼進行加密,加密後存入資料庫。即使資料庫被別人獲取,也無法獲得使用者的明文密碼,也無法通過密文密碼登陸使用者賬戶。採用加鹽來防止對密文的破解。如,MD5,SHA。
  2. 對稱加密。明文的加密和密文的解密採用的都是同一個祕鑰。如,DES,RC。
  3. 非對稱加密。明文通過公鑰加密,密文通過私鑰解密。私鑰也可以對明文加密,用公鑰解密,起到數字簽名的作用。如,RSA演算法。

布隆過濾器

在需要過濾大量黑名單的場景中,如果採用Hash表來儲存黑名單,則需要耗費很大的儲存空間。布隆過濾器則可以在較小的儲存空間中實現過濾功能。布隆過濾器首先申請一個固定大小的儲存空間,該空間共有n個bit,初始為0,需要加入黑名單的名字通過8個函式,對映到n個bit中的8個bit中,將這些bit置為1。如果一個名字通過上述8個函式對映到的位置都被置為1,則該名字在黑名單中。使用布隆過濾器,一個名字最多隻需要佔用一個位元組。布隆過濾器可能會誤殺,因為存在名字不在黑名單中,但是由於其它黑名單中的名字,導致其對映的位置都被置為1。

架構師

什麼是好的架構師

所以最好的軟體專案管理不是制訂計劃,組織資源,跟蹤修正專案進展,對成員進行激勵和懲罰,而是發掘專案組每個成員的優秀潛能,讓大家理解並熱愛軟體產品最終的藍圖和願景。每個人都是為實現自我價值而努力,不是為了領工資而工作。

事成就了人

有些企業喜歡挖優秀的人,而不是去把自己打造成一個培養優秀人才的地方。殊不知:是事情成就了人,而不是人成就了事。指望優秀的人來幫自己成事,不如做成一件事讓自己和參與的人都變得優秀。

相關文章