2010-08-27 62 views
1

我的主要目標是通過網絡服務器提供大量的XML文件(每個大於1GB的文件大小爲012bp)。文件可以被認爲是有用的,因爲這些文件會被外部代碼修改,頻率相對很低(每天大約有50k次更新)。文件將以高頻率(> 30 req/sec)請求。哪種技術應該用於服務大量的靜態文件?

我的團隊當前的建議是創建一個專用的Java應用程序來實現HTTP協議,並使用memcached來加快速度,將所有文件數據保存在RDBMS中並擺脫文件系統。

另一方面,我認爲,一個調整的Apache Web服務器或lighttpd應該是足夠的。緩存可以留給OS或Web服務器的高速緩存。如果需要相同的輸出並且僅基於文件名進行查詢,那麼將數據保存在數據庫中毫無意義。不知道memcached如何在這裏工作。在通過外部代碼更新文件時更新外部緩存(memcached)會增加複雜性。

還有其他問題,如果我選擇使用文件是可以存儲在目錄像\ a \ b \ c \ d.xml和通過abcd.xml訪問?或者我應該把所有1bn文件放在單個目錄中(不確定操作系統是否允許)。

這不是一個網站,但是對於封閉網絡中的應用程序API,Cloud/CDN是沒有用的。

我打算使用CentOS + Apache/lighttpd。建議任何替代和最佳可能的解決方案。

This是在這樣的話題上發現的唯一的公共註釋,它也有點老。

+1

50k每天更新是每2秒更新一次。這不是我所稱的「低頻」更新。 – 2010-08-27 18:44:50

+0

但與記錄/文件總數相比,它的頻率相對較低。 – 2010-08-27 19:05:04

+0

沒關係,在這個速度下,任何基於磁盤的東西都會有明顯的效果。把它放在記憶中。 – 2010-08-27 22:34:55

回答

3

1bn文件,每個1KB,即大約1TB的數據。令人印象深刻。所以它不適合內存,除非你有非常昂貴的硬件。如果您的文件系統爲小文件浪費了大量空間,它甚至可能成爲磁盤上的問題。

30秒的請求遠不那麼令人印象深刻。這當然不是網絡的限制因素,也不是那裏的任何嚴肅的網絡服務器。對於慢速硬盤來說這可能是一個小挑戰。

所以我的建議是:將XML文件放在硬盤上,並用您選擇的普通香草web服務器提供。然後測量吞吐量並優化它,如果您沒有達到每秒50個文件。但除非你已經證明它是一個限制因素,否則不要投資於任何東西。

可能的優化是:

  • 查找文件系統中的更好的佈局,即在足夠的目錄分發文件,這樣你就不會在一個目錄中有太多的文件(大於5000)。
  • 分發文件在多個硬碟,使他們能夠訪問並行
  • 使用文件更快的硬盤
  • 使用固態硬盤(SSD)。它們很昂貴,但可以輕鬆地每秒處理數百個文件。

如果每天要多次請求大量文件,那麼即使是較慢的硬盤也應該足夠,因爲您的操作系統將在文件緩存中包含文件。而今天的文件緩存大小,相當數量的日常交付將適合緩存。因爲每秒30次請求,您最多隻能提供一天中所有文件的0.25%。

關於在多個目錄中發佈您的文件,就可以與Apache 重寫規則,如隱瞞這一點:

RewriteRule ^/xml/(.)(.)(.)(.)(.*)\.xml /xml/$1/$2/$3/$4/$5.xml 
+0

@Codo:我沒有將「bn」翻譯爲「billion」。 – 2010-08-28 18:15:20

+0

正是我在想什麼 - 在頂部構建應用程序只會讓它變慢。一個非常重要的問題是延遲 - 有沒有**「網絡服務器的高速緩存」,但發佈的更新中的更多延遲可以通過緩存Web服務器來提供更多的負載。 – symcbean 2010-08-30 12:14:30

+0

您也可以使用NginX,然後使用內置的正則表達式解析將文件放入子目錄。在這個數量的文件中,通過多級子目錄拆分它們幾乎需要在一個股票文件系統上(例如ext3) – 2010-08-30 17:58:55

0

我相信一個專門的應用程序與所有東西吃掉memcache分貝將是最好的選擇。

+0

爲什麼?給我們一些理由...... – Codo 2010-08-28 17:37:59

+0

我不認爲memcache db會創造奇蹟,因爲一旦數據開始超過緩存大小(受可用RAM限制),memcache命中率將會非常低,事實上,更多將會是更新緩存與持久存儲同步的負擔,並檢查每個可能的命中/未命中請求。我更傾向於Codo建議的lighhttpd和結構化文件系統,但我可能是錯的。這樣做的好處是操作系統會保留一個緩存,如果它被外部進程更新,它將從緩存中刪除文件。需要同時測試這兩種方法。 – 2010-09-03 13:32:12

1

另一件事,你可以看,就是Pomegranate,這似乎非常相似,你想什麼去做。

相關問題