Some people are busy with life and work, and have not yet met their love partner. We are helping them find their soul mates.
What it does
SatukanCinta is a matchmaking website, currently tailored for Indonesian people and in Indonesian language. However we have members from other countries as well, especially Malaysia and Singapore.
SatukanCinta user interface is clean and easy to read and use, it is mobile-first and responsive, in fact around 90% of our users are using mobile devices to access the web app.
With SatukanCinta, users can:
- browse and meet new people that they are attracted to
- sign up as member, it is easy user can just use their Facebook account
- chat and send messages to get to know each other
How I built it
SatukanCinta uses a lot of AWS services, all of them are in us-east-1 region. The main app server is developed in Java and Kotlin, uses Spring Boot framework, and deployed to an EC2 server. We use t2.medium (4 GB RAM) which amazingly can serve over 2 million page views per month. For database, originally, SatukanCinta used an RDS PostgreSQL db.t2.large instance (8 GB RAM). After the migration, additionally SatukanCinta also uses an Amazon Aurora MySQL (5.7 compatible) db.t2.small instance. We chose MySQL 5.7 compatibility due to enhanced spatial query and indexing features support with InnoDB. A sync job is developed with NodeJS and Serverless Framework, which connects to both RDS PostgreSQL and Aurora MySQL, and is deployed using CloudFormation, run with AWS Lambda, and scheduled with CloudWatch Events. SatukanCinta stores user photos in Amazon S3. SatukanCinta uses S3 Website Hosting Redirection Rules to serve transformed photos dynamically and efficiently. New photos are transformed using a NodeJS script served by AWS Lambda and Amazon API Gateway.
SatukanCinta sends email notifications regularly to users, and uses Amazon SES to send its emails. SatukanCinta uses SES configuration set which allows to monitor email bounces and complaints via Amazon SNS. These bounces and complaints are then processed with a script deployed to Amazon Lambda, which automatically marks these emails accordingly in the database, so no further emails will be sent to those users.
The app server also uses AWS X-Ray agent, with HTTP, Aurora MySQL, and RDS PostgreSQL tracing turned on. The AWS X-Ray dashboard makes it easy to monitor application performance and pinpoint specific bottlenecks or issues.
We use many CloudWatch features: Dashboard, Logs (especially for Lambda functions), Events, Alarms. I sometimes monitor the CloudWatch dashboard to check useful metrics, however CloudWatch Alarms are most useful because I can relax and when a problem occurs, AWS will notify me immediately.
SatukanCinta public web endpoints are fronted by CDN for optimal speed from anywhere in the world.
Challenges I ran into
Before migration to Amazon Aurora, there were several issues we were having with our RDS PostgreSQL db.t2.large instance, due to user growth and more data coming every day:
- Burst balance regularly depletes
- Connection spikes
- Too many IOPS
- Read latency
It is possible to "resolve" these issues upgrading to a larger instance and increasing the storage size (which will increase the IOPS allowance). But we want to solve this problem in more scalable way, using Amazon Aurora.
Accomplishments that I'm proud of
SatukanCinta is currently used by thousands of users per week.
SatukanCinta ranks quite well in Google search for specific and common matchmaking keywords for Indonesia.
What I learned
It is important to put users as priority, and keep the service always up and running with proper system architecture.
What's next for SatukanCinta
In the future, we plan to serve more users with more diverse backgrounds, cultures, religions, interests, and also countries, starting from Southeast Asia.