Erlang: ¿cómo se recarga una configuration env de la aplicación?

¿Cómo recarga la configuration de una aplicación? O bien, ¿cuáles son las buenas estrategias para administrar la configuration de la aplicación dinámica?

Por ejemplo, digamos que tenía niveles de logging y quería cambiarlos en time de ejecución. Además, supongamos que esta es una de las tantas opciones. ¿Tiene sentido tener un "server de configuration" que mantenga el estado de configuration para que otras partes de la aplicación realicen consultas? ¿Las personas hacen eso o simplemente lo inventé?

Creo que es razonable mantener todos sus datos de configuration en un repository (subversión, mercurial, etc.) y que las aplicaciones los descarguen cada vez que inicien o intenten volver a cargar algunas de sus opciones de configuration. Este es un enfoque centralizado, sin embargo, podría tener muchos serveres de configuration para evitar SPOF y:

  • le permite hacer un seguimiento de los cambios para que sepa quién los puso y cuándo lo hizo (ninguno quiere estar a cargo de la configuration no apropiada);
  • le permite usar la misma configuration para todas las aplicaciones en su networking;
  • Facilidad de los cambios: solo puede modificar la configuration y notificar las aplicaciones afectadas utilizando gen_server:abcast llamada gen_server:abcast u otros medios.

proplists(3) son útiles al leer la configuration.

Si mi comprensión es correcta, el problema es el siguiente:

Desea crear un sistema distribuido y escalable y, por supuesto, Erlang es la primera opción que se tiene en count, ya que fue diseñado para tales fines.

  • Tendrá varios nodos que ejecutarán aplicaciones locales y también aplicaciones distribuidas.

  • Aquí la jerarquía más simple es tener una copy de security en espera para cada funcionalidad principal.

  • Esto se puede lograr implementando un controller de aplicación distribuida.

    • El ejemplo más simple es hacer que un server se inicie en un nodo, mientras que un server esclavo se inicia simultáneamente en un nodo compañero.

    • Los controlleres de aplicaciones distribuidas tienen muchas ventajas.

      • Un ejemplo fácil es manejar posts node_up de forma diferente al introducir nuevos posts que indican que un nodo no solo está listo para erlang VM, sino que se están ejecutando todas las aplicaciones vitales. De esta forma, el nodo compañero puede estar seguro de que el nodo en espera está listo y puede comenzar a sincronizar.

Por favor, elabore o comente si malinterpreté algo. ¡Buena suerte!