In essence, this application was centered around inheriting Getsy's legacy codebase and then extending the capabilities of the database and server layer to support production-level traffic while maintaining its service-oriented architecture. The task entitled implementing techniques such as indexing, compression, clustering, horizontal scaling, and caching. To learn more about the journey, feel free to reach out to me at [email protected].
After horizontally scaling the service on 4 AWS EC2 t2.micro instances and utilizing round robin load balancing with content caching on my NGINX proxy server, I was able to handle 10,000 requests per second with a 0.0% error rate and an average latency of 62 ms.
This is in comparison to a 45.3% error rate and an average latency of 3727 ms before all the optimizations.
In conclusion:
| BEFORE | AFTER |
|---|---|
| 3727 ms | 62 ms |
| 45.3% error rate | 0.0% error rate |
This equates to...
| SPEED | ERROR RATE |
|---|---|
| 98.34% improvement in speed | 100% error reduction |
| It takes 1.66% of the time it did before! |
| Technologies Used |
|---|
| PostgreSQL |
| MongoDB |
| NGINX |
| AWS EC2 |
| New Relic |
| Loader.io |
| k6.io |
| PM2 |
| Node.js |
| Express.js |
Open up the terminal and from within the root directory, run the following commands:
npm install
npm run csvThe "npm run csv" script creates a CSV file in the root directory named "entries.csv".
Navigate to the database directory and import the schema into Postgres by running the command:
psql postgres < schema.sqlAnd then the seeding script:
npm run seedGo back to the root diretory and run these scripts to start the server and serve the static files:
npm run build
npm startOpen up your browser and navigate to http://localhost:8001/