Tôi nghi ngờ điều này thậm chí còn có thể, nhưng đây là vấn đề và giải pháp đề xuất (tính khả thi của các giải pháp đề xuất là đối tượng của câu hỏi này):
Tôi có một số "dữ liệu toàn cầu" cần phải có sẵn cho tất cả các yêu cầu. Tôi đang lưu giữ dữ liệu này cho Riak và sử dụng Redis làm lớp lưu trữ cho tốc độ truy cập (hiện tại ...). Dữ liệu được chia thành khoảng 30 khối logic, mỗi khoảng 8 KB.dai dẳng trong bộ nhớ Python đối tượng cho máy chủ nginx/uwsgi
Mỗi yêu cầu được yêu cầu để đọc 4 trong số 8KB khối này, dẫn đến 32KB dữ liệu được đọc từ Redis hoặc Riak. Đây là trong ADDITION cho bất kỳ dữ liệu yêu cầu cụ thể mà cũng cần phải được đọc (mà là khá một chút).
Giả sử thậm chí 3000 yêu cầu mỗi giây (đây không phải là máy chủ trực tiếp nên tôi không có số thực, nhưng 3000ps là giả định hợp lý, có thể nhiều hơn), điều này có nghĩa là 96KBps chuyển từ Redis hoặc Riak trong ADDITION cho các cuộc gọi khác không đáng kể được thực hiện từ logic ứng dụng. Ngoài ra, Python đang phân tích cú pháp JSON của các đối tượng 8KB này 3000 lần mỗi giây.
Tất cả điều này - đặc biệt là Python phải liên tục deserialize dữ liệu - có vẻ như một sự lãng phí hoàn toàn, và một giải pháp hoàn hảo nhã sẽ chỉ có các dữ liệu deserialized lưu trữ trong một trong bộ nhớ vật bản địa Python, mà tôi có thể làm mới định kỳ và khi tất cả dữ liệu "tĩnh" này trở nên cũ. Một lần trong một vài phút (hoặc giờ), thay vì 3000 lần mỗi giây.
Nhưng tôi không biết điều này có thể xảy ra hay không. Bạn thực sự cần một ứng dụng "luôn chạy" để nó lưu trữ bất kỳ dữ liệu nào trong bộ nhớ của nó. Và tôi biết đây không phải là trường hợp trong sự kết hợp nginx + uwsgi + python (so với một cái gì đó như nút) - dữ liệu trong bộ nhớ python sẽ KHÔNG được duy trì trên tất cả các yêu cầu với kiến thức của tôi, trừ khi tôi bị nhầm lẫn một cách khủng khiếp. Không may là đây là một hệ thống mà tôi đã "kế thừa" và do đó không thể thực hiện quá nhiều thay đổi về công nghệ cơ sở, cũng như tôi không am hiểu về cách kết hợp nginx + uwsgi + python hoạt động như thế nào khi bắt đầu Python xử lý và lưu giữ dữ liệu trong bộ nhớ Python - điều đó có nghĩa là tôi có thể bị nhầm lẫn với giả định của tôi ở trên!
Vì vậy, tư vấn trực tiếp về việc liệu giải pháp này sẽ làm việc + tài liệu tham khảo vào tài liệu mà có thể giúp tôi hiểu làm thế nào nginx + uwsgi + python sẽ làm việc trong điều kiện bắt đầu quy trình mới và cấp phát bộ nhớ, sẽ giúp rất nhiều .
Tái bút:
đã trải qua một số tài liệu cho nginx, uwsgi vv nhưng chưa hiểu hết được hậu quả mỗi lần sử dụng-trường hợp của tôi được nêu ra. Hy vọng thực hiện một số tiến bộ về điều đó trong tương lai
Nếu điều trong bộ nhớ COULD hoạt động, tôi sẽ đổi Redis, vì tôi đang lưu bộ nhớ CHỈ dữ liệu tĩnh tôi đã đề cập ở trên, trong đó. Điều này làm cho bộ nhớ cache Python trong bộ nhớ trong bộ nhớ còn hấp dẫn hơn nữa, hấp dẫn hơn cho tôi, giảm một phần chuyển động trong hệ thống và ít nhất BỐN chuyến đi khứ hồi theo yêu cầu.
Dữ liệu này trông như thế nào? Cấu trúc cứng nhắc như thế nào? Mức độ thường xuyên thay đổi? – abarnert
Tập hợp lớn các cặp khóa-giá trị với một số tham gia lồng nhau. Cấu trúc mẫu (được biểu thị bằng JSON): {key1: value1, key2: {subkey1: [value1, value2, value3], subkey2: value2}, key3: [value1, value2, value3]}. Vì vậy, một số lượng hợp lý của đa dạng trong dữ liệu, nhưng như tôi đã nói nó là khá tĩnh và tôi có thể chịu với việc cập nhật nó chỉ mỗi vài phút hoặc thậm chí mỗi 1 giờ. –