Version control helps manage and track changes to code over time, enabling retrieval of earlier versions and tracking who made changes to code. Collaboration enables multiple people to work on the same project without overwriting each other's work. Git is a distributed version control system designed to handle projects of any size with speed and efficiency by allowing every developer to have a full history of the codebase and facilitating powerful branching and merging. System design requires a systematic approach to architecting and building systems, considering infrastructure, hardware, software and data. High availability ensures operational performance, making sure the system is always up. Fault tolerance prevents downtime and service interruptions by immediately taking over when a component fails and requires no manual intervention.
The role of version control is to track changes in projects evolution, bug fixing, and understanding who made changes, when and why.
In Git, repository is a database storing full history of the projects files and revisions; and commit is a snapshot of files at a particular point in time, including a message describing the changes. Branch is a parallel version of the repository created to develop features, fix bugs or experiment new ideas.
CVCS and DVCS are Centralized and Distributed Version Control Systems respectively. CVCS contains all version files in a single server, while DVCS allows each user to have a fully-fledged repository on their local machine.
Writing clear and descriptive commit messages, committing changes frequently, and effective branching strategy all help in Git version control.
Cloud architecture offers the infrastructure to deploy, scale, and manage applications. High availability by ensuring operational performance and fault tolerance by preventing downtime are essentials in cloud architecture.
Load balancing, which distributes incoming traffic across multiple servers, is crucial in ensuring the smooth running of applications. High availability focuses on minimizing downtime for maintenance and all unexpected failures while fault tolerance is designed to prevent downtime and service interruptions.
Mastering Git and cloud architecture is essential for software development in transforming from local to cloud.
System design requires thinking of everything in the infrastructure, hardware, software, and data storage, including how data is stored and secured.
Horizontal Scaling involves increasing the number of machines in a system, allowing for limitless growth, high availability, and fault tolerance. Vertical Scaling, on the other hand, involves increasing the processing power of a single machine such as RAM, CPU, etc.