Best practices can slow your application down

Bài tóm tắt Stack Overflow 2021 4. Điều chỉnh Độ khó: Dễ

Stack Overflow · 2021 · 4. Điều chỉnh · Độ khó: Dễ — bài gốc

Bối cảnh

  • Stack Overflow ra đời trên stack Microsoft (.NET, C#, SQL Server), mỗi server tốn thêm license, nên chiến lược từ đầu là scale up và làm code chạy thật nhanh để cần ít máy. Năm 2009: hai server thuê (một web, một DB), rồi bốn máy Jeff Atwood tự lắp đặt ở data center PEAK, Corvallis (Oregon).
  • Theo bài, năm 2008 làm một site Q&A cộng đồng ở quy mô này là bài toán "complex" (khung Cynefin): chưa có lời giải mẫu, chưa có chuyên gia. Ngày nay nó đã thành bài toán "obvious", nên nên theo best practice.

Thay đổi chính

  • Những gì đã đánh đổi để lấy hiệu năng:
    • dùng nhiều static method/field và memoization để giảm allocation, giảm pause GC; một số phần code "trông như C";
    • thay polymorphism và dependency injection bằng static field và service locator;
    • tự viết Dapper (micro-ORM) và StackExchange.Redis;
    • cache nhiều tầng (in-process và Redis).
  • Cái giá: code static khó thay thế lúc chạy, nên khó mock và khó viết unit test, càng khó làm TDD. Họ không viết unit test cho mọi tính năng, và theo bài, đã "test trên production" lâu năm nhờ cộng đồng meta rất tích cực.
  • Đổi hướng (2021): .NET nhanh hơn nhiều nên hiệu năng của code ứng dụng không còn là ưu tiên số một. Khi đã có khách trả tiền, bắt bug sớm rẻ hơn, nên đội chủ động viết thêm test và làm code dễ test hơn, chấp nhận trả dần nợ kỹ thuật.

Vì sao

Theo bài: thời gian và nguồn lực có hạn; khi một thứ cực quan trọng (hiệu năng), thứ khác (tách module, test tự động) phải lùi lại. Best practice là best, không phải bắt buộc: bài toán phức tạp hoặc hỗn loạn có thể cần cố ý phá quy tắc.

Bài học cho SWE

  • Một kiến trúc tối ưu hiệu năng ở thời điểm cần scale có thể thành nợ khi ưu tiên chuyển sang khả năng test, autonomy của team và tốc độ thay đổi.
  • Ghi rõ đánh đổi nào là có chủ đích và vì điều kiện gì; khi điều kiện đổi (framework nhanh hơn, có khách trả tiền) thì xem lại.
  • Bốn năm sau, chính các tối ưu này (giả định độ trễ dưới 30 ms, app biết tên server) là trở ngại lớn nhất khi lên cloud (Stack Overflow 2025).

Liên quan