开发者

Erlang: How do you reload an application env configuration?

开发者 https://www.devze.com 2022-12-31 10:36 出处:网络
How do you reload an application\'s configuration? Or, what are 开发者_运维问答good strategies for managing dynamic application configuration?

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?


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.


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!

0

精彩评论

暂无评论...
验证码 换一张
取 消