Uruchamianie wielu aplikacji webowych jednocześnie

0

Cześć. Aktualnie projekt, w którym pracuję, rozrósł się na tyle, że odpalanie go trwa dobre 4~ minuty na szybkim komputerze/laptopie. Konieczne jest uruchomienie Cosmos Db Emulator, następnie Blob Storage emulator, w dalszej kolejności API i dwie aplikacje UI, które z tego API korzystają. W praktyce wygląda to tak: odpalony jest 2x Visual Studio Code (Angular 6), do tego Visual Studio (C# 7.0/.NET Core 2.0) ze zbudowaną i uruchomioną aplikacją (plus wspomniane emulatory, do tego SQL Server, który już uruchamia się automatycznie).
Już sama tak znaczna ilość odpalonych programów pożera ogromną ilość zasobów, a co dopiero, jak w grę zaczyna wchodzić w Chrome i ciągły podgląd efektów programowania. Mam następujące pytania:

  1. Jak w najlepszy/najprostszy sposób uprościć uruchamianie wszystkich tych aplikacji? Myślałem o Dockerze, ewentualnie napisanie skryptu .bat, który po kolei uruchamia wszystko z konsoli windowsowej. Nie mam tutaj doświadczenia, więc tak sobie 'gdybam'. Prosiłbym o konkrety.

  2. Czy wykorzystanie rozwiązania przedstawionego wyżej umożliwiałoby skuteczne przełączanie branchy, implementację na poziomie UI z wykorzystaniem HMR? Póki co, mimo masy odpalonych programów, sprawa z gitem jest bardzo przejrzysta - zmiana brancha powoduje ponowną kompilację dwóch aplikacji UI, następnie ponownie odpalam API.

W idealnym przypadku odpalałbym sobie ten projekt, w którym aktualnie chcę wykonywać zmiany - czy to API, czy któryś z UI, a wszystkie pozostałe byłyby cały czas dostępne na porcie. Już to bardzo ograniczałoby wykorzystanie zasobów (np. brak konieczności odpalonego code'a). Następnie po zapisaniu zmian mój skrypt/program automatycznie wykrywałby je i budował aplikację na nowo. Wówczas pozostałoby odpalić Chrome i sprawdzić efekty. Odpadałaby też kolejna uciążliwa rzecz - konieczność trzymania ciągle otwartej karty z Chrome z API, której zamknięcie powoduje przerwanie jej działania (trzeba go włączać w VS na nowo). Bardzo prosiłbym o nakierowanie na jakieś konkretne rozwiązanie.

3

Rozwiązań może być wiele. Przede wszystkim, czy nie ma opcji hostowania np. bazy danych gdzieś indziej ? Cosmos DB i Blob Storage można uruchomić na Azure chyba na bezpłatnych planach ? Nawet jeśli nie to masz 45 euro na Azure co miesiąc, jeśli masz subskrypcje MSDN. Jeśli chcesz wszystko lokalnie to polecałbym Dockera, o którym wspomniałeś, a tak naprawde Docker-Compose. Możesz stworzyć sobie różne konfiguracje docker-compose w zależności co chcesz robić. Bazy danych mogłyby być odpalane zawsze, a aplikacje w zależności, którą będziesz zmieniał. Czyli konfiguracja per jakie zmiany robisz. Co do zmiany branchy to tutaj trzeba pokombinować. Zwykłe Visual Studio jest fajnie już z integrowane z Dockerem, ale jeśli nie używasz to pewnie siedzisz na linuxie czy macu. Visual studio tworzy sam już dockerfile dla aplikacji i przy każdym odpaleniu F5 masz nowe zmiany w contenerze. Możesz sobie gdzieś to stworzyć żeby zobaczyć jak taki Dockerfile wygląda. Ja osobiście dokupiłem kość dodatkową 16GB ramu dla takich zabaw.

0

Dzięki za odpowiedź. Możliwość hostowania bazy jest, ale zależało mi na przećwiczeniu w tworzeniu rozwiązania jakie opisałem wyżej. Spróbuję faktycznie zacząć z dockerem. Co do hardware, korzystam z laptopa Apache Pro G62 6QF, do tego dokupiłem dysk ssd evo z samsunga na złączu M2. Mam 8GB i bardzo często i procesor, i ram są użyte właśnie na 99% jak są te wszystkie wspomniane apki uruchomione. Zastanawiam się nad kupnem dodatkowego ramu - pytanie, czy dla tych rozwiązań wystarczało by 8, czy 16 jak w Twoim przypadku (zresztą nawet i 24 mogę kupić w razie potrzeby)?

1

No wiesz to wszystko zależy. Nie wiem jak filestorage i cosmos, ale np SQL server domyślnie ma ustawiony limit RAMu na 2147483647 MB :D. Możesz to ograniczyć w ustawieniach. Podobnie z innymi usługami. Ja mam sumarycznie 20GB ramu i przy niektórych "zabawach" i tak jest zużyty cały. W przyszłości planuje dokupić następne 16GB. Jednak jeśli nie ma potrzeby wszystkiego trzymać lokalnie to wydelegowałbym część usług do chmury.

0

Dzięki za pomoc:) będę myślał jak to zrobić, jak się jeszcze jakieś wątpliwości pojawią, dam znać.

0

A ile osób pracuje nad projektem? Macie jakąś infrastrukturę CI/CD?

0

Projekt jest stosunkowo niewielki, w tym momencie 3 osoby i jest praktycznie na ukończeniu. Mamy buildy raz dziennie wypuszczane na Azure deployment, ale poza tym dopiero rozwijane jest jakieś większe zaplecze i to raczej już pod następny projekt.

1

Dobrze przemyślcie takie tematy już teraz. Jak projekt się będzie rozrastał, to takie problemy będą coraz bardziej dokuczać, coraz większej liczbie osób.

Nie ma tutaj jednej, słusznej drogi, bo każdy ma swoje zależności i potrzeby. Musisz pokombinować z narzędziami, które opisałeś wyżej (Ty, plus koledzy, którzy Ci odpowiedzieli) - czyli Dockerem, Powershellem. Możesz to zintegrować z repozytorium i np. Jenkinsem, który automatycznie by Ci stawiał środowisko na VM, albo na kontenerze po każdym commicie.

Macie jakieś testy automatyczne? Testy integracyjne? Warto by było, żeby człowiek w ogóle zaczynał na to patrzeć dopiero jak automat przeleci wszystkie testy.

0

Dzięki za wypowiedź. Jak najbardziej się zgadzam i tak samo postanowiliśmy zrobić z testami - póki co planuję poczytać o Selenium/Jasmine do automatycznych i poznać testy integracyjne. Zresztą już teraz widzę, że żeby utrzymać "w ryzach aplikację", tym więcej muszę wyklikiwać, co zaczyna zajmować jakieś 40% całej mojej pracy. I ten procent ciągle rośnie z każdym nowym procesem biznesowym. Aplikacja się komplikuje, klient coraz więcej sprawdza na naszym deploymencie i robi się bajzel. Brak CI/napisanych testów sprawia, że bardzo często różne kwiatki przechodzą do developa. Wszystko rekompensują testy manualne prawie po każdym mergu, ale kontynuując to na dłuższą metę albo nastąpiłby paraliż, albo firma musiałaby zatrudnić z 5 testerów.

Cały docelowy proces mniej więcej widzę tak, że najpierw uruchamia się kompilacja, następnie sprawdzane są testy automatyczne/integracyjne, ew. jednostkowe. Jak pierwszy i drugi proces się powiedzie, pozostaje kwestia ustawienia środowiska - myślę, że tutaj sprawę załatwi Azure, na którym teraz pracujemy. Myślę ciągle o Dockerze/Powershellu, o którym rozprawiałem, ale to raczej dla swoich celów, przynajmniej na ten moment.

1

Daj znać jak poszło. :) Jakbyś miał jakieś pytania, to też mogę coś podpowiedzieć, ale zaznaczam, że nie ma jednej drogi.

0

Dzięki wielkie:) Jak coś, na pewno się odezwę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1