  Serverless platforms that poorly schedule function requests inspire
developers to implement workarounds to issues like high cold start latencies,
poor fault tolerance, and limited support for parallel processing. These
solutions litter environments with idle containers and add unnecessary pressure
to the already underperforming scheduling services. An effective serverless
scheduling policy should encourage developers to write small and reusable
snippets of code, and give operators the freedom to administer cluster
workloads however necessary in order to meet their operational demands. To this
end, we have designed a distributed scheduling service that integrates with
existing serverless frameworks. Our service addresses three key issues that
affect modern serverless platforms; high cold start latencies, poor fault
tolerance, and limited native support for parallel processing patterns like
fork-join and map-reduce. We have built a prototype that integrates with the
existing OpenWhisk services, and is fully backwards compatible with the
existing implementation. The updated architecture improves performance and adds
new scheduling and security features. Our empirical results demonstrate that
our scheduler reduces cold start execution latencies by up to 80, steady state
latencies by up to 10, and does so with negligible time and memory overhead.
