Course Overview
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.
FAQ
FAQ area empty
Course curriculum
-
Module contents overview
Xem trước -
A reference software system for discussing performance
Xem trước -
What is performance
Xem trước -
How do performance problems look like
Xem trước -
Performance principles
Xem trước -
System performance objectives
Xem trước -
Performance measurement metrics
Xem trước -
Serial request latency
Xem trước -
Network transfer latency
Xem trước -
Minimizing network transfer latency
Xem trước -
Memory access latency
Xem trước -
Minimizing memory access latency
Xem trước -
Disk access latency
Xem trước -
Minimizing disk access latency
Xem trước -
CPU processing latency
Xem trước -
Minimizing CPU processing latency
Xem trước -
Some common latency costs
Xem trước -
Concurrency related latency
Xem trước -
Amdahl's law for concurrent tasks
Xem trước -
Gunther's universal scalability law
Xem trước -
Shared resource contention
Xem trước -
Minimizing shared resource contention
Xem trước -
Minimizing locking related contention
Xem trước -
Pessimistic Locking
Xem trước -
Optimistic Locking
Xem trước -
Compare and swap mechanism
Xem trước -
Deadlocks
Xem trước -
Coherence related delays
Xem trước -
Caching
Xem trước -
System architecture for performance
Xem trước -
Caching for performance
Xem trước -
HTTP Caching of static data
Xem trước -
Caching of dynamic data
Xem trước -
Caching related challenges
Xem trước -
Summary
Xem trước -
Performance presentation slides
-
Module contents overview
Xem trước -
Performance vs Scalability
Xem trước -
Vertical & Horizontal scalability
Xem trước -
Reverse proxy
Xem trước -
A reference software system for discussing scalability
Xem trước -
Scalability principles
Xem trước -
Modularity for scalability
Xem trước -
Replication
Xem trước -
Stateful replication in web applications
Xem trước -
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
Requirment
-
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
Outcomes
-
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
Instructor
Nguyễn Đình Cường
1.2
-
1 Student
-
329 Courses
-
1253 reviews
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!
View Details