<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                #上傳與存儲的關系 ## 上傳與存儲的演進 **初始階段** 所有的都是一臺機器 程序文件:不同的用戶不同的目錄 數據庫:不同的用戶通過用戶名訪問數據庫,實質上是同一個實例,但是 一個用戶一個庫 程序文件: Discuz: uc_server/data ThinkPHP: data/uploads ![](https://box.kancloud.cn/2016-05-16_57397ee4d9d82.png) ![](https://box.kancloud.cn/2016-05-16_57397ee7917be.png) #文件存儲及其涉及到的問題 1、結構與非結構化數據的存儲 今天討論非結構化存儲 2、不同類型的存儲 數據量級、小文件與大文件存儲、備份 3、不同的變更頻繁程度 4、特例:頭像與縮略圖存儲 文件轉換、異步分發 ## 結構與非結構化存儲 數據的世界不像我們想像的那么簡單 不用的對象,不同的存儲方式 曾經歸納了 11 種數據存儲的場景 文本、文件數據庫、遠程 結構化存儲,表格、字段、行、列、JSON、XML 非結構化存儲,文件,但是:文件不一定是單一文件,正像數據行、數據 表可以不是單一文件 ## 不同類型的存儲 **? 數據量級** ? 量級無非就是文件數量大小 ? 占用空間大量 **? 小文件與大文件存儲** ? 小文件大量占用 inode 資源, inode 容量有限 ? 文件多了,速度就會變慢 **? 備份** ? 大文件的備份(同吞吐有關)、小文件(增量與全量備份差別巨大) ## 相關工具與命令 1、inode 的查看 (df -i, ls -i) 2、文件同步(ssh【scp】、ftp、sftp、rsync) 3、磁盤吞吐測試:hdparm –t/hdparm -T 4、inotify(監測文件動態變更) ? 一種海量小文件的存儲裝置 ## 特例:頭像存儲與異步隊列 1、頭像原文件存儲、頭像標準尺寸存儲 2、各種尺寸的小頭像存儲 什么時間轉換! 3、轉換、推送到存儲(Gearman) boost-devel pthread ##Gearman 的使用 1、使用 Net_Gearman Gearman 擴展(ldd) 2、轉換 image_thumbnail_client.php image_thumbnail_worker.php 3、分發 ![](https://box.kancloud.cn/2016-05-16_57397ee81663d.png) ## 小頭像的處理要點上傳 **? 上傳** ? 用戶將文件上傳到某臺 Web 服務器 ? Web服務器進行類型檢查、殺毒,分析元數據 ? Web服務器存儲元數據,告知用戶照片上傳成功,以及當前 服務器能顯示的地址 ? Web服務器當前能顯示的地址僅是當前需要的版本 ? Web服務器將圖片標準尺寸或者原圖分發到存儲 **? 下載** ? 用戶向服務器請求某張圖片(可能是頭像的某個版本) ? CDN檢查文件有無緩存(后面講什么是CDN) ? CDN向后端服務器(源站)請求文件 ? 源站接收到的 Web或者是分發服務器,檢測文件是否存在 ? 存在則立即返回文件,CDN接收文件,緩存文件,返回文件 ? 不存在Web或者分發服務器向存儲請求文件,請求不到,返 回 404給,再繼續返回,請求到了,就返回給下一級,同上 一步 ## 哪些點涉及到轉換? ? Web服務器存儲元數據,告知用戶照片上傳成功,以及當前服務器 能顯示的地址 ? 轉換成返回版本 ? Web服務器將圖片標準尺寸或者原圖分發到存儲 ? 至少要轉換成標準圖版本 ? 源站接收到的 Web或者是分發服務器,檢測文件是否存在 ? 沒有的話,源站需要拉取回來,然后轉換,返回成相應的版本 #分布式存儲之土辦法實現 ##分布式存儲的PHP實現 **PHP 配置** 在配置中約定,xxxx-xxxx文件,在某臺服務器,服務器可以指定 多臺,甚至也可以指明備份 可以擴展配置支持多個文件類型 **PHP上傳** 上傳了之后,檢測是哪個產品線來的,檢測應該往哪發,直接往相 應的服務器 rsync ##示例實現 1、配置文件 2、上傳 3、生成文件ID,檢測文件類型 4、比較配置,發往相應的服務器 5、幾種存儲方式對比 #分布式存儲之 FastDFS ![](https://box.kancloud.cn/2016-05-16_57397ee866240.png) ![](https://box.kancloud.cn/2016-05-16_57397ee8a813e.png) 1. client詢問tracker上傳到的storage; 2. tracker返回一臺可用的storage; 3. client直接和storage通信完成文件上傳,storage返回文件ID。 ![](https://box.kancloud.cn/2016-05-16_57397ee8ce4c4.png) 1. client詢問tracker下載文件的storage,參數為文件ID(組名和文件名); 2. tracker返回一臺可用的storage; 3. client直接和storage通信完成文件下載。 ## 配置 cat /etc/fdfs/tracker.conf |egrep -v "^#"|egrep -v "^$” cat /etc/fdfs/storage.conf |egrep -v "^#"|egrep -v "^$” cat /etc/fdfs/client.conf|egrep -v "^#"|egrep -v "^$" ## 要點 /usr/local/bin/fdfs_upload_file /etc/fdfs/client.conf upload/meinv.jpg /usr/local/bin/fdfs_trackerd /etc/fdfs/tracker.conf /usr/local/bin/fdfs_trackerd /etc/fdfs/tracker.conf 4.0 已經去除了內置 HTTP的支持,但相關的代碼、配置有些還在 ##示例 1、fastdfs_client 模塊 2、使用 模塊上傳文件 3、查看上傳效果 #高效的分發系統與大文件分發 ##CDN 與高效分發 CDN 原理 - 解決服務器端的“第一公里”問題 - 緩解甚至消除了不同運營商之間互聯的瓶頸造成的影響 - 減輕了各省的出口帶寬壓力 - 緩解了骨干網的壓力 - 優化了網上熱點內容的分布 ![](https://box.kancloud.cn/2016-05-16_57397ee9062bb.png) ##Varnish ? 安裝 ? 有一些 python 的工具需要裝 ? 使用 ? varnishd -f /etc/varnish/default.vcl -s malloc,1024m -T 127.0.0.1:200 -a 0.0.0.0:80 ? 指定后端 ? 演示我們上傳的文件 ![](https://box.kancloud.cn/2016-05-16_57397ee9633aa.png) ##大文件分發 大文件分發 ? 1、壓縮分發(小文件尤其如此) ? 2、rsync 、scp 傳輸 ? 3、數據解壓 ? 4、數據校驗(md5, md5sum)?目的是什么? ? 到底應該怎么傳大文件? ? 壓縮有何利弊?有改進之處嗎? ? 不壓縮有何辦法? 第一種辦法 ? tar -zcvf 20150101.tar.gz 20150101 ? scp -P 22 20150101.tar.gz wuxing@101.251.196.91:/home/wuxing ? 其他: ? ls -d 2015*|xargs -i echo "tar -zcvf {}.tar.gz {}"|sh & ? ls -d 2015*|grep -v tar|awk '{printf "tar -zcvf %d.tar.gz %d\n",$0,$0}'|sh 第二種辦法 ? gzip -c 20150605/ucai_info_20150605.sql |ssh -p 22 wuxing@101.251.196.91 "gunzip -c - > /var/software/test/test.sql" ##第三種辦法 ? 發送端: ? gzip -c 20150605/ucai_info_20150605.sql |nc 101.251.196.91 12345 ? 接收端 ? nc -l 12345|gunzip -c > /var/software/test.sql ![](https://box.kancloud.cn/2016-05-16_57397ee9a2d7b.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看