views:

107

answers:

2

How do you reload an application's configuration? Or, what are good strategies for managing dynamic application configuration?

For example, let's say I had log levels and I wanted to change them at runtime. Also, let's assume this is one of many such options. Does it make sense to have a "configuration server" that holds configuration state for other parts of the application to query? Do people do that or did I just make it up?

A: 

I believe it's reasonable to keep all your configuration data in a repository (subversion, mercurial etc.) and have applications download it every time they start or attempt to reload some their configuration options. This is centralized approach — however you could have many configuration servers to avoid SPOF — and it:

  • allows you to keep track of changes so that you know who put these and when (s)he did that (none wants to be in charge of unproper configuration);
  • enables you to use the same configuration for all applications throughout you network;
  • easiness of changes: you can just modify configuration and notify concerned applications using gen_server:abcast call or other means.

proplists(3) are useful when reading configuration.

Yasir Arsanukaev
A: 

If my understanding is correct, the problem is the following:

You want to create a distributed, scalable system and of course Erlang is the first choice that comes into mind, since it was designed for such purposes.

  • You will have several nodes that will be running local applications and also distributed applications as well.

  • Here the simplest hierarchy is to have a hot-standby backup for every major functionality.

  • This can be achieved by implementing a distributed application controller.

    • Simplest example is to have a server start on a node, while a slave server is started simultaneously on a mate node.

    • Distributed Application controllers have many advantages.

      • Easy example is to handle node_up messages differently by introducing new messages that indicate that a node is not only erlang VM ready, but all vital applications are running. This way the mate node can be sure that the stand-by node is ready and can start sync-ing.

Please elaborate or comment if I misunderstood something. Good luck!

Dlf