En qué pensar en una entrevista NALSD

Describí una típica entrevista de codificación anteriormente. Además de la codificación, casi siempre hay una pregunta sobre el diseño del sistema. (Grande) Diseño del sistema. En el caso de las entrevistas en SRE, esta es una bestia aún más interesante (para mí): NALSD. Diseño de sistema grande no abstracto. La principal diferencia entre SWE y SRE es precisamente en estas letras "NA".

¿Cuál es la diferencia y cómo prepararse? Veamos un ejemplo. Como ejemplo, tomaremos algo muy material, algo que nadie pedirá una entrevista real (en Google) :)

Por ejemplo, diseñemos una biblioteca. Para libros de papel, el habitual. El texto completo a continuación se escribió en una sesión en aproximadamente una hora para mostrar aproximadamente lo que puede hacer y lo que es importante hacer. Así que perdóname por la confusión, pero creo que sí (y por lo tanto existe).

Pregunta de NALSD: Diseñe una biblioteca pública.


Primero, nos interesan las características de la carga, o nosotros mismos hacemos una suposición razonable. Como se trata de un sistema escalable, esta es una ciudad mínima de un millón de personas. Vale la pena considerar las opciones: un edificio grande o bibliotecas de distrito más almacenamiento. Me parece que esto último es más razonable. Especialmente si no es una ciudad, sino una ciudad.

Por lo tanto, nos centraremos en este momento en el sistema de una ciudad (con algunas reservas, podemos aplicar un mecanismo similar en un nivel superior para escalar a muchas ciudades). Entonces, la ciudad es un millón de personas. Redondeamos los números para la conveniencia de las estimaciones: permita que haya 1 millón de lectores probables. Los lectores van a leer en cualquier momento independientemente uno del otro. Entonces podemos entenderlo como un simple proceso de Poisson. Pero el conteo “en la carrera” normalmente será difícil, así que tome otro paso de simplificación y simplemente tome que el 1% de los lectores querrán tomar un libro por día. En total, para más cálculos, tomamos 10,000 libros por día.

Nuestra tarea es proporcionar la posibilidad de emitir 10,000 libros por día (además de devolver los mismos 10,000 en cualquier otro día en el futuro, por cierto) en la ciudad de más de un millón. En este punto, la cuestión de la monobiblioteca o el distrito ya está desapareciendo (por cierto, para que todo el millón sean lectores potenciales, deben poder llegar a la biblioteca en un período de tiempo razonable; de ​​lo contrario, el deseo de tomar el libro seguramente disminuirá con el tiempo de espera). Por lo tanto, necesitamos evaluar la capacidad de cada biblioteca local. Es correcto hacer esto teniendo en cuenta la densidad de población y la accesibilidad, pero dado que esto no afecta en gran medida el sistema en sí, por simplicidad de cálculos, imaginemos que los ubicamos de manera uniforme. Pero esto todavía no significa cómo podemos compartirlos. Obviamente, colocar 10,000 bibliotecas con un libro de manera uniforme en la ciudad no tiene sentido, por lo que debe comprender lo que tiene sentido. Salimos al nivel inferior.

Entonces, una biblioteca. Para que tenga sentido, la mayoría de los que vienen deben encontrar el libro que necesitan. Esto significa que necesitaremos mantener un registro y un pronóstico de las consultas más populares y tener estos libros listos. Entonces, debemos mantener el surtido en principio. Sin pensarlo, diría que una biblioteca local debería tener al menos 1000 elementos, la parte superior de ellos en una multitud de copias, más superiores, menos secundarias. El libro promedio en nuestra biblioteca se lee de 3 días a 2 semanas (de hecho, la característica depende del libro, se requiere un análisis por separado aquí), lo tomamos igual a la semana promedio y seguimos adelante. Es decir, el libro tomado falta durante aproximadamente una semana, por lo que los libros más importantes deben almacenarse durante una semana (luego comenzarán a recuperarse de los retornos).

Tomemos un factor de inflación promedio de 6. Entonces, la capacidad de almacenamiento comienza en 6,000 libros. Menos significa que esto es solo una pequeña parte superior, que aún puede ayudar en algunos casos (por ejemplo, una isla con "crepúsculo" en un supermercado cerca de la sala de juegos para niños), pero lo dejaremos afuera por ahora.

En el estado de "equilibrio", regresan y toman aproximadamente el mismo día, más o menos la dispersión, pero aún necesitamos la capacidad de aceptar un mayor número de números máximos de retornos (por ejemplo, debido a una sincronización externa como vacaciones o un cambio de moda). Así es, para simular. Pero aquí y ahora tomaremos un tercero como amortiguador. En total, apoyamos 6,000 libros disponibles para su emisión, más un lugar para otros 2,000 en reserva.

Entonces, necesitamos una unidad que pueda almacenar 8000 libros. La reposición diaria es muy costosa, lo que significa que es por una semana o dos. Dos semanas, 6,000 libros, con un sesgo en las devoluciones, esto es aproximadamente 300 por día. En el momento de la apertura, podemos calificar los 8000 libros para crear el 2000 inicial en circulación antes de que regrese el primero. 2000 por 3 días = aproximadamente 600 libros por día, más buffer = 800 libros por día.

Vamos a estimar el ancho de banda y los límites de almacenamiento. Un libro toma un promedio de 2 centímetros de espacio lineal, 8000 libros - 160 metros. gire 4 veces verticalmente, 40 metros. Nos separamos en bastidores de 5 metros, obtenemos 8 bastidores de 4 estantes de 5 metros de largo. Un bibliotecario (o un robo-bibliotecario) podrá trabajar con dos bastidores, extraer un libro tomará hasta 5 segundos para alcanzarlo, 5 segundos para sacarlo o poner el libro, 5 segundos hacia atrás, un total de 15 segundos. 4 bibliotecarios nos proporcionarán aproximadamente 15 libros por minuto como máximo, es decir, aproximadamente 900 libros por hora desde el almacén aproximadamente.

Agregamos tiempo para procesar la solicitud (10s), buscar (5s), ingresar al sistema de recepción y emisión (2s) => 400 libros por hora. Por lo tanto, el almacenamiento en su punto máximo puede emitir 400 libros por hora, por lo tanto, se puede acceder a 800 libros por día en 2 horas de trabajo.

Ahora consideramos otras características: para entregar 400 libros por hora por 4 personas, es necesario acomodar a 100 personas en la sala de espera en una cola frente a la ventana de procesamiento, y para que estas personas no creen multitudes en la entrada y salida. Es decir, el grupo de entrada debe pasar 400 personas por hora en ambas direcciones. Resulta que el limitador principal ni siquiera será el almacenamiento, sino la capacidad del pasillo y el grupo de entrada.

Esto significa que será posible encontrar la relación óptima de almacenamiento y sala con cálculos más precisos.

Entonces, con la unidad ordenada, volvemos al nivel anterior. Estimamos la carga total en la biblioteca en aproximadamente 10,000 libros por día, contamos una unidad en 800 libros por día, es decir, necesitamos 12.5 unidades. Con la distribución geográfica alrededor de la ciudad, una o dos unidades alternativas (en las fronteras de la ciudad) o incluso 3-4 (adentro) serán accesibles a cada lector, lo que le permite suavizar ligeramente los picos de tráfico y / o una mayor demanda de posiciones específicas.

También sabemos que en cualquier momento se puede cerrar cualquier biblioteca (incendio, inspección sanitaria, pintar las manijas de los refrigeradores u otra cosa), con un aumento en el número de ellos, la probabilidad de que dos se caigan de la vida coincide, por lo que necesitamos una unidad de repuesto para cada 5-6 unidades En total, 15 unidades deben garantizar el rendimiento requerido, siempre que mantengan el stock estimado en sus almacenes.

Para mantener el stock estimado, tendremos que actualizar una vez por semana o dos (pensamos más arriba de dos) aproximadamente la mitad del surtido para seguir las tendencias, etc. Esto significa que cada unidad necesita transportar y exportar 4.000 libros cada dos semanas. Con cada importación y exportación, estos mismos 4.000 libros deben eliminarse del repositorio y luego se colocan otros. A 400 libros por hora, la actualización del surtido llevará 10 horas con la carga máxima. Lo que, al parecer, todavía no es tan malo, de nuevo, con la carga masiva, muchas cosas irán más rápido, sin embargo, mantener el surtido requiere 5 veces más que trabajar con la población.

El libro promedio (2cm * 20cm * 30cm) es de aproximadamente 1.5l, es decir, 4000 libros = 6 metros cúbicos. Se adapta fácilmente a una gacela. El peso de un metro cúbico de papel es de 600 kg, es decir, 6 metros cúbicos es de 3.6 toneladas. La capacidad de carga de la gacela es de una tonelada y media, por lo que se necesitarán tres gacelas. Más una copia de seguridad. Tenemos 15 unidades, actualizamos cada 2 semanas, con una distribución uniforme estamos al límite, tenemos que agregar otra gacela.

Y no tuvimos tiempo de pensar dónde y dónde llevan estas gacelas, por lo que los almacenes del proveedor y los puntos de descarga de libros que han perdido relevancia aparecen en el diagrama ...

Entonces se acabó el tiempo. ¿Qué es tan anormal en la pregunta NALSD? Escalabilidad debe estar en cualquier diseño de sistema grande. Lo principal es la concreción .

Hice muchas suposiciones y suposiciones anteriores, pero todas las estimaciones posteriores se basaron en las anteriores. Para los números, también intenté dar "cómo evaluar correctamente", sin embargo, es muy fácil olvidar hacerlo, te cansas y lo olvidas. Todavía es muy fácil quedarse con un número de memoria, sin explicación ... Pero como el diseño es concreto, si alguno de los supuestos resulta ser erróneo, se puede arreglar y volver a contar más tarde.

Como recuerdo ahora, en mi entrevista con las estimaciones, tomé un IOPS de un disco de 600, simplemente porque lo optimicé recientemente y trabajé con una matriz, donde _array_ entregó 600 IOPS ... El entrevistado me preguntó un poco sorprendido entonces: ¿600 IOPS al disco? : D

Durante la entrevista, el entrevistador puede corregir cualquiera de sus suposiciones. O agregue algún tipo de restricción (que no conocía, no pensó, no preguntó o simplemente el cambio habitual de TK sobre la marcha). Al mismo tiempo, dado que está operando exclusivamente con números específicos, esto será solo una actualización trivial de los números.

Si el ajuste de la suposición provoca un rediseño del sistema, se trata de un error de diseño o un ajuste incorrecto, o va más allá de la aplicabilidad del sistema, que tampoco es una situación rara en la vida real. Es importante no perderse esos momentos y evaluar las cifras recibidas para la realidad tanto durante la etapa de diseño como con cualquier ajuste.

Como SRE, estamos obligados a pensar en términos de escalar sistemas reales bajo las limitaciones reales del hardware real. Es muy posible que haya un algoritmo excelente que intercambie enormes costos de tiempo por una pequeña cantidad de memoria ... Pero aún así, no puede colocar un petabyte de RAM en el núcleo de un procesador en condiciones reales. Entonces, si tenemos un petabyte de RAM, entonces tenemos al menos diez mil procesadores. O veinte. O treinta. Y debemos buscar lo óptimo, no global, sino aquí y ahora, en las condiciones dadas.

No es necesario que recuerde los números exactos, pero debe tener alguna idea del orden: el mismo IOPS, que el HDD tiene alrededor de cien, y el SSD tiene cientos de miles. Pero estos cientos de miles van junto con la relación entre el costo de un terabyte de HDD y el costo de un terabyte de SSD como uno de cada tres a cuatro. Y esto no cuenta el arnés: un espacio en el estante, cuchillas para ellos, puertos en los interruptores y otras cosas que dejan de ser un centavo cuando la factura va a petabytes.

Ahora recuéstese un poco en su silla, relájese e intente diseñar un sistema para suministrar huevos de gallina frescos por suscripción.

Si desea compartir con colegas de habla inglesa, hay una opción en inglés (así como en el hub de inglés ).

Source: https://habr.com/ru/post/es435898/


All Articles