Tungsten Fabric SDN — SmartNIC vRouter
601
2022-05-28
這篇就當成最近研究網站架構問題的一個小小的總結記錄,當然肯定不全面,這個領域很大的。后面如果有新的認知,繼續補充說明。但是核心的概念和基本原理搞明白就好辦,剩下的就是工具應用和開發細節問題了。不過,“細節出魔鬼”,可別以為架構師的活好做。
架構這個問題怎么出現的?
當然是信息社會從單機時代推進到網絡時代的產物。單機時代,大家一般買臺PC,裝個Windows,自己搗鼓著玩。各種應用基本都是隔離的。如果你想傳輸數據,軟盤、刻錄光盤、拷貝硬盤…因為即便后來有了點網絡應用,幾十K的網速你還能傳啥呢。所以那個時候,應用軟件、游戲等等基本都是軟盤/光盤發行,網絡還指望不上。
這個時代的軟件系統也很粗糙,哪里談的上架構思想,單機能正常跑就不錯了,知足吧。后來有點進步,出現所謂“C/S”、“B/S”架構的應用模式,還處于原始階段。
架構思維和相關技術,是跟著網絡時代的迅猛發展到來的。網速開始提升,大量的網民出現,海量的信息開始上網,各種網絡應用迅速發展,網游、電商等等。最近10年,移動端風生水起,原本的桌面操作系統成了終端的一種,不再是主角。外部環境的變化和需求,催生了相關技術的發展。原本的單機應用,紛紛轉移到網絡,再延伸到手機端。Windows應用時代的開發技術,明顯不夠了。以前的程序,裝到機器上,如果出現崩潰、性能差,還可能是本機環境/硬件問題導致的,軟件就你一個人用,跟別人無關。可是網站面向全世界,最少面向一個國家的網民開放,運營的好,就是巨量的用戶在使用,如果癱瘓大家都不能打開,影響巨大。在系統設計、開發里面,這種情況下要考慮的問題是跟前面的時代截然不同的。
即使是手機應用程序,后面基本還是網站相關的技術在支撐,因為要跟Web整合。全靠自己自定義協議和模式?哪里有使用已有的成熟工業技術來的可靠,開發的快,擴展還容易。
我看到的架構知識和技術,大半來自于流量巨大的大型網站,特別是電商網站。這其實很容易理解的。電商這些年發展的非常快,網站經常搞促銷、秒殺。這些活動,給網站系統帶來極大的挑戰,壓力很大,相關的開發人員經過反復探索,總結出了很好的知識。阿里巴巴雙11的零點那一瞬間的流量,足以擊垮任何未經精心準備的系統。熱門產品的秒殺,瞬間的流量也十分的巨大。海量數據、高并發需求,是很典型的特征。這個時候,別指望什么單機的性能可以解決多少問題了,無論什么軟件/硬件,上限很快就到了,向上擴展單機處理性能是不行的。
怎么辦?谷歌怎么干的?難道谷歌搞了幾個巨無霸服務器做搜索服務?沒用的,它早就發現行不通。其它場景也是類似的道理。
網站架構核心的理念是什么?
其實我覺得并不復雜,核心性質的東西大都是很簡單的。
架構的理念,就是不斷找到系統的瓶頸和弱點,采用分而治之、緩存、異步等手段逐漸化解,并平衡處理系統各項要求(性能、安全、可用性、伸縮性、擴展性…)的過程。由此形成了架構。
很好理解,就是:兵來將擋,水來土掩。架構必須做設計規劃,你必須得懂得要做什么。但是又不能過度設計,不必也不能完全抄襲大網站的做法,要適合自己。“淘寶就是這么做的!” – 你不是淘寶,你也不是谷歌。業務需求變化快,留個適度冗余就夠了,不然會很浪費資源。架構是隨著業務變的,如果沒業務需要你變個啥。
單機思維要徹底拋棄才行。用戶瀏覽器訪問網站頁面,從打開網址,到最后看到結果,中間是一個較長的操作鏈條。通常的訪問順序是這樣:瀏覽器發出請求->DNS解析域名->瀏覽器連接服務器->服務器訪問數據庫->服務器計算數據結果->返回數據給瀏覽器。文章其實就是從每個鏈條里面做。每個不同的動作,都有增加擴展、分解流量的機會,于是乎,架構產生,系統開始膨脹起來了。
DNS解析域名,可以智能化解析到不同的地域,不同的服務器區域,就近分配計算資源。
瀏覽器連接服務器,可以使用負載均衡、反向代理等技術,接入服務器集群,把訪問分散到不同的設備上,卻可以返回同樣的結果。
服務器訪問數據庫,可以根據數據庫讀多寫少的現象,做讀寫分離。還可以采用NoSQL應用,緩存熱點數據,可以分割業務區塊,緩解數據庫訪問的壓力。再后面還可以做訪問代理,數據存儲集群化。
服務器計算數據結果,可以采用合適的語言和技術,適度緩存數據。可以采用消息隊列、RPC,異步處理,平滑訪問洪峰。
返回數據給瀏覽器,系統可以加CDN,靜態資源就近訪問。可以大力使用瀏覽器緩存手段,規避不需要的更新和訪問需要。
看吧,每項事務,后面都是一堆學問,都是非常專業的工作。由此才需要各類專業人才通力合作完成。當然,因為IT產業的發展,每個鏈條都有不錯的資源/專業服務商/軟件包/工具鏈/中間件產品,開發出來供選擇使用。具體在需要的時候,研究使用細節、如何搭配就可以了。
好多地方,是需要的時候再用。好多的事情,不遇到你也想不出關鍵點在什么地方,坑在哪里,所以坦然接受吧。
網站架構的常見演化路徑是什么?
用圖表示比較理想,這里直接抄來吧,圖片來自李智慧的書《大型網站技術架構-核心原理與案例分析》。注意,它的變化不是固定的,千萬別死板的套用,因為它是電商的,它的演化過程、設計不一定適合你的應用,要學會靈活應對。
1、初始階段的網站架構
2、應用服務和數據服務分離
3、網站使用緩存
4、應用服務器集群部署
5、數據庫讀寫分離
6、網站使用反向代理和CDN加速訪問
7、使用分布式文件和分布式數據庫系統
8、使用NoSQL系統和搜索引擎
9、應用拆分
10、分布式服務
網站架構常用的工具包是什么?
實際上要根據需求和業務特性進行適當的選擇,這些工具包都是為了解決具體問題而開發的。但是通常用的產品,基本都是Linux平臺上的開源產品,很多中間件/工具包使用Java開發 – 它是常青樹是有原因的。但中小型網站使用PHP也很多,因為數據的量級內還足夠處理,開發又方便,成本更低。一些產品使用很廣泛,比如NoSQL類的Redis,已經幾乎成了架構標配,甚至一開始就可以用它緩存系統的熱點數據,減少數據庫訪問和計算。
其它工具包,在需要的時候去找合適的采用。
隨著信息化社會的發展進步,新的產品/應用還會出現,系統的架構還會進一步演化,適應需求。
架構設計 網站 緩存
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。