Jogule’s Weblog

Cuanto debería gastar en alta disponibilidad?

Posteado por: jogule en: junio 27, 2011

Es una pregunta que siempre me inquieta, cual es el punto en el cual deja de tener sentido cada peso que invierto en proveer un sistema de alta disponibilidad, es decir, en donde surgen los rendimientos decrecientes de tal inversión?

Primero que todo unos conceptos básicos:

  • Alta disponibilidad (HA): Es la habilidad de un sistema de mantener su funcionalidad el mayor tiempo posible sin perder sus características de calidad esenciales.
  • Continuidad: Es la habilidad de recuperación de un sistema una vez este haya fallado.

La alta disponibilidad se mide en % de tiempo disponible, por ejemplo que un sistema tenga una disponibilidad de un 99.9% se refiere a que por ejemplo en un periodo de 24 horas solo podría estar indisponible máximo 864 segundos (14,4 minutos). La alta disponibilidad es una tarea proactiva para evitar o disminuir los riesgos de indisponibilidad.

La continuidad se mide en el tiempo que se tarda recuperar la funcionalidad del sistema desde el fallo del mismo, por ejemplo 5 días si en la eventualidad de fallo total de mi sistema tardo ese tiempo en volver a instalar todos los componentes y recuperar la funcionalidad. La continuidad es una labor de cierta manera reactiva (aunque planeada) para disminuir el impacto de una indisponibilidad ya explicita.

Ahora, antes de decidir “cuanto”, debemos decidir “que” partes de mi sistema requieren de alta disponibilidad, esto ultimo lo define un análisis de los componentes críticos del sistema.

Un componente es critico en un sistema si la falta del mismo durante el tiempo que tarde en recuperarlo o reemplazarlo puede ocasionar la falla total del sistema.

Por ejemplo, en un hogar actual, la falta de cualquier servicio publico puede llegar a resultar una verdadera molestia, sin embargo y a pesar que se impacta de manera considerable la calidad de vida en ese hogar, sus habitantes pueden soportar la ausencia del servicio durante el tiempo que pueda tomar recuperarlo o en el peor de los casos reemplazarlo (i.e. contratando a otro proveedor) si es imposible su recuperación. Aún así la funcionalidad esencial del hogar que es proveer de habitación no es comprometida seriamente.

En contraste, en una fabrica industrial, el fallo de un componente como puede ser el servicio de energía o agua, puede hacer parar totalmente la producción, función que es la razón de ser de una fabrica. En este caso el servicio publico es obviamente un componente critico del sistema.

Ahora, según los conceptos mencionados hasta ahora, podemos concluir que la disponibilidad total de un sistema estará dada por la disponibilidad de su componente con mas probabilidad a fallar, o como dice el viejo refrán, la fuerza total de la cadena estará dada por la fuerza de su eslabón más débil.

Esta probabilidad de fallo por componente es normalmente referida como el MTBF (Mean Time Between Failure) o el Tiempo Medio entre Fallos de cada componente, y el tiempo de recuperación o reemplazo es llamado TRT (Target Recovery Time) o Tiempo de Recuperación Objetivo.

Por ejemplo si el servicio de energía históricamente ha fallado unas tres veces al año y cada vez que falla se tardan unas tres horas en reponerlo, el MTBF es de 4 meses y el TRT es de 3 horas.

Según todo esto, el MTBF del sistema como un todo estará definido al MTBF mas bajo de mis componentes críticos, a su vez el TRT del sistema como un todo será la suma de los TRT de cada componente critico, siempre pensando en el peor de los casos.

El tiempo esperado de indisponibilidad del sistema (SUET: System Unavailability Expected Time) en un periodo dado (P) será entonces:

SUET = P/MTBF * TRT

Siguiendo el ejemplo anterior, el SUET del sistema en un año será entonces de 1año/4meses * 3 horas = 9 horas/año.

 

image

Entonces, como decido si en un sistema vale la pena los costos extras de alta disponibilidad?

Depende del punto de vista del sistema.

Como usuario del sistema, es decir cuando el sistema bajo análisis hace parte un sistema mayor del cual soy responsable y el sistema bajo análisis es un componente crítico del sistema mayor, entonces ese sistema como componente merece ser tenido en cuenta para una inversión de alta disponibilidad. Si no es un componente critico del sistema entonces no vale la pena, e inclusive se debería considerar la tercerización del componente.

Como proveedor del sistema, es decir cuando el sistema es un fin por si mismo y soy responsable de este, en este caso siempre se debería considerar una inversión en alta disponibilidad.

Y cuanto debería ser el presupuesto para HA?

De esta manera, podemos calcular que el costo de oportunidad en el caso de indisponibilidad del sistema será igual al ingresos/hora del sistema como un todo * el SUET del sistema.

Si por ejemplo los ingresos generados por el sistema son de $10.000,00 USD/hora, y el sistema tiene un SUET de 9 horas al año, la indisponibilidad del sistema costara seguramente unos $90.000,00 USD/año.

Siendo así, podemos concluir que es viable invertir hasta $90.000,00 USD/año (ingresos/hora * SUET) en evitar la indisponibilidad del sistema. Después de esta cifra no vale la pena invertir, pues resulta mas económico recuperar o reemplazar el sistema dentro del TRT establecido.

También hay que notar que si mejorando mis planes de continuidad disminuyo el TRT, entonces simultáneamente disminuye el presupuesto para HA.

Debo confesar además que en este análisis del presupuesto no se están teniendo en cuenta costos asociados a los riesgos generados por la indisponibilidad del sistema, tales como la perdida de clientes, daño de la confianza en el sistema, etc, que en algún momento pueden resultar considerables.

Por otro lado, ya teniendo el presupuesto claro, como lo invierto?

Lo mas sensato es priorizar de acuerdo al MTBF*TRT de cada componente critico, de esta manera es posible enfocarse en el componente critico mas costos en proporción a su probabilidad de fallos y al coste de recuperación.

 

Conclusión

  • Analizar si se requiere invertir en HA (Es el sistema un componente critico de un sistema mayor?)
  • Identificar a su vez los componentes críticos del sistema
  • Calcular el MTBF y el TRT de cada componente
  • Calcular el MTBF y el TRT total del sistema
  • Calcular el SUET anual del sistema
  • Calcular el costo de oportunidad del sistema (Cual es el costo de indisponibilidad por hora –$/h— del sistema?)
  • Calcular el presupuesto anual de HA (SUET * $/h)
  • Priorizar la inversión por componente de acuerdo al MTBF*TRT de cada uno.

Optimal buffer-size to view streaming (online) without stops…

Posteado por: jogule en: febrero 13, 2010

How long I’ve to wait for view my streaming (youtube, megavideo) online movie without stops?

Well is pretty simple, you just have to know two things:

* The lenght of the streaming in seconds.
* The proportion between your bandwith rate (Kb/s) and the streaming encoded bitrate (Kb/s).

The first is trivial to get, for the second we can get it indirectly.

That proportion bandwith/bitrate is the same proportion that the inverse of the delay time you have to wait between a stop and a resume.

So the time you have to wait for buffer fill enought to view the movie flawlessly is:

buffertime = movielength (1 – 1/(delay))

Example:

I want to view a movie witch length is 1:39:17 that’s 17s + (39m x 60s/m) + (1h x 3600s/h) = 5957s

I’ve detected 5 seconds between an stop and a resume, so I need to wait:

5957s x (1 – 1/5) = 5957s x (1 – 0.2) = 5957s x (0.8) = 4765s = 1:19:25

Then I have to wait the buffer fill 80% of the bar to view my movie without stops. Meanwhile I can be doing some popcorn and not wast my time waiting front the screen!

I hope be usefull. :-)

Subrayado de sintaxis en WordPress.com

Posteado por: jogule en: junio 26, 2009

Para subrayar sintaxis (Syntax Highlighting) en WordPress.com simplemente se coloca el codigo entre las etiquetas

y

Ejemplo:


public function hola($nombre) 

{

  echo "hola!".$nombre;

}

batch script for setup a basic project in Symfony

Posteado por: jogule en: junio 26, 2009

I have been playing around PHP Framework Symfony since some days ago, and I wrote a small batch script for quickly setup a basic project.

mkdir %1
cd %1

mkdir lib\vendor
xcopy /e /i /q /h /y c:\symfony lib\vendor\symfony

REM # Genera el proyecto
C:\xampp\php\php lib\vendor\symfony\data\bin\symfony --quiet generate:project %1

REM # Genera la aplicación frontend
C:\xampp\php\php symfony --quiet generate:app --escaping-strategy=on --csrf-secret=UniqueSecret frontend

REM # change the absolute path to the symfony installation to a relative one
strfind -r -o -z "%~f1" "dirname(__FILE__).'\.." config\ProjectConfiguration.class.php
strfind -r -o -z "require_once '" "require_once " config\ProjectConfiguration.class.php

REM # setup apache virtual server

xcopy /y /q C:\xampp\apache\conf\httpd.conf.symfony C:\xampp\apache\conf\httpd.conf

strfind -r -o -z "MySfProjectPath" "%~f1\web" C:\xampp\apache\conf\httpd.conf
strfind -r -o -z "SfPath" "%~f1\lib\vendor\symfony\data\web\sf" C:\xampp\apache\conf\httpd.conf

REM # enable doctrine

strfind -r -o -z "sfDoctrinePlugin" "sfPropelPlugin" config\ProjectConfiguration.class.php

C:\xampp\php\php symfony cc

C:\xampp\php\php symfony plugin:publish-assets

del config\propel.ini
del config\schema.yml
del config\databases.yml

mkdir config\doctrine

echo # Autogenerate schema.yml for Doctrine >> config\doctrine\schema.yml

REM # This assumes that exists a mysql instance in localhost granted to root whitout password
C:\xampp\php\php symfony configure:database --name=doctrine --class=sfDoctrineDatabase "mysql:host=localhost;dbname=%1" root

C:\xampp\php\php symfony doctrine:build-db

The following requirements must be filled:

  • last symfony archive is unzipped in c:\symfony\
  • XAMPP is installed in c:\xampp\
  • I use strfind.exe for modify files, and must be set in the windows path (I just simple put it in c:\windows\strfind.exe ).
  • I modify a copy of the Apache httpd.conf and I named C:\xampp\apache\conf\httpd.conf.symfony.

Just append the following at the end of the normal httpd.conf and save as httpd.conf.symfony


# Be sure to only have this line once in your configuration
NameVirtualHost 127.0.0.1:8080

# This is the configuration for MySfProject
Listen 127.0.0.1:8080

<VirtualHost 127.0.0.1:8080>

  DocumentRoot "MySfProjectPath"
  DirectoryIndex index.php

  <Directory "MySfProjectPath">
    AllowOverride All
    Allow from All
  </Directory>

  Alias /sf SfPath

  <Directory "SfPath">
    AllowOverride All
    Allow from All
  </Directory>

</VirtualHost>

I hope that be useful, regards…

Etiquetas: , ,

Teorema de Coase

Posteado por: jogule en: mayo 16, 2009

Cascade Lake, swim area boundary

He aquí el criterio para definir el alcance de una empresa, es decir lo que debe estar dentro y lo que debe estar fuera de esta. El teorema de Coase, que establece:

las empresas deben replegarse hasta que el coste que supone realizar una transacción de forma interna no supere el coste que implica realizarla de forma externa

Recomiendo leer el artículo completo;

http://urchil.blogspot.com/2008/04/la-ley-de-coase.html

La rosca, la palanca o el circulo de confianza

Posteado por: jogule en: abril 19, 2009

Situación: Un proceso de selección en donde una persona “A” requiera contratar los servicios de un pool de n aspirantes “B1, B2, … Bn”. En donde solo uno de ellos sera elegido.

Solución empirica: Solicitar a cada aspirante su curriculum vitae (CV), hacer una matriz de selección ponderando las diferentes cualidades de cada uno con los criterios de selección del cargo y elegir el mejor.

Si detallamos un CV común, aparecen las siguientes secciones:

  • Datos personales
  • Perfil profesional
  • Logros profesionales
  • Experiencia profesional
  • Educación y Certificaciones
  • Referencias

Una de ellas, la ultima y aunque no lo pareciera por su posición en el CV, pesa mucho.

Cuando entramos a competir en un proceso de selección ademas de nuestra experiencia, skills y certificaciones, tambien estamos compitiendo con nuestras referencias, con nuestros contactos, nuestra red social y este item en muchos casos puede hacer la diferencia.

Quiero exponer que la rosca, mas que algo poco deseable, muchas veces tiene un sustento logico del cual nos podemos aprovechar.

La rosca, palanca o como yo prefiero llamarlo el circulo de confianza, no es mas que una “transferencia de confianza” entre la persona que elige y los participantes en el proceso de selección.

La confianza es el valor que nos permite hacer supuestos sobre una persona o situación sin tener que desgastarnos verificando continuamente su veracidad.

La confianza es valiosa por que sencillamente la desconfianza es supremamente costosa, la desconfianza es la enemiga de la eficiencia y la productividad, por eso no podemos trabajar con personas en las que desconfiamos.

La confianza permite controlar riesgos, haciendo que nuestros supuestos en situaciones riesgosas sean mas fuertes y la probabilidad del riesgo disminuya y por ende su costo.

Por esto, la transferencia de confianza por medio de las referencias en un proceso de selección es de incalculable valor, siendo en si mismo un proceso riesgoso el de la selección, utilizar esta herramienta (la confianza) como reductor del riesgo es imprecindible.

Por eso la rosca, la palanca o en ultimas el circulo de confianza no debe ser visto como algo malo, es simplemente un comportamiento malcomprendido de los seres humanos que es muy valioso para la sociedad.

Etiquetas: , ,

Comprender…

Posteado por: jogule en: abril 5, 2009

“No deseamos que nos comprendan en lo racional, en lo comprensible sino en lo oscuro de nosotros mismos. Y es preciso comprender del mismo modo.”

Gabriela Gambaro

Etiquetas:

La confianza

Posteado por: jogule en: abril 4, 2009

Trust building activities

“Confianza es el sentimiento de poder creer a una persona incluso cuando sabemos que mentiríamos en su lugar.”

Henry-Louis Mencken (1880-1956) Periodista y escritor estadounidense.

Etiquetas:

El camino al amor – Los 11 pasos

Posteado por: jogule en: abril 4, 2009

amor-oscuro.jpg

1. Primero, contigo mismo.
Sólo cuando estás bien contigo mismo puedes estar bien con los demás

2. Manejar la soledad. 
Sólo cuando manejas tu soledad puedes manejar una relación.

3. Sólo se da lo que se tiene.
Necesitas valorarte para valorar, quererte para querer, respetarte para respetar, y aceptarte para aceptar, porque nadie puede dar lo que no tiene.

4. Paz interior.
Ninguna relación te dará la paz que tú mismo no crees en tu interior.

5. Fantasía que genera frustración. 
Pretender que otra persona nos haga felices y llene todas nuestras expectativas es una fantasía que sólo trae frustraciones.

6. Autonomía. 
Ninguna relación te brindará felicidad que tú mismo no construyas.

7. Autosuficiencia. 
Sólo podrás ser feliz con otra persona cuando, bien convencido, seas capaz de decirle: “No te necesito para ser feliz”.

8. Independencia.
Sólo podrás amar siendo independiente hasta el punto de no tener que manipular ni manejar a los que dices querer.

9. Requerimientos.
Para amar necesitas una humilde autosuficiencia, autoestima, y la práctica de una libertad responsable.

10. Autoestima y madurez.
Ámate a ti mismo, madura, y el día que puedas decirle a esa otra persona “Sin ti me la paso bien”, ese día estarás preparado para vivir en pareja.

11. Compartir.
Dos personas que vivan en pareja podrán ser felices sólo cuando se hayan unido para compartir su felicidad, no para hacerse felices la una a la otra.

Conclusión

“Dos personas se aman únicamente cuando son capaces de vivir la una sin la otra, pero deciden vivir juntas”
http://cecigigena.blogspot.com/2008/02/dijo-john-galt.html
Etiquetas: ,

Frase

Posteado por: jogule en: abril 4, 2009

“Los seres humanos tenemos el gran don de no tener que morir para saber que somos mortales…”

Yo…

Etiquetas:
Seguir

Get every new post delivered to your Inbox.