Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

Sử dụng Celery cho Thời gian thực, Truy vấn API bên ngoài đồng bộ với Gevent

Tôi sẽ cố gắng trả lời càng nhiều câu hỏi càng tốt.

Có thể (và nên làm điều này) bằng cần tây không?

Có, bạn có thể

Tôi đang sử dụng django. Tôi có nên thử dùng django-celery thay cho cần tây không?

Django hỗ trợ tốt cho cần tây và sẽ giúp cuộc sống dễ dàng hơn nhiều trong quá trình phát triển

Mỗi một trong những nhiệm vụ đó có thể sinh ra các nhiệm vụ khác - chẳng hạn như ghi nhật ký những gì vừa xảy ra hoặc các loại phân nhánh khác. Điều này có khả thi không?

Bạn có thể bắt đầu các nhiệm vụ phụ từ việc thực hiện một nhiệm vụ với ignore_result =true chỉ để xảy ra các tác dụng phụ

Có thể các tác vụ đang trả về dữ liệu mà chúng nhận được - tức là Kb dữ liệu có khả năng thông qua cần tây (màu đỏ nằm bên dưới trong trường hợp này) hay chúng nên ghi vào DB và chỉ chuyển các con trỏ tới dữ liệu đó?

Tôi khuyên bạn nên đặt kết quả trong db và sau đó chuyển id xung quanh sẽ làm cho nhà môi giới và công nhân của bạn hài lòng. Ít truyền / lấy dữ liệu hơn, v.v.

Mỗi tác vụ chủ yếu là I / O ràng buộc và ban đầu sẽ chỉ sử dụng thông tin từ chuỗi web để đưa ra các yêu cầu và bỏ qua thiết kế theo yêu cầu, nhưng hóa ra nó sẽ được sử dụng lại cho các thành phần khác. Cố gắng duy trì toàn bộ chuyến đi khứ hồi trong thời gian thực có lẽ sẽ yêu cầu nhiều công nhân đảm bảo rằng dung dịch gần hết trống. Hoặc là nó? Điều hành nhóm công nhân gevent có giúp được việc này không?

Vì quá trình bị ràng buộc nên gevent chắc chắn sẽ giúp ích ở đây. Tuy nhiên, mức độ đồng thời nên là bao nhiêu cho gevent pool'd worker, cũng là điều mà tôi đang tìm kiếm câu trả lời.

Tôi có phải viết các tác vụ cụ thể của gevent hay sẽ sử dụng pooldeal của gevent với mạng IO một cách tự động?

Gevent tự động vá lỗi con khỉ khi bạn sử dụng nó trong hồ bơi. Nhưng các thư viện mà bạn sử dụng sẽ hoạt động tốt với gevent. Ngược lại, nếu bạn phân tích cú pháp một số dữ liệu bằng simplejson (được viết bằng c) thì điều đó sẽ chặn các tập tin gevent khác.

Có thể chỉ định mức độ ưu tiên cho các nhiệm vụ nhất định không?

Bạn không thể chỉ định mức độ ưu tiên cụ thể cho các nhiệm vụ nhất định, nhưng định tuyến chúng đến các hàng đợi khác nhau và sau đó để các hàng đợi đó được lắng nghe bởi số lượng công nhân khác nhau. Càng nhiều nhân viên cho một hàng đợi cụ thể, mức độ ưu tiên của các tác vụ trên hàng đợi đó càng cao.

Còn về việc giữ cho chúng có trật tự?

Chuỗi là một cách để duy trì trật tự. Hợp âm là một cách tốt để tóm tắt. Cần tây chăm sóc nó, vì vậy bạn không phải lo lắng về nó. Ngay cả khi sử dụng gevent pool, cuối cùng vẫn có thể suy luận về thứ tự thực hiện các tác vụ.

Tôi có nên bỏ qua cần tây và chỉ dùng kombu không?

Bạn có thể, nếu trường hợp sử dụng của bạn không thay đổi thành thứ gì đó phức tạp hơn theo thời gian và cũng có thể nếu bạn sẵn sàng tự mình quản lý các quy trình của mình thông qua celeryd + supervisord. Ngoài ra, nếu bạn không quan tâm đến việc giám sát tác vụ đi kèm với các công cụ như celerymon, hoa, v.v.

Có vẻ như cần tây hướng nhiều hơn đến các "nhiệm vụ" có thể lâu hơn và không nhạy cảm về thời gian.

Cần tây cũng hỗ trợ các công việc theo lịch trình. Nếu đó là ý của bạn trong câu nói đó.

Tôi phát điên vì cố gắng giữ thời gian thực này?

Tôi không nghĩ vậy. Miễn là người tiêu dùng của bạn đủ nhanh, nó sẽ tốt như thời gian thực.

Tôi nên xem xét những công nghệ nào khác?

Đối với cần tây, bạn nên chọn kho lưu trữ kết quả một cách khôn ngoan. Đề nghị của tôi sẽ là sử dụng cassandra. Nó tốt cho dữ liệu thời gian thực (cả viết và truy vấn khôn ngoan). Bạn cũng có thể sử dụng redis hoặc mongodb. Họ đi kèm với tập hợp các vấn đề của riêng họ như một kho lưu trữ kết quả. Nhưng sau đó một chút điều chỉnh trong cấu hình có thể đi một chặng đường dài.

Nếu bạn muốn nói điều gì đó hoàn toàn khác với cần tây, thì bạn có thể xem xét asyncio (python3.5) và zeromq để đạt được điều tương tự. Tôi không thể bình luận thêm về điều đó.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Giới hạn độ dài danh sách trong redis

  2. Hết thời gian chờ giải cứu ::Lỗi từ Redis Gem (Ruby)

  3. Làm thế nào để Redis chạy trên Azure?

  4. Cách xóa Redis trên trình nghe 'tin nhắn'

  5. Redis py:khi nào sử dụng nhóm kết nối?