From f8e07b50082ecfe8ddefd6d81b4fb0ad4194cc36 Mon Sep 17 00:00:00 2001 From: Tana M Berry Date: Tue, 13 Jun 2023 07:11:36 -0500 Subject: [PATCH] website/blog: scaling apps blog draft (#5936) * scaling blog draft * add image Signed-off-by: Jens Langhammer * add edits from review * tweak * typo caught by build process * Update website/blog/2023-06-13-building-apps-with-scale-in-mind/item.md Signed-off-by: Tana M Berry * fixed last title --------- Signed-off-by: Jens Langhammer Signed-off-by: Tana M Berry Co-authored-by: Tana Berry Co-authored-by: Jens Langhammer --- .../image1.jpg | Bin 0 -> 64698 bytes .../item.md | 101 ++++++++++++++++++ 2 files changed, 101 insertions(+) create mode 100644 website/blog/2023-06-13-building-apps-with-scale-in-mind/image1.jpg create mode 100644 website/blog/2023-06-13-building-apps-with-scale-in-mind/item.md diff --git a/website/blog/2023-06-13-building-apps-with-scale-in-mind/image1.jpg b/website/blog/2023-06-13-building-apps-with-scale-in-mind/image1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1878414920e6dc67353fea2766db78f4f9480d6b GIT binary patch literal 64698 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 NYr$Na@M>3s|JhxKZbtwB literal 0 HcmV?d00001 diff --git a/website/blog/2023-06-13-building-apps-with-scale-in-mind/item.md b/website/blog/2023-06-13-building-apps-with-scale-in-mind/item.md new file mode 100644 index 000000000..7d86b4e1b --- /dev/null +++ b/website/blog/2023-06-13-building-apps-with-scale-in-mind/item.md @@ -0,0 +1,101 @@ +--- +title: "Building Apps with Scale in Mind: Key Considerations and Strategies" +slug: 2023-06-13-building-apps-with-scale-in-mind +authors: + - name: Jens Langhammer + title: CTO at Authentik Security Inc + url: https://github.com/BeryJu + image_url: https://github.com/BeryJu.png +tags: + - blog + - scalability + - app development + - sharding + - distributed systems + - performance +hide_table_of_contents: false +image: ./image1.jpg +--- + +When building apps with scale in mind, the fundamentals involve designing and developing applications in a way that allows them to handle increased user demand, larger data volumes, and growing functionality without compromising performance or stability. Scaling an application effectively requires careful planning, architecture design, and the use of scalable technologies. This blog will explore some key considerations and strategies for building apps for scalability. + +![](./image1.jpg) + + + +The primary considerations when developing a scalable application include: + +- Architecture, both of the application and the system on which it runs +- System scalability, such as horizontal scaling and containerization +- Database scaling: a scalable app depends on scalable data access +- Asynchronous processing, with message queues and background processing +- Performance optimization, for code and queries +- Fault tolerance and failover, to keep your application operational + +Let’s look more closely at each of these topics, and also discuss the use of Cloud infrastructure, Agile development technologies, as well as testing and monitoring your application. + +## Modular and Scalable Architecture + +A modular architecture with separate application components, such as the user interface, business logic, and data storage, allows for independent scaling of different modules based on demand. Two popular architectures for applications that need scalability are MVC and microservices. + +### The Model-View-Controller Pattern + +A classic architecture with a layered approach like the Model-View-Controller (MVC) pattern enables the scaling of individual components without affecting the entire app.The MVC architecture has been around for decades now, but remains popular and effective. Both Laravel and Spring use MVC, and Ruby on Rails, Angular,js, and Django use variations of MVC. For Django, the architecture is referred to as MVT (Model-View-Template), and the data written to the template comes from the model layer, and is “controlled” by the Django framework itself. + +### Microservices Architecture + +Another option is to adopt a microservices architecture, where each app component runs as a separate service with its own data storage, deployment, and scaling capabilities. This approach can provide greater flexibility and resilience, as individual services can be scaled, updated, or replaced without affecting the entire app. While microservices architecture offers several advantages, it also introduces certain complexities. Managing multiple services can be challenging, as it requires coordination and can result in increased network latency. Ensuring data consistency across different services is another common concern. Here, with authentik, we chose to use a [mono-repo approach](https://goauthentik.io/blog/2023-04-22-monorepos-are-great), but perhaps the most well-known example of successful (and necessary) microservices architecture is [OpenStack](https://www.openstack.org/). + +## Horizontal Scaling for System Servers + +The architecture of your system also matters. Horizontal scaling means adding more resources, typically of the same type, to the system. Rapid, even automated, horizontal scaling ensures that your app keeps running, no matter the demand. Plan for horizontal scaling. By planning ahead and adding more servers or instances, you can distribute the workload across multiple resources, ensuring your app can easily handle high traffic. + +### Load Balancing + +To achieve scalability, design your app to support load balancing and implement cutting-edge techniques like clustering or containerization. These strategies will help you respond quickly to sudden surges in demand and keep your app running smoothly. Imagine the benefits for your business when you can seamlessly handle significant increases in user traffic, and then scale back down when the extra resources are no longer needed. Focus on building a scalable app that can effectively handle varying levels of demand and remain prepared for any scenario. + +## Clustering and Containerization + +Clustering and containerization have revolutionized the way we build and deploy applications. With clustering, you can combine multiple servers or instances to work together seamlessly, providing an unparalleled level of fault tolerance and load distribution. And with containerization, deploying your app across multiple environments has never been easier. Simply package your app and its dependencies into a portable container, and voila - you're ready to scale up and deploy across multiple servers or instances. Both of these technologies are incredibly flexible, making them perfect for any project, big or small. + +## Database Scalability + +Just as your environment and system needs to be scalable, so does your underlying database. There have been massive technological leaps in database scalability; take advantage of the following practices to ensure rapid and consistent data access for your application. + +### Distributed Databases and Sharding + +With the vast amount of data and high traffic typical of modern applications, selecting a distributed database that provides replication and sharding, such as PostgreSQL, is crucial. By distributing data across multiple servers, you can handle large volumes of information without any hiccups. Sharding provides yet further data distribution; chunks of data are stored on different database tables, or nodes, and optionally on different machines. Automated sharding means that a single database or server never gets overloaded; the data load is smoothly distributed and performance of the application is not compromised. + +## Caching Mechanisms + +Caching is an effective way to boost the performance of your website or application. By implementing caching mechanisms such as Redis or Memcached, you can store frequently accessed data in memory and reduce the load on your database. This means that your users will experience lightning-fast page loading times and smooth and seamless interactions with your platform. Caching is relatively simple to configure and can make a world of difference to your application's performance. + +## Asynchronous Processing + +The use of asynchronous processing allows multiple tasks (retrieve data from a table, authenticate an ID, load an image) to process at a different time (not in synchrony) from each other, and not block another event. Obviously, removing chronological dependencies from as many tasks as possible can speed overall processing. + +### Message Queues and Background Processing + +By performing time-consuming or resource-intensive tasks asynchronously, you can create a more efficient and scalable app that won't slow down or crash. Utilize message queues such as RabbitMQ or Apache Kafka (or Redis' native message queueing, like we use here with authentik) along with background processing frameworks like Celery, to offload tasks to separate worker processes or services. Not only will this approach help maintain responsiveness even during peak usage, but it will also help your app scale as your user base grows. + +## Performance Optimization + +Obviously you should never overlook the importance of optimizing your application, both the code and database queries. + +### Code and Query Optimization + +By implementing techniques like caching, indexing, and query optimization, you can significantly improve response times and reduce resource usage. And that's not all - by utilizing monitoring and profiling tools, you can identify performance bottlenecks and optimize critical areas of your app for maximum efficiency. Results include faster load times, smoother user experiences, and a more streamlined and effective operation overall. + +## Fault Tolerance and Resilience + +Planning for failure scenarios and building fault-tolerant systems is a crucial aspect of app development. By implementing redundancy and failover mechanisms, you can ensure that your system remains operational even in the face of unexpected failures or disruptions. + +### Redundancy and Failover Mechanisms + +In addition to using distributed architectures, as we discussed above, another technique known as redundancy involves replicating data across multiple servers, and/or implementing backup systems. By spreading the workload and data across multiple resources, you eliminate single points of failure and increase system resilience. In the event of a failure, the workload can seamlessly shift to alternative resources, ensuring uninterrupted service. + +It is also important to assess potential failure points and plan accordingly. By proactively planning for failure scenarios, you can minimize the impact of outages, avoid data loss, and maintain a smooth user experience. Building a fault-tolerant system is a critical step in creating a reliable app that can withstand unforeseen challenges and provide consistent service to users. + +## Putting it All Together + +We’ve covered the primary strategies and techniques for building scalable applications, from architecture to asynchronous processing. By incorporating these principles and strategies into the app development process, you can build robust, scalable applications that can handle increased user demand, adapt to growing requirements, and provide a seamless user experience even as the application grows in size and complexity.