language-agnostic distributed

language agnostic - ¿De qué herramientas carecen los programadores distribuidos?



language-agnostic distributed (10)

Tengo un sueño para mejorar el mundo de la programación distribuida :)

En particular, siento una falta de herramientas necesarias para depurar, monitorear, entender y visualizar el comportamiento de los sistemas distribuidos (diablos, tuve que escribir mi propio registrador y visualizadores para satisfacer mis requisitos), y estoy escribiendo un par De tales herramientas en mi tiempo libre.

Comunidad, ¿qué herramientas te faltan a este respecto? Describa uno por respuesta, con una idea aproximada de lo que se supone que debe hacer la herramienta. Otros pueden señalar la existencia de tales herramientas, o alguien podría inspirarse y escribirlas.



Creo que esta es una gran pregunta y aquí está mi 0.02 en una herramienta que me parece realmente útil. Uno de los desafíos que encuentro con la programación distribuida es el despliegue de código en múltiples máquinas. Muy a menudo estas máquinas pueden tener configuraciones ligeramente diferentes o, peor aún, configuraciones de aplicación diferentes.

La herramienta que tengo en mente sería una que, según la demanda, pueda llegar a todas las máquinas en las que se implementa la aplicación y proporcionar información del sistema. Si uno especifica un archivo de configuración o un recurso como un registro, proporcionaría la lista para todas las máquinas. También podría ver los privilegios de acceso de usuario para los usuarios que ejecutan la aplicación.

Un refinamiento sería proporcionar indicaciones cuando las configuraciones no coincidan con una lista maestra provista por el desarrollador. También podría indicar los servidores que tienen configuraciones diferentes y proporcionan una funcionalidad diferente.

Esto sería realmente útil para las aplicaciones .NET, ya que hay tantas configuraciones (machine.config, application.config, IIS Settings, permisos de usuario, etc.) que las posibilidades de diferentes configuraciones son altas.


En mi opinión, lo que falta es una plataforma de programación distribuida ... una plataforma que hace que la programación de aplicaciones sobre sistemas distribuidos sea tan transparente como lo es ahora la programación no distribuida.



Estimado Santa, me gustaría visualizar las interacciones entre los componentes en el sistema distribuido.

Me gustaría una representación visual que muestre:

  • Las interacciones entre componentes, ya sea como un diagrama de colaboración UML o un diagrama de secuencia.
  • Cierre de componentes y tiempos de arranque como auto-interacciones.
  • En qué componentes de hosts se están ejecutando actualmente.
  • Ubicación de esos anfitriones, si están disponibles, dentro de un edificio o geográficamente.
  • Apagado de host y tiempos de arranque.

Me gustaría poder:

  • Filtre los componentes y / o interacciones mostradas para mostrar solo aquellos de interés.
  • Registro de interacciones.
  • Muestra el intervalo de tiempo deseado en un diagrama estático.
  • Reproduzca las interacciones en una animación, con controles de video típicos para reproducir, pausar, rebobinar, adelantar.

He sido un buen desarrollador todo el año y me gustaría mucho.


Ok déjame empezar

Un registrador distribuido con un eje de tiempo global de alta precisión , que permite registrar eventos de diferentes máquinas en un sistema distribuido con alta precisión e independiente en el desplazamiento y la deriva del reloj; con escalabilidad suficiente para manejar la carga de varios cientos de máquinas y varios miles de procesos de registro. Un registrador de este tipo permite encontrar cuellos de botella en la latencia del nivel de transporte en un sistema distribuido al ver, por ejemplo, cuántos milisegundos se necesitan para que un mensaje pase del editor al suscriptor a través de una cola de mensajes, etc.

Syslog no está bien porque no es lo suficientemente escalable: 50000 eventos de registro por segundo serán demasiado para ello, y la precisión de la marca de tiempo sufrirá mucho bajo dicha carga.

Scribe de Facebook no está bien porque no proporciona un eje de tiempo global.

En realidad, tanto syslog como scribe registran eventos con marcas de tiempo de llegada, no con marcas de tiempo de ocurrencia.

Honestamente, no me falta una herramienta de este tipo, me he escrito una para mí, estoy muy satisfecho con ella y la voy a utilizar en código abierto. Pero otros pueden.

PD: lo he abierto: http://code.google.com/p/greg


Permítame notificar a aquellos que han favorecido esta pregunta apuntando al registrador Greg - http://code.google.com/p/greg . Es el registrador distribuido con un eje de tiempo global de alta precisión del que he hablado en la otra respuesta en este hilo.


Puede echar un vistazo a algunas de las herramientas que vienen con erlang / OTP. No tiene todas las características que otras personas sugirieron, pero algunas de ellas son muy prácticas y están diseñadas con mucha experiencia. Algunos de estos son, por ejemplo:

  • Depurador que puede depurar procesos concurrentes, también de forma remota, AFAIR
  • Herramientas de introspección para tablas de mnesia / ets, así como pilas de procesos
  • Seguimiento de mensajes
  • Monitorización de carga en nodos locales y remotos.
  • Sistema distribuido de registro e informe de errores.
  • Perfilador que funciona para escenarios distribuidos.
  • Gestor de procesos / tareas / aplicaciones para sistemas distribuidos.

Por supuesto, estos vienen además de las características básicas que proporciona la plataforma, como el descubrimiento de nodos, el protocolo IPC, los protocolos y servicios RPC, la distribución transparente, el almacenamiento de base de datos integrado distribuido, el registro global y local de nodos para los nombres de procesos y todos los demás elementos subyacentes. Cosas que hacen que la plataforma sea tic.



¿No es un poco pronto para trabajar en Herramientas cuando ni siquiera estamos de acuerdo en una plataforma? Tenemos varios tipos de modelos de actor, memoria compartida virtual, UMA, NUMA, flujo de datos síncrono, flujo de datos de token etiquetado, procesadores de vectores de memoria multi-jerárquica, clústeres, malla de paso de mensajes o red en un chip, PGAS, DGAS, etc.

Siéntase libre de agregar más.

Para contribuir: me encuentro escribiendo muchos programas distribuidos al construir un DAG, que se transforma en un código específico de la plataforma. Cada optimización de plataforma es un tipo diferente de reglas de transformación en este DAG. Puede ver lo mismo en el acelerador de Microsoft y en la dríada, las colecciones concurrentes de Intel, el StreaMIT de MIT, etc. Una biblioteca sin lenguaje que recopila todas estas transformaciones de DAG ahorraría reinventar la rueda cada vez.