Hoy recibimos un "requisito" interesante de un cliente.
Quieren un 100% de tiempo de actividad con conmutación por error fuera del sitio en una aplicación web. Desde el punto de vista de nuestra aplicación web, esto no es un problema. Fue diseñado para poder escalar en varios servidores de bases de datos, etc.
Sin embargo, debido a un problema de red, parece que no puedo entender cómo hacerlo funcionar.
En pocas palabras, la aplicación vivirá en servidores dentro de la red del cliente. Se accede tanto por personas internas como externas. Quieren que mantengamos una copia del sistema fuera del sitio que, en caso de una falla grave en sus instalaciones, inmediatamente se recuperaría y se haría cargo.
Ahora sabemos que no hay absolutamente ninguna manera de resolverlo para las personas internas (¿paloma mensajera?), Pero quieren que los usuarios externos ni siquiera lo noten.
Francamente, no tengo la menor idea de cómo esto podría ser posible. Parece que si pierden la conectividad a Internet, entonces tendríamos que hacer un cambio de DNS para reenviar el tráfico a las máquinas externas ... Lo que, por supuesto, lleva tiempo.
Ideas?
ACTUALIZAR
Tuve una discusión con el cliente hoy y aclararon sobre el tema.
Se quedaron atrapados en el número 100%, diciendo que la aplicación debería permanecer activa incluso en caso de inundación. Sin embargo, ese requisito solo entra en vigor si lo alojamos para ellos. Dijeron que manejarían el requisito de tiempo de actividad si la aplicación vive completamente en sus servidores. Puedes adivinar mi respuesta.
Respuestas:
Aquí está el útil cuadro de Wikipedia sobre la búsqueda de nueves:
Curiosamente, solo 3 de los 20 principales sitios web pudieron alcanzar los míticos 5 nueves o 99.999% de tiempo de actividad en 2007. Eran Yahoo, AOL y Comcast. En los primeros 4 meses de 2008, algunas de las redes sociales más populares , ni siquiera se acercaron a eso.
De la tabla, debería ser evidente cuán ridícula es la búsqueda del 100% de tiempo de actividad ...
fuente
Pídales que definan el 100% y cómo se medirá durante qué período de tiempo. Probablemente significan tan cerca del 100% como pueden pagar. Dales los costos.
Elaborar. He estado en conversaciones con clientes a lo largo de los años con requisitos supuestamente ridículos. En todos los casos, en realidad solo usaban un lenguaje no lo suficientemente preciso.
Muy a menudo enmarcan las cosas en formas que parecen absolutas, como el 100%, pero en realidad, en una investigación más profunda, son lo suficientemente razonables para hacer los análisis de costo / beneficio que se requieren cuando se presentan los costos para mitigar los datos de riesgo. Preguntarles cómo medirán la disponibilidad es una pregunta crucial. Si no saben esto, entonces usted está en condiciones de sugerirles que esto debe definirse primero.
Le pediría al cliente que defina qué sucedería en términos de impacto / costos comerciales si el sitio se cayera en las siguientes circunstancias:
Y también cómo medirán esto.
De esta forma, puede trabajar con ellos para determinar el nivel correcto de '100%'. Sospecho que al hacer este tipo de preguntas podrán determinar mejor las prioridades de sus otros requisitos. Por ejemplo, pueden querer pagar ciertos niveles de SLA y comprometer otras funcionalidades para lograr esto.
fuente
Tus clientes están locos. El 100% de tiempo de actividad es imposible sin importar cuánto dinero gaste en él. Llano y simple, imposible. Mire Google, Amazon, etc. Tienen una cantidad casi infinita de dinero para invertir en su infraestructura y aún así logran tener tiempo de inactividad. Debe entregarles ese mensaje, y si continúan insistiendo en que ofrezcan demandas razonables. Si no reconocen que una cierta cantidad de tiempo de inactividad es inevitable, entonces deséchelos.
Dicho esto, parece tener la mecánica de escalar / distribuir la aplicación en sí. La parte de la red necesitará involucrar enlaces ascendentes redundantes a diferentes ISP, obtener una asignación de ASN e IP, y profundizar en BGP y equipo de enrutamiento real para que el espacio de direcciones IP pueda moverse entre ISP si es necesario.
Esta es, obviamente, una respuesta muy concisa. No ha tenido experiencia con aplicaciones que requieren este grado de tiempo de actividad, por lo que realmente necesita involucrar a un profesional si desea acercarse al mítico tiempo de actividad del 100%.
fuente
Bueno, eso definitivamente es interesante. No estoy seguro de querer comprometerme contractualmente al 100% del tiempo de actividad, pero si tuviera que hacerlo, creo que se vería así:
Comience con la IP pública en un equilibrador de carga completamente fuera de la red y cree al menos dos de ellas para que una pueda conmutar por error a la otra. Un programa como Heatbeart puede ayudar con la conmutación por error automática de esos.
El barniz se conoce principalmente como una solución de almacenamiento en caché, pero también hace un equilibrio de carga muy decente. Quizás esa sería una buena opción para manejar el equilibrio de carga. Se puede configurar para tener 1 a n backends opcionalmente agrupados en directores que equilibrarán la carga de forma aleatoria o por turnos. El barniz se puede hacer lo suficientemente inteligente como para verificar el estado de cada back-end y eliminar los back-insals no saludables hasta que vuelva a estar en línea. Los backends no tienen que estar en la misma red.
Estoy un poco enamorado de las IP elásticas en Amazon EC2 en estos días, por lo que probablemente construiría mis equilibradores de carga en EC2 en diferentes regiones o al menos en diferentes zonas de disponibilidad en la misma región. Eso le daría la opción de girar manualmente (nuevo) un nuevo equilibrador de carga si fuera necesario y mover la IP de registro A existente a la nueva caja.
Sin embargo, Varnish no puede terminar SSL, por lo que si eso es una preocupación, es posible que desee ver algo como Nginx en su lugar.
Podría tener la mayoría de sus backends en la red de sus clientes y uno o más fuera de su red. Creo, pero no estoy 100% seguro, que puede priorizar los backends para que las máquinas de sus clientes reciban prioridad hasta el momento en que todos se vuelvan insalubres.
Ahí es donde comenzaría si tuviera esta tarea y, sin duda, la refinaría a medida que avance.
Sin embargo, como dice @ErikA, es Internet y siempre habrá partes de la red que están fuera de su control. Querrá asegurarse de que su legal solo lo vincule con cosas que están bajo su control.
fuente
No hay problema, aunque la redacción del contrato ligeramente revisada:
fuente
Si Facebook y Amazon no pueden hacerlo, entonces tú no puedes. Es tan simple como eso.
fuente
Para agregar la respuesta de oconnore de Hacker News
No entiendo cuál es el problema. El cliente quiere que planifiques para el desastre, y no están orientados a las matemáticas, por lo que pedir una probabilidad del 100% parece razonable. El ingeniero, como los ingenieros son propensos a hacer, recordó su primer día de prob & stat 101, sin considerar que el cliente podría no hacerlo. Cuando dicen esto, no están pensando en el invierno nuclear, están pensando en Fred arrojando su café en el servidor de la oficina, un disco que falla, o un ISP cayendo. Además, puedes lograr esto. Con servidores geográficamente distintos, independientes y de autocontrol, básicamente no tendrá tiempo de inactividad. Con 3 servidores que funcionan con una fiabilidad independiente (1) tres 9, con buenos modos de conmutación por error, su tiempo de inactividad esperado es inferior a un segundo por año (2). Incluso si esto sucede de una vez, todavía está dentro de un SLA razonable para conexiones web y, por lo tanto, el tiempo de inactividad prácticamente no existe. El cliente todavía tiene que lidiar con los escenarios del fin del mundo, pero Godzilla excluido, tendrá un servicio que está "siempre" activo.
(1) Un servidor en Los Ángeles es razonablemente independiente del servidor en Boston, pero sí, entiendo que hay una intersección que involucra una guerra nuclear, piratas informáticos chinos que rompen la red eléctrica, etc. No creo que su cliente esté molesto por esta.
(2) La conmutación por error de DNS puede agregar algunos segundos. Todavía se encuentra en un escenario en el que el cliente tiene que volver a intentar una solicitud una vez al año, lo cual, nuevamente, se encuentra dentro de un SLA razonable y, por lo general, no se considera en la misma línea que el "tiempo de inactividad". Con una aplicación que se redirige automáticamente a un nodo disponible en caso de falla, esto puede pasar desapercibido.
fuente
Se te pide algo imposible.
Revise las otras respuestas aquí, siéntese con su cliente y explique POR QUÉ es imposible, y calcule su respuesta.
Si aún insisten en un tiempo de actividad del 100%, infórmeles cortésmente que no se puede hacer y rechace el contrato. Nunca satisfarás su demanda, y si el contrato no apesta totalmente, te castigarán con multas.
fuente
Precio en consecuencia, y luego estipula en el contrato que cualquier tiempo de inactividad pasado el SLA será reembolsado a la tasa que están pagando.
El ISP en mi último trabajo hizo eso. Tuvimos la opción de una línea DSL "regular" con un tiempo de actividad del 99.9% por $ 40 / mes, o un trío de T1s con un tiempo de actividad del 99.99% por $ 1100 / mes. Hubo interrupciones frecuentes de más de 10 horas por mes, lo que redujo su tiempo de actividad muy por debajo del DSL de $ 40 / mes, sin embargo, solo nos reembolsaron alrededor de $ 15 más o menos, porque esa fue la tasa por hora * horas que terminó. Salieron como bandidos del trato.
Si factura $ 450,000 al mes por un tiempo de actividad del 100%, y solo alcanza el 99.999%, deberá reembolsarles $ 324. Estoy dispuesto a apostar que los costos de infraestructura para alcanzar el 99.999% están en el vecindario de $ 45,000 al mes, suponiendo colos completamente distribuidos, múltiples enlaces ascendentes de nivel 1, hardware de fantasía, etc.
fuente
Si los profesionales se preguntan si el 99.999 por ciento de disponibilidad [es] alguna vez una posibilidad práctica o financieramente viable , entonces el 99.9999 por ciento de disponibilidad es aún menos posible o práctico. Y mucho menos al 100%.
No alcanzará el objetivo de disponibilidad del 100% durante un período prolongado de tiempo. Puede salirse con la suya durante una semana o un año, pero luego sucederá algo y usted será responsable. El emisario puede ir desde la reputación dañada (lo prometiste, no cumpliste) hasta la bancarrota por multas contractuales.
fuente
Hay dos tipos de personas que solicitan un tiempo de actividad del 100%:
Mi consejo, después de haber sufrido estos dos tipos de clientes en muchas ocasiones, es no tomar este cliente. Deja que vuelvan loco a alguien más.
* Es posible que esta misma persona no se avergüence de preguntar sobre viajes más rápidos que la luz, movimiento perpetuo, fusión fría, etc.
fuente
Me comunicaría con el cliente para establecer con ellos qué significa exactamente el 100% de tiempo de actividad. Es posible que realmente no vean una distinción entre 99% de tiempo de actividad y 100% de tiempo de actividad. Para la mayoría de las personas (es decir, no para los administradores del servidor) esos dos números son iguales.
fuente
100% de tiempo de actividad?
Esto es lo que necesitas:
Múltiples servidores DNS (y redundantes), que apuntan a múltiples sitios en todo el mundo, con SLA adecuados con cada ISP.
Asegúrese de que los servidores DNS estén configurados correctamente, con TTL reconocido de manera efectiva.
fuente
nslookup google.com
devuelve 6 IP diferentes para redundancia en caso de que algunas de ellas no funcionen. Visite también RobTex.com, un excelente sitio para ver las configuraciones de ciertos dominios, por ejemplo, robtex.com/dns/google.com.html#recordsEsto es facil. El SLA de Amazon EC2 establece claramente:
http://aws.amazon.com/ec2-sla/
Simplemente defina 'tiempo de actividad' para que sea relativo a todo el paquete de servicios; de hecho, puede mantenerse operativo el 100% del tiempo y no debería tener problemas.
Además, vale la pena señalar que el objetivo de un SLA es definir cuáles son sus obligaciones y qué sucede si no puede cumplirlas. No importa si el cliente pide 3 nueves o 5 nueves o un millón de nueves; la pregunta es qué obtienen cuando / si no puede entregar. La respuesta obvia es proporcionar una línea de pedido con un tiempo de actividad del 100% a 5 veces el precio que desea cobrar, y luego obtienen un reembolso de 4 veces si no cumple ese objetivo. ¡Podrías anotar!
fuente
Los cambios de DNS solo toman tiempo si están configurados para tomar tiempo. Puede establecer el TTL en un registro en un segundo: su único problema sería asegurarse de proporcionar una respuesta oportuna a las consultas DNS y que los servidores DNS puedan hacer frente a ese nivel de consultas.
Así es exactamente cómo funciona GTM en F5 Big IP: el TTL de DNS está configurado de forma predeterminada en 30 segundos y si un miembro del clúster necesita hacerse cargo, el DNS se actualiza y se toma una nueva IP casi de inmediato. Máximo de 30 segundos de interrupción, pero ese es el caso límite, el promedio sería de 15 segundos.
fuente
Sabes que esto es imposible.
Sin duda, el cliente está enfocado en ver "100%", por lo que lo mejor que puede hacer es prometer 100%, a excepción de [todas las causas razonables que no son su culpa].
fuente
Si bien dudo que sea posible al 100%, es posible que desee considerar Azure (o algo con un SLA similar) como una posibilidad. Lo que pasa:
Sus servidores son máquinas virtuales. Si alguna vez hay un problema de hardware en un servidor, su máquina virtual se traslada a una nueva máquina. El equilibrador de carga se encarga de la redirección para que el cliente no vea ningún tiempo de inactividad (aunque no estoy seguro de cómo se vería afectado el estado de sus sesiones).
Dicho esto, incluso con este error, la diferencia entre 99.999 y 100 limita con la locura.
Tendrá que tener control total sobre los siguientes factores.
- Factores humanos, tanto internos como externos, tanto malicia como impotencia. Un ejemplo de esto es alguien empujando algo al código de producción que derriba un servidor. Peor aún, ¿qué pasa con el sabotaje?
- Problemas comerciales. ¿Qué sucede si su proveedor se queda sin trabajo u olvida pagar sus facturas de electricidad, o simplemente decide dejar de respaldar su infraestructura sin suficiente advertencia?
- naturaleza. ¿Qué sucede si los tornados no relacionados golpean simultáneamente suficientes centros de datos para sobrecargar la capacidad de respaldo?
- Un entorno completamente libre de errores. ¿Está seguro de que no hay un caso límite con algún control de un sistema de terceros o núcleo que no se haya manifestado pero que aún pueda hacerlo en el futuro?
- Incluso si tiene control total sobre los factores anteriores, ¿está seguro de que el software / persona que lo supervisa no le presentará falsos negativos al verificar si su sistema está funcionando?
fuente
Honestamente, el 100% es completamente loco sin al menos una vacilación en los términos de un ataque de piratería. Su mejor opción es hacer lo que hacen Google y Amazon en que tiene una solución de alojamiento geo-distribuido donde tiene su sitio y base de datos replicados en múltiples servidores en múltiples ubicaciones geográficas. Esto lo garantizará en cualquier cosa que no sea un desastre importante, como la columna vertebral de Internet que se corta a una región (que sucede de vez en cuando) o algo casi apocalíptico.
Pondría una cláusula para tales casos (DDOS, corte de la red troncal de Internet, ataque terrorista apocalíptico o una gran guerra, etc.).
Aparte de eso, mire los servicios en la nube de Amazon S3 o Rackspace. Esencialmente, la configuración de la nube no solo ofrecerá la redundancia en cada ubicación, sino también la escalabilidad y la distribución geográfica del tráfico junto con la capacidad de redirigir alrededor de las áreas geográficas fallidas. Aunque entiendo que la distribución geográfica cuesta más dinero.
fuente
Solo quería agregar otra voz a la fiesta "se puede hacer (en teoría)".
No aceptaría un contrato que tuviera esto especificado, sin importar cuánto me pagaran, pero como problema de investigación, tiene algunas soluciones bastante interesantes. No estoy lo suficientemente familiarizado con las redes para delinear los pasos, pero imagino que una combinación de configuraciones relacionadas con la red + failovers de cableado eléctrico / hardware + failovers de software, posiblemente, en alguna configuración u otro trabajo realmente lo logre.
Casi siempre hay un solo punto de falla en algún lugar de cualquier configuración, pero si trabajas lo suficiente, puedes impulsar ese punto de falla para que sea algo que pueda repararse "en vivo" (es decir, el dns raíz baja, pero los valores aún se almacenan en caché en todas partes para que tengas tiempo de arreglarlo).
Una vez más, no digo que sea factible. Simplemente no me gustó cómo ni una sola respuesta abordó el hecho de que no es "muy fácil", simplemente no es algo que realmente quieran si lo piensan bien.
fuente
Vuelva a pensar su metodología de medición de disponibilidad y luego trabaje con su cliente para establecer objetivos significativos .
Si está ejecutando un sitio web grande, el tiempo de actividad no es útil en absoluto. Si abandona las consultas durante 10 minutos cuando sus clientes más las necesitan (pico de tráfico), podría ser más perjudicial para el negocio que una interrupción de una hora a las 3 AM de un domingo.
A veces, las grandes empresas web miden la disponibilidad o la confiabilidad, utilizando las siguientes métricas:
La disponibilidad no debe medirse utilizando sondas de muestra, que es lo que puede informar una entidad externa como pingdom y pingability. No confíes únicamente en eso. Si desea hacerlo bien, cada consulta debe contar . Mida su disponibilidad observando su éxito real percibido.
La forma más eficiente es recopilar registros o estadísticas de su equilibrador de carga y calcular la disponibilidad en función de las métricas anteriores.
El porcentaje de consultas descartadas también debe contar para sus estadísticas. Se puede contabilizar en el mismo depósito que los errores del lado del servidor. Si hay problemas con la red o con otra infraestructura como DNS o los equilibradores de carga, puede usar las matemáticas simples para estimar cuántas consultas perdió . Si esperaba consultas X para ese día de la semana, pero obtuvo X-1000, probablemente eliminó 1000 consultas. Grafica tu tráfico en gráficos de consultas por minuto (o segundo). Si aparecen vacíos, eliminó las consultas. Use geometría básica para medir el área de esos espacios, lo que le da el número total de consultas descartadas.
Discuta esta metodología con su cliente y explique sus beneficios. Establezca una línea base midiendo su disponibilidad actual. Les quedará claro que el 100% es un objetivo imposible.
Luego puede firmar un contrato basado en mejoras en la línea de base. Digamos, si actualmente están experimentando el 95% de disponibilidad, podría prometer mejorar la situación diez veces al llegar al 98.5%.
Nota: existen desventajas en esta forma de medir la disponibilidad. Primero, recopilar registros, procesar y generar los informes usted mismo puede no ser trivial, a menos que use las herramientas existentes para hacerlo. En segundo lugar, los errores de la aplicación pueden dañar su disponibilidad. Si la aplicación es de baja calidad, servirá más errores. La solución a esto es considerar solo los 500 creados por el equilibrador de carga en lugar de los que provienen de la aplicación.
Las cosas pueden complicarse un poco de esta manera, pero es un paso más allá de medir solo el tiempo de actividad de su servidor .
fuente
Si bien algunas personas notaron aquí, que el 100% es una locura o imposible , de alguna manera perdieron el punto real. Argumentaron que la razón de esto es el hecho de que incluso las mejores empresas / servicios no pueden lograrlo.
Bueno, es mucho más simple que eso. Es matemáticamente imposible .
Todo tiene una probabilidad. Podría haber un terremoto simultáneo en todos los lugares donde almacena sus servidores, destruyéndolos a todos. De acuerdo, es una probabilidad ridículamente pequeña, pero no es 0. Todos los proveedores de Internet podrían enfrentar un ataque terrorista / cibernético simultáneo. De nuevo, no es muy probable, pero tampoco cero. Independientemente de lo que proporcione, puede obtener un escenario de probabilidad que no sea cero, lo que reduce el servicio completo. Debido a esto, su tiempo de actividad tampoco puede ser del 100%.
fuente
Ve a buscar un libro sobre control de calidad de fabricación usando muestreo estadístico. Una discusión general en este libro, cuyos conceptos a los que cualquier gerente habría estado expuesto en un curso de estadística general en la universidad, dicta los costos para pasar de 1 excisión en mil, a 1 en diez mil a 1 en un millón a 1 de cada mil millones aumenta exponencialmente. Esencialmente, la capacidad de alcanzar el 100% de tiempo de actividad costaría una cantidad casi ilimitada de fondos, algo así como la cantidad de combustible requerida para empujar un objeto a la velocidad de la luz.
Desde el punto de vista de la ingeniería de rendimiento, rechazaría el requisito tanto como no comprobable como irracional, de que esta expresión es más un deseo que un requisito verdadero. Con las dependencias de la aplicación que existen fuera de cualquier aplicación para redes, resolución de nombres, enrutamiento, defectos propagados a partir de componentes arquitectónicos subyacentes o herramientas de desarrollo, se convierte en una imposibilidad práctica que alguien garantice el 100% de tiempo de actividad.
fuente
No creo que el cliente realmente solicite un tiempo de actividad del 100%, o incluso un tiempo de actividad del 99.999%. Si miras lo que están describiendo, están hablando de retomar donde lo dejaron si un meteorito saca su centro de datos en el sitio.
Si el requisito es que las personas externas ni siquiera se dan cuenta, ¿qué tan drástico tiene que ser? ¿Sería aceptable volver a intentar una solicitud de Ajax y mostrar una ruleta durante 30 segundos al usuario final?
Ese es el tipo de cosas que le importan al cliente. Si el cliente realmente estaba pensando en SLA precisos, entonces sabrían lo suficiente como para expresarlo como 99.99 o 99.999.
fuente
mis 2 centavos Fui responsable de un sitio web muy popular para una compañía de Fortune-5 que publicaba anuncios para el Super Bowl. Tuve que lidiar con grandes picos en el tráfico y la forma en que lo resolví fue usar un servicio como Akamai. No trabajo para Akamai pero su servicio me pareció extremadamente bueno. Tienen su propio sistema DNS más inteligente que sabe que un nodo / host en particular está bajo una gran carga o está inactivo y puede enrutar el tráfico en consecuencia.
Lo bueno de su servicio era que realmente no tenía que hacer nada muy complicado para replicar el contenido de los servidores de mi propio centro de datos a su centro de datos. Además, sé que al trabajar con ellos, hicieron un uso intensivo de los servidores HTTP Apache.
Si bien no es 100% de tiempo de actividad, puede considerar tales opciones para dispersar contenido en todo el mundo. Según entendí las cosas, Akamai también tenía la capacidad de localizar el significado del tráfico si estaba en Michigan, obtenía contenido de un servidor de Michigan / Chicago y si estaba en California, supuestamente obtenía el contenido de un servidor con sede en California.
fuente
En lugar de una conmutación por error fuera del sitio, simplemente ejecute la aplicación desde dos ubicaciones simultáneamente, interna y externa. Y sincronice las dos bases de datos ... Luego, si el interno se cae, las personas internas aún podrán trabajar y las personas externas podrán usar la aplicación. Cuando lo interno vuelva a estar en línea, sincronice los cambios. Puede tener dos entradas DNS para un nombre de dominio o incluso un enrutador de red con round robin.
fuente
Para los sitios alojados externamente, lo más cercano al 100% de tiempo de actividad es alojar su sitio en el motor de aplicaciones de Google y usar su almacén de datos de alta replicación (HRD) , que replica automáticamente sus datos en al menos tres centros de datos en tiempo real. Del mismo modo, los servidores front-end de App Engine se escalan / replican automáticamente.
Sin embargo, incluso con todos los recursos de Google y la plataforma más sofisticada del mundo, la garantía de tiempo de actividad de App Engine SLA es solo "99.95% del tiempo en cualquier mes calendario".
fuente
Simple y directo: Anycast
http://en.wikipedia.org/wiki/Anycast
Esto es lo que utiliza Cloudflare, Google y cualquier otra gran empresa para hacer redundancia, baja latencia, conmutación por error / equilibrio continental.
Pero también tenga en cuenta que es imposible tener un tiempo de actividad del 100%, y que los costos para pasar del 99.999% al 99.9999% son MUCHO mayores.
fuente