大規模分佈式網站開發設計所需知識整理

要設計開發大規模分佈式網站,首先須要掌握開發一個基本規模網站的相關知識。設計模式

知識技能分三類,一類爲開發所需,一類爲運維部署所需,一類爲設計所需。緩存

1、開發所需知識服務器

通常採用三層架構來完成網站系統的設計,所以開發所需的知識端包括:架構

一、表現層:目前經常使用的表現層工具,無疑義的是JQuery以及相似的Javascript框架,好比ReactJS、AngularJS等,HTML5;Structs2是否還流行,或者採用SpringMVC,看起來Structs已經不是主流工具了。這是直接使用的,往下最好還掌握一些更基礎的技術,好比原生Javascript、HTML、Ajax、CSS等。併發

二、業務層:毫無疑問,Spring是當前最流行的框架;框架

三、數據層:Hebernate、iBatis,Hebernate比較老牌,目前iBatic變得比較流行;運維

四、通用技術背景知識:Http協議、MySQL、Oracle、TCP/IP異步

 

2、設計所需知識:面向對象(包括分析、設計、編碼)、MVC思路、AOP、設計模式及反模式分佈式

3、運維部署所需:Jboss/Tomcat等應用服務器的安裝、配置、使用,Shell/Python腳本的編寫,Linux基礎知識(包括安裝配置、基礎使用)工具

 

有了以上知識,基本就能夠設計、開發並運維一個基本規模的網站系統了,隨着規模的擴大,須要對上述架構作修改,具體而言,可從如下幾個方面理解:

一、業務邏輯變複雜:業務邏輯變複雜,帶來的問題主要問題是對系統的掌握難度變高,開發人員須要掌握所有業務邏輯才能夠較好的對系統進行變動,所以須要將全部業務邏輯集中在一個應用中的集中式架構拆分出來,按照業務劃分子系統,每一個子系統一個應用,造成垂直架構;而後發現各個垂直子系統有不少功能是重複的,所以進一步拆分爲分佈式系統架構(也稱之爲面向服務的架構SOA),按照對外提供功能的不一樣,將系統劃分爲多層、多模塊的結構,最上層是直接提供最終用戶功能的,往下可包含一層或多層,提供抽象粒度不一樣、複用程度不一樣的基礎公共功能模塊。 除了下降開發難度外,這種分佈式架構還會帶額外好處,例如能夠對某個重要功能作集羣和高可用,能夠針對某個具體的應用或者服務的特色來配置適合的硬件等等,按時下降開發難度應該是最主要的。 

業務分佈式系統架構也會引入新的問題,最主要的是各個分佈式服務之間的通訊問題,解決辦法:同步通訊構建一個服務註冊中心,全部服務啓動時將自身註冊到該中心,須要使用某個服務時從該中心獲取可用服務地址列表,阿里、京東等通常都會開發本身的服務註冊中心,其第一個版本均基於Zookeeper來開發;異步通訊使用消息中間件,例如ActiveMQ、RabbitMQ等。

二、併發變高:從兩個方面解決這個問題:

(1)優化單臺服務器性能:須要掌握Linux調優,充分發揮機器性能;並熟悉硬件的進步,好比SSD、PCI-E等的特性;

(2)使系統具有水平擴展能力:採用LVS、Nginx等構建集羣;引入緩存,例如Memcache、Redis等,數據規模比較大須要「分佈式」的使用這些緩存

三、數據規模變大:

(1)擴充傳統關係型存儲,使之變爲集羣:MySQL集羣,包括讀寫分離、按業務分離、分庫和分表,其中分庫分表又會帶來沒法有效支持複雜查詢(例如關聯多表查詢)的問題,引入搜索引擎以及統一的數據訪問層來解決這個問題,搜索引擎例如Lucenu,數據訪問層例如淘寶的TDDL。

(2)引入NoSQL存儲:例如HBase、Redis集羣等;

(3)引入分佈式存儲:例如HDFS、FastDFS等,或者結合自身業務特色開發自身的分佈式存儲系統,例如淘寶的TFS

四、運維變複雜:

解決這個問題主要靠自動化運維繫統,完成整個分佈式系統的自動監控、以及各類事件處理,例如某業務壓力過大時自動調度閒置資源來增長該業務的服務能力,例如故障時自動專注等,爲了使得自動化運維繫統變得簡單,通常會使用虛擬機技術,例如OpenStack、VMware等,這些虛擬機又會帶來性能的額外損耗,所以又有了Docker。

相關文章
相關標籤/搜索