

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Amazon SQS 中 FIFO 佇列的高輸送量
<a name="high-throughput-fifo"></a>

Amazon SQS 中的高輸送量 FIFO 佇列可有效管理高訊息輸送量，同時維持嚴格的訊息順序，確保處理大量訊息之應用程式的可靠性和可擴展性。此解決方案非常適合同時需要高輸送量和排序訊息傳遞的案例。

Amazon SQS 高輸送量 FIFO 佇列在訊息排序不重要，且傳入訊息數量相對較低或極少數的情況下並非必要。例如，如果您有處理不常出現或非循序訊息的小型應用程式，則與高輸送量 FIFO 佇列相關聯的額外複雜性和成本可能不合理。此外，如果您的應用程式不需要高輸送量 FIFO 佇列提供的增強輸送量功能，選擇標準 Amazon SQS 佇列可能更具成本效益且更容易管理。

若要增強高輸送量 FIFO 佇列中的請求容量，建議增加訊息群組的數量。如需高輸送量訊息配額的詳細資訊，請參閱 *Amazon Web Services 一般參考* 中的 [Amazon SQS 服務配額](https://docs.aws.amazon.com/general/latest/gr/sqs-service.html#limits_sqs.html)。

如需每個佇列配額和資料分佈策略的資訊，請參閱 [Amazon SQS 訊息配額](quotas-messages.md)和 [SQS FIFO 佇列高輸送量的分割區和資料分配](#partitions-and-data-distribution)。

## Amazon SQS FIFO 佇列高輸送量的使用案例
<a name="high-throughput-fifo-use-cases"></a>

下列使用案例強調高輸送量 FIFO 佇列的各種應用程式，展示其在各產業和情境中的效率：

1. **即時資料處理：**處理事件處理或遙測資料擷取等即時資料串流的應用程式，可以受益於高輸送量 FIFO 佇列，以處理訊息的持續流入，同時保留其順序以進行準確分析。

1. **電子商務訂單處理：**在維護客戶交易訂單至關重要的電子商務平台中，高輸送量 FIFO 佇列可確保訂單會循序處理且不延遲，即使在尖峰購物季節也一樣。

1. **金融服務：**處理高頻率交易或交易資料的金融機構依賴高輸送量 FIFO 佇列來處理市場資料和交易，同時遵守嚴格的訊息排序法規要求。

1. **媒體串流：**串流平台和媒體分發服務利用高輸送量的 FIFO 佇列來管理媒體檔案和串流內容的交付，確保使用者的流暢播放體驗，同時維持內容交付的正確順序。

## SQS FIFO 佇列高輸送量的分割區和資料分配
<a name="partitions-and-data-distribution"></a>

Amazon SQS 將 FIFO 佇列資料存放在分割區中。*分割區*是佇列的儲存體配置，該佇列會自動複寫到 AWS 區域內的多個可用區域。您未管理分割區。相反地，Amazon SQS 會處理分割區管理。

對於 FIFO 佇列，Amazon SQS 會在下列情況下修改佇列中的分割區數目：
+ 如果目前的要求率接近或超過現有分割區可支援的值，則會配置額外的分割區，直到佇列達到地區配額為止。如需配額的相關資訊，請參閱 [Amazon SQS 訊息配額](quotas-messages.md)。
+ 如果目前的分割區使用率低，則可能會減少分割區的數目。

分割區管理會在背景自動進行，而且對您的應用程式是透明的。您的佇列和訊息隨時都可用。

### 依訊息群組 ID 分發資料
<a name="data-distribution-message-group-id"></a>

若要將訊息新增至 FIFO 佇列，Amazon SQS 會使用每則訊息群組 ID 的值做為內部雜湊函數的輸入。雜湊函數的輸出值決定要存放項目的分割區。

下圖顯示跨多個分割區的佇列。佇列的訊息群組 ID 是以項目編號為基礎。Amazon SQS 使用其雜湊函數來判斷新項目的存放位置，在此例中是依據字串 `item0` 的雜湊值。請注意，這些項目的儲存順序與新增到佇列的順序相同。每個項目的位置取決於其訊息群組 ID 的雜湊值。

![\[佇列跨越多個分割區。\]](http://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/fifo-documentation-single.png)


**注意**  
無論您 AWS 使用的訊息群組 IDs 可以有大量不同的值，Amazon SQS 都已針對 FIFO 佇列分割區中的項目統一分佈進行最佳化。

### 最佳化分割區利用率
<a name="data-distribution-partition-limitations"></a>

每個分割區最多支援每秒 3,000 則訊息進行批次處理，或支援的區域中傳送、接收和刪除作業，每秒最多可支援 300 則訊息。如需高輸送量訊息配額的詳細資訊，請參閱 *Amazon Web Services 一般參考* 中的 [Amazon SQS 服務配額](https://docs.aws.amazon.com/general/latest/gr/sqs-service.html#limits_sqs.html)。

使用批次 API 時，系統會根據 [依訊息群組 ID 分發資料](#data-distribution-message-group-id) 中所述的程序路由傳送每封訊息。路由至相同分割區的訊息會在單一交易中分組和處理。

為了最佳化 `SendMessageBatch` API 的分割區使用率， AWS 建議盡可能使用相同的訊息群組 IDs 批次處理訊息。

為了最佳化 `DeleteMessageBatch`和 `ChangeMessageVisibilityBatch` APIs的分割區使用率， AWS 建議使用 `MaxNumberOfMessages` 參數設定為 10 的`ReceiveMessage`請求，並批次處理單一`ReceiveMessage`請求傳回的接收處理。

在下列範例中，會傳送一批具有不同訊息群組識別碼的訊息。批次會分成三個群組，每個群組都會計入分割區的配額。

![\[具有不同訊息群組 ID 的一批訊息儲存在分割區中。\]](http://docs.aws.amazon.com/zh_tw/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/fifo-documentation-batch.png)


**注意**  
Amazon SQS 僅保證具有相同訊息群組 ID 內部雜湊函數的訊息會在批次請求中分組。視內部雜湊函數的輸出和分割區數量而定，具有不同訊息群組 ID 的訊息可能會被分組。由於雜湊函數或分割區數目可以隨時變更，因此在一個點上分組的訊息可能不會在稍後分組。

# 在 Amazon SQS 中啟用 FIFO 佇列的高輸送量
<a name="enable-high-throughput-fifo"></a>

您可以為任何新的或現有的 FIFO 佇列啟用高輸送量。當您建立和編輯 FIFO 佇列時，此功能包括三個新選項：
+ **啟用高輸送量 FIFO** – 為目前 FIFO 佇列中的訊息提供更高的輸送量。
+ **重複資料刪除範圍** - 指定要在佇列或訊息群組層級執行重複資料刪除。
+ **FIFO 輸送量限制** - 指定是在佇列或訊息群組層級設定 FIFO 佇列中訊息的輸送量配額。

**若要啟用 FIFO 佇列的高輸送量 (主控台)**

1. 開始[建立](creating-sqs-standard-queues.md#step-create-standard-queue)或[編輯](sqs-configure-edit-queue.md) FIFO 佇列。

1. 指定佇列的選項時，請選擇**啟用高輸送量 FIFO**。

   為 FIFO 佇列啟用高輸送量可設定相關選項，如下所示：
   + **重複資料刪除範圍**設定為**訊息群組**，這是使用 FIFO 佇列高輸送量的必要設定。
   + **FIFO 輸送量限制**設定為**每個訊息群組識別碼**，這是使用 FIFO 佇列高輸送量的必要設定。

   如果您變更使用高輸送量 FIFO 佇列所需的任何設定，則佇列的正常輸送量將生效，而重複資料刪除會依指定方式執行。

1. 繼續指定佇列的所有選項。完成時，請選擇**建立佇列**或**儲存**。

建立或編輯 FIFO 佇列後，您可用更高的 TPS [傳送訊息](creating-sqs-standard-queues.md#sqs-send-messages)至該佇列，以及[接收和刪除訊息](step-receive-delete-message.md)。如需高輸送量配額，請參閱 [Amazon SQS 訊息配額](quotas-messages.md) 中的訊息輸送量。