計算機軟體技術的生命週期簡單劃分可以分為開發和運維兩個階段。開發階段圍繞業務模型對現實世界模擬,資料沉澱,計算分析,得出結論創造價值。運維階段是為了維護好開發階段創造的軟體成果,幫助軟體成果更平穩的服務好真實世界。運維階段關注在任何時間,以任意資源,在任意機器上啟動服務,並幫助客戶及時發現服務,合理分配流量,監控服務的執行狀態,平穩處置服務失敗,公升級等等。本文將分dev和ops兩個階段對近年來的主要技術發展脈絡做一些簡要介紹。(當然資源管理和任務排程的技術也在一些離線分布式計算dev場景中使用,如yarn技術,這裡不做詳細區分。)
軟體作為一種商品,是通過在計算機世界模擬現實世界來為人類貢獻價值。在這個過程中有兩個核心元素:資料和計算(還有乙個應該是通訊或者叫資料傳輸)。資料是生產過程中的基礎原料,也是真實世界在計算機世界中的屬性沉澱,是真實世界與計算機世界連線的紐帶。計算是計算機世界的原力,是計算機能夠為人類提供的最重要最強大的能力之一。為了能夠幫助計算機為真實世界產出價值,儲存軟體和計算軟體是兩個重要的基石。近些年來,大部分的技術變革都圍繞這兩點進行。
剛剛提到資料是現實世界的屬性沉澱。那麼人們最原始的開荒動力就是將這些資料儲存起來,以備查閱。最原始的方式就是通過檔案系統。但是檔案系統查閱很不方便,除了替代現實世界中的記事本並沒有額外收益。如果在翻看的時候能夠做到想看哪一天,想看哪一塊的內容就能所想即所得,生活一定很美妙。於是便有了。
關係型資料庫
關係型資料庫是一種加持了計算能力(簡單資料分析能力)的儲存系統。這種能力很大程度上是通過精妙的儲存結構設計實現的,計算能力體現並不多,因此我並不把他歸類到計算的範疇。上面提到人們迫切的需要一種隨時按照條件翻閱記事本的能力(公司查賬,個人快速檢視某天的日記)。於是工程師們通過設計了一系列精巧的資料結構,索引,b+tree等等,幫助人們實現了快速按照條件查詢,拉取資料,統計count,不同實體資料關聯等等功能。頓時世界變得很美好,借助資料庫工程師們迅速在計算機世界構建了很多現實世界的模型。財務報表,報紙**,商場都搬到了計算機世界。
分布式nosql
本來人類的生活因為關係型的資料庫的誕生變得很美好,自動化程度空前。那麼為什麼後來還會有類似於hbase的nosql系統產生那。那是因為資料太多,關係型資料庫太昂貴。關係型資料庫的技術一直被幾家大公司所壟斷,所以使用成本很高。隨著通訊技術的發展,使得網際網路使用者越來越多,更多的現實世界屬性被搬遷到計算機世界,生產了大量的資料資料。這些資料資料的儲存如果全部用關係型資料庫那麼成本太高,而且如此海量的資料也突破了單機極限,需要採取集群的方式儲存。在google的帶領下,分布式浪潮席捲全球。分布式檔案系統,分布式非關係型資料庫應運而生。但是與關係型資料庫相比,分布式儲存作為乙個新生兒在基本統計計算能力上有很大的短板,這與分布式儲存的分布式和海量特性也有一定的關係。使用者無法通過簡單的sql語句對資料進行簡單的分析處理了(此處分布式計算框架呼之欲出hive就是對這一塊的補充,參看計算章節)。
搜尋引擎
資料越來越多,又沒有了sql我們怎樣才能繼續美好的生活那。答案就是搜尋引擎,搜尋引擎的底層技術與關係型資料庫的索引技術相似。為了幫助人們在海量資料中快速找到自己感興趣的資訊,工程師設計了分布式的索引,搜尋引擎。典型的代表就是開源的elasticsearch實現。搜尋引擎幫助人們實現了類sql的搜尋,關聯,聚合分析功能。人們又能歡快的使用便捷的資訊服務,在**上查資料,在git上搜尋感興趣的專案。這一技術也加速了計算機技術的普及,幫助遠在千里外的工程師快速找到手頭bug的解決方案(面向搜尋引擎程式設計)。
當然在這一過程中,為了應對現實世界海量的計算機操作行為對計算機模擬世界的影響,工程師們還創造了分布式快取,訊息佇列等多種儲存形態,此處不一一展開。
sql計算
在前面的儲存介紹時,我們介紹了關係型資料庫借助於巧妙的儲存結構設計獲得了很好的計算能力加持。人們借助於這種能力可以方便的進行資料關聯分析,隨時拿到自己感興趣的計算結果。這一技術幫助人們形成了很多自動化能力,這種計算至今還深刻影響著我們的生活。此處不在多說(前面提到過這更多的是儲存帶來的變革不是由計算推動的)。
批處理計算
隨著人們計算機生活的頻繁化,生產出的資料資料也越來越多,而且隨著儲存技術的變革,很多資料資料是以非關係型的形式沉澱下來的。如何對這些資料進行二次生產產生價值,這個時候傳統的sql關聯分析已經無法使用了,跟重要的是隨著現實世界需求的膨脹,我們需要超越關聯分析的手段。分布式批處理技術就此誕生,這一技術以hadoop的mapreduce元件為代表。簡而言之,批處理技術是希望通過計算手段構建乙個資料集合全域性結果。就是說我們需要通過對整個資料集(海量的分布式儲存中)進行一次全域性的資料分析之後得出乙個結論。這個計算邏輯可以是任意的,使用者自定義的不侷限於sql提供的原子能力。這種計算模式的出現為資料生產提供了無限的可能。批處理後來為了應對效能問題,發展衍生出了spark這種純記憶體的計算框架。有了批處理技術,工程師們可以對計算機世界中的海量的存量資料進行分析,提取出每個使用者昨天,上個月或者全年的興趣熱點,為業務提供無限的可能。
流處理計算
批處理技術提供了存量資料的分析手段,但是需求是不斷膨脹的,永遠無法得到真正的滿足。我們需要更快更及時的分析手段,比如在交通場景,通過對城市交通歷史資料批處理能夠知道城市歷史上最擁堵的路口,可是又能怎麼樣。我們最迫切的需求是要知道此時此刻我們這個城市**正在擁堵。比批計算更具時效性的流計算模式出現了。工程師從內心深處發出乙個疑問,資料一定要先存到乙個地方才能進行分析麼?批計算發生在資料持久化之後,而流計算發生在資料持久化前,在資料流動的過程中就順便進行了計算。流計算框架的代表有storm,spark和flink。資料在流動的過程中,流過乙個個計算運算元組成的處理流程圖,每個運算元通過使用者自定義的計算邏輯得到想要的結果,這些結果可以立刻推送到使用者的眼前,實現準實時的資料分析。有了流計算,我們就能夠在手機導航裡實時看到擁堵情況,切換路線如絲般順滑。生活更加美好。
智慧型計算
有了批處理和流處理,似乎世界變得很完美,我們已經實時獲取到想要的資訊了,我們還想要什麼,人類自己也不知道。是的,人類不知道,那就讓機器來回答。ai技術來到了最好的時代。前面的計算模式的短板在於分析的深度,不管是批處理還是流處理更多的還是基於邏輯計算,反應的還是人為設定的計算規則。更為深度的資訊是人腦無法參透的,比如大多數人更感興趣哪條新聞哪個商品,人眼是如何從一幅畫裡找到一輛車的。這些都是邏輯規則無法做到的。
從上面的發展歷程看,代表了不同階段人類對計算的不同需求,計算模式也由輕變重。es可以看做一種輕量級的工具,使用者只需要很少的工作量就可以得到一些簡單的分析結果(通過組合es提供的一些原子能力實現)。如果想結合自己的業務自定義一些複雜的邏輯計算,那麼在海量資料條件下就需要動用分布式計算框架(如mr,mr其實是在yarn上面的乙個應用模板,基於yarn使用者可以實現任意的自定義處理邏輯)。如果有時效性要求則需要使用流計算框架,流計算和批計算其實本質上區別不大,流計算可以看做由無數個小批處理連線而成,由於是級聯形成所以可以引入流水線機制實現效能優化,因此才有了批流一體的思想。再進一步,如果希望深度分析資料的潛在規律,則需要通過機器學習的方法。資料分析的深度逐漸深入,框架也逐步變重,學習使用成本逐步變大。因此在實踐中要科學選擇,貼合自己的業務實際需求。
網際網路最近技術應用1 網際網路電視
網路電視 ntv,network television 是以寬頻網路為載體,以視音訊多 為形式,以互動個性化為特性,為所有寬頻終端使用者提供全方位有償服務的業務。網路電視是在數位化和網路化背景下產生,是網際網路絡技術與電視技術結合的產物,在整合電視與網路兩大傳播媒介過程中,網路電視既保留了電視形象直...
mysql 網際網路 MySQL網際網路業務使用建議
一 基礎規範 表儲存引擎必須使用innodb 表字符集預設使用utf8,必要時候使用utf8mb4 解讀 1 通用,無亂碼風險,漢字3位元組,英文1位元組 2 utf8mb4是utf8的超集,有儲存4位元組例如表情符號時,使用它 禁止使用儲存過程,檢視,觸發器,event 解讀 1 對資料庫效能影響...
網際網路與網際網路的區別
網際網路的英文單詞是 internet,網際網路的英文單詞是 internet。在英語中,專有名詞首字母都是大寫,用於特指某一事物。大寫的 internet 是作為乙個專有名詞出現的,所指的是由阿帕網發展而來的現如今全球最大的計算機網路,稱之為網際網路。小寫 internet 是作為乙個普通單詞出現...