Giới thiệu
Bạn có bao giờ thắc mắc các nền tảng như Codeshare được xây dựng như thế nào không? Bạn đã bao giờ cố gắng giải quyết những thách thức khi mở rộng quy mô một dịch vụ như vậy trong khi vẫn duy trì trải nghiệm nhà phát triển tốt cho bản thân chưa? Khi quyết định xây dựng Bytecrowds, tôi phải học cách thực hiện tất cả những điều này. Thực hiện nghiên cứu nghiêm ngặt, sau đó là quyết định sử dụng Yjs để cung cấp khả năng chia sẻ văn bản, đã đến lúc phải chọn cơ sở dữ liệu. Với rất nhiều lựa chọn có sẵn trên thị trường, tôi đã thu hẹp danh sách bằng một từ khóa quan trọng:sự đơn giản
Tại sao phải Upstash?
Ngay cả trước khi khám phá Upstash, tôi đã quan tâm đến Redis® vì API đơn giản của nó. Tuy nhiên, việc sử dụng nó làm cơ sở dữ liệu chính sẽ gặp phải những thách thức như mở rộng quy mô (bạn cũng có thể cần điều này để lưu vào bộ nhớ đệm) và duy trì tính bền vững. Đồng thời, trước khi đảm bảo bất kỳ sự tài trợ nào, bạn phải rất cẩn thận về việc lập ngân sách cho một phần mềm nguồn mở. Bạn có trả tiền cho sức mạnh tính toán ngay cả khi đôi khi nó không được sử dụng không? Bạn có thể xử lý lưu lượng truy cập tăng đột ngột và sẵn sàng dành hàng giờ làm việc trên cơ sở hạ tầng thay vì nỗ lực xuất bản các tính năng mới, cải thiện các tính năng hiện có hoặc sửa một số lỗi không? Tôi thì không. Vì vậy tôi đã tìm thấy Upstash.
Sản phẩm Upstash Redis đáp ứng 3 tiêu chí thiết yếu của tôi:dễ sử dụng , dễ mở rộng quy mô và linh hoạt . Kết hợp điều đó với độ trễ thấp, sdk REST sẵn có để sử dụng trong các máy khách không có máy chủ(một yêu cầu cho cả Bytecrowds nữa), khả năng nhân rộng toàn cầu và kế hoạch trả tiền theo mức sử dụng cho sức mạnh tính toán, chỉ kể tên một vài ví dụ và bạn sẽ hiểu lý do tại sao tôi chọn nó cho dự án của mình.
Sử dụng Redis® trên ứng dụng
Hãy cùng tìm hiểu cách Redis® có thể được sử dụng làm cơ sở dữ liệu chính của dự án, đáp ứng nhu cầu của nhiều dịch vụ. Để hiểu ngữ cảnh, đây là sơ đồ quy trình của Bytecrowds:

Nó sử dụng Ably để đồng bộ hóa văn bản giữa các máy khách và một công cụ phân tích tùy chỉnh thu thập dữ liệu dựa trên địa chỉ IP của yêu cầu.
Bộ nhớ chính
Một bytecrowd có dạng hàm băm Redis® với các thuộc tính sau:
{
text: string,
language: string,
authorizedEmails: undefined || string array
} Chúng tôi cập nhật hàm băm khi một trong các thuộc tính của nó thay đổi, với độ trễ "x" giây giữa các lần cập nhật. Trong quá trình sản xuất, giá trị này hiện được đặt thành 100 mili giây.
Xác thực và ủy quyền
Xác thực
Vì Bytecrowds sử dụng Next.js nên một lựa chọn chắc chắn để tích hợp GitHub OAuth là Auth.js. May mắn thay, chúng tôi cũng có thể tận dụng bộ chuyển đổi Upstash để lưu trữ các phiên, cho phép chúng tôi sử dụng Redis® trên toàn bộ ứng dụng của mình.
Ủy quyền
Bytecrowds xử lý việc ủy quyền bằng cách tạo authorizedEmails theo yêu cầu trường không thể thay đổi đối với API sau khi được đặt. Một trong những điều tôi thích ở Redis® là vô số chức năng có sẵn dành cho các hoạt động thông thường cũng được thiết kế theo thuật toán để hoạt động hiệu quả. Để đưa ra một ví dụ, tất cả những gì chúng ta cần làm là kiểm tra xem authorizedEmails đã được đặt là sử dụng lệnh HEXISTS, có độ phức tạp O(1).
Phân tích
Bytecrowds sử dụng hệ thống phân tích xử lý hai loại dữ liệu:
- số liệu thống kê của một ngày, có dạng hàm băm Redis®, có tên như
year month dayvới các thuộc tính sau:
{
countries: string array,
hits: integer,
pages: string array,
uniqueVisitors: integer,
addresses: string array,
continents: string array
}
Ở đâu addresses là một dãy địa chỉ IP được mã hóa SHA256 dùng để xác định số lượng khách truy cập trang web duy nhất.
- 3 khóa có tên
continents,countries, vàpagescho các tập hợp được sắp xếp Redis® được sử dụng để lưu trữ dữ liệuBằng cách lưu trữ mọi chỉ số cùng với số lượng của nó ("điểm", đối với tập hợp được sắp xếp), chúng ta có thể dễ dàng truy vấn hoặc sắp xếp chúng bằng các lệnh như SORT hoặc SORT_RO. Sự đơn giản của Redis lại được thể hiện.
Nếu bạn tò mò về mã đằng sau điều này, hãy kiểm tra https://github.com/Bytecrowds/analytics/blob/main/src/index.js
Lưu ý :Trong trường hợp phức tạp hơn, bạn có thể áp dụng một số thay đổi cho hệ thống này, như lưu trữ dữ liệu thô trước khi xử lý và sử dụng một số loại công cụ xử lý luồng như Apache Kafka (Upstash cũng có thể xử lý vấn đề này, hãy kiểm tra tài liệu).
Xem trực tiếp
Bạn muốn xem Bytecrowds hoạt động? Truy cập https://www.bytecrowds.com, nhấp vào nút "bytecrowd mới" và mở liên kết trong nhiều tab. Khi bắt đầu viết, bạn sẽ thấy mã được sao chép trên tất cả các máy khách được kết nối.
Kết thúc
Không có gì ngạc nhiên khi trở thành người duy nhất duy trì hoạt động của một dự án nguồn mở là điều khó khăn, nhưng việc có các công cụ phù hợp và cơ sở hạ tầng tự động mở rộng quy mô có thể là sự hỗ trợ tuyệt vời giúp bạn tiếp tục thực hiện các dự án tuyệt vời mà không phải lo lắng về lưu lượng truy cập tăng đột biến. Bạn đã bị thuyết phục để dùng thử Upstash Redis® chưa? Đăng ký tài khoản miễn phí, không cần thẻ tín dụng.
Để xem mã đầy đủ, hãy kiểm tra kho GitHub. Nếu bạn có bất kỳ câu hỏi hoặc phản hồi nào về bài viết này, hãy liên hệ với tôi theo địa chỉ tudor.zgimbau@gmail.com.