Разделянето на услугата и предния край в AppEngine причинява забавяне

Имам набор от приложения на Java AppEngine, структурирани по следния начин:

  • REST услуга
  • Уеб фронтенд

Тези два компонента се хостват на 2 отделни екземпляра на AppEngine (платени), това е стандартен начин за проектиране на вашето приложение и има смисъл за мен, тъй като имам достъп до услугата REST и от други клиенти (мобилни приложения и т.н.), така че бих обичам да го държа отделно.

Проблемът, който имам, е, че въпреки че ако имам достъп до услугата REST директно (ПОЛУЧАВАНЕ от браузър или мобилни приложения), отзивчивостта винаги е добра, когато имам достъп до услугата REST от моя AppEngine, времето за реакция понякога е много непостоянно.

Проведох куп тестове и докато извършването на GETs от браузъра към услугата REST винаги се връща сравнително бързо, обажданията от предния край на моя AppEngine към услугата REST можеха да преминат от връщане толкова бързо, колкото от браузъра, до отнемане на >10 секунди (предизвикване на прекъсвания и т.н.) с не толкова разумни времена за реакция като цяло (секунди вместо 100 секунди милисекунди).

Ако имаше забавяне като цяло, мога да разбера, че всичко ще отнеме почти същото време, за да получи отговор, но това, което не разбирам, е тази разлика между обаждането на услугата от някъде другаде и обаждането й от от< /strong> екземпляр на AppEngine.

Трябва да кажа, че това не се случва винаги, върви добре със седмици и след това има много лоши дни (днес не се брои наистина, тъй като беше пълно прекъсване) и, въпреки че като цяло съм много доволен от app-engine, понякога ме кара да се чудя дали не съм направил грешка, инвестирайки в тази платформа.

Търся обяснение: това ли е някакво присъщо ограничение на AppEngine при поставяне на опашка от този вид доста стандартни http-заявки, изходящи от екземпляр на AppEngine?

Също така съм мислил за възможни заобиколни решения - може би трябва да хоствам услугата в същия екземпляр като предния край, но наистина не искам да правя това и го оставям като последна възможност.

Всеки съвет се оценява.


person JohnIdol    schedule 16.01.2013    source източник
comment
Това е стандартен начин за проектиране на [вашето] приложение [необходим е цитат] - наистина не е и както забелязвате, това е особено неефективен начин за проектиране на вашето приложение.   -  person Nick Johnson    schedule 17.01.2013
comment
@NickJohnson Здравей Ник, защо толкова отбранителен? Ако не е най-добрата практика, със сигурност е индустриален стандарт да проектирате приложението си така, че да отделя услугата от предния край на всички други платформи, върху които някога съм работил. Времето за реакция при извикване на услугата от всяко място, освен от екземпляр на AppEngine, всъщност е ОК и сравнително надеждно. Бих искал вашето мнение по отношение на това защо, както забелязвам, това е особено неефективно при извикване на услугата ОТ екземпляр на AppEngine. Предполагате ли, че единственото решение за това е да изтеглите услугата в същия екземпляр като предния край?   -  person JohnIdol    schedule 17.01.2013
comment
@NickJohnson Не съм съгласен с твърдението ти. Освен това, къде е вашият цитат, че казвате, че това не е стандартен начин.   -  person tom    schedule 17.01.2013


Отговори (1)


Виждам 2 причини

1. Външен достъп до вашата REST услуга, кеширането е оптимизирано, тъй като клиентът(ите) са различни версии на браузъри. Вашето FrontEnd приложение, което има вътрешен достъп до услугата REST, може да не е внедрило много добър механизъм за кеширане.

2. AppEngine таксува ли за вътрешен трафик? ако не, тогава това може да е причина за даване на приоритет на външните IP адреси пред вътрешните??

person TheWhiteRabbit    schedule 16.01.2013
comment
Благодаря за отговора: 1. Предполагам, че това е нещо присъщо на AppEngine, така че попада под възможните обяснения, но нямам представа дали е така или не. 2. appEngine таксува за изходяща честотна лента (независимо) и аз се свързвам с услугата чрез http, така че трафикът не е вътрешен. - person JohnIdol; 16.01.2013