2015-09-22 18 views
6

Gần đây, tôi đã khởi chạy ứng dụng của mình cho iPhone/Android đang chạy với phần phụ trợ AppEngine. Đây là trải nghiệm đầu tiên của tôi khi sử dụng AppEngine trong Sản xuất.Google App-Engine ghi nhớ rất chậm

Khi tôi nhận được nhiều lưu lượng truy cập hơn, tôi bắt đầu gặp phải các sự cố nghiêm trọng về độ trễ. Hiện tại trường hợp nhàn rỗi tối thiểu là 1, max_pending_latency là 1s.

Có, có phòng cho việc tối ưu đứng về phía tôi, tuy nhiên tôi không hiểu

  1. Tại sao độ trễ là không tương quan với yêu cầu/giây, giao thông, memoryUsage, memcacheUsage, bất cứ điều gì. Tôi không hiểu tại sao không có độ trễ đáng kể vào ngày 21 tháng 9.

  2. Tại sao cuộc gọi đến memcached cần chậm đến 500ms. (Thông thường nó nhanh gấp 10 lần). Tôi đang sử dụng NDB và 1GB dành riêng cho memcached. Tăng lên 5GB không có hiệu lực.

Đây có phải là cách AppEngine hoạt động không? Tôi muốn có được cái nhìn sâu sắc của bạn.

Cảm ơn

LatencyRequests per secondExample RPC

+1

Bạn có thể muốn hỏi điều này trong kênh #appengine trên freenode hoặc danh sách gửi thư. Biểu đồ rpc của bạn hiển thị một tập hợp giao dịch ndb đồng bộ nhưng phần memcache không mất quá nhiều thời gian. –

+1

Theo như tôi biết, có thể thấy những lần như vậy trong Memcache. Thời gian hoạt động không được đảm bảo trừ khi sử dụng Memcache chuyên dụng (trả tiền). [source] (https://cloud.google.com/appengine/docs/python/memcache/#Python_Limits) – Nick

+0

@JoshTriiJohnston Cảm ơn bạn đã đề xuất một điểm liên hệ tốt. Như bạn đã chỉ ra, các cuộc gọi đồng bộ nên được song song hoặc gửi đến hàng đợi nhiệm vụ. –

Trả lời

0

Chúng tôi đã trải qua một thời gian rất dài trong deserialization khi chúng được lưu trữ rất nhiều các đơn vị thuộc chính memcache cùng. Có thể mất một thời gian dài nếu bạn lưu trữ một mảng lớn của một số thực thể với nhiều thuộc tính có cấu trúc.

Bạn không thể lưu trữ kích thước đối tượng nhiều hơn 1Mo trong cùng một khóa bộ nhớ cache. Bạn có thể sử dụng Titan for App Engine để chia khóa bộ nhớ cache của mình trong một số khóa bộ nhớ cache khác bằng cách sử dụng sharded memcache. Nó trong suốt.

Tôi hy vọng nó sẽ giúp bạn.