Closed freeformflow closed 9 years ago
As discussed on IRC, it would be helpful to get more details from @dyoder.
Specifically:
If I think of anything else, I'll add it here.
@PandaWhisperer
launch/
directory of the Application's repository. Microservices are deployed as containers on the Cluster. Microservices are children of the Application in the sense they are all deployed together and share a "global" configuration scoped at the Application-level. We care about their deployment status as a group, however we don't restrict how they are connected. The Kick server allows us to establish an arbitrary network topology among containers, with each Microservice self-describing how it would like to be connected to the container network. At the moment we are using Docker containers, but the CAM model just requires Microservices run in Linux containers, of which there are several competing offerings.Thanks @PandaPup for the detailed information.
I think no. 2 is a great draft for that missing wiki page, you can almost just copy and paste it there, at least for starters.
Regarding no. 3, I read the referenced ticket and comment and I don't see @dyoder expressing a specific preference for pushing the information, he just mentioned it as an alternative. I suppose this would be a good time to think about the tradeoffs involved in each approach.
Finally, I understand that a cluster may run more than one application. This would be reflected in the structure of the URLs, such as /application/:app_name/service/:service_name
. Does each microservice know the name of the application it is a part of?
As for the API design, I'm currently thinking of doing nested resources, as mentioned above. I.e. a URL scheme of /application/:app_name/service/:service_name
, where each service is part of an application. We'll just have RESTful actions on each resource that the services can use to update their status.
Now, I just realized that the status will change over time, so perhaps we'll want to store that as well, then we could have /application/:app_name/service/:service_name/status
, which we could POST to in order to add a new status. The server would just add the status to the given service object, automatically adding a timestamp. Statuses would be stored in an array in the order in which they are received (i.e. chronological).
This is a bit heavy, however, with all those nested resources. Alternatively, we could flatten the hierarchy by rolling all services into the application they belong to, so we'd have /application/:app_name/status
which we'd POST to, but now we'd have to include the service name along with the status, and let the kick server sort it out.
I'd like @dyoder to weigh in on this proposition if possible.
I've placed a detailed description of what we need to implement on our internal wiki. Ideally, that will turn into a bunch of individual tickets.
As services go about their activities they can curl requests to the kick server:
ExecStop
directive to signal when a service has failed.Please propose a schema the kick server can use to collect this information from services.