Evolvability

Định nghĩa

Evolvability là mức độ dễ dàng để thay đổi data system khi requirement, use case, platform, regulation hoặc load assumption thay đổi. Các tên gần nghĩa gồm extensibility, modifiability và plasticity.

Vì sao thay đổi là mặc định?

  • Team học được thông tin mới.
  • Use case chưa dự đoán trước xuất hiện.
  • Business priority và user request thay đổi.
  • Platform cũ được thay thế.
  • Legal hoặc regulatory requirement đổi.
  • Growth buộc architecture thay đổi.

Khác refactoring cục bộ

Agile, TDD và refactoring thường được mô tả ở phạm vi một application hoặc vài file. Evolvability của data system còn bao gồm:

  • thay đổi data flow xuyên service;
  • migration storage hoặc schema;
  • thay đổi API và guarantee;
  • chạy song song kiến trúc cũ và mới;
  • giữ service hoạt động trong quá trình chuyển đổi.

Twitter chuyển từ fan-out on read sang fan-out on write rồi hybrid là ví dụ: thay đổi không chỉ nằm ở code mà ở nơi computation xảy ra, cache được materialize và load được phân phối.

Điều kiện hỗ trợ evolvability

System dễ hiểu
+ abstraction và contract rõ
+ boundary ít coupling
+ quan sát được impact
+ migration chia nhỏ được
= thay đổi với effort và risk chấp nhận được

Evolvability gắn chặt với Simplicity và Operability: cần hiểu system để thay đổi, và cần feedback production để xác nhận thay đổi hoạt động đúng.

Câu hỏi review

  • Requirement nào có khả năng thay đổi nhất?
  • Change này đi qua những service, schema và guarantee nào?
  • Có thể migration dần thay vì big-bang không?
  • Kiến trúc hiện tại đang khóa assumption nào về load hoặc use case?

Liên kết