[Open Source] #87 - Circled.me: Kiến trúc Cloud cá nhân tích hợp AI nhận diện khuôn mặt và Video Call với Go và WebRTC
Việc thay thế các dịch vụ lưu trữ đám mây khổng lồ như Google Photos hay iCloud bằng một giải pháp tự host (self-hosted) luôn đi kèm với thách thức: Làm sao để vừa có tính năng nhận diện khuôn mặt thông minh, vừa có khả năng gọi video thời gian thực mà vẫn đảm bảo tính riêng tư tuyệt đối? Circled.me (Community Server) xuất hiện như một lời giải hoàn chỉnh cho bài toán này.
Dưới góc độ kỹ thuật, Circled.me là một dự án Golang mẫu mực, kết hợp tinh tế giữa xử lý dữ liệu đa phương tiện, trí tuệ nhân tạo cục bộ và giao thức truyền thông hiện đại.
Github: https://github.com/circled-me/circled-server
🛠️ 1. Nền tảng công nghệ: Hiệu suất cao và Đa phương tiện
Circled.me tận dụng tối đa hệ sinh thái của Go để xử lý các tác vụ nặng nề nhất ngay tại server gia đình:
- Lõi API (Gin Gonic): Sử dụng framework Gin để xây dựng các RESTful API siêu nhanh, đảm bảo độ trễ thấp nhất khi duyệt hàng nghìn bức ảnh từ ứng dụng di động.
- Media Engine: Tích hợp FFmpeg để chuyển đổi video sang chuẩn Web và Exiftool để trích xuất Metadata (GPS, thông số máy ảnh) một cách chính xác nhất.
- Local AI (dlib & go-face): Điểm sáng của dự án là việc nhận diện khuôn mặt hoàn toàn cục bộ (Offline). Hệ thống sử dụng thư viện dlib để trích xuất đặc điểm khuôn mặt mà không cần gửi bất kỳ byte dữ liệu nào lên đám mây.
- Real-time Communication (WebRTC & WebSockets): Sử dụng thư viện Pion (WebRTC thuần Go) để thiết lập các cuộc gọi video P2P bảo mật.
🏗️ 2. Trụ cột kiến trúc: Modular Monolith và Async Processing
Kiến trúc của Circled.me được thiết kế để hoạt động ổn định trên cả các thiết bị có tài nguyên giới hạn như Raspberry Pi:
- Storage Abstraction Layer: Hệ thống sử dụng Interface để trừu tượng hóa lớp lưu trữ. Bạn có thể lưu ảnh trên ổ cứng cục bộ hoặc kết nối với các hệ thống S3-compatible (như MinIO hay AWS) mà không cần thay đổi logic nghiệp vụ.
- Pipeline Xử lý Bất đồng bộ: Khi một bức ảnh được upload, nó không được xử lý ngay lập tức để tránh làm nghẽn request. Thay vào đó, một Background Worker sẽ tuần tự thực hiện các bước: Lấy Metadata -> Reverse Geocoding (Địa chỉ) -> Tạo Thumbnail -> Nhận diện khuôn mặt.
- Internal TURN Server: Khác với nhiều ứng dụng chỉ cung cấp client, Circled.me tích hợp sẵn một TURN server nội bộ, giúp các cuộc gọi video có thể xuyên qua mọi lớp NAT/Firewall phức tạp của mạng gia đình.
🔄 3. Workflow: Vòng đời của một bức ảnh (Sequence Diagram)
Sơ đồ dưới đây mô tả quy trình từ lúc người dùng chụp ảnh đến khi ảnh được AI phân loại thông minh:
⚡ 4. Các kỹ thuật "Pro-level" trong mã nguồn
- Euclidean Distance in SQL: Để tìm kiếm các khuôn mặt tương tự, Circled.me không load toàn bộ dữ liệu lên RAM. Nó sử dụng công thức toán học tính khoảng cách Vector trực tiếp trong câu lệnh SQL, cho phép lọc hàng vạn khuôn mặt chỉ trong vài mili giây.
- Smart Geocoding Cache: Để tránh bị các dịch vụ bản đồ (như OpenStreetMap) chặn do gọi API quá nhiều, server tích hợp một lớp cache DB. Các tọa độ gần nhau sẽ được gom nhóm và tái sử dụng địa chỉ đã phân giải trước đó.
- ETag & Incremental Sync: Hệ thống sử dụng ETag dựa trên thời gian cập nhật cuối cùng. Khi ứng dụng di động yêu cầu danh sách ảnh, server chỉ gửi về dữ liệu mới nếu có thay đổi, giúp tiết kiệm tối đa băng thông và pin cho điện thoại.
⚖️ 5. So sánh chiến lược
| Tiêu chí | Circled.me | Google Photos | Immich (Open Source) |
|---|---|---|---|
| Bảo mật | Tuyệt đối (Local-first) | Thấp (Dữ liệu bị quét) | Cao |
| Nhận diện khuôn mặt | Local (dlib) | Cloud AI | Local (Machine Learning) |
| Video Call | Có tích hợp sẵn | Google Meet riêng | Không có |
| Tốc độ xử lý | Tối ưu cho máy yếu | Rất nhanh (Cloud) | Cần máy cấu hình mạnh |
✅ Kết luận: Tại sao Circled.me là hình mẫu lý tưởng?
Circled.me không chỉ là một ứng dụng lưu trữ; nó là một bài học về Hệ thống hóa sự riêng tư. Dự án chứng minh rằng chúng ta có thể mang những tính năng "thông minh" nhất của các Big Tech về vận hành ngay tại nhà mà không cần đánh đổi dữ liệu cá nhân.
Đối với các kỹ sư backend, nghiên cứu dự án này sẽ giúp bạn hiểu sâu về:
- Cách xây dựng Media Pipeline bền bỉ trong Go.
- Ứng dụng Vector Database (hoặc Vector Search) trong nhận diện khuôn mặt.
- Triển khai hạ tầng WebRTC đầy đủ (Signaling + TURN) cho giao tiếp thời gian thực.
Hy vọng bản phân tích này mang lại cho bạn những góc nhìn mới về tương lai của Cloud cá nhân. Đừng quên Upvote và Follow để theo dõi những bài phân tích mã nguồn "khủng" tiếp theo nhé!
All rights reserved
