《大型網站技術架構:核心原理與案例分析》筆記
可用性(Availablility)是指服務可被有效訪問的特性,不是指有用性(Usability)。算法
保證服務永遠可用幾乎是一件不可能完成的任務。數據庫
預發佈和線上發佈的惟一不一樣是沒有配置在負載均衡服務中,因此外部沒法訪問預發環境的機器。緩存
工程師對應用作出性能的優化、代碼的重構,可是未必能讓人直觀感覺到,也許你的領導都不知道你作這件事情的意義何在。可是,若是你的產品出現了重大故障,那麼CEO都會知道你的名字。安全
指系統可以經過增長(減小)自身資源規模的方式加強(減小)本身計算處理事務的能力。網絡
在緩存服務中,會根據用戶的key將數據緩存至某個緩存節點,選擇節點的過程須要用到hash值。 架構
傳統算法:將key的hash值模緩存節點數目,得到index,則該index對應的節點就是數據要緩存入的節點。這種方法的缺點是動態的添加、下線緩存節點時,會致使大量的緩存沒法命中和緩存遷移。
一致性hash:構建一個長度爲$2^{32}$的環,全部的緩存節點會散佈到環中的某些位置上,須要緩存的數據根據key計算hash值後會映射到環中的某個位置,而後找到不小於該位置且最近的緩存節點,做爲其數據存放的節點。在動態的添加緩存節點時,只有和它相鄰的緩存節點中的數據受到影響。該方法的問題是,當添加節點時,會致使環上的緩存節點疏密不均,從而使得每一個緩存節點上的緩存數量不均勻。 負載均衡
一致性hash+虛擬節點。上述問題的解決方案是在一致性hash算法的基礎上,每一個緩存節點會被當作多個虛擬節點分散到環中。因此在添加一個新的緩存節點時,會當作多個虛擬節點添加到環中,這樣就防止環中緩存節點疏密不均的問題。函數
指對現有系統影響最小的狀況下,系統功能可持續擴展或提高的能力。性能
SOA(面向服務的設計架構)是將不一樣的業務模塊劃分爲不一樣的服務,這些服務具備高內聚和低耦合的特色,經過服務發現機制,能夠方便的發佈新的服務以提供新的功能。優化
修改關係型數據庫的schema是困難的,而且對於稀疏性的數據而言,關係型數據庫會浪費存儲空間。而NoSQL能夠提供列族來靈活的增減列屬性,而且不要求每一個數據都具備全部的屬性。
互聯網公司不停上新產品是其生存的本能,誰能更快更好地推出更多的新產品,誰就活得更滋潤,那麼工程師就要作好準備應付這種局面。
在須要過濾大量黑名單的場景中,若是採用Hash表來存儲黑名單,則須要耗費很大的存儲空間。布隆過濾器則能夠在較小的存儲空間中實現過濾功能。布隆過濾器首先申請一個固定大小的存儲空間,該空間共有n個bit,初始爲0,須要加入黑名單的名字經過8個函數,映射到n個bit中的8個bit中,將這些bit置爲1。若是一個名字經過上述8個函數映射到的位置都被置爲1,則該名字在黑名單中。使用布隆過濾器,一個名字最多隻須要佔用一個字節。布隆過濾器可能會誤殺,由於存在名字不在黑名單中,可是因爲其它黑名單中的名字,致使其映射的位置都被置爲1。
因此最好的軟件項目管理不是制訂計劃,組織資源,跟蹤修正項目進展,對成員進行激勵和懲罰,而是發掘項目組每一個成員的優秀潛能,讓你們理解並熱愛軟件產品最終的藍圖和願景。每一個人都是爲實現自我價值而努力,不是爲了領工資而工做。
有些企業喜歡挖優秀的人,而不是去把本身打形成一個培養優秀人才的地方。卻不知:是事情成就了人,而不是人成就了事。期望優秀的人來幫本身成事,不如作成一件事讓本身和參與的人都變得優秀。