談談網站架構設計開發的一些來龍去脈
這篇就當成最近研究網站架構問題的一個小小的總結記錄,當然肯定不全面,這個領域很大的。後面如果有新的認知,繼續補充說明。但是核心的概念和基本原理搞明白就好辦,剩下的就是工具應用和開發細節問題了。不過,“細節出魔鬼”,可別以為架構師的活好做。
架構這個問題怎麼出現的?
當然是資訊社會從單機時代推進到網路時代的產物。單機時代,大家一般買臺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,已經幾乎成了架構標配,甚至一開始就可以用它快取系統的熱點資料,減少資料庫訪問和計算。
其它工具包,在需要的時候去找合適的採用。
隨著資訊化社會的發展進步,新的產品/應用還會出現,系統的架構還會進一步演化,適應需求。
相關文章
- Alink漫談(四) : 模型的來龍去脈模型
- 淺談基於 Laravel 開發的 MeEdu 的微服務架構設計Laravel微服務架構
- AI晶片行業發展的來龍去脈AI晶片行業
- 高併發網站架構設計網站架構
- 網站架構設計網站架構
- 從GAN到WGAN的來龍去脈
- 談談GIFTO(GTO)區塊鏈的去中心化設計區塊鏈中心化
- 今日頭條:iOS 架構設計雜談iOS架構
- 關於View中mParent的來龍去脈View
- 阿里支付寶架構師:談談我眼中的高併發架構【好文】阿里架構
- Android效能最佳化來龍去脈Android
- 漫談計算機架構計算機架構
- 談談我對Ui設計師的一些觀點UI
- Linux 程式編譯過程的來龍去脈Linux編譯
- 『MySQL』深入理解事務的來龍去脈MySql
- 敲開遊戲引擎的大門,聊聊引擎的來龍去脈遊戲引擎
- 朱曄的網際網路架構實踐心得S2E6:淺談高併發架構設計的16招架構
- 工作十年,談談我的高可用架構和系統設計經驗架構
- Android效能優化來龍去脈總結Android優化
- 後端技術雜談8:OpenStack架構設計後端架構
- 【iOS印象】漫談 iOS App 架構與設計模式iOSAPP架構設計模式
- 一文搞清楚 DNS 的來龍去脈DNS
- 【Javascript】淺析JS中閉包的來龍去脈JavaScriptJS
- 淺談Nginx伺服器的內部核心架構設計!Nginx伺服器架構
- 淺談Nginx伺服器的內部核心架構設計Nginx伺服器架構
- 讀Flink原始碼談設計:FileSystemConnector中的整潔架構原始碼架構
- 百萬年薪架構師之路:談應用系統架構設計架構
- 談談關於 iOS 的架構以及應用iOS架構
- 談談從CAP定理到Lambda架構的演化架構
- 淺談網路架構及其演變架構
- 架構雜談《九》架構
- 架構雜談《八》架構
- 架構雜談《七》架構
- 架構雜談《六》架構
- 架構雜談《五》架構
- 架構雜談《二》架構
- 架構雜談《三》架構
- 架構雜談《四》架構
- InnoDB架構淺談架構