Snø is an indoor skiing and activity arena scheduled to open in January 2020. Visit snooslo.no for more background information about the SNØ project.
Summary and goals
This post will cover the technical platform and website for the Snø project. The main task (out of many others) for these components is to facilitate the purchase and management of tickets (passes) to the arena and handle the integrations with the on-site gate system.
There where three main technical goals for this project.
Critical clients and platform services should scale to any amount of traffic and handle large spikes in traffic for periods of time. Clients and service should scale down in periods of low traffic.
Robust and maintainable
Critical clients and services should operate in a stable manner, not requiring any manual restarts, disk management, etc. No on-site servers and as close to 100% uptime as possible. There should also be a plan for mitigating various forms of attacks. A client or service should be easy to develop for and deploy without affecting other services or clients.
The cost of the platform and clients should scale with the amount of traffic. No over scaled servers incurring costs and collecting dust. We also aimed to avoid static costs like licenses where possible.
The solution - The platform
The platform was build for the most part utilizing Amazon Web Services (AWS) applying the «micro-services» principles. All of the services (and the website servers) where implemented on AWS Lambda and made available to the world through the AWS API Gateway. Everything is sitting behind the Cloudflare firewall.
Several third party services was utilized for payment transactions, logging and monitoring, integration with physical gates on-site and so on. All logging data was piped into Elastic search (Elastic Cloud) via CloudWatch. Kibana was used for monitoring, trend watching and general stats.
See the diagram below for an overview of the platform.
The solution - Frontend / Clients
The main client is the website located at snooslo.no. The website is running on an AWS Lambda like the rest of the services. This allows for excellent scaleability and great cost management.
The web-site is build as part server rendered and part SPA. The SPA(s) are separated into business logic and presentation. The business logic is written in Typescript and is completely framework agnostic. This part also acts as the model for the presentation. The presentation part is written using the React framework.
My part in this
Solution architect for the service platform, including AWS infrastructure, services and other components needed to run everything. (Integrations with physical components, web-sites and so on). Server and client developer.
Tools and technologies used
- All Lambdas and EC2 instances are running Linux.
- All server code is written in Node.js
- All client code is written in Typescript / React
- Amazon Web Services
- Cloudfront, VPC, API Gateway, EBS, Lambda, SNS, SQS, so on..
- Third party tools includes Elastic Cloud, Stripe and so on