1. 程式人生 > >科技發展帶來的挑戰

科技發展帶來的挑戰

在科技的快速發展推動下,在IT領域,企業會面臨兩個方面的問題。

一是如何實現網站的高可用、易伸縮、可擴充套件、高安全等目標。為了解決這樣一系列問題,迫使網站的架構在不斷髮展。從單一架構邁向高可用架構,這過程中不得不提的就是分散式。

二是使用者規模越來越大,由此產生的資料也在以指數倍增長,俗稱資料大爆炸。海量資料處理的場景也越來越多。技術上該如何面對?

1. 分散式系統1.1. 概述

分散式系統是一個硬體或軟體元件分佈在不同的網路計算機上,彼此之間僅僅通過訊息傳遞進行通訊和協調的系統。簡單來說就是一群獨立計算機集合共同對外提供服務,但是對於系統的使用者來說,就像是一臺計算機在提供服務一樣。

分散式意味著可以採用更多的普通計算機(相對於昂貴的大型機)組成分散式叢集對外提供服務。計算機越多,CPU、記憶體、儲存資源等也就越多,能夠處理的併發訪問量也就越大。

初代的web服務網站架構往往比較簡單,應用程式、資料庫、檔案等所有的資源都在一臺伺服器上。

圖:網際網路初始階段的網站架構

圖:現在網際網路網站常用的架構

從分散式系統的概念中我們知道,各個主機之間通訊和協調主要通過網路進行,所以,分散式系統中的計算機在空間上幾乎沒有任何限制,這些計算機可能被放在不同的機櫃上,也可能被部署在不同的機房中,還可能在不同的城市中,對於大型的網站甚至可能分佈在不同的國家和地區。

1.2. 特徵

分佈性:分散式系統中的多臺計算機之間在空間位置上可以隨意分佈,系統中的多臺計算機之間沒有主、從之分,即沒有控制整個系統的主機,也沒有受控的從機。

透明性:系統資源被所有計算機共享。每臺計算機不僅可以使用本機的資源,還可以使用分散式系統中其他計算機的資源(包括CPU、檔案、印表機等)。

同一性:系統中的若干臺計算機可以互相協作來完成一個共同的任務,或者說一個程式可以分佈在幾臺計算機上並行地執行。

通訊性:系統中任意兩臺計算機都可以通過通訊來交換資訊。

1.3. 常用分散式方案

分散式應用和服務

將應用和服務進行分層和分割,然後將應用和服務模組進行分散式部署。這樣做不僅可以提高併發訪問能力、減少資料庫連線和資源消耗,還能使不同應用複用共同的服務,使業務易於擴充套件。比如:分散式服務框架Dubbo。

分散式靜態資源

對網站的靜態資源如JS、CSS、圖片等資源進行分散式部署可以減輕應用伺服器的負載壓力,提高訪問速度。比如:CDN。

分散式資料和儲存

大型網站常常需要處理海量資料,單臺計算機往往無法提供足夠的記憶體空間,可以對這些資料進行分散式儲存。比如Apache Hadoop HDFS。

分散式計算

隨著計算技術的發展,有些應用需要非常巨大的計算能力才能完成,如果採用集中式計算,需要耗費相當長的時間來完成。分散式計算將該應用分解成許多小的部分,分配給多臺計算機進行處理。這樣可以節約整體計算時間,大大提高計算效率。比如Apache Hadoop MapReduce。

1.4. 分散式、叢集

分散式(distributed)是指在多臺不同的伺服器中部署不同的服務模組,通過遠端呼叫協同工作,對外提供服務。

叢集(cluster)是指在多臺不同的伺服器中部署相同應用或服務模組,構成一個叢集,通過負載均衡裝置對外提供服務。

2. 海量資料處理

公開資料顯示,網際網路搜尋巨頭百度2013年擁有資料量接近EB級別。阿里、騰訊都宣告自己儲存的資料總量都達到了百PB以上。此外,電信、醫療、金融、公共安全、交通、氣象等各個方面儲存的資料量也都達到數十或者上百PB級別。全球資料量以每兩年翻倍的速度增長,在2010年已經正式進入ZB時代,到2020年全球資料總量將達到44ZB。

資料分析的前提是有資料,資料儲存的目的是支撐資料分析。究竟怎麼去儲存龐大的資料量,是開展資料分析的企業在當下面臨的一個問題。傳統的資料儲存模式儲存容量是有大小限制或者空間侷限限制的,怎麼去設計出一個可以支撐大量資料的儲存方案是開展資料分析的首要前提。

當解決了海量資料的儲存問題,接下來面臨的海量資料的計算問題也是比較讓人頭疼,因為企業不僅追求可以計算,還會追求計算的速度、效率。

以目前網際網路行業產生的資料量級別,要處理這些資料,就需要一個更好、更便捷的分析計算方式了。傳統的顯然力不從心了,而且效率也會非常低下。這正是傳統資料分析領域面臨的另一個挑戰,如何讓去分析、計算。