Anonymous avatar Anonymous committed 1c4ef7f

Updated the design docs.

Comments (0)

Files changed (1)

-============================================================
- Dad - A Server Process and Configuration Management System
-============================================================
+==========================================
+ Dad - A Server Process Management System
+==========================================
 
-Dad is a replacement for Eggmonster. Eggmonster is a process /
-configuration management system that is aimed at running Python based
-services. 
+Dad is a server process management system. Its primary goal is to
+manage independent processes in such a way that they are isolated
+from one another while supporting an API for additional features
+beyond start, stop and restart.
 
-What Eggmonster Does
+History - Eggmonster
 ====================
 
+Dad was written after working with an in house system for managing
+processes called Eggmonster. 
+
 Eggmonster is responsible for running a cluster of services. It does
 this by maintaining a central control server and clients that
 communicate with that server in order to run specific Python
 
 While eggmonster works relatively well, it has some issues. 
 
- - There is too specific a focus on running python applications
+ - There is too specific a focus on running Python applications
  - Dependencies cannot easily be resolved outside of setuptools
  - Its assumptions that everything will be run as root means that you
    cannot sandbox an application with eggmonster, it must be done in
    the environment (via virtualenv, vm, etc.)
- - The simple socket connections do handle network changes reliably
+ - The simple socket connections cannot handle network changes reliably
  - There are no protocols for extending an eggmonster application to
    support other commands outside of *nix signals (term/kill)
 
 What Dad Does
 =============
 
-Dad handles taking configuration information and running processes
-based on that information. Each dad server recieves configuration
-information and starts/stops apps accordingly. It uses a file based
-protocol for starting and stopping an app and providing it with
-configuration. A dad application (or wrapper) must take as its initial
-argument the path to the configuration (this might change to being an
-environment variable).
+Process Management
+------------------
 
-Dad does not currently have a central server to manage dad
-nodes. Instead it is assumed that another tool or extension to dad
-could be used to in order to manipulate the environments of a
-cluster. For example, a simple build script could take some
-configurations and publish them to a set of dad processes. 
+Dad primarily is a process manager, which means it is able run a
+process, stop it via term and/or kill signal or restart it. Dad also
+supports defining arbitrary actions that are performed in an
+application sandbox. These actions are also processes that are managed
+by dad.
+
+Dad does not "monitor" processes. Its primary purpose is to stop and
+start them on demand. If a process tries to run and ends, dad is
+perfectly fine with that.
+
+Process Isolation
+-----------------
+
+Dad runs processes in an individual directory called a sandbox. It is
+up to the sysadmin or some other system to prepare the sandbox as
+needed by an application. This sandbox is not a chroot jail and it
+doesn't provide any sort security from someone doing something
+malicious. Again, this is the responsibility of other systems to
+ensure configurations are secure and access is limited properly. 
+
+The purpose of the sandbox is to act as a single location to place all
+the resources necessary to run an application. This might include
+libraries, binarys, indexes, etc. It is assumed that something like a
+package manager would be able to install applications in this
+directory. Even though it is meant to contain everything, there is
+nothing stopping a user from using resources outside the sandbox.
 
 Dad also aims to run each application according to a specific IP/host
 and port, meaning, that a dad application expects to be provided with
-both in order to run. Each application is sandboxed in a directory
-where different runtime requirements can be installed. The goal in
-doing this is to make sure dad apps can run as normal users and there
-is no requirement that dad apps require root priviledges. Along the
-same lines, a dad sandbox can be deleted and there is no impact on any
-other application.
+both in order to run. 
 
-Dad will also provide a user interface for managing the processes. Any
-process should be able to provide functions to dad via a simple known
-protocol based on calling scripts. For example, a dad application can
-specify tests can be run by calling "runtests.sh". The tests can be
-run then on a production environment and viewed directly from the dad
-web app. 
+User Interface
+--------------
 
-Since dad doesn't currently have a centralized manager, the
-aggregation of everything that is running must be done manually. This
-can hopefully change but for the time being the focus is on developing
-simple protocols for applications to use to allow more robust means of
-testing and logging. 
+Dad will also provide a user interface for managing the
+processes. Dad's management of processes does include monitoring them
+easily. This is not meant to be a Nagios replacement, but rather a
+more user friendly way of tailing logs and debugging in a production
+environment.
 
 
+Development vs. Production
+==========================
 
+Dad was partially born from a desire to have a single entry point that
+would scaffold an application and its required services. The natural
+extension of this is to use the same mechanism you use in development
+for your production systems. It is recommended that you use dad
+locally for development. You can use its APIs to restart services as
+needed or run tests without having to write code to start and stop
+services in your test framework of choice. In doing so, dad allows
+your local integration to become the same thing as continuous
+integration in that in development you are constant reproducing the
+production environment.
+
+
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.