

# PERF05-BP05 選擇網路通訊協定以提高效能
<a name="perf_select_network_protocols"></a>

評估您的工作負載的效能要求，並且選擇可最佳化您的工作負載整體效能的網路通訊協定。

實現輸送量的延遲和頻寬之間存在關係。例如，如果您的檔案傳輸使用傳輸控制協定 (TCP)，較高的延遲會降低整體輸送量。有一些方法可以使用 TCP 調校和最佳化的傳輸通訊協定來解決這個問題 (有些方法則會使用使用者資料包協定 (UDP))。

 [可擴展可靠資料包 (SRD)](https://ieeexplore.ieee.org/document/9167399) 通訊協定是 AWS 針對提供可靠資料包交付的 Elastic Fabric Adapter 所建置的網路傳輸通訊協定。與 TCP 通訊協定不同，SRD 可以重新排序封包並且不依序交付它們。SRD 的這個不依序交付機制會透過替代路徑平行傳送封包，增加輸送量。 

 **常見的反模式：** 
+  無論效能需求為何，都可以將 TCP 用於所有工作負載。 

 **建立此最佳實務的優勢：** 
+  為工作負載元件之間的通訊選擇適當的通訊協定，便可確保達到該工作負載的最佳效能。 
+  確認針對使用者與工作負載元件之間的通訊使用適當的通訊協定，可協助改善您的應用程式的整體使用者體驗。例如，藉由同時使用 TCP 和 UDP，VDI 工作負載可以針對關鍵資料利用 TCP 的可靠性，針對即時資料利用 UDP 的速度。 

 **未建立此最佳實務時的曝險等級：**中 (使用不適當的網路通訊協定會導致效能不佳，例如緩慢的回應時間、高延遲和可擴展性不佳) 

## 實作指引
<a name="implementation-guidance"></a>

改善您的工作負載效能的主要考慮是了解延遲和輸送量要求，然後選擇可最佳化效能的網路通訊協定。

 **考慮使用 TCP 的時機** 

 TCP 提供可靠的資料交付，並且可用於可靠性和保證資料交付很重要的工作負載元件間通訊。許多 Web 式應用程式仰賴 TCP 型通訊協定，例如 HTTP 和 HTTPS，針對與 AWS 上的伺服器的通訊開啟 TCP 通訊端。電子郵件和檔案資料傳輸是也會使用 TCP 的常見應用程式，原因是 TCP 控制資料交換率和網路壅塞的能力。使用 TLS 與 TCP 會對通訊增加一些負擔，導致提高延遲和降低輸送量。負擔主要來自交握處理的增加負擔，需要數個往返才能完成。一旦交握完成，加密和解密資料的負擔相對小。 

 **考慮使用 UDP 的時機** 

 UDP 是無連線導向的通訊協定，因此適用於需要快速、有效傳輸的應用程式，例如日誌、監控和 VoIP 資料。此外，如果您有會回應來自大量用戶端之小型查詢的工作負載元件，請考慮使用 UDP，以確保最佳工作負載效能。資料包傳輸層安全性 (DTLS) 是等同於 TLS 的 UDP。使用 DTLS 與 UDP 時，負擔是來自加密和解密資料，因為交握處理已簡化。DTLS 也會對 UDP 封包增加小量負擔，因為它包含額外欄位以指出安全參數以及偵測竄改。 

 **考慮使用 SRD 的時機** 

 Scalable Reliable Datagram (SRD) 是針對高輸送量工作負載最佳化的網路傳輸通訊協定，因為它能夠在多個路徑之間負載平衡流量，並且快速從封包捨棄或連結失敗復原。因此 SRD 最適合用於需要運算節點之間高輸送量和低延遲通訊的高效能運算 (HPC) 工作負載。這可能包含平行處理任務，例如牽涉到在節點之間大量資料傳輸的模擬、建模和資料分析。 

 **實作步驟** 

1.  使用 [AWS Global Accelerator](https://aws.amazon.com/global-accelerator/) 和 [AWS Transfer Family](https://aws.amazon.com/aws-transfer-family/) 服務來改善您的線上檔案傳輸應用程式的輸送量。AWS Global Accelerator 服務可協助您達成用戶端裝置與 AWS 上工作負載之間的較低延遲。使用 AWS Transfer Family，您可以使用 TCP 型通訊協定，例如 Secure Shell File Transfer Protocol (SFTP) 和 File Transfer Protocol over SSL (FTPS)，安全地擴展和管理您對於 AWS 儲存服務的檔案傳輸。 

1.  使用網路延遲來判斷 TCP 是否適合工作負載元件之間的通訊。如果您的用戶端應用程式與伺服器之間的網路延遲高，則 TCP 三向交握會耗費一些時間，因此會影響您的應用程式的回應能力。例如到第一個位元組的時間 (TTFB) 和往返時間 (RTT) 等指標可用來測量網路延遲。如果您的工作負載為使用者提供動態內容的服務，請考慮使用 [Amazon CloudFront](https://aws.amazon.com/cloudfront/)，這會建立與每個動態內容來源的持久性連線，消除會減緩每個用戶端請求的連線設定時間。 

1.  使用 TLS 與 TCP 或 UDP 會由於加密和解密的影響，導致對您的工作負載增加延遲和減少輸送量。針對此類工作負載，請考慮 [Elastic Load Balancing](https://aws.amazon.com/elasticloadbalancing/) 上的 SSL/TLS 卸載，藉由允許負載平衡器處理 SSL/TLS 加密和解密程序而不是讓後端執行個體進行處理，來改善工作負載效能。這可協助減少後端執行個體上的 CPU 使用率，可以改善效能和增加容量。 

1.  使用 [Network Load Balancer (NLB)](https://aws.amazon.com/elasticloadbalancing/network-load-balancer/) 來部署依賴 UDP 通訊協定的服務，例如身分驗證和授權、記錄、DNS、IoT 和串流媒體，改善您的工作負載的效能和可靠性。NLB 會在多個目標之間分散傳入 UDP 流量，讓您水平地擴展工作負載、增加容量以及減少單一目標的負擔。 

1.  針對您的高效能運算 (HPC) 工作負載，請考慮使用[彈性網路介面卡 (ENA) 快速版](https://aws.amazon.com/about-aws/whats-new/2022/11/elastic-network-adapter-ena-express-amazon-ec2-instances/)功能，該功能使用 SRD 通訊協定來改善網路效能，方法是針對 EC2 執行個體之間的網路流量提供較高的單一流量頻寬 (25Gbps) 和較低的尾端延遲 (99.9 百分位數)。 

1.  使用 [Application Load Balancer (ALB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) 來路由和負載平衡工作負載元件之間的 gRPC (遠端程序呼叫) 流量或已啟用 gRPC 的用戶端與服務之間的流量。gRPC 會使用 TCP 型 HTTP/2 通訊協定進行傳輸，並且提供如較輕網路足跡、壓縮、有效二進位序列化、支援多種語言和雙向串流的優點。 

## 資源
<a name="resources"></a>

 **相關文件：** 
+  [Amazon EBS - 最佳化的執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html) 
+  [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) 
+  [Linux 上的 EC2 增強型聯網](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/enhanced-networking.html) 
+  [Windows 上的 EC2 增強型聯網](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/enhanced-networking.html) 
+  [EC2 置放群組](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html) 
+  [在 Linux 執行個體上啟用搭配彈性網路轉接器 (ENA) 的增強型聯網](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/enhanced-networking-ena.html) 
+  [Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html) 
+  [AWS 的聯網產品](https://aws.amazon.com/products/networking/) 
+  [Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw) 
+  [轉換到 Amazon Route 53 中以延遲為基礎的路由](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/TutorialTransitionToLBR.html) 
+  [VPC 端點](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html) 
+  [VPC Flow Logs](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html) 

 **相關影片：** 
+  [與 AWS 和混合 AWS 網路架構的連線 (NET317-R1)](https://www.youtube.com/watch?v=eqW6CPb58gs) 
+  [最佳化 Amazon EC2 執行個體的網路效能 (CMP308-R1)](https://www.youtube.com/watch?v=DWiwuYtIgu0) 
+ [調整您的雲端：改善應用程式的全球網路效能](https://www.youtube.com/watch?v=00ukhVcgWrs)
+ [使用 EFA 和 SRD 的應用程式擴展](https://pages.awscloud.com/HPC-Application-Scaling-with-Elastic-Fabric-Adapter-EFA-and-Scalable-Reliable-Datagram-SRD_2020_0004-CMP_OD.html)

 **相關範例：** 
+  [AWS Transit Gateway 和可擴展的安全解決方案](https://github.com/aws-samples/aws-transit-gateway-and-scalable-security-solutions) 
+  [AWS 聯網研討會](https://networking.workshop.aws/) 