0

I have a distributed application backed by a distributed database. (Distributed here means running across multiple hosts with one or more instances on each host). Application has several toolings around it, each does a different operation such as getting some form of update, starting certain application-specific processes, etc.

Both databases and applications have their own set of configurations; all the tools also have configurations around them. Many of these config parameters cut across the tools.

In order to manage this entire system from start to updates to backup to queries to destroy, I have commands for each. Commands here in most cases mean running a binary/executable with certain command-line arguments. Due to the distributed nature, often the commands will have to be executed across all the hosts part of the system.

Update: I would be maintaining several such systems. Hence, in the end, I might have to manage let's say 20 systems; each running the application at version x.x backed by a database running at version y.y

What is the best way to manage such an application?

To give more context, here is how I am thinking of managing it. Design a server application (in java/go) that exposes APIs to execute each of the commands as stated above. Have a superset of different configurations, and store that config in another database. Clients (i.e maintainer of the application) would send some sort of identifier information about the application as part of the request; the server would receive the request, get the config from the database and execute that command. This server would run on all the hosts part of my system. For the above example, if let's say each system requires 5 hosts; I would have this server running on a total of 20*5=100 hosts.

I feel like this is a general problem and I am confident of there being some industry-standard tool or at least a conceptual solution for the same. If so, any guide to it would be really helpful.

5
  • 1
    This is operating system specific, and even for Linux distribution specific. You could use some crontab(5) line starting with @reboot. It is also an active research topic. Did you consider starting your PhD on it? Aug 3, 2021 at 6:25
  • Cloud managing services like AWS provide their proprietary solution Aug 3, 2021 at 6:29
  • @BasileStarynkevitch crontab, although really powerful; is a very low-level solution. I may end up using it as part of the actual command execution but that still requires me to manage a lot of commands.
    – kernel0707
    Aug 3, 2021 at 7:35
  • @BasileStarynkevitch I am not looking for AWS based solutions. I have my own custom hardware. And yes, it's Linux hosts.
    – kernel0707
    Aug 3, 2021 at 7:37
  • It sounds like what you're looking for may be SaltStack. Aug 3, 2021 at 8:37

1 Answer 1

0

Sounds like you are asking for server configuration management toolkits like the Python-based SaltStack or Ansible or their Ruby-based forefathers Chef or Puppet.

Each of them has a large community of users around them.
There are several books for each explaining how to use them.
Take your time to evaluate them, it's complex stuff!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.