Category: DevOps
-

Choosing a Deployment Strategy: A Developer’s Guide to Canary, Blue-Green, and Rolling Updates
Effective deployment strategies are crucial for developers post-code commit. Blue-Green, Canary, and Rolling Updates cater to different needs, balancing factors like cost, risk, and release frequency. Understanding these strategies helps ensure smooth transitions without downtime, optimizing user experience while managing potential issues and resource allocation.
-

“AWS EC2: Unable to Connect,” a Security Group Checklist for Developers
In this article, I address common issues with AWS EC2 connectivity, particularly focusing on misconfigured security group inbound rules. It outlines potential pitfalls such as incorrect protocol, source IP mismatches, and the absence of inbound rules. Additional considerations include instance firewalls and service status. A troubleshooting checklist is provided for quicker connection resolution.
-

VM or Container? The Developer’s Guide to Choosing the Right Isolation
In the current article, I discuss the evolving landscape between virtual machines (VMs) and containers, outlining their core differences, performance, and cost implications. While containers excel in efficiency, VMs offer superior security due to their isolation model. Emerging secure container runtimes like gVisor, Firecracker, and Kata Containers provide enhanced security with the speed of containers,…
-

3 JVM Parameters You Must Know
Proper configuration of JVM parameters significantly enhances the performance and stability of Java applications in production. Key areas include setting appropriate heap sizes, effectively managing out-of-memory scenarios, and selecting the right garbage collector based on workload needs. Implementing these optimizations ensures consistent performance during high-demand periods.
-

Publish a Python Wheel to GCP Artifact Registry with Poetry
In this article, I’m building a Python project that outputs a runnable file instead of a Docker image, as I need to directly communicate with GPU drivers. Using Poetry and GCP’s artifact registry, I must create and publish a wheel file, configuring dependencies, and deploying the project on a virtual machine, resolving issues with versioning…
-

Architecture, DevOps and Security: The 3 Pillars to Grow A Product
A company’s success hinges on its product, which requires strong architecture, DevOps, and security from the start. Neglecting these areas leads to chaos and difficult scaling. Automating processes and maintaining security standards are essential for efficient growth. Investing in these pillars prevents costly issues, ensuring a healthier product lifecycle and company sustainability.
-

Debug Server Performance
In this article, I compare the performance of an application hosted on AWS and Scaleway, revealing that AWS was significantly slower despite higher resources. Through testing various instance types and configurations, they determine that the issue lies in CPU performance and instance age impacting response times. Ultimately, a better instance type was found on AWS,…
-

Advantages and Disadvantages of Alembic
In this article, I compare Alembic to other database migration tools like Flyway and Liquibase. Alembic excels in handling parallel migrations and enforcing rollback actions but lacks checksum validation, posing risks for schema consistency. While not perfect, it offers advantages, particularly for team development, using SQLAlchemy for ORM migrations.
-

Mastering Docker Compose for Local Development and Testing
This article emphasizes the importance of creating a local development environment that closely resembles production using Docker Compose. It covers setting up microservices, databases, and caching systems, while discussing necessary configurations for effective unit testing. The ultimate goal is to minimize discrepancies and enhance software development efficiency.
-

Stop & Start GCP SQL Instances at Nights
One of the great things about Google Cloud SQL instances is that they let me shut them down at night. The data sticks around (hopefully), but I can’t access it, which is exactly what I want. Since my backend servers are already tucked in for the night (explained in another article), keeping the database running…
