  funcX is a distributed function as a service (FaaS) platform that enables
flexible, scalable, and high performance remote function execution. Unlike
centralized FaaS systems, funcX decouples the cloud-hosted management
functionality from the edge-hosted execution functionality. funcX's endpoint
software can be deployed, by users or administrators, on arbitrary laptops,
clouds, clusters, and supercomputers, in effect turning them into function
serving systems. funcX's cloud-hosted service provides a single location for
registering, sharing, and managing both functions and endpoints. It allows for
transparent, secure, and reliable function execution across the federated
ecosystem of endpoints--enabling users to route functions to endpoints based on
specific needs. funcX uses containers (e.g., Docker, Singularity, and Shifter)
to provide common execution environments across endpoints. funcX implements
various container management strategies to execute functions with high
performance and efficiency on diverse funcX endpoints. funcX also integrates
with an in-memory data store and Globus for managing data that may span
endpoints. We motivate the need for funcX, present our prototype design and
implementation, and demonstrate, via experiments on two supercomputers, that
funcX can scale to more than 130 000 concurrent workers. We show that funcX's
container warming-aware routing algorithm can reduce the completion time for
3000 functions by up to 61% compared to a randomized algorithm and the
in-memory data store can speed up data transfers by up to 3x compared to a
shared file system.
