Summary
We have delved into two important architectures, client-server and P2P, with the context of solving the synchronization problem of a real-life example of a service contract between households.
We have covered how systems of each architecture can be bootstrapped, and which system quality attributes are required for each architecture.
We have also demonstrated in Kotlin code how the synchronization problem can be solved by each architecture.
We have described a couple of real-life systems that employ client-server and P2P architectures. We have also compared the two.
You should now have a brief understanding of the two architectures and what problems they solve, and also be able to reason which architecture can be used in different situations.
In the coming chapter, we are going to explore the architecture patterns often used in the frontend.