๐๐ผ๐ ๐ฑ๐ผ ๐๐ฒ ๐ฑ๐ฒ๐ฝ๐น๐ผ๐ ๐๐ฎ๐ณ๐ฒ๐น๐ ๐ผ๐ป ๐๐ฟ๐ถ๐ฑ๐ฎ๐๐?
You probably saw the massive outage on Windows systems caused by one CrowdStrike module update. The question is how to prevent these things, and here are some patterns that can help you there.
Deployment patterns are automated methods of introducing new application features to your users. Your ability to cut downtime depends on the deployment style you use. Some patterns also let you roll out extra functionality. Doing this allows you to test new features with a small group of users before making them available to everyone.
We have different options for deployment patterns:
๐ญ. ๐๐ฎ๐ป๐ฎ๐ฟ๐ ๐ฟ๐ฒ๐น๐ฒ๐ฎ๐๐ฒ๐
A canary release is a method of spotting possible issues before they affect all consumers. Before making a new feature available to everyone, the plan is to show it only to a select group of users. We monitor what transpires after the feature is available in a canary release. If there are issues with the release, we fix them. Once its stability has been established, we transfer the canary release to the actual production environment.
๐ฎ. ๐๐น๐๐ฒ/๐ด๐ฟ๐ฒ๐ฒ๐ป ๐ฑ๐ฒ๐ฝ๐น๐ผ๐๐บ๐ฒ๐ป๐๐
We have run two similar environments simultaneously, lowering risk and downtime. These surroundings are referred to as blue and green. Only one of the environments is active at any given moment. A router or load balancer that aids in traffic control is used in a blue-green implementation. The blue-green deployment also provides a quick means of performing a rollback. We switch the router back to the blue environment if anything goes wrong in the green environment.
๐ฏ. ๐๐ฒ๐ฎ๐๐๐ฟ๐ฒ ๐๐ผ๐ด๐ด๐น๐ฒ๐
Here, we can turn a switch on/off with feature toggles at runtime. We may roll out new software without exposing our users to any other brand-new or modified functionality. When we build new functionality, we can use feature toggles to enable continuous deployments by splitting releases from deployments.
๐ฐ. ๐/๐ ๐๐ฒ๐๐๐ถ๐ป๐ด
Two versions of an app are compared using A/B testing to see which one performs better. An experiment is like A/B testing. In A/B testing, we randomly present users with two or more page versions. Then, we use statistical analysis to determine which variant is more effective in achieving our objectives.
๐ฑ. ๐๐ฎ๐ฟ๐ธ ๐น๐ฎ๐๐ป๐ฐ๐ต๐ฒ๐
In a "dark launch," we introduce a new feature to a select group of users rather than the general public. These users are unaware that they are helping us test the functionality. We don't even point out the new functionality to them. It is nicknamed a "dark launch" for this reason. Users are introduced to the program to get feedback and test its effectiveness.
#technology #softwareengineering #programming
The main thing that hinders the progress (and ultimately, the breakthrough of PWAs) is the lack of support on iOS.
Apple has single-handedly frustrated the development of Progressive Web Apps for over a decade.
Think about that.
๐ฌ๐ผ๐๐ฟ ๐ฆ๐ผ๐ณ๐๐๐ฎ๐ฟ๐ฒ ๐๐ฟ๐ฐ๐ต๐ถ๐๐ฒ๐ฐ๐๐๐ฟ๐ฒ ๐๐ ๐๐น๐๐ฎ๐๐ ๐๐ผ๐บ๐ฝ๐น๐ฒ๐ ๐๐ ๐ฌ๐ผ๐๐ฟ ๐ข๐ฟ๐ด๐ฎ๐ป๐ถ๐๐ฎ๐๐ถ๐ผ๐ป
Have you heard about ๐๐ผ๐ป๐๐ฎ๐'๐ ๐๐ฎ๐? It is a theory created by computer scientist Melvin Conway in 1967. which says: "๐๐ณ๐จ๐ข๐ฏ๐ช๐ป๐ข๐ต๐ช๐ฐ๐ฏ๐ด, ๐ธ๐ฉ๐ฐ ๐ฅ๐ฆ๐ด๐ช๐จ๐ฏ ๐ด๐บ๐ด๐ต๐ฆ๐ฎ๐ด, ๐ข๐ณ๐ฆ ๐ค๐ฐ๐ฏ๐ด๐ต๐ณ๐ข๐ช๐ฏ๐ฆ๐ฅ ๐ต๐ฐ ๐ฑ๐ณ๐ฐ๐ฅ๐ถ๐ค๐ฆ ๐ฅ๐ฆ๐ด๐ช๐จ๐ฏ๐ด ๐ธ๐ฉ๐ช๐ค๐ฉ ๐ข๐ณ๐ฆ ๐ค๐ฐ๐ฑ๐ช๐ฆ๐ด ๐ฐ๐ง ๐ต๐ฉ๐ฆ ๐ค๐ฐ๐ฎ๐ฎ๐ถ๐ฏ๐ช๐ค๐ข๐ต๐ช๐ฐ๐ฏ ๐ด๐ต๐ณ๐ถ๐ค๐ต๐ถ๐ณ๐ฆ๐ด ๐ฐ๐ง ๐ต๐ฉ๐ฆ๐ด๐ฆ ๐ฐ๐ณ๐จ๐ข๐ฏ๐ช๐ป๐ข๐ต๐ช๐ฐ๐ฏ๐ด." In other words, the ๐๐๐ฟ๐๐ฐ๐๐๐ฟ๐ฒ ๐ผ๐ณ ๐ฎ ๐๐ผ๐ณ๐๐๐ฎ๐ฟ๐ฒ ๐๐๐๐๐ฒ๐บ ๐ถ๐ ๐ผ๐ณ๐๐ฒ๐ป ๐ถ๐ป๐ณ๐น๐๐ฒ๐ป๐ฐ๐ฒ๐ฑ ๐ฏ๐ ๐๐ต๐ฒ ๐๐๐ฟ๐๐ฐ๐๐๐ฟ๐ฒ ๐ฎ๐ป๐ฑ ๐ฐ๐ผ๐บ๐บ๐๐ป๐ถ๐ฐ๐ฎ๐๐ถ๐ผ๐ป ๐ฝ๐ฎ๐๐๐ฒ๐ฟ๐ป๐ ๐๐ถ๐๐ต๐ถ๐ป ๐๐ต๐ฒ ๐๐ฒ๐ฎ๐บ ๐ฏ๐๐ถ๐น๐ฑ๐ถ๐ป๐ด ๐ถ๐.
This can result in more optimal software architecture for the problem being solved, as the team may focus on their own organizational needs over the system's needs. This means ๐ฎ๐ป ๐ผ๐ฟ๐ด๐ฎ๐ป๐ถ๐๐ฎ๐๐ถ๐ผ๐ป ๐๐ถ๐๐ต ๐๐บ๐ฎ๐น๐น ๐ฑ๐ถ๐๐๐ฟ๐ถ๐ฏ๐๐๐ฒ๐ฑ ๐๐ฒ๐ฎ๐บ๐ ๐๐ถ๐น๐น ๐ฝ๐ฟ๐ผ๐ฑ๐๐ฐ๐ฒ ๐ฎ ๐บ๐ผ๐ฑ๐๐น๐ฎ๐ฟ ๐๐ฒ๐ฟ๐๐ถ๐ฐ๐ฒ ๐ฎ๐ฟ๐ฐ๐ต๐ถ๐๐ฒ๐ฐ๐๐๐ฟ๐ฒ, ๐๐ต๐ถ๐น๐ฒ ๐ฎ๐ป ๐ผ๐ฟ๐ด๐ฎ๐ป๐ถ๐๐ฎ๐๐ถ๐ผ๐ป ๐๐ถ๐๐ต ๐น๐ฎ๐ฟ๐ด๐ฒ ๐ฐ๐ผ๐น๐น๐ผ๐ฐ๐ฎ๐๐ฒ๐ฑ ๐๐ฒ๐ฎ๐บ๐ ๐๐ถ๐น๐น ๐ฝ๐ฟ๐ผ๐ฑ๐๐ฐ๐ฒ ๐ฎ ๐บ๐ผ๐ป๐ผ๐น๐ถ๐๐ต๐ถ๐ฐ ๐ฎ๐ฟ๐ฐ๐ต๐ถ๐๐ฒ๐ฐ๐๐๐ฟ๐ฒ.
In some broad sense, we could even say that ๐๐ฅ ๐๐๐๐ฎ๐น๐น๐ ๐ฑ๐ฒ๐ณ๐ถ๐ป๐ฒ๐ ๐๐ผ๐ณ๐๐๐ฎ๐ฟ๐ฒ ๐ฎ๐ฟ๐ฐ๐ต๐ถ๐๐ฒ๐ฐ๐๐๐ฟ๐ฒ๐. To mitigate this, we can use the ๐๐ป๐๐ฒ๐ฟ๐๐ฒ ๐๐ผ๐ป๐๐ฎ๐ ๐บ๐ฎ๐ป๐ฒ๐๐๐ฒ๐ฟ. This technique means we should involve software architects, engineers, and leaders in defining organizational structures. Doing it can lead to better software.
Yet, we can see that many organizations ignore Conway's law and think that organizational structures and software architecture are detached from each other, with surprises in the end.
Back to you, what are your experiences with Conway's Law?
Image credits: Manu Cornet (bonkersworld .net).
#softwarearchitecture
๐๐ผ๐ผ๐ธ๐ ๐๐๐ฒ๐ฟ๐ ๐ฆ๐ผ๐ณ๐๐๐ฎ๐ฟ๐ฒ ๐๐ป๐ด๐ถ๐ป๐ฒ๐ฒ๐ฟ ๐ ๐๐๐ ๐ฅ๐ฒ๐ฎ๐ฑ ๐ถ๐ป ๐ฎ๐ฌ๐ฎ๐ฐ.
You probably already noticed that I'm a big fan of reading. I usually read 3-4 books per month. There are two ways to learn from knowledgeable people: to work directly with them or to read what they have written. The first option is the best, yet it is often impossible to do. So, we have books written by people who are probably the best at this in the world at the time of writing.
If we look at the software engineering world, there are many gems here, but I will recommend the best books per area of work. These books will help you not only to become good at specific technology but to become a great software engineer overall.
๐ญ. ๐๐ฒ๐ป๐ฒ๐ฟ๐ฎ๐น:
๐น The Pragmatic Programmer by David Thomas and Andrew Hunt (https://t.co/NCSpr3ZhGb)
๐น Code Complete: A Practical Handbook of Software Construction (https://t.co/OXMYyabHma)
๐น Modern Software Engineering by David Farley (https://t.co/2X5eWCHcni)
๐น Software Engineering at Google (Free - https://t.co/GXZxoCbrva)
๐ฎ. ๐๐ผ๐ฑ๐ถ๐ป๐ด ๐ฝ๐ฟ๐ฎ๐ฐ๐๐ถ๐ฐ๐ฒ๐:
๐น Clean Code by Uncle Bob Martin (https://t.co/4Ml52XBKKb)
๐น Head First Design Patterns by Eric Freeman (https://t.co/4jXkPd8vcK)
๐น Refactoring by Martin Fowler (https://t.co/8fbR93LNy0)
๐ฏ. ๐๐ฎ๐๐ฎ ๐๐๐ฟ๐๐ฐ๐๐๐ฟ๐ฒ๐ ๐ฎ๐ป๐ฑ ๐ฎ๐น๐ด๐ผ๐ฟ๐ถ๐๐ต๐บ๐:
๐น Grokking Algorithms by Aditya Bhargava (https://t.co/1q2hWfaONO)
๐ฐ. ๐๐ฎ๐๐ฎ:
๐น Learning SQL by Alan Beaulieu (Free - https://t.co/44iy3v91JQ)
๐ฑ. ๐ง๐ฒ๐๐๐ถ๐ป๐ด:
๐น Growing OO Software by Tests by Steve Freeman (https://t.co/joi6Q8nm4W)
๐น TDD by Example by Kent Beck (https://t.co/IxVGfJymQu)
๐น Unit Testing Principles, Practices, and Patterns by Vladimir Khorikov (https://t.co/7VyFPkUpZS)
๐น The Art of Unit Testing by Roy Osherove (https://t.co/rqNoqJH49t)
๐ฒ. ๐๐ฟ๐ฐ๐ต๐ถ๐๐ฒ๐ฐ๐๐๐ฟ๐ฒ:
๐น Fundamentals Of Software Architecture by Mark Richards and Neil Ford (https://t.co/LOnF7783bl)
๐น A Philosophy of Software Design by John Ousterhout (https://t.co/rBeKHE0w6P)
๐น Clean Architecture by Uncle Bob Martin (https://t.co/fojqHumHo3)
๐น Domain-Driven Design Distilled by Vaughn Vernon (https://t.co/pT8GZQmrR5)
๐น Software Architecture the Hard Parts (https://t.co/K7AqvDOoSN)
๐ณ. ๐๐ถ๐๐๐ฟ๐ถ๐ฏ๐๐๐ฒ๐ฑ ๐๐๐๐๐ฒ๐บ๐:
๐น Understanding Distributed Systems by Roberto Vitillo (https://t.co/NmApvbFyQj)
๐น Designing Data-Intensive Applications by Martin Kleppman (https://t.co/2Rtjfs987o)
๐ด. ๐๐ฒ๐๐ข๐ฝ๐:
๐น DevOps Handbook by Gene Kim (https://t.co/EHmuVxZrKi)
๐น Continuous Delivery by Jez Humble and David Farley (https://t.co/tePOX3hfs3)
๐น Accelerate by Nicole Forsgren (https://t.co/HqHfEjAmB4)
๐ต. ๐ง๐ฒ๐ฐ๐ต-๐๐ฝ๐ฒ๐ฐ๐ถ๐ณ๐ถ๐ฐ:
๐น C# in Depth by Jon Skeet (https://t.co/u4M31XN673)
๐น Effective Java by Joshua Bloch (https://t.co/5yc8S6sMS3)
๐น Fluent Python (https://t.co/IO5IFIuXOb)
๐ญ๐ฌ. ๐ ๐ฎ๐ฐ๐ต๐ถ๐ป๐ฒ ๐น๐ฒ๐ฎ๐ฟ๐ป๐ถ๐ป๐ด:
๐น The Hundred-Page Machine Learning Book (https://t.co/31A2XuGKSR)
๐น Designing Machine Learning Systems (https://t.co/8hXFovtTzU)
๐ญ๐ญ. ๐๐ฒ๐ฎ๐ฑ๐ฒ๐ฟ๐๐ต๐ถ๐ฝ:
๐น The Five Dysfunctions of a Team by Patrick Lencioni (https://t.co/bKS3xhjCQv)
๐น Drive by Daniel Pink (https://t.co/GVyKMoAkUu)
๐น The Making of a Manager by Julie Zhuo (https://t.co/BiiOaJFmKz)
๐ญ๐ฎ. ๐ฃ๐ฒ๐ฟ๐๐ผ๐ป๐ฎ๐น ๐ฑ๐ฒ๐๐ฒ๐น๐ผ๐ฝ๐บ๐ฒ๐ป๐:
๐น How to Win Friends & Influence People (https://t.co/zKnkSvI4hv)
๐น Deep Work (https://t.co/bOLnphk2Z4)
#softwareengineering
Load Balancers improve the availability of a system.
But what if the load balancer goes down?
This is a common point that I see coming up during design discussions.
But it is often hand-waived away.
"Oh - the cloud provider will take care of it!"
And thatโs mostly true.
Modern cloud systems have reached a point where developers don't have to be concerned with such details.
But let's consider what a high-availability load balancer setup looks like.
Check it out below:
When you talk about a highly available load balancer, you are actually saying that you don't want the LB to become a single-point-of-failure.
And how do we remove a single point of failure?
By investing in redundancy, of course.
As per the above example, we can have multiple load balancer instances behind a Static IP.
[1] When a user accesses your website, the request goes through the external IP address to the active load balancer.
[2] If that LB instance fails for some reason, the failover mechanism will detect it
[3] It will automatically reassign the IP address to the passive LB instance that will take over.
๐ But how to setup this active-passive switch-over?
One simple way is to use the keepalived process on both the instances of the load balancer.
The keepalived process monitors the health of the load balancers and reassigns the IP address to the healthy instance.
Having said that, what if the Static IP faces issues due to DNS resolution problems or network issues?
Well - that's why 100% availability is elusive.
Ultimately, things can and will go wrong somewhere and sometime.
So - have you faced availability issues with Load Balancers?
And do you take any specific measures for managing availability at the infra level?
a data structure book that teaches you how to design a data structure by looking at the underlying hardware, workload and access patterns, locality - sounds awesome .. (via @eatonphil)
https://t.co/MFC3iEYKP5
"After reading this book, you will be able to reason about which existing data structure will perform best given a workload and the underlying hardware. In addition, you will be able to design new and possibly hybrid data structures to handle workloads with different composition, locality, and access patterns."
๐ฆ๐ผ๐ณ๐๐๐ฎ๐ฟ๐ฒ ๐๐ฒ๐๐ถ๐ด๐ป ๐ฅ๐ฒ๐ฑ ๐๐น๐ฎ๐ด๐
In his now-famous software design book, "๐ ๐ฃ๐ต๐ถ๐น๐ผ๐๐ผ๐ฝ๐ต๐ ๐ข๐ณ ๐ฆ๐ผ๐ณ๐๐๐ฎ๐ฟ๐ฒ ๐๐ฒ๐๐ถ๐ด๐ป," professor John Ousterhout from Stanford University explained the rationale behind many good and bad practices in software design with plenty of examples. Behind many good practices mentioned in the book, he also noted a few (14) critical red flags. The presence of these red flags in your system means you need help.
Here is the list of red flags:
๐ญ. ๐ฆ๐ต๐ฎ๐น๐น๐ผ๐ ๐บ๐ผ๐ฑ๐๐น๐ฒ: the interface for a class or method isn't much more straightforward than the implementation
๐ฎ. ๐๐ป๐ณ๐ผ๐ฟ๐บ๐ฎ๐๐ถ๐ผ๐ป ๐น๐ฒ๐ฎ๐ธ๐ฎ๐ด๐ฒ: a design decision is reflected in multiple modules
๐ฏ. ๐ง๐ฒ๐บ๐ฝ๐ผ๐ฟ๐ฎ๐น ๐ฑ๐ฒ๐ฐ๐ผ๐บ๐ฝ๐ผ๐๐ถ๐๐ถ๐ผ๐ป: the code structure is based on the order in which operations are executed, not on information hiding
๐ฐ. ๐ข๐๐ฒ๐ฟ๐ฒ๐ ๐ฝ๐ผ๐๐๐ฟ๐ฒ: An API forces callers to be aware of rarely used features to use commonly used features
๐ฑ. ๐ฃ๐ฎ๐๐-๐๐ต๐ฟ๐ผ๐๐ด๐ต ๐บ๐ฒ๐๐ต๐ผ๐ฑ: a method does almost nothing except pass its arguments to another method with a similar signature
๐ฒ. ๐ฅ๐ฒ๐ฝ๐ฒ๐๐ถ๐๐ถ๐ผ๐ป: a nontrivial piece of code is repeated over and over
๐ณ. ๐ฆ๐ฝ๐ฒ๐ฐ๐ถ๐ฎ๐น-๐ด๐ฒ๐ป๐ฒ๐ฟ๐ฎ๐น ๐บ๐ถ๐ ๐๐๐ฟ๐ฒ: special-purpose code is not cleanly separated from general-purpose code
๐ด. ๐๐ผ๐ป๐ท๐ผ๐ถ๐ป๐ฒ๐ฑ ๐บ๐ฒ๐๐ต๐ผ๐ฑ๐: two methods have so many dependencies that it's hard to understand the implementation of one without understanding the implementation of the other
๐ต. ๐๐ผ๐บ๐บ๐ฒ๐ป๐ ๐ฟ๐ฒ๐ฝ๐ฒ๐ฎ๐๐ ๐ฐ๐ผ๐ฑ๐ฒ: all of the information in a comment is immediately obvious from the code next to the comment
๐ญ๐ฌ. ๐๐บ๐ฝ๐น๐ฒ๐บ๐ฒ๐ป๐๐ฎ๐๐ถ๐ผ๐ป ๐ฑ๐ผ๐ฐ๐๐บ๐ฒ๐ป๐๐ฎ๐๐ถ๐ผ๐ป ๐ฐ๐ผ๐ป๐๐ฎ๐บ๐ถ๐ป๐ฎ๐๐ฒ๐ ๐ถ๐ป๐๐ฒ๐ฟ๐ณ๐ฎ๐ฐ๐ฒ: an interface comment describes implementation details not needed by users of the thing being documented
๐ญ๐ญ. ๐ฉ๐ฎ๐ด๐๐ฒ ๐ป๐ฎ๐บ๐ฒ: the name of a variable or method is so imprecise that it doesn't convey much useful information
๐ญ๐ฎ. ๐๐ฎ๐ฟ๐ฑ ๐๐ผ ๐ฝ๐ถ๐ฐ๐ธ ๐ฎ ๐ป๐ฎ๐บ๐ฒ: it isn't easy to come up with a precise and intuitive name for an entity
๐ญ๐ฏ. ๐๐ฎ๐ฟ๐ฑ ๐๐ผ ๐ฑ๐ฒ๐๐ฐ๐ฟ๐ถ๐ฏ๐ฒ: to be complete, the documentation for a variable or method must be extended.
๐ญ๐ฐ. ๐ก๐ผ๐ป๐ผ๐ฏ๐๐ถ๐ผ๐๐ ๐ฐ๐ผ๐ฑ๐ฒ: the behavior or meaning of a piece of code cannot be understood
How does this resonate with you? Do you agree with all of them? Write in the comments.
#softwaredesign
๐๐น๐ผ๐๐ฑ ๐๐ฒ๐๐ถ๐ด๐ป ๐ฃ๐ฎ๐๐๐ฒ๐ฟ๐ป๐ โ๏ธ
These design principles can be used to create dependable, scalable, and secure cloud systems. We can group ๐๐น๐ผ๐๐ฑ ๐๐ฒ๐๐ถ๐ด๐ป ๐ฃ๐ฎ๐๐๐ฒ๐ฟ๐ป๐ into three general groups, where each pattern can be applied to any distributed system, regardless of whether it is hosted on-prem or on some cloud platform.
The main Cloud Design Pattern groups are:
๐ ๐๐ฎ๐๐ฎ ๐ ๐ฎ๐ป๐ฎ๐ด๐ฒ๐บ๐ฒ๐ป๐
The main component of cloud applications is data management, which affects most of the quality criteria. Data is hosted across many servers and locations for performance, scalability, or availability. This could pose several difficulties. For instance, data synchronization between many places is often required to ensure data consistency.
This group has CQRS, Sharding, Index table, etc.
๐ ๐๐ฒ๐๐ถ๐ด๐ป ๐ฎ๐ป๐ฑ ๐๐บ๐ฝ๐น๐ฒ๐บ๐ฒ๐ป๐๐ฎ๐๐ถ๐ผ๐ป
Maintainability to make administration and development easier, reusability to let components and subsystems be used in various applications and contexts, and consistency and coherence in component design and deployment are all parts of good design. The quality and total cost of ownership of cloud-hosted applications and services are influenced by decisions made during the design and implementation phase.
In this (largest) group, we have Sidecar, Strangler Fig, etc.
๐ ๐ ๐ฒ๐๐๐ฎ๐ด๐ถ๐ป๐ด
Because cloud applications are distributed, a messaging infrastructure is needed to link the various parts and services. This infrastructure should be loosely coupled to allow for the largest scalability. Asynchronous messaging is popular and has many advantages but drawbacks, like sorting messages, managing poison messages, idempotency, and more.
This group has Priority Queue, Pub/Sub, etc.
๐ ๐ฆ๐ฒ๐ฐ๐๐ฟ๐ถ๐๐
Security protects information systems from hostile attacks by ensuring data confidentiality, integrity, and availability. Losing these guarantees might harm your company's operations, earnings, and reputation in the marketplace. Following accepted procedures and remaining watchful to spot and address vulnerabilities and active threats are necessary for maintaining security.
In this group, we have Federated Identity and Gatekeeper.
๐ ๐ฅ๐ฒ๐น๐ถ๐ฎ๐ฏ๐ถ๐น๐ถ๐๐
When we say reliability, we usually mean the availability and resiliency of the system. The percentage of time a system is operational and operating is called availability, expressed as a percentage of uptime. In contrast, a system's resilience is its capacity to handle and bounce back from purposeful and unintentional failures.
In this group, we have Bulkhead, Circuit breaker, etc.
Check the comments for all patterns (for Azure and AWS).
#technology #softwareengineering #programming #cloudcomputing #techworldwithmilan
CAP theorem: one of the most misunderstood terms
The CAP theorem is one of the most famous terms in computer science, but I bet different developers have different understandings. Letโs examine what it is and why it can be confusing.
CAP theorem states that a distributed system can't provide more than two of these three guarantees simultaneously.
Consistency: consistency means all clients see the same data at the same time no matter which node they connect to.
Availability: availability means any client which requests data gets a response even if some of the nodes are down.
Partition Tolerance: a partition indicates a communication break between two nodes. Partition tolerance means the system continues to operate despite network partitions.
The โ2 of 3โ formulation can be useful, but this simplification could be misleading.
1. Picking a database is not easy. Justifying our choice purely based on the CAP theorem is not enough. For example, companies don't choose Cassandra for chat applications simply because it is an AP system. There is a list of good characteristics that make Cassandra a desirable option for storing chat messages. We need to dig deeper.
2. โCAP prohibits only a tiny part of the design space: perfect availability and consistency in the presence of partitions, which are rareโ. Quoted from the paper: CAP Twelve Years Later: How the โRulesโ Have Changed.
3. The theorem is about 100% availability and consistency. A more realistic discussion would be the trade-offs between latency and consistency when there is no network partition. See PACELC theorem for more details.
--
Subscribe to our weekly newsletter to get a Free System Design PDF (158 pages): https://t.co/FIzCeaWsZV
Describing System Architecture: Summary
The series about the arc42 method to document system architectures is over.
As promised I leave you here the list of all the posts.
This one is a perfect candidate for a bookmark!
1. Introduction and Goals
https://t.co/yGDDyVNGd2
2. Constraints
https://t.co/UK8zapOi23
3. Context and scope
https://t.co/aepR3UX4b0
4. Solution strategy
https://t.co/xLx03v64tV
5. Building block view
https://t.co/Gx5OlWrAm0
6. Runtime view
https://t.co/7UKD98A5WH
7. Deployment view
https://t.co/3EYxz9oxb0
8. Concepts
https://t.co/Bja7ts3MLC
9. Architecture decisions
https://t.co/rDkwbInpWF
10. Quality
https://t.co/QIBMMiWvnD
11. Risks and technical debt
https://t.co/qnFRqFFPKW
12. Glossary
https://t.co/11lSXklfnP
In this series I used the official arc42 doc as a base. I added my experience with the template and the method hoping to have stimulated your curiosity.
In case you want to experiment with the template, here you can find the file versions in different formats, with or without explanations about the chapters.
https://t.co/WpJfxrAZdx
There are also other template in the main download page if you are interested: https://t.co/Pro1yRk9GK
Follow me, If you are interested in more Software system architecture, software engineering and team mechanics topic.
Progressive Web Apps can now:
- access the native file system
- work fully offline
- receive push notifications
- be installed to any device
- run background tasks
- schedule tasks while offline to be run when back online
- authenticate with passkeys (no password needed)
๐งต1/2
A must-watch video on const of JS by @addyosmani! Too much JS on app startup is one of the key things we need to solve as an industry to build better applications.
https://t.co/GRHSKhYloS
I wish more developers understood the constant stream of malware that is posted to npm, PyPI, and all package managers...
Here's just a taste of some crazy malware Socket identified in the past couple weeks...
All malware descriptions were FULLY WRITTEN by Socket AI.
Stack Overflow's Architecture: A Very Interesting Case Study
Stack Overflow is a multi-tenant monolithic app serving 2 billion monthly page views
It's on-prem, with only 9 IIS web servers
We did an in-depth research on this topic
Watch here: https://t.co/HyUr0OE8w9
In #Angular components you need to unsubscribe to prevent memory leaks. The most used way to unsubscribe is with the use of takeUntil and Subjects and adds boilerplate. With Angular 16 theres a new pipe takeUntilDestroy() you can use.