Trabalhando com cotas de serviço - AWS SimSpace Tecelão

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á.

Trabalhando 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 obter uma lista de cotas de serviço, consulteSimSpace Weaverendpoints e cotas. As APIs nesta seção são do conjunto de APIs de aplicativos. As APIs de aplicativos são diferentes das APIs de serviço. As APIs do aplicativo fazem parte do SDK do aplicativo SimSpace Weaver. Você pode encontrar a documentação das APIs do aplicativo na pasta do SDK do aplicativo em seu sistema local:

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

Conheça os limites de um aplicativo

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

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

Uma referência ao app.

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);

Obtenha a quantidade de recursos usados por um aplicativo

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

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

Uma referência ao app.

A API retorna uma referência a umstruct que contém as métricas. Uma contra-métrica mantém um valor total contínuo e só aumenta. Uma métrica de medição contém um valor que pode aumentar ou diminuir. O tempo de execução do aplicativo atualiza um contador sempre que um evento aumenta o valor. O tempo de execução só atualiza os medidores quando você chama a API. SimSpace O Weaver garante que a referência seja válida por toda a vida útil do aplicativo. Chamadas repetidas para a API não mudarã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 ar

A API doResetRuntimeMetrics aplicativo redefine os valores noAppRuntimeMetricsstruct.

Result<void> ResetRuntimeMetrics(Application& app) noexcept

O exemplo a seguir demonstra como fazer uma chamadaResetRuntimeMetrics no seu 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 a um limite

Uma chamada de API de aplicativo que exceda um limite retornará umErrorCode::CapacityExceeded, exceto para transferências de entidades. SimSpace O Weaver lida com transferências de entidades de forma assíncrona como parte das operações de Commit e da API doBeginUpdate aplicativo, 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 na transferência, você pode comparar os valores atuais derejected_incoming_transfer_counter erejected_outgoing_transfer_counter (noAppRuntimeMetricsstruct) com seus valores anteriores. As entidades rejeitadas não estarão na partição, mas o aplicativo ainda poderá simulá-las.

Ficar sem memória

SimSpace O Weaver usa um processo de coleta de lixo para limpar e liberar memória liberada. É 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 podem exceder o limite de memória reservada do aplicativo. SimSpace O Weaver retornará um erro interno com uma mensagem que contémOutOfMemory (e detalhes adicionais). Para obter mais informações, consulteEspalhe gravações ao longo do tempo

Práticas recomendadas

As melhores práticas a seguir são diretrizes gerais para criar seus aplicativos a fim de evitar ultrapassar ar os limites. Eles podem não se aplicar ao design específico do seu aplicativo.

Monitore com frequência e diminua a velocidade

Você deve monitorar suas métricas com frequência e reduzir a velocidade das 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 trabalhador e reduzir a necessidade de transferências remotas de entidades entre trabalhadores.

Espalhe gravações ao longo do tempo

O número e o tamanho das atualizações em um tick 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 tick. 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 tick ou 1,5 KB para cada entidade.