Làm thế nào để hàng trăm kỹ sư và hàng chục đội phát triển có thể triển khai sản phẩm mỗi ngày mà không phụ thuộc lẫn nhau?
Thách thức lớn nhất không phải là hạ tầng, mà là tốc độ phát triển
Spotify phát triển rất nhanh. Số lượng người dùng tăng liên tục. Số lượng backend service ngày càng nhiều, số lượng nền tảng client (iOS, Android, Desktop, Web…) cũng mở rộng không ngừng. Đồng thời, số lượng squad (nhóm phát triển) cũng tăng theo từng năm. Khi quy mô tổ chức tăng lên, một vấn đề mới xuất hiện. Nếu mỗi lần một đội muốn deploy service mới đều phải chờ đội Infrastructure cấp máy chủ, chờ DBA tạo database hoặc chờ Operations cấu hình hệ thống, tốc độ phát triển sẽ giảm rất nhanh.Spotify đặt Autonomous Squad làm trung tâm
Một trong những triết lý nổi tiếng nhất của Spotify là Autonomous Squad. Mỗi squad giống như một startup nhỏ. Họ sở hữu toàn bộ vòng đời của một tính năng, từ frontend, backend cho tới dữ liệu và vận hành. Điều này giúp đội phát triển có thể tự đưa ra quyết định và triển khai sản phẩm mà không phải phụ thuộc quá nhiều vào các nhóm khác. Nhưng để autonomous thực sự hoạt động, chỉ trao quyền là chưa đủ. Họ còn cần một hạ tầng đủ tốt để mọi đội đều có thể tự phục vụ (self-service).Transparent Code: Mọi người đều có thể sửa code của nhau
Một ý tưởng khá thú vị của Spotify là Transparent Code Model. Toàn bộ source code của Spotify đều được chia sẻ nội bộ. Không có khái niệm “đây là code của team A nên team B không được sửa”. Nếu một squad bị chặn vì cần một thay đổi nhỏ ở service của đội khác, họ có thể tự sửa, tạo pull request và tiếp tục công việc thay vì phải chờ nhiều ngày. Dĩ nhiên, mỗi repository vẫn có owner chịu trách nhiệm review và bảo trì chất lượng code. Triết lý này giúp giảm đáng kể những điểm nghẽn trong quá trình phát triển.Self-service Infrastructure: Muốn gì thì tự tạo
Spotify tin rằng mọi tài nguyên hạ tầng nên được cung cấp dưới dạng self-service. Một squad không nên phải gửi ticket để:- Xin server
- Xin database
- Xin storage
- Xin queue
- Xin cấu hình
Chia hệ thống theo Feature thay vì Layer
Đây có lẽ là một trong những tư tưởng quan trọng nhất của Spotify. Thay vì chia team theo:- Frontend
- Backend
- Database
- Operations
Infrastructure phải giúp Developer chạy nhanh hơn
Sau khi chia hệ thống theo feature, câu hỏi tiếp theo là:Infrastructure cần làm gì để hỗ trợ các squad?Theo Spotify, platform không nên trở thành một điểm nghẽn mới. Ngược lại, nó phải giúp developer triển khai dịch vụ nhanh hơn, mở rộng dễ hơn và giảm tối đa các thao tác thủ công. Bài viết tập trung vào năm thành phần chính của backend infrastructure.
1
1. Provisioning: Triển khai ở đâu cũng giống nhau
Một service mới có thể chạy trong datacenter riêng của Spotify hoặc trên public cloud. Mục tiêu của platform là giảm tối đa sự khác biệt giữa hai môi trường này.Developer không cần quan tâm service đang chạy ở đâu. Họ chỉ cần triển khai ứng dụng, còn hạ tầng phía dưới sẽ đảm nhận việc cấp phát tài nguyên và cấu hình môi trường phù hợp.
2
2. Storage: Không có một database phù hợp cho mọi bài toán
Spotify không cố xây một hệ thống lưu trữ duy nhất. Thay vào đó, họ cung cấp nhiều lựa chọn như:
- Cassandra
- PostgreSQL
- Memcached
3
3. Messaging: Mọi service đều giao tiếp qua một lớp chung
Backend của Spotify sử dụng ba mô hình giao tiếp chính:
- Request/Reply
- Messaging
- Publish/Subscribe
4
4. Capacity Planning: Scale phải là chuyện bình thường
Lưu lượng truy cập Spotify tăng liên tục. Mỗi squad phải đảm bảo service của mình có thể xử lý được lượng traffic ngày càng lớn. Ban đầu, các đội có thể theo dõi hệ thống thủ công và tự mở rộng khi cần.Tuy nhiên, Spotify cũng xây dựng hạ tầng hỗ trợ auto scaling, dashboard và alert để giúp việc mở rộng diễn ra tự động hơn.Điều này cho thấy một tư duy khá thực tế:
- Auto Scaling rất hữu ích.
- Nhưng nó không thay thế hoàn toàn việc theo dõi và tối ưu hệ thống của con người.
5
5. Cô lập lỗi giữa các service
Khi số lượng microservice tăng lên, các service bắt đầu gọi lẫn nhau ngày càng nhiều. Nếu không cẩn thận, một service bị lỗi có thể kéo theo hàng loạt service khác. Spotify giải quyết bằng nhiều cơ chế bảo vệ:
- Rate Limiting
- Permission System
- Chạy các service trên những server hoặc máy ảo riêng biệt
- Giới hạn lưu lượng mặc định giữa các service
Open Source là một quyết định chiến lược
Spotify ưu tiên sử dụng phần mềm mã nguồn mở thay vì giải pháp thương mại. Lý do không chỉ nằm ở chi phí. Quan trọng hơn, họ có thể tự sửa, tối ưu và đóng góp trở lại cho cộng đồng khi gặp giới hạn về hiệu năng hoặc khả năng mở rộng. Theo bài viết, Spotify từng đóng góp cho nhiều dự án như Apache Cassandra và ZeroMQ vì đây đều là những thành phần cốt lõi trong hệ thống backend của họ.Những bài học đáng học từ Backend Infrastructure của Spotify
Điều thú vị nhất của bài viết không nằm ở Cassandra hay PostgreSQL. Bài học lớn hơn là cách Spotify thiết kế tổ chức và hạ tầng để hỗ trợ nhau. Một vài nguyên tắc rất đáng học là:Các nguyên tắc cốt lõi
- Chia hệ thống theo feature thay vì theo tầng kỹ thuật.
- Xây dựng Self-service Platform để developer không phải chờ đợi.
- Cung cấp nhiều lựa chọn về storage thay vì ép mọi workload dùng cùng một công nghệ.
- Coi Infrastructure là sản phẩm nội bộ, nơi developer chính là khách hàng.
- Thiết kế hệ thống sao cho các squad có thể phát triển độc lập và lỗi của một service không lan sang toàn hệ thống.