La ejecución de cualquier plataforma distribuida escalable exige un compromiso con la confiabilidad, para garantizar que los clientes tengan lo que necesitan cuando lo necesitan. Las dependencias pueden ser bastante complejas, especialmente con una plataforma tan grande como Roblox. La creación de servicios confiables significa que, independientemente de la complejidad y el estado de las dependencias, ningún servicio dado se verá interrumpido (es decir, altamente Hoy Disponibles), funcionará sin errores (es decir, alta calidad) y sin errores (es decir Tolerancia a fallos).
Por qué importa la confiabilidad
Nuestro equipo de Identidad de cuenta está comprometido a alcanzar una mayor confiabilidad, ya que los servicios de cumplimiento que construimos son componentes centrales de la plataforma. El cumplimiento roto puede tener consecuencias graves. El costo de bloquear la operación natural de Roblox es muy alto, con recursos adicionales necesarios para recuperarse después de una falla y una experiencia de usuario debilitada.
El enfoque típico de la confiabilidad se enfoca principalmente en la disponibilidad, pero en algunos casos los términos se mezclan y se usan incorrectamente. La mayoría de las medidas de disponibilidad solo evalúan si los servicios están en funcionamiento, mientras que aspectos como la tolerancia a la partición y la consistencia a veces se olvidan o se malinterpretan.
De acuerdo con el teorema CAP, cualquier sistema distribuido solo puede garantizar dos de estos tres aspectos, por lo que nuestros servicios de cumplimiento sacrifican algo de consistencia para ser altamente disponibles y tolerantes a las particiones. Sin embargo, nuestros servicios sacrificaron poco y encontraron mecanismos para lograr una buena consistencia con los cambios arquitectónicos razonables que se explican a continuación.
El proceso para alcanzar una mayor confiabilidad es iterativo, con mediciones estrictas que se adaptan al trabajo continuo para prevenir, encontrar, detectar y corregir defectos antes de que ocurran incidentes. Nuestro equipo identificó un gran valor en las siguientes prácticas:
- Medida correcta – Cree una observabilidad completa sobre cómo se entrega la calidad a los clientes y cómo las dependencias nos entregan la calidad.
- Anticipación proactiva – Realizar actividades como revisiones arquitectónicas y evaluaciones de riesgo de dependencia.
- Priorizar la corrección – Brindar mayor atención a la resolución de informes de incidentes para el servicio y las dependencias que están vinculadas a nuestro servicio.
Construir una mayor confiabilidad exige una cultura de calidad. Nuestro equipo ya estaba invirtiendo en desarrollo basado en el rendimiento y sabe que el éxito de un proceso depende de su adopción. El equipo adoptó este proceso en su totalidad y aplicó las prácticas como estándar. El siguiente diagrama destaca los componentes del proceso:
El poder de la medición correcta
Antes de profundizar en las métricas, hay que hacer una aclaración rápida con respecto a las mediciones del nivel de servicio.
- SLO (Objetivo de nivel de servicio) es el objetivo de confiabilidad que busca nuestro equipo (es decir, 99.999%).
- SLI (Indicador de nivel de servicio) es la confiabilidad alcanzada en un marco de tiempo (es decir, 99.975 % en febrero pasado).
- SLA (Acuerdo de nivel de servicio) es la confiabilidad acordada para entregar y que nuestros consumidores esperan en un período de tiempo determinado (es decir, 99.99% por semana).
El SLI debe reflejar la disponibilidad (sin respuestas no gestionadas o faltantes), la tolerancia a fallos (sin errores de servicio) y la calidad alcanzada (sin errores inesperados). Por lo tanto, definimos nuestro SLI como el “índice de éxito” de respuestas exitosas en comparación con el total de solicitudes enviadas a un servicio. Las respuestas exitosas son aquellas solicitudes que fueron despachadas en tiempo y forma, es decir, no ocurrieron errores de conectividad, servicio o inesperados.
Este SLI o Success Ratio se recoge desde el punto de vista de los consumidores (es decir, clientes). La intención es medir la experiencia real de extremo a extremo brindada a nuestros consumidores para que estemos seguros de que se cumplen los SLA. No hacerlo crearía una falsa sensación de confiabilidad que ignora todas las preocupaciones de infraestructura para conectarse con nuestros clientes. Al igual que el SLI del consumidor, recopilamos el SLI de dependencia para rastrear cualquier riesgo potencial. En la práctica, todos los SLA de dependencia deben alinearse con el SLA de servicio y existe una dependencia directa con ellos. El fracaso de uno implica el fracaso de todos. También rastreamos e informamos las métricas del propio servicio (es decir, el servidor), pero esta no es la fuente práctica de alta confiabilidad.
Además de los SLI, cada compilación recopila métricas de calidad que informa nuestro flujo de trabajo de CI. Esta práctica ayuda a reforzar con fuerza las puertas de calidad (es decir, la cobertura de código) y reportar otras métricas significativas, como el cumplimiento del estándar de codificación y el análisis de código estático. Este tema se trató anteriormente en otro artículo, Creación de microservicios impulsados por el rendimiento. La observancia diligente de la calidad se suma cuando se habla de confiabilidad, porque cuanto más invertimos para alcanzar puntajes excelentes, más seguros estamos de que el sistema no fallará en condiciones adversas.
Nuestro equipo tiene dos tableros. One ofrece toda la visibilidad tanto del SLI de consumidores como del SLI de dependencias. El segundo muestra todas las métricas de calidad. Estamos trabajando para fusionar todo en un solo tablero, de modo que todos los aspectos que nos importan estén consolidados y listos para ser informados en cualquier período de tiempo.
Anticiparse al fracaso
"Hacer" Reseñas arquitectónicas es una parte fundamental para ser confiable. Primero, determinamos si hay redundancia y si el servicio tiene los medios para sobrevivir cuando las dependencias se caen. Más allá de las ideas típicas de replicación, la mayoría de nuestros servicios aplicaron técnicas mejoradas de hidratación de caché dual, estrategias de recuperación dual (como colas locales de conmutación por error) o estrategias de pérdida de datos (como soporte transaccional). Estos temas son lo suficientemente extensos como para justificar otra entrada de blog, pero en última instancia, la mejor recomendación es implementar ideas que consideren escenarios de desastre y minimicen cualquier penalización de rendimiento.
Otro aspecto importante a anticipar es cualquier cosa que pueda mejorar la conectividad. Eso significa ser agresivo con la latencia baja para los clientes y prepararlos para un tráfico muy alto utilizando técnicas de control de caché, sidecars y políticas de rendimiento para tiempos de espera, interruptores automáticos y reintentos. Estas prácticas se aplican a cualquier cliente, incluidos cachés, almacenes, colas y clientes interdependientes en HTTP y gRPC. También significa mejorar las señales saludables de los servicios y comprender que los controles de salud juegan un papel importante en la orquestación de todos los contenedores. La mayoría de nuestros servicios emiten mejores señales de degradación como parte de los comentarios de verificación de estado y verifican que todos los componentes críticos funcionen antes de enviar señales saludables.
Desglosar los servicios en partes críticas y no críticas ha demostrado ser útil para centrarse en la funcionalidad que más importa. Solíamos tener puntos finales solo para administradores en el mismo servicio y, aunque no se usaban con frecuencia, afectaban las métricas generales de latencia. Trasladarlos a su propio servicio impactó cada métrica en una dirección positiva.
Evaluación del riesgo de dependencia es una herramienta importante para identificar problemas potenciales con las dependencias. Esto significa que identificamos las dependencias con SLI bajo y solicitamos la alineación de SLA. Esas dependencias necesitan atención especial durante los pasos de integración, por lo que dedicamos más tiempo a comparar y probar si las nuevas dependencias son lo suficientemente maduras para nuestros planes. Un buen ejemplo es la adopción temprana que tuvimos para Roblox Storage-as-a-Service. La integración con este servicio requería la presentación de tickets de errores y reuniones periódicas de sincronización para comunicar hallazgos y comentarios. Todo este trabajo utiliza la etiqueta de "confiabilidad" para que podamos identificar rápidamente su fuente y prioridades. La caracterización sucedió a menudo hasta que teníamos la confianza de que la nueva dependencia estaba lista para nosotros. Este trabajo adicional ayudó a llevar la dependencia al nivel requerido de confiabilidad que esperamos brindar actuando juntos por un objetivo común.
Llevar estructura al caos
Nunca es deseable tener incidentes. Pero cuando suceden, hay información significativa para recopilar y aprender para ser más confiables. Nuestro equipo tiene un informe de incidentes de equipo que se crea más allá del típico informe de toda la empresa, por lo que nos centramos en todos los incidentes, independientemente de la escala de su impacto. Identificamos la causa raíz y priorizamos todo el trabajo para mitigarla en el futuro. Como parte de este informe, llamamos a otros equipos para solucionar incidentes de dependencia con alta prioridad, realizar un seguimiento con la resolución adecuada, retrospeccionar y buscar patrones que puedan aplicarse a nosotros.
El equipo produce un Reporte Mensual de Confiabilidad por Servicio que incluye todos los SLI aquí explicados, los tickets que hemos abierto por fiabilidad y las posibles incidencias asociadas al servicio. Estamos tan acostumbrados a generar estos informes que el siguiente paso natural es automatizar su extracción. Es importante realizar esta actividad periódica, y es un recordatorio de que la confiabilidad se está rastreando y considerando constantemente en nuestro desarrollo.
Nuestra instrumentación incluye métricas personalizadas y alertas mejoradas para que nos localicen lo antes posible cuando ocurran problemas conocidos y esperados. Todas las alertas, incluidos los falsos positivos, se revisan cada semana. En este punto, es importante pulir toda la documentación para que nuestros consumidores sepan qué esperar cuando se activan las alertas y cuando ocurren los errores, y luego todos saben qué hacer (por ejemplo, los libros de jugadas y las pautas de integración se alinean y actualizan con frecuencia).
En definitiva, la adopción de la calidad en nuestra cultura es el factor más crítico y decisivo para alcanzar una mayor confiabilidad. Podemos observar como estas prácticas aplicadas a nuestro día a día ya están dando sus frutos. Nuestro equipo está obsesionado con la confiabilidad y es nuestro logro más importante. Hemos aumentado nuestra conciencia sobre el impacto que podrían tener los posibles defectos y cuándo podrían introducirse. Los servicios que implementaron estas prácticas han alcanzado consistentemente sus SLO y SLA. Los informes de confiabilidad que nos ayudan a rastrear todo el trabajo que hemos estado haciendo son un testimonio del trabajo que ha hecho nuestro equipo y son lecciones invaluables para informar e influir en otros equipos. Así es como la cultura de confiabilidad toca todos los componentes de nuestra plataforma.
El camino hacia una mayor confiabilidad no es fácil, pero es necesario si desea crear una plataforma confiable que reinvente cómo se unen las personas.
Alberto es ingeniero de software principal en el equipo de identidad de cuenta en Roblox. Ha estado en la industria de los juegos durante mucho tiempo, con créditos en muchos títulos de juegos AAA y plataformas de redes sociales con un fuerte enfoque en arquitecturas altamente escalables. Ahora está ayudando a Roblox a crecer y madurar aplicando las mejores prácticas de desarrollo.
El puesto Confiabilidad de plataforma a gran escala apareció por primera vez en Blog de Roblox.
- "
- a
- Nuestra Empresa
- Mi Cuenta
- Lograr
- alcanzado
- actividades
- actividad
- adición
- Adicionales
- Adopción
- adverso
- Agreement
- Todos
- ya haya utilizado
- análisis
- Otra
- anticiparse a
- aplicada
- Aplicá
- La aplicación de
- enfoque
- arquitectónico
- en torno a
- artículo
- asociado
- automatizado
- disponibilidad
- Hoy Disponibles
- conciencia
- porque
- antes
- "Ser"
- a continuación
- MEJOR
- Más allá de
- Blog
- llevar
- Error
- build
- llamar al
- servicios sociales
- cases
- Causa
- Cheques
- clientes
- código
- Codificación
- recoger
- cómo
- hacer
- compromiso
- comprometido
- Algunos
- Comunicarse
- en comparación con
- compliance
- componentes
- condiciones
- confianza
- seguros
- Contacto
- Conectividad
- Considerar
- constantemente
- consumidor
- Clientes
- Envase
- Core
- podría
- Para crear
- creado
- Créditos
- crítico
- Cultura
- personalizado
- Clientes
- página de información de sus operaciones
- datos
- más profundo
- liberado
- entregar
- entrega
- demandas
- depende
- Determinar
- Desarrollo
- de reservas
- desastre
- distribuidos
- DE INSCRIPCIÓN
- impulsados
- durante
- Temprano en la
- de extremo a extremo
- ingeniero
- especialmente
- todos
- todo
- ejemplo
- excelente,
- esperar
- esperado
- experience
- en los detalles
- Fracaso
- realimentación
- Nombre
- Fijar
- Focus
- se centra
- enfoque
- seguir
- siguiendo
- formulario
- encontrado
- Desde
- ser completados
- funcional
- a la fatiga
- fundamental
- futuras
- juego
- -
- la generación de
- objetivo
- candidato
- Incremento
- garantizamos
- orientaciones
- suceder
- pasó
- Salud
- ayuda
- ayudando
- ayuda
- esta página
- Alta
- más alto
- destacados
- altamente
- Cómo
- HTTPS
- ideas
- Identifique
- Identidad
- Impacto
- implementar
- implementado
- importante
- mejorar
- mejorado
- la mejora de
- En otra
- incluye
- Incluye
- aumentado
- energético
- influir
- información
- EN LA MINA
- integración
- Intención
- metas de
- IT
- sí mismo
- Saber
- conocido
- APRENDE:
- Nivel
- pequeño
- local
- Largo
- Mira
- para lograr
- pareo
- Cuestiones
- un estudiante adulto
- madurez
- sentido
- significativo
- significa
- medir
- Medios
- reuniones
- Métrica
- mezclado
- más,
- MEJOR DE TU
- emocionante
- Natural
- necesario
- sin embargo
- funcionar
- Inteligente
- orquestación
- solicite
- Otro
- total
- EL DESARROLLADOR
- parte
- Personas
- actuación
- piezas
- jubilación
- plataforma
- Plataformas
- Jugar
- punto
- Punto de vista.
- políticas
- positivo
- posible
- posible
- industria
- presente
- Director de la escuela
- lista de prioridades
- problemas
- calidad
- Búsqueda
- con rapidez
- en comunicarse
- mejor
- Recuperar
- recuperación
- reflejar
- con respecto a
- confianza
- reporte
- Informes
- solicitudes
- Requisitos
- Recursos
- Reseñas
- Riesgo
- carretera
- Roblox
- Función
- raíz
- correr
- mismo
- escalable
- Escala
- sentido
- de coches
- Servicios
- similares
- desde
- soltero
- So
- Social
- redes sociales
- plataformas de redes sociales
- Software
- Ingeniero de Software
- algo
- especial
- stand
- estándar
- Estado
- tiendas
- estrategias
- fuerte
- comercial
- exitosos
- SOPORTE
- te
- hablar
- equipo
- técnicas
- términos
- test
- La
- por lo tanto
- Tres
- entradas
- equipo
- marco temporal
- juntos
- tolerancia
- del IRS
- tema
- Temas
- seguir
- tráfico
- comprensión
- us
- propuesta de
- verificar
- Ver
- la visibilidad
- semana
- ¿
- sean
- mientras
- sin
- Actividades:
- trabajando
- se