Software Architecture & Technology of Large-Scale Systems
Learn Architecting Software Systems with High Performance, Scalability, Availability, Security using Modern Technologies
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.
Khu vực Câu hỏi thường gặp trống
Module contents overview
Xem trướcA reference software system for discussing performance
Xem trướcWhat is performance
Xem trướcHow do performance problems look like
Xem trướcPerformance principles
Xem trướcSystem performance objectives
Performance measurement metrics
Serial request latency
Network transfer latency
Minimizing network transfer latency
Memory access latency
Minimizing memory access latency
Disk access latency
Minimizing disk access latency
CPU processing latency
Minimizing CPU processing latency
Some common latency costs
Concurrency related latency
Amdahl's law for concurrent tasks
Gunther's universal scalability law
Shared resource contention
Minimizing shared resource contention
Minimizing locking related contention
Pessimistic Locking
Optimistic Locking
Compare and swap mechanism
Deadlocks
Coherence related delays
Caching
System architecture for performance
Caching for performance
HTTP Caching of static data
Caching of dynamic data
Caching related challenges
Summary
Performance presentation slides
Module contents overview
Performance vs Scalability
Vertical & Horizontal scalability
Reverse proxy
A reference software system for discussing scalability
Scalability principles
Modularity for scalability
Replication
Stateful replication in web applications
Stateless replication in web applications
Stateless replication of services
Database replication
Database replication types
Need for specialized services
Specialized services - SOAP/REST
Asynchronous services
Asynchronous processing & scalability
Caching for scalability
Vertical partitioning with micro-services
Database partitioning
Database partitioning selection
Routing with database partitioning
Methods for horizontal scalability
Dealing with large scale systems
Load balancing multiple instances
Discovery service and load balancing
Load balancer discovery
HLB vs SLB
Layer-7 load balancers
DNS as load balancer
Global server load balancing
Global data replication
Auto scaling instances
Micro-Services Architecture
Micro-Services Motivation
Service Oriented Architecture
Micro-Services Architecture Style
Transactions in Micro-Services
Compensating Transactions - SAGA Pattern
Micro-services communication model
Event driven transactions
Extreme scalability with NoSQL and Kafka
Summary
Scalability presentation slides
Module contents overview
Failures in large scale distributed systems
Partial system failures
Reliability engineering topics
Reliability
Availability
High Availability
Fault Tolerance
Designing Fault Tolerance
Fault tolerant design
Redundancy
Types of redundancy
Single point of failures
Stateless component redundancy
Stateful component redundancy
Load balancer redundancy
Datacentre infrastructure as SPOF
Creating datacenter redundancy
Fault detection
Fault models
Health checks
External monitoring service
Internal cluster monitoring
Fault detection in a system
Recovering from failures
Stateless component recovery
Stateful Failovers
Load Balancer high availability
Database recovery with hot standby
Database recovery with warm standby
Database recovery with cold backups
High Availability in large scale systems
Failover best practices
System stability
Timeouts
Retries
Circuit Breaker
Fail Fast and Shed Load
Summary
Reliability presentation slides
Module contents overview
Security objectives
Network security
Symmetric key encryption
Public key encryption
Secure network protocol
SSL and TLS
Hashing
Digital signatures
Digital certificates
Chain of trust
TLS/SSL handshake
Secure network channel
Firewalls
Identity management
Authentication and authorization
Authentication
Credentials transfer
Credentials verification
Stateful authentication
Stateless authentication
Single Sign-On
Access management
Role based access control model
Role based access example
Authorization
OAuth2 token grant
OAuth2 token grant - Code Flow
OAuth2 token grant - Password Flow
OAuth2 in a system
OAuth2 token types
Json Web Tokens
Token storage
Securing data at rest
Securing a Software System
Common vulnerabilities
SQL Injection
Cross Site Scripting
Cross Site Resource Forgery
Summary
Security presentation slides
Module contents overview
Large scale deployment challenges
Application deployment
Infrastructure deployment
System operations
Modern deployment solutions
Component deployment
Component deployment automation
Deployment with Virtual Machines
Isolation through virtual machines
Deployment with Containers
Docker containers
Infrastructure requirements
Provisioning and configuration
Deployment with containers on Cloud
Deployment with AWS cloud stack
Deployment with Kubernetes
Kubernetes lifecycle management
Kubernetes naming and addressing
Kubernetes scaling with multiple instances
Kubernetes load balacing
Kubernetes high availability
Kubernetes rolling upgrades
Kubernetes capabilities
Kubernetes deployment
Kubernetes services and workloads
Kubernetes architecture
System upgrades
Rolling updates
Canary deployment
Recreate deployment
Blue Green deployment
A/B testing
Summary
Deployment presentation slides
Module contents overview
Reference system for using tech platforms
Web applications
Solutions for web applications
Apache web server
Apache webServer architecture
Apache webserver scalability
Nginx webserver
Nginx architecture
Nginx as reverse proxy and cache
Web containers & spring framework
Jetty & Spring
Node.JS
Node.JS event loop
Cloud Solutions for web
Cloud storage
Cloud CDN
Services
Services solutions
Memcached
Memcached Architecture
Redis Cache & its architecture
Cloud caching solutions
RabbitMQ
RabbitMQ architecture
Kafka architecture
Redis Pub/Sub
Cloud MQ solutions
Datastores
Datastore solutions
RDBMS
RDBMS scalability architecture
NoSQL objectives & trade-offs
Amazon DynamoDB
DynamoDB architecture
Google BigTable
BigTable architecture
HBase
Cassandra
Cassandra features
MongoDB
MongoDB architecture
Analytics
Analytics solutions
Logstash architecture
Logstash data streaming architecture
Fluentd
Elasticsearch
Elasticsearch architecture
Hadoop HDFS
Map-Reduce
Apache Spark
Stream processing
Summary
Technology Stack presentation slides
You are, or have been a good programmer, you can do code design, and write code in at least one programming language
You understand three tier architecture, and you broadly understand what web apps, services, and databases means
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
1.0
0 Học viên
105 Khóa học
1252 Đánh giá
Xin chào các bạn, tôi là Nguyễn Đình Cường, một lập trình viên và giảng viên đam mê công nghệ với hơn 15 năm kinh nghiệm trong ngành công nghiệp phần mềm. Tôi tốt nghiệp từ Bưu Chính Viễn Thông và đã từng làm việc cho một số công ty công nghệ hàng đầu như FPT Software và VinGroup. Với chuyên môn chính là phát triển ứng dụng web, tôi đã làm việc với nhiều công nghệ như HTML, CSS, JavaScript, React cho front-end và Node.js, Express, MongoDB cho back-end. Không chỉ dừng lại ở việc viết mã, tôi còn yêu thích tìm hiểu sâu về thiết kế hệ thống và kiến trúc phần mềm. Tôi tin rằng quá trình học lập trình không chỉ đơn thuần là lý thuyết, mà còn là sự trải nghiệm thực tế và giải quyết vấn đề. Trong các khóa học của mình, tôi cố gắng cung cấp cho học viên những bài giảng thú vị và dễ hiểu, cùng với các bài tập thực hành giúp củng cố kiến thức. Tôi hy vọng rằng qua các khóa học của mình, bạn sẽ không chỉ học được cách viết mã, mà còn phát triển tư duy lập trình và kỹ năng giải quyết vấn đề. Hãy cùng nhau khám phá thế giới lập trình và biến ý tưởng của bạn thành hiện thực! Nếu bạn có bất kỳ câu hỏi nào, đừng ngần ngại liên hệ với tôi. Tôi rất vui được hỗ trợ bạn trong hành trình học tập của mình!
Xem chi tiết