Phần lớn ứng dụng hiện nay đặt dữ liệu trên máy chủ và coi máy bạn chỉ là màn hình hiển thị. Mất mạng là mất việc; dịch vụ đóng cửa là mất dữ liệu; nhà cung cấp đổi giá là bạn phải theo. Local-first đảo ngược thứ tự đó: dữ liệu sống ở máy bạn, còn đám mây chỉ là một bản sao để đồng bộ.
Đây không phải ý tưởng mới — phần mềm máy tính để bàn thời trước vốn hoạt động như vậy. Cái mới là làm sao giữ được sự độc lập đó mà vẫn có đồng bộ nhiều thiết bị và cộng tác thời gian thực, những thứ đã khiến chúng ta chấp nhận đánh đổi để lên đám mây.
Điều kiện của một ứng dụng local-first
- Mở lên dùng được ngay, không màn hình chờ mạng, không "đang kết nối".
- Dữ liệu nằm ở máy người dùng, ở một định dạng mà công cụ khác đọc được — không bị nhốt trong một cơ sở dữ liệu chỉ nhà cung cấp mở được.
- Đồng bộ nhiều thiết bị là tuỳ chọn, và khi có xung đột thì tự hợp nhất thay vì bắt người dùng chọn "giữ bản nào".
- Dịch vụ ngừng hoạt động thì ứng dụng vẫn chạy tiếp — vĩnh viễn, không phải "trong 30 ngày ân hạn".
Vì sao bây giờ mới khả thi
Trở ngại lớn nhất luôn là đồng bộ. Hai thiết bị cùng sửa một tài liệu khi đang ngoại tuyến thì lúc gặp lại nhau hợp nhất kiểu gì? Cách cũ là để một máy chủ làm trọng tài — và thế là bạn lại phụ thuộc máy chủ.
Lời giải đến từ một lớp cấu trúc dữ liệu gọi là kiểu dữ liệu sao chép không xung đột: chúng được thiết kế sao cho các thay đổi có thể trộn theo thứ tự bất kỳ mà vẫn ra cùng một kết quả. Không cần ai phân xử, hai bản chỉ cần trao đổi những gì mỗi bên đã làm rồi tự hội tụ về cùng trạng thái. Đó chính là thứ biến local-first từ lý thuyết đẹp thành sản phẩm dùng được.
Nó trông như thế nào trong thực tế
Một vài ứng dụng đã đi theo hướng này đủ xa để thấy được: trình ghi chú lưu mỗi ghi chú thành một file văn bản thường trên máy bạn, đồng bộ chỉ là chép file; phần mềm quản lý chi tiêu giữ toàn bộ sổ sách ở máy khách và đồng bộ ngang hàng; công cụ vẽ cộng tác chạy mượt cả khi rút mạng rồi nối lại mà không mất nét nào. Điểm chung: rút mạng ra, chúng vẫn là phần mềm hoàn chỉnh.
Cái giá
Local-first không miễn phí, nó dời chi phí sang chỗ khác. Đồng bộ trong ứng dụng khó viết hơn nhiều so với gọi một API có sẵn — lập trình viên phải xử lý những trạng thái mà mô hình máy-chủ-là-chân-lý không bao giờ gặp. Tìm kiếm toàn văn trên khối dữ liệu lớn ngay tại máy khách cũng chậm hơn một máy chủ chuyên dụng có đánh chỉ mục. Và về kinh doanh, mô hình thuê bao khó biện minh hơn khi phần mềm vẫn chạy tốt lúc người dùng ngừng trả tiền — đây có lẽ là lý do thật sự khiến hướng này không phổ biến hơn.
Phép thử cho người dùng
Rất đơn giản: rút mạng ra rồi mở ứng dụng lên. Thứ gì còn dùng được là thứ bạn thật sự sở hữu. Thứ gì hiện màn hình trắng và một vòng xoay chờ kết nối là thứ bạn chỉ đang thuê quyền truy cập — và quyền đó chấm dứt vào ngày nhà cung cấp muốn.
Thảo luận