Taking PHP Seriously
Bài tóm tắt Slack 2016 2. Tăng trưởng Độ khó: Dễ
Slack · 2016 · 2. Tăng trưởng · Độ khó: Dễ — bài gốc
Bối cảnh
- Slack viết phần lớn logic server bằng PHP. Đây là lựa chọn lạ vào năm 2016, dù Facebook, Wikipedia, WordPress, Etsy… đều thành công với nó.
- Đây là bài bình luận/lập luận, không phải postmortem; gần như không có số liệu của chính Slack.
Thay đổi chính
- Lập luận chính: tách "PHP ngôn ngữ" (tệ) khỏi "PHP môi trường" (tốt). Ba ưu điểm của môi trường:
- Trạng thái: mỗi request bắt đầu từ con số không. Bug ở request t không ảnh hưởng request t+1, tức là có sẵn một dạng cô lập lỗi.
- Concurrency: mỗi request một luồng; muốn song song thì gọi HTTP bất đồng bộ (shared-nothing, copy vào/copy ra), an toàn hơn khoá + trạng thái chung.
- Workflow: "nghĩ, sửa, tải lại trang", không phải khởi động lại server. Năng suất cộng dồn qua vòng đời dự án.
- Thừa nhận các lỗi của ngôn ngữ: ép kiểu bất ngờ (
123 == "123foo"là true), ngữ nghĩa tham chiếu/giá trị lẫn lộn, triết lý "cố chạy tiếp bằng mọi giá" (chia cho 0 trả về false), thư viện chuẩn không nhất quán. - Đường nâng cấp:
- HHVM (JIT): Facebook báo hiệu quả CPU tăng 11,6 lần, Wikipedia 6 lần. Slack đã chuyển môi trường web sang HHVM và thấy latency giảm rõ ở mọi endpoint, nhưng chưa có số đo CPU so sánh tương đương.
- Hack: kiểu tĩnh dần dần (gradual typing), áp cho từng phần codebase; type checker chạy nền nên vẫn giữ workflow "tải lại trang". Lúc viết bài Slack mới bắt đầu chuyển sang Hack.
Vì sao
Theo Slack (tác giả): ưu điểm của môi trường (cô lập lỗi, concurrency an toàn, năng suất) lớn hơn tác hại của ngôn ngữ. Hack/HHVM cho một lộ trình thêm kiểu tĩnh và hiệu năng sau khi đã phát triển, chỉ ở chỗ đáng làm.
Bài học cho SWE
- Đánh giá công nghệ theo toàn bộ môi trường chạy và vòng lặp phát triển, không chỉ theo cú pháp.
- Cải tiến dần thay vì viết lại: gradual typing cho phép nâng chất lượng codebase lớn mà không phải dừng lại.
- Mô hình "mỗi request một trạng thái sạch" tự nhiên cô lập lỗi. Đây cũng là lý do Instagram cần pre-fork + copy-on-write (Instagram 2017), dù hai bài nói về hai runtime khác nhau.
Liên quan
Được nhắc tới trong
Chủ đề (1)
Công ty (1)
Bài tóm tắt (3)