1. 程式人生 > >揭祕大型網站架構進化之路

揭祕大型網站架構進化之路

網際網路上有很多關於網站架構的各種分享,有些主要是從運維和基礎架構的角度去分析的(堆機器,做叢集),太關注技術細節實現,普通的開發人員基本看不太懂。

本文第一章節將主要介紹大型網站基礎架構的擴充套件,第二章節則重點從應用程式的角度去介紹網站架構的擴充套件和演變。

一,大型網站基礎架構的擴充套件

草根時期,快速開發網站並上線。當然,通常只是先試水,使用者規模也沒有形成,經濟能力和投入也非常有限。

640?wx_fmt=png&wxfrom=5&wx_lazy=1

有一定的業務量和使用者規模了,想提升網站速度,於是,快取出場了。

0?wx_fmt=png

市場反響還不錯,使用者量每天在增長,資料庫瘋狂讀寫,逐漸發現一臺伺服器快撐不住了。於是,決定把DB和APP做分離。

0?wx_fmt=jpeg

單臺數據庫也感覺快撐不住了,一般都會嘗試做“讀寫分離”。由於大部分網際網路“讀多寫少”的特性所決定的。Salve的臺數,取決於按業務評估的讀寫比例。

0?wx_fmt=jpeg

資料庫層面是緩解了,但是應用程式層面也出現了瓶頸,由於訪問量增大,加上早期程式設計師水平有限寫的程式碼也很爛,人員流動性也大,很難去維護和優化。所以,很常用的辦法還是“堆機器”。

0?wx_fmt=jpeg

加機器誰都會加,關鍵是加完之後得有效果,加完之後可能會引發一些問題。例如非常常見的:頁面輸出快取和本地快取的問題,Session儲存的問題......

0?wx_fmt=png

到這裡,已經基本做到了DB層面和應用層面的橫向擴充套件了,可以開始關注一些其它方面,例如:站內搜尋的精準度,對DB的依賴,開始引入全文索引。

Java領域用的較多的是Lucene、Solr等,而php領域用的比較多的是sphinx/coreseek。

0?wx_fmt=jpeg

到目前為止,一個能夠承載日均百萬級訪問量的中型網站架構基本介紹完了。

二,從應用程式的角度去看架構擴充套件

在做擴充套件滿足了基本的效能需求後,我們會逐漸關注“可用性”(也就是我們通常聽別人吹牛時說的SLA、幾個9)。如何保證真正“高可用”,也是個難題。

0?wx_fmt=jpeg

幾乎主流的大中型網際網路公司,都會有用到類似的架構,只是節點數不同而已。

還有一招用的比較多的,那就是動靜分離。可以需要開發人員配合(把靜態資源放獨立站點下),也可以不需要開發人員配合(利用7層反向代理來處理,根據字尾名等資訊來判斷資源型別)。有了單獨的靜態檔案伺服器之後,儲存也是個問題,也需要擴充套件。多臺伺服器的檔案怎麼保持一致,買不起共享儲存怎麼辦?分散式檔案系統也派上用場了。

0?wx_fmt=jpeg

還有一專案前國內外用的非常普遍的技術CDN加速。目前該領域競爭激烈,也已經比較便宜了。國內南北網際網路問題比較嚴重,使用CDN可以有效解決這個問題。

CDN的基本原理並不複雜,可以理解為智慧DNS+Squid反向代理快取 ,然後需要有很多機房節點提供訪問。

0?wx_fmt=jpeg

截止目前為止,都沒有怎麼去改動應用程式的架構,或者說通俗點,都不怎麼需要大面積的修改程式碼。

如果上面那些手段都用光了,還是支撐不住怎麼辦?不停的加機器也不是辦法啊?

隨著業務越來越複雜,網站的功能越來越多,雖然部署層面是採用的叢集,但是應用程式架構層面還是“集中式”的,這樣會導致很多耦合,不便於開發、維護,而且容易“一榮俱損”。所以,通常會把網站拆分出不同的子站點來單獨宿主。

0?wx_fmt=png

應用都拆了,由於單個數據庫的連線,QPS,TPS,I/O處理能力都非常有限,DB層面也可以去做垂直分庫操作

0?wx_fmt=png

拆分應用和DB之後,其實還是會有很多問題。不同的站點,裡面可能會有相同邏輯和功能的程式碼。當然,對於一些基礎的功能我們可以封裝DLL或者Jar包去到處提供引用,但是這種強依賴也很容易造成一些問題(版本問題、依賴關係等處理起來非常麻煩)。這樣,傳說中的SOA的價值就得到體現了。

0?wx_fmt=jpeg

應用、服務之間還是會出現一些依賴問題,這時候,高吞吐量的解耦利器出現了

0?wx_fmt=png

最後,還介紹一個大型網際網路公司都用的絕技--分庫分表。個人經驗,不是業務發站和各方面非常迫切,不要輕易走這一步。

因為分庫分表誰都會幹,關鍵是拆完之後怎麼辦。分庫分表主要考慮以下幾個維度:橫向拆分,縱向拆分,分散式資料訪問層,資料庫中介軟體(代理)

推薦閱讀:

覺得有幫助?請轉發給更多人!

0?wx_fmt=png0?wx_fmt=png

架構師小祕圈,聚集10萬架構師的小圈子!不定期分享技術乾貨,行業祕聞!彙集各類奇妙好玩的話題和流行動向!長按左側圖片,掃碼加入架構師微信群!

相關推薦

揭祕大型網站架構進化

網際網路上有很多關於網站架構的各種分享,有些主要是從運維和基礎架構的角度去分析的(堆機器,做叢集

(轉載) 中大型網站架構演變

分布式文件系統 客戶端 應用層 七層 並發 mysql keepal 接口 mysql主從 標簽:網站架構 大型網站架構 原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://lizhenliang

大型網站架構演化

一、服務進化之路 單伺服器階段 應用程式、資料庫、檔案都在一臺伺服器上。 應用服務與資料服務分離 應用程式、資料庫、檔案分別部署在不同的伺服器上。 引入快取緩

大型網站的演化——讀《大型網站技術架構

大型網站的演化之路——讀《大型網站技術架構》 ____ author:姚毛毛的部落格 & 妖生 01 大型網站or軟體有什麼特點? 高併發、大流量,微信都日活10億了 7×24的高可用,俗稱的4個9(99.99%) 海量資料的儲存與管理 全國甚至全球的使用者分佈,複雜網路 安全環境很差 需求變更頻

大型網站架構總結網站核心架構要素

架構的含義: 一種比較通俗的說法是"最高層次的規劃,難以改變的決定"這些規劃和決定奠定了事物未來發展的方向和最終藍圖。具體到軟體架構,系統的各個重要組成部分及其關係構成了系統的架構,這些組成部分可以是具體的功能模組,也可以是非功能的設計和決策,他們相互關聯組成一個整體。共同

大型網站架構進化階段

1、 最開始,由於某些想法或者愛好,於是在網際網路上搭建了一個網站,這個時候甚至有可能主機都是租借的,但由於我們先關注架構的演變歷程,因此就假設這個時候已經是託管了一臺主機,並且有一定的帶寬了。 初始階段網站架構:一臺Server滿足剛需,應用程式、資料庫、檔案等所有資源都

各大電商系統架構進化

https://github.com/aalansehaiyang/technology-talk/blob/master/system-architecture/%E7%BB%8F%E5%85%B8%E6%A1%88

大型網站架構

存儲 cache 查詢 動靜分離 面向服務 keepalive 網站 web 共享存儲 初期:   單臺服務器部署   web與數據庫獨立部署   動靜分離-初期   數據庫主從與查詢緩存   七層負負載均衡和共享存儲 中期:   數據庫架構擴展   soa面向服務器架構

一個成熟的大型網站系統架構演化

二、應用、資料、檔案分離 隨著業務的擴充套件,一臺伺服器已經不能滿足效能需求,故將應用程式、資料庫、檔案各自部署在獨立的伺服器上,並且根據伺服器的用途配置不同的硬體,達到最佳的效能效果。 三、利用快取改善網站效能 在硬體優化效能的同時,同時也通過軟體進行效能優化,在大部分的網站系統中,都會利

從程式設計小白到架構總監:大型網站系統架構演化

前言 一個成熟的大型網站(如淘寶、京東等)的系統架構並不是開始設計就具備完整的高效能、高可用、安全等特性,它總是隨著使用者量的增加,業務功能的擴充套件逐漸演變完善的,在這個過程中,開發模式、技術架構、設計思想也發生了很大的變化,就連技術人員也從幾個人發展到一個

大型網站架構分布式消息隊列(轉)

工作經驗 大型網站 異步處理 消費 min 實現 通知 ima 可能 以下是消息隊列以下的大綱,本文主要介紹消息隊列概述,消息隊列應用場景和消息中間件示例(電商,日誌系統)。 本次分享大綱 消息隊列概述 消息隊列應用場景 消息中間件示例 JMS消息服務 常用

大型網站架構分布式消息隊列

並且 other splay 2016年 均衡 tails lin 庫存 寫入 大型網站架構之分布式消息隊列 轉載

高並發與高可用實戰基礎知識大型網站架構特征(一)

電商系統 保障系統 iptables ID 失敗重試 容量 設計原則 服務調用 冪等 大型網站架構特征: 1.高並發?(用戶訪問量比較大) 解決方案:拆分系統、服務化、消息中間件、緩存、並發化 高並發設計原則 系統設計不僅需要考慮實現業務功能,還要保證系統高並發、高

大型網站架構百萬PV

rop 就是 priority ipaddress -s 模式 lse 故障 shutdown PV(page view)即頁面瀏覽量,通常是衡量一個網絡新聞頻道或網站甚至一條網絡新聞的主要指標。網頁瀏覽數是評價網站流量最常用的指標之一,簡稱為PV。 案例概述本案

大型網站架構百萬PV網站架構案例

nta java 解壓縮 記錄日誌 tex jsp position .tar.gz 註意 一、案例概述 本案例采用四層模式實現,主要分為前端反向代理、web層、數據庫緩存層和數據庫層。 前端反向代理采用主備模式 web層采用群集模式 數據庫緩存層采用主備模式 數據庫層采

大型網站架構千萬PVRabbitMQ

內存 col fir ebs bin vim start ofo abd 簡介 MQ全稱為Message Queue, 消息隊列(MQ)是一種應用程序對應用程序的通信方法。應用程序通過讀寫出入隊列的消息(針對應用程序的數據)來通信,而無需專用連接來鏈接它們。消息傳遞指的是

Java高架構師、分散式架構、高可擴充套件、高效能、高併發、效能優化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分散式專案實戰學習架構

工作1-5年開發經驗,當你們提出漲工資的時候,或者要offer的時候底氣怎麼樣,是不是底氣十足,不給漲工資就辭職,是不是有自信提出來主管、或者是專案經理都能同意,他們相當設法把你留住。如果這樣你才是成功。什麼技術都沒有何談工資! 給你分析一下這些技術,給大家羅列一些技術,看

揭祕:螞蟻金服 SOFA 分散式架構演進

本文根據黃挺(花名魯直)老師在中生代社群第101期微信群分享整理而成首發於中生代架構(archt

大型網站架構架構演變

處於這個網際網路開發時代,作為一名軟體工程師,我們經常會聽到大型網站架構這個字眼,那到底什麼是大型網站呢,這樣的網站又是一種什麼樣的架構設計呢?今天我們就開始談談大型網站架構設計系列,首先我們今天講講大型網站架構設計是如何演變的,跟著我一起出發吧。一、大型網站系統的特點高併發

你愛的小米是怎樣玩轉大資料的?大咖揭祕小米大資料整合架構演化

小米有眾多的智慧終端和裝置,資料規模非常大,對於資料採集和大資料整合提出了非常高的要求。此次演講主要介紹小米大資料整合解決方案,主要包括小米資料流平臺的架構演化,整個鏈路的資料質量監控,資料流生態的構建思路,最後會介紹典型的應用場景、未來的規劃和思考。 分享大綱: 1、問題與挑戰 2、資