Jakie są zalety i wady AWS Elastic Beanstalk w porównaniu z innymi strategiami wdrażania?

17

Jestem całkiem nowy w całym stosie Netflix OSS i ogólnie wdrożeniach. Jako tło dla mojego obecnego poziomu wiedzy, moją główną rolą jest jako inżynier aplikacji front-end. Jednak podoba mi się strona operacyjna rzeczy, dlatego próbuję skonfigurować nową strategię wdrażania i narzędzia do nowego projektu.

Nasze cele

  • Bardzo łatwe wdrożenia (chcemy nacisnąć przycisk, aby zaktualizować produkcję)
  • Zautomatyzowane wdrożenia w środowiskach testowych (za pomocą Jenkins)
  • Łatwość konserwacji (mamy aplikację do napisania, nie chcemy spędzać czasu na majstrowaniu przy problemach produkcyjnych)
  • Możliwość obsługi architektury zorientowanej na usługi (wiele małych aplikacji, różnych języków i magazynów danych)
  • Wystarczająca elastyczność, aby zapewnić, że nie będziemy musieli zmieniać strategii w najbliższym czasie (już próbujemy uciec od RightScale)

Jesteśmy w porządku z nieco większym czasem początkowej konfiguracji, jeśli to pozwoli nam zaoszczędzić trochę problemów w przyszłości.

Tak więc, słuchając podcastów, oglądając rozmowy Ops i czytając mnóstwo postów na blogu, w oparciu o nasze cele i to, co uważałem za najlepsze praktyki, zaczęliśmy tworzyć plan, używając Asgard, zwijamy naszą paczkę do słoika i zwijamy to w AMI.

Mieliśmy to wszystko zaplanowane i podoba nam się zalety procesu w porównaniu z użyciem serwera szefa kuchni i konwergencji instancji w locie (czuliśmy, że jest to podatne na błędy, biorąc pod uwagę nasz ograniczony harmonogram i brak zrozumienia wokół przepływu pracy serwera szefa kuchni). Jednak współpracownik rozejrzał się trochę i czuł, że Elastyczna Fasolka szparagowa spełnia nasze potrzeby.

Przyjrzałem się temu i stworzyłem środowisko testowe z plikiem WAR i dołączoną bazą danych RDS. Wydaje się, że wszystko działa i uważam, że możemy zautomatyzować wdrażanie w środowisku testowym przy użyciu Jenkins za pośrednictwem interfejsu AWS API. Wydaje się dość proste ... może zbyt proste.

Zastanawiam się, jaki jest haczyk? Jeśli Elastic Beanstalk jest tak prosty i skuteczny, dlaczego nie mówi się o nim więcej? Trudno mi znaleźć wystarczającą liczbę obiektywnych opinii i faktów na temat dwóch różnych strategii wdrażania, więc pomyślałem, że zapytam.

Czy używasz Elastic Beanstalk? Jeśli tak, to dlaczego i jakie czynniki prowadzą do tej decyzji? Co lubisz a czego nie lubisz?

Jeśli nie używasz Elastycznej Fasoli, ale zastanawiasz się, co używasz i dlaczego nie użyłeś Elastycznej Fasoli?

Jakie są zalety i wady strategii wdrażania opartej na elastycznej fasoli dla SOA? To znaczy, czy Elastic Beanstalk działa dobrze z wieloma małymi aplikacjami, które działają w oparciu o siebie nawzajem?

James van Dyke
źródło

Odpowiedzi:

11

Oceniłem Elastic Beanstalk jako dodatek do innych ofert AWS, próbując ulepszyć nasze ręcznie rozwijane instancje AWS. Powody, dla których zdecydowałem się go nie używać, były spowodowane komplikacjami, które spowodowałyby migrację mojej istniejącej aplikacji, a nie samą ofertą. Problem polega na tym, że nie masz tak dużej kontroli nad wdrażaniem aplikacji / konfiguracją serwerów. Jeśli zaczynasz nową aplikację, pomocne może być nie zajmowanie się tymi sprawami w tej chwili, jeśli masz już istniejącą aplikację, trudniej jest zmieścić się w modelu Beanstalk.

Beanstalk oferuje podobną ofertę do Heroku i innych dostawców PaaS, ale niewiele korzyści dla tych, którzy chcą skupić się na tworzeniu aplikacji. Możesz przynajmniej określić zwirtualizowane zasoby w większym stopniu niż inni dostawcy PaaS.

Problemy, na które napotykałem moje aplikacje:

  • Wdrożenia oparte na Git - uwielbiam je, ale nasze repozytorium ma ponad 1 GB. Raczej duży, aby naciskać regularnie. To repozytorium zawiera również około 40 aplikacji (które naprawdę powinny zostać podzielone), ale zajęłoby to trochę czasu. Przesyłanie dowolnego rodzaju pakietu może działać, ale większość naszych aplikacji zajmuje dużo pracy, aby przekształcić go w pakiet.

  • Integracja z innymi usługami - z tego, co widziałem, Beanstalk zakłada, że ​​wszystko, z czym się łączysz, to jedna usługa. Działa to dobrze, jeśli twoje usługi są opóźnione i ELB, ale nasze były osobnymi węzłami, które trafiliśmy przez HAProxy działający na każdym serwerze aplikacji. Jeśli przechowujesz magazyny danych i inne usługi jako pojedynczy punkt końcowy, wszystko powinno być w porządku.

W mojej ocenie uwzględniłem także OpsWorks i CloudFormation. OpsWorks ma podobne problemy z integracją z działaniem istniejącej automatyzacji dla tych aplikacji. CloudFormation nie zrobił nic więcej niż to, czym zajmowały się już niektóre skrypty Pythona i szefa kuchni.

Skończyło się na tym, że zamiast tego skorzystałem z grup skalowania AWS z pewną automatyzacją zapewnianą przez Asgarda . Była to najmniejsza zmiana w istniejącym kodzie konfiguracji / aplikacji i zapewniła nam korzyści, których szukaliśmy, proste zarządzanie wieloma serwerami dostępnymi za pośrednictwem interfejsu API AWS.

Ograniczenia wprowadzone przez Elastic Beanstalk w twojej aplikacji są bardzo pomocne. Musisz upewnić się, że aplikacja jest w większości bezstanowa, zapewnia punkt końcowy usługi i opiera się na innych usługach dla stanu. Jeśli próbujesz stworzyć samodzielne usługi wielokrotnego użytku, wiele aplikacji w Beanstalk to dobry początek.

Jeśli / kiedy dojdziesz do punktu, w którym chcesz uzyskać więcej konfiguracji, OpsWorks to świetny następny krok. Wstępnie zdefiniowane role powinny ułatwić rozpoczęcie przejścia i zapewnić strukturę automatyzacji wokół Chef, aby pomóc w koordynowaniu udostępniania wielu serwerów.

Philip Cristiano
źródło
2
Świetna odpowiedź, Philip. Wydaje się, że największym ograniczeniem dla Elastic Beanstalk jest dowolna podstawowa konfiguracja AMI. Tak, w przypadku podstawowej, bezpaństwowej usługi wydaje się ona świetna. Jednak gdy trzeba uruchomić wiele usług (np. Nginx, specjalistyczny monitoring) w ramach jednej instancji, musisz uruchomić własny AMI, a następnie stracić bazowe automatyczne aktualizacje AMI dla usług AWS. W tym momencie jesteś już w trakcie niestandardowego procesu wdrażania. Mam wrażenie, że jest to czas, w którym chciałbyś rozważyć odejście od EB.
James van Dyke
0

Widzę sens utraty kontroli, ale niekoniecznie widzę nakazaną bezpaństwowość. Wszystko, co naprawdę robi eb, to wdrażanie automatyzacji, która, nawiasem mówiąc, jest niesamowita. Widzę sens dużego repozytorium. Ogólnie myślę, że rozdzielenie logicznych funkcji aplikacji na osobne aplikacje bean, a następnie posiadanie środowisk „staging” i „prod” pod spodem, jest naprawdę fajne. Mamy środowiska modułów, takie jak uploader, nie robi to wiele i teoretycznie powoduje to duże koszty, ale wtedy używasz mniejszych instancji tylko więcej. Prowadzimy scentralizowany nginx i musieliśmy napisać wiele niestandardowych uchwytów komunikatów sns, aby powiadomić ngnix o zmianach w polityce automatycznego skalowania. Innym dużym problemem eb jest niezdolność do równoważenia obciążenia turd, ponieważ używamy ngnix, dlaczego? elb nie obsługuje websocket.

Glozman Zeeva
źródło