當前位置:首頁 » 服務存儲 » 隊列服務和文件存儲服務
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

隊列服務和文件存儲服務

發布時間: 2022-01-30 17:43:37

A. 怎麼使用Windows Azure Queue Storage 服務

什麼是Windows Azure Queue Storage 隊列存儲

Windows Azure Queue
Storage存儲大量的信息,可以在世界任何地方通過驗證的調用,使用HTTP或HTTPS訪問的服務。一個單一的隊列信息可高達64KB的大小,隊列
可以包含數百萬條消息,每個存儲帳戶(storage account)限制的總容量高達100TB。隊列存儲的常見用途包括:

創建非同步處理積壓的工作
從Windows Azure的Web角色的消息傳遞到Windows Azure Worker角色

基本概念

隊列服務包含以下組件:

URL 格式:隊列服務,是通過REST來訪問的,基於URL地址訪問。格式如下:

http://<storage account>.queue.core.windows.net/<queue>

上面圖表的Queue的URL為:

http://myaccount.queue.core.windows.net/imagesToDownload

存儲賬戶(Storage Account):Azure Storage訪問是通過REST方式,使用對稱加密方式(Symmetric)。一個賬戶能訪問所有的雲存儲(Blob、Table、Queue)。

隊列(Queue):一個隊列能存儲大量的信息。存儲隊列不能保證FIFO,而且還能多次讀取同一個消息。

消息(Message):能存儲字元串或者位元組數組,一個消息不能大於64k(包括除message信息的其他信息,傳遞的信息大小不能超過49152位元組)。

創建存儲賬戶

在使用雲存儲前,得需要到雲管理平台上創建存儲賬戶。

構建訪問存儲連接字元串(StorageConnectionString)

連接字元串包含三個部分:DefaultEndpointsProtocol,AccountName,AccountKey

EndpointsProtocol只能是https和http,再次說明他是基於REST方式訪問的(REST over http or https)。

AccountName和AccountKey可以到雲管理平台查詢到

連接竄組成格式如下:

DefaultEndpointsProtocol=https;AccountName=[AccountName];AccountKey=[AccountKey]

配置文件

部署雲服務需要兩個文件,分別是*.cspkg和*.cscfg。

前者其實是一個zip壓縮文件,包含所有部署的配置信息。

後者包含webrole和worker role的工作的具體信息。

我們可以把連接字元串寫在*.cscfg裡面,也就是開發時雲服務項目的*.cloud.cscfg、*.local.cscfg、*.csdef文件裡面。

<configuration>
<connectionStrings>
<add name="StorageConnectionString"
connectionString="DefaultEndpointsProtocol=https;AccountName=[AccountName];AccountKey=[AccountKey]" />
</connectionStrings>
</configuration>

怎樣開發訪問隊列

需要的程序集如下:

Microsoft.WindowsAzure.Storage.dll

開發代碼:

// 通過連接字元串解析CloudStorageAccount實例
// Endpoint "http://storageacount.queue.core.windows.net"
CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnetionString"));

#region 隊列操作
// 創建客戶端存儲隊列實例
CloudQueueClient queueClient = cloudStorageAccount.CreateCloudQueueClient();

// 通過隊列名稱獲取服務端存儲隊列實例
// Endpoint "http://storageaccount.queue.core.windows.net/eric-queue-1".
// 隊列名稱必須為小寫
CloudQueue cloudQueue = queueClient.GetQueueReference("eric-quque-1");
//也可以直接創建
//CloudQueue cloudQueue = new CloudQueue(new Uri("http://storageaccount.queue.core.windows.net/eric-queue-1"), new Microsoft.WindowsAzure.Storage.Auth.StorageCredentials(accountName, keyValue));

// 如果隊列不存在就創建一個
cloudQueue.CreateIfNotExists();

// 清除隊列,清除可視、不可視和過期的所有消息。
cloudQueue.Clear();

// 刪除隊列,這個隊列就不存在了
cloudQueue.Delete();
#endregion

#region 隊列消息操作

// 發送消息,消息可以為字元串或者位元組數組,最大為64K, TTL最大為7天,visibilityDelay必須小於TTL
cloudQueue.AddMessage(new CloudQueueMessage("Hello world!"), new TimeSpan(0, 0, 10), new TimeSpan(0, 0, 1), null, null);

// 獲取消息, 獲取從隊頭開始第一個可視的消息,就是nextVisibilityTimeout到了的消息
// 輸入的參數visibilityTimeout是這個消息下次可視的時間間隔
// 通過Get方式獲取的消息,能夠更新(update)和刪除(delete)
CloudQueueMessage message = cloudQueue.GetMessage(new TimeSpan(0, 0, 10));

// 修改消息,修改消息的內容和下次可視時間間隔, 也可以只修改下次可視時間間隔
message.SetMessageContent("Hello Eric Wen!");
cloudQueue.UpdateMessage(message, new TimeSpan(0, 0, 10), MessageUpdateFields.Content | MessageUpdateFields.Visibility);
cloudQueue.UpdateMessage(message, new TimeSpan(0, 0, 10), MessageUpdateFields.Visibility);

// 刪除消息, 通過Get方式獲取的消息,它的Id和PopReceipt有值,有這兩個值才能修改和刪除消息
cloudQueue.DeleteMessage(message);
cloudQueue.DeleteMessage(message.Id, message.PopReceipt);

// 查看消息,只能查看可視的消息,獲取從隊頭開始第一個可視的消息。
// 查看消息不會改變CloudQueueMessage的DequeueCount和NextVisibleTime屬性
// 這個消息是只讀消息,不能更新和刪除操作
message = cloudQueue.PeekMessage();

// 獲取批量消息, 一次只能最多獲取32條消息
IEnumerable<CloudQueueMessage> query = cloudQueue.GetMessages(32);
query = cloudQueue.PeekMessages(32);

#endregion

B. 文件存儲伺服器

您可以再用硬碟對拷啊
及時把數據備份
同時您可以做個磁碟鎮列

C. 隊列的兩種存儲方式對比

隊列的兩種存儲方式分為消息投遞實時性:使用短輪詢方式,實時性取決於輪詢間隔時間:使用長輪詢,同寫入實時性一致,消息的寫入延時通常在幾個毫秒。總結:短輪詢:周期性的向服務提供方發起請求,獲取數據優點:前後端程序編寫比較容易。缺點:請求中有大半是無用,難於維護,浪費帶寬和伺服器資源;響應的結果沒有順序(因為是非同步請求,當發送的請求沒有返回結果的時候,後面的請求又被發送。而此時如果後面的請求比前面的請 求要先返回結果,那麼當前面的請求返回結果數據時已經是過時無效的數據了)。長輪詢:客戶端向伺服器發送請求,伺服器接到請求後保持住連接,直到有新消息才返回響應信息並關閉連接,客戶端處理完響應信息後再向伺服器發送新的請求。優點:在無消息的情況下不會頻繁的請求,耗費資源小。缺點:伺服器hold連接會消耗資源,難於管理維護。消費失敗重試Kafka:消費失敗不支持重試RocketMQ:消費失敗支持定時重試,每次重試間隔時間順延總結:kafka也可以通過編寫代碼來實現寫入和消費失敗的重試機制,這種要求需要用戶來編寫代碼實現,kafka只是提供了這種方式,但並不是他推薦的使用方式,他的設計模式上只是兼顧了這種情況,並不是重點。RocketMQ在設計上就考慮了這種情況,在提供的官方api中提供了重試的設置,用戶可以選擇多種模式的重試機制,以及自定義的重試邏輯,簡單場景下用戶只用設置一下參數即可。關於需要重試的場景例如充值類應用,當前時刻調用運營商網關,充值失敗,可能是對方壓力過多,稍後在調用就會成功,如支付寶到銀行扣款也是類似需求。這里的重試需要可靠的重試,即失敗重試的消息不因為Consumer宕機導致丟失。

D. 文件伺服器和資料庫伺服器有什麼區別

文件伺服器:存放圖片,視頻,文檔文件等。
資料庫伺服器:安裝了伺服器軟體,一般不會直接存儲圖片,文件,而是存儲文件的地址信息。

E. 存儲伺服器和磁碟陣列有什麼區別

1、性質不同:

磁碟陣列是一種方法,存儲伺服器是物理設備。獨立磁碟冗餘陣列(RAID)是把相同的數據存儲在多個硬碟的不同的地方的方法。存儲伺服器是指為特定目標而設計,因此配置方式也不同。它可能是擁有一點額外的存儲,也可能擁有很大的存儲空間的伺服器。

2、用途不同:

存儲伺服器用於提供存儲數據的服務。RAID技術用於高了數據存取速度、實現了對數據的冗餘保護。

3、組成不同:

磁碟陣列通過把數據放在多個硬碟上,輸入輸出操作能以平衡的方式交疊,改良性能。因為多個硬碟增加了平均故障間隔時間(MTBF),儲存冗餘數據也增加了容錯。

存儲伺服器通常是獨立的單元。有的時候它們會被設計成4U機架式。或者也可以由兩個箱子組成一個存儲單元以及一個位於附近的伺服器。

F. NAS網路存儲設備和文件伺服器的區別

以ReadyNAS為例了解傳統伺服器與NAS網路存儲功能對照

不像傳統的伺服器系統,需要若干個小時去配置,ReadyNAS的安裝和配置都非常簡單。隨產品附帶的檢測工具RAIDar,可以自動地在網路中發現設備。任何的工作站,只要有一個支持JAVA的瀏覽器即可管理ReadyNAS。

在現今競爭越來越激烈的商業環境中,對於機構來說,一種技術最重要的是能為自己所用而不是給自己帶來麻煩。成長型的中小企業最容易由於選錯了一種有缺陷的技術而受到影響。因為他們一般不會僱傭一位昂貴的專職IT人士去規劃和維護設備。而當技術問題一旦發生,他們會發現需要浪費寶貴的商業活動時間來管理技術。NETGEAR的網路附加存儲設備ReadyNAS家族是針對以上問題的最佳解決方案。因為它提供了集中式文件存取和列印服務、高安全性、額外的數據冗餘保護和本地與遠程按時間表的備份功能。這一系列的功能都可以通過Web界面輕松管理。


G. 存儲伺服器和文件伺服器有什麼關系

存儲伺服器和文件伺服器一般都接入到本地區域網。
文件伺服器主要作用是文件共享,列印共享等。
存儲伺服器的作用就是文件共享。
在這里文件伺服器跟存儲伺服器定義有點交叉,似乎沒必要配置兩台這樣的伺服器了。
文件伺服器之外又配了一台存儲伺服器,那你們肯定是覺得數據量會比較大,一台文件伺服器160G或者320G可能不夠,實際上的話,最佳的解決方法是擴大文件伺服器的硬碟,或者將存儲伺服器當文件伺服器(window server平台上幾乎不需要配置,設置一些共享許可權就可以了)
若是覺得這樣還不能滿足需求,那我的意見是一台文件伺服器+一台小容量磁碟陣列櫃(價格也不是很貴)。
希望我的回答能解決您的問題

勝藍售前工程師。

H. 如何使用隊列存儲服務

若要執行存儲操作,您需要一個 Windows Azure 存儲帳戶。可通過以下步驟創建存儲帳戶。(也可以使用 REST API 創建存儲帳戶。)

登錄到 Windows Azure 管理門戶。

在導航窗格的底部,單擊「新建」。

+新建

依次單擊「數據服務」、「存儲」和「快速創建」。

「快速創建」對話框

在 URL 中,鍵入要在存儲帳戶的 URI 中使用的子域名稱。輸入的名稱可包含 3-24 個小寫字母和數字。此值將成為用於對訂閱的 Blob、隊列或表資源進行定址的 URI 中的主機名。

選擇要在其中查找存儲的區域/地緣組。如果要使用 Windows Azure 應用程序中的存儲,請選擇要在其中部署該應用程序的區域。

還可以選擇啟用異地復制。

單擊「創建存儲帳戶」。

創建 Java 應用程序

在本指南中,您將使用存儲功能,這些功能可在 Java 應用程序中本地運行,或在 Windows Azure 的 Web 角色或輔助角色中運行的代碼中運行。假定您已下載並安裝 Java 開發工具包 (JDK),並已按照下載 Windows Azure SDK for Java 中的說明進行操作來安裝 Windows Azure Libraries for Java 和 Windows Azure SDK,還在 Windows Azure 訂閱中創建了 Windows Azure 存儲帳戶。您可以使用任何開發工具(包括「記事本」)創建應用程序。您只要能夠編譯 Java 項目和引用 Windows Azure Libraries for Java 即可。

配置您的應用程序以訪問隊列存儲

將下列導入語句添加到要在其中使用 Windows Azure 存儲 API 以訪問隊列的 Java 文件的頂部:

// Include the following imports to use queue APIs
import com.microsoft.windowsazure.services.core.storage.*;
import com.microsoft.windowsazure.services.queue.client.*;
設置 Windows Azure 存儲連接字元串

Windows Azure 存儲客戶端使用存儲連接字元串來存儲用於訪問數據管理服務的終結點和憑據。在客戶端應用程序中運行時,必須提供以下格式的存儲連接字元串,並對 AccountName 和 AccountKey 值使用管理門戶中列出的存儲帳戶的名稱和存儲帳戶的主訪問密鑰。此示例演示如何聲明用於保存連接字元串的靜態欄位:

// Define the connection-string with your values
public static final String storageConnectionString =
"DefaultEndpointsProtocol=http;" +
"AccountName=your_storage_account;" +
"AccountKey=your_storage_account_key";
在 Windows Azure 的角色中運行的應用程序中,此字元串可存儲在服務配置文件 ServiceConfiguration.cscfg 中,並可通過調用 RoleEnvironment.getConfigurationSettings 方法進行訪問。下面是從服務配置文件中名為 StorageConnectionString 的 Setting 元素中獲取連接字元串的示例:

// Retrieve storage account from connection-string
String storageConnectionString =
RoleEnvironment.getConfigurationSettings().get("StorageConnectionString");
如何:創建隊列

利用 CloudQueueClient 對象,可以獲得隊列的引用對象。以下代碼將創建 CloudQueueClient 對象。

本指南中的所有代碼都使用聲明了上述兩種方式之一的存儲連接字元串。還可以通過其他方式創建 CloudStorageAccount 對象。有關詳細信息,請參閱 Javadocs 文檔中的 CloudStorageAccount。

// Retrieve storage account from connection-string
CloudStorageAccount storageAccount =
CloudStorageAccount.parse(storageConnectionString);

// Create the queue client
CloudQueueClient queueClient = storageAccount.createCloudQueueClient();
使用 CloudQueueClient 對象獲取對要使用的隊列的引用。如果隊列不存在,您可以創建它。

// Retrieve a reference to a queue
CloudQueue queue = queueClient.getQueueReference("myqueue");

// Create the queue if it doesn't already exist
queue.createIfNotExist();
如何:向隊列添加消息

若要將消息插入現有隊列,請先創建一條新的 CloudQueueMessage。緊接著,調用 addMessage 方法。可從字元串(UTF-8 格式)或位元組數組創建 CloudQueueMessage。以下代碼將創建隊列(如果隊列不存在)並插入消息「Hello, World」。

// Retrieve storage account from connection-string
CloudStorageAccount storageAccount =
CloudStorageAccount.parse(storageConnectionString);

// Create the queue client
CloudQueueClient queueClient = storageAccount.createCloudQueueClient();

// Retrieve a reference to a queue
CloudQueue queue = queueClient.getQueueReference("myqueue");

// Create the queue if it doesn't already exist
queue.createIfNotExist();

// Create a message and add it to the queue
CloudQueueMessage message = new CloudQueueMessage("Hello, World");
queue.addMessage(message);
如何:查看下一條消息

通過調用 peekMessage,可以查看隊列前面的消息,而不必從隊列中將其刪除。

// Retrieve storage account from connection-string
CloudStorageAccount storageAccount =
CloudStorageAccount.parse(storageConnectionString);

// Create the queue client
CloudQueueClient queueClient = storageAccount.createCloudQueueClient();

// Retrieve a reference to a queue
CloudQueue queue = queueClient.getQueueReference("myqueue");

// Peek at the next message
CloudQueueMessage peekedMessage = queue.peekMessage();
如何:取消對下一條消息的排隊

您的代碼通過兩個步驟取消在隊列中對消息的排隊。在調用 retrieveMessage 時,您將獲得隊列中的下一條消息。從 retrieveMessage 返回的消息變得對從此隊列讀取消息的任何其他代碼不可見。默認情況下,此消息將持續 30 秒不可見。若要完全從隊列中刪除消息,您還必須調用 deleteMessage。此刪除消息的兩步過程可確保當您的代碼因硬體或軟體故障而無法處理消息時,您的其他代碼實例可以獲取同一消息並重試。您的代碼在處理消息後會立即調用 deleteMessage。

// Retrieve storage account from connection-string
CloudStorageAccount storageAccount =
CloudStorageAccount.parse(storageConnectionString);

// Create the queue client
CloudQueueClient queueClient = storageAccount.createCloudQueueClient();

// Retrieve a reference to a queue
CloudQueue queue = queueClient.getQueueReference("myqueue");

// Retrieve the first visible message in the queue
CloudQueueMessage retrievedMessage = queue.retrieveMessage();

// Process the message in less than 30 seconds, and then delete the message.
queue.deleteMessage(retrievedMessage);
如何:更改已排隊消息的內容

您可以更改隊列中已就位消息的內容。如果消息表示工作任務,則可以使用此功能更新工作任務的狀態。以下代碼使用新內容更新隊列消息,並將可見性超時設置為再延長 60 秒。這將保存與消息關聯的工作的狀態,並額外為客戶端提供一分鍾的時間來繼續處理消息。可使用此方法跟蹤隊列消息上的多步驟工作流,即使處理步驟因硬體或軟體故障而失敗,也無需從頭開始操作。通常,您還可以保留重試計數,如果某條消息的重試次數超過 n 次,您將刪除此消息。這可避免消息在每次處理時都觸發應用程序錯誤。

// Retrieve storage account from connection-string
CloudStorageAccount storageAccount =
CloudStorageAccount.parse(storageConnectionString);

// Create the queue client
CloudQueueClient queueClient = storageAccount.createCloudQueueClient();

// Retrieve a reference to a queue
CloudQueue queue = queueClient.getQueueReference("myqueue");

// Retrieve the first visible message in the queue
CloudQueueMessage message = queue.retrieveMessage();

// Modify the message content and set it to be visible in 60 seconds
message.setMessageContent("Updated contents.");
EnumSet<MessageUpdateFields> updateFields =
EnumSet.of(MessageUpdateFields.CONTENT, MessageUpdateFields.VISIBILITY);
queue.updateMessage(message, 60, updateFields, null, null);
用於對消息取消排隊的其他方法

您可以通過兩種方式自定義隊列中的消息檢索。首先,您可以獲取一批消息(最多 32 個)。其次,您可以設置更長或更短的不可見超時,從而允許您的代碼使用更多或更少的時間來徹底處理每條消息。

以下代碼示例使用 retrieveMessages 方法通過一次調用獲取 20 條消息。然後,它使用 for 循環來處理每條消息。它還將每條消息的不可見超時設置為五分鍾(300 秒)。請注意,這五分鍾超時對於所有消息都是同時開始的,因此在調用 retrieveMessages 五分鍾後,尚未刪除的任何消息都將再次變得可見。

// Retrieve storage account from connection-string
CloudStorageAccount storageAccount =
CloudStorageAccount.parse(storageConnectionString);

// Create the queue client
CloudQueueClient queueClient = storageAccount.createCloudQueueClient();

// Retrieve a reference to a queue
CloudQueue queue = queueClient.getQueueReference("myqueue");

// Retrieve 20 messages from the queue with a visibility timeout of 300 seconds
for (CloudQueueMessage message : queue.retrieveMessages(20, 300, null, null)) {
// Do processing for all messages in less than 5 minutes,
// deleting each message after processing.
queue.deleteMessage(message);
}
如何:獲取隊列長度

您可以獲得隊列中消息的估計數。downloadAttributes 方法會詢問隊列服務一些當前值,包括隊列中消息的計數。此計數僅為近似值,因為只能在隊列服務響應您的請求後添加或刪除消息。getApproximateMethodCount 方法返回通過調用 downloadAttributes 檢索到的最後一個值,而不會調用隊列服務。

// Retrieve storage account from connection-string
CloudStorageAccount storageAccount =
CloudStorageAccount.parse(storageConnectionString);

// Create the queue client
CloudQueueClient queueClient = storageAccount.createCloudQueueClient();

// Retrieve a reference to a queue
CloudQueue queue = queueClient.getQueueReference("myqueue");

// Download the approximate message count from the server
queue.downloadAttributes();

// Retrieve the newly cached approximate message count
long cachedMessageCount = queue.getApproximateMessageCount();
如何:刪除隊列

若要刪除隊列及其包含的所有消息,請對隊列對象調用 delete 方法。

// Retrieve storage account from connection-string
CloudStorageAccount storageAccount =
CloudStorageAccount.parse(storageConnectionString);

// Create the queue client
CloudQueueClient queueClient = storageAccount.createCloudQueueClient();

// Retrieve a reference to a queue
CloudQueue queue = queueClient.getQueueReference("myqueue");

// Delete the queue
queue.delete();