© 2020 Strange Loop
Create a serverless distributed programming competition system using a variety of technologies: functions-as-a-service, message queues, platform-as-a-service, storage-as-a-service, NoSQL database, event-driven software, and authentication-as-a- service. The completed system is available on Github for attendees to examine and modify after seeing the talk, if they desire. The system is written in Python using Google Cloud Platform services, but the concepts can be adapted to other languages and cloud providers.
This solution consists of four main components, loosely coupled via HTTP requests, message queues, and system event triggers.
Contest participants write and deploy their solutions using Cloud Functions responding to HTTP requests.
Contest judges create software to test the solutions, also using Cloud Functions, but triggered by a message queue so that multiple different test runs on each submission can run simultaneously.
Judging results are saved to a Cloud Storage object, which will trigger another Cloud Function to update a Firestore NoSQL database with results.
A web application that lets participants submit the URLs of their solutions and view judging results is deployed using App Engine, and access to it is controlled via Identity Aware Proxy.
The talk starts with the motivation for the system, which was to provide a simple way for students to submit solutions to programming contest problems and shows how the architecture evolved from there.
Charles Engelke is a Senior Developer Programs Engineer at Google Cloud, focused on application development for the cloud. Prior to coming to Google, he was the CTO of Info Tech, Inc., where he led the effort to bring sealed bidding to the Internet and led teams that build several other native, web, and mobile applications.
Laurie White is Senior Developer Advocate at Google Cloud, focusing on helping higher education use the cloud, and Professor Emeritus of Computer Science at Mercer University. During her career as a professor she taught a wide variety of subjects in computer science, ranging from introductory programming to programming languages, software engineering, compiler design, discrete mathematics, and theory of computation.