web數據存儲
數據的存儲必然是任何網站必須經歷的事,我們可以將數據存放在不同地方,數據庫、文件、內存、程序本身、cookie,session中都可以,但是只要需要持久化保留的數據,那麽最終肯定還是落在磁盤之上的,我們的磁盤可以格式化成各種類型的文件系統,也可以由應用程序直接調用裸盤
一.存儲類型
- 塊存儲
- 文件存儲
- 對象存儲
塊存儲,顧名思義,就是一個單純的塊設備,上面不包含文件系統,一般我們新買的磁盤掛載到服務器上,叫/dev/sdb這種就是一個塊存儲,比如iscsi,共享過來你發現他直接掛載掛不了,提示要先格式化,因為它是一個裸設備,你可以將他格式化成任意的文件系統來掛載使用,就是送給你一塊硬盤的意思
文件存儲就是格式化了塊設備,現在我們一般使用xfs格式了,以前是ext4,,比如最常用的nfs,它的體現是共享過來我們可以直接掛載卸載,但是上面的文件系統是共享者那面格好的,你不能更改,就是送給你一個目錄的意思
對象存儲大多就是分布式的了,它是為了解決塊存儲不容易共享文件存儲不夠快而出現的,如果對象存儲提供了fuse,那麽對象存儲也可以方便的掛載使用,這也是glusterfs的優勢,否則的話就是根據元數據去訪問對應數據的,ceph遵循restfulapi 模式,你需要訪問對應的uri
二.存儲連接方式
DAS存儲 (直連式存儲Direct-Attached Storage),直接連接在服務器上的存儲,第一反應就是磁盤嘍
NAS存儲 (網絡接入存儲Network-Attached Storage),通過網絡來創建的存儲,sab,nfs就是
SAN存儲 (存儲區域網絡Storage Area Network),通過專門的光纖連接給服務器使用的存儲,多於大型應用或數據庫系統,缺點是成本高,很高….
所以隨著業務的不斷增長,使用分布式文件系統是我們無法逃避的過稱
分布式文件系統現在有很多了,推薦大家學習使用ceph跟glusterfs,glusterfs可以用於生產,ceph是現在一個叼叼的分布式文件系統,他集成了塊存儲,文件存儲,對象存儲三種方式,與openstack可以很好的結合,底層是一個對象存儲庫,本質意義上還是一個對象存儲
三.數據庫相關
提到數據庫,大家的第一反應都是,性能瓶頸,慢慢慢,不敢出事,出事了就可以辭職了,要是有DBA是多麽美好的事情
數據庫內存儲數據的架構有如下幾種:
- 一臺mysql拯救世界。這種做法一般就在於企業最初期、測試環境使用,因為出事了也無傷大雅
- 一主一從,高可用。讀寫都是主庫,然後同步到從庫,主庫出問題了手動切換到從庫,好處是最簡單,也保證了數據的備份,現在使用的人很多;缺點是你需要手動切換,中間還是會有延遲,而且還需要人為參與的延遲,要是他跑去上廁所或者手機關機那真是bi了poi了,再就是壓力都在主庫,讀寫同步都需要
- 一主一從,讀寫分離。寫主庫,同步到從庫,讀數據讀從庫的,但是必須毫無延遲的還是讀主庫,相比於上一種減少了大部分讀壓力;缺點在於需要開發人員的配合,因為只有他知道哪些數據可以延遲哪些不能延遲,還需要多記ip,開發人員不配合那真是bi了poi了
- 一主多從,讀寫分離,讀壓力更加分散,因為一般讀數據的頻率遠大於寫;缺點是各個從節點都需要從主同步數據,從節點越多,需要完全同步完成的時間越長
- 一主多從,負載均衡。使用lvs為讀從節點做集群,寫只寫主節點,好處是原本代碼中控制的讀ip統一交給了lvs處理,只需要有兩個ip一個讀從ip一個寫主ip;缺點跟之前還是一樣的,主依然需要同步給每個從
6.主主復制雙寫。之前一直優化的只要點都是讀操作,寫並沒有針對性優化過,這個架構好處就是分成了兩個完全平級的數據庫,每人都有可以操作,任務量減少一半。缺點是需要開發配合,還有兩個庫的自增序號需要分配奇偶數
7.主主復制單寫。這跟一主一從,讀寫分離挺像的,區別在於出現故障時的處理
8.雙主雙從。其實就是將主主復制各加了一個從庫,保證數據的冗余
9.MHA。這個就是mysql提供的方案了,資料較多,通過一個管理節點來控制大集群
數據庫的訪問:
- 直接訪問,不解釋
- 通過代理訪問,由代理區分操作連接對應機器,比較有名的mycat
但是隨著時間的推移,我們的業務量變得巨大,那麽分布式數據庫是最終手段
一個網站如果發展到了如此境地,那麽也算是不枉此生了,巨大的業務量不斷的壓垮我們,我們需要進一步對數據分類,快速查詢,業務分離,服務解耦
最後,圖都是《大型網站技術架構》上的,有興趣的可以看看,很好的一本書,他不會對你的技術有什麽快速提升,但是會對你的思想有很重要的影響
web數據存儲