互聯網技術概述
互聯網技術日新月異,發展得比較快,這裡想聊聊互聯網技術有哪些,不涉及很具體的原理介紹,從最高層次上去把握技術領域。
從以下幾個方面來介紹:存儲、計算、運維、穩定性四個方面來介紹。
1. 存儲技術
這是一個很大的話題,用一本書來介紹它都不為過。存儲分為持久化存儲和非持久化存儲。持久化存儲如mysql等,非持久化存儲如memcache等。存儲又可以分為以下幾個方向來介紹:
1)持久化存儲:mysql,這裡關注的是如何快速、安全存儲和訪問數據。如mysql主備切換、mysql讀寫分離,當然這是最基本的內容。當數據量一上來後,要使用到分庫分表,分庫分表最大的難題就是規則定義和路由,目前也有一些分庫分表的中間件,如mycat等。做到這一步,基本上持久化層數據沒有什麼問題,理倫上做到了水平擴展的分表,可以存儲海量的數據。這裡提一點,mysql有一個binlog,可以解析這個binlog用作後面做很多的事,可以結合mq來完成你意想不到的事。
2)非持久化存儲:這類主要用於緩存、消息等領域。緩存是性能優化常用的手段之一,如mysql+redis可以解決很大一部分問題;消息是兩個系統進行通信暫存的手段之一,用於流量削峰、異構系統通信、非同步處理等。
以上兩類是常見的模式,如果算上大數據方向,還有一些存儲技術,如HDFS等分散式存儲框架,在我看來,這些分散式存儲框架吸起了單機存儲的思想,在單機存儲系統中,有元數據管理+數據塊存儲,在分散式存儲中,有資源管理節點+數據存儲節點。
為了加快存儲訪問速度,加了如索引、緩存等技術,存儲引擎是一個關鍵點,不管我們看到有多少產品,底層的存儲引擎其實不多:hash、B樹、LSM。這裡有幾點可以和大家分享下:數據訪問具有局部訪問特性(面向塊存儲)、有序訪問比無序訪問要快、數據讀寫之前要尋道(盡量減少尋道時間,順序寫效率才會高)。
2. 計算
計算也是一個大的話題,常用計算有任務調度(quartz,spring-batch)和分散式計算。quartz用於單機還不錯,不太適合用於並行計算,其實數據量一大,並行計算的威力才會發揮出來,它的思想是任務分片,將任務劃分成一系列的子任務,然後節點拿到子任務後,在內部它也會分成多線程來處理,一個主線程獲取所有的數據,然後其它子線程拿數據進行處理。分散式計算框架也比較多,如mapreducer、storm等,分散式計算的思想還是分而治之的思想。
後面的兩個話題先放一下,大家最關心的是互聯網中常說的高並發、高性能、高可用。其實理解上面的三高得從本質上去看,何為高並發、高可用?從本質上去理解這些,有些手段就會自動出來。高可用的本質就是我一台機器掛了,不能影響服務,如何做到?冗餘唄,多節點部署就會解決這個問題,這是最簡單的層次,深一點的可能考慮限流和服務降級(部分可用與down機是兩個不同的效果),服務也可以分等級,有些可以使用,有些不可以使用。所以理解高並發也是一樣的。
最好的服務是能支持橫向擴展的,就是訪問量上來了,加機器就行,其實要做到這一點,還是不容易的,能夠支持橫向擴展有一個要求,就是機器或者服務之間是獨立的,要做到這一點,可以從服務獨立性和依賴數據集中化來考慮,也即大家常說的無狀態。
今天先洋洋洒洒地寫了一部分,後面會再寫些detail的內容出來和大家分享,這裡面的每一項都是一個大的話題,裡面包含的內部很多內容,感興趣的同學可以一起聊聊,個人微信:13512717641。
推薦閱讀:
※Netflix實戰指南:規模化時序數據存儲
※手機攝影之極速外援——東芝極至超速M401 64G TF卡評測
※中國會在存儲器領域取得成功嗎?| 半導體行業觀察