Không cần phải giới thiệu nhiều về Stack Overflow (SO), bởi vì nó quá nổi tiếng và phổ biến trong cộng đồng developer và có nguyên cụm từ “The full stackoverflow developer” để mô tả những developer sống không thể thiếu website này 😀 System Engineer cũng không ngoại lệ đâu nhé!
Vậy bạn có bao giờ tự hỏi Đằng sau SO là 1 hệ thống được xây dựng như thế nào chưa? Bài viết của Nick Craver, Architecture Lead, Developer, Site Reliability Engineer & DBA Stack Overflow viết năm 2016 trên website của ổng sẽ bật mí cho chúng ta biết phía sau cô gái ấy có gì. Trong bài viết này mình sẽ tóm tắt lại những ý chính trong bài viết trên, chi tiết thì các bạn có thể theo dõi trực tiếp theo link phía trên nhé.
SO là 1 hệ thống khổng lồ, phục vụ hàng triệu người dùng, được thể hiện qua các con số biết nói như sau, số liệu vào năm 2016:
- 209,420,973 HTTP requests tới gateway ( load balancer)
- 66,294,789 page loads
- 1,240,266,346,053 bytes (1.24 TB) HTTP traffic gửi đến
- 569,449,470,023 bytes (569 GB) tổng nhận
- 3,084,303,599,266 bytes (3.08 TB) tổng gửi
- 504,816,843 SQL Queries (từ HTTP requests)
- 5,831,683,114 Redis hits
- 17,158,874 Elastic searches
- 3,661,134 Tag Engine requests
- 607,073,066 ms (168 hours) xử lý SQL queries
- 10,396,073 ms (2.8 hours) xử lý Redis hits
- 147,018,571 ms (40.8 hours) xử lý Tag Engine requests
- 1,609,944,301 ms (447 hours) xử lý trong ASP.Net
- 22.71 ms trung bình (19.12 ms trong ASP.Net) cho 49,180,275 truy cập trang câu hỏi
- 11.80 ms trung bình (8.81 ms trong ASP.Net) cho 6,370,076 truy cập trang home
Thật đáng kinh ngạc, để đạt được những con số này, thật không đơn giản, chúng ta cùng xem nhé. Bắt đầu nào!!
Dưới đây là sơ đồ logic tổng quan của hệ thống SO. Bao gồm:
- 4 Microsoft SQL Servers
- 11 IIS Web Servers
- 2 Redis Servers
- 3 Tag Engine servers
- 3 Elasticsearch servers
- 4 HAProxy Load Balancers
- 2 Networks ( Nexus 5596 Core + 2232TM Fabric Extenders)
- 2 Fortinet 800C Firewalls
- 2 Cisco ASR-1001 Routers
- 2 Cisco ASR-1001-x Routers
“Everything is redundant” mọi thứ đều dư thừa là tôn chỉ của SO trong xây dựng hệ thống, luôn luôn là vậy trong mọi cài đặt.
- Tất cả các server hay thiết bị mạng đều có tối thiểu 2x 10 Gbps cho card mạng.
- Tất cả các server đều có 2 nguồn cấp điện thông qua 2 hệ thống UPS được hỗ trợ bởi 2 hệ thống cấp điện và 2 nguồn tiện ích khác.
- Tất cả các server đều có dự phòng giữa 2 rack A và B.
- Tất cả các server và dịch vụ đều có dự phòng ở datacenter khác (Colorado backup cho New York).
Kết nối Internets
Mỗi request khi truy cập vào trang web, sẽ đến với DNS đầu tiên, ta có thể thấy là stackoverflow.com được trỏ tới 4 ip .69 (có vẻ như mấy ổng thích con số này), truy cập nhanh chóng phục vụ cho toàn bộ user trên toàn thế giới, sử dụng CloudFlare làm DNS, tuy nhiên thì vẫn có những server chạy DNS dự phòng cho trường hợp có sự cố xảy ra.
Sau đó request sẽ đi đến từ 1 trong 4 nhà cung cấp mạng và đi qua 1 trong 4 router tương ứng. SO sử dụng đường truyền thì được cung cấp bởi 4 nhà mạng ISP tại New York đó là Level 3, Zayo, Cogent, và Lightower và sử dụng giao thức BGP để định tuyến. Tiếp đó sử dụng 2 cặp router ASR-1001 và ASR-1001-X và mỗi cái thì gắn 2 nhà mạng dưới dạng active/active và băng thông của mỗi line là 10Gbps.
Tiếp đó, request sẽ được đón nhận tại load balancer.
Haproxy
Haproxy được dùng làm load balancer, đang chạy version 1.5.15 trên Centos 7 và sẽ sớm chuyển sang version 1.7 có hỗ trợ http/2. Tất cả các traffic TLS(SSL) đều được chặn và xử lý tại đây.
Khác với những server khác, sử dụng 2 interface 10 GBps chạy LACP, thì server LB này có 1 interface dành cho external và 1 dành cho DMZ, có thể giải thích là 1 card public, 1 card private. Với bộ nhớ từ 64GB trở lên để cache lại TLS và SSL.
Việc cài đặt haproxy tương đối đơn giản, chỉ cần bắt đúng Host header và route chúng tới backend dựa trên ip và domain từ DNS.
Web Tier (IIS 8.5, ASP.Net MVC 5.2.3, và .Net 4.6.1)
Load balancer sẽ đá các request xuống 9 web server primary chạy production và 2 server phụ dành cho môi trường dev/staging. Các site trên IIS cụ thể cho 2 môi trường như sau:
Các web server như sau:
Service Tier (IIS, ASP.Net MVC 5.2.3, .Net 4.6.1, and HTTP.SYS)
Phía dưới của các web tier đó chính là các service chạy dưới IIS 8.5 trên Windows 2012 R2. Các serivce này chỉ chạy và xử lý nội bộ và phục vụ cho web server. Có 2 dịch vụ lớn đó là “Stack server” chạy trên HTTP.SYS và Providence API chạy trên IIS.
Mời các bạn theo dõi tiếp ở part 2
Bài viết ở trên còn nhiều trúc trắc do khả năng đọc hiểu của mình còn chưa tốt, nên mong nhận được sự góp ý của mọi người để mình có thể viết tốt hơn. Thanks.