Colección de citas famosas - Mensajes de felicitación - ¿Por qué los programadores de Ruby necesitan comprender y dominar Docker?

¿Por qué los programadores de Ruby necesitan comprender y dominar Docker?

La tecnología Docker es muy influyente en la comunidad Ruby, y algunos equipos empresariales que conozco la han estado utilizando durante mucho tiempo para resolver los problemas de gestión ambiental, integración continua e implementación. Sin embargo, algunos estudiantes no se han dado cuenta de esta tecnología, o después de comprenderla piensan que no es muy importante, por lo que quieren discutir cómo Docker ayuda a la tecnología Ruby.

Es posible que algunas personas no sepan mucho sobre la tecnología Docker; consulte este artículo en el foro (/articles/Docker-core-technology-preview). Estibadores y vagabundos

Siempre me ha gustado deambular. Lo usé hace dos o tres años para mantener el entorno de mi proyecto. En ese momento era principalmente para pruebas. Debido a que Vagger estandariza el entorno del sistema operativo, puedo mantener estables fácilmente mi sistema de aplicación y los resultados de las pruebas relacionadas.

Hay otro beneficio de deambular. La comunidad Ruby prefiere Mac, pero los sistemas en línea son básicamente Linux, por lo que las pruebas realizadas en el entorno de desarrollo son cuestionables, especialmente cuando se encuentran algunas gemas que son tan dependientes. En este momento, un entorno que sea exactamente igual al online es particularmente importante.

De hecho, la afirmación anterior no es muy precisa. Wandering también cuenta con varios proveedores. Los escenarios a los que me refiero son básicamente proveedores de virtualbox, por lo que el término correcto para estos lugares es vagrant/virtualbox.

En comparación con Docker, el costo de la combinación Ranger/virtualbox sigue siendo muy alto. Ya sea configurando el entorno o restableciéndolo, llevará un tiempo esperar. Nomad simplemente utiliza DSL para el funcionamiento de virtualbox y el enfoque subyacente no ha cambiado. Docker es inherentemente liviano porque es un proceso. Obviamente, Docker tiene grandes ventajas para las pruebas automatizadas que tardan unos minutos en ejecutarse.

Por supuesto, algunas personas piensan que Docker no puede emular un sistema operativo completo, pero es probable que esto sea una ventaja más que una desventaja. Lo he mencionado en artículos anteriores. ¿Resumamos los puntos clave aquí?

¿Docker simplifica la infraestructura del sistema operativo y reduce las aplicaciones a su forma central? Los procesos con recursos limitados son más propicios para las mejores prácticas arquitectónicas.

Y para los ingenieros de Ruby, ¿qué pasa con esto? ¿Mejores prácticas? ¿Qué es lo indispensable? Microservicios.

Microservicios

Muchos ingenieros de Ruby son ingenieros de Rails. Rails en realidad prefiere una arquitectura única, por lo que los ingenieros de la comunidad posteriores deben resumir las prácticas 1 a 30 en el trabajo real.

De hecho, los microservicios en sí no son un dogma. Incluso si nadie nos enseña, a menudo llevamos a cabo la transformación del servicio de forma espontánea, pero este trabajo no es fácil, principalmente porque está restringido por algunos problemas, como la complejidad de la operación y el mantenimiento, y el costo de las pruebas del sistema aumentará considerablemente.

Para afrontar estas dificultades, por supuesto, lo primero que hay que hacer es ver si es necesario. También podemos usar directamente una arquitectura única para resolver algunos escenarios simples, pero podemos notar fácilmente que en los últimos dos años, la gente ha mencionado cada vez más microservicios o servicios. ¿Hay una tendencia detrás de esto? Varias formas de negocios están avanzando hacia la escala de los usuarios de Internet y, al mismo tiempo, todos están tratando de extraer valor de varias dimensiones de cada usuario (lo que lleva a la necesidad de big data). Estos escenarios son cada vez más comunes y es difícil que una sola arquitectura los admita.

Dado que los microservicios o servicios son inevitables, deben existir las contramedidas correspondientes. Aunque hay muchas personas en la comunidad Ruby que mejoran los microservicios en diferentes puntos (como mejorar el marco asincrónico, explorar protocolos de servicio, etc.), Docker es el arma más importante a nivel de infraestructura, ¡sin excepción!

Para los ingenieros de Ruby, Docker puede hacer dos cosas: limitar los límites y crear servicios básicos comunes.

Límite de servicio restringido

El Docker del proyecto Ruby no es tan simple como cambiar una máquina virtual. Nos enfrentaremos a la presión de la división. Creo que muchas personas se sentirán limitadas al intentar utilizar Dockerfile para describir sus proyectos, pero estos lugares en realidad nos hacen pensar con claridad. ¿Qué intenta hacer exactamente esta aplicación? ¿Qué tiene que ver con el mundo exterior? ¿Cómo responde a los cambios externos? ¿Cómo recuperarse después del fracaso?

Este tipo de problema es muy importante para la arquitectura del sistema. Por ejemplo, ¿qué debería hacer la aplicación? Este es el objetivo de lograr que los ingenieros piensen en los sistemas. Ya sea que se proporcionen servicios web, se administren y programen tareas en segundo plano o se proporcionen análisis en tiempo real, siempre que sea posible debe haber un único objetivo. Sobre esta base, creamos servicios que se pueden probar, ampliar y mantener fácilmente.

Otros problemas son similares. Si no hemos prestado atención a estos lugares antes, es probable que no seamos conscientes de ellos; Usar Docker nos ayuda a reconocer estos problemas.

Además, dado que el proyecto Ruby no puede romper completamente con su dependencia de bibliotecas dinámicas (Java puede hacer la mayor parte de esto), su propio mecanismo de empaquetado no tiene una estructura autónoma (gem+bundle sí No contiene bibliotecas dinámicas, en comparación con Golang que está vinculado estáticamente), y la entrega y distribución de paquetes de software en un entorno distribuido son en realidad inherentemente deficientes. La imagen de Docker simplemente llena este vacío. En pocas palabras, alguien te da una almohada cuando duermes.

Establecer servicios básicos universales

¿Qué sucede cuando dividimos el sistema de aplicaciones en varios servicios y definimos sus límites? ¿Estarán juntos por mucho tiempo? Naturalmente, la transformación del servicio no se trata de que cada uno haga lo suyo, sino de la cooperación entre aplicaciones, en lugar de la operación y el mantenimiento de aplicaciones. ¿Descubrimiento de servicios, escalamiento horizontal, tolerancia a fallas, etc.? Todos requieren soporte de infraestructura.

En el pasado, las empresas e incluso los equipos dentro de la misma empresa tenían diferentes enfoques para este tipo de infraestructura de operación y mantenimiento, pero con Docker y el ecosistema circundante, podemos obtener fácilmente un marco de descubrimiento de servicios común. disfrute de una implementación automática y una expansión flexible.

La mejor noticia es: ¿son universales estos servicios básicos? No sólo no les importa Rails o Sinatra, sino que ni siquiera les importa Ruby.

Esto también es fácil de entender. Docker simplifica las restricciones del proceso. El proceso es la unidad de trabajo del sistema operativo. El concepto de proceso no tiene nada que ver con el lenguaje y el marco.

Esto brinda a los ingenieros y proyectos de Ruby más libertad para elegir las tecnologías adecuadas para expandir la línea de productos de la empresa.

Ampliando el marco técnico

Cuando Ruby apareció por primera vez, muchos ingenieros de la comunidad Java se unieron (yo era uno de ellos). ¿Cuál es el sentimiento más grande para muchas personas? Se abre la visión. ¿Estaba todo en Java como un eslogan? Se ha convertido en un signo de atraso. Todo el mundo se da cuenta de que es prudente utilizar la llave para abrir la puerta y utilizar la tecnología más adecuada para resolver el problema, pero no es prudente simplemente excluir una determinada tecnología o marco lingüístico.

Este principio no es una excepción en el desarrollo de aplicaciones Ruby/RoR, pero muchas personas encontrarán problemas después de usar Ruby durante varios años. De hecho, Ruby es muy adecuado para desarrollar la Web, pero ahora algunos problemas requieren el uso de tecnología XX y nuestro sistema depende en gran medida del entorno Ruby. qué hacemos?

Creo que el problema es. ¿El sistema depende en gran medida del entorno Ruby? De hecho, la infraestructura de I+D, como canalizaciones, pruebas automatizadas, empaquetado e implementación, no debería satisfacer solo una tecnología o lenguaje, sino que debería considerar la versatilidad desde el principio; de lo contrario, ¿solo podemos? Con un martillo en la mano, ¿quién parece un clavo? .

Docker en sí no tiene nada que ver con el idioma. Su única restricción probablemente sea ejecutarse en Linux. Linux es un estándar para los sistemas de servidores de Internet, por lo que no es un gran problema. Por lo tanto, deberíamos establecer una infraestructura de I + D con Docker como núcleo, lo que será una inversión importante en el futuro.

Por supuesto, es peligroso dibujar un pastel para el futuro, pero afortunadamente, el espíritu empresarial en el campo Docker es muy activo y muchos equipos y empresas ya han realizado una gran cantidad de trabajo básico. Para los ingenieros de Ruby y los equipos de inicio de Ruby, en realidad es más conveniente utilizar una infraestructura ya preparada.