2012-02-23 12 views
32

¿Se promedia por segundo? ¿Por minuto? ¿Por hora?¿Cómo se calcula y limita el rendimiento de Amazon DynamoDB?

Por ejemplo ... si pago 10 unidades de lectura, lo que permite 10 lecturas altamente consistentes por segundo, se me acelerará si trato de hacer 20 lecturas en un solo segundo, incluso si fue el único 20 lee que ocurrió 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 podría encontrar en el FAQ ignora por completo la cuestión de cómo el uso se calcula y cuando estrangulación puede ocurrir:

Q: ¿Qué pasa si mi aplicación realiza más lee o escribe a mi capacidad de aprovisionamiento?

A: Si su aplicación realiza más lecturas/segundo o escribe/segundo de capacidad de rendimiento aprovisionado de su tabla permite, peticiones por encima de su capacidad de aprovisionamiento serán estrangulado y recibirá 400 códigos de error. Por ejemplo, si ha pedido 1,000 unidades de capacidad de escritura y trata de hacer 1,500 escrituras/segundo de elementos de 1 KB, DynamoDB solo permitirá 1,000 escrituras por segundo y recibirá el código de error 400 en extra peticiones. Debe usar CloudWatch para monitorear su solicitud para asegurarse de que siempre tenga suficiente capacidad aprovisionada para alcanzar la tasa de solicitud que necesita.

Respuesta

0

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

8

Si pago por 10 "leer unidades", que permite la 10 altamente consistente lecturas por segundo, voy a ser estrangulado si trato de hacer 20 lee en un solo segundo , aunque fuera el único 20 lee que ocurrió en el última hora?

Sí, esto se debe a la concepción misma de Amazon DynamoDB siendo un rendimiento rápido y previsible, con una perfecta escalabilidad - la AYUDA citado es en realidad tratando este correctamente ya (es decir, usted tiene que tomar las operaciones/segundo, literalmente), aunque el cálculo se ilustra mejor en Provisioned Throughput in Amazon DynamoDB de hecho:

una unidad de escritura Capacidad le permite realizar una escritura por segundo para los artículos de hasta 1 KB de tamaño. Del mismo modo, una unidad de Capacidad de lectura le permite realizar una lectura muy 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 las unidades de lectura y escritura que necesita estimando el número de las lecturas o escrituras que necesita hacer por segundo y multiplicando por el tamaño de sus artículos (redondeado al KB más cercano).

unidades de capacidad requerida para escrituras = Número de línea de escrituras por segundo tamaño x elemento (redondeado al KB más próximo)

unidades de capacidad requerido para lee * = Número de línea de lecturas por segundo ítem x tamaño (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.

[el énfasis es mío]

Conseguir estos cálculos derecha para casos de uso del mundo real es potencialmente compleja, sin embargo, por favor asegúrese de comprobar más detalles, como por ejemplo, el Provisioned Throughput Guidelines in Amazon DynamoDB también en consecuencia.

+7

He leído la información que cita más arriba en el sitio de AWS antes de hacer la pregunta, y todavía encuentro que el texto es ambiguo. También me parece ilógico que se calcule literalmente cada segundo, ya que eso significa que siempre tendrá que aprovisionar demasiado para acomodar cualquier posible ráfaga corta o sufrir las consecuencias de obtener respuestas de error HTTP 400 para las lecturas adicionales/escribe –

+2

IMO, la única forma en que este servicio tiene algún sentido sería que sea al menos un poco "explosivo". La fijación de precios para esto realmente debería funcionar de manera similar a la forma en que los centros de datos cobran por el ancho de banda ... es decir, el percentil 95 de facturación. –

+0

¿Realmente lo ha probado y sabe con certeza que está estrictamente limitado, segundo a segundo, o es solo la forma en que interpreta la información publicada? –

0

Establecemos nuestro 'write-limit' en 10 units/sec para una de las tablas. El gráfico de Cloudwatch (see image) muestra que hemos excedido esto en una unidad (11 writes/sec). Supongo que hay una pequeña sala de maniobra (<= 10%). De nuevo, solo asumo que ...

+0

En mi experiencia, "ConsumedWriteCapacityUnits" no está en la misma escala que la capacidad de suministro. Debido a que cada punto de datos representa 5 minutos, debe dividir la suma de unidades consumidas por 300 en esos 5 minutos para obtener un número que sea comparable con el rendimiento aprovisionado. –

38

Parece que rastrean las escrituras en una ventana de cinco minutos y lo aceleran cuando su promedio en los últimos cinco minutos excede el 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 indica en ninguna documentación oficial de Amazon y podría cambiar en cualquier momento.

+4

Esta es la única respuesta que realmente entiende la pregunta del OP e intenta dar una respuesta de sonido. –

+1

Creo que no es verdad. En realidad lo miden por partición por segundo y comenzará a estrangular en el momento en que el rendimiento esté por encima del aprovisionado. Por lo tanto, puede ver todos los errores incluidos aunque su aprovisionamiento a través de througput esté muy por encima de – yura

+0

. Segundo, lo que dijo @yura. Puede ser acelerado incluso si las estadísticas de la nube (media de 5 minutos) nunca muestran que va por encima de su capacidad. Estallar podría salvarte un poco, pero eventualmente serás estrangulado si lo haces constantemente. –

1

De AWS:

DynamoDB conserva actualmente hasta cinco minutos (300 segundos) de lectura y la capacidad no utilizada de escritura

DynamoDB proporciona cierta flexibilidad en el aprovisionamiento de rendimiento por cada 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.

+0

¿Por qué no agrega esta información a la respuesta de @abjennings porque corrobora sus suposiciones? –