Categoría: Artículos

Oficina de Grid Computing utilizando entornos virtuales - Parte 1

Por , viernes 04 de diciembre 2009 23:23

Introducción

Yo trabajo en una empresa en la que nos encontramos muchos puestos de trabajo de procesamiento por lotes de millones de registros de datos de todos los días y he estado pensando últimamente sobre todas las máquinas que se sientan alrededor de cada uno y todos los días sin hacer nada durante varias horas. ¿No sería bueno si pudiéramos utilizar esas máquinas para reforzar el poder de transformación de nuestros sistemas? En este conjunto de artículos que voy a ver los beneficios potenciales del empleo de una oficina de la red utilizando entornos virtualizados.

Como PHP desarrollador que voy a utilizar las herramientas que uso cada día es decir, Linux, MySQL , PHP, VirtualBox y Subversion (SVN). Sin embargo, espero que esta guía se adaptarán a otros idiomas y las tecnologías igual de bien.

La solución que proporcione será muy vagamente basada en el tipo de procesamiento que había necesidad de lograr sin embargo, esto no puede ser cierto todo el artículo que voy a cambiar las cosas para la simplicidad, o para producir escenarios de uso más interesante.

Estos entornos virtualizados se pueden ejecutar en máquinas Windows, ya que esto es lo que la mayoría de las oficinas de ejecutar. El tratamiento que las máquinas de oficina no debe interferir con el personal con las máquinas, que no requieren mantenimiento en la máquina, y ser fácil de implementar para las nuevas máquinas a medida que estén disponibles. Además, las nuevas máquinas virtuales no deberán exigir ningún tipo de configuración adicional, ya que reduce en gran medida la escalabilidad y la facilidad con la que puede ser el sistema de red extendida.

¿Por qué implementar una Oficina de Grid Computing?

En primer lugar usted puede estar pensando, ¿por qué no usar un recurso de computación en la nube como la plataforma de Amazon EC2 ? Bien las razones pueden ser varias, por ejemplo:

  • Usted no va a confiar a ciertos datos a un entorno de cloud computing
  • No se puede poner algunos datos en un entorno de cloud computing por razones legales (por ejemplo, datos de abandonar el país), lo que puede por razones legales, por ejemplo, los registros del NHS.
  • Usted quiere mantener sus unidades de procesamiento de cerca y tener un control total sobre el hardware también
  • Usted no tiene los fondos del proyecto a ejecutar instancias de nubes
  • Su oficina no tiene una conexión a Internet y por lo tanto, que no es posible utilizar un recurso de nubes
  • ¿No le gusta la lluvia, las nubes sugieren la lluvia, por lo tanto, mantenerse bien lejos

Estoy seguro de que la lista podría continuar, pero creo que es suficiente por ahora.

Ventajas de una Oficina de Grid Computing

Bueno, vamos a hacer algo de matemáticas (y en cierto estilo de la física le permite hacer algunas suposiciones de barrido). Imagine que tiene gran servidor de procesamiento fornido funcionamiento 100 puestos de trabajo por día. En su oficina tiene 50 máquinas que están inactivos 16 horas al día, cada una de estas máquinas es de 10% más potente que el procesamiento de romper fornido. (Todos los resultados aquí se redondean a subestimar aumentar el rendimiento).

Por lo tanto, una potencia de la máquina * 10% * 2 / 3 = 0,067 es decir, el tiempo de procesamiento de un escritorio en el tiempo de inactividad podría proceso de seis puestos de trabajo por jornada.

Si ya escala esto se requieren 15 computadoras de escritorio ociosa para procesar tantos puestos de trabajo por día, como su servidor de procesamiento principal lo hace.

Así que en nuestra oficina pretender de 50 máquinas podríamos aumentar nuestra capacidad de procesamiento de un servidor de hasta 4 servidores de procesamiento completo, o podríamos estar procesando 400 puestos de trabajo por día en lugar de 100.

Nótese, por no invertir en nuevo hardware de su empresa acaba de aumentar su capacidad de procesamiento por lotes 4 veces! Posiblemente va a aumentar su consumo de energía, sino de la mayoría de entornos de oficina que han estado en las máquinas son generalmente a la izquierda en la noche de todos modos, así que usted podría ver esto como una iniciativa ecológica.

Otras ventajas también significa que la inversión en nuevos (o actualizados) los servidores de procesamiento se puede retrasar si los ordenadores de oficina son suficientes y que a medida que mejora la potencia de sus máquinas de la oficina de su red de oficinas se vuelve más poderosa de forma automática.

Tecnologías

Lo que usted necesita? (O más bien lo que hizo que yo uso):

  • Máquinas de oficina de inactividad (en mi caso un repuesto viejas ventanas portátil XP)
  • VirtualBox (o cualquier otro software de cliente de virtualización)
  • Una máquina virtual con PHP, MySQL running ejecutando un sistema operativo reducido, estoy llamando a estos servidores de mi cojera:)
  • Los trabajos se ejecuten
  • Trabajo del servidor (puede ser otra máquina virtual en alguna parte)

Trabajos típicos

Los tipos de trabajos que este sistema está diseñado para funcionar es la siguiente:

  • Sistema recibe una lista de datos sobre los que tenemos que coincidir y devolver los resultados
  • La coincidencia consiste en la comprobación / búsqueda de varios (bastante estática) de fuentes de datos
  • Los resultados de las fuentes de datos pueden requerir una mayor validación, la fusión, el control de las fuentes de datos adicionales en respuesta a los resultados
  • Los datos se devuelven con los registros que coinciden plenamente validados y procesados
  • Cada registro en un puesto de trabajo es independiente del resto

Así que básicamente estamos viendo ejecutar trabajos que requieren una combinación de búsquedas de bases de datos y un cálculo de números, un escenario bastante común en un entorno empresarial.

Soluciones de redes no sólo son ventajosas para el procesamiento de trabajos de este tipo. Básicamente, cualquier proceso que puede ser dividido en unidades independientes se pueden ejecutar en paralelo. Ver esta wikipedia para ver ejemplos y más información: Grid Computing , pero un par de ejemplos famosos son Seti @ Home y BIONC . Existen marcos para el funcionamiento de las redes informáticas, y que estos están bien vale la pena analizar.

¿Qué vamos a lograr?

Al final de estos artículos espero demostrar que el despliegue de una red de oficina no tiene por qué ser muy costoso o que consumen tiempo. Voy a hablar:

  • Establecer el sistema de control de trabajo, trabajo de configuración
  • La creación de una máquina de procesamiento virtual correspondiente
  • ¿Cómo configurar el sistema en una máquina Windows
  • Asegurar que está utilizando la última versión del código y los datos
  • Implementación y evaluación comparativa
  • De cara al futuro

Voy a ser la construcción (bueno he construido, entonces para escribir esto) una aplicación de ejemplo para poner a prueba los conceptos en un equipo local con Windows XP y mi 'GridMachine "máquina virtual. Mi servidor de control de trabajo será mi máquina principal que corre Fedora 11 .

Esto es de ninguna manera la intención de demostrar un sistema totalmente funcional robusta, su significado más de una demostración y discusión que demuestra que estas cosas se puede lograr en un espacio relativamente corto de tiempo ya un bajo costo. Por favor, no dude en enviarnos sus comentarios, correcciones o mejoras y que voy a hacer mi mejor esfuerzo para mantener este artículo actualizado para que coincida.

La próxima vez

En la parte 2 voy a empezar a mirar en el sistema de control de trabajo, y buscar la forma en que los trabajos deben ser configuradas con el fin de lograr la mayor cantidad de procesamiento al tiempo que garantiza que cada trabajo se procesa sin falta.

Oficina de Grid Computing utilizando entornos virtuales - Parte 2

Por , viernes 04 de diciembre 2009 23:23

Introducción

Yo trabajo en una empresa en la que nos encontramos muchos puestos de trabajo de procesamiento por lotes de millones de registros de datos de todos los días y he estado pensando últimamente sobre todas las máquinas que se sientan alrededor de cada uno y todos los días sin hacer nada durante varias horas. ¿No sería bueno si pudiéramos utilizar esas máquinas para reforzar el poder de transformación de nuestros sistemas? En este conjunto de artículos que voy a ver los beneficios potenciales del empleo de una oficina de la red utilizando entornos virtualizados.

En la parte 1 me dio una visión general del sistema y las tecnologías que va a utilizar, así como se discute algunas de las posibles razones por las que se desea crear una red de oficinas.

Trabajo de control

Si usted va a estar ejecutando trabajos, entonces vamos a necesitar alguna forma de manejarlos. Su sistema de control de trabajos (en el servidor de trabajo) tiene que ser muy bien pensado, incluso antes de intentar ejecutar una red de oficinas. Así que en primer lugar, ¿cuáles son las tareas de un sistema de control de trabajo:

  • Trabajos de la mano a cabo a petición de los trabajadores
  • Dígales a los trabajadores qué tipo de trabajos se ejecuten
  • Seguimiento de los trabajos
  • Asegurar que los trabajos sólo se ejecutan una vez
  • Proporcionar los datos del trabajo a los trabajadores, o por lo menos decir dónde conseguirlo

El sistema también debe ser extensible, una solución que funciona por ahora en un solo caso se puede extender para ejecutar varios tipos de trabajos como el negocio ve la pena en una solución de red. Por ejemplo, los trabajos pueden ganar las prioridades, más de un tipo de trabajo puede existir (es decir, varias bases de código), con el tiempo puede incluso ejecutar varias máquinas diferentes trabajadores que están optimizadas para cada tipo de trabajo (a pesar de que se aleja de los trabajadores "genéricos 'idea). Siempre trato de pensar en el futuro en el desarrollo de sistemas, una visión a corto plazo puede conducir a la frustración a largo plazo y el tiempo de desarrollo mayor.

Servidor de tareas de

Vamos a necesitar un lugar para el control de nuestros puestos de trabajo a partir de, este debe ser el único sistema en su red que cuenta con un localizador de recursos fijos, ya sea una dirección IP, nombre de host, la dirección URL (usando DNS interno), etc Esto se debe a los trabajadores necesitan saber dónde buscar empleo, los trabajadores necesitan para encontrar el sistema de control de trabajo (no el sistema de control de trabajo encontrar a los trabajadores).

El servidor de trabajo en sí no tiene realmente una tarea complicada (en un sistema básico de todos modos), que necesita para almacenar una lista de puestos de trabajo, entregar trabajos, recibir los resultados, y posteriormente almacenarlos para su posterior recuperación. ¿Cómo estas partes (tales como "mano puestos de trabajo") se definen pueden ser muy básicas. Más adelante se puede ampliar el sistema para incluir una interfaz de administración para agregar, editar, borrar, suspender trabajos, pero esto está más allá de este ejercicio.

No hay ninguna razón entonces de que su servidor de trabajo no podía ser una máquina virtual que se ejecuta en el servidor de procesamiento principal, siempre que no drena demasiados recursos de la misma. El servidor de trabajo sin embargo es necesario una alta disponibilidad, si se cae en un viernes por la noche usted va a perder un fin de semana de tratamiento, lo que podría costarle un par de semanas de tiempo de procesamiento (en comparación con el servidor de procesamiento principal solamente) . Es posible que desee considerar la posibilidad de su servidor de trabajo en un entorno de equilibrio de carga de alta disponibilidad.

Configuración básica

La configuración básica de nuestro servidor de trabajo consistirá en lo que estoy llamando a uno de mis servidores Bizkit (que es nux Li, m ySql, P HP). El código que se ejecuta en los trabajadores thea realmente averiguar qué trabajos se pueden ejecutar mediante la interacción con bases de datos con el trabajo del sistema de control. Más adelante se podría crear un servicio web y la mano en realidad a puestos de trabajo en lugar de que los trabajadores hacen el trabajo duro sí, pero por ahora vamos a seguir utilizando el principio KISS (Keep It Simple, Estúpido!).

Por lo tanto, vamos a crear tres mySQL para hacer frente a las tablas de puestos de trabajo. Estos trabajos se ``, `jobRecords`, y `jobResults`.

puestos de trabajo de mesa Aquí estoy usando SQL Buddy una gran alternativa poco a phpMyAdmin sólo porque es más fácil de instalar en CentOS (para otros ver: 10 grandes alternativas a phpMyAdmin )

Esta tabla se compone de 5 campos de simple,

  • Identificación: identifican el trabajo
  • Nombre: Podría ser una referencia de cliente, o cualquier número de otros identificadores
  • Estado: Usted necesita saber que el trabajo es, por ejemplo,
    • 0: No se ha iniciado
    • 1: Recogido
    • 2: Completado
  • started_by: ¿Quién empezó a hacer el trabajo? Esto no es del todo necesario, pero es un agradable de tener. Te sugiero que los trabajadores de seguimiento por su dirección IP en la red
  • started_at: ¿Cuándo el trabajador iniciar el trabajo? Mediante el seguimiento de los trabajos que no hayan completado dentro de X cantidad de tiempo que sabemos que tenemos que recoger el trabajo de nuevo y empezar a procesar por otro trabajador. Los trabajadores podrían dejar de procesar / fuera de línea para cualquier número de razones, falta de luz, caída, pérdida de red, etc

Es fácil cómo esta tabla podría ser ampliado con un unos pocos campos adicionales para permitir el seguimiento de las estadísticas, una columna de tiempo de llegada para ver cuánto tiempo tomó el trabajo, un contador para ver cuántos trabajadores tomó el trabajo (obviamente esto tiene que tienden a 1), prioridad de los trabajos, la lista puede seguir y seguir. En los escenarios de trabajo más complejo que sería posible especificar la cantidad de memoria que el trabajador tendría que tener acceso a (y por lo tanto, sólo el uso adecuado de trabajadores), o incluso qué tipo de trabajo sería necesario.

Permite añadir un ejemplo algunos trabajos:

trabajos de ejemplo

La tabla siguiente de nuevo es bastante sencillo de entender, estos son nuestros registros de trabajos. Están vinculados a la mesa de trabajo principal por una columna `jobs_id`. La composición de esta tabla depende mucho de los datos que debe proporcionar a sus trabajadores, permite hacer un ejemplo muy simple, donde tenemos cuatro columnas:

  • id: identificador del registro
  • Nombre: nombre de la persona
  • Dirección: Dirección de la Persona
  • jobs_id: El ID de la tarea que este registro está vinculado a

La tabla de la tercera y última consiste en una tabla de resultados, tiene mucho de la misma marca hasta nuestra mesa, como los registros, y con la adición de algunas columnas pueden ser parte de la tabla de registros:

  • job_record_id: Enlace el resultado a la mesa de trabajo
  • Resultados: Los datos de resultado

... Y eso es todo lo que necesita para el control de trabajo! (Aunque a un nivel muy básico) En mi caso me señaló a otra mesa en la que mis datos de proceso se encuentra, pero esto podría muy fácilmente ser un archivo, los parámetros para ejecutar el código de simulación, lo que sea.

Selección de un trabajo

Como se mencionó anteriormente, los trabajadores a hacer nuestra gestión de trabajo por nosotros, por ahora, así que todo lo que necesitamos realmente es encontrar un trabajo que las necesidades de procesamiento y obtener la información. ¿Cómo hacemos esto? Así recoger los criterios de selección de empleo y buscar trabajo en SQL hice lo siguiente:

  1. Tener trabajos que no están marcados como completa, pero a partir de nuestros trabajadores y recuperar los (sustituto __ME__ con un identificador más fácil, sería la dirección IP):
      ACTUALIZACIÓN `puestos de trabajo` SET `estado` = 0 donde `status` Y `= 1 started_by` = __ME__; 
  2. Utilizando los criterios de selección de tareas, seleccione un trabajo y decirle al sistema de control que este trabajador se trata de que:
      ACTUALIZACIÓN `puestos de trabajo` SET `estado` = 1, `started_by` = __ME__, `started_at` = NOW () WHERE `estado` = 0 o
     (`Status` Y `= 1 started_at`> DATE_SUB (NOW (), intervalo de una hora X)) ORDER BY `id` ASC; 

    Por el acaparamiento de los trabajos que no han arrojado resultados en X cantidad de tiempo que nos aseguramos de que todos los trabajos se ejecutan en el caso de un trabajador de chocar o ir sin permiso.

  3. A continuación tomar los datos de puestos de trabajo seguido por los mismos registros:
      SELECT * FROM `puestos de trabajo` WHERE `started_by` = __ME__ LIMIT 1;
     SELECT * FROM `job_records` WHERE `id` = __JOBID__; 

Una vez finalizado el trabajo que insertar nuestros registros de resultados y marcar el trabajo lo más completo. Recuerde que trabajos se pueden suspender / reanudar en cualquier momento, permitir cierta solidez en su guión. Es posible que la tarea se suspende la mitad del camino a través de la actualización del sistema de control de trabajos para comprobar el número de registros en un puesto de trabajo y el número de resultados vuelve a guardar en el sistema de control de trabajo sería un acierto.

Además, si bien esto demuestra cómo los trabajos pueden ser seleccionados y administrados desde un marco de consulta SQL que realmente debería ser la abstracción de su control sobre el trabajo de manera que si usted decide pasar a utilizar un servicio web, un sistema de archivos basado en XML , o cualquier otro número de sistemas que no afectará el código por encima de ella.

Trabajo de configuración

El siguiente aspecto a considerar es el tamaño del trabajo y la configuración. Al jugar con la configuración de trabajo que puede lograr un excelente equilibrio entre la velocidad, la duplicación de procesos, y la fiabilidad. Tome un par de escenarios deA:

  1. Puestos de trabajo tome un día para ejecutar cada uno: Esto significa que sus trabajadores necesitan 15 días para procesar cada trabajo (recuerde que el 10% de la energía para 2/3rds de la época). Esto claramente no es una buena configuración, el tamaño de su trabajo es demasiado grande! Se necesitaría por lo menos el doble de tiempo para conseguir un trabajo procesado si el trabajador se ausentan sin permiso inicial (tiempo para recoger a que no ha devuelto un resultado más el tiempo de reprocesamiento). En un ideal que le gustaría tener al menos un trabajo de jornada completa fácilmente aclarado por el final de cada período de inactividad larga, de esa manera a mantener los puestos de trabajo marcando más y en el peor caso, un trabajo que tomaría dos días para el proceso si el primero van a faltar.
  2. Puestos de trabajo tome un minuto para correr: Esto significa que los trabajadores toman unos 15 minutos para ejecutar cada trabajo. Si bien este principio puede parecer ideal, la ganancia de procesamiento de trabajo adicional durante la hora del almuerzo, coffee break, reuniones, etc este escenario pone la tensión en otras áreas de su sistema y presenta sus propios problemas. Por ejemplo, en primer lugar la configuración / procesamiento relación de tiempo que va a ir a la derecha hacia abajo, por lo tanto perder la eficiencia del sistema. La red va a ser constante flujo de información de trabajo para el personal de los trabajadores de varios frustrantes que están dong su día a día. También vas a poner más presión sobre el servidor de procesamiento de trabajo, ya que tiene que repartir montones y montones de pequeñas piezas de trabajo sobre una base regular. Por último, en esta situación si el servidor de trabajo de baja que va a crear un registro de vuelta enorme de trabajo no realizado, mientras que más puestos de trabajo podrían continuo de procesamiento felizmente ignorante de que el servidor de trabajo estaba experimentando dificultades.

En realidad no habrá una configuración ideal para la configuración de la red, mucho depende de los recursos disponibles, tipo de empleo, los requisitos de trabajo de tiempo de respuesta, capacidad de red, y así sucesivamente. Sin embargo, algunas directrices serían:

  • Trabajos de tamaño de modo que cada trabajador puede obtener a través de puestos de trabajo por lo menos 3.4 en un período de 15 horas (el período más largo posible el tiempo de inactividad)
  • Jugar con el tamaño del trabajo a fin de que el tiempo de instalación se convierte en bastante insignificante en comparación con el tiempo de procesamiento (teniendo en cuenta el punto anterior).
  • Si un trabajo no termina en el doble de la cantidad de tiempo (tal vez menos) que espera que se complete que suponer que su pasado sin permiso y comenzar a procesar con otro trabajador. Esto significa que usted puede tener que esperar hasta tres veces la duración normal de un puesto de trabajo a que se complete (posiblemente más si el trabajo de fallar). Es posible que desee reducir este tiempo, pero tenga cuidado de no reducir demasiado, ya que puede comenzar a duplicar las tareas de procesamiento en una base regular.
  • Puestos de trabajo debe ser independiente de las necesidades externas, tanto como sea posible. El servidor de trabajo, por ejemplo, sólo se debe contactar al inicio y al final de cada trabajo.
  • No sature su red, esto tiene dos efectos negativos, a su personal durante el día se encuentra con la red de frustración y los problemas se pueden experimentar con las conexiones se agote el tiempo un problema que sólo va a empeorar a medida que la escala de su red.
  • Garantizar puestos de trabajo se puede ejecutar en sus trabajadores. Si los trabajos se vuelven demasiado espacio de memoria puestos de trabajo intensivo o intensivo del disco comenzará a abortar y lo único que notará es una caída en el número de trabajos procesados ​​sin ninguna razón real de por qué.

Resultados de la presentación de un trabajo

Al presentar los resultados de un trabajo es importante comprobar que los resultados no han sido presentados por otro trabajador, especialmente si el trabajo actual ha estado inactivo desde hace algún tiempo.

Cuando los resultados se presentan para que el número de resultados coincide con el número de registros en el trabajo.

Como se indicó anteriormente, y no está de más insistir, construir la tolerancia a fallos en la recuperación de puestos de trabajo y presentación de resultados. Los trabajadores pueden (y lo más probable es que) entrar en el modo de suspensión en la mayoría de los inconvenientes de los tiempos y esto tiene que ser atendidos. Además, una vez más abstracción de su presentación resultados ayudarán a atender a futuros cambios en su sistema de control de trabajo mucho más fácil de tratar.

Resumen

En este seccion_a hemos visto qué es un servidor de control de trabajo que tiene que hacer y cómo llegar a un sistema muy básico establecido. Hablamos de cómo recuperar un puesto de trabajo del sistema de control y de la mejor manera de configurar puestos de trabajo para aprovechar al máximo nuestro sistema de red de su oficina. Para finalizar, un párrafo o dos sobre la presentación de los resultados al servidor de control de trabajo fue presentado.

  • Un servidor de control de trabajo administra los trabajos y asegura que todas las unidades de trabajo se completan
  • Mediante la abstracción de su trabajo de selección / resultados de la presentación que podemos cambiar la tecnología del servidor de control sin problemas mucho
  • Configure su trabajo para asegurarse de que se ejecute de forma rápida y eficiente, sin poner demasiada presión sobre su infraestructura de red, y sin duplicar las tareas de procesamiento en una base regular.
  • Asegúrese de que construir la tolerancia a fallos y checking error en su rutina, los trabajadores pueden suspender y reanudar la mayoría de los inconvenientes de los tiempos. Recuerde verificar si los resultados han sido presentados por otro trabajador.

La próxima vez

En la parte 3 vamos a crear nuestra máquina de procesamiento virtual y configurar las ventanas de nuestras máquinas para convertirse en tiempo de inactividad los trabajadores.

Oficina de Grid Computing utilizando entornos virtuales - Parte 5

Por , viernes 04 de diciembre 2009 23:03

Introducción

Yo trabajo en una empresa en la que nos encontramos muchos puestos de trabajo de procesamiento por lotes de millones de registros de datos de todos los días y he estado pensando últimamente sobre todas las máquinas que se sientan alrededor de cada uno y todos los días sin hacer nada durante varias horas. ¿No sería bueno si pudiéramos utilizar esas máquinas para reforzar el poder de transformación de nuestros sistemas? En este conjunto de artículos que voy a ver los beneficios potenciales del empleo de una oficina de la red utilizando entornos virtualizados.

En la Parte 4 se observó el uso de herramientas para asegurar que estamos ejecutando la última versión de las fuentes de código y datos, de modo que los resultados obtenidos están siempre al día con la última información de negocio y la lógica.

Antes del despliegue

Antes de implementar su sistema de red si hay una cosa que hacer y solo una cosa es comparar su sistema actual! No importa lo que dicen sus colegas acerca de la cantidad de trabajo adicional que su sistema se va a hacer a menos que tenga los números que lo respalden sus garantías no son otra cosa. Por lo tanto,

  • número de registros que se pueden procesar en la actualidad? Por día? Por hora?
  • ¿Cuánto tiempo suelen tardar en dar vuelta a un trabajo?
  • ¿Cuánto más capacidad tiene?

También hay otras preguntas:

  • Si su servidor de procesamiento (o uno de los servidores de procesamiento) se cae, ¿cómo afecta esto a sus capacidades, va a ser lisiado?
  • ¿Qué ventajas esperanza / espera obtener de un sistema de red?
  • Están las máquinas de oficina capaz de ejecutar los trabajos?
  • Son sus (o puestos de trabajo puede ser convertido) para trabajar en este estilo de correr?

El punto principal es pasado a tomar su tiempo en cualquier cambio de esta envergadura. Actualice el código de procesamiento para trabajar con la nueva metodología de referencia, una vez más. Es posible configurar el servidor de procesamiento para ejecutar una máquina virtual, después de todos los servidores de procesamiento sea simplemente otro trabajador (a sólo un muy poderoso relativamente). Deje que el nuevo proceso para resolver.

Despliegue

Mi sugerencia sería hacer estallar en la oficina de un fin de semana realizará todas las instalaciones y puesta en marcha. ¿Es esto justo antes de vacaciones de dos semanas y dejar lo demás pobre hombre para hacer frente a las consecuencias ... tal vez no ...

De implementación de un sistema como este tiene que ser lento. A pesar de ser relativamente fácil de configurar este sistema afectará a la infraestructura de toda la oficina (y el digital). En primer lugar, lanzar un par de máquinas a la vez, controlar el tráfico de red, como los anfitriones de los trabajadores realizan en el día a día. Puede que tenga que modificar la configuración de su trabajo en respuesta a los hallazgos.

Una vez que el sistema se ha instalado con unas pocas máquinas (digamos el 10% de todas las máquinas de oficina, es decir, 5) mantener la vigilancia del tráfico de red y máquina host de referencia performance. Siguiente de nuevo, ahora se debe procesar los trabajos de un 33% más que sus puntos de referencia en primer lugar. Compruebe esto es así, o que está al menos en este estadio. Si no es así, investigar lo que está pasando antes de continuar. Repita este ciclo hasta que felizmente tiene todas las máquinas de oficina funcionando sin matar a rendimiento de la máquina individual o de molienda de la red a un punto muerto.

Mantener en todo momento la evaluación comparativa, incluso después de que todas las implementaciones se hacen. Comprobar cómo las nuevas actualizaciones de código afectan a la velocidad de su sistema, revise todos los trabajadores de informes y trabajos de procesamiento. Poco a poco (muy lentamente) el incremento de su configuración de trabajo para obtener lo mejor de sus trabajadores y de la red.

¡Alto!

¿Qué pasa si usted quiere dejar a sus trabajadores que se ejecute en algún momento? Todos ellos están por ahí corriendo, la regeneración, y haciendo todo lo posible para procesar los datos como los insectos hambrientos. La respuesta puede parecer obvia, pero vale la pena añadir en caso de su pasado por alto. Basta con editar el script de procesamiento con un exit (0) or die () u otra declaración de matar a su trabajo de procesamiento. Una razón importante por la que siempre tratamos de actualizar a la última secuencia de comandos de procesamiento antes de correr!

Demostración del sistema

Para escribir esta serie de artículos cortos que he creado una red muy pequeña para demostrar las tecnologías y metodologías. He leído un montón de artículos, tutoriales, y utilizan diversas herramientas para configurar y controlar lo que estaba pasando. De ninguna manera me he salido y saturado de una oficina todo el tráfico y ni he tenido acceso a un personal permanente de los miembros del PC para ver cómo el rendimiento de acogida se vio afectada.

Mi sistema de demostración era muy humilde por cierto. Utilicé mi escritorio normal configurado como un servidor de control de trabajo. En esta había instalado MySQL server instalado configurado como un maestro en la replicación, PHP , Â y SVN vinculados a través de apache (para el acceso a través de los trabajadores VM).

Entonces creó una máquina de trabajo CentOS en VirtualBox en un hijo de 6 años portátil con Windows XP. Puedo configurar las tareas programadas como se especifica después de copiar la máquina virtual en la máquina y la dejó ir.

La máquina virtual creada con PHP, la subversión, y mySQL. He comprobado una rama llamada "trabajador" de mi trabajo de control de los servidores de repositorio y se aseguró de que pudiera ser actualizado usando "svn update '. La próxima configuración de MySQL como un esclavo y comprobar que los datos se replica de MySQL en el servidor de control de trabajos hasta el VM de los trabajadores. Después de todo esto tengo que instalar el script y el trabajo de cron.

Mi script de procesamiento, básicamente, fue a lo largo de las líneas de esta (cosa muy simple):

  • Leer en el campo de nombre
  • Contó el número de nombres similares en una mesa de la fuente de los datos almacenados en la máquina virtual
  • Contó el número de nombres que el anterior pero dividiendo el nombre por espacios (es decir, nombre, medio, apellido)
  • Repite este proceso 1.000 veces

Cada puesto de trabajo tomó aproximadamente 20 minutos en ejecutarse. En un momento me abrió varias copias de la máquina virtual de trabajo en la computadora portátil ventanas y observó los trabajos se marcó por cada una de las direcciones IP de los trabajadores. En este punto, también confirmó que la replicación se reiniciará automáticamente.

Dejando el portátil al ralentí como resultado un trabajador empieza a procesar los trabajos desde el servidor de control de trabajo. Cuando se reanuda el uso de ordenador portátil se produjo un retraso de unos 30-60 segundos, se trata de una buena cantidad de tiempo y el personal tendría que ser conscientes de que su máquina puede hacer una pausa por un corto tiempo al volver a la máquina. Las máquinas más modernas pueden no tener una pausa de tanto tiempo. El beneficio de la cantidad de procesamiento realizado por estas máquinas durante períodos de inactividad que más que compensan los miembros del personal que tenga que esperar un período corto (1 minuto), al llegar a sus máquinas de la mañana (que con frecuencia esperar más que esto para un Windows Defender actualización tenga lugar), siempre y cuando se enteraron de esto (el tiempo útil para tomar un café por la mañana!).

En general me siento seguro de que me han demostrado las tecnologías que podrían utilizarse para crear un sistema. Me han demostrado que este sistema funciona en una escala de (muy) pequeño y con un poco más la experimentación podría ser ampliado a utilizar los recursos de las máquinas de una oficina. Si no lo hago llegar al punto de hacer esto yo estaría muy interesado en saber / ver si alguien más lo hace.

Conclusiones / evaluación

El siguiente paso lógico sería hacer que un ejemplo del mundo real y empezar a implementar un sistema de este tipo dentro de un ambiente de oficina y ver qué pasa. Pedirle a un negocio que se comprometan a ello sin una compañía de abrir caminos para probar la tecnología y la eficacia puede ser un poco difícil. La red / computación distribuida es muy popular entre algunos círculos es y tiene algunas aplicaciones de gran tamaño (BIONC, SETI @ Home, Folding @ Home, etc.) No obstante, encontrar una escala más pequeña y simple sistema de este tipo en mis búsquedas que podría ser lanzado dentro de un entorno de oficina.

He creado un sistema básicamente libre con software de código abierto en su mayoría y las herramientas disponibles en casi cualquier oficina. Las tecnologías se demostró, básicamente, mostrar y llevar a cabo y funciona como se esperaba. Esperemos que han demostrado que con el trabajo no es mucho y con una configuración muy sencilla se puede implementar una red de oficinas del sistema de cómputo que es de gran alcance, barato, A y escalable, todo al mismo tiempo.

Una vez que el sistema está funcionando casi no hay fin a la cantidad de personalización y mejoras que puede hacer. Por ejemplo, las estadísticas / benchmarking se pueden añadir fácilmente mostrando el valor de este sistema todos los días. Las nuevas máquinas se pueden añadir de forma rápida y con la misma facilidad y cuando llegan con las actualizaciones para el hardware existente reforzar su poder de procesamiento.

Espero que hayas disfrutado de la lectura de esta serie de artículos y su dado que pensar en el funcionamiento de un sistema de red de oficinas. La solución que aquí se presenta no necesariamente funcionará en todas las situaciones, pero debe ser adaptable para que pueda obtener su tratamiento de los datos hace uso de su propia solución.

Por favor, no dude en enviarnos sus comentarios, correcciones o mejoras y que voy a hacer mi mejor esfuerzo para mantener este artículo actualizado para que coincida.

Zend Framework: Fundamentos - Revisión

Por , el sábado 28 de noviembre 2009 22:42

My employer recently paid for a group of us developers to take the Zend Framework: Fundamentals course, here I'll summarise my thoughts and opinions on the course for others. For those looking to save time, here's my summary:

For developers who haven't had time to look at the Zend Framework this course (Zend Framework: Fundamentals) offers a good overall picture of the framework introducing you to the key areas and giving enough information in order to continue. For those who have spent time looking at the framework and have followed one or two tutorials this course does not offer much beyond.

Fondo

I've been a PHP developer for around 5-6 years, and have started working with the Zend Framework on a component basis over the last 6 months. I've developed and/or been a developer on a couple of small Zend Framework MVC sites. I'll be honest, I haven't had a huge amount of exposure to other frameworks from a coding point of view but have spent several hours researching the project websites and evaluating them. The framework and the community surrounding Zend Framework it is quite exciting and there seem to be huge possibilities in where its going.

About the Course

The course is delivered over 9 two hour webex sessions (with a 10-minute break in the middle). The time is spent going through a set of slides provided by Zend with discussion at any time. You can use a microphone to talk to the instructor, but to be honest I didn't see anyone use anything more than the chat window. In addition a VMWare Ubuntu machine is provided that has example code and projects set up an a trial version of Zend Studio. The course leader talks to attendees either over an integrated VoIP solution, or you can dial in using one of the many worldwide dial in numbers.

During the course the material consists of a brief overview of the Framework and the MVC pattern before heading into a sample guestbook application. The discussion demonstrated bootstrapping, Zend_Application, Db Tables, Database access, Forms, Filtering, ACL, Validating, etc, etc. Basically covering all the topics you'd require to get a basic site up an running all the time giving you the tools to go and get more advanced in the framework (although this did amount to 'See the website' much of the time).

Time is given to code up some examples, and to develop the 'guestbook' and simple 'wiki' application. Personally I felt that providing the code or each app and then asking us to develop what was essentially a copy alongside didn't really provide a good learning experience. I would have preferred to develop an application similar, but not identical. to the example application with the benefit of having a guide to refer to. Alternatively building the applications from scratch with the demonstrator would of possibly led to more questions about why and how , thus giving a better understanding of the framework, after all you can look up specifics after the course.

The last lecture consisted of working on the wiki application with help/guidance from the instructor. After the course feedback was taken, it was emphasised several times through the course that Zend takes feedback very seriously, in fact apparently our version of the course was quite new. Some of the other developers in the company will be taking the course soon so it will be interesting to see if this has happened.

El estilo de curso fue informal, permite la retroalimentación y la colaboración entre los participantes y el instructor. El director del curso era amable, accesible (direcciones de correo electrónico fueron compartidas por las preguntas), y aunque su presentación de las diapositivas fue un poco inestable parecía totalmente competente en el marco. Él era claramente alguien que utiliza el marco sobre una base regular en lugar de alguien que se enseña a enseñar el curso, me gustó la experiencia del "mundo real" al respecto.

Sensación general

De alguna manera me pareció el curso de una pérdida de tiempo, en otros, era muy práctico. Esperemos que tendré mis razones con claridad, y tal vez dar un poco de alimento para el pensamiento o información útil (a sabiendas de que me es poco probable!).

Para mí este curso estaba dirigido a un nivel demasiado bajo. Después de haber pasado a través de la guía de inicio rápido, lea Zend Framework Rob Allen en acción, y trabajó con el marco de un poco que en realidad no hacer nada demasiado. Me gustó el curso de recoger desde el final de la guía de inicio rápido y desarrollar nuevas destrezas.

That said, the course title does clearly state “Zend Framework: Fundamentals ” and in that aspect the course achieves what it sets out to do. Other members of the development team that haven't spent the time looking into the framework finished each session with enthusiasm and asked questions which was really nice to see.

All was not lost, it was good to spend time confirming the basic details of the framework and get to ask a couple of questions in areas where I wasn't 100%. It was also time that I got to sit down each day and think about coding using the framework and future projects, something I wouldn't of been able to do otherwise (can you imagine your company agreeing to that? :) ). Last but not least you also get a nice certificate from Zend to say that you attended the course (albeit by email).

Zend Framework Certification

This was one question that kept coming to mind during the course, would it prepare me for the certification? The quick, easy is a resounding No . The course instructor was quite clear on that with the additional advice that for the certification you should really be using the framework on a day to day basis and feel very comfortable and confident in its usage and methodologies.

Resumen

Given everything I've written above, I'll summarise everything in two easy bullet points:

  • New to Zend Framework: This course does exactly what you'd expect, it gives you a nice introduction to the framework and a good grounding on the basics from which you can build. The course seems to generate interest and enthusiasm for the framework amongst developers.
  • Used the Zend Framework: While it was nice to shore up some of the very basics I felt the time, effort, and funds to take the course could of been better spent elsewhere. It will be nice to see Zend create a new higher level course to take developers to the next level – at least to the standard of certification and beyond. For that I would sign up immediately.

Html Table Generating Class (HtmlTable.php)

By , Tuesday 5th May 2009 9:11 pm

I required to generate a HTML table from PHP data for a project that I was working on. Unfortunately after a bit of Googling I couldn't really find anything that was suitable so I decided to create my own.

I realise that this may not be the best table generating class ever and there's probably a few bugs still in it, but I'd prefer to share and if anyone wants a better version I'll look into it :) I originally wanted to create a table built up of seperate objects eg cell object, row object (built up of cell objects), but I realised the overhead on this would be HUGE! So I've gone back to an array setup.

The class will calculate the maximum number of columns used in the header, footer, or body and write out that number of columns. Headers, Footers, and the Caption are optional. Attributes are made up of an array where the key is the attribute name and the value is the attribute value. Attributes are applied to table tag (on table creation – class initialisation), table rows (array[row][attribute]), and table cells (array[row][column][attribute]) this applies for headers, footers, and the table body.

Ejemplo

I always find the best way to look at something is to use an example so here we go:

$table = new HtmlTable( array('class' =>'sortable',
                'style' => 'width: 550px;'));
$header[0][0]['content'] = 'ID';
$header[0][1]['content'] = 'Title';
$header[0][2]['content'] = 'Date';
$header[0][3]['content'] = 'Site';

$table->addHeader($header);
$i = 0;
foreach ($newsList AS $newsItem) {
$itemLink = "{$newsItem['title']}";
$tableBody[$i] = array(0 => array('content' => $newsItem['id'],
'attributes' => array('style' => 'font-weight: bold;')),
1 => array('content' => $itemLink),
2 => array('content' => $newsItem['date_posted']),
3 => array('content' => $newsItem['site']) );
$i++;
 }
$table->addBody($tableBody);
echo $table->drawTable();
Identificación Título Fecha Sitio
9 News 1 2009-04-04 10:40:00 site name
10 News 2 2009-04-04 12:44:11 site name

And the HTML looks like this:

 < table  class =  "sortable" style =  "width: 550px;" >
< thead >
	< tr    >
		< th   >ID</ th > 
 < th   >Title</ th >
		< th   >Date</ th >
		< th   >Site</ th >
</ tr >
</ thead >
< tbody >
	< tr    >
		< td  style =  "font-weight: bold;" >9</ td > 
		 <Td   >News 1</ td > < td   >2009-04-04 10:40:00</ td > < td   >site name</ td > </ tr > < tr   > < td style = "font-weight: bold;" >10</ td > < td   >News 2</ td > 
 < td   >2009-04-04 12:40:00</ td >
		< td   >site name</ td >
</ tr > 
 </ tbody >
</ table > 

Código

HtmlTable.php
If you have any comments please make them below, it would be great to hear some. If you end up using it also let me know and I'll extend it in the future :)

Log to DB using Zend Framework

By , Tuesday 14th April 2009 9:06 pm

I've managed to get a site up and running with the Zend Framework , everything is logging nicely to FireBug/FirePHP so next step was to log to the DB. I also wanted to log some additional information using the framework such as user agent, date and time, get and post variables. So to extend the manual a little here's what I did:

// Set up logging to DB
$db = Zend_Registry ::get('dbAdapters');
$db = $db['general'];

$columnMapping = array( 'priority' => 'priority',
'message' => 'message',
'datetime' => 'timestamp',
'user_agent'=> 'user_agent',
'get_vars' => 'get_vars',
'post_vars' => 'post_vars',
'site' => 'site'
);

$writerDb = new Zend_Log_Writer_Db($db, 'error_logging', $columnMapping);
$logger = new Zend_Log($writerDb);

$logger->setEventItem('datetime',date('Ymd H:i:s'));
$logger->setEventItem('user_agent',$_SERVER['HTTP_USER_AGENT']);
$logger->setEventItem('get_vars',print_r($_GET,true));
$logger->setEventItem('post_vars',print_r($_POST,true));
$logger->setEventItem('site',SITE);

$logger->info('Informational message');

Where the array keys in $columnMapping are my column names. 'Priority' and 'message' are understood by Zend_Log_Writers but the additional fields were added to give me some additional information.

Obviously this assumes that you have logging working using one of the other writers first :)

UK Names Directory and Facebook Application

By , Friday 10th April 2009 9:33 am

One of the fun things I've been involved in whilst working for Tracesmart is the names directory . Basically we took our huge information database and pulled out a big pile of stats about various names.

The process is all one big SEO effort in order to draw more traffic to the site, but it also provides some interesting information and name statistics.

Here's an example for my name Lloyd Watkin , or I suppose more correctly Steven Watkin . Take a minute to look up your name on the Tracesmart site, might be interesting ;)

We've also got names statistics data on the names directory page which tells you what names have been searched and how recently. Its quite interesting to see famous people's names fly up the stats when they appear in the news. A recent example is that of Liam Neeson who's wife died from a skiing accident recently, although obviously people aren't quite right on the spelling (hence the huge numbers of hits on this name) — Liam Nilson .

Facebook Application

Once the names directory was created we set about creating a facebook application which we duely named ' My Name '. The facebook application is an extension of the names directory and provides some additional statistics. In order to add the names directory to your facebook account please visit:

http://apps.facebook.com/my-name/

Disabled Form Fields are not submitted…

By , Thursday 4th September 2008 11:01 am

As a quick note, as part of the ongoing estate agency software project I've gone back to editing date entry within the system. Now instead of allowing users to enter any old bit of text I've switched over to a Javascript date/time picker (for the short term) that allows user to 'pick' and date and time from a pop up window.

Now, for my old system the picker would pop up when the user clicked on the input field . This however would allow the user to ignore the text field and still go and type any old thing into the field. This wasn't ideal. So my solution was to ' disable ' the form field and put a span next to it with an onclick event calling the date/time picker. This meant that the user was almost forced into using the nice date/time picker so dates would go in with the correct format (although that still has to be validated!).

So I started passing my nicely formatted date-time(s) through the form and picking trying to pick them up with PHP 's $_GET or $_POST variables. Unfortunately'disabled' fields are not passed through form submissions This was very annoying. The solution was to enable the input element using javascript when the form was submitted using the onsubmit event.

This meant that the form data was passed through as required and was nicely formatted ready for validation…Â

Search Array Keys and Return Matches

By , Wednesday 13th August 2008 4:26 pm

I've had the need to search through an array and return the elements that have keys that match a search term. So I thought I'd share.

'W hy would I need this?' would probably be the first question you'd ask, well if I wanted to search through an array for all the elements that related to the dimensions of an item then I could pull out the appropriate keys by using this little function:

 <? function searchArrayKey($array,$search) {  $search = strtolower($search);  if (is_array($array))  {   foreach ($array as $key => $data)   {    if (strpos(strtolower($key),$search) === 0) { $returnArray[$key] = $data; }   }   return $returnArray;  } else  { // User hasn't subimitted an array...   return false;  } } ?> 

So for example if I wanted to search an array of item data for the dimension data then I could do the following (and print to screen presumably):

 $dimensions = searchArrayKeys($itemArray,'dimension'); 

Which would return something like:

 print_r($dimensions); Array ( [dimension_height] => 20 [dimension_width] => 30 [dimension_depth] => 40 ) 

Custom php.ini with Plesk

By , Wednesday 13th August 2008 3:53 pm

We have a dedicated server with ukFast  on which we run a number of domains that exist on virtual servers running under Plesk . Anyway, on most of my domains I want to hide away warnings and for security keep errors to the log files, however on some of my domains (such as those I'm developing on) I want to show every little nasty warning and error that appears.

If I edit my PHP .INI”>php.ini this affects each and every domain on the server, not a good idea especially when several of the sites are fully live versions  So in order to get around this you need to put a file called vhosts.conf in your conf directory, for example, /var/www/vhosts/<my_domain>/conf/vhost.conf .

Once you've added your additional code, again for example I included,

 php_value error_reporting E_ALL php_value display_errors On 

followed by running the following command (this reconfigures all of your domains its just quicker lazier than typing in the domain name ,

 # /usr/local/psa/admin/bin/websrvmng -a 

If you're feeling a bit nimble then you can always type out the full version which is,

 # /usr/local/psa/admin/sbin/websrvmng -u --vhost-name=<my_domain> 

After this command if you look to httpd.include file, will see that your httpd.include will have an include line for your vhost.conf, something like this:

 Include /srv/www/vhosts/domain.com/conf/vhost.conf 












Panorama Theme by Themocracy

7 visitors online now
6 guests, 1 bots, 0 members
Max visitors today: 12 at 06:55 am UTC
This month: 17 at 01-09-2011 11:27 pm UTC
This year: 130 at 28-03-2011 10:40 pm UTC
All time: 130 at 28-03-2011 10:40 pm UTC