
Me gustar铆a compartir mi historia sobre la aplicaci贸n de monolitos de migraci贸n en microservicios. Por favor, tenga en cuenta que fue durante 2012 - 2014. Es la transcripci贸n de mi presentaci贸n en dotnetconf (RU) . Voy a compartir una historia sobre c贸mo cambiar cada parte de la infraestructura.
Descripci贸n del proyecto

La idea principal del proyecto era rastrear art铆culos de Internet, analizarlos, guardar y crear feed de usuarios. Por un lado, nuestra infraestructura ten铆a que ser confiable, pero por otro lado, ten铆amos un presupuesto limitado. Como resultado, acordamos que:
- Se permite la degradaci贸n del rendimiento del sistema.
- Algunas partes de nuestra infraestructura pueden estar inactivas durante 30 minutos.
- En caso de desastre, el tiempo de inactividad puede ser de algunos d铆as.
Rastreadores

Era una parte simple de la infraestructura. Los rastreadores deben descargar, analizar y guardar. La primera implementaci贸n fue un solo rastreador, sin embargo, el mundo estaba cambiando y aparecieron muchos rastreadores diferentes. Los rastreadores se comunicaban entre s铆 mediante MsSQL.
El tiempo de inactividad no fue un problema para los rastreadores, por lo que fue muy f谩cil escalarlos:
- Automatizar provisi贸n.
- Agregar m茅tricas de negocios.
- Recoge errores.
Msql

Nuestra base de datos era de aproximadamente 1 TB.
Cl煤ster MsSQL
Hab铆a diferentes formas de crear un cl煤ster:
- SQL reflejado.
- Cl煤ster de conmutaci贸n por error de Windows: no fue un caso porque no hab铆a san / Nas.
- AlwaysOn: era completamente nuevo para nosotros y no ten铆a experiencia, por lo que no era un caso para nosotros.
Como resultado, decidimos usar el 1er. Me gustar铆a notar que no usamos testigos debido al modo as铆ncrono, por lo que creamos scripts para el cambio autom谩tico maestro -> esclavo y esclavo manual -> maestro.
Rendimiento MsSQL

El reloj avanzaba, una actuaci贸n degradante, est谩bamos buscando cuellos de botella. A veces, no fue f谩cil, es decir, est谩bamos optimizando las consultas SQL por disco io, cuando descubrimos que el rendimiento era bajo debido a la falta de RAM. Sin embargo, no fue suficiente, como soluci贸n temporal, migramos de HDD a SSD. Por un lado, aument贸 dr谩sticamente el rendimiento, pero por otro lado, no fue una soluci贸n a largo plazo.
Cola de mensajes

Nuestra aplicaci贸n hab铆a sido migrada a una cola de mensajes. Solo escrib铆amos resultados en la base de datos. Como resultado, redujimos la carga de la base de datos. Pero nos enfrentamos a un problema: 驴c贸mo organizar un cl煤ster de colas de mensajes? Al principio, creamos un modo de espera fr铆o.
WEB

Un elemento web constaba de dos partes: contenido est谩tico y contenido din谩mico del usuario.
WEB est谩tica

La parte WEB est谩tica de la infraestructura era de aproximadamente 2 TB, ten铆a que:
- Almacenar im谩genes.
- Convierte im谩genes.
- Arrastre la imagen de origen y recorte si es necesario.

Hubo 2 problemas principales: c贸mo sincronizar archivos y c贸mo crear un cl煤ster web. Hab铆a algunas formas de sincronizar archivos: comprar un almacenamiento, usar DFS y guardar archivos en cada servidor. Fue una decisi贸n dif铆cil, sin embargo, decidimos elegir la tercera forma. Para el cl煤ster web, decidimos usar NLB y CDN.
Balanceador WEB

No es una buena idea usar un solo servidor para un proyecto de alta carga, de alguna manera debe equilibrar el tr谩fico. Hab铆a 4 formas en nuestro caso:
- Equilibrador de hardware: era demasiado costoso para nosotros.
- IIS y ARR: era demasiado complicado de soportar.
- Nginx: fue lo suficientemente bueno, sin embargo, enfrentamos algunos problemas con los controles de salud.
- Haproxy: era una soluci贸n con uno de los gastos generales m谩s peque帽os.

Elegimos el cuarto camino. Est谩bamos equilibrando haproxy por DNS round robin y usuarios por cookie.
Mongodb

Unos meses m谩s tarde, nos enfrentamos a que el rendimiento de SQL no era lo suficientemente bueno nuevamente. Era un tema sofisticado, sin embargo, despu茅s de largas conversaciones, decidimos elegir Disponibilidad y tolerancia de partici贸n del teorema CAP . Como resultado, implementamos un cl煤ster MongoDB (fragmentaci贸n y r茅plica). Hubo una experiencia interesante: c贸mo crear una copia de seguridad de MongoDB, c贸mo actualizar y muchos errores de MongoDB.
Copias de seguridad y monitoreo
Implementamos la regla 3-2-1:
- Al menos 3 copias.
- Al menos 2 tipos de almacenamiento diferentes.
- Al menos 1 copia debe almacenarse en alg煤n lugar fuera.
Adem谩s, creamos y probamos un plan de recuperaci贸n ante desastres. Puedes leer sobre monitoreo aqu铆 .
Actualizaciones de aplicaciones

Como puede ver, la infraestructura no era tan f谩cil como el pastel. Tuvimos que actualizarlo de alguna manera. La actualizaci贸n casual se parec铆a a:
- Haz algo de preparaci贸n.
- Corri贸 la migraci贸n.
- Actualizaci贸n de aplicaciones web.
- Actualizaci贸n de aplicaciones de back-end.
Todos los pasos l贸gicos fueron id茅nticos para los entornos de puesta en escena / preprod / producciones, sin embargo, fue ligeramente diferente en los detalles. Entonces, creamos scripts de PowerShell con magia OOP. Fue un proceso continuo de mejora de nuestra infraestructura de CI / CD.
Conclusi贸n
| 2012 | 2014 |
---|
Servidores | 3 | 60 60 |
RAM GB | 72 | 800 |
SSD GB | 200 | 10,000 |
MsSQL gb | 150 | 700 |
MongoDB GB | 0 0 | 700 |
Art铆culos por d铆a | 10,000 | 150,000 |
Fue una historia incre铆ble sobre c贸mo mover 3 PC de escritorio a una infraestructura confiable. S茅 paciente y haz planes.
PS