Aracılığıyla paylaş


Gremlin için Azure Cosmos DB sunucu yanıt üst bilgileri

ŞUNLAR IÇIN GEÇERLIDIR: Gremlin

Bu makale, Gremlin için Azure Cosmos DB sunucusunun istek yürütmesi üzerine çağırana döndürdüğü üst bilgileri kapsar. Bu üst bilgiler istek performansı sorunlarını gidermek, Azure Cosmos DB hizmetiyle yerel olarak tümleşen uygulama oluşturmak ve müşteri desteğini basitleştirmek için kullanışlıdır.

Bu üst bilgilerle bağımlılık alarak uygulamanızın taşınabilirliğini diğer Gremlin uygulamalarıyla sınırladığınıza dikkat edin. Buna karşılık, Gremlin için Azure Cosmos DB ile daha sıkı tümleştirme elde edebilirsiniz. Bu üst bilgiler bir TinkerPop standardı değildir.

Üst Bilgiler

Üst bilgi Tür Örnek Değer Eklendiğinde Açıklama
x-ms-request-charge çift 11.3243 Başarı ve Başarısızlık Kısmi yanıt iletisi için istek birimlerinde (RU/sn veya RU) tüketilen toplama veya veritabanı aktarım hızı miktarı. Bu üst bilgi, birden çok öbek içeren istekler için her devamlılıkta bulunur. Belirli bir yanıt öbeklerinin ücretini yansıtır. Yalnızca tek bir yanıt öbeklerinden oluşan istekler için bu üst bilgi toplam dolaşma maliyetiyle eşleşir. Ancak, karmaşık dolaşmaların çoğu için bu değer kısmi bir maliyeti temsil eder.
x-ms-total-request-charge çift 423.987 Başarı ve Başarısızlık İsteğin tamamı için istek birimlerinde (RU/sn veya RU) tüketilen toplama veya veritabanı aktarım hızı miktarı. Bu üst bilgi, birden çok öbek içeren istekler için her devamlılıkta bulunur. İsteğin başlangıcından bu yana toplu ücreti gösterir. Bu üst bilginin son öbekteki değeri tam istek ücretini gösterir.
x-ms-server-time-ms çift 13.75 Başarı ve Başarısızlık Bu üst bilgi, gecikme sorunlarını giderme amacıyla eklenmiştir. Gremlin için Azure Cosmos DB sunucusunun yürütmek ve kısmi yanıt iletisi oluşturmak için harcadığı süreyi milisaniye cinsinden gösterir. Bu üst bilginin değerini kullanmak ve bunu genel istek gecikme süresi uygulamalarıyla karşılaştırmak ağ gecikmesi ek yükünü hesaplayabilir.
x-ms-total-server-time-ms çift 130.512 Başarı ve Başarısızlık Gremlin için Azure Cosmos DB sunucusunun geçişin tamamını yürütmek için geçen toplam süre (milisaniye cinsinden). Bu üst bilgi her kısmi yanıta eklenir. İsteğin başlangıcından bu yana toplu yürütme süresini temsil eder. Son yanıt toplam yürütme süresini gösterir. Bu üst bilgi, gecikme süresi kaynağı olarak istemci ile sunucu arasında ayrım yapmak için kullanışlıdır. İstemcideki dolaşma yürütme süresini bu üst bilginin değeriyle karşılaştırabilirsiniz.
x-ms-status-code uzun 200 Başarı ve Başarısızlık Üst bilgi, isteğin tamamlanması veya sonlandırılmasına ilişkin iç nedeni gösterir. Uygulamanın bu üst bilginin değerine bakıp düzeltici eylem gerçekleştirmesi önerilir.
x-ms-substatus-code uzun 1003 Yalnızca Hata Azure Cosmos DB, birleşik depolama katmanının üzerine kurulu çok modelli bir veritabanıdır. Bu üst bilgi, yüksek kullanılabilirlik yığınının alt katmanlarında hata oluştuğunda hatanın nedeni hakkında ek içgörüler içerir. Uygulamanın bu üst bilgiyi depolaması ve Azure Cosmos DB müşteri desteğiyle iletişim kurarken kullanması önerilir. Bu üst bilginin değeri, hızlı sorun giderme için Azure Cosmos DB mühendisi için yararlıdır.
x-ms-retry-after-ms dize (TimeSpan) "00:00:03.9500000" Yalnızca Hata Bu üst bilgi, .NET TimeSpan türünün dize gösterimidir. Bu değer yalnızca sağlanan aktarım hızı tükenmesi nedeniyle başarısız olan isteklere eklenir. Uygulama, belirtilen süre sonunda dolaşmayı yeniden göndermelidir.
x-ms-activity-id dize (Guid) "A9218E01-3A3A-4716-9636-5BD86B056613" Başarı ve Başarısızlık Üst bilgi, isteğin benzersiz bir sunucu tarafı tanımlayıcısı içerir. Her isteğe izleme amacıyla sunucu tarafından benzersiz bir tanımlayıcı atanır. Uygulamaların, müşterilerin müşteri desteğine başvurmak isteyebileceği istekler için sunucu tarafından döndürülen etkinlik tanımlayıcılarını günlüğe kaydetmesi gerekir. Azure Cosmos DB destek personeli, Azure Cosmos DB hizmet telemetrisinde bu tanımlayıcılara göre belirli istekleri bulabilir.

Durum kodları

Sunucu tarafından durum özniteliği için x-ms-status-code döndürülen en yaygın kodlar aşağıda listelenmiştir.

Durum Açıklama
401 Kimlik doğrulama parolası Azure Cosmos DB hesap anahtarıyla eşleşmediğinde hata iletisi "Unauthorized: Invalid credentials provided" döndürülür. Azure portalında Gremlin için Azure Cosmos DB hesabınıza gidin ve anahtarın doğru olduğunu onaylayın.
404 Aynı kenar veya köşeyi aynı anda silmeye ve güncelleştirmeye çalışan eşzamanlı işlemler. "Owner resource does not exist" hata iletisi bağlantı parametrelerinde /dbs/<database name>/colls/<collection or graph name> biçiminde belirtilen veritabanı veya koleksiyonun doğru olmadığını gösterir.
409 "Conflicting request to resource has been attempted. Retry to avoid conflicts." Bu durum genellikle grafta zaten aynı tanımlayıcıya sahip bir köşe veya kenar bulunduğunda oluşur.
412 Durum kodu hata iletisiyle "PreconditionFailedException": One of the specified pre-condition is not mettamamlanır. Bu hata, kenar veya köşe okuma ile değişiklik sonrasında depoya geri yazma arasındaki iyimser eşzamanlılık denetimi ihlalini gösterir. Bu hatanın oluştuğu çoğu yaygın durum, örneğin g.V('identifier').property('name','value')özellik değişikliğidir. Gremlin altyapısı köşeyi okur, değiştirir ve geri yazar. Aynı köşeyi veya kenarı yazmaya çalışırken paralel olarak çalışan başka bir çapraz geçiş varsa, bunlardan biri bu hatayı alır. Uygulama yeniden sunucuya çapraz geçiş göndermelidir.
429 İstek azaltıldı ve x-ms-retry-after-ms değeri kadar süre sonra yeniden denenmelidir
500 "NotFoundException: Entity with the specified id does not exist in the system." ifadesini içeren hata iletisi bir veritabanı ve/veya koleksiyonun aynı adla yeniden oluşturulduğunu gösterir. Değişiklik farklı Azure Cosmos DB bileşenlerindeki önbellekleri yaydıkça ve geçersiz kılırken bu hata 5 dakika içinde kaybolur. Bu sorundan kaçınmak için her zaman benzersiz veritabanı ve koleksiyon adları kullanın.
1000 Sunucu bir iletiyi başarıyla ayrıştırdığında ancak yürütemediğinde bu durum kodu döndürülür. Genellikle sorguyla ilgili bir sorun olduğunu gösterir.
1001 Bu kod, sunucu dolaşma yürütmesini tamamladığında ancak istemciye yanıtı seri hale getiremediğinde döndürülür. Çapraz geçiş çok büyük olan veya TinkerPop protokol belirtimine uymayan karmaşık bir sonuç oluşturduğunda bu hata oluşabilir. Uygulama bu hatayla karşılaştığında geçişi basitleştirmelidir.
1003 "Query exceeded memory limit. Bytes Consumed: XXX, Max: YYY" , dolaşma izin verilen bellek sınırını aştığında döndürülür. Bellek sınırı, dolaşma başına 2 GB'tır.
1004 Bu durum kodu hatalı biçimlendirilmiş grafik isteğini gösterir. İstek seri durumdan çıkarma başarısız olduğunda, değer türü olmayan bir değer türü seri durumdan çıkarıldığında veya desteklenmeyen gremlin işlemi istendiğinde hatalı biçimlendirilmiş olabilir. Uygulama, başarılı olmadığından isteği yeniden denememelidir.
1007 Bu durum kodu genellikle hata iletisiyle "Could not process request. Underlying connection has been closed."döndürülür. İstemci sürücüsü sunucu tarafından kapatılmakta olan bir bağlantı kullanmayı denerse bu durum oluşabilir. Uygulama, geçişi farklı bir bağlantı üzerinde yeniden denemelidir.
1008 Gremlin için Azure Cosmos DB sunucusu, kümedeki trafiği yeniden dengelemek için bağlantıları sonlandırabilir. İstemci sürücüleri bu durumu işlemeli ve sunucuya istek göndermek için yalnızca canlı bağlantıları kullanmalıdır. Bazen istemci sürücüleri bağlantının kapatıldığını algılamayabilir. Uygulama bir hatayla karşılaştığında, "Connection is too busy. Please retry after sometime or open more connections." farklı bir bağlantıda dolaşmayı yeniden denemelidir.
1009 İşlem ayrılan sürede tamamlanmadı ve sunucu tarafından iptal edildi. Dar arama kapsamına kadar her geçiş atlamasının köşelerini veya kenarlarını filtreleyerek geçişlerinizi hızla çalışacak şekilde iyileştirin. İstek zaman aşımı varsayılan olarak 60 saniyedir.

Örnekler

Bir durum özniteliğini okuyan Gremlin.Net temel alan örnek bir istemci uygulaması:

// Following example reads a status code and total request charge from server response attributes.
// Variable "server" is assumed to be assigned to an instance of a GremlinServer that is connected to Azure Cosmos DB account.
using (GremlinClient client = new GremlinClient(server, new GraphSON2Reader(), new GraphSON2Writer(), GremlinClient.GraphSON2MimeType))
{
  ResultSet<dynamic> responseResultSet = await GremlinClientExtensions.SubmitAsync<dynamic>(client, requestScript: "g.V().count()");
  long statusCode = (long)responseResultSet.StatusAttributes["x-ms-status-code"];
  double totalRequestCharge = (double)responseResultSet.StatusAttributes["x-ms-total-request-charge"];

  // Status code and request charge are logged into application telemetry.
}

Gremlin Java istemcisinden durum özniteliğinin nasıl okunduğunu gösteren bir örnek:

try {
  ResultSet resultSet = this.client.submit("g.addV().property('id', '13')");
  List<Result> results = resultSet.all().get();

  // Process and consume results

} catch (ResponseException re) {
  // Check for known errors that need to be retried or skipped
  if (re.getStatusAttributes().isPresent()) {
    Map<String, Object> attributes = re.getStatusAttributes().get();
    int statusCode = (int) attributes.getOrDefault("x-ms-status-code", -1);

    // Now we can check for specific conditions
    if (statusCode == 409) {
        // Handle conflicting writes
      }
    }

    // Check if we need to delay retry
    if (attributes.containsKey("x-ms-retry-after-ms")) {
      // Read the value of the attribute as is
      String retryAfterTimeSpan = (String) attributes.get("x-ms-retry-after-ms"));

      // Convert the value into actionable duration
			LocalTime locaTime = LocalTime.parse(retryAfterTimeSpan);
			Duration duration = Duration.between(LocalTime.MIN, locaTime);

      // Perform a retry after "duration" interval of time has elapsed
    }
  }
}

Sonraki adımlar