2010-04-11 16 views
7

Queremos reescribir el backend de kodingen.com con Go que actualmente es Java, ejecutándose como daemon usando jsvc.Portando la aplicación Java para ir, ¿algún consejo?

Nunca he tocado ninguna C en mi vida, solo tengo experiencia en Java, así que no sé si esto es algo que incluso debería comenzar.

Sin embargo, la tarea es bastante simple

  • comandos shell de lectura desde la base de datos MySQL
  • cola y ejecutarlas en paralelo
  • guardar cada salida de la shell a la base de datos

eso es todo. Así que estos requisitos simples me dan esperanza de que puedo comenzar usando este maravilloso lenguaje.

¿Qué aconsejarías? ¿C es aún mejor?

+3

¿Oye, ustedes son los tipos que escuché lanzando en TWIST? De todos modos, solo curiosidad: ¿qué pasa con Java? ¿Y por qué ir? Sólo curioso. – cletus

+1

Sí, soy el que recibió una paliza :) Pero llegamos a OAF en top 5 en Nueva York justo después de eso, Jason y Tyler fueron amables. De todos modos, la razón es que JVM come 1,2 GB de ram, lo que de otro modo sería 100k C daemon. Hay muchas otras razones, como el colapso aleatorio debido a los recursos comunes de Apache, etc. Si tiene una solución alternativa, por favor comparta aquí o puede enviarme un correo electrónico también. – Devrim

+2

Además, ¿por qué ir y no C? Porque, viendo la charla técnica de Go, Rob Pike cubrió todas las razones por las que nunca había tocado C y dijo que las había eliminado. y agregó todas las cosas que deseaba que estuvieran allí en un lenguaje de sistema, dijo que las añadió. – Devrim

Respuesta

3

Me gusta Ir mucho y he hecho contribuciones al proyecto. Sin embargo, creo que deberías considerar algunas cosas sobre Go antes de decidirte por él.

  • Go sigue siendo un lenguaje inestable. Su sintaxis, características y paquetes están sujetos a cambios. Asegúrate de estar listo para continuar con esto si decides usarlo.
  • La recolección de basura de Go aún está inmadura. Su uso de memoria debería ser mejor que 1.2 GB, pero probablemente no lo acercará a los niveles de C.
  • No hay soporte básico para MySQL (o cualquier otra base de datos). Hay varios proyectos de paquetes MySQL no oficiales. Los más actualizados son GoMySQL y Go-MySQL-Client-Library. No sé nada sobre cuán completos o estables son.

En cuanto a la cola y la ejecución en paralelo, creo que es algo que Go podrá hacer bastante bien. Probablemente usará el paquete exec para ejecutar y paralelizar con goroutines.

1

Estoy de acuerdo con @Chickencha

En este momento no tienen planes para actualizar mi [1]: http://github.com/chbfiv/libmysqlgo proyecto "libmysqlgo". Las contribuciones son bienvenidas, pero estoy demasiado ocupado atm. Yo recomendaría usar proyectos más activos de mysql go.

1

Desde el FAQ ir langugage:

El proyecto Go fue concebido para hacer más fácil escribir el tipo de servidores y otro software Google utiliza internamente, pero la implementación no es bastante maduro suficiente aún para uso de producción a gran escala.

Como sé, el recolector de basura y el programador de Go aún no están listos. Y su compilador no está optimizado lo suficiente, de todos modos, el compilador C se ha mejorado durante 20 años. Si desea utilizarlo en un sitio de producción, esperar a que Go sea lo suficientemente maduro es mejor.

Pero eso no significa que Go no sea un buen idioma para aprender. En realidad, estoy feliz de usarlo para desarrollar algunas utilidades útiles.

EDITAR: Antes de cambiar a otro idioma, qué hay de hacer algunos experimentos con el próximo JDK 7. Hay algunas mejoras en la recolección de basura. Puede verificar si la gestión de la memoria es mejor en su caso.

+0

Gracias Stephen, JDK7 se ve bien, pero lo que necesitamos es un demonio de Linux no un programa que se ejecuta en un entorno cerrado (jvm) e interfaces con el sistema a través de algunas incógnitas. Para ilustrar mi punto, imagine lo absurdo que sería si apache se escribiera en Java. – Devrim

1

Creo que con la reciente incorporación de panic/recover, Go está comenzando a convertirse en una opción viable para backends de sitios web. He estado ejecutando un par de aplicaciones de Facebook simples usando Go, pero es frustrante tener toda la aplicación inactiva por algo como un error de clave de mapa, o una excepción de puntero nulo. Con pánico/recuperación, será posible administrar bloqueos.

Acerca de sus requisitos: debería estar bien para mysql y comandos de shell. Pero prepárate para parchar algunas bibliotecas :)

Cuestiones relacionadas