Dinámicamente agregar páginas a un contenedor en tiempo de ejecución Zend_Navigation

Por Steven Lloyd Watkin , jueves 07 de enero 2010 22:50

En una continuación de mi último post sobre Zend_Navigation, las solicitudes de ruta para sitemap.xml al controlador personalizado / acción , este post es sobre dymnamically añadir páginas a un contenedor de Zend_Navigation en la ejecución en tiempo de ejecución / script.

Su muy bien especificando sus páginas en un ini o xml archivo, pero en algún momento vamos a tener cambios en las páginas de su sitio web que desea, como parte de un menú, mapa del sitio, o para ser incluido en su ruta de navegación. Por lo tanto lo que tenemos que hacer es añadir páginas a nuestro contenedor Zend_Navigation en tiempo de ejecución. Ejemplos de esto sería en la adición de noticias, blogs, o comentarios de la página, etc

Continue reading 'Agregar dinámicamente páginas de contenedor Zend_Navigation en tiempo de ejecución' »

Enrutar las solicitudes de sitemap.xml al controlador personalizado / acción

Por Steven Lloyd Watkin , miércoles 06 de enero 2010 12:13a.m.

Con el fin de las solicitudes directas de / sitemap.xml a un controlador de la costumbre y la acción en el Zend Framework aplicación sólo tiene que añadir lo siguiente en su fichero de configuración application.ini o alternativa (por ejemplo, yo uso navigation.ini):

 resources.router.routes.sitemap.route = "sitemap.xml"
 resources.router.routes.sitemap.defaults.controller = índice de
 resources.router.routes.sitemap.defaults.action = mapa del sitio

Código de ejemplo para la salida se puede ver mediante la creación de una acción en el controlador apropiado (por ejemplo mi mapa se encuentra en el controlador de índice, la acción mapa):

 < php
 clase IndexController
     se extiende Zend_Controller_Action
 {
     / **
      * Muestra un mapa basado en la configuración Zend_Navigation
      * /
     sitemapAction función pública ()
     {
    	 echo $ this-> view-> de navegación () -> Mapa del sitio ();
    	 $ This-> view-> layout () -> disableLayout ();
    	 $ This-> _helper-> viewRenderer-> setNoRender (true);
     }
 }

Sitemaps pueden rápida y fácilmente generar utilizando Zend_Navigation , un gran tutorial rápido (y en general muy útil para Zend Framework tutoriales) es Zend yesos - la creación dinámica de un menú de un mapa del sitio y el pan rallado .

Zend Framework Per-módulo de configuración basado en

Por Steven Lloyd Watkin , viernes 01 de enero 2010 22:40

He creado una respuesta a este post, que requiere menos configuración, consulte Diseño de Módulo de base - Zend Framework .

Cuando se utiliza el Zend Framework con los módulos, es obvio que si se está ejecutando varias (sub) sitios de la misma aplicación que no necesariamente quieren el mismo diseño de secuencias de comandos para cada parte. Decidí ir con la estructura del sitio lo siguiente:

  / Aplicación
     / Controladores
         ...
     / Modelos
     / Modules
         / Default
             / Controladores
             / Diseño
                 / Scripts
             / Puntos de vista
                 / Scripts
         / AnotherModule
             ...
     / Scripts

El problema fue la creación de los guiones de diseño en función de cada módulo. La respuesta llegó mediante el uso de un ayudante de acción. La creación de los diseños en función de cada módulo consta de tres pasos:

  1. Application.ini (o la configuración de configuración similar):
      admin.resources.layout.layoutPath APPLICATION_PATH = "/ modules / admin / layouts / scripts"
     default.resources.layout.layoutPath APPLICATION_PATH = "/ modules / default / layouts / scripts"
     member.resources.layout.layoutPath APPLICATION_PATH = "/ modules / member / layouts / scripts"
     affiliate.resources.layout.layoutPath APPLICATION_PATH = "/ modules / afiliado / layouts / scripts" 
  2. Crea tu ayudante de acción:
      <? Php
     / **
      * Establece la ruta de distribución en función de cada módulo
      *
      * @ Autor Lloyd Watkin <lloyd@evilprofessor.co.uk>
      * @ Since 01/01/2010
      * /
     clase Pro_Controller_Action_Helper_SetLayoutPath
         se extiende Zend_Controller_Action_Helper_Abstract
     {
         / **
          * Establece camino trazado basado en el módulo
          * /
         preDispatch función pública ()
         {
        	 $ Module = $ this-> getRequest () -> getModuleName ();
    
    	     if ($ bootstrap = $ this-> getActionController ()
    	                        -> GetInvokeArg ('arranque')) {
    
    	         $ Config = $ bootstrap-> getOptions ();
    
    	         if (isset ($ config [$ modulo] ['recursos'] ['layout'] ['layoutPath'])) {
    	             $ LayoutPath =
    	                  [$ Módulo] $ config ['recursos'] ['layout'] ['layoutPath'];
    	             $ This-> getActionController ()
    	                  -> GetHelper ('layout')
    	                  -> SetLayoutPath ($ layoutPath);
    	         }
        	 }
         }
     } 
  3. Y, por último boostrap el ayudante de acción:
      ...
         / **
          * Establece los guiones de diseño en función de cada módulo
          * /
         protegidos _initLayoutHelper function ()
    	 {
    	     $ This-> bootstrap ('frontController');
    	     $ Layout = Zend_Controller_Action_HelperBroker:: addHelper (
    	         nueva Pro_Controller_Action_Helper_SetLayoutPath ());
    	 }
     ... 

Doctrina: Hora y fecha por defecto NOW ()

Por Steven Lloyd Watkin , miércoles 30 de diciembre 2009 18:30

He estado luchando con la creación de un esquema de base de datos para un nuevo Zend Framework del proyecto. Estoy uso tratando de usar la doctrina ORM para los modelos de mi base de datos. Es necesario establecer el esquema de lo que me permitió establecer una fecha y hora predeterminadas por un `` de la columna de fecha y hora, por ejemplo, al agregar un nuevo mensaje me da la hora y fecha actuales. Después de mucho buscar y experimentar encontré la solución, así que estoy compartiendo.

En el esquema YAML archivo, simplemente haga lo siguiente:

 Mensaje:
   Actas:
     Timestampable:
       de creación:
         Nombre: created_at
         Tipo: fecha y hora
         Formato: Ymd H: i: s
       actualización:
         Nombre: last_updated
         Tipo: fecha y hora
         Formato: Ymd H: i: s
   columnas:
     Identificación:
       Tipo: entero
       primaria: true
       autoincrement: true
     name: String (255)
     email: string (300)
     message: String (2000)

Si por el contrario no desea un `updated_at` de la columna se puede utilizar el siguiente:

 Mensaje:
   Actas:
     Timestampable:
       de creación:
         Nombre: created_at
         Tipo: fecha y hora
         Formato: Ymd H: i: s
       actualización:
         discapacitados: true
   columnas:
     Identificación:
       Tipo: entero
       primaria: true
       autoincrement: true
     name: String (255)
     email: string (300)
     message: String (2000)

PHP Design Patterns - patrón Observer

Por Steven Lloyd Watkin , martes 29 de diciembre 2009 22:02

He estado leyendo Head First Design Patterns recientemente y he decidido a escribir algunos de los patrones como ejemplos de PHP para mi propio beneficio. El primero que me he decidido por el código es el patrón Observer . La definición formal del patrón Observer es la siguiente:

El patrón de observador (un subconjunto de la asíncrono de publicación / suscripción patrón ) es un software de patrón de diseño en el que un objeto , llamado el tema, mantiene una lista de sus dependientes, llamados observadores, y les notifica automáticamente de cualquier cambio de estado, por lo general, llamando uno de sus métodos . Se utiliza principalmente para implementar sistemas distribuidos de control de eventos.

Como los sistemas cada vez más débilmente acoplados asegurarse de que cuando un evento ocurre todos los sistemas que requieren el conocimiento de estos cambios son informados. Por ejemplo, una entrada del blog, después de guardar un mensaje que tenga que actualizar un motor de búsqueda (por ejemplo, Lucene), actualizar nuestro mapa del sitio, las etiquetas, los usuarios de correo electrónico suscrito, etc El patrón de observador permite a los desarrolladores añadir detectores adicionales sin modificar su objeto observable . Mediante la inyección de observadores (es decir, un motor de búsqueda de actualizaciones de observador, un generador de mapa, etc) en un sujeto (es decir, post de blog de edición del sistema) que puede permitir que el que para llevar a cabo todas las actualizaciones necesarias sin ningún cambio.

Continuar 'Patrones de diseño PHP - patrón Observer' leyendo »

Oficina de Grid Computing utilizando entornos virtuales - Parte 4

Por Steven Lloyd Watkin , viernes 04 de diciembre 2009 23:59

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 3 que hemos creado nuestra máquina de procesamiento virtual y configurar las máquinas de las ventanas para convertirse en tiempo de inactividad los trabajadores.

La ejecución del último código

Inevitablemente, después de crear la lógica de negocio de trabajadores va a cambiar, los errores se encuentran, el código más rápida y eficiente se produce lo que deja a sus trabajadores se sentaron alrededor de procesamiento de datos utilizando el código viejo maloliente . Entonces, ¿cómo nos aseguramos de que siempre estamos usando la versión más reciente y más grande de nuestros scripts de procesamiento?

Hay unas cuantas formas sencillas muy fácil que pudiéramos hacer esto, el truco, sin embargo, es reducir la potencia de procesamiento y el tráfico de red para lograr esto. Vamos a empezar con el más simple de las soluciones y mejorar poco a poco más de un par de iteraciones.

El primer método sería simplemente conectarse a nuestro servidor de control de trabajos (a través de samba, FTP, o similar) y bajar la última versión del código. No es muy eficiente, pero va a hacer el trabajo. Permite mejorar eso un poco, ¿qué hay de la creación de un script de rsync y el uso que cada vez que en su lugar? Por otra parte lo de poner nuestro último guión de transformación en la subversión revisando el código inicialmente y luego simplemente actualizar el código en cada ejecución ( svn update )?

Al final podríamos terminar con un script bash (llamado por cron cada 10 minutos), que parece tan simple como esto:

  #! / Bin / sh
 si ps ax | grep-v grep | grep php > / dev / null
 entonces
     echo "Job está procesando, la salida"
 más
     echo "El trabajo no se ejecuta, comienza ahora"
     cd / ruta / a / trabajo / copia
     svn update
     php yourJobProcessingScript.php
 fi 

Ahora podemos estar seguros de que con cada carrera que definitivamente estamos ejecutando el código más reciente. Estamos garantizando esto actualizando nuestra base de código cada vez que realizamos una carrera y la reducción de tráfico de la red sólo la transferencia de las diferencias de archivos a través de nuestra red.

En mi configuración de demostración, hice exactamente como antes. Subversion ha instalado en mi servidor de procesamiento de los trabajos y yo simplemente sacó la última versión del código de un "trabajador" Poder usar 'svn update'. También he añadido una etiqueta de número de versión de mi script de transformación que fue devuelto a la base de datos como parte de la devolución de resultados. De esta manera pude ver que mi código se actualiza cada vez que he copiado mi tronco en la rama de los trabajadores, es decir que yo era definitivamente la ejecución del script de procesamiento más avanzada.

Utilizando los últimos datos

Si el procesamiento de los trabajos hace uso de fuentes de datos entonces en algún momento estos van a ser actualizado también. A menos que usted llame a sus fuentes de datos sobre una base muy poco frecuente que va a inundar la red con un tráfico tan pronto como sus trabajadores empezarán a llevar todo a un punto muerto. Para mi solución, decidí que me gustaría pasar mis fuentes de datos con mis máquinas virtuales.

Mantenga usted está caballos allí! ¿Qué sucede si mis fuentes de datos son enormes? Bueno, esto es realmente un caso de cómo los datos de cuánto estamos hablando? Puede ser más rentable que instalar una adicional en el disco duro de mayor capacidad en cada máquina que comprar un servidor de procesamiento adicional. Esta es una cuestión de presupuesto y corresponde a la empresa para decidir. Es tal vez que sus fuentes de datos son tan grandes que es sólo factible para mantener esa cantidad de datos en las máquinas de su trabajador. En ese caso, ¿qué harías? Bien podríamos considerar llamar a un servidor de datos local, pero esto podría causar problemas en la red. En este caso, un sistema de red de este tipo puede llegar a ser poco realista que incluya en su entorno de oficina. También puede ser que usted puede mirar en estrategias alternativas de funcionamiento, por ejemplo, sólo llamando a sus trabajadores 8 p.m.-06 a.m. cada noche y / o limitación de peticiones origen de datos.

Pasando permite decir que nuestra cantidad de datos de fuentes de 100 GB de datos. Pues sí que es un poco de datos para moverse por la red en una actualización. ¿Cómo nos aseguramos de tener la última copia de los datos en este caso? Rsync es una posibilidad, pero personalmente creo que mediante la ejecución de su última fuente de datos en el servidor de procesamiento de la tarea y configurarlo como un maestro en la replicación (con un registro de bin larga y bonita) podría ser el camino a seguir:

replicación Mediante el establecimiento de cada uno de sus trabajadores como un esclavo de las actualizaciones del servidor de control de trabajo a sus fuentes de datos tengan un efecto positivo muy bien a sus trabajadores sin un gran incremento en la actividad de red (es decir, a menos que realice una actualización de datos de gran tamaño y todos sus trabajadores una patada en a la vez). Esto tiene ventajas sobre rsync en que no tendría una larga pausa antes de cada trabajo, como las actualizaciones de base de datos, mysql demonio en su trabajo continuamente actualizar sus datos, mientras que el proceso continúa.

Así es como puedo configurar mi servidor de demostración. Para configurar la replicación he seguido la guía en el sitio de MySQL ( Configuración de la replicación ) y en 20 minutos tenía mi trabajo Inicial replicar el trabajo de control de servidores de conjunto de datos. Por cada trabajador adicional de la configuración de la replicación y el proceso de trabajo cada vez que la máquina virtual se ha copiado.

Resumen

En esta sección del artículo que hemos visto lo fácil e indoloro que es mantener el código de procesamiento hasta la fecha por rsync using o subverion (SVN) para hacer el trabajo y reducir el tráfico de red en el mismo archivo.Una También hablamos sobre cómo para mantener su información de la fuente de datos puesta al día por lo que le alcancen a cada uno de sus trabajadores. Así, zona que permite que mantengamos con la lógica de negocio y la información en nuestro sistema de red de oficinas. Habrá, obviamente, innumerables alternativas para realizar estas tareas, pero en este caso fueron dos ejemplos simples para demostrar lo fácil que es una solución de conseguir.

La próxima vez

En la parte final de esta serie, bien llamada la parte 5 , vamos a discutir la implementación de este sistema. Voy a resumir lo que se ha aprendido y lo que he conseguido crear.

Oficina de Grid Computing utilizando entornos virtuales - Parte 3

Por Steven Lloyd Watkin , viernes 04 de diciembre 2009 23:37

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 2 nos fijamos en los puestos de trabajo de un servidor se ejecutará, y cuántos empleos se debe configurar con el fin de lograr la mayor cantidad de procesamiento al tiempo que garantiza que cada trabajo se procesa sin falta.

La creación de su trabajador - o servidor LIMP

El siguiente paso en el proceso es la creación de sus trabajadores virtual. Por eso me voy a utilizar una instalación de CentOS con VirtualBox. Voy a instalar MySQL y PHP en el servidor, también conocido como una cojera (nux ​​Li, m ySQL, P HP) Servera (que pueda haber hecho que el nombre de arriba).

  • Instalación de VirtualBox en su máquina Windows (seguir el enlace)
  • Descargar e instalar CentOS (versión actual 5.3) dentro de una máquina virtual creada

No tiene sentido que me va a este es probable que haya 1,000 's de gran tutoriales por ahí (bueno, aquí va una: Creación y Managing máquina virtual con VirtualBox CentOS ). El punto importante a señalar es que supongo que llamé a mi máquina virtual GridMachine.

En cuanto a mis elecciones de los clientes de virtualización y sistema operativo van no hay ninguna razón convincente grande para cada elección. VirtualBox es algo que yo uso en mi máquina de casa y con el apoyo de los tres principales sistemas operativos. Elegí CentOS como un sistema operativo estable es buena y yo lo uso en mi propio servidor web. Yo soy un gran creyente en las herramientas adecuadas para el trabajo (aunque estoy aplicando "el uso más rápido y más fácil para usted" mentalidad de aquí), así que si el sistema operativo X se ejecuta el código más rápido y más eficiente uso que en su lugar:)

Importante asegurarse de que su máquina virtual utiliza DHCP, de lo contrario para cada máquina virtual nuevo tendrá que ser configurado por separado que es algo que no want.By mediante DHCP que no es necesario configurar los ajustes de red de forma individual para las máquinas de los trabajadores, DHCP mano IPs para usted. Por lo tanto, puede copiar la máquina virtual de la oficina sin tener que preocuparse sobre la configuración de cada uno de ellos hacia arriba (esto mejora la escalabilidad y reduce la administración de los trabajadores).

El proceso que se debe aspirar a alcanzar sería la de obtener una máquina física nueva, instalación de VirtualBox, y luego casi implementar la imagen virtual sin necesidad de mucho más. Podría ser conveniente para la configuración de todos sus trabajadores en una subred diferente para que pueda al menos ver cuántas máquinas están en funcionamiento. También tendrá que configurar su máquina en un contrato de arrendamiento a largo o ilimitado concesión DHCP.

Cómo ejecutar trabajos en el trabajador

Esta es un área interesante y hay varios métodos válidos para el procesamiento de puestos de trabajo del trabajador. Aquí sólo voy a hablar de los dos más obvios:

  • Perpetuamente ejecutar el script: Un script, ya sea un script de shell o un script PHP se ejecuta una vez en el trabajador y se ejecuta como parte de un bucle infinito. He descontado este método como un accidente de la escritura y, potencialmente, a sus trabajadores dejarán de funcionar sin algún tipo de intervención.
  • Ejecución de cron script basado en: cada X minutos el demonio cron se inicia una llamada al script para que funcione. Sin algunas comprobaciones que esto podría dar lugar a muchas muchas copias de sus ejecutar secuencias de comandos de los trabajadores.

Mi decisión fue ir con cron que comienza un script de shell cada minutes. 10 Mi script realiza las siguientes tareas:

  1. Obtener una lista de procesos y grep para este 'php'. Si no lo encuentra y luego continúe.
  2. Llame a su código de trabajo, en mi caso esto sería algo basado en PHP
  3. Script trabajador finaliza su recorrido
  4. Listo para ir de nuevo en la convocatoria correspondiente al lado

Mi script bash se ve algo como lo siguiente:

  #! / Bin / sh
 si ps ax | grep-v grep | grep php> / dev / null
 entonces
     echo "Job está procesando, la salida"
 más
     echo "El trabajo no se ejecuta, comienza ahora"
     php yourJobProcessingScript.php
 fi 

Nota: se hacen eco de las casi completamente inútil, pero puede ayudar a la próxima persona que venga a tratar de modificarlos.

Con esto concluye la puesta en marcha de la máquina virtual de trabajo, rápido, sencillo y fácil de copia a cada nueva pieza de hardware que se recibe. La "inteligencia" del sistema de redes realmente no es visualizado en el sistema operativo, es todo que ver con el código creado para procesar los trabajos, la configuración del trabajo, y en asegurarse de que el trabajo se ejecuta en su caso (es decir, cuando el anfitrión está inactivo ).

La configuración de Windows para inicializar los trabajadores

La primera tarea es trabajar en el comando necesario para ejecutar la máquina virtual desde la línea de comandos de Windows. Si has instalado VirtualBox en la ubicación predeterminada y que ha llamado a su trabajador GridMachine el comando para cargar a su trabajador es:

  "C: \ Archivos de programa \ Sun \ VirtualBox \ VBoxManage.exe" startvm GridMachine 

Sin embargo, para ejecutar el script en un 'cabeza' del Estado tenemos que usar:

  "C: \ Archivos de programa \ Sun \ VirtualBox \ VBoxHeadless.exe"-startvm GridMachine - vrdp = off 

Esto iniciará la máquina virtual sin la interfaz gráfica de usuario y le permiten guardar el estado de gracia. El segundo argumento se apaga RDP por lo que no entra en conflicto con Windows RDP, o le dará un mensaje de escuchar en el puerto 3389. El nombre de la máquina virtual entre mayúsculas y minúsculas!

A continuación, tendrá que configurar las ventanas cerradas para dar inicio a nuestra VM de los trabajadores una vez que la máquina ha estado inactiva. Para hacer esto (en Windows XP) tendrá que ir Inicio -> Todos los programas -> Accesorios -> Herramientas del sistema -> Tareas programadas de la siguiente manera:

las tareas programadas

Luego haga clic en "Agregar tarea programada" seguido por vaya a agregar un programa a medida. Vaya a su script VBoxManage y haga clic en Aceptar. Programar su tarea para cualquiera de las opciones (vamos a cambiar esto en un minuto) y continuar. Después de saltar la siguiente pantalla, Windows le pedirá que se desea ejecutar esta tarea, te sugiero que sea "Administrador" o crear un nuevo usuario privilegiado. Recuerde que no queremos interferir en la cuenta personal de serie en la máquina en cualquier momento. Haga clic en Siguiente y seleccione Mostrar opciones avanzadas para esta tarea.

Para el final de la caja de texto ejecutar añadir nuestro "startvm GridMachine 'cadena y asegurar que sólo se ejecutan cuando se conecte se queda sin marcar. Visita la tarea de programación que viene y cambiar el calendario de bajar a la opción 'cuando está en reposo ", elija la cantidad de tiempo que le gustaría que la máquina se espera antes de pasar a la siguiente ficha.

Por último, desmarca la opción que establece detener la tarea si se ha estado ejecutando X cantidad de tiempo, pero no marca la opción para detener la tarea si la máquina ya no es ociosa.

horario

Que es continuación de la configuración del host de Windows!

Resumen

En esta parte hemos puesto en marcha una máquina virtual para que actúe como un trabajador, así como la forma en que nos llame y ejecutar scripts de procesamiento de los trabajos (para mí un script PHP). A partir de aquí vamos a ver cómo crear nuestras copias de Windows para poner en marcha la máquina virtual en el modo de cabeza cuando el ordenador esté inactivo, y guardar su estado cuando el usuario reanude el uso de la máquina. Esperemos que en este momento estás viendo lo fácil que es crear un sistema y están ansiosos por conseguir algunos experimentos se va!

La próxima vez

En la Parte 4 vamos a estar buscando en el uso de herramientas para asegurar que se está 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.

Oficina de Grid Computing utilizando entornos virtuales - Parte 1

Por Steven Lloyd Watkin , 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 viejo Windows XP portátil)
  • 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 Steven Lloyd Watkin , 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). The code running on the workers will actually work out what jobs it can run by interacting with with job control system databases. Later on we could create a web service and actually hand out jobs rather than having the workers do the hard work themselves, but for now we'll continue using the KISS principle (Keep it Simple, Stupid!).

So, lets create three mySQL tables to deal with jobs. These will be `jobs`, `jobRecords`, and `jobResults`.

jobs table Here I'm using SQL Buddy a great little alternative to phpMyAdmin just because its easier to install on centOS (for others see: 10 Great alternatives to phpMyAdmin )

This table consists of 5 simple fields,

  • id: Uniquely identify the job
  • name: Could be a client reference, or any number of other identifiers
  • Status: You need to know where the job is at, eg
    • 0: Not started
    • 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. In more complex job scenarios it would be possible to specify how much memory the worker would need access to (and therefore only use suitable workers), or even what type of worker would be required.

Lets add a few example jobs:

example jobs

The next table again is quite simple to understand, these are our job records. They are linked to the main jobs table by a column `jobs_id`. The make up of this table very much depends on the data that you need to supply to your workers, lets make a very simple example where we have four columns:

  • id: ID of the record
  • name: Person's name
  • address: Person's address
  • jobs_id: The job ID that this record is linked to

The third and final table consists of a results table, it has much the same make up as our records table, and with the addition of some columns could be part of the records table:

  • job_record_id: Link the result to the job table
  • result: The result data

…and that's all you need for job control! (albeit at a very basic level) In my case I'm pointed to another table where my data to process was located, but this could just as easily been a file, parameters to run simulation code, you name it.

Selecting a job

As stated previously, the workers will do our job management for us for now, so all we need to really do is find a job that needs processing and get the information. How would we do this? Well pick our job selection criteria and look for jobs, in SQL I did the following:

  1. Take any jobs that are not marked as complete but from our worker and reset them (substitute __ME__ with an identifier, easiest would be IP address):
     UPDATE `jobs` SET `status` = 0 WHERE `status` = 1 AND `started_by` = __ME__; 
  2. Using our job selection criteria, select a job and tell the control system that this worker is dealing with it:
     UPDATE `jobs` SET `status` = 1, `started_by` = __ME__, `started_at` = NOW() WHERE `status` = 0 OR
    (`status` = 1 AND `started_at` > DATE_SUB(NOW(), INTERVAL X HOUR)) ORDER BY `id` ASC; 

    By grabbing jobs that haven't returned results in X amount of time we ensure that all jobs are run in the event of a worker crashing or going AWOL.

  3. Next grab the jobs details followed by the records themselves:
     SELECT * FROM `jobs` WHERE `started_by` = __ME__ LIMIT 1;
    SELECT * FROM `job_records` WHERE `id` = __JOBID__; 

Upon completion of the job we insert our result records and mark the job as complete. Remember as jobs can suspend/resume at any time allow for some robustness in your script. It might be that the task suspends half way through updating the job control system, so checking the number of records in a job and the number of results saved back to the job control system would be a wise move.

In addition, whilst this demonstrates how jobs can be selected and managed from an SQL-query frame you should really be abstracting your job control so that if you decide to switch to using a web service, a file based system, XML , or any other number of systems it will not affect the code above it.

Job Configuration

The next aspect to consider is job size and configuration. By playing with job configuration we can strike an excellent balance between speed, process replication, and reliability. Take a couple of scenarios:

  1. Jobs take 1 day each to run: This means that your workers need 15 days to process each job (remember 10% of the power for 2/3rds of the time). This is clearly not a wise configuration, your job size is way too big! It would take at least double the time to get a job processed should the initial worker go AWOL (time to pick up that it hasn't returned a result plus reprocessing time). In an ideal you'd have at least one full job easily cleared by the end of each long idle period, that way you keep the jobs ticking over and at worst case a job would take two days to process should the first go missing.
  2. Jobs take 1 minute to run: This means that your workers take about 15 minutes to run each job. Whilst this may initially seem ideal, you gain additional work processing during lunch time, coffee breaks, meetings, etc this scenario puts strain on other areas of your system and introduces its own problems. For example, firstly your setup/processing time ratio is going to go right down, therefore losing system efficiency. Your network is going to be constantly streaming job information to the various workers frustrating staff who are dong their day to day work. You're also going to put more strain on your job processing server as it has to dish out lots and lots of small pieces of work on a regular basis. Lastly, in this situation if your job server goes down you're going to create a huge back log of uncompleted work whereas bigger jobs could of continued processing blissfully unaware that the job server was experiencing difficulties.

In reality there will be no one ideal configuration for your grid setup, much depends on the available resources, types of job, job turnaround time requirements, network capability, and so on. However some guidelines would be:

  • Size jobs so that each worker can get through at least 3-4 jobs in a period of 15 hours (the longest likely idle time period)
  • Play with the job size so that setup time becomes fairly insignificant compared to the processing time (bearing in mind the above point).
  • If a job doesn't complete in double the amount of time (maybe less) you expect it to complete it assume that its gone AWOL and start processing it with another worker. This means you may have to wait up to three times the normal length of a job for it to complete (possibly longer if the subsequent job fails). You may want to reduce this time, but be careful not to reduce it too much as you may start duplicating processing tasks on a regular basis.
  • Jobs should be independent of outside requirements as much as possible. The job server, for example, should only be contacted at the start and end of every job.
  • Don't saturate your network, this will have two negative effects, your daytime staff will find using the network frustrating and problems may be experienced with connections timing out a problem that will only get worse as you scale your grid.
  • Ensure jobs can run on your workers. If jobs become too memory intensive or disk space intensive jobs will start aborting and the only thing you'll notice is a drop in number of jobs processed with no real reason why.

Submitting Results of a Job

When submitting the results of a job it is important to check that results have not been submitted by another worker, especially if the current worker has been dormant for some time.

When results are submitted ensure that the number of results matches the number of records within the job.

As stated previously, and can not be over emphasised, build fault tolerance into job retrieval and results submission. The workers can (and most likely will) go into suspend mode at the most inconvenient of times and this needs to be catered for. Also once again abstracting away your results submission will help cater for future changes to your job control system much easier to deal with.

Resumen

In this section we have looked at what a job control server needs to do and how to get a very basic system set up. We discussed how to retrieve a job from the control system and how best to configure jobs to get the most our of your office grid system. To finish, a paragraph or two on submitting results back to the job control server was presented.

  • A job control server manages jobs and ensures that all work units are completed
  • By abstracting your job select/results submission we can change the technology of the control server without much problems
  • Configure your jobs to ensure that they are run quickly and efficiently without putting too much pressure on your network infrastructure, and without duplicating processing tasks on a regular basis.
  • Ensure that you build fault tolerance and error checking into your routines, workers can suspend and resume and the most inconvenient of times. Remember to check if results have already been submitted by another worker.

La próxima vez

In part 3 we'll create our virtual processing machine and set up our windows machines to become idle-time workers.

Office Grid Computing using Virtual environments – Part 5

By Steven Lloyd Watkin , Friday 4th December 2009 11:03 pm

Introducción

I work in a company where we run many batch jobs processing millions of records of data each day and I've been thinking recently about all the machines that sit around each and every day doing nothing for several hours. Wouldn't it be good if we could use those machines to bolster the processing power of our systems? In this set of articles I'm going to look at the potential benefits of employing an office grid using virtualised environments.

In Part 4 we looked at using tools to ensure that we're running the latest version of the code and data sources so that obtained results are always up-to-date with the latest business information and logic.

Pre-Deployment

Before deploying your grid system if there's one thing you do and one thing alone it's benchmark your current system ! No matter what you tell colleagues about how much extra work your system is going to do unless you have numbers to back this up your guarantees are nothing. Por lo tanto,

  • how many records can you process currently? Per Day? Per Hour?
  • How long does it typically take to turn around a job?
  • How much more capacity do you have?

There's also additional questions:

  • If your processing server (or one of your processing servers) goes down how will this affect your capabilities, will you be crippled?
  • What advantages do you hope/expect to get from a grid system?
  • Are your office machines capable of running the jobs?
  • Are your (or can you jobs be converted) to wrok in this style of running?

The last major point is to take your time on any major change like this. Update your processing code to work using the new methodology, benchmark again. Possibly set up your processing server to run a virtual machine, after all your processing server will just be another worker (just a very powerful one relatively). Allow the new process to settle.

Despliegue

My suggestion would be to pop into the office one weekend perform all the installations and setup. Do this just before a fortnight's holiday and leave so other poor chap to deal with the consequences… maybe not…

Deployment for a system like this needs to be slow. Despite it being relatively simple to set up this system will affect your entire office infrastructure (well the digital one). Firstly, roll out to a couple of machines at a time, monitor network traffic, how the worker hosts perform on a day-to-day basis. You may need to alter your job configuration in response to your findings.

Once the system has settled with a few machines (lets say 10% of all office machines, ie 5) keep monitoring network traffic and host machine performance. Next benchmark again, you should now be processing 33% more jobs than your first benchmarks. Check this is so, or that you're at least in this ballpark. If not, investigate what is going on before moving on. Repeat this cycle until you happily have all office machines running without killing individual machine performance or grinding your network to a standstill.

At all times keep benchmarking, even after all deployments are made. Check how new code updates affect speed of your system, check all workers are reporting in and processing jobs. Slowly (very slowly) increment your job configuration to get the best from your workers and network.

¡Alto!

What if you want to stop your workers from running at some time? They are all out there running, regenerating, and trying their best to process data like hungry insects. The answer may seem obvious but its worth adding just in case its overlooked. Simply edit your processing script with an exit(0) or die() or some other statement to kill your processing job. An important reason why we always try to update to the latest processing script before any run!

Demonstration System

In order to write this set of short articles I created a very small grid to demonstrate the technologies and methodologies. I read lots of articles, tutorials, and used various tools to setup and monitor what was going on. By no means have I gone out and saturated a whole office with traffic and nor have I had access to a regular staff members PC to see how host performance was affected.

My demonstration system was very humble indeed. I used my regular desktop set up as a job control server. On this I had installed mySQL server installed set up as a master in replication, PHP , and SVN linked through apache (for access via worker VM).

I then created a centOS worker machine on VirtualBox on a 6 year old windows XP laptop. I setup scheduled tasks as specified after copying the VM onto the machine and let it go.

The virtual machine was set up with PHP, subversion, and mySQL. I checked out a branch named 'worker' from my job control servers repository and made sure it could be updated using 'svn update'. Next I setup mySQL as a slave and checked that data was replicating from mySQL on the job control server down to the worker VM. After all this I setup the bash script and the cron job.

My processing script basically went along the lines of this (very simple stuff):

  • Read in the name field
  • Counted the number of similar names in a table from the data source held on the VM
  • Counted the number of names as above but splitting the name by spaces (ie forename, middle, surname)
  • Repeated this process 1,000 times

Each job took approximately 20 minutes to run. At one point I opened several copies of the worker VM on the windows laptop and watched the jobs be checked off by each of the worker IP addresses. At this point I also confirmed that replication automatically restarted.

Leaving the laptop to idle resulted in a worker starting to process jobs from the job control server. When resuming laptop usage there was a delay of about 30-60 seconds, this is a fair amount of time and staff would need to be made aware that their machine may pause for a short while when returning to the machine. Newer machines may not have a pause of this long. The benefit of the amount of processing performed by these machines during idle periods would more that outweigh staff members having to wait a short period (say 1 minute) on arriving at their machines of a morning (I frequently wait longer that this for a Windows Defender update to take place) provided they were made aware of this (useful time to grab a morning coffee!).

Overall I feel confident that I have demonstrated the technologies that could be used to create such a system. I have shown that such a system does work on a (very) small scale and with some more experimenting could be scaled up utilise the resources of an office's machines. If I don't get to the point of doing this I would be very interested to know/see when someone else does.

Conclusions / Evaluation

The next obvious step would be to actually get a real world example and start to deploy a system such as this within an office environment and see what happens. Asking a business to commit to this without a trail blazing company to prove the technology and effectiveness may be a little difficult. Grid/Distributed computing is very popular is some circles and has some large applications (BIONC, SETI@Home, Folding@Home, etc). I did not, however, find a smaller scale and simple system like this in my searches that could be rolled out within an office environment.

I created a basically free system using mostly open source software and tools available in almost any office. The technologies were basically demonstrated and show to perform and work as expected. Hopefully I have show that with not much work and with a very simple setup you can deploy an office grid computing system that is powerful, cheap, and scalable all at the same time.

Once a system is up and running there is almost no end to the amount of customisation and improvements you can make. For example statistics / benchmarking can easily be added showing the worth of such a system every day. New machines can be added quickly and easily as and when they arrive with upgrades to existing hardware bolstering your processing power.

I hope you've enjoyed reading this series of articles and its given you food for thought on running an office grid system. The solution presented here won't necessarily work in all situations but should be adaptable to allow you to get your data processing done using your own solution.

Please feel free to send me any comments, corrections, or improvements and I'll do my best to keep this article updated to match.













Panorama Tema por Themocracy

4 visitantes en línea ahora
2 guests, 2 bots, 0 members
Max visitantes de hoy: 12 a 06:16 am UTC
This month: 22 at 08-06-2011 12:30 am UTC
Este año: 130 en 28-03-2011 22:40 UTC
En total: 130 en 28-03-2011 22:40 UTC