GlusterFS架構(gòu)與維護(hù)

GlusterFS架構(gòu)與維護(hù)

標(biāo)簽:存儲(chǔ)Glusterfs

官方網(wǎng)站http://www.gluster.org/

下載地址http://download.gluster.org/pub/gluster/glusterfs/

GlusterFS 外部架構(gòu)

GlusterFS總體架構(gòu)與組成部分如圖2所示,它主要由存儲(chǔ)服務(wù)器(BrickServer)、客戶端以及NFS/Samba 存儲(chǔ)網(wǎng)關(guān)組成。不難發(fā)現(xiàn),GlusterFS 架構(gòu)中沒有元數(shù)據(jù)服務(wù)器組件,這是其最大的設(shè)計(jì)這點(diǎn),對(duì)于提升整個(gè)系統(tǒng)的性能、可靠性和穩(wěn)定性都有著決定性的意義。GlusterFS 支持TCP/IP 和InfiniBandRDMA 高速網(wǎng)絡(luò)互聯(lián),客戶端可通過原生Glusterfs 協(xié)議訪問數(shù)據(jù),其他沒有運(yùn)行GlusterFS客戶端的終端可通過NFS/CIFS 標(biāo)準(zhǔn)協(xié)議通過存儲(chǔ)網(wǎng)關(guān)訪問數(shù)據(jù)。

GlusterFS內(nèi)部架構(gòu)

GlusterFS是模塊化堆棧式的架構(gòu)設(shè)計(jì),如上圖所示。模塊稱為Translator,是GlusterFS提供的一種強(qiáng)大機(jī)制,借助這種良好定義的接口可以高效簡(jiǎn)便地?cái)U(kuò)展文件系統(tǒng)的功能。

1.服務(wù)端與客戶端模塊接口是兼容的,同一個(gè)translator可同時(shí)在兩邊加載。

2.GlusterFS中所有的功能都是通過translator實(shí)現(xiàn),如Cluster, Storage,Performance, Protocol, Features等。

3.重點(diǎn)是GlusterFSClient端。

GlusterFS數(shù)據(jù)訪問流程

上圖是GlusterFS數(shù)據(jù)訪問的一個(gè)概要圖:

1.首先是在客戶端,用戶通過glusterfs的mount point 來讀寫數(shù)據(jù)。

2.用戶的這個(gè)操作被遞交給本地linux系統(tǒng)的VFS來處理。

3.VFS將數(shù)據(jù)遞交給FUSE內(nèi)核文件系統(tǒng),在啟動(dòng)glusterfs客戶端以前,需要向系統(tǒng)注冊(cè)一個(gè)實(shí)際的文件系統(tǒng)FUSE,如上圖所示,該文件系統(tǒng)與ext3在同一個(gè)層次上面,ext3是對(duì)實(shí)際的磁片進(jìn)行處理,而fuse文件系統(tǒng)則是將數(shù)據(jù)通過/dev/fuse這個(gè)設(shè)備文件遞交給了glusterfs client端。所以,我們可以將fuse文件系統(tǒng)理解為一個(gè)代理。

4.數(shù)據(jù)被fuse遞交給Glusterfs client 后,client對(duì)數(shù)據(jù)進(jìn)行一些指定的處理(所謂的指定,是按照client配置文件來進(jìn)行的一系列處理)

5.在glusterfsclient的處理末端,通過網(wǎng)路將數(shù)據(jù)遞交給Glusterfs Server,并且將數(shù)據(jù)寫入到服務(wù)器所控制的存儲(chǔ)設(shè)備上

技術(shù)特點(diǎn)

GlusterFS在技術(shù)實(shí)現(xiàn)上與傳統(tǒng)存儲(chǔ)系統(tǒng)或現(xiàn)有其他分布式文件系統(tǒng)有顯著不同之處,主要體現(xiàn)在如下幾個(gè)方面。

完全軟件實(shí)現(xiàn)(SoftwareOnly)

GlusterFS認(rèn)為存儲(chǔ)是軟件問題,不能夠把用戶局限于使用特定的供應(yīng)商或硬件配置來解決。GlusterFS采用開放式設(shè)計(jì),廣泛支持工業(yè)標(biāo)準(zhǔn)的存儲(chǔ)、網(wǎng)絡(luò)和計(jì)算機(jī)設(shè)備,而非與定制化的專用硬件設(shè)備捆綁。對(duì)于商業(yè)客戶,GlusterFS可以以虛擬裝置的形式交付,也可以與虛擬機(jī)容器打包,或者是公有云中部署的映像。開源社區(qū)中,GlusterFS被大量部署在基于廉價(jià)閑置硬件的各種操作系統(tǒng)上,構(gòu)成集中統(tǒng)一的虛擬存儲(chǔ)資源池。簡(jiǎn)言之,GlusterFS是開放的全軟件實(shí)現(xiàn),完全獨(dú)立于硬件和操作系統(tǒng)。

完整的存儲(chǔ)操作系統(tǒng)棧(CompleteStorage Operating System Stack)

GlusterFS不僅提供了一個(gè)分布式文件系統(tǒng),而且還提供了許多其他重要的分布式功能,比如分布式內(nèi)存管理、I/O調(diào)度、軟RAID和自我修復(fù)等。GlusterFS汲取了微內(nèi)核架構(gòu)的經(jīng)驗(yàn)教訓(xùn),借鑒了GNU/Hurd操作系統(tǒng)的設(shè)計(jì)思想,在用戶空間實(shí)現(xiàn)了完整的存儲(chǔ)操作系統(tǒng)棧。

用戶空間實(shí)現(xiàn)(User Space)

與傳統(tǒng)的文件系統(tǒng)不同,GlusterFS在用戶空間實(shí)現(xiàn),這使得其安裝和升級(jí)特別簡(jiǎn)便。另外,這也極大降低了普通用戶基于源碼修改GlusterFS的門檻,僅僅需要通用的C程序設(shè)計(jì)技能,而不需要特別的內(nèi)核編程經(jīng)驗(yàn)。

模塊化堆棧式架構(gòu)(ModularStackable Architecture)

GlusterFS采用模塊化、堆棧式的架構(gòu),可通過靈活的配置支持高度定制化的應(yīng)用環(huán)境,比如大文件存儲(chǔ)、海量小文件存儲(chǔ)、云存儲(chǔ)、多傳輸協(xié)議應(yīng)用等。每個(gè)功能以模塊形式實(shí)現(xiàn),然后以積木方式進(jìn)行簡(jiǎn)單的組合,即可實(shí)現(xiàn)復(fù)雜的功能。比如,Replicate模塊可實(shí)現(xiàn)RAID1,Stripe模塊可實(shí)現(xiàn)RAID0,通過兩者的組合可實(shí)現(xiàn)RAID10和RAID01,同時(shí)獲得高性能和高可性。

原始數(shù)據(jù)格式存儲(chǔ)(DataStored in Native Formats)

GlusterFS無元數(shù)據(jù)服務(wù)設(shè)計(jì)(NoMetadata with the Elastic Hash Algorithm)以原始數(shù)據(jù)格式(如EXT3、EXT4、XFS、ZFS)儲(chǔ)存數(shù)據(jù),并實(shí)現(xiàn)多種數(shù)據(jù)自動(dòng)修復(fù)機(jī)制。因此,系統(tǒng)極具彈性,即使離線情形下文件也可以通過其他標(biāo)準(zhǔn)工具進(jìn)行訪問。如果用戶需要從GlusterFS中遷移數(shù)據(jù),不需要作任何修改仍然可以完全使用這些數(shù)據(jù)。

對(duì)Scale-Out存儲(chǔ)系統(tǒng)而言,最大的挑戰(zhàn)之一就是記錄數(shù)據(jù)邏輯與物理位置的映像關(guān)系,即數(shù)據(jù)元數(shù)據(jù),可能還包括諸如屬性和訪問權(quán)限等信息。傳統(tǒng)分布式存儲(chǔ)系統(tǒng)使用集中式或分布式元數(shù)據(jù)服務(wù)來維護(hù)元數(shù)據(jù),集中式元數(shù)據(jù)服務(wù)會(huì)導(dǎo)致單點(diǎn)故障和性能瓶頸問題,而分布式元數(shù)據(jù)服務(wù)存在性能負(fù)載和元數(shù)據(jù)同步一致性問題。特別是對(duì)于海量小文件的應(yīng)用,元數(shù)據(jù)問題是個(gè)非常大的挑戰(zhàn)。

GlusterFS獨(dú)特地采用無元數(shù)據(jù)服務(wù)的設(shè)計(jì),取而代之使用算法來定位文件,元數(shù)據(jù)和數(shù)據(jù)沒有分離而是一起存儲(chǔ)。集群中的所有存儲(chǔ)系統(tǒng)服務(wù)器都可以智能地對(duì)文件數(shù)據(jù)分片進(jìn)行定位,僅僅根據(jù)文件名和路徑并運(yùn)用算法即可,而不需要查詢索引或者其他服務(wù)器。這使得數(shù)據(jù)訪問完全并行化,從而實(shí)現(xiàn)真正的線性性能擴(kuò)展。無元數(shù)據(jù)服務(wù)器極大提高了GlusterFS的性能、可靠性和穩(wěn)定性。

一些設(shè)計(jì)與討論

無元數(shù)據(jù)服務(wù)器vs 元數(shù)據(jù)服務(wù)器

無元數(shù)據(jù)服務(wù)器設(shè)計(jì)的好處是沒有單點(diǎn)故障和性能瓶頸問題,可提高系統(tǒng)擴(kuò)展性、性能、可靠性和穩(wěn)定性。對(duì)于海量小文件應(yīng)用,這種設(shè)計(jì)能夠有效解決元數(shù)據(jù)的難點(diǎn)問題。它的負(fù)面影響是,數(shù)據(jù)一致問題更加復(fù)雜,文件目錄遍歷操作效率低下,缺乏全局監(jiān)控管理功能。同時(shí)也導(dǎo)致客戶端承擔(dān)了更多的職能,比如文件定位、名字空間緩存、邏輯卷視圖維護(hù)等等,這些都增加了客戶端的負(fù)載,占用相當(dāng)?shù)腃PU 和內(nèi)存。

用戶空間vs內(nèi)核空間

用戶空間實(shí)現(xiàn)起來相對(duì)要簡(jiǎn)單許多,對(duì)開發(fā)者技能要求較低,運(yùn)行相對(duì)安全。用戶空間效率低,數(shù)據(jù)需要多次與內(nèi)核空間交換,另外GlusterFS 借助FUSE 來實(shí)現(xiàn)標(biāo)準(zhǔn)文件系統(tǒng)接口,性能上又有所損耗。內(nèi)核空間實(shí)現(xiàn)可以獲得很高的數(shù)據(jù)吞吐量,缺點(diǎn)是實(shí)現(xiàn)和調(diào)試非常困難,程序出錯(cuò)經(jīng)常會(huì)導(dǎo)致系統(tǒng)崩潰,安全性低??v向擴(kuò)展上,內(nèi)核空間要優(yōu)于用戶空間,GlusterFS 有橫向擴(kuò)展能力來彌補(bǔ)。

堆棧式vs 非堆棧式

這有點(diǎn)像操作系統(tǒng)的微內(nèi)核設(shè)計(jì)與單一內(nèi)核設(shè)計(jì)之爭(zhēng)。GlusterFS 堆棧式設(shè)計(jì)思想源自GNU/Hurd 微內(nèi)核操作系統(tǒng),具有很強(qiáng)的系統(tǒng)擴(kuò)展能力,系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)復(fù)雜性降低很多,基本功能模塊的堆棧式組合就可以實(shí)現(xiàn)強(qiáng)大的功能。查看GlusterFS卷配置文件我們可以發(fā)現(xiàn),translator 功能樹通常深達(dá)10層以上,一層一層進(jìn)行調(diào)用,效率可見一斑。非堆棧式設(shè)計(jì)可看成類似Linux 的單一內(nèi)核設(shè)計(jì),系統(tǒng)調(diào)用通過中斷實(shí)現(xiàn),非常高效。后者的問題是系統(tǒng)核心臃腫,實(shí)現(xiàn)和擴(kuò)展復(fù)雜,出現(xiàn)問題調(diào)試?yán)щy。

原始存儲(chǔ)格式vs 私有存儲(chǔ)格式

GlusterFS使用原始格式存儲(chǔ)文件或數(shù)據(jù)分片,可以直接使用各種標(biāo)準(zhǔn)的工具進(jìn)行訪問,數(shù)據(jù)互操作性好,遷移和數(shù)據(jù)管理非常方便。然而,數(shù)據(jù)安全成了問題,因?yàn)閿?shù)據(jù)是以平凡的方式保存的,接觸數(shù)據(jù)的人可以直接復(fù)制和查看。這對(duì)很多應(yīng)用顯然是不能接受的,比如云存儲(chǔ)系統(tǒng),用戶特別關(guān)心數(shù)據(jù)安全,這也是影響公有云存儲(chǔ)發(fā)展的一個(gè)重要原因。私有存儲(chǔ)格式可以保證數(shù)據(jù)的安全性,即使泄露也是不可知的。GlusterFS 要實(shí)現(xiàn)自己的私有格式,在設(shè)計(jì)實(shí)現(xiàn)和數(shù)據(jù)管理上相對(duì)復(fù)雜一些,也會(huì)對(duì)性能產(chǎn)生一定影響。

大文件vs 小文件

GlusterFS 適合大文件還是小文件存儲(chǔ)?彈性哈希算法和Stripe 數(shù)據(jù)分布策略,移除了元數(shù)據(jù)依賴,優(yōu)化了數(shù)據(jù)分布,提高數(shù)據(jù)訪問并行性,能夠大幅提高大文件存儲(chǔ)的性能。對(duì)于小文件,無元數(shù)據(jù)服務(wù)設(shè)計(jì)解決了元數(shù)據(jù)的問題。但GlusterFS 并沒有在I/O 方面作優(yōu)化,在存儲(chǔ)服務(wù)器底層文件系統(tǒng)上仍然是大量小文件,本地文件系統(tǒng)元數(shù)據(jù)訪問是一個(gè)瓶頸,數(shù)據(jù)分布和并行性也無法充分發(fā)揮作用。因此,GlusterFS 適合存儲(chǔ)大文件,小文件性能較差,還存在很大優(yōu)化空間。

可用性vs 存儲(chǔ)利用率

GlusterFS使用復(fù)制技術(shù)來提供數(shù)據(jù)高可用性,復(fù)制數(shù)量沒有限制,自動(dòng)修復(fù)功能基于復(fù)制來實(shí)現(xiàn)??捎眯耘c存儲(chǔ)利用率是一個(gè)矛盾體,可用性高存儲(chǔ)利用率就低,反之亦然。采用復(fù)制技術(shù),存儲(chǔ)利用率為1/復(fù)制數(shù),鏡像是50%,三路復(fù)制則只有33%。其實(shí),可以有方法來同時(shí)提高可用性和存儲(chǔ)利用率,比如RAID5的利用率是(n-1)/n,RAID6是(n-2)/n,而糾刪碼技術(shù)可以提供更高的存儲(chǔ)利用率。但是,魚和熊掌不可得兼,它們都會(huì)對(duì)性能產(chǎn)生較大影響。

術(shù)語表:

Xlator=translator:glusterfs 模塊的代名詞

Brick :存儲(chǔ)目錄是Glusterfs 的基本存儲(chǔ)單元,由可信存儲(chǔ)池中服務(wù)器上對(duì)外

輸出的目錄表示。存儲(chǔ)目錄的格式由服務(wù)器和目錄的絕對(duì)路徑構(gòu)成,具體如下:

SERVER:EXPORT.例如:myhostname:/exports/myexportdir/

Volume :卷是存儲(chǔ)目錄的邏輯組合。大部分gluster 管理操作是在卷上進(jìn)行的。

Metadata:元數(shù)據(jù)關(guān)于數(shù)據(jù)的數(shù)據(jù),用于描述文件、目錄等的相關(guān)信息。

FUSE=Filesystem inUserspace:是一個(gè)內(nèi)核模塊,允許用戶創(chuàng)建自己的文件系

統(tǒng)無需修改內(nèi)核代碼。

Glusterd :Glusterfs 后臺(tái)進(jìn)程,運(yùn)行在所有Glusterfs 節(jié)點(diǎn)上。

DistributeVolume:分布式卷

ReplicateVolume:副本卷

StripeVolume:條帶卷

DistributeReplicate Volume:分布式副本卷

DHT=Distribute HashTable

AFR=Automatic FileReplication

SAN =Storage AreaNetwork: 存儲(chǔ)區(qū)域網(wǎng)絡(luò)是一種高速網(wǎng)絡(luò)或子網(wǎng)絡(luò),提供在計(jì)算機(jī)與存儲(chǔ)之間的數(shù)據(jù)傳輸。

NAS = Network-attachedstorage:網(wǎng)絡(luò)附屬存儲(chǔ)是一種將分布、獨(dú)立的數(shù)據(jù)整合為大型、集中化管理的數(shù)據(jù)中心,以便于對(duì)不同主機(jī)和應(yīng)用服務(wù)器進(jìn)行訪問的技術(shù)。

RPC =Remote ProcedureCall:遠(yuǎn)程過程調(diào)用

XDR =eXtern DataRepresentation: RPC傳遞數(shù)據(jù)的格式

CLI=Command LineInterface控制臺(tái)

argp=Argument Parser

UUID=UniversityUnqiueIdentifier

SVC =service

CLNT =client

MGMT=management

cbks =Call Backs

ctx =context

lk =lock

attr =attribute

txn =transaction

rb =replace brick

worm =write once , readmany

系統(tǒng)配額:

1、開啟/關(guān)閉系統(tǒng)配額

gluster?volumequotaVOLNAMEenable/disable

2、設(shè)置(重置)目錄配額

gluster?volumequotaVOLNAME?limit-usage/imglimit-value

gluster?volumequotaimg?limit-usage/quota10GB

設(shè)置img 卷下的quota 子目錄的限額為10GB。這個(gè)目錄是以系統(tǒng)掛載目錄為根目錄”/”,所以/quota 即客戶端掛載目錄下的子目錄quota

3、配額查看

gluster?volumequotaVOLNAME?list

gluster?volumequotaVOLNAME?list

可以使用如上兩個(gè)命令進(jìn)行系統(tǒng)卷的配額查看,第一個(gè)命令查看目的卷的所有配額設(shè)置,

第二個(gè)命令則是執(zhí)行目錄進(jìn)行查看??梢燥@示配額大小及當(dāng)前使用容量,若無使用容量(最小0KB)則說明設(shè)置的目錄可能是錯(cuò)誤的(不存在)。

地域復(fù)制:

gluster?volume?geo-replication?MASTER?SLAVE?start/status/stop

//地域復(fù)制是系統(tǒng)提供的災(zāi)備功能,能夠?qū)⑾到y(tǒng)的全部數(shù)據(jù)進(jìn)行異步的增量備份到另外的磁盤中。

gluster?volume?geo-replication?img?192.168.10.8:/data1/brick1start

如上,開始執(zhí)行將img 卷的所有內(nèi)容備份到10.8 下的/data1/brick1 中的task,需要注意的是,這個(gè)備份目標(biāo)不能是系統(tǒng)中的Brick。

平衡卷:

平衡布局是很有必要的,因?yàn)椴季纸Y(jié)構(gòu)是靜態(tài)的,當(dāng)新的bricks 加入現(xiàn)有卷,新創(chuàng)建的文件會(huì)分布到舊的bricks 中,所以需要平衡布局結(jié)構(gòu),使新加入的bricks 生效。布局平衡只是使

新布局生效,并不會(huì)在新的布局移動(dòng)老的數(shù)據(jù),如果你想在新布局生效后,重新平衡卷中的數(shù)據(jù),還需要對(duì)卷中的數(shù)據(jù)進(jìn)行平衡。

當(dāng)你擴(kuò)展或者縮小卷之后,需要重新在服務(wù)器直接重新平衡一下數(shù)據(jù),重新平衡的操作被分

為兩個(gè)步驟:

1、Fix Layout

修改擴(kuò)展或者縮小后的布局,以確保文件可以存儲(chǔ)到新增加的節(jié)點(diǎn)中。

2、Migrate Data

重新平衡數(shù)據(jù)在新加入bricks 節(jié)點(diǎn)之后。

* Fix Layout and Migrate Data

先重新修改布局然后移動(dòng)現(xiàn)有的數(shù)據(jù)(重新平衡)

1

2#?gluster?volume?rebalance?VOLNAME?fix-layout?start

#?gluster?volume?rebalance?VOLNAME?migrate-data?start

也可以兩步合一步同時(shí)操作

#?gluster?volume?rebalance?VOLNAME?start

#?gluster?volume?rebalance?VOLNAME?status?//你可以在在平衡過程中查看平衡信息

#??gluster?volume?rebalance?VOLNAME?stop?//你也可以暫停平衡,再次啟動(dòng)平衡的時(shí)候會(huì)從上次暫停的地方繼續(xù)開始平衡。

I/O 信息查看:

Profile Command 提供接口查看一個(gè)卷中的每一個(gè)brick 的IO 信息

#gluster?volume?profile?VOLNAME?start?//啟動(dòng)profiling,之后則可以進(jìn)行IO?信息查看

#gluster?volume?profile?VOLNAME?info?//查看IO?信息,可以查看到每一個(gè)Brick?的IO?信息

#gluster?volume?profile?VOLNAME?stop?//查看結(jié)束之后關(guān)閉profiling?功能

Top監(jiān)控:

Top command 允許你查看bricks 的性能例如:read, write, fileopen calls, file read calls, file,write calls,directory open calls, and directory real calls

所有的查看都可以設(shè)置top 數(shù),默認(rèn)100

#?gluster?volume?top?VOLNAME?open?[brick?BRICK-NAME]?[list-cnt?cnt]?//查看打開的fd

#?gluster?volume?top?VOLNAME?read?[brick?BRICK-NAME]?[list-cnt?cnt]?//查看調(diào)用次數(shù)最多的讀調(diào)用

#?gluster?volume?top?VOLNAME?write?[brick?BRICK-NAME]?[list-cnt?cnt]?//查看調(diào)用次數(shù)最多的寫調(diào)用

#?gluster?volume?top?VOLNAME?opendir?[brick?BRICK-NAME]?[list-cnt?cnt]?//查看次數(shù)最多的目錄調(diào)用

#?gluster?volume?top?VOLNAME?readdir?[brick?BRICK-NAME]?[list-cnt?cnt]?//查看次數(shù)最多的目錄調(diào)用

#?gluster?volume?top?VOLNAME?read-perf?[bs?blk-size?count?count]?[brickBRICK-NAME]?[list-cnt?cnt]?//查看每個(gè)Brick?的讀性能

#?gluster?volume?top?VOLNAME?write-perf?[bs?blk-size?count?count]?[brickBRICK-NAME]?[list-cnt?cnt]?//查看每個(gè)Brick?的寫性能

性能優(yōu)化配置選項(xiàng):

gluster?volumesetarch-img?cluster.min-free-disk?默認(rèn)是10%?磁盤剩余告警

gluster?volumesetarch-img?cluster.min-free-inodes?默認(rèn)是5%?inodes?剩余告警

gluster?volumesetimg?performance.read-ahead-page-count?8?默認(rèn)4,預(yù)讀取的數(shù)量

gluster?volumesetimg?performance.io-thread-count?16?默認(rèn)16?io?操作的最大線程

gluster?volumesetarch-img?network.ping-timeout?10?默認(rèn)42s

gluster?volumesetarch-img?performance.cache-size?2GB?默認(rèn)128M?或32MB,

gluster?volumesetarch-img?cluster.self-heal-daemon?on?開啟目錄索引的自動(dòng)愈合進(jìn)程

gluster?volumesetarch-img?cluster.heal-timeout?300?自動(dòng)愈合的檢測(cè)間隔,默認(rèn)為600s#3.4.2版本才有

gluster?volumesetarch-img?performance.write-behind-window-size?256MB#默認(rèn)是1M?能提高寫性能單個(gè)文件后寫緩沖區(qū)的大小默認(rèn)1M

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,461評(píng)論 25 708
  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯(cuò)誤還是無法避免 以后資料會(huì)慢慢更新 大...
    數(shù)據(jù)革命閱讀 12,239評(píng)論 2 33
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,973評(píng)論 19 139
  • 1.描述 AVFormatContext描述了一個(gè)媒體文件或媒體流的構(gòu)成和基本信息,位于avformat.h文件中...
    YellowLayne閱讀 9,155評(píng)論 0 1
  • 想了很多天不知道該怎么說,一直沒有寫過這么長來說說你怕寫不好覺得矯情但是這次還是想寫寫看。這是四年里你第一個(gè)我不在...
    爛魚子閱讀 333評(píng)論 0 0