Case Study: Virtual Event Platform
Full Stack AWS Cloud Architecture
Introduction: In 2019 I was developing conference registration for the annual IEEE Globecom event in conjunction with SRI (Onsite registration company.). The system registered users globally and then onsite it transferred their access information to RFID badges at the show.
This event happened in December of 2019. Shortly after, in March 2020 is when Covid hit the states. SRI had a client base that needed to respond to the Covid restrictions. They would either have to take their events virtual or cancel them.
My task was putting together a flexible and powerful virtual event platform. It needed to integrate native and third-party video conferencing (Zoom and Hangouts), user registration, group chat, private messaging, virtual exhibit booths, session management, and all the various requirements of a global conference.
The basic requirements for this project were:
- Utilize the AWS cloud for all infrastructure.
- Utilize open-source technology.
- Create a dynamic interactive experience for attendees.
- Create a flexible system to meet the diverse needs of the clients.
This case study will review some of the features and the technology behind them. This endeavor would have been exponentially more complicated without the AWS cloud, it was integral in every component of the system.
Here is a feature video that shows some of the features.
The main web application is built on PHP7 and Laravel. I use burstable T3a instances. A conference rarely has more than 5000 attendees so there is no need for a huge amount of processing power. The T3 server-class works great for web servers.
EC2 instances allow us to save quite a bit of money as we can develop on t3a.small instances and ramp-up to whatever we need for the days the conference is actually happening. If there are only 300 attendees we don’t need a ton of horsepower, but if there will be 12,000 we can easily scale up the servers for the duration of the event.
PHP 7, MySQL, and Laravel
I selected PHP and Laravel for several reasons:
- PHP is solid and the most popular server-side language appropriate for enterprise development (systems requiring relational databases).
- Laravel delivers registration and authentication out of the box.
- It’s been the most popular PHP framework for several years, ensuring a large pool of potential developers.
- It is very flexible and easy to extend.
The primary database is MySQL. NoSQL databases have become very popular but they are almost never appropriate for an enterprise application that requires a lot of complex data structures.
MySQL is fast and inexpensive, has a huge support base and is easy to use and manage.
Asset Management: Image and Video file storage and distribution.
Virtual conferences usually have a large amount of video. There are two types, pre-recorded videos (like the one above) and live-streamed videos. For pre-recorded videos, we store and serve them directly from S3 buckets. S3 was built with superb reliability and designed to handle traffic spikes.
Separating the video file assets from the web server allows us to deliver smooth un-interrupted video regardless of how busy the server is. The web server could even go down completely without affecting the end-user experience watching a video. Since I know ahead of time approximately how many users will attend the conference, I can always add a CDN in front of S3 for heavy loads.
Using S3 and Cloudfront dramatically reduces the much more expensive Elastic Block Storage (EBS) servicing our EC2 instances. There are several gigs of pre-recorded video for most shows, no need to weigh down our web server with giant video files.
Live Stream Video: GO/Nginx
The live streaming portion is a little more complicated. For this, I set up a dedicated live stream server (another isolated EC2 instance) using GO (instead of PHP) and Nginx (instead of Apache). This technology stack works great as a streaming server so there is no need for special libraries or modifications.
The streaming server itself does not require much CPU power. A single t3small or medium EC2 instance is more than enough to handle multiple incoming broadcast streams.
Since the broadcast streaming files are transient there is no need to involve S3, CloudFront does the work of distributing the stream and the webserver can easily handle the HTML requests.
Native Video Conferencing
In order to promote interaction and networking between conference attendees, we wanted to give people the ability to instantly start up a video chat room and invite their friends. We went with Jitsi Meet a native web-based video conference software that does not require plugins or browser extensions.
Jitsi has a dedicated EC2 Ubuntu server and integrates directly into the web browser. We also allow users to incorporate Zoom and Google Hangouts video conferencing (or any third-party service they like). The client can mix and match as needed.
Group Chat and Private Messaging
For less intense conversation we also provide text chat and private messaging. In a virtual session room a group chat exists that is visible to all users in the room (eg with that page open in their web browser). This allows users to communicate while watching a live stream or pre-recorded video.
Caching and Performance
I incorporate a REDIS server to cache DB queries within Laravel. We isolate most of the assets (image and video files, video streams, video conferencing) on unique servers so we only beef up the bare minimum of resources. This delivers content faster to the end user and creates lower cloud expenses.
I think that touches on just about all the major aspects of this project. The system was implemented in stages. The basic working implementation was designed and put in live beta in a few weeks.
If you have any questions feel free to send me an email. If I am not busy I will try to answer you as best I can. You can see the system at My-Virtual-Events.com There is also a PDF One-Sheet for MVE here.
By Wesley E. Warren – Enterprise Cloud Architect