amazon-web-services - tutorial - que es amazon web services
¿Cómo se calcula y limita el rendimiento de Amazon DynamoDB? (7)
Si pago por 10 "unidades de lectura" que permiten 10 lecturas altamente consistentes por segundo, ¿se me acelerará si trato de hacer 20 lecturas en un solo segundo, incluso si fueron las únicas 20 lecturas que se produjeron en la última hora?
Sí, esto se debe al concepto mismo de que Amazon DynamoDB es un rendimiento rápido y predecible con una escalabilidad perfecta : las preguntas frecuentes citadas ya abordan esto correctamente (es decir, debe tomar operaciones / segundo literalmente), aunque el cálculo se ilustra mejor en Provisiones Rendimiento en Amazon DynamoDB de hecho:
Una unidad de Capacidad de escritura le permite realizar una escritura por segundo para elementos de hasta 1 KB de tamaño . De manera similar, una unidad de capacidad de lectura le permite realizar una lectura fuertemente consistente por segundo (o dos lecturas consistentes por segundo) de elementos de hasta 1 KB de tamaño. Los artículos más grandes requerirán más capacidad. Puede calcular el número de unidades de capacidad de lectura y escritura que necesita estimando el número de lecturas o escrituras que necesita hacer por segundo y multiplicando por el tamaño de sus elementos (redondeado al KB más cercano).
Unidades de capacidad requeridas para escrituras = Número de escrituras de artículos por segundo x tamaño de artículo (redondeado al KB más cercano)
Unidades de capacidad requeridas para lecturas * = Número de lecturas de elementos por segundo x tamaño de artículo (redondeado al KB más cercano) * Si utiliza lecturas consistentes con el tiempo, obtendrá el doble de rendimiento en términos de lecturas por segundo.
[énfasis mío]
Obtener estos cálculos para los casos de uso del mundo real es potencialmente complejo, sin embargo, asegúrese de verificar más detalles como, por ejemplo, las Pautas de rendimiento aprovisionadas en Amazon DynamoDB y en consecuencia.
¿Se promedia por segundo? ¿Por minuto? ¿Por hora?
Por ejemplo ... si pago por 10 "unidades de lectura" que permiten 10 lecturas altamente consistentes por segundo, se me acelerará si trato de hacer 20 lecturas en un solo segundo, incluso si fueron las únicas 20 lecturas que ocurrieron en la última hora? La documentación y las preguntas frecuentes de Amazon no responden a esta pregunta crítica en cualquier lugar que pueda encontrar.
La única respuesta relacionada que pude encontrar en las preguntas frecuentes ignora por completo la cuestión de cómo se calcula el uso y cuándo puede producirse la aceleración:
P: ¿Qué sucede si mi aplicación realiza más lecturas o escrituras que mi capacidad de aprovisionamiento?
R: Si su aplicación realiza más lecturas / segundos o escrituras / segundos de lo que permite la capacidad de rendimiento aprovisionado de su tabla, las solicitudes que superen su capacidad aprovisionada serán aceleradas y recibirá 400 códigos de error. Por ejemplo, si solicitó 1,000 unidades de capacidad de escritura e intenta hacer 1,500 escrituras por segundo de elementos de 1 KB, DynamoDB solo permitirá procesar 1,000 escrituras por segundo y recibirá el código de error 400 en sus solicitudes adicionales. Debe usar CloudWatch para monitorear su tasa de solicitud para asegurarse de que siempre tenga suficiente capacidad de aprovisionamiento para lograr la tasa de solicitud que necesita.
DynamoDB actualmente conserva hasta cinco minutos (300 segundos) de capacidad de lectura y escritura no utilizada
DynamoDB proporciona cierta flexibilidad en el aprovisionamiento de rendimiento por partición. Cuando no está utilizando completamente el rendimiento de una partición, DynamoDB retiene una parte de su capacidad no utilizada para futuras ráfagas de uso de rendimiento. DynamoDB actualmente conserva hasta cinco minutos (300 segundos) de capacidad de lectura y escritura sin usar. Durante un estallido ocasional de actividad de lectura o escritura, estas unidades de capacidad extra se pueden consumir muy rápidamente, incluso más rápido que la capacidad de rendimiento aprovisionado por segundo que haya definido para su tabla. Sin embargo, no diseñe su aplicación de modo que dependa de que la capacidad de ráfaga esté disponible en todo momento: DynamoDB puede usar y utiliza la capacidad de ráfaga para el mantenimiento de fondo y otras tareas sin previo aviso.
DynamoDB proporciona "Capacidad de ráfaga" que permite picos en la cantidad de datos leídos de la tabla. Puede leer más sobre esto en: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForTables.html#GuidelinesForTables.Bursting
Básicamente es lo que notaron @abjennings: usa una ventana de 5 minutos para promediar el número de lecturas de una tabla.
Mi suposición sería que no lo dicen explícitamente a propósito. Es probable que sea probable que cambie / tenga diferencias regionales / dependa de la posición de la luna y las estrellas, o divulgar la información fomentaría el abuso. Haría mis cálculos en el peor de los casos.
Parece que rastrean las escrituras en una ventana de cinco minutos y lo estrangularán cuando su promedio en los últimos cinco minutos exceda su rendimiento previsto.
Hice algunas pruebas. Creé una tabla de prueba con un rendimiento de 1 escritura / segundo. Si no escribo en él por un tiempo y luego envío un flujo de solicitudes, Amazon parece aceptar alrededor de 300 antes de que comience la aceleración.
La advertencia, por supuesto, es que esto no se menciona en ninguna documentación oficial de Amazon y podría cambiar en cualquier momento.
https://aws.amazon.com/blogs/developer/rate-limited-scans-in-amazon-dynamodb/
Es posible utilizar la biblioteca google guava para usar la clase rateLimiter para limitar la capacidad consumida.
Configuramos nuestro '' write-limit
'' en 10 units/sec
para una de las tablas. El gráfico de Cloudwatch ( ver imagen ) muestra que hemos excedido esto en una unidad ( 11 writes/sec
). Supongo que hay una pequeña sala de maniobra ( <= 10%
). De nuevo, solo estoy asumiendo ...