网站技术架构
高可用性
什么是可用性?
可用性(Availablility)是指服務可被有效訪問的特性,不是指有用性(Usability)。
能夠保證服務永遠可用嗎?
保證服務永遠可用幾乎是一件不可能完成的任務。
實現高可用的手段
預發布和線上發布的區別
預發布和線上發布的唯一不同是沒有配置在負載均衡服務中,所以外部無法訪問預發環境的機器。
保證服務可用性的意義
工程師對應用做出性能的優化、代碼的重構,但是未必能讓人直觀感受到,也許你的領導都不知道你做這件事情的意義何在。但是,如果你的產品出現了重大故障,那么CEO都會知道你的名字。
伸縮性
什么是伸縮性
指系統能夠通過增加(減少)自身資源規模的方式增強(減少)自己計算處理事務的能力。
什么是一致性Hash
在緩存服務中,會根據用戶的key將數據緩存至某個緩存節點,選擇節點的過程需要用到hash值。
傳統算法:將key的hash值模緩存節點數目,獲得index,則該index對應的節點就是數據要緩存入的節點。這種方法的缺點是動態的添加、下線緩存節點時,會導致大量的緩存無法命中和緩存遷移。
一致性hash:構建一個長度為$2^{32}$的環,所有的緩存節點會散布到環中的某些位置上,需要緩存的數據根據key計算hash值后會映射到環中的某個位置,然后找到不小于該位置且最近的緩存節點,作為其數據存放的節點。在動態的添加緩存節點時,只有和它相鄰的緩存節點中的數據受到影響。該方法的問題是,當添加節點時,會導致環上的緩存節點疏密不均,從而使得每個緩存節點上的緩存數量不均勻。
一致性hash+虛擬節點。上述問題的解決方案是在一致性hash算法的基礎上,每個緩存節點會被當做多個虛擬節點分散到環中。所以在添加一個新的緩存節點時,會當做多個虛擬節點添加到環中,這樣就防止環中緩存節點疏密不均的問題。
擴展性
什么是擴展性
指對現有系統影響最小的情況下,系統功能可持續擴展或提升的能力。
SOA是實現服務擴展性的一種方式
SOA(面向服務的設計架構)是將不同的業務模塊劃分為不同的服務,這些服務具有高內聚和低耦合的特點,通過服務發現機制,可以方便的發布新的服務以提供新的功能。
NoSQL是實現數據庫擴展性的一種方式
修改關系型數據庫的schema是困難的,并且對于稀疏性的數據而言,關系型數據庫會浪費存儲空間。而NoSQL可以提供列族來靈活的增減列屬性,并且不要求每個數據都具有所有的屬性。
不斷上新產品是互聯網公司的生存本能
互聯網公司不停上新產品是其生存的本能,誰能更快更好地推出更多的新產品,誰就活得更滋潤,那么工程師就要做好準備應付這種局面。
網絡安全
加密技術
布隆過濾器
在需要過濾大量黑名單的場景中,如果采用Hash表來存儲黑名單,則需要耗費很大的存儲空間。布隆過濾器則可以在較小的存儲空間中實現過濾功能。布隆過濾器首先申請一個固定大小的存儲空間,該空間共有n個bit,初始為0,需要加入黑名單的名字通過8個函數,映射到n個bit中的8個bit中,將這些bit置為1。如果一個名字通過上述8個函數映射到的位置都被置為1,則該名字在黑名單中。使用布隆過濾器,一個名字最多只需要占用一個字節。布隆過濾器可能會誤殺,因為存在名字不在黑名單中,但是由于其它黑名單中的名字,導致其映射的位置都被置為1。
架構師
什么是好的架構師
所以最好的軟件項目管理不是制訂計劃,組織資源,跟蹤修正項目進展,對成員進行激勵和懲罰,而是發掘項目組每個成員的優秀潛能,讓大家理解并熱愛軟件產品最終的藍圖和愿景。每個人都是為實現自我價值而努力,不是為了領工資而工作。
事成就了人
有些企業喜歡挖優秀的人,而不是去把自己打造成一個培養優秀人才的地方。殊不知:是事情成就了人,而不是人成就了事。指望優秀的人來幫自己成事,不如做成一件事讓自己和參與的人都變得優秀。
轉載于:https://www.cnblogs.com/qixidi/p/10085445.html
總結
- 上一篇: [源码和文档分享]C语言实现的基于Huf
- 下一篇: 平面镜成像