🤯 Cụm từ “sập server” chắc anh em đã nghe tới nhiều rồi. Kể cả những anh em mới đang là học sinh, sinh viên, chưa đi làm dự án thực tế bao giờ, cũng có thể đã từng đọc được trên các blog, hoặc xem video Youtube, TikTok nói đến cụm từ này.
Mới đây nhất, chắc đâu đó 1 hay 2 tháng trước, cộng đồng mạng được một phen nháo nhào vì Facebook bị sập. Zalo khi ấy kiểu:
Thế nên thực tế thì hệ thống dù lớn dù bé gì, trong quá trình vận hành kiểu gì cũng đã từng trải qua dăm ba lần “hắt hơi sổ mũi”. Nhẹ thì nó sập vài ba phút. Nặng thì tầm vài giờ. Còn báo đời nhất thì mất dữ liệu của khách hàng hoặc bay luôn database 😀
Tuy nhiên, các bạn đừng coi đó như việc hiển nhiên, như Dev gặp bug bình thường đâu nhá. Bởi vì hầu hết các công ty công nghệ lớn đều có 1 bản cam kết chất lượng dịch vụ (thuật ngữ chuyên ngành là Service Level Agreement).
Ví dụ như High Availability phải tầm 99.95% chẳng hạn.
– Tức là 1 tháng chỉ được phép sập tầm 22 phút, 1 năm chỉ được sập tầm 4.38 giờ.
– Nếu thời gian server bị sập vượt quá mức này, công ty đó sẽ bị mất uy tín và phải bồi thường vì vi phạm SLA (Theo lý thuyết là vậy, nhưng nhiều công ty ở ta thấy sập lia lịa mà không bồi thường bồi thủng gì nhỉ 😌 Chắc họ không có cam kết gì sất 😅)
🥵 Một trong những nguyên nhân gây ra sập server
Khi hệ thống của bạn được triển khai trên nhiều server khác nhau, sẽ có trường hợp 1 trong các server đó bị quá tải đến mức tèo luôn, do có quá nhiều request dồn vào đây. Trong khi các server khác thì lại chẳng có ma nào gọi tới.
Để giải quyết sự không hiệu quả này, các dự án thường sẽ triển khai thêm load balancer (bộ cân bằng tải) đứng đằng trước, để phân phối các request đều đặn đến các server. Giúp tối ưu hóa việc sử dụng tài nguyên, cải thiện hiệu suất của hệ thống.
🔑 Cách hoạt động của Load Balancer
Nhìn vào hình minh họa bên trên các bạn sẽ thấy, khi người dùng sử dụng ứng dụng, ứng dụng đó thay vì kết nối trực tiếp với các server, thì sẽ chuyển sang kết nối trung gian qua địa chỉ public IP của Load Balancer.
Ngoài ra, để bảo mật tốt hơn, kết nối giữa Load Balancer và các server, cũng như giữa các server với nhau, sẽ sử dụng địa chỉ private IP.
Private IP là địa chỉ IP chỉ có thể truy cập giữa các máy chủ trong cùng một mạng. Ví dụ như là chỉ có các máy tính, server trong cùng một mạng của công ty mình thiết lập mới có thể kết nối được với nhau thôi. Còn máy của bạn không nằm trong mạng của công ty mình, thì sẽ không thể kết nối được.
Nôm na nó giống như kiểu anh em đi chơi điện tử, bỗng nhiên quán mất kết nối internet, nhưng vẫn có thể rủ nhau chơi Half-Life 🔫 hoặc Đế chế 🏰 thông qua mạng LAN của quán ấy.
Nhờ có Load Balancer mà các request có thể được phân phối đều tới cả 2 server.
– Ngoài ra, nếu Web Server 1 bị sập, tất cả request sẽ được chuyển đến Web Server 2. Đây chính là cách giúp duy trì High Availability của hệ thống. Sau đó bạn cũng hoàn toàn có thể bổ sung một Web Server mới vào để cân bằng tải trở lại.
– Một trường hợp khác, nếu lưu lượng truy cập trang web tăng nhanh và hai server không đủ để xử lý. Bạn chỉ cần thêm server vào và Load Balancer sẽ tự động phân phối request đến server mới đó.
Đương nhiên để làm được việc này thì các dự án cần setup hệ thống monitoring và notification, để đưa ra cảnh báo kịp thời khi gần đến giới hạn. Chứ mà để đến lúc “cụ đi chân lạnh toát” rồi thì đã quá trễ … ☠️
Lời nhắn
Bạn có thể tham khảo thêm những bài viết trong series “System Design” của mình trên blog này nhé. Hi vọng kiến thức này hữu ích với bạn.
Follow mình trên Facebook “CLB Lập trình – THPT Ngọc Tảo” hoặc kênh Youtube “Tờ Mờ Sáng học Lập trình” để cùng nhau học tập, chia sẻ những kiến thức công nghệ và lập trình hoàn toàn miễn phí nhé!
Facebook CLB Lập trình – THPT Ngọc Tảo: https://www.facebook.com/clb.it.ngoctao/
Youtube Tờ Mờ Sáng học Lập trình: https://www.youtube.com/@tmsanghoclaptrinh
Hẹn gặp lại 👋
Bạn có thể đọc thêm
Clean Architecture: A Craftsman’s Guide to Software Structure and Design – Robert C. Martin
Designing Data – Insensitive applications – Martin Kleppmann
System Analysis and Design – Alan Dennis, Barbara Haley Wixom, Roberta M. Roth
System Design Interview – Alex Xu
Modern Systems Analysis and Design – Joseph Valacich, Joey George
Head First Design Patterns – Eric Freeman, Elisabeth Robson
3 Responses
[…] đã chia sẻ trong những bài viết trước, chúng ta đã biết Load Balancer và Database Replication sẽ giúp cải thiện tính khả dụng (High Availability) của […]
[…] lệ phần trăm, với 100% có nghĩa là một service hoạt động liên tục mà không bị sập bao […]
[…] Việc này có thể được thực hiện bằng cách sử dụng sticky sessions trong hầu hết các Load Balancer. […]