Bối cảnh
- Wafris là một công ty tường lửa ứng dụng web mã nguồn mở, cung cấp client middleware cho Rails
- Client v1 ban đầu yêu cầu kho dữ liệu Redis cục bộ, nhưng nay đã phát hành client v2 sử dụng SQLite
- Bài viết này bàn về quá trình ra quyết định di chuyển từ Redis sang SQLite, các cân nhắc về hiệu năng và những thay đổi trong kiến trúc
Tóm tắt
- SQLite, Redis và RDBMS truyền thống (Postgres/MySQL) đều có ưu và nhược điểm riêng
- Các kho dữ liệu này không thể thay thế lẫn nhau hoàn toàn, và cố làm vậy có thể gây ra vấn đề
- Bài viết giải thích quá trình tái cấu trúc client v1 dựa trên Redis thành client v2 dựa trên SQLite
Điều gì buộc phải thay đổi này?
- Mục tiêu của Wafris là giúp nhà phát triển có thể bảo vệ trang web một cách dễ dàng
- Client v1 sử dụng kho dữ liệu Redis, nhưng nhiều người dùng gặp khó khăn với việc triển khai Redis
- Công ty đã chuyển sang SQLite để giảm gánh nặng phải trở thành quản trị viên Redis
Tốc độ là gì?
- Redis nhanh hơn RDBMS truyền thống, nhưng vẫn còn nhiều yếu tố phải quản lý
- Trong môi trường đám mây, độ trễ mạng là một vấn đề lớn
- SQLite có thể mang lại hiệu năng nhanh hơn nhờ giảm thời gian khứ hồi qua mạng
Giả định nguyên khối
- Nhiều ứng dụng phân tán gây ra vấn đề khi sử dụng Redis
- Kiến trúc đã được xem xét lại để giảm độ phức tạp khi dùng Redis
Áp dụng SQLite
- SQLite giúp giảm nút thắt cổ chai về network IO
- SQLite cạnh tranh với việc mở tệp (
fopen()), chứ không cạnh tranh với cơ sở dữ liệu client/server
Benchmark SQLite và Redis
- SQLite nhanh hơn Redis khoảng 3 lần trong một số trường hợp sử dụng nhất định
- Ngay cả khi chưa tính đến độ trễ mạng, SQLite vẫn nhanh hơn
Những gì còn thiếu trên biểu đồ
- Dù hiệu năng SQLite có kém hơn trong benchmark, trong môi trường thực tế nó vẫn có thể nhanh hơn do độ trễ mạng
- SQLite dễ mở rộng theo chiều ngang và giảm gánh nặng cài đặt, cấu hình cho người dùng
Xây dựng kiến trúc đồng bộ hóa
- Trong v1 (Redis), khi người dùng cập nhật rule, dữ liệu sẽ được cập nhật vào kho dữ liệu Redis
- Trong v2 (SQLite), client định kỳ kiểm tra các rule đã cập nhật và tải xuống cơ sở dữ liệu SQLite mới
Kiến trúc phân tán với SQLite
- Đồng bộ DB SQLite đến từng instance tính toán để giải quyết vấn đề nút thắt cổ chai của cơ sở dữ liệu
Kết luận
- Kiến trúc v2 dựa trên SQLite giúp nhiều trang web chống chịu được tấn công và duy trì trạng thái trực tuyến
- Nó giảm gánh nặng cho người dùng, đồng thời mang lại một Internet an toàn và được bảo mật tốt hơn
Tóm tắt của GN⁺
- Bài viết này giải thích quá trình di chuyển từ Redis sang SQLite và lý do đằng sau quyết định đó
- SQLite cải thiện hiệu năng bằng cách giảm độ trễ mạng, đồng thời giảm gánh nặng cài đặt và cấu hình cho người dùng
- Kiến trúc phân tán của SQLite giải quyết vấn đề nút thắt cổ chai của cơ sở dữ liệu
- Bài viết mang lại góc nhìn về cách triển khai tường lửa ứng dụng web sao cho dễ dàng và hoạt động nhanh chóng
1 bình luận
Ý kiến trên Hacker News
Có hứng thú với mô hình trong đó mỗi máy chủ ứng dụng sao chép tệp cơ sở dữ liệu SQLite và thay thế định kỳ
Độ trễ đọc/ghi của Redis tỷ lệ với số lượng khóa được truy vấn
Bộ dữ liệu trông có vẻ gồm 1,2 triệu mục, nhưng thực ra không lớn
Trong một hackathon nội bộ của Neon, họ đã viết một máy chủ Node.js chuyển đổi giao thức của Redis thành truy vấn Postgres
Tại RailsWorld 2023 có bầu không khí tiêu cực về Redis
SQLite có vẻ là một trường hợp sử dụng ngách mà nó hoạt động tốt ở phía máy chủ mà không cần sao chép
Có một dự án tên là Redka, triển khai Redis bằng SQLite
Câu trích dẫn hay nhất: "SQLite không cạnh tranh với cơ sở dữ liệu client/server. SQLite cạnh tranh với fopen()."
Redis nhanh hơn RDBMS truyền thống, nhưng cần được vận hành
Benchmarking là một nghệ thuật đen tối của việc tự đánh lừa bản thân bằng những con số cực kỳ chính xác