2010-10-06 29 views
7

Gần đây tôi đã triển khai ứng dụng Spring MVC cho công cụ ứng dụng của Google và thời gian tải nội bộ là khoảng 7 giây. Sau khi ứng dụng được tải, ứng dụng khá nhạy. Tuy nhiên, nếu ứng dụng không hoạt động trong hơn 1 phút (không có bất kỳ lưu lượng truy cập nào đến nó), ứng dụng cần được GAE tải lại một lần nữa, điều này cũng mất khoảng 7 giây. Đối với một ứng dụng cấp PRD, điều này là không thể chấp nhận được. (Ứng dụng rỗng -.. Tôi thậm chí không sử dụng JPA, Sitemesh, Xuân An, vv Tuy nhiên, nó chỉ tải một trang jsp với một số văn bản)Spring MVC trên GAE: Thời gian tải chậm

Các chỉ "thực hành tốt nhất" để sửa chữa ' thời gian tải 'Tôi đã nhìn thấy cho đến nay là để thiết lập một công việc cron truy cập url mỗi phút, do đó giữ cho các ứng dụng' nạp '. Rõ ràng đây là một giải pháp khủng khiếp.

Vì vậy, đây là câu hỏi: Có bất kỳ "phương pháp hay nhất" nào cho Spring on GAE về "phản hồi" không? Kể từ khi Google và mùa xuân đang làm việc trên phát triển tích hợp tốt hơn giữa hai người trong số họ, đã có bất kỳ tin tức/tiến bộ về vấn đề này? Tôi không thể tìm thấy bất cứ điều gì cụ thể, đó là lý do tại sao tôi yêu cầu nó ở đây

Thảo luận Chủ đề: http://groups.google.com/group/google-appengine-java/browse_thread/thread/80d014fd5abd526f

CẬP NHẬT

Có một 'vé' để tạo trường dành riêng, như cũng như logic 'nóng lên': http://code.google.com/p/googleappengine/issues/detail?id=2456

+1

Ngoài sự tò mò, tại sao công việc cron "rõ ràng" là một giải pháp tồi. Đó là "rõ ràng" grates, nhưng nếu nó hoạt động ... –

+1

Khi ứng dụng phát triển, lượng thời gian cần thiết để khởi tạo sẽ tăng, do đó công việc cron 1 phút sẽ biến thành công việc cron 30 giây nếu ứng dụng mất 30 giây để khởi tạo, v.v.Chỉ cần thêm an ninh mùa xuân sẽ làm tăng thời gian tải khá mạnh. Ngoài ra, nó còn bổ sung thêm sự phức tạp không cần thiết cho một vấn đề Spring/GAE cần được sửa. :) – Vladimir

Trả lời

2

GAE bắt đầu để cung cấp một dịch vụ trả tiền cho nơi bạn có thể có một trường hợp nóng reserved tại mọi thời điểm:

http://googleappengine.blogspot.com/2010/12/happy-holidays-from-app-engine-team-140.html

Always On - Đối với các ứng dụng ưu tiên cao với lưu lượng thấp hoặc biến, giờ đây bạn có thể đặt trước các phiên bản thông qua tính năng Luôn bật của App Engine. Luôn bật là một tính năng cao cấp có giá 9 đô la mỗi tháng, có ba trường hợp ứng dụng của bạn, không bao giờ tắt chúng, ngay cả khi ứng dụng không có lưu lượng truy cập. Điều này giảm thiểu tác động của các yêu cầu tải lên các ứng dụng có lưu lượng truy cập nhỏ hoặc biến.

Cùng với yêu cầu khởi động, đây là giải pháp tốt nhất nếu bạn dự định sử dụng GAE.

0

Ok, do thiếu phản hồi, tôi quyết định làm công việc cron (vì tôi không thể thấy bất kỳ tùy chọn nào khác về bây giờ)

Dưới đây là file cron.xml Tôi đang sử dụng

<?xml version="1.0" encoding="UTF-8"?> 
<cronentries> 
    <cron> 
    <url>/keepalive</url> 
    <description>Keep the application alive</description> 
    <schedule>every 1 minutes</schedule> 
    </cron> 
</cronentries> 

Và đây là bộ điều khiển:


package com.xxxxxxxxxxxxx.web; 

import org.slf4j.Logger; 
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 


@Controller 
@RequestMapping("/keepalive") 
public class KeepAliveController { 

    private Logger logger = org.slf4j.LoggerFactory.getLogger(KeepAliveController.class); 

    @RequestMapping(method = RequestMethod.GET) 
    public void keepAlive() { 
     logger.info("I'm alive!"); 
    } 
} 
+0

Xin đừng làm điều này. http://code.google.com/appengine/kb/java.html#Should_I_Run_A_Cron_Job – kprevas

+0

Tôi đã đọc điều đó, rất tiếc là KHÔNG CÓ CÁCH KHÁC! Trừ khi tôi muốn người dùng đợi 10 giây trước khi trang của tôi tải, đây là cách duy nhất để giữ cho nó tương đối "sẵn sàng cho sản xuất". Như tôi đã đề cập ở trên, Google đang làm việc trên một giải pháp (cả trả tiền và miễn phí). Cho đến khi giải pháp này được tạo, rất nhiều người đã tạo ra các ứng dụng java được triển khai trên google không may mắn: http://code.google.com/p/googleappengine/issues/detail?id=2456 – Vladimir

+1

Nếu "sản xuất của bạn" "ứng dụng có một số yêu cầu SLA (thỏa thuận mức dịch vụ), sau đó bạn cần xem xét các giải pháp lưu trữ tốt hơn GAE. GAE không đảm bảo thời gian hoạt động, thời gian phản hồi, v.v. và đặc biệt là không dành cho các tài khoản miễn phí. Nếu bạn muốn sử dụng GAE, thì người dùng của bạn sẽ phải trả thời gian chờ đợi. Tuy nhiên, nếu bạn cần một số loại độ tin cậy, sau đó bạn có thể sẽ xem xét chi tiêu một vài Bucks. –

2

Kể từ SDK 1.4.0 bạn có thể tránh độ trễ này bằng warmup requests.
Yêu cầu khởi động tải mã ứng dụng vào một phiên bản mới trước khi bất kỳ yêu cầu trực tiếp nào đạt được trường hợp đó.

+0

Chỉ hoạt động khi phiên bản ban đầu được tải (mất hơn 10 giây). – Vladimir

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