¿Por qué debería importarme la informática distribuida?

Aquí. Ve a leer esto, primero.

Sobre la dualidad de las estructuras del sistema operativo: Hugh Lauer, Roger Needham, 1978 (este es un enlace al PDF del documento).

En la edad de piedra, cuando los procesos de VLSI eran de aproximadamente 3 µm, y solo empezábamos a pensar que podríamos, podríamos, llegar a “submicrónicos”, Hugh y Roger lograron demostrar que si tenían un montón de memoria con un montón de CPU conectadas, o una pila completa de CPU independientes con su propia memoria y una forma para que las CPU se comuniquen, para que pueda hacer exactamente las mismas cosas, simplemente usando mecanismos ligeramente diferentes.

En ese momento, para ir “realmente rápido” las computadoras eran monstruos monolíticos, maravillas de llevar la física teórica y la ingeniería eléctrica al límite de lo que era posible. Y eran muy, muy caros. Y lento como el infierno para los estándares modernos. (Vea la supercomputadora Raspberry Pi versus Cray X-MP para una divertida o alucinante, dependiendo de dónde se sentó en la curva “Usé un Cray”).

Entonces, hoy en día, simplemente no es posible avanzar más en la fabricación de CPU individuales más rápidas de las que ya están haciendo Intel, AMD, etc.No existe una salsa secreta mágica que haga una CPU más rápida, un equivalente a un Cray. para los años 2010 y más allá. La única forma de ir más rápido es hacer más cosas al mismo tiempo.

Ya vemos esto en el diseño de chips: mire el Intel® Core ™ i7-4790K. 4 núcleos de CPU, con hyperthreading que le da la apariencia de 8. Chip impresionante. Aproximadamente mil veces más rápido que mi diseño de CPU más rápido.

Ahora, supongamos que tiene un programa que está ejecutando en este tonto. Y tiene que ir 3 veces más rápido … En el pasado, tenía una solución de hardware para eso (ver la respuesta de Stan Hanks a ¿Cuál es el equilibrio entre las CPU microprogramadas y cableadas?). Hoy, la única respuesta es descomponer el problema en tareas que se puedan ejecutar en paralelo.

Ese. Es por eso que debe preocuparse por la informática distribuida. Porque es la única forma de ir más rápido, y la diferencia al hacerlo en un solo chip, y entre múltiples CPU conectadas por una red externa es muy, muy pequeña.

Si, es dificil. Es una de las “fronteras finales”, especialmente si considera tomar programas “regulares” escritos linealmente y convertirlos “automáticamente” en componentes paralelos y convertirlos en recursos del sistema operativo para hacerlos “correr más rápido” (sombras del Rice Vectorizer !).

Pero es donde está la acción, al menos en cuanto a extraer el máximo rendimiento en la computación.

Creo que hay dos observaciones interesantes que hacer sobre la informática distribuida:

  • siempre ha sido un tema relevante, no solo uno nuevo. La pregunta es realmente si tiene un trabajo que no puede ejecutarse lo suficientemente rápido en un solo núcleo. Incluso la computación multiproceso debe considerarse una forma de DC (aunque obviamente una que aprovecha la coherencia de caché de hardware). La razón principal por la que DC no era tan importante hace 40 años es que la escala práctica de DC depende del rendimiento de la red ( principalmente latencia).
  • pero eso lleva a la segunda cosa interesante: que muchas, incluso la mayoría de las cargas de trabajo, tienen una anisotropía natural de esfuerzo, de modo que puede encontrar formas de dividir el trabajo entre subconjuntos que tienen más comunicación interna que intercomunicación. DC se trata principalmente de cómo dividir el trabajo y cómo hacerlo coherente una vez dividido. Pero no se molesta con DC a menos que una sola unidad (núcleo, nodo, etc.) no sea lo suficientemente rápida.

DC es una herramienta, no un paradigma disruptivo nuevo y valiente. ciertamente no tiene que saber cómo implementarlo o los detalles de cómo funciona, así como la mayoría de las personas realmente no entienden cómo funciona su automóvil. Sin embargo, es bueno entender cómo no usar una herramienta; tal vez la clase te ayudaría con eso. El hecho de que la clase tenga un representante no significa que no sea valioso: diablos, tal vez todos esos reputadores son solo débiles que deberían obtener un certificado HTML / CSS en una universidad técnica en su lugar 🙂

además, ¿qué significa “programador general” en estos días?

Como otros han señalado, las computadoras están llegando a límites físicos. La tecnología, la energía y los problemas térmicos son los grandes desafíos para aumentar el rendimiento de un único elemento informático.

El truco es distribuir la carga de trabajo entre múltiples computadoras y recolectar resultados útiles. Algunas cargas de trabajo tienden a distribuirse más fácilmente que otras.

Debe leer la Ley de Amdahl versus la Ley de Gustafson-Barsis, ya que ofrece una buena visión general de nuestra comprensión de los efectos de distribuir diferentes tipos de cargas de trabajo y los beneficios de escalar en un mayor número de computadoras.

Esta es una disciplina no trivial y grandes cantidades de investigación y desarrollo se dedican a resolver este problema de manera elegante, genérica y económica. Estos desafíos están lejos de resolverse, dejando un enorme espacio para la innovación y la mejora que continuará durante muchos años hasta que ocurra algún cambio de paradigma en la informática (¿las computadoras cuánticas se vuelven prácticas? Quizás).

Compruebe el proyecto FAWN (FAWN: A Fast Array of Wimpy Nodes) para algunos estudios interesantes sobre el uso de pequeños procesadores para hacer el trabajo de grandes computadoras individuales para tener una idea de la dificultad de analizar todos los diferentes aspectos que entran en juego en la computación distribuida.

Hasta entonces, la experiencia en informática distribuida continuará siendo una profesión lucrativa para los informáticos, ingenieros, programadores y diseñadores. Si eres uno de estos, definitivamente deberías preocuparte por la informática distribuida.

La computación distribuida permite que las aplicaciones utilicen de manera flexible el poder de cómputo agregado para diversas cargas de trabajo, o para completar una sola tarea distribuida entre muchos trabajadores para realizar esa tarea más rápido.

En el contexto de nubes de hiperescala y aplicaciones construidas sobre ellas, la computación distribuida permite la rápida expansión y contracción de la asignación de recursos requerida para satisfacer la demanda en delta. En este contexto, las aplicaciones pueden compartir recursos para cargas de trabajo diferentes que se ejecutan en cualquier servidor disponible, o para que una aplicación use simultáneamente muchos servidores para un solo propósito.

Se requiere expansión cuando las operaciones de trabajo se acercan a su demanda máxima y son demasiado grandes para que una sola unidad se complete. Las aplicaciones habilitadas para la informática distribuida pueden expandirse rápidamente para utilizar los vastos recursos que proporciona una nube de hiperescala.

La contracción significa que las operaciones de trabajo se han reducido y la demanda de recursos previamente requerida durante la expansión ya no es necesaria y puede reducirse a un tamaño menor a medida que la utilización vuelve a caer en el valle.

El trabajo como se define en este contexto es cualquier operación general que se puede dividir entre muchos trabajadores. Esto incluye una sola operación que requiere una gran parte de la potencia computacional disponible (por ejemplo, compilar un cubo), o muchas operaciones requeridas en un corto período de tiempo (por ejemplo, la prisa por comprar boletos en línea ).

Primero, imagine la vasta potencia de cómputo para manejar la próxima avalancha de datos de señal esperada de dispositivos IoT, teléfonos, aplicaciones, rastreadores de actividad física y todas las transacciones que una aplicación puede requerir y los recursos necesarios para realizar ese trabajo. ¿Quién paga por esos recursos? ¿Cuánto cuestan? ¿Quién puede acceder a esos recursos? La respuesta solía ser una sola organización centrada en sus propios objetivos comerciales.

Sin embargo, los proveedores de la nube que permiten la informática distribuida permiten a los nuevos jugadores obtener acceso a un mercado al eliminar la principal barrera de entrada: el costo . Esto a su vez permite que exista competencia. De hecho, la informática distribuida permite que existan industrias completamente nuevas.

La importancia de habilitar la informática distribuida es que nuestra macroinversión agregada en potencia informática se aprovecha mejor en el mercado para maximizar la utilización de los recursos informáticos y proporcionar flexibilidad al mercado al eliminar los costos previamente inhibidores.

Considere varias plataformas SaaS que aprovechan la capa PaaS de la pila de la nube. La informática distribuida proporciona una asignación elástica de recursos para aplicaciones SaaS que permite a los inquilinos crecer orgánicamente, pero minimiza la utilización de recursos a medida que la plataforma se estabiliza y aumentan los usuarios / transacciones. Este camino lineal es predecible para las empresas.

Buenos ejemplos de ciclos que se benefician de la computación distribuida en el contexto de la computación en la nube: temporada de impuestos, viernes negro, lunes cibernético, Día de San Valentín, sitios web de viajes, agregación de noticias, etc.

La informática distribuida es la ola del futuro.

En caso de que no lo hayas notado, nos hemos alejado de resolver problemas con mainframes gigantes y las supercomputadoras de Seymour. Ahora tenemos granjas de servidores enteras y distribuimos el problema entre matrices gigantes de procesadores.

Si esto es dificil. Sí, tomará mucho tiempo. Las cosas más valiosas son ambas.

Si desea ayudar con el futuro de la informática, aquí es donde estará durante los próximos 20 años.

Uno debería preocuparse por DC porque los problemas informáticos más desafiantes (problemas de lectura que requieren una gran magnitud de recursos informáticos) se resolverán utilizando sistemas distribuidos. Tales problemas requieren que se rompan en pedazos que se ejecutan simultáneamente en múltiples unidades en aras del tiempo.

Para desempeñar cualquier parte en la construcción de soluciones a estos problemas, y los enfoques basados ​​en ML están firmemente en este espacio (eche un vistazo a proyectos como Hadoop, Spark, Storm que implementan algoritmos de ML), ayudaría a comprender los conceptos básicos en DC . Para enumerar algunos conceptos importantes: descomposición de tareas, sincronización entre procesos, coherencia, superposición de informática con comunicación, localidad de datos, replicación de estado y de cómputo, y tolerancia a fallas. Estos no vinculan de alguna manera la infraestructura de hardware distribuido en un solo blob informático, sino que definen realmente la forma de pensar e implementar la ejecución distribuida del problema en cuestión. Por lo tanto, requiere inversión de sistemas y programadores de aplicaciones.

De acuerdo, existen marcos de programación con tiempos de ejecución (por ejemplo, MapReduce) que permiten a los programadores desacoplarse un poco de tener que comprender todos los detalles de DC. Pero, diría que escribir un programa que funcione es simplemente un primer paso. Una vez que comience a preocuparse por si su solución es buena (alguien tiene que hacerlo de todos modos si el resultado y el costo son consecuencia), uno tendría que profundizar en los detalles de DC subyacente.

Deberías aprenderlo.

Los procesadores de hoy en día están llegando a los límites de fabricación y necesitan ir a varios procesadores de múltiples núcleos a escala. Entonces, para maximizar su PC o procesador móvil todos los días, necesita conocer el procesamiento paralelo.

En los sistemas masivamente escalables de hoy en día, debe ir más allá en los sistemas escalables horizontalmente en muchas máquinas. Necesita saber informática distribuida.

Creo que fue Peter F. Hamilton quien escribió un libro donde la medida de nuestro progreso tecnológico era el número de ciclos de procesamiento por átomo en el sistema solar. O galaxia, o universo, o algo así. De todos modos, esos son los tipos de números a los que nos dirigimos. Llegamos allí utilizando la informática distribuida.

Si necesita saber cómo funciona a un nivel muy bajo depende del tipo de programador que desee ser. Los fundamentos serán abstraídos para que las personas que realmente no lo entiendan puedan codificar para sistemas distribuidos, por lo que probablemente podría hacer aprendizaje automático y definitivamente podría hacer desarrollo web sin tomar clases en él. Pero las personas que entienden los sistemas distribuidos a un nivel bajo desarrollarán nuevas capacidades. Todos los demás solo encontrarán formas inteligentes de aprovechar esas capacidades.

Sabes cuando la gente pregunta “¿qué sigue?” y “¿cuál es la próxima gran cosa que va a cambiar el mundo?”

De esto es de lo que están hablando.