Journey to the cloud part I: Migrating Stack Overflow Teams to Azure
Bài tóm tắt Stack Overflow 2023 4. Điều chỉnh Độ khó: Trung bình
Stack Overflow · 2023 · 4. Điều chỉnh · Độ khó: Trung bình — bài gốc
Phần 1 của series; phần 2 (pha 2–5, lift-and-shift lên Azure): Stack Overflow 2023.
Bối cảnh
- stackoverflow.com vẫn chạy on-premises (2023). Sản phẩm Stack Overflow for Teams (SaaS riêng tư cho doanh nghiệp) lúc đầu dùng chung hạ tầng và phần cứng với site public, vốn được thiết kế để chạy trên số máy ít nhất có thể (Stack Overflow 2016).
- Lý do rời phần cứng riêng (theo Stack Overflow):
- Teams tăng trưởng nên số máy cố định không còn đủ;
- không muốn kỹ sư phải tới data center sửa phần cứng;
- tuân thủ SOC 2 dễ hơn trên Azure (lần SOC 2 đầu năm 2020 rất tốn công);
- dễ dựng môi trường tạm để thử nghiệm.
- Kiến trúc multi-tenant hai tầng:
- DB trung tâm
Sitesliệt kê 173 site của mạng; mỗi site có DB nội dung riêng; site được chọn theo host; - Teams là tầng tenant thứ hai:
stackoverflow.com/c/yourteam; - dữ liệu riêng tư nằm trong vùng khoá kín TFZ (kỹ sư không truy cập được, trừ thủ tục "break-the-glass"), nhưng vẫn dùng chung DB
Sitesvới site public.
- DB trung tâm
Thay đổi chính
- Kế hoạch v1 (bỏ sau ~1 năm): chỉ đưa tier Business lên Azure để có SOC 2 nhanh, tier Free/Basic ở lại. Thất bại vì chia một sản phẩm ra hai nơi: user phải biết tài khoản mình ở đâu khi đăng nhập, và tích hợp Slack/Jira/Microsoft Teams không thể làm hai app riêng (app store không cho phép).
- Kế hoạch v2: đưa cả ba tier lên cùng lúc, chia 5 pha:
- chuyển Teams sang domain riêng
stackoverflowteams.com; - tách hạ tầng Teams khỏi site public ngay trong data center;
- dựng môi trường Azure làm bản sao chỉ đọc, data center vẫn là primary;
- chuyển Azure thành primary;
- cắt liên kết với data center.
- chuyển Teams sang domain riêng
- Pha 1 (bài này):
- thêm một site loại mới
TeamsShellSitelàm cha của mọi team, nhờ vậy tách thay đổi trải nghiệm khỏi thay đổi hạ tầng và bỏ được vài bước "big bang" không rollback được; - công cụ dời một team hoặc một nhóm team sang cha mới, và dời ngược lại được;
- thứ tự: team nội bộ trước ("nếu có gì vỡ thì mình chịu trước"), rồi team free → Basic → Business;
- redirect cho các URL cũ. Trang cài tích hợp Jira không chạy được với redirect (vì iframe), nên phải thay host header;
- sự cố: truy cập team đã dời qua URL cũ khiến code nạp lại toàn bộ cache site mỗi lần, một thao tác rất đắt, và "có lẽ đã làm sập site một hai lần".
- thêm một site loại mới
- Xong pha 1 vào 12/2022, sau gần một năm.
Vì sao
Xem phần Bối cảnh. Đáng chú ý: lý do là tuân thủ và vận hành, không phải hiệu năng hay chi phí phần cứng.
Bài học cho SWE
- Chia đôi một sản phẩm theo tier ra hai hạ tầng phá trải nghiệm user và tích hợp. Đôi khi "chuyển tất cả" lại đơn giản hơn "chuyển một phần".
- Biến bước big-bang thành nhiều bước nhỏ đảo ngược được bằng một lớp gián tiếp (ở đây là site cha mới).
- Cùng một công ty có thể chọn hai hướng cho hai sản phẩm: site public ở lại on-prem, SaaS doanh nghiệp lên cloud.
- Nhu cầu bảo mật và tuân thủ (dữ liệu riêng tư, SOC 2) là động lực kiến trúc ngang với scale.
Liên quan
Được nhắc tới trong
Công ty (1)