

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

# 在 Lambda 中使用 Gremlin 讀取請求的建議
<a name="lambda-functions-gremlin-read-recommendations"></a>

如果您的叢集中有一或多個僅供讀取複本，平衡這些複本之間的讀取要求是好主意。一種選項是使用[讀取器端點](feature-overview-endpoints.md)。讀取器端點會平衡複本之間的連線，即使叢集拓撲在您新增或移除複本時發生變更，或提升複本以變成新的主要執行個體時也一樣。

不過，在某些情況下，使用讀取器端點可能會導致叢集資源的使用不均。讀取器端點的運作方式是定期變更 DNS 項目指向的主機。如果用戶端在 DNS 項目變更之前開啟了許多連線，則所有連線請求都會傳送至單一 Neptune 執行個體。在高輸送量 Lambda 案例中可能會發生這種情況，其中對 Lambda 函數的大量並行請求會導致建立多個執行內容，而每個內容都有自己的連線。如果這些連線幾乎全都同時建立，則連線很可能都指向叢集中的相同複本，並一直指向該複本，直到回收執行內容為止。

在執行個體之間分發請求的一種方式是，將 Lambda 函數設定為連線至執行個體端點 (從複本執行個體端點清單中隨機選擇)，而不是讀取器端點。這種方法的缺點是它需要 Lambda 程式碼來處理叢集拓撲中的變更，方法是監控叢集，並且每當叢集的成員資格變更時就更新端點清單。

如果您正要編寫一個 Java Lambda 函數，其需要平衡叢集中執行個體之間的讀取請求，則您可以使用[適用於 Amazon Neptune 的 Gremlin 用戶端](https://github.com/aws/neptune-gremlin-client)，這是 Java Gemlin 用戶端，它了解叢集拓撲，並可跨 Neptune 叢集中的一組執行個體 公平地分發連線和請求。[這篇部落格文章](https://aws.amazon.com/blogs/database/load-balance-graph-queries-using-the-amazon-neptune-gremlin-client/)包含一個範例 Java Lambda 函數，此函數會使用適用於 Amazon Neptune 的 Gremlin 用戶端。