Trabalhar com cotas de serviço - AWS SimSpace Weaver

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Trabalhar com cotas de serviço

Esta seção descreve como trabalhar com as cotas de serviço do SimSpace Weaver. As cotas também são chamadas de limites. Para uma lista de cotas de serviço, consulte SimSpace Terminais e cotas do Weaver. As APIs nesta seção são do conjunto de APIs de aplicativo. As APIs de aplicativo são diferentes das APIs de serviço. As APIs de aplicativo fazem parte do SDK do aplicativo do SimSpace Weaver. Você pode encontrar a documentação das APIs de aplicativo na pasta do aplicativo do SDK em seu sistema local:

sdk-folder\SimSpaceWeaverAppSdk-sdk-version\documentation\index.html

Obter os limites de um aplicativo

Você pode usar a API de aplicativo RuntimeLimits para consultar os limites de um aplicativo.

Result<Limit> RuntimeLimit(Application& app, LimitType type)
Parâmetros
Application& app

Uma referência ao aplicativo.

LimitTypeTipo

Uma enumeração com os seguintes tipos de limite:

enum LimitType { Unset = 0, EntitiesPerPartition = 1, RemoteEntityTransfers = 2, LocalEntityTransfers = 3 };

O exemplo a seguir consulta o limite de contagem de entidades.

WEAVERRUNTIME_TRY(auto entity_limit, Api::RuntimeLimit(m_app, Api::LimitType::EntitiesPerPartition)) Log::Info("Entity count limit", entity_limit.value);

Obter a quantidade de recursos usados por um aplicativo

Você pode chamar a API de aplicativo RuntimeMetrics para obter a quantidade de recursos usados por um aplicativo:

Result<std::reference_wrapper<const AppRuntimeMetrics>> RuntimeMetrics(Application& app) noexcept
Parâmetros
Application& app

Uma referência ao aplicativo.

A API retorna uma referência a uma struct que contém as métricas. Um contador de métricas contém um valor total contínuo crescente. Um medidor de métricas contém um valor que pode aumentar ou diminuir. O tempo de execução do aplicativo atualiza um contador sempre que um evento aumenta em valor. O tempo de execução só atualiza os medidores quando você chama a API. O SimSpace Weaver garante que a referência seja válida durante toda a vida útil do aplicativo. Chamadas repetidas para a API não alterarão a referência.

struct AppRuntimeMetrics { uint64_t total_committed_ticks_gauge, uint32_t active_entity_gauge, uint32_t ticks_since_reset_counter, uint32_t load_field_counter, uint32_t store_field_counter, uint32_t created_entity_counter, uint32_t deleted_entity_counter, uint32_t entered_entity_counter, uint32_t exited_entity_counter, uint32_t rejected_incoming_transfer_counter, uint32_t rejected_outgoing_transfer_counter }

Redefinir métricas

A API de aplicativo ResetRuntimeMetrics redefine os valores no AppRuntimeMetricsstruct.

Result<void> ResetRuntimeMetrics(Application& app) noexcept

O exemplo a seguir demonstra como fazer chamadas ResetRuntimeMetrics pelo app.

if (ticks_since_last_report > 100) { auto metrics = WEAVERRUNTIME_EXPECT(Api::RuntimeMetrics(m_app)); Log::Info(metrics); ticks_since_last_report = 0; WEAVERRUNTIME_EXPECT(Api::ResetRuntimeMetrics(m_app)); }

Exceder um limite

Uma chamada de API do aplicativo que excede um limite retornará um ErrorCode::CapacityExceeded, exceto para transferências de entidades. O SimSpace Weaver trata as transferências de entidades de forma assíncrona como parte das operações da API de aplicativo Confirmar e BeginUpdate. Portanto, não há uma operação específica que retorne um erro se uma transferência falhar devido ao limite de transferência da entidade. Para detectar falhas de transferência, compare os valores atuais de rejected_incoming_transfer_counter e rejected_outgoing_transfer_counter (no AppRuntimeMetricsstruct) com os valores anteriores. As entidades rejeitadas não estarão na partição, mas o aplicativo ainda poderá simulá-las.

Ficar sem memória

O SimSpace Weaver usa um processo de coleta de lixo para limpar e liberar memória. É possível gravar dados mais rápido do que o coletor de lixo pode liberar memória. Se isso acontecer, as operações de gravação poderão exceder o limite de memória reservada do aplicativo. O SimSpace Weaverretornará um erro interno com uma mensagem que contém OutOfMemory e detalhes adicionais. Para obter mais informações, consulte Distribua gravações ao longo do tempo.

Práticas recomendadas

As práticas recomendadas a seguir são diretrizes gerais para criar aplicativos e evitar ultrapassar limites. Elas podem não se aplicar ao design específico do seu aplicativo.

Monitorar com frequência e diminuir a velocidade

Você deve monitorar suas métricas com frequência e desacelerar as operações que estão perto de atingir um limite.

Evite exceder os limites de assinatura e de transferência

Se possível, projete sua simulação para reduzir o número de assinaturas remotas e transferências de entidades. Você pode usar grupos de posicionamento para colocar várias partições no mesmo operador e reduzir a necessidade de transferências remotas de entidades entre operadores.

Distribua gravações ao longo do tempo

O número e o tamanho das atualizações em uma marcação podem ter um impacto significativo no tempo e na memória necessários para confirmar uma transação. Grandes requisitos de memória podem fazer com que o tempo de execução do aplicativo fique sem memória. Você pode distribuir as gravações ao longo do tempo para reduzir o tamanho total médio das atualizações por marcação. Isso pode ajudar a melhorar o desempenho e evitar ultrapassar os limites. Recomendamos que você não escreva mais do que uma média de 12 MB em cada marcação ou 1,5 KB para cada entidade.