Many computation pipelines these days span both the edge and the cloud, or across multiple locations. There are several examples of this.
- Live video analytics requires low latency, and thus a majority of the computation needs to take place at the edge. Performing video analysis at the edge can also perhaps ease some privacy or data sharing concerns. However, if there are resource constraints on what the edge can do, more complex analytical models can sometimes be run in the cloud at the expense of increased latency. In addition, the cloud can be used to offload some computation in cases some of the edge computation is down.
- Manufacturing may often require video and sensor analytics near the factory floor. However, some of the data may need to be processed in the cloud.
- Agriculture is another application with similar constraints. In addition, in agriculture, the edge may often be decoupled from the cloud so that battery can be conserved and thus network radios may be shut-off.
Containers and container-orchestration frameworks such as Kubernetes are currently widely used in the cloud or in on-premise clusters to provide an easy way to deploy computation workloads and pipelines and provide scalability and high-availability (redundancy). However, such frameworks currently have several limitations.
They assume that the cluster is a well-provisioned fully connected mesh, i.e. the communication across any two nodes is equally fast and performant, and they also assume that the cost of running computation in any location is the same. Thus each micro-service in the pipeline is independently placed in the cluster, and each location is equally considered for placement so long as the resource requirements of the micro-service are being met.
In this project, we realize that in the hybrid edge-cloud case, this is not true. Certain portions of the application would definitely prefer to run at the edge. Certain other portions may also want to be co-located with other micro-services in order to minimize latency/cost.
HybridKube provides Kubernetes extensions which allow for optimal placement utilizing cost functions for “pipelines”, which are a collection of micro-services that communicate with each other (multiple deployments in Kubernetes terminology). In addition to placement, we aim to provide optimal request forwarding from one micro-service to the next by optimally configuring the service mesh.