Software Architecture & Technology of Large-Scale Systems

Software Architecture & Technology of Large-Scale Systems

English | MP4 | AVC 1280×720 | AAC 44KHz 2ch | 256 lectures (25h 36m) | 9.26 GB

Learn Architecting Software Systems with High Performance, Scalability, Availability, Security using Modern Technologies

Architecting software systems is a skill that is in huge demand, but it is not a readily available skill. To understand why this skill is rare to find, let’s go through a few lines from Martin Fowler’s blog on architecture.

He says: Architecture is about the important stuff. Whatever that is. It means that the heart of thinking architecturally about software is to decide what is important, (i.e. what is architectural), and then expend energy on keeping those architectural elements in good condition. For a developer to become an architect, they need to be able to recognize what elements are important, recognizing what elements are likely to result in serious problems should they not be controlled.

It takes a number of years for a developer to learn enough to become an architect. This learning largely depends on the kind of opportunities that you get in your career. Often these opportunities are limited to specific areas of work only. However, to be an architect, you must possess extensive technical knowledge of as many areas as possible. You must understand all the complexities and challenges in different parts of a system. You need the ability to make upfront decisions by understanding various trade-offs. You should be able to foresee or anticipate critical problems that a system can face during its evolution.

This is where the ‘Developer To Architect’ course can be very useful for you. It assumes that you already have great development skills, and it builds from there. It extensively covers architecting non-functional properties of a system, handling of large-scale deployments, and internal working of popular open-source products for building software solutions.

To give you some details of what is specifically covered:

Architecting non-functional properties like Performance, Scalability, Reliability, Security.
Large-scale deployment and operations using Docker containers and Kubernetes.
Internal working of popular open-source products like Node.js, Redis, Kafka, Cassandra, ELK stack, Hadoop, etc for confidently architecting software solutions.

In short, this course will help you learn everything you need to become a ‘true’ architect in a very short period of time.

What you’ll learn

  • Architecting Software Systems and Solutions: We will start with a basic three tier application architecture which we will enhance as we move along.
  • How to build a technical stack by getting architectural insights into products like Nodejs, Redis, Cassandra, Kafka, Hadoop, Elastic Search, .. and many more
  • Non-Functional Requirements: How to design architecture considering Performance, Scalability, Reliability, and Security
  • Deployment of large scale production systems using tools like Docker & Kubernetes
Table of Contents

1 Developer To Architect
2 Introduction to Developer To Architect

3 Module contents overview
4 A reference software system for discussing performance
5 What is performance
6 How do performance problems look like
7 Performance principles
8 System performance objectives
9 Performance measurement metrics
10 Serial request latency
11 Network transfer latency
12 Minimizing network transfer latency
13 Memory access latency
14 Minimizing memory access latency
15 Disk access latency
16 Minimizing disk access latency
17 CPU processing latency
18 Minimizing CPU processing latency
19 Some common latency costs
20 Concurrency related latency
21 Amdahl’s law for concurrent tasks
22 Gunther’s universal scalability law
23 Shared resource contention
24 Minimizing shared resource contention
25 Minimizing locking related contention
26 Pessimistic Locking
27 Optimistic Locking
28 Compare and swap mechanism
29 Deadlocks
30 Coherence related delays
31 Caching
32 System architecture for performance
33 Caching for performance
34 HTTP Caching of static data
35 Caching of dynamic data
36 Caching related challenges
37 Summary
38 Performance presentation slides

39 Module contents overview
40 Performance vs Scalability
41 Vertical & Horizontal scalability
42 Reverse proxy
43 A reference software system for discussing scalability
44 Scalability principles
45 Modularity for scalability
46 Replication
47 Stateful replication in web applications
48 Stateless replication in web applications
49 Stateless replication of services
50 Database replication
51 Database replication types
52 Need for specialized services
53 Specialized services – SOAPREST
54 Asynchronous services
55 Asynchronous processing & scalability
56 Caching for scalability
57 Vertical partitioning with micro-services
58 Database partitioning
59 Database partitioning selection
60 Routing with database partitioning
61 Methods for horizontal scalability
62 Dealing with large scale systems
63 Load balancing multiple instances
64 Discovery service and load balancing
65 Load balancer discovery
66 HLB vs SLB
67 Layer-7 load balancers
68 DNS as load balancer
69 Global server load balancing
70 Global data replication
71 Auto scaling instances
72 Micro-Services Architecture
73 Micro-Services Motivation
74 Service Oriented Architecture
75 Micro-Services Architecture Style
76 Transactions in Micro-Services
77 Compensating Transactions – SAGA Pattern
78 Micro-services communication model
79 Event driven transactions
80 Extreme scalability with NoSQL and Kafka
81 Summary
82 Scalability presentation slides

83 Module contents overview
84 Failures in large scale distributed systems
85 Partial system failures
86 Reliability engineering topics
87 Reliability
88 Availability
89 High Availability
90 Fault Tolerance
91 Designing Fault Tolerance
92 Fault tolerant design
93 Redundancy
94 Types of redundancy
95 Single point of failures
96 Stateless component redundancy
97 Stateful component redundancy
98 Load balancer redundancy
99 Datacentre infrastructure as SPOF
100 Creating datacenter redundancy
101 Fault detection
102 Fault models
103 Health checks
104 External monitoring service
105 Internal cluster monitoring
106 Fault detection in a system
107 Recovering from failures
108 Stateless component recovery
109 Stateful Failovers
110 Load Balancer high availability
111 Database recovery with hot standby
112 Database recovery with warm standby
113 Database recovery with cold backups
114 High Availability in large scale systems
115 Failover best practices
116 System stability
117 Timeouts
118 Retries
119 Circuit Breaker
120 Fail Fast and Shed Load
121 Summary
122 Reliability presentation slides

123 Module contents overview
124 Security objectives
125 Network security
126 Symmetric key encryption
127 Public key encryption
128 Secure network protocol
129 SSL and TLS
130 Hashing
131 Digital signatures
132 Digital certificates
133 Chain of trust
134 TLSSSL handshake
135 Secure network channel
136 Firewalls
137 Network security
138 Identity management
139 Authentication and authorization
140 Authentication
141 Credentials transfer
142 Credentials verification
143 Stateful authentication
144 Stateless authentication
145 Single Sign-On
146 Access management
147 Role based access control model
148 Role based access example
149 Authorization
150 OAuth2 token grant
151 OAuth2 token grant – Code Flow
152 OAuth2 token grant – Password Flow
153 OAuth2 in a system
154 OAuth2 token types
155 Json Web Tokens
156 Token storage
157 Securing data at rest
158 Securing a Software System
159 Common vulnerabilities
160 SQL Injection
161 Cross Site Scripting
162 Cross Site Resource Forgery
163 Summary
164 Security presentation slides

165 Module contents overview
166 Large scale deployment challenges
167 Application deployment
168 Infrastructure deployment
169 System operations
170 Modern deployment solutions
171 Application deployment
172 Component deployment
173 Component deployment automation
174 Deployment with Virtual Machines
175 Isolation through virtual machines
176 Deployment with Containers
177 Docker containers
178 Infrastructure deployment
179 Infrastructure requirements
180 Provisioning and configuration
181 Deployment with containers on Cloud
182 Deployment with AWS cloud stack
183 Deployment with Kubernetes
184 Kubernetes lifecycle management
185 Kubernetes naming and addressing
186 Kubernetes scaling with multiple instances
187 Kubernetes load balacing
188 Kubernetes high availability
189 Kubernetes rolling upgrades
190 Kubernetes capabilities
191 Kubernetes deployment
192 Kubernetes services and workloads
193 Kubernetes architecture
194 System upgrades
195 Rolling updates
196 Canary deployment
197 Recreate deployment
198 Blue Green deployment
199 AB testing
200 Summary
201 Deployment presentation slides

Technology Stack
202 Module contents overview
203 Reference system for using tech platforms
204 Web applications
205 Solutions for web applications
206 Apache web server
207 Apache webServer architecture
208 Apache webserver scalability
209 Nginx webserver
210 Nginx architecture
211 Nginx as reverse proxy and cache
212 Web containers & spring framework
213 Jetty & Spring
214 Node.JS
215 Node.JS event loop
216 Cloud Solutions for web
217 Cloud storage
218 Cloud CDN
219 Services
220 Services solutions
221 Memcached
222 Memcached Architecture
223 Redis Cache & its architecture
224 Cloud caching solutions
225 RabbitMQ
226 RabbitMQ architecture
227 Kafaka architecture
228 Redis PubSub
229 Cloud MQ solutions
230 Datastores
231 Datastore solutions
233 RDBMS scalability architecture
234 NoSQL objectives & trade-offs
235 Amazon DynamoDB
236 DynamoDB architecture
237 Google BigTable
238 BigTable architecture
239 HBase
240 Cassandra
241 Cassandra features
242 MongoDB
243 MongoDB architecture
244 Analytics
245 Analytics solutions
246 Logstash architecture
247 Logstash data streaming architecture
248 Fluentd
249 Elasticsearch
250 Elasticsearch architecture
251 Hadoop HDFS
252 Map-Reduce
253 Apache Spark
254 Stream processing
255 Summary
256 Technology Stack presentation slides