Revised Personal Website
This year, I decided to revamp my website's structure. Instead of focusing primarily on products and business, I've shifted its focus towards a blog format. Within this blog, I plan to share insights, showcase case studies from my ongoing projects, and announce open-source releases.
Shifting Focus to DevOps
I've redirected my professional attention towards DevOps and AWS Architecture, moving away from traditional application development. The scalability and potential for automation within cloud computing deeply fascinate me. I derive satisfaction from ensuring processes, such as autoscaling and continuous delivery, operate seamlessly and efficiently.
CI Pipeline with Jenkins Superseding GitLab
In one of our projects, GitLab CI was not performing up to our expectations. The tests ran too slowly and incurred high costs, which led to bottlenecks in our CI pipeline. To overcome this, I transitioned to an external CI system based on Jenkins. This change allowed our CI tests to be executed on AWS using separate EC2 spot instances, resulting in greater efficiency and cost-effectiveness.
Started a DevOps Certification
I purchased a one-year subscription to access all courses on Udemy. I was particularly keen on completing a course to become an AWS Certified DevOps Engineer and planned to sit for the certification exam. Unfortunately, due to personal matters, specifically my father's health, I could not fulfill this goal at the time. Nevertheless, I intend to resume my pursuit of this certification soon.
Introduced Execution of Workers in Separate ECS Tasks
An interesting challenge was to optimize a job manager. Jobs were queued and processed by daemons running in parallel on ECS. For longer tasks, we faced an issue with new deployments terminating the ongoing processes. I engineered a solution that allowed tasks to be executed 'stand-alone' in a container, isolated from deployments. These containers would self-terminate after completing their tasks, providing a cost-efficient solution as we no longer needed to maintain a constantly running daemon.
Began Working with LocalStack
For testing scenarios and primary development of new microservices, I started using LocalStack. It’s essentially like running a subset of AWS services on your local development machine – great for testing and development without the complexities and security concerns of using an actual AWS development account.
Set Up Performance Monitoring with K6 and Grafana
To improve the Pagespeed score of a web application, I established performance monitoring with soak and smoke tests using K6 and Grafana, executed in Docker on AWS. K6 tracks the response times of specific URL sets, helping us identify which URLs would benefit most from optimization. Setting KPIs for these metrics allowed us to gauge the impact of optimizations and to detect any regressions.
Multi-Arch Images in CD Pipelines
I’m passionate about ARM's efficiency and its growing support within the cloud ecosystem. In our CD pipeline, I enabled support for multi-architecture builds end-to-end, from base images to deployable images created by the pipelines. This capability allows us to deploy on any architecture that supports Docker, effortlessly.
Refactored Application and Made It Cloud-Ready
I tackled a project built on an outdated version of Symfony running on an old Centos platform. It was the perfect candidate for transitioning to a cloud provider. I established a CD pipeline incorporating AWS CodePipeline, AWS Parameter Store, and AWS Lambda in the deployment phase.
Open Source Initiatives
I launched a series of Docker images titled 'Streamline Your Proxies'. It’s a modular series of near-zero-configuration proxies that can be interconnected or integrated into other images using port mappings. The proxies are configurable via .env variables and utilize a template parsing application I developed in GoLang, which I crafted specifically for this purpose.
Ongoing efforts, of course, include cost and performance optimizations for AWS. In cloud environments, cost and performance optimizations often go hand in hand.