解讀大型網站系統架構的演化

解讀大型網站系統架構的演化

大型網站的架構是根據業務需求不斷完善的,根據不同的業務特征會做特定的設計和考慮,本文只是講述一個常規大型網站會涉及的一些技術和手段。
作者:李平來源:LEE的博客

前言

一個成熟的大型網站(如淘寶、京東等)的系統架構并不是開始設計就具備完整的高性能、高可用、安全等特性,它總是隨著用戶量的增加,業務功能的擴展逐漸演變完善的,在這個過程中,開發模式、技術架構、設計思想也發生了很大的變化,就連技術人員也從幾個人發展到一個部門甚至一條產品線。所以成熟的系統架構是隨業務擴展而完善出來的,并不是一蹴而就;不同業務特征的系統,會有各自的側重點,例如淘寶,要解決海量的商品信息的搜索、下單、支付,例如騰訊,要解決數億的用戶實時消息傳輸,百度它要處理海量的搜索請求,他們都有各自的業務特性,系統架構也有所不同。盡管如此我們也可以從這些不同的網站背景下,找出其中共用的技術,這些技術和手段可以廣泛運行在大型網站系統的架構中,下面就通過介紹大型網站系統的演化過程,來認識這些技術和手段。

一、最開始的網站架構

最初的架構,應用程序、數據庫、文件都部署在一臺服務器上,如圖:

image

二、應用、數據、文件分離

隨著業務的擴展,一臺服務器已經不能滿足性能需求,故將應用程序、數據庫、文件各自部署在獨立的服務器上,并且根據服務器的用途配置不同的硬件,達到最佳的性能效果。

image

三、利用緩存改善網站性能

在硬件優化性能的同時,同時也通過軟件進行性能優化,在大部分的網站系統中,都會利用緩存技術改善系統的性能,使用緩存主要源于熱點數據的存在,大部分網站訪問都遵循28原則(即80%的訪問請求,最終落在20%的數據上),所以我們可以對熱點數據進行緩存,減少這些數據的訪問路徑,提高用戶體驗。

image

緩存實現常見的方式是本地緩存、分布式緩存。當然還有CDN、反向代理等,這個后面再講。本地緩存,顧名思義是將數據緩存在應用服務器本地,可以存在內存中,也可以存在文件,OSCache就是常用的本地緩存組件。本地緩存的特點是速度快,但因為本地空間有限所以緩存數據量也有限。分布式緩存的特點是,可以緩存海量的數據,并且擴展非常容易,在門戶類網站中常常被使用,速度按理沒有本地緩存快,常用的分布式緩存是Membercache、Redis。

四、使用集群改善應用服務器性能

應用服務器作為網站的入口,會承擔大量的請求,我們往往通過應用服務器集群來分擔請求數。應用服務器前面部署負載均衡服務器調度用戶請求,根據分發策略將請求分發到多個應用服務器節點。

架構4

常用的負載均衡技術硬件的有F5,價格比較貴,軟件的有LVS、Nginx、HAProxy。LVS是四層負載均衡,根據目標地址和端口選擇內部服務器,Nginx和HAProxy是七層負載均衡,可以根據報文內容選擇內部服務器,因此LVS分發路徑優于Nginx和HAProxy,性能要高些,而Nginx和HAProxy則更具配置性,如可以用來做動靜分離(根據請求報文特征,選擇靜態資源服務器還是應用服務器)。

五、數據庫讀寫分離和分庫分表

隨著用戶量的增加,數據庫成為最大的瓶頸,改善數據庫性能常用的手段是進行讀寫分離以及分表,讀寫分離顧名思義就是將數據庫分為讀庫和寫庫,通過主備功能實現數據同步。分庫分表則分為水平切分和垂直切分,水平切換則是對一個數據庫特大的表進行拆分,例如用戶表。垂直切分則是根據業務不同來切換,如用戶業務、商品業務相關的表放在不同的數據庫中。

架構3

六、使用CDN和反向代理提高網站性能

假如我們的服務器都部署在成都的機房,對于四川的用戶來說訪問是較快的,而對于北京的用戶訪問是較慢的,這是由于四川和北京分別屬于電信和聯通的不同發達地區,北京用戶訪問需要通過互聯路由器經過較長的路徑才能訪問到成都的服務器,返回路徑也一樣,所以數據傳輸時間比較長。對于這種情況,常常使用CDN解決,CDN將數據內容緩存到運營商的機房,用戶訪問時先從最近的運營商獲取數據,這樣大大減少了網絡訪問的路徑。比較專業的CDN運營商有藍汛、網宿。

而反向代理,則是部署在網站的機房,當用戶請求達到時首先訪問反向代理服務器,反向代理服務器將緩存的數據返回給用戶,如果沒有沒有緩存數據才會繼續走應用服務器獲取,也減少了獲取數據的成本。反向代理有Squid,Nginx。

架構5

七、使用分布式文件系統

用戶一天天增加,業務量越來越大,產生的文件越來越多,單臺的文件服務器已經不能滿足需求。需要分布式的文件系統支撐。常用的分布式文件系統有NFS。

架構5.5

八、使用NoSql和搜索引擎

對于海量數據的查詢,我們使用nosql數據庫加上搜索引擎可以達到更好的性能。并不是所有的數據都要放在關系型數據中。常用的NOSQL有mongodb和redis,搜索引擎有lucene。

架構6

九、將應用服務器進行業務拆分

隨著業務進一步擴展,應用程序變得非常臃腫,這時我們需要將應用程序進行業務拆分,如百度分為新聞、網頁、圖片等業務。每個業務應用負責相對獨立的業務運作。業務之間通過消息進行通信或者同享數據庫來實現。

架構7

十、搭建分布式服務

這時我們發現各個業務應用都會使用到一些基本的業務服務,例如用戶服務、訂單服務、支付服務、安全服務,這些服務是支撐各業務應用的基本要素。我們將這些服務抽取出來利用分部式服務框架搭建分布式服務。淘寶的Dubbo是一個不錯的選擇。

架構8

小結

大型網站的架構是根據業務需求不斷完善的,根據不同的業務特征會做特定的設計和考慮,本文只是講述一個常規大型網站會涉及的一些技術和手段。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/286634.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/286634.shtml
英文地址,請注明出處:http://en.pswp.cn/news/286634.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【ArcGIS風暴】西北地區氣象臺站年均NDVI與年均氣溫和降水的相關性分析

在研究植被動態變化與氣候的關系時,通常通過計算植被NDVI值與氣溫和降水的相關系數來描述相關性的大小。如下圖所示,計算了西北地區分布的氣象臺站與氣溫和降水的相關性并作圖可視化。 下面詳細說明整個實現過程。 一、計算相關系數 1. 原理分析 通過計算年均N…

python 全解坦克大戰 輔助類 附完整代碼【雛形】

我正在博客之星評選,歡迎投票給我 會從投票人中抽獎機械鍵盤書,中了會私聊地址 投票連接是:https://bbs.csdn.net/topics/603955346 投票連接是:https://bbs.csdn.net/topics/603955346 投票連接是:https://bbs.csdn.…

vc++ mfc中拖動效果的實現 借助于CImageList

拖動是界面編程頻繁使用的一個效果,在windows系統下可謂大行其道。縱觀時下的應用軟件幾乎各個都支持各種各樣拖動的效果,windows7更是把拖動做到了極致。其實說起來拖動的實現也很簡單,對于有句柄的對象都可以通過MoveWindow或SetWindowPos實…

從瀏覽器地址欄輸入url到顯示頁面的步驟

從瀏覽器地址欄輸入url到顯示頁面的步驟(以HTTP為例)- 在瀏覽器地址欄輸入URL- 瀏覽器查看緩存,如果請求資源在緩存中并且新鮮,跳轉到轉碼步驟 - 如果資源未緩存,發起新請求 - 如果已緩存,檢驗是否足夠新鮮,足夠…

有序的Map集合--LinkedHashMap

提出問題: 在寫一個dao的時候,我的需求是這個dao是一個萬能的,目前的方法只有一個查詢出實體類對應的表中所有的數據,通過傳入的對象,利用反射獲取實體類中的屬性名,屬性類型,利用字符串拼接獲取…

Leetcode之僅僅反轉字母

1 題目 給定一個字符串 S,返回 “反轉后的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置發生反轉。 示例 1:輸入:"ab-cd" 輸出:"dc-ba" 示例 2:輸入:"a-bC-dEf-ghIj" 輸出:"j-Ih-gfE-dCba" 示例 3:輸入:&qu…

【SignalR全套系列】之在.Net Core 中實現長輪詢

微信公眾號:趣編程ACE關注可了解更多的.NET日常實戰開發技巧,如需源碼 請后臺留言 源碼;前文回顧【SignalR全套系列】之在.Net Core 中實現Server-Send Events消息推送【SignalR全套系列】之在.NetCore中實現WebSocket雙工通信【SignalR全套系列】之在.N…

完美解決ArcGIS10.2和Erdas9.2軟件沖突的方法:共存!

用過ArcGIS和Erdas軟件的都知道,二者存在著服務的沖突,為了解決共存的問題,筆者曾多次重裝系統,但未能如愿以償。其實不需要相互關閉服務如此麻煩。那如何在安裝有arcgis的電腦安裝erdas并解決沖突呢?直接上視頻教程。…

架構師之路16年精選50篇

2016精選索引,點擊標題閱讀相關文章。【方法論】《秒殺系統架構優化思路》《分布式ID生成器》《互聯網架構,如何進行容量設計》《線程數究竟設多少合理》《單點系統架構的可用性與性能優化》《關于負載均衡的一切》《異構服務器負載均衡及過載保護》《LV…

yii 前后臺分離及登陸驗證

2019獨角獸企業重金招聘Python工程師標準>>> 比較合理的做法其實是分成兩個框架來布署;然而這樣說法也太絕對。 事實上是針對不同系統,應采用不同的方法。如為CMS系統,則不需很復雜的權限管理,但如果有管理員與會員之分…

雙谷人才財務管理(序)

IT是一個迅速發展的行業,教育是一個良心的行業,兩者交集——IT培訓,在整個市場中占有一個不可或缺的地位。好多大學生,抱怨找不到工作;好多企業找不到合適的程序員,這幾年這個問題越來越嚴重。。。。于是IT…

Android之打開手機系統相冊

1、需求 打開系統相冊,獲取圖片進行掃描操作 2、代碼實現 Intent pickIntent new Intent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CONTENT_URI);pickIntent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");Ca…

Kibana

2019獨角獸企業重金招聘Python工程師標準>>> Kibana是一個基于瀏覽器頁面的Elasticsearch前端展示工具。Kibana全部使用HTML語言和Javascript編寫的,查詢語法是基于Lucene的查詢語法。允許布爾運算符、通配符和字段篩選。注意關鍵字要大寫 全文搜索 在搜…

電腦QQ能登上,網頁打不開的解決辦法

打開360衛士,在功能大全里選擇網絡優化,斷網急救箱。 可以看到DNS服務異常、瀏覽器配置異常,點擊立即修復。

個人黑名單 抄襲恥辱墻

抄襲恥辱墻 博主抄襲文原文我愛Python數據挖掘https://blog.csdn.net/weixin_38037405/article/details/125862095https://blog.csdn.net/A757291228/article/details/117464313黃埔數據分析https://blog.csdn.net/weixin_39060517/article/details/118024847https://blog.csdn…

快速掌握 ASP.NET 身份認證框架 Identity(一)

推薦關注「碼俠江湖」加星標,時刻不忘江湖事ASP.NET Core 內置了一個強大的身份認證框架 Identity,掌握它可以讓我們快速開發高安全的身份認證功能,不僅如此,它還是一個基于數據庫的用戶管理系統,其中包含了大量的輔助…

淺談大型web系統架構

動態應用,是相對于網站靜態內容而言,是指以c/c、php、Java、perl、.net等服務器端語言開發的網絡應用軟件,比如論壇、網絡相冊、交友、BLOG等常見應用。動態應用系統通常與數據庫系統、緩存系統、分布式存儲系統等密不可分。   大型動態應用…

Android之webview長按超鏈接類型獲取鏈接文字及url、長按圖片鏈接類型分別獲取圖片和鏈接的url

1 、需求 webview長按超鏈接獲取鏈接文字及urlwebview長按圖片鏈接類型獲分別獲取圖片和鏈接的url 2、解決辦法 1)、設置webview的OnLongClickListener事件,關鍵代碼如下 companion object {const val LINK_TYPE = 1const val IMAGE_LINK_TYPE = 2}var mHandler = object :…

PostgreSQL 統計信息pg_statistic格式及導入導出dump_stat - 兼容Oracle

標簽 PostgreSQL , dump_stat , 統計信息 , 導出導入 背景 《PostgreSQL 規格評估 - 微觀、宏觀、精準 多視角估算數據庫性能(選型、做預算不求人)》 EXPLAIN是PG數據庫用于輸出SQL執行計劃的語法, 1、生成的執行計劃中包含COST一項。 如果校準了成本因子&#xff0…

PHP: 手把手編寫自己的 MVC 框架實例教程

1 什么是MVC MVC模式(Model-View-Controller)是軟件工程中的一種軟件架構模式,把軟件系統分為三個基本部分:模型(Model)、視圖(View)和控制器(Controller)。 …