¿Cuáles son algunas historias de éxito del uso de la recolección automática de basura en sistemas a gran escala?

Dima: en tu pregunta, dices:

En mi experiencia, todos los grandes productos de software desarrollados utilizando lenguajes con recolección automática de basura son difíciles de ejecutar y soportar.

A gran escala, hablemos de un mínimo de diez millones de líneas de código, un equipo de más de 100 desarrolladores, una duración acumulativa del proyecto de no menos de 30 meses y que se ejecute (es decir, requiere para la producción) al menos 100 servidores . Por lo tanto, no hay proyectos “simples” de una o dos personas que se ejecutan en una gran cantidad de servidores, no hay aplicaciones gigantes del ejército de programadores que se ejecutan en un solo proceso en una sola máquina, etc., pero a gran escala real proyectos

Uno de los avances en las últimas décadas que ha simplificado drásticamente el desarrollo y las operaciones de los sistemas a gran escala es la recolección automática de basura. La recolección automática de basura es una de las principales razones por las cuales podemos construir sistemas a gran escala. Antes de los lenguajes modernos con recolección automática de basura, los sistemas a gran escala eran increíblemente difíciles y costosos de construir, eran extremadamente frágiles y estructuralmente resistentes al cambio, y un gran porcentaje de los sistemas a gran escala que las empresas intentaban construir simplemente no funcionaban . (Fui testigo de algunos de primera mano. Estos fueron proyectos que terminaron matando o casi matando a las compañías que apostaron por ellos).

Entonces, su pregunta se basa en una combinación de sesgo de sobreviviente y la siguiente falacia lógica: Usted asume que la recolección de basura es la causa del “dolor de correr y apoyar”, pero ¿en comparación con qué ? ¿El dolor de cerrar el negocio? ¿El dolor de nunca terminar un proyecto? ¿El dolor de que el sistema se bloquee regularmente?

Lo entiendo. Te gusta la brutal simplicidad de la memoria no administrada automáticamente. ¿No es divertido preparar algo solo o con un compañero de programación durante un fin de semana? Pero ese no es un “sistema a gran escala”. Lo que no se está dando cuenta es que muy pocos sistemas a gran escala (según los estándares actuales) se construyeron con éxito con esas tecnologías. Para construir sistemas a gran escala, esas tecnologías primitivas apestaron en aquel entonces, y todavía apestan hoy.

He trabajado con varios proyectos muy exitosos que operaron sistemas a gran escala construidos sin recolección automática de basura. Entonces, sí, es posible construirlos, pero también sé que juzgar las decisiones tecnológicas a partir de estos éxitos raros (por ejemplo, Paypal core, NYSE core) depende inherentemente del sesgo de supervivencia, y en todos los casos que conozco (incluidas las bolsas de valores, procesamiento central de pagos, banca, control de tráfico aéreo, etc.), estos sistemas a gran escala ya están muy aumentados con aplicaciones creadas utilizando la recolección automática de basura, y muchos de los sistemas sobrevivientes a gran escala construidos sin recolección automática de basura ya están en proceso de ser reemplazado por completo con sistemas construidos usando recolección de basura automática.

De hecho, se ha dicho que la recolección automática de basura es la peor forma de administración de memoria, excepto por todas las otras formas que se han probado de vez en cuando …
– Winston Churchill (más algunas de mis propias libertades con su redacción)

Supongo que este es el punto que estoy tratando de transmitir: el dolor de administrar la “recolección automática de basura” para un sistema a gran escala puede ser el mayor dolor que enfrenta, pero si está lidiando con ese dolor, entonces usted ‘ eres afortunado, porque significa que has esquivado la mayoría, si no todos, los dolores más grandes. En el esquema de las cosas, es un dolor bastante pequeño.

Por otro lado, si no me crees, siempre puedes ir y reconstruir Facebook usando C ++ …

Desarrollé sistemas a gran escala para muchas industrias, incluyendo comercio, seguros y computación científica. He utilizado la recolección de basura en todo momento y nunca tuve un solo problema grave en un sistema de producción causado por él. Una vez encontré un error en .NET GC que causaba un comportamiento de latencia patológica en ciertas circunstancias poco realistas que informé y Microsoft solucionó.

Algunas personas han culpado a la recolección de basura por problemas en algunas ocasiones, pero solo la estaban usando como chivo expiatorio.

Puede consultar el lenguaje de programación Erlang en el conmutador AXD301 de Ericsson, que se escribió usando erlang y contenía más de un millón de líneas de código y logra una confiabilidad del 99.9999999%.

Puede encontrar la charla de origen escrita por Armstrong (el creador de Erlang) en la página en mit.edu

No es cuestión de grande o pequeño. Incluso si el proyecto es pequeño y tiene dependencias circulares, la gestión de la memoria siempre será un problema. Además, las referencias parásitas en vivo evitarán que el recolector de basura libere la memoria. Esto será evidente por la mayor utilización de la memoria durante un período de tiempo y luego estabilizándose a un valor alto.

Ciertamente, la recolección automática de basura no conduce a una gestión eficiente de la memoria. Un sistema jerárquico bien diseñado lo hará. La recolección de basura automática es una conveniencia y no una panacea.

En mi último trabajo (lugar de intercambio de opciones), la recolección de basura era un problema. Lo tratamos haciendo perfiles implacables y trabajando para comprender los aspectos internos de la recolección de basura.

Lo consideraría una historia de éxito.

Otras compañías probablemente usan C ++ en lugares donde mi compañía usaba Java. Cuando se gastaba tanto ancho de banda mental pensando en lo que hacían los objetos financieros, valía la pena no preocuparse tanto por la limpieza manual.

Java

More Interesting

¿Es una mala idea adquirir habilidades de desarrollo de pila completa al tratar principalmente de ser un ingeniero de software calificado?

¿Alguien ha asistido a Geekschool, ese programa que opera en Bangalore?

¿Cómo funcionan las revisiones de código?

¿Cuál es tu libro tecnológico favorito y por qué?

¿Dónde trabajan los desarrolladores de software débiles?

¿Cuáles son los conceptos erróneos más grandes acerca de ser / convertirse en programador?

Si pudiera volver a implementar la World Wide Web desde cero, incluidas todas las tecnologías y protocolos relevantes, ¿qué haría de manera diferente?

¿Cuáles son ejemplos de experiencias o conocimientos de probadores para probar un software?

¿Cuáles son los mejores cursos en línea de programación orientada a objetos y patrones de diseño?

¿Qué es un ingeniero de sistemas? ¿A qué se dedica?

¿Hay algún rol de control de calidad que no implique escribir casos de prueba?

¿Cuáles son los pros y los contras de la implementación continua de software empresarial?

¿Cómo se esfuerza un programador competitivo para desarrollar un software tan centrado como la programación competitiva?

¿Cuántos años transcurren hasta que la IA y el aprendizaje automático comienzan a reducir los trabajos de desarrollo de software?

¿Por qué es tan difícil aprender el desarrollo web? Me encanta Java / C ++ / Obj-C, pero JavaScript y los múltiples frameworks / bibliotecas como Backbone, jQuery, etc., me están volviendo loco.