7

Tài liệu appengine chính thức cho biết rằng nếu chúng ta đặt thuộc tính threadsafe thành true trong app.yaml thì appengine sẽ yêu cầu máy chủ đồng thời.Yêu cầu đồng thời trong Appengine Python

liên kết chính thức: https://developers.google.com/appengine/docs/python/python27/newin27#Concurrent_Requests

  • Liệu nó có nghĩa ứng dụng sẽ nhanh hơn (hơn 2,5) nếu chúng ta có sở hữu threadsafe true? Tài liệu chính thức/blog nói như vậy nhưng tôi đang tìm kiếm những trải nghiệm thế giới thực.

  • Ở mức cao, Làm thế nào nó hoạt động trong nội bộ? Ứng dụng của chúng tôi có được khởi tạo và tạo ra một trình xử lý mới cho mỗi yêu cầu không?

Trả lời

10

Bạn vẫn chỉ có một chuỗi cho mỗi yêu cầu - bạn không thể sinh ra.

Với luồng an toàn, Appengine sẽ chỉ định tuyến một yêu cầu đến một phiên bản. Vì vậy, nếu số lần yêu cầu mỗi giây lần để xử lý yêu cầu đến gần, Appengine sẽ quay lên một cá thể mới để xử lý chúng. Cái này tốn tiền. Với luồng an toàn, Appengine có thể định tuyến nhiều hơn một yêu cầu cho một cá thể.

Cho dù điều này sẽ giúp bạn hay không phụ thuộc vào ứng dụng của bạn và lưu lượng của bạn:

  1. Đầu tiên, tính yêu cầu trong nước mỗi giây/trung bình độ trễ. Nếu điều này là tốt dưới một, threadsafe sẽ không làm cho nhiều sự khác biệt một trong hai cách.
  2. Kiểm tra ứng dụng của bạn để tìm hiểu xem còn bao nhiêu thời gian chờ API (kho dữ liệu hoặc tìm nạp URL chẳng hạn). Nếu đây là một tỷ lệ lớn, thì luồng an toàn sẽ giúp giữ cho ví dụ của bạn được đếm ngược. Nếu không, nó sẽ không giúp được gì nhiều.

Quy tắc đơn giản là chuyển luồng an toàn trừ khi ứng dụng của bạn rất chuyên sâu về xử lý (ít chờ API).

+0

ans tuyệt vời! Một câu hỏi, tôi cảm thấy req/ms x ms/req ~ = số trường hợp hoạt động. Có bất kỳ tham chiếu nào mô tả chi tiết hơn về ước tính này không? – lucemia

4
  1. Điều đó không có nghĩa là ứng dụng của bạn sẽ nhanh hơn, yêu cầu vẫn được phân phát từ một chuỗi.
  2. Khi ứng dụng là thread an toàn, mỗi thể hiện có thể sinh ra nhiều luồng mỗi thread sẽ phục vụ một yêu cầu như được đề cập đến an toàn không thread trong đó mỗi cá thể có một yêu cầu phân phát luồng.
+0

Ứng dụng của tôi là chủ đề an toàn (không có trạng thái chia sẻ), tôi có nên sinh ra nhiều luồng để cải thiện hiệu suất không? Có ví dụ nào cho appengine không? – 18bytes

3

Python 2.5 vẫn nhanh hơn một chút, trên cơ sở theo yêu cầu, so với Python 2.7. Đó là một phần do sự trưởng thành của từng người. App Engine sử dụng các cơ chế khác nhau để hỗ trợ từng cơ chế. Chiến thắng với Python 2.7 là khả năng hỗ trợ các yêu cầu song song thay vì kéo lên các phiên bản mới với tốc độ mà Python 2.5 yêu cầu để xử lý các tải đột biến.

Câu hỏi "hoạt động như thế nào trong nội bộ" là câu hỏi mà bạn có thể sẽ không nhận được câu trả lời ở đây, nhưng có một số cuộc hội đàm từ Google I/O năm ngoái gợi ý về những gì chúng tôi làm và tại sao. Tìm kiếm youtube.com cho "công cụ ứng dụng".

0

Tôi đang thêm câu trả lời ở đây vì kết quả thực tế hiện tại của chúng tôi ngược lại với những gì chúng tôi mong đợi.

Sau khi giảm hiệu suất bền vững, chúng tôi đã thử chuyển đổi ứng dụng (Python) về chế độ không an toàn và rất ngạc nhiên khi thấy hiệu suất của chúng tôi được cải thiện khoảng 10x. Vì vậy, chúng tôi đã để nó đi. Nhóm hỗ trợ GAE của chúng tôi không thể giải thích cách này có thể.Lần cuối cùng chúng tôi lược tả, chúng tôi đã khá I/O ràng buộc với kho dữ liệu và trong lý thuyết nên vẫn còn nhận được rất nhiều thang máy từ đa luồng.

Vì vậy, từ kinh nghiệm của chúng tôi ... không chỉ không giả sử luồng sẽ nhanh hơn, nó có thể chậm hơn. Nếu ai đó biết làm thế nào điều này có thể được, xin vui lòng chia sẻ.

Các vấn đề liên quan