Tôi đang phát triển một dịch vụ web với Erlang. Độ trễ thấp là mục tiêu. Dịch vụ cung cấp một số chế độ xem của một tập hợp các tệp. Việc xây dựng các lượt xem này cần có thời gian, vì tôi phải đọc trong các tệp, phân tích cú pháp chúng dưới dạng CSV, lưu trữ các trường của chúng trong hồ sơ, v.v.Erlang: thiết kế một thành phần dịch vụ không thay đổi được nhưng chậm để bắt đầu
Cách tiếp cận ngây thơ là đọc lại các tệp này và thực hiện các biến đổi cần thiết cho mọi yêu cầu, vì vậy ứng dụng web hoàn toàn không có quốc tịch. Nhưng tôi lo ngại về độ trễ.
Một cách tiếp cận khác là tạo máy chủ (thực hiện hành vi gen_server
) chuẩn bị các chế độ xem này lúc khởi động và lưu trữ chúng trong bộ nhớ dưới dạng LoopData
, sau đó trả lại lượt xem khi cần thiết cho nhân viên web. Nhưng điều này làm giảm đồng thời, vì máy chủ này xử lý một yêu cầu tại một thời điểm.
Có mẫu thiết kế nào trong Erlang hỗ trợ thực hiện khởi tạo đắt tiền khi khởi động và cho phép truy cập đồng thời vào dữ liệu được khởi tạo không? (Điều quan trọng là rằng dữ liệu này là không thay đổi, vì vậy tôi không quan tâm về loại trừ lẫn nhau.)
Bạn đã thử giải pháp gen_server đơn và đã định cấu hình chưa? Tôi nghĩ rằng điều chính bạn đang xem xét đó là thời gian để tạo một bản sao của dữ liệu trong bộ nhớ. Tùy thuộc vào chính xác bao nhiêu đồng thời bạn cần, giải pháp đơn giản này có thể là đủ. –