Hi Qian, After looking into the open source options for widely-used serverless frameworks, I noted these five: * Oracle-backed Fn: https://fnproject.io/ * Kubeless: https://kubeless.io/ * Fission: https://fission.io/ * OpenFaaS: https://www.openfaas.com/ * Apache OpenWhisk: https://openwhisk.apache.org/
Briefly looking at the OpenWhisk documentation, it says that Mesos is already supported alongside Kubernetes and Docker Swarm. I haven’t studied OpenWhisk so I don’t know if it works different than the mostly Kubernetes-based projects in this space. The way most of these ‘function as a service’ frameworks work is that you provide the function in one of the supported languages, and the system then packages your function with an appropriate runtime into a container. From there, the serverless runtime waits for a request to come in on the service endpoint. For each request, the serverless runtime launches one copy of the containerized function. Functions are supposed to run for extremely short durations, and the serverless runtime meters the running time. You’re billed by the second or fraction of a second for function execution time. For one of these services you are running on your own infrastructure, then obviously there isn’t a billing component like exists with the cloud providers. None of the major cloud providers have a good solution for using serverless functions that require persistent state. Each function invocation terminates when it’s finished, so nothing persists. Any state needs to be looked up or persisted to external storage. So far, I haven’t seen any good solution proposed for how to do this better. When you’re being charged by the second, you don’t really want your functions to have to query and fetch state over the network before being able to respond to inbound requests, but this is how it currently has to work. Even if Mesos (and some new framework) doesn’t solve the stateful serverless version of this problem, it is still beneficial if the workload isolation between serverless functions is just as good/secure as is available on Kubernetes but without the overheads for function containerization and function container startup times for each inbound request. I understand what you said about some of the answer being in the scheduling framework rather than in Mesos itself. This Mesos framework would need to make a runtime decision about where to schedule the function execution based on the inbound request and where the data accessed by the function is distributed across the Mesos cluster. Of course, if the function itself has to be transferred across the network as part of the response, that just adds more to the function startup time. Kind regards, John > On 7 Sep 2021, at 10:50 pm, Qian Zhang <zhq527...@gmail.com> wrote: > > Hi John, > > Thanks for your suggestion! > >> That is, how do you run serverless workloads that require access to > persistent data and how do you schedule your serverless functions so that > they execute with good data locality to ensure decent performance. > > If you are talking about the workload scheduling, I think it should be > handled by frameworks rather than Mesos. As we all know, Mesos has a > two-level scheduling mechanism where Mesos master will do the resource > scheduling for the frameworks running on top of it, and each framework will > do the workload scheduling after it receives the resources offers from > Mesos master. Could you please elaborate a bit more on the specific > requirements for Mesos to support serverless workload? > > > Regards, > Qian Zhang > > >> On Tue, Sep 7, 2021 at 8:27 PM John Siegrist <j...@complects.com> wrote: >> >> Hello All, >> >> In going through the mail archive before subscribing to this list, it >> seems there have been a number of discussions around what Mesos should do >> as a project. One use case that might be worth considering is ‘serverless’ >> workloads. This would be something where the Kubernetes containerization >> doesn’t provide any advantages, and to some extent may actually be a >> hindrance (slower function startup times as the container spins up). >> >> In particular, there is an open problem having to do with supporting >> stateful serverless workloads. That is, how do you run serverless workloads >> that require access to persistent data and how do you schedule your >> serverless functions so that they execute with good data locality to ensure >> decent performance. A good serverless solution would increase the relevance >> of Mesos, and it is also a forward-looking direction that doesn’t try to >> reclaim lost territory related to container orchestration. I don’t know how >> much work would be needed to build function-as-a-service on Mesos, but >> since Mesos is already quite good at hosting data workloads it may not >> actually be all that difficult? >> >> Kind regards, >> John Siegrist