Ⅰ 電子商務網站中高負載,高並發指的到底是什麼解決思路有哪些
電子商務網站高負載,簡單可以分為前端和後台:
前端主要是圖片(應該沒有文件下載吧),因為是電子商務網站,少不了大量的圖片,用戶集中的情況下,網頁載入就會變的極其緩慢。
解決思路:1、壓縮圖片,使產品圖不失真的情況下盡可能的減少體積,節省寬頻。2、增大伺服器帶寬。3、優化網頁代碼,盡量採用非同步載入方式。4、CDN
後台則是數據處理和資料庫負載,電子商務網站後台除了龐大的用戶數據要處理意外,還有大量訂單,和結算數據。
解決思路:增大資料庫伺服器配置。
高並發,是所有訪問量大的網站都會遇到的問題,並發數是指同一時刻,伺服器能接受多少次同時訪問,比如伺服器配置並發數為200,則這一刻只能允許200個用戶同時訪問,超過並發數,輕則用戶打不開網站,嚴重的則是伺服器宕機。
解決思路:1、CDN。2、增加伺服器配置
註:CDN是現在網站普遍使用的加速方案,對減輕伺服器負載,避免高並發,緩解惡意攻擊都有很好的效果,其主要原理就是將伺服器上的數據分發給多個伺服器,用戶訪問的是CDN伺服器,從而減輕和保護了網站伺服器,也就是常說的雲伺服器。
Ⅱ 大規模,高並發網站開發經驗都有哪些
高並發量網站解決方案
一個小型的網站,可以使用最簡單的html靜態頁面就實現了,配合一些圖片達到美化效果,所有的頁面均存放在一個目錄下,這樣的網站對系統架構、性能的要求都很簡單。隨著互聯網業務的不斷豐富,網站相關的技術經過這些年的發展,已經細分到很細的方方面面,尤其對於大型網站來說,所採用的技術更是涉及面非常廣,從硬體到軟體、編程語言、資料庫、WebServer、防火牆等各個領域都有了很高的要求,已經不是原來簡單的html靜態網站所能比擬的。
大型網站,比如門戶網站,在面對大量用戶訪問、高並發請求方面,基本的解決方案集中在這樣幾個環節:使用高性能的伺服器、高性能的資料庫、高效率的編程語言、還有高性能的Web容器。這幾個解決思路在一定程度上意味著更大的投入。
1、HTML靜態化
其實大家都知道,效率最高、消耗最小的就是純靜態化的html頁面,所以我們盡可能使我們的網站上的頁面採用靜態頁面來實現,這個最簡單的方法其實也是最有效的方法。但是對於大量內容並且頻繁更新的網站,我們無法全部手動去挨個實現,於是出現了我們常見的信息發布系統CMS,像我們常訪問的各個門戶站點的新聞頻道,甚至他們的其他頻道,都是通過信息發布系統來管理和實現的,信息發布系統可以實現最簡單的信息錄入自動生成靜態頁面,還能具備頻道管理、許可權管理、自動抓取等功能,對於一個大型網站來說,擁有一套高效、可管理的CMS是必不可少的。
除了門戶和信息發布類型的網站,對於交互性要求很高的社區類型網站來說,盡可能的靜態化也是提高性能的必要手段,將社區內的帖子、文章進行實時的靜態化、有更新的時候再重新靜態化也是大量使用的策略,像Mop的大雜燴就是使用了這樣的策略,網易社區等也是如此。
同時,html靜態化也是某些緩存策略使用的手段,對於系統中頻繁使用資料庫查詢但是內容更新很小的應用,可以考慮使用html靜態化來實現。比如論壇中論壇的公用設置信息,這些信息目前的主流論壇都可以進行後台管理並且存儲在資料庫中,這些信息其實大量被前台程序調用,但是更新頻率很小,可以考慮將這部分內容進行後台更新的時候進行靜態化,這樣避免了大量的資料庫訪問請求。
2、圖片伺服器分離
大家知道,對於Web伺服器來說,不管是Apache、IIS還是其他容器,圖片是最消耗資源的,於是我們有必要將圖片與頁面進行分離,這是基本上大型網站都會採用的策略,他們都有獨立的、甚至很多台的圖片伺服器。這樣的架構可以降低提供頁面訪問請求的伺服器系統壓力,並且可以保證系統不會因為圖片問題而崩潰。
在應用伺服器和圖片伺服器上,可以進行不同的配置優化,比如apache在配置ContentType的時候可以盡量少支持、盡可能少的LoadMole,保證更高的系統消耗和執行效率。
3、資料庫集群、庫表散列
大型網站都有復雜的應用,這些應用必須使用資料庫,那麼在面對大量訪問的時候,資料庫的瓶頸很快就能顯現出來,這時一台資料庫將很快無法滿足應用,於是我們需要使用資料庫集群或者庫表散列。
在資料庫集群方面,很多資料庫都有自己的解決方案,Oracle、Sybase等都有很好的方案,常用的MySQL提供的Master/Slave也是類似的方案,您使用了什麼樣的DB,就參考相應的解決方案來實施即可。
上面提到的資料庫集群由於在架構、成本、擴張性方面都會受到所採用DB類型的限制,於是我們需要從應用程序的角度來考慮改善系統架構,庫表散列是常用並且最有效的解決方案。
我們在應用程序中安裝業務和應用或者功能模塊將資料庫進行分離,不同的模塊對應不同的資料庫或者表,再按照一定的策略對某個頁面或者功能進行更小的資料庫散列,比如用戶表,按照用戶ID進行表散列,這樣就能夠低成本的提升系統的性能並且有很好的擴展性。
sohu的論壇就是採用了這樣的架構,將論壇的用戶、設置、帖子等信息進行資料庫分離,然後對帖子、用戶按照板塊和ID進行散列資料庫和表,最終可以在配置文件中進行簡單的配置便能讓系統隨時增加一台低成本的資料庫進來補充系統性能。
4、緩存
緩存一詞搞技術的都接觸過,很多地方用到緩存。網站架構和網站開發中的緩存也是非常重要。這里先講述最基本的兩種緩存。高級和分布式的緩存在後面講述。
架構方面的緩存,對Apache比較熟悉的人都能知道Apache提供了自己的緩存模塊,也可以使用外加的Squid模塊進行緩存,這兩種方式均可以有效的提高Apache的訪問響應能力。
網站程序開發方面的緩存,Linux上提供的Memory Cache是常用的緩存介面,可以在web開發中使用,比如用Java開發的時候就可以調用MemoryCache對一些數據進行緩存和通訊共享,一些大型社區使用了這樣的架構。另外,在使用web語言開發的時候,各種語言基本都有自己的緩存模塊和方法,PHP有Pear的Cache模塊,Java就更多了,.net不是很熟悉,相信也肯定有。
5、鏡像
鏡像是大型網站常採用的提高性能和數據安全性的方式,鏡像的技術可以解決不同網路接入商和地域帶來的用戶訪問速度差異,比如ChinaNet和ENet之間的差異就促使了很多網站在教育網內搭建鏡像站點,數據進行定時更新或者實時更新。在鏡像的細節技術方面,這里不闡述太深,有很多專業的現成的解決架構和產品可選。也有廉價的通過軟體實現的思路,比如Linux上的rsync等工具。
6、負載均衡
負載均衡將是大型網站解決高負荷訪問和大量並發請求採用的高端解決辦法。
負載均衡技術發展了多年,有很多專業的服務提供商和產品可以選擇,我個人接觸過一些解決方法,其中有兩個架構可以給大家做參考。
(1)、硬體四層交換
第四層交換使用第三層和第四層信息包的報頭信息,根據應用區間識別業務流,將整個區間段的業務流分配到合適的應用伺服器進行處理。
第四層交換功能就像是虛IP,指向物理伺服器。它傳輸的業務服從的協議多種多樣,有HTTP、FTP、NFS、Telnet或其他協議。這些業務在物理伺服器基礎上,需要復雜的載量平衡演算法。在IP世界,業務類型由終端TCP或UDP埠地址來決定,在第四層交換中的應用區間則由源端和終端IP地址、TCP和UDP埠共同決定。
在硬體四層交換產品領域,有一些知名的產品可以選擇,比如Alteon、F5等,這些產品很昂貴,但是物有所值,能夠提供非常優秀的性能和很靈活的管理能力。「Yahoo中國」當初接近2000台伺服器,只使用了三、四台Alteon就搞定了。
(2)、軟體四層交換
大家知道了硬體四層交換機的原理後,基於OSI模型來實現的軟體四層交換也就應運而生,這樣的解決方案實現的原理一致,不過性能稍差。但是滿足一定量的壓力還是游刃有餘的,有人說軟體實現方式其實更靈活,處理能力完全看你配置的熟悉能力。
軟體四層交換我們可以使用Linux上常用的LVS來解決,LVS就是Linux Virtual Server,他提供了基於心跳線heartbeat的實時災難應對解決方案,提高系統的強壯性,同時可供了靈活的虛擬VIP配置和管理功能,可以同時滿足多種應用需求,這對於分布式的系統來說必不可少。
一個典型的使用負載均衡的策略就是,在軟體或者硬體四層交換的基礎上搭建squid集群,這種思路在很多大型網站包括搜索引擎上被採用,這樣的架構低成本、高性能還有很強的擴張性,隨時往架構裡面增減節點都非常容易。
對於大型網站來說,前面提到的每個方法可能都會被同時使用到,這里介紹得比較淺顯,具體實現過程中很多細節還需要大家慢慢熟悉和體會。有時一個很小的squid參數或者apache參數設置,對於系統性能的影響就會很大。
最新:CDN加速技術
CDN的全稱是內容分發網路。其目的是通過在現有的Internet中增加一層新的網路架構,將網站的內容發布到最接近用戶的網路「邊緣」,使用戶可以就近取得所需的內容,提高用戶訪問網站的響應速度。
CDN有別於鏡像,因為它比鏡像更智能,或者可以做這樣一個比喻:CDN=更智能的鏡像+緩存+流量導流。因而,CDN可以明顯提高Internet網路中信息流動的效率。從技術上全面解決由於網路帶寬小、用戶訪問量大、網點分布不均等問題,提高用戶訪問網站的響應速度。
CDN的類型特點
CDN的實現分為三類:鏡像、高速緩存、專線。
鏡像站點(Mirror Site),是最常見的,它讓內容直接發布,適用於靜態和准動態的數據同步。但是購買和維護新伺服器的費用較高,還必須在各個地區設置鏡像伺服器,配備專業技術人員進行管理與維護。對於大型網站來說,更新所用的帶寬成本也大大提高了。
高速緩存,成本較低,適用於靜態內容。Internet的統計表明,超過80%的用戶經常訪問的是20%的網站的內容,在這個規律下,緩存伺服器可以處理大部分客戶的靜態請求,而原始的伺服器只需處理約20%左右的非緩存請求和動態請求,於是大大加快了客戶請求的響應時間,並降低了原始伺服器的負載。
CDN服務一般會在全國范圍內的關鍵節點上放置緩存伺服器。
專線,讓用戶直接訪問數據源,可以實現數據的動態同步。
CDN的實例
舉個例子來說,當某用戶訪問網站時,網站會利用全球負載均衡技術,將用戶的訪問指向到距離用戶最近的正常工作的緩存伺服器上,直接響應用戶的請求。
當用戶訪問已經使用了CDN服務的網站時,其解析過程與傳統解析方式的最大區別就在於網站的授權域名伺服器不是以傳統的輪詢方式來響應本地DNS的解析請求,而是充分考慮用戶發起請求的地點和當時網路的情況,來決定把用戶的請求定向到離用戶最近同時負載相對較輕的節點緩存伺服器上。
通過用戶定位演算法和伺服器健康檢測演算法綜合後的數據,可以將用戶的請求就近定向到分布在網路「邊緣」的緩存伺服器上,保證用戶的訪問能得到更及時可靠的響應。
由於大量的用戶訪問都由分布在網路邊緣的CDN節點緩存伺服器直接響應了,這就不僅提高了用戶的訪問質量,同時有效地降低了源伺服器的負載壓力。
Ⅲ 什麼是高並發,高可用,高性能
高可用:設備可用性強,具有高可替代性,故障發生後,系統能馬上恢復。
高性能:設備性能強,系統運算能力強,響應速度快。
高並發:設備並發能力強,具有同時處理多種事務的能力0.0
Ⅳ 什麼是 高可用 高並發 高性能
按照國際有關組織的定義,設備在任一隨機時刻需要和開始執行任務時,處於可工作或可使用狀態的程度。通常用可用度(A0)表示,它把可靠性、維修性、測試性、保障性等等產品的設計特性綜合成為用戶所關心的使用參數。可用性的概率度量叫「可用度」。 固有可用度AI=TBF/(TBF+MCT)其中:TBF為平均故障間隔時間(小時), MCT為平均修復時間(小時)。使用可用性A0=累計工作時間/(累計工作時間+累計不能工作時間)累計不能工作時間包括累計直接維修時間和累計維修保障延誤時間MLDT。故: A0=MTBF/(MTBF+MTTR+MLDT)可靠性的定義:產品在規定的條件下和規定的時間內,完成規定功能的能力。可靠性的概率度量叫可靠度。高可靠性是指該設備的可靠性水平高,例如平均無故障工作時間超過10000小時就比1000小時的高。可擴展性是指設備設計成為模塊結構,並且具有高可靠性水平,可以與新設計的功能模塊組合成新型裝備,具有良好的系統功能和高的可靠性、可用性水平。
Ⅳ 科普一下,什麼是網站系統的性能,可用性,可伸縮性
性能(Performance)
性能是一個網站能夠同時處理用戶請求的表現能力。 不同的視覺,有不同的表現形式,性能的指標通常包括,響應時間,並發數,吞吐量,以及性能計數器等。
其中吞吐量和性能計數器比較難理解一些,
吞吐量其實指的就是單位時間內,系統處理的請求數量。 TPS(每秒的事務數),HPS(每秒的HTTP請求數),QPS(每秒的查詢數)等等。性能一般通過緩存來解決。
性能計數器,它描述的是伺服器或者操作系統的一組指標,包括,對象與線程數,內存使用,CPU使用,磁碟和網路的I/O等等。
可用性(Availability)
可用性是在某個考察時間,系統能夠正常運行的概率或時間佔有率期望值。考察時間為指定瞬間,則稱瞬時可用性;考察時間為指定時段,則稱時段可用性;考察時間為連續使用期間的任一時刻,則稱固有可用性。它是衡量設備在投入使用後實際使用的效能,是設備或系統的可靠性、可維護性和維護支持性的綜合特性。在大型網站應用系統中,衡量的指標一般是服務的可用性用幾個9來表示。
高可用性一般通過負載均衡,數據備份,失效轉移,提高軟體質量,特別是發布時的質量來實現和保證的。
可伸縮性(Scalability)
可伸縮性,是一種對軟體系統計算處理能力的設計指標,高可伸縮性代表一種彈性,在系統擴展成長過程中,軟體能夠保證旺盛的生命力,通過很少的改動甚至只是硬體設備的添置,就能實現整個系統處理能力的線性增長,實現高吞吐量和低延遲高性能。
縱向的可伸縮性——在同一個邏輯單元內增加資源來提高處理能力。這樣的例子包括在現有伺服器上增加CPU,或者在現有的RAID/SAN存儲中增加硬碟來提高存儲量。
橫向的可伸縮性——增加更多邏輯單元的資源,並令它們像是一個單元一樣工作。大多數集群方案、分布式文件系統、負載平衡都是在幫助你提高橫向的可伸縮性
可伸縮性,一般通過DNS域名解析負載均衡,反向代理負載均衡,IP負載均衡,數據鏈路層負載均衡,改進和提高分布式緩存的演算法,利用NOSQL資料庫的可伸縮性等等。
可擴展性(Extensibility)
可擴展性,通常和可伸縮性混為一談.在軟體范疇上,是軟體系統本身的屬性,或者進一步說是設計的屬性,代碼的屬性。因為我們經常說設計的可擴展性,代碼的可擴展性.也可以說是系統設計的松耦合性。
實現方式:一般通過事件驅動架構和分布式架構來實現一個網站系統的可擴展性。
Ⅵ 常用的web伺服器軟體有哪些
1.IIS
IIS是英文Internet Information Server的縮寫,譯成中文就是"Internet信息服務"的意思。它是微軟公司主推的伺服器,最新的版本是Windows2008裡麵包含的IIS 7,IIS與Window Server完全集成在一起,因而用戶能夠利用Windows Server和NTFS(NT File System,NT的文件系統)內置的安全特性,建立強大,靈活而安全的Internet和Intranet站點。
2.ApacheApache
ApacheApache在世界上的排名是第一的,它可以運行在幾乎所有廣泛使用的計算機平台上。Apache源於NCSAhttpd伺服器,經過多次修改,不僅簡單、速度快、而且性能穩定,還可以用來做代理伺服器。
3.Nginx
Nginx不僅是一個小巧且高效的HTTP伺服器,也可以做一個高效的負載均衡反向代理,通過它接受用戶的請求並分發到多個Mongrel進程可以極大提高Rails應用的並發能力。
4.Zeus
Zeus是一個運行於Unix下的非常優秀的Web Server,據說性能超過Apache,是效率最高的Web Server之一。
5.Sun
Sun的Java系統Web伺服器也就是以前的Sun ONE Web Server。主要出現在那些運行Sun的Solaris操作系統的關鍵任務級Web伺服器上。它最新的版本號是6.1,可以支持x86版本Solaris,Red Hat Linux,HP-UX 11i, IBM AIX,甚至可以支持Windows,但它的大多數用戶都選擇了SPARC版本的Solaris操作系統。
Ⅶ 阿里雲服務對象有哪些
1.雲伺服器ECS
雲伺服器ECS:雲計算產品的基本款,幾乎每個客戶都必買的,雲伺服器從1核1G到32核64G(隨著時間推移,配置會越來越高),各種優惠都有,不同時段有不同的優惠活動,可以參考阿里雲惠網;關於伺服器配置還可以隨意升降配置,可以包年包月,也可以按量隨用隨買。對於很多小公司及個人,只購買一台雲伺服器ECS就夠用了。對於稍微大一點的企業從性能、安全、載入速度等方面諸多考慮,可能需要購買其他的阿里雲產品。
阿里雲從雲伺服器ECS衍生出來很多雲伺服器系列,例如適用於初級用戶的輕量應用伺服器,還有為了迎合各種高性能場景的雲伺服器,諸如GPU雲伺服器、FPGA雲伺服器、神龍雲伺服器等,總之都是雲伺服器,是企業上雲的基本款。
2.雲資料庫RDS
雲資料庫:目前主流是MySQL,阿里雲提供MySQL、PostgreSQL,SQL Server,MongoDB,Memcache(Redis)等不同的資料庫產品。相對於雲伺服器,雲資料庫屬於非必需品,因為用戶完全可以在雲伺服器上搭建資料庫。由於自身業務發展需要,將資料庫獨立出來,這時候就需要阿里雲的RDS雲資料庫了。
3.負載均衡SLB
負載均衡SLB:對多台雲伺服器進行流量分發服務。為了應對業務需求,企業往往會有多台雲伺服器提供伺服器,負載均衡就是將用戶的請求按照企業自定義的策略轉發到最優的伺服器。
4.對象存儲OSS
如果企業靜態文件較多(圖片、視頻等大文件),可以將大量的存儲內容轉移獨立出來,放到對象存儲OSS裡面。
5.CDN
內容分發網路,假設企業的雲伺服器在杭州,那麼位於東北地區的用戶訪問速度就會比較慢,CDN可以解決這個問題,CDN將源站內容分發至最接近用戶的節點,使用戶可就近取得所需內容,提高用戶訪問的響應速度和成功率。
6.專有網路 VPC
大家普遍會給阿里雲打上公有雲的標簽,實際上阿里雲可以提供的不僅僅是公有雲,還有私有雲、混合雲等。專有網路VPC可以幫助企業在阿里雲構建出一個隔離的網路環境,用戶可以自定義IP 地址范圍、網段、路由表和網關等,VPC可以提供更安全和靈活的網路環境,為我們構建混合雲提供服務。
7.彈性伸縮
傳統的企業自建的私有機房是不具有彈性伸縮功能的,假設企業遇到業務波峰,只能通過人為的升級硬體來應對,業務回落時就會造成硬體資源的浪費,而彈性伸縮很好的解決了這個痛點。阿里雲彈性伸縮可以管理您的集群,在高峰期自動增加ECS實例,在業務回落時自動減少ECS實例,節省基礎設施成本。另外,這個彈性伸縮是免費的。
8.DDoS高防IP
DDoS是目前比較常見的攻擊方式,為了抵禦DDoS攻擊,用戶可以通過配置高防IP,將攻擊流量引流到高防IP,確保源站的穩定可靠。講真,阿里雲的DDoS高防IP還挺貴的。
9.安騎士
當用戶購買了雲伺服器ECS後,可能會受到阿里雲發送的安騎士漏洞風險簡訊,安騎士一款主機安全軟體,為您提供主機漏洞檢測、基線檢查、病毒查殺、資產統一管理等功能,為您建立安全運維管理平台。安騎士企業版可以免費試用7天,之後想再使用,是需要付費的。
10.證書服務
我們在訪問網站時,會在瀏覽器的地址欄中看到綠色的鎖,意思是該網站是基於HTTPS協議的。前幾年網站基本上都是基於http協議,阿里雲網路網目前還是基於http協議,相對於http協議,https提供了一層加密服務,會更加安全一些。網站想要實現HTTPS,可以向阿里雲申請簽發證書伺服器,即我們常說的SSL證書。阿里雲目前可以申請到免費的SSL證書(Symantec賽門鐵克品牌)。
11.態勢感知
態勢感知說起來還比較高端,有點類似於先知的意思。態勢感知會收集企業20種原始日誌和網路空間威脅情報,利用機器學習還原已發生的攻擊,並預測未發生的攻擊,幫客戶擴大安全可見性,並集中管理雲上資產安全事件。
12.堡壘機
日防夜防家賊難防,開個玩笑哈。企業往往更加關注外部的安全威脅而忽略了企業內部,實際上運維人員誤操作或者仿冒運維人員將對企業造成很嚴重的損失,更有甚至是致命的。例如:攜程的宕機12小時事件,由於員工錯誤操作,刪除了伺服器代碼,據不完全統計,攜程宕機帶來的直接損失就是每小時160萬美金。堡壘機基於協議正向代理實現,對SSH、Windows遠程桌面、SFTP等常見運維協議的 數據流進行全程記錄,再通過協議數據流重組的方式進行錄像回放,達到運維審計的目的。
13.消息隊列MQ
說起消息隊列,最典型的應用場景就是一年一度的雙十一購物節,消息隊列是一個真正具備低延遲、高並發、高可用、高可靠,可支撐萬億級數據洪峰的分布式消息中間件。當小仙女們開啟大規模的剁手模式時,用戶大量並發訪問商品資料庫,消息隊列可以緩解瓶頸,減少頁面響應時間,當然還有其他方面的功能優勢,咱這里阿里雲網路網就不過多贅述,雙十一就是MQ的典型應用場景,大概就是這么個意思。
14.域名
域名與主機ip綁定,通過域名解析訪問到主機上的服務,主要是簡單易記,相當於別名。
15.虛擬主機
新手建站一般都是從虛擬主機開始的,無需自己配置web環境,簡單易管理,價格也便宜。
16.企業郵箱
企業郵箱就是以公司域名為後綴的郵箱,企業自建的郵件系統。目前各大互聯網大佬,例如:阿里雲、騰訊雲、網易等都有提供免費版的企業郵箱,如果想解除諸多限制,可以選購阿里雲的企業郵箱付費版。
17.雲解析DNS
DNS就是將你的域名解析到伺服器的IP上,一般來講域名解析是免費的,免費版就夠用了。
Ⅷ 大數據核心技術有哪些
大數據技術的體系龐大且復雜,基礎的技術包含數據的採集、數據預處理、分布式存儲、NoSQL資料庫、數據倉庫、機器學習、並行計算、可視化等各種技術范疇和不同的技術層面。首先給出一個通用化的大數據處理框架,主要分為下面幾個方面:數據採集與預處理、數據存儲、數據清洗、數據查詢分析和數據可視化。
一、數據採集與預處理
對於各種來源的數據,包括移動互聯網數據、社交網路的數據等,這些結構化和非結構化的海量數據是零散的,也就是所謂的數據孤島,此時的這些數據並沒有什麼意義,數據採集就是將這些數據寫入數據倉庫中,把零散的數據整合在一起,對這些數據綜合起來進行分析。數據採集包括文件日誌的採集、資料庫日誌的採集、關系型資料庫的接入和應用程序的接入等。在數據量比較小的時候,可以寫個定時的腳本將日誌寫入存儲系統,但隨著數據量的增長,這些方法無法提供數據安全保障,並且運維困難,需要更強壯的解決方案。
Flume NG作為實時日誌收集系統,支持在日誌系統中定製各類數據發送方,用於收集數據,同時,對數據進行簡單處理,並寫到各種數據接收方(比如文本,HDFS,Hbase等)。Flume NG採用的是三層架構:Agent層,Collector層和Store層,每一層均可水平拓展。其中Agent包含Source,Channel和 Sink,source用來消費(收集)數據源到channel組件中,channel作為中間臨時存儲,保存所有source的組件信息,sink從channel中讀取數據,讀取成功之後會刪除channel中的信息。
NDC,Netease Data Canal,直譯為網易數據運河系統,是網易針對結構化資料庫的數據實時遷移、同步和訂閱的平台化解決方案。它整合了網易過去在數據傳輸領域的各種工具和經驗,將單機資料庫、分布式資料庫、OLAP系統以及下游應用通過數據鏈路串在一起。除了保障高效的數據傳輸外,NDC的設計遵循了單元化和平台化的設計哲學。
Logstash是開源的伺服器端數據處理管道,能夠同時從多個來源採集數據、轉換數據,然後將數據發送到您最喜歡的 「存儲庫」 中。一般常用的存儲庫是Elasticsearch。Logstash 支持各種輸入選擇,可以在同一時間從眾多常用的數據來源捕捉事件,能夠以連續的流式傳輸方式,輕松地從您的日誌、指標、Web 應用、數據存儲以及各種 AWS 服務採集數據。
Sqoop,用來將關系型資料庫和Hadoop中的數據進行相互轉移的工具,可以將一個關系型資料庫(例如Mysql、Oracle)中的數據導入到Hadoop(例如HDFS、Hive、Hbase)中,也可以將Hadoop(例如HDFS、Hive、Hbase)中的數據導入到關系型資料庫(例如Mysql、Oracle)中。Sqoop 啟用了一個 MapRece 作業(極其容錯的分布式並行計算)來執行任務。Sqoop 的另一大優勢是其傳輸大量結構化或半結構化數據的過程是完全自動化的。
流式計算是行業研究的一個熱點,流式計算對多個高吞吐量的數據源進行實時的清洗、聚合和分析,可以對存在於社交網站、新聞等的數據信息流進行快速的處理並反饋,目前大數據流分析工具有很多,比如開源的strom,spark streaming等。
Strom集群結構是有一個主節點(nimbus)和多個工作節點(supervisor)組成的主從結構,主節點通過配置靜態指定或者在運行時動態選舉,nimbus與supervisor都是Storm提供的後台守護進程,之間的通信是結合Zookeeper的狀態變更通知和監控通知來處理。nimbus進程的主要職責是管理、協調和監控集群上運行的topology(包括topology的發布、任務指派、事件處理時重新指派任務等)。supervisor進程等待nimbus分配任務後生成並監控worker(jvm進程)執行任務。supervisor與worker運行在不同的jvm上,如果由supervisor啟動的某個worker因為錯誤異常退出(或被kill掉),supervisor會嘗試重新生成新的worker進程。
當使用上游模塊的數據進行計算、統計、分析時,就可以使用消息系統,尤其是分布式消息系統。Kafka使用Scala進行編寫,是一種分布式的、基於發布/訂閱的消息系統。Kafka的設計理念之一就是同時提供離線處理和實時處理,以及將數據實時備份到另一個數據中心,Kafka可以有許多的生產者和消費者分享多個主題,將消息以topic為單位進行歸納;Kafka發布消息的程序稱為procer,也叫生產者,預訂topics並消費消息的程序稱為consumer,也叫消費者;當Kafka以集群的方式運行時,可以由一個服務或者多個服務組成,每個服務叫做一個broker,運行過程中procer通過網路將消息發送到Kafka集群,集群向消費者提供消息。Kafka通過Zookeeper管理集群配置,選舉leader,以及在Consumer Group發生變化時進行rebalance。Procer使用push模式將消息發布到broker,Consumer使用pull模式從broker訂閱並消費消息。Kafka可以和Flume一起工作,如果需要將流式數據從Kafka轉移到hadoop,可以使用Flume代理agent,將Kafka當做一個來源source,這樣可以從Kafka讀取數據到Hadoop。
Zookeeper是一個分布式的,開放源碼的分布式應用程序協調服務,提供數據同步服務。它的作用主要有配置管理、名字服務、分布式鎖和集群管理。配置管理指的是在一個地方修改了配置,那麼對這個地方的配置感興趣的所有的都可以獲得變更,省去了手動拷貝配置的繁瑣,還很好的保證了數據的可靠和一致性,同時它可以通過名字來獲取資源或者服務的地址等信息,可以監控集群中機器的變化,實現了類似於心跳機制的功能。
二、數據存儲
Hadoop作為一個開源的框架,專為離線和大規模數據分析而設計,HDFS作為其核心的存儲引擎,已被廣泛用於數據存儲。
HBase,是一個分布式的、面向列的開源資料庫,可以認為是hdfs的封裝,本質是數據存儲、NoSQL資料庫。HBase是一種Key/Value系統,部署在hdfs上,克服了hdfs在隨機讀寫這個方面的缺點,與hadoop一樣,Hbase目標主要依靠橫向擴展,通過不斷增加廉價的商用伺服器,來增加計算和存儲能力。
Phoenix,相當於一個Java中間件,幫助開發工程師能夠像使用JDBC訪問關系型資料庫一樣訪問NoSQL資料庫HBase。
Yarn是一種Hadoop資源管理器,可為上層應用提供統一的資源管理和調度,它的引入為集群在利用率、資源統一管理和數據共享等方面帶來了巨大好處。Yarn由下面的幾大組件構成:一個全局的資源管理器ResourceManager、ResourceManager的每個節點代理NodeManager、表示每個應用的Application以及每一個ApplicationMaster擁有多個Container在NodeManager上運行。
Mesos是一款開源的集群管理軟體,支持Hadoop、ElasticSearch、Spark、Storm 和Kafka等應用架構。
Redis是一種速度非常快的非關系資料庫,可以存儲鍵與5種不同類型的值之間的映射,可以將存儲在內存的鍵值對數據持久化到硬碟中,使用復制特性來擴展性能,還可以使用客戶端分片來擴展寫性能。
Atlas是一個位於應用程序與MySQL之間的中間件。在後端DB看來,Atlas相當於連接它的客戶端,在前端應用看來,Atlas相當於一個DB。Atlas作為服務端與應用程序通訊,它實現了MySQL的客戶端和服務端協議,同時作為客戶端與MySQL通訊。它對應用程序屏蔽了DB的細節,同時為了降低MySQL負擔,它還維護了連接池。Atlas啟動後會創建多個線程,其中一個為主線程,其餘為工作線程。主線程負責監聽所有的客戶端連接請求,工作線程只監聽主線程的命令請求。
Ku是圍繞Hadoop生態圈建立的存儲引擎,Ku擁有和Hadoop生態圈共同的設計理念,它運行在普通的伺服器上、可分布式規模化部署、並且滿足工業界的高可用要求。其設計理念為fast analytics on fast data。作為一個開源的存儲引擎,可以同時提供低延遲的隨機讀寫和高效的數據分析能力。Ku不但提供了行級的插入、更新、刪除API,同時也提供了接近Parquet性能的批量掃描操作。使用同一份存儲,既可以進行隨機讀寫,也可以滿足數據分析的要求。Ku的應用場景很廣泛,比如可以進行實時的數據分析,用於數據可能會存在變化的時序數據應用等。
在數據存儲過程中,涉及到的數據表都是成千上百列,包含各種復雜的Query,推薦使用列式存儲方法,比如parquent,ORC等對數據進行壓縮。Parquet 可以支持靈活的壓縮選項,顯著減少磁碟上的存儲。
三、數據清洗
MapRece作為Hadoop的查詢引擎,用於大規模數據集的並行計算,」Map(映射)」和」Rece(歸約)」,是它的主要思想。它極大的方便了編程人員在不會分布式並行編程的情況下,將自己的程序運行在分布式系統中。
隨著業務數據量的增多,需要進行訓練和清洗的數據會變得越來越復雜,這個時候就需要任務調度系統,比如oozie或者azkaban,對關鍵任務進行調度和監控。
Oozie是用於Hadoop平台的一種工作流調度引擎,提供了RESTful API介面來接受用戶的提交請求(提交工作流作業),當提交了workflow後,由工作流引擎負責workflow的執行以及狀態的轉換。用戶在HDFS上部署好作業(MR作業),然後向Oozie提交Workflow,Oozie以非同步方式將作業(MR作業)提交給Hadoop。這也是為什麼當調用Oozie 的RESTful介面提交作業之後能立即返回一個JobId的原因,用戶程序不必等待作業執行完成(因為有些大作業可能會執行很久(幾個小時甚至幾天))。Oozie在後台以非同步方式,再將workflow對應的Action提交給hadoop執行。
Azkaban也是一種工作流的控制引擎,可以用來解決有多個hadoop或者spark等離線計算任務之間的依賴關系問題。azkaban主要是由三部分構成:Relational Database,Azkaban Web Server和Azkaban Executor Server。azkaban將大多數的狀態信息都保存在MySQL中,Azkaban Web Server提供了Web UI,是azkaban主要的管理者,包括project的管理、認證、調度以及對工作流執行過程中的監控等;Azkaban Executor Server用來調度工作流和任務,記錄工作流或者任務的日誌。
流計算任務的處理平台Sloth,是網易首個自研流計算平台,旨在解決公司內各產品日益增長的流計算需求。作為一個計算服務平台,其特點是易用、實時、可靠,為用戶節省技術方面(開發、運維)的投入,幫助用戶專注於解決產品本身的流計算需求。
四、數據查詢分析
Hive的核心工作就是把SQL語句翻譯成MR程序,可以將結構化的數據映射為一張資料庫表,並提供 HQL(Hive SQL)查詢功能。Hive本身不存儲和計算數據,它完全依賴於HDFS和MapRece。可以將Hive理解為一個客戶端工具,將SQL操作轉換為相應的MapRece jobs,然後在hadoop上面運行。Hive支持標準的SQL語法,免去了用戶編寫MapRece程序的過程,它的出現可以讓那些精通SQL技能、但是不熟悉MapRece 、編程能力較弱與不擅長Java語言的用戶能夠在HDFS大規模數據集上很方便地利用SQL 語言查詢、匯總、分析數據。
Hive是為大數據批量處理而生的,Hive的出現解決了傳統的關系型資料庫(MySql、Oracle)在大數據處理上的瓶頸 。Hive 將執行計劃分成map->shuffle->rece->map->shuffle->rece…的模型。如果一個Query會被編譯成多輪MapRece,則會有更多的寫中間結果。由於MapRece執行框架本身的特點,過多的中間過程會增加整個Query的執行時間。在Hive的運行過程中,用戶只需要創建表,導入數據,編寫SQL分析語句即可。剩下的過程由Hive框架自動的完成。
Impala是對Hive的一個補充,可以實現高效的SQL查詢。使用Impala來實現SQL on Hadoop,用來進行大數據實時查詢分析。通過熟悉的傳統關系型資料庫的SQL風格來操作大數據,同時數據也是可以存儲到HDFS和HBase中的。Impala沒有再使用緩慢的Hive+MapRece批處理,而是通過使用與商用並行關系資料庫中類似的分布式查詢引擎(由Query Planner、Query Coordinator和Query Exec Engine三部分組成),可以直接從HDFS或HBase中用SELECT、JOIN和統計函數查詢數據,從而大大降低了延遲。Impala將整個查詢分成一執行計劃樹,而不是一連串的MapRece任務,相比Hive沒了MapRece啟動時間。
Hive 適合於長時間的批處理查詢分析,而Impala適合於實時互動式SQL查詢,Impala給數據人員提供了快速實驗,驗證想法的大數據分析工具,可以先使用Hive進行數據轉換處理,之後使用Impala在Hive處理好後的數據集上進行快速的數據分析。總的來說:Impala把執行計劃表現為一棵完整的執行計劃樹,可以更自然地分發執行計劃到各個Impalad執行查詢,而不用像Hive那樣把它組合成管道型的map->rece模式,以此保證Impala有更好的並發性和避免不必要的中間sort與shuffle。但是Impala不支持UDF,能處理的問題有一定的限制。
Spark擁有Hadoop MapRece所具有的特點,它將Job中間輸出結果保存在內存中,從而不需要讀取HDFS。Spark 啟用了內存分布數據集,除了能夠提供互動式查詢外,它還可以優化迭代工作負載。Spark 是在 Scala 語言中實現的,它將 Scala 用作其應用程序框架。與 Hadoop 不同,Spark 和 Scala 能夠緊密集成,其中的 Scala 可以像操作本地集合對象一樣輕松地操作分布式數據集。
Nutch 是一個開源Java 實現的搜索引擎。它提供了我們運行自己的搜索引擎所需的全部工具,包括全文搜索和Web爬蟲。
Solr用Java編寫、運行在Servlet容器(如Apache Tomcat或Jetty)的一個獨立的企業級搜索應用的全文搜索伺服器。它對外提供類似於Web-service的API介面,用戶可以通過http請求,向搜索引擎伺服器提交一定格式的XML文件,生成索引;也可以通過Http Get操作提出查找請求,並得到XML格式的返回結果。
Elasticsearch是一個開源的全文搜索引擎,基於Lucene的搜索伺服器,可以快速的儲存、搜索和分析海量的數據。設計用於雲計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。
還涉及到一些機器學習語言,比如,Mahout主要目標是創建一些可伸縮的機器學習演算法,供開發人員在Apache的許可下免費使用;深度學習框架Caffe以及使用數據流圖進行數值計算的開源軟體庫TensorFlow等,常用的機器學習演算法比如,貝葉斯、邏輯回歸、決策樹、神經網路、協同過濾等。
五、數據可視化
對接一些BI平台,將分析得到的數據進行可視化,用於指導決策服務。主流的BI平台比如,國外的敏捷BI Tableau、Qlikview、PowrerBI等,國內的SmallBI和新興的網易有數(可點擊這里免費試用)等。
在上面的每一個階段,保障數據的安全是不可忽視的問題。
基於網路身份認證的協議Kerberos,用來在非安全網路中,對個人通信以安全的手段進行身份認證,它允許某實體在非安全網路環境下通信,向另一個實體以一種安全的方式證明自己的身份。
控制許可權的ranger是一個Hadoop集群許可權框架,提供操作、監控、管理復雜的數據許可權,它提供一個集中的管理機制,管理基於yarn的Hadoop生態圈的所有數據許可權。可以對Hadoop生態的組件如Hive,Hbase進行細粒度的數據訪問控制。通過操作Ranger控制台,管理員可以輕松的通過配置策略來控制用戶訪問HDFS文件夾、HDFS文件、資料庫、表、欄位許可權。這些策略可以為不同的用戶和組來設置,同時許可權可與hadoop無縫對接。