Delen via


Regionale eindpunten voor Azure Cosmos DB Graph-account

VAN TOEPASSING OP: Gremlin

Azure Cosmos DB Graph-database wordt wereldwijd gedistribueerd , zodat toepassingen meerdere leeseindpunten kunnen gebruiken. Toepassingen die schrijftoegang op meerdere locaties nodig hebben, moeten schrijfmogelijkheden voor meerdere regio's inschakelen.

Redenen om meer dan één regio te kiezen:

  1. Horizontale schaalbaarheid van leesbewerkingen : naarmate de belasting van toepassingen toeneemt, kan het verstandig zijn leesverkeer naar verschillende Azure-regio's te routeren.
  2. Lagere latentie : u kunt de overhead van netwerklatentie van elke doorkruising verminderen door lees- en schrijfverkeer naar de dichtstbijzijnde Azure-regio te routeren.

De vereiste voor gegevenslocatie wordt bereikt door Azure Resource Manager-beleid in te stellen voor een Azure Cosmos DB-account. De klant kan regio's beperken waarin Azure Cosmos DB gegevens repliceert.

Verkeersroutering

Azure Cosmos DB Graph-database-engine wordt uitgevoerd in meerdere regio's, die elk meerdere clusters bevatten. Elk cluster heeft honderden computers. DNS CNAME van azure Cosmos DB Graph-account accountname.gremlin.cosmos.azure.com wordt omgezet in DNS A-record van een cluster. Eén IP-adres van een load balancer verbergt interne clustertopologie.

Er wordt een regionale DNS CNAME-record gemaakt voor elke regio van het Azure Cosmos DB Graph-account. De indeling van het regionale eindpunt wordt accountname-region.gremlin.cosmos.azure.com. Het regiosegment van het regionale eindpunt wordt verkregen door alle spaties uit de naam van de Azure-regio te verwijderen. De regio voor "contoso" het globale databaseaccount heeft bijvoorbeeld "East US 2" een DNS CNAME-contoso-eastus2.gremlin.cosmos.azure.com

TinkerPop Gremlin-client is ontworpen voor gebruik met één server. De toepassing kan globale beschrijfbare DNS CNAME gebruiken voor lees- en schrijfverkeer. Regiobewuste toepassingen moeten een regionaal eindpunt gebruiken voor leesverkeer. Gebruik het regionale eindpunt alleen voor schrijfverkeer als een specifieke regio is geconfigureerd voor het accepteren van schrijfbewerkingen.

Notitie

De Azure Cosmos DB Graph-engine kan schrijfbewerking in de leesregio accepteren door verkeer naar de schrijfregio te proxyen. Het wordt niet aanbevolen om schrijfbewerkingen naar alleen-lezenregio te verzenden, omdat dit de doorkruisingslatentie verhoogt en in de toekomst onderhevig is aan beperkingen.

Globale databaseaccount CNAME verwijst altijd naar een geldig schrijfgebied. Tijdens failover aan de serverzijde van de schrijfregio werkt Azure Cosmos DB de CNAME van het globale databaseaccount bij zodat deze verwijst naar een nieuwe regio. Als de toepassing het verkeer na een failover niet kan verwerken, moet deze DNS CNAME van het globale databaseaccount gebruiken.

Notitie

Azure Cosmos DB routeert geen verkeer op basis van geografische nabijheid van de beller. Het is aan elke toepassing om de juiste regio te selecteren op basis van de unieke toepassingsbehoeften.

Detectie van portaleindpunt

De eenvoudigste manier om de lijst met regio's voor een Azure Cosmos DB Graph-account op te halen, is een overzichtsblade in Azure Portal. Het werkt voor toepassingen die niet vaak regio's wijzigen of een manier hebben om de lijst bij te werken via toepassingsconfiguratie.

Haal regio's van het Azure Cosmos DB Graph-account op uit de portal.

Hieronder ziet u algemene principes voor het openen van een regionaal Gremlin-eindpunt. De toepassing moet rekening houden met het aantal regio's om het verkeer naar en het aantal bijbehorende Gremlin-clients te verzenden om te instantiëren.

// Example value: Central US, West US and UK West. This can be found in the overview blade of you Azure Cosmos DB for Gremlin Account. 
// Look for Write Locations in the overview blade. You can click to copy and paste.
string[] gremlinAccountRegions = new string[] {"Central US", "West US" ,"UK West"};
string gremlinAccountName = "PUT-COSMOSDB-ACCOUNT-NAME-HERE";
string gremlinAccountKey = "PUT-ACCOUNT-KEY-HERE";
string databaseName = "PUT-DATABASE-NAME-HERE";
string graphName = "PUT-GRAPH-NAME-HERE";

foreach (string gremlinAccountRegion in gremlinAccountRegions)
{
  // Convert preferred read location to the form "[acountname]-[region].gremlin.cosmos.azure.com".
  string regionalGremlinEndPoint = $"{gremlinAccountName}-{gremlinAccountRegion.ToLowerInvariant().Replace(" ", string.Empty)}.gremlin.cosmos.azure.com";

  GremlinServer regionalGremlinServer = new GremlinServer(
    hostname: regionalGremlinEndPoint, 
    port: 443,
    enableSsl: true,
    username: "/dbs/" + databaseName + "/colls/" + graphName,
    password: gremlinAccountKey);

  GremlinClient regionalGremlinClient = new GremlinClient(
    gremlinServer: regionalGremlinServer,
    graphSONReader: new GraphSON2Reader(),
    graphSONWriter: new GraphSON2Writer(),
    mimeType: GremlinClient.GraphSON2MimeType);
}

SDK-eindpuntdetectie

Toepassing kan Azure Cosmos DB SDK gebruiken om lees- en schrijflocaties voor Graph-account te detecteren. Deze locaties kunnen op elk gewenst moment worden gewijzigd via handmatige herconfiguratie aan de serverzijde of door de service beheerde failover.

TinkerPop Gremlin SDK heeft geen API voor het detecteren van azure Cosmos DB Graph-databaseaccountregio's. Toepassingen die runtime-eindpuntdetectie nodig hebben, moeten 2 afzonderlijke SDK's hosten in de procesruimte.

// Depending on the version and the language of the SDK (.NET vs Java vs Python)
// the API to get readLocations and writeLocations may vary.
IDocumentClient documentClient = new DocumentClient(
    new Uri(cosmosUrl),
    cosmosPrimaryKey,
    connectionPolicy,
    consistencyLevel);

DatabaseAccount databaseAccount = await cosmosClient.GetDatabaseAccountAsync();

IEnumerable<DatabaseAccountLocation> writeLocations = databaseAccount.WritableLocations;
IEnumerable<DatabaseAccountLocation> readLocations = databaseAccount.ReadableLocations;

// Pick write or read locations to construct regional endpoints for.
foreach (string location in readLocations)
{
  // Convert preferred read location to the form "[acountname]-[region].gremlin.cosmos.azure.com".
  string regionalGremlinEndPoint = location
    .Replace("http:\/\/", string.Empty)
    .Replace("documents.azure.com:443/", "gremlin.cosmos.azure.com");
  
  // Use code from the previous sample to instantiate Gremlin client.
}

Volgende stappen