2016-01-20 17 views
7

Büyük bir veri deposu PutMulti çağrı (500 varlık) içeren bir Google App Engine istek işleyicisini hızlandırmaya çalışıyorum ve bunları daha küçük PutMulti çağrıları (her biri 100 varlık) göndermek için eş zamanlı gruplar halinde çalıştırıp eşzamanlı olarak çalıştı. Bundan önce Appengine datastore zaman aşımı hataları 5 ve 11 arasındaki fark nedir?

, sık sık birçok eşzamanlı istekleri işleyicisi test tarihine üzerinden gidiyor benim PutMulti aramalardan veri deposu hatası Call error 11: Deadline exceeded (timeout) alma olmuştu. Paralelleştirmeden sonra, işleyici hızlandı, ancak yine de bazen bu hatayı ve aynı zamanda bir başka hata türü de var, API error 5 (datastore_v3: TIMEOUT): The datastore operation timed out, or the data was temporarily unavailable.

Veri deposundaki çekişme nedeniyle bu hata 5, 5 ve 11 hataları arasındaki fark nedir?

+2

Gördüğünüz ilk hata, normal işlemdeki zaman aşımı olabilir, 2. büyük olasılıkla yazma çekişmesi nedeniyle olabilir. Bu konuda daha fazlası: [Datastore Hataları Kullanılıyor] (https://cloud.google.com/appengine/articles/handling_datastore_errors) – icza

+0

Teşekkürler! Harika olmaya devam et! –

cevap

1

Bu hatalar, iki farklı yerden geliyor, ilk olarak, arama hatası, RPC istemcisindeki zamanaşımının neden olduğu yerel bir hatadır. Bir RPC'nin tamamlanmasını bekleyen bir zaman aşımı olduğunu gösterir. Google.golang.org/appengine adresindeki varsayılan RPC zaman aşımı 60 saniyedir.

İkinci hata servis tarafından geliyor. Bu hata, veri deposu içinde işlemleri gerçekleştirmenin bir zaman aşımına uğradığını gösterir. Bu işlemlerden bazıları 60 saniyeden daha kısa zaman aşımına sahiptir ve tipik olarak bu çekişmeyi işaret edebilir.

Farklılıkları anlamanın daha basit bir yolu, çok sayıda değişiklikle tek bir çoklu işlem yaparsanız, ilk zaman aşımını kolaylıkla tetikleyebileceğinizi göreceksiniz. Tek bir tuşa veya küçük bir anahtar kümesine karşı önemli sayıda eşzamanlı işlem oluşturursanız, daha kolay bir şekilde bunları tetiklersiniz. Zaman aşımları, paylaşılan kaynakların doygunluğunun genel göstergeleri olduğundan, elbette bunları üretmek için birçok yol ve kombinasyon vardır. Genel olarak, bir kişi, çekişme ile ilgili sorunların olasılığını azaltmak için mümkün olan en iyi şekilde kısayol tuşları üzerinde işlemleri birleştirmenin yanı sıra uygun şekilde boyut işlemlerini ve uygun şekilde yeniden denemek isteyecektir. Başkalarının önerdiği gibi, python ve java belgelerinin bunun bazı örnekleri var.

Sen https://godoc.org/google.golang.org/appengine#IsTimeoutError yararlanmak isteyebilirler ve ilk hata sınıfı için zaman aşımı artırmak gerekiyorsa, buradan yöntemleri, bkz bağlam tarihini ayarlamak mümkün olabilir: https://godoc.org/golang.org/x/net/context#WithDeadline Not: mümkün olmayacaktır Son teslim tarihini bir son başvuru tarihinin ötesine uzatın, ancak, görevlerde veya sanal makinelerde çalışıyorsanız, uzun teslim tarihlerine kadar uzatabilirsiniz.

İlgili konular