Improve application scalability, performance and availability with load balancers. Illustrations included! Load balancing is a system design concept that refers to distributing a set of tasks evenly across multiple servers. Why use load balancers? Imagine a server with a public ip address hosting a website. The server receives requests from
EC2 vs. LightSail vs. Elastic Beanstalk. What are the differences and when to use what? With cloud eating the world, it is important to understand the different compute options available to deploy applications. It can be quite frustrating to wrap your head around the different services. This post aims to
Why serverless? And how? A practical dive into AWS ECS. In this post we will design and deploy a FastAPI application on AWS. We will architect the application using a serverless compute service coupled with a managed database service. This microservice architecture helps make a decoupled system which increases robustness.
Dive into the popular design pattern This post is part 5 of a series on the SOLID [https://en.wikipedia.org/wiki/SOLID]principles. You can find post 4 here [https://haseebkamal.com/the-interface-segregation-principle-explained-in-python/] , post 3 here [https://haseebkamal.com/the-liskov-substitution-principle-explained-in-python/] , post 2 here [https://haseebkamal.com/the-open-closed-principle-explained-with-a-python-example/] and post
A look at interfaces and how to write clean and maintainable code with SOLID principle 4/5. This post is part 4 of a series on the SOLID [https://en.wikipedia.org/wiki/SOLID]principles. You can find post 3 here [https://haseebkamal.com/the-liskov-substitution-principle-explained-in-python/] , post 2 here [https://haseebkamal.
Towards robust software with SOLID principle 3/5. This post is part 3 of a series on the SOLID [https://en.wikipedia.org/wiki/SOLID]principles. You can find the second post here [https://haseebkamal.com/the-open-closed-principle-explained-with-a-python-example/] . Before we delve into the reasoning of this principle and how it fits
Towards better programming with SOLID principle 2/5. This post is part 2 of a series on the SOLID [https://en.wikipedia.org/wiki/SOLID]principles. You can find the first post here [https://haseebkamal.com/the-single-responsibility-principle-in-software-engineering/] . The nature of software is that it is ever changing. Software is never
High cohesion, low coupling and the hallmarks of quality software with SOLID. In this post we will be looking at the first of the SOLID [https://en.wikipedia.org/wiki/SOLID]principles. SOLID is an acronym for five software design principles that help make software robust and maintainable. Understanding and
No Linux no problem. Learn how to develop in Linux directly from Windows! In one of my previous posts [https://haseebkamal.com/make-your-code-2x-faster-with-this-simple-python-library/] I demonstrated the use of a Python framework called Celery. The tutorial relied on using a special kind of database service called Redis. However Redis is not
Amazing single-threaded performance with FastAPI — optimize your code for a HUGE performance boost! Python has many web frameworks the most popular being Django and Flask. I am most familiar with Flask myself and used it extensively to build hobby projects and improve my programming skills. However, as with all things
No fancy libraries and no complicated engineering, just one data structure - hash tables. Every beginner programmer loves for-loops because of their utility and how easy they are to understand. Similarly, everyone loves arrays. However more often than not, we start using arrays for everything without giving it a second
Celery is an asynchronous task queue framework written in Python. Celery makes it easy to execute background tasks but also provides tools for parallel execution and task coordination. In the last post we touched upon basic principles of the Celery framework for Python. You can check the last post here
In an increasingly data-driven world, it is important for software engineers to build applications that are responsive and fast. As our software needs become more complex, our computing requirements also escalate. At the same time users expect responsive and snappy performance from applications they interact with on a daily basis.