10 điểm bởi xguru 2024-12-18 | 13 bình luận | Chia sẻ qua WhatsApp
  • Một mẹo để giải quyết vấn đề chi phí và độ phức tạp khi vận hành cơ sở dữ liệu cho phát triển và kiểm thử
  • VPS, cloud VM, dịch vụ managed... đều phát sinh chi phí liên tục và phí lưu trữ
    • Việc cấu hình phức tạp, và ngay cả khi không sử dụng vẫn phải trả tiền cho tài nguyên
  • Giải pháp thay thế: vận hành cơ sở dữ liệu bằng GitHub Actions và S3
    • Chỉ chạy cơ sở dữ liệu tạm thời bằng GitHub Actions khi cần
    • Dùng AWS S3 hoặc bộ nhớ tương thích S3 để lưu trữ dữ liệu lâu dài
    • Khi workflow kết thúc, dữ liệu vẫn được giữ lại còn môi trường chạy bị xóa, giúp giảm chi phí
    • Có thể tạm thời mở truy cập công khai tới cơ sở dữ liệu từ Internet thông qua tunneling
  • Những điểm cần lưu ý khi sử dụng
    • Cách này chỉ phù hợp cho kiểm thử tích hợp ngắn hạn, demo tạm thời hoặc các tác vụ phát triển đơn giản
    • Không nên lạm dụng GitHub Actions như một nền tảng dịch vụ dài hạn
    • Nếu cần hosting cơ sở dữ liệu liên tục và dài hạn, nên thiết lập Self-Hosted Runner hoặc một dịch vụ cơ sở dữ liệu riêng
    • Cần vận hành tuân thủ chính sách sử dụng của GitHub

Ý tưởng cốt lõi

  • Tận dụng môi trường tính toán tạm thời của GitHub Actions
    • Chỉ chạy cơ sở dữ liệu tương thích MySQL khi cần, như một phần của workflow CI/CD hoặc kiểm thử
  • Lưu trữ dữ liệu bền vững bằng bộ nhớ tương thích S3
    • Lưu dữ liệu trên object storage như AWS S3 hoặc Cloudflare R2
    • Ngay cả khi môi trường tạm thời kết thúc, dữ liệu vẫn được lưu an toàn trong object storage
  • Tunneling để truy cập công khai
    • Tạm thời công khai cơ sở dữ liệu lên Internet cho mục đích kiểm thử hoặc demo
  • Phù hợp cho nhu cầu ngắn hạn
    • Cơ sở dữ liệu chỉ hoạt động trong thời gian workflow chạy
    • Sau khi workflow kết thúc, tài nguyên tính toán tạm thời sẽ được giải phóng, nên đây không phải giải pháp hosting lâu dài
  • Nếu muốn dùng hoàn toàn miễn phí
    • Có thể cân nhắc các dịch vụ tương thích S3 có free tier như Cloudflare R2

Trường hợp sử dụng

  • Kiểm thử tích hợp CI/CD: thực sự chạy môi trường tương thích MySQL để test rồi tắt
  • Demo tạm thời: nhanh chóng tạo một instance cơ sở dữ liệu có thể chia sẻ trong ngắn hạn
  • Tác vụ phát triển ngắn hạn: có thể kiểm thử trên môi trường cơ sở dữ liệu thực mà không cần bảo trì liên tục
  • Trường hợp không được khuyến nghị:
    • Hosting cơ sở dữ liệu dài hạn
    • Duy trì endpoint cơ sở dữ liệu công khai luôn hoạt động
    • Lách chính sách sử dụng GitHub Actions
  • Quan trọng: GitHub Actions không phải là nền tảng dịch vụ liên tục mà được thiết kế cho CI/CD. Nếu cần hosting cơ sở dữ liệu dài hạn, nên cân nhắc thiết lập Self-Hosted Runner

13 bình luận

 
nodelay 2024-12-20

Có vẻ đây là một cách sử dụng ngoài ý định ban đầu. Chỉ vì về mặt kỹ thuật là có thể không có nghĩa là nên cố ý dùng một phương pháp không được khuyến nghị như vậy.
Vì bài viết ghi là "mẹo vặt để giải quyết vấn đề chi phí và độ phức tạp khi vận hành cơ sở dữ liệu cho mục đích phát triển và kiểm thử", nên nếu có chút hiểu biết thông thường thì chắc mọi người sẽ tự cân nhắc và đánh giá được.

 
eajrezz 2024-12-19

Nghĩ đến định luật Hyrum (https://www.hyrumslaw.com/),
mình nghĩ đây là kiểu cách mà sớm muộn gì cũng sẽ có ai đó nghĩ ra.

Nhưng đúng như những gì các bạn khác đang nói, kiểu lạm dụng và dùng sai mục đích như thế này lại mang đến sự bất tiện lớn hơn.

 
iolothebard 2024-12-18

Đến khi GitHub Actions biến mất khỏi gói miễn phí của GitHub mới thấy… à… hóa ra đây là một thứ tốt…

 
freedomzero 2024-12-18

Tôi không nghĩ đó là lạm dụng.
Việc chạy một cơ sở dữ liệu thì gây tải cho máy chủ đến mức nào chứ... Với lại theo bài viết thì chỉ bật lên trong chốc lát thôi mà.

 
passerby 2024-12-19

Có vẻ có vấn đề khi không phải dựng DB thử nghiệm trong quá trình CI, mà lại cố tình làm chậm workflow để biến nó thành một DB được host. Định nghĩa của tạm thời cũng khá mơ hồ.

 
freedomzero 2024-12-19

"nhưng là chỉ khi cần như một phần của quy trình CI/CD hoặc workflow kiểm thử" phải không?

 
eclipsense 2024-12-18

Nếu là người dùng trả phí thì chắc vẫn ổn chứ nhỉ? Dù sao thì cũng sẽ dùng trong phạm vi dung lượng được cấp thôi.
Vượt quá thì sẽ bị tính phí.

 
savvykang 2024-12-18

https://docs.github.com/en/site-policy/…

Không rõ phạm vi của từ “ổn” đến đâu, nhưng tài liệu có nêu rõ rằng trong trạng thái chưa ghi rõ việc có tính phí hay không thì chỉ khuyến nghị sử dụng cho mục đích kiểm thử chương trình. Đương nhiên GitHub cũng có quyền như chấm dứt tài khoản nếu lạm dụng dịch vụ.

 
kandk 2024-12-18

Haha, thú vị phết. Không biết làm vậy thì tiết kiệm được bao nhiêu nhỉ..

 
bitofsky 2024-12-18

Đây là hành vi lạm dụng. Tôi cho rằng việc này chiếm dụng những tài nguyên lẽ ra phải được dùng cho các cá nhân thiện chí và mã nguồn mở, làm tăng chi phí vận hành các dịch vụ miễn phí do GitHub cung cấp, và cuối cùng chi phí đó sẽ bị chuyển sang cho tất cả mọi người.

 
bitofsky 2024-12-18

Cũng giống như hồi người ta dùng Actions để đào coin, nếu các hành vi kiểu này gia tăng thì chính sách chắc sẽ ngày càng bị siết chặt.
Muốn chặn tunneling thì sẽ phải hạn chế outbound, thành ra chỉ người dùng bình thường ngày càng bất tiện hơn thôi.

 
zuppiy 2024-12-18

Tôi đồng ý

 
xguru 2024-12-18

Nhìn các bình luận trên Hacker News thì có ý kiến chỉ trích rằng bản thân việc này là một kiểu lạm dụng.
https://news.ycombinator.com/item?id=42397167
Đây vốn đã là một bài viết công khai, và tôi đăng lại một lần để mọi người xem ở mức độ kiểu như “à, hóa ra chuyện này cũng làm được à?”.