Uruchamianie wielu aplikacji webowych jednocześnie

Uruchamianie wielu aplikacji webowych jednocześnie
darkrat
  • Rejestracja:około 8 lat
  • Ostatnio:prawie 4 lata
  • Postów:203
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.

mr_jaro
jaki sprzęt określasz szybkim, bo to pojęcie względne, a jak tak patrze na ten zestaw to nie jest nic ciężkiego dla sprzętu z najwyższych mainstreamowych półek.
E9
  • Rejestracja:ponad 13 lat
  • Ostatnio:10 miesięcy
  • Postów:395
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.

darkrat
  • Rejestracja:około 8 lat
  • Ostatnio:prawie 4 lata
  • Postów:203
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)?

E9
  • Rejestracja:ponad 13 lat
  • Ostatnio:10 miesięcy
  • Postów:395
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.

darkrat
  • Rejestracja:około 8 lat
  • Ostatnio:prawie 4 lata
  • Postów:203
0

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

VA
  • Rejestracja:ponad 6 lat
  • Ostatnio:prawie 6 lat
  • Postów:35
0

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

darkrat
  • Rejestracja:około 8 lat
  • Ostatnio:prawie 4 lata
  • Postów:203
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.

VA
  • Rejestracja:ponad 6 lat
  • Ostatnio:prawie 6 lat
  • Postów:35
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.

darkrat
  • Rejestracja:około 8 lat
  • Ostatnio:prawie 4 lata
  • Postów:203
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.

VA
  • Rejestracja:ponad 6 lat
  • Ostatnio:prawie 6 lat
  • Postów:35
1

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

darkrat
  • Rejestracja:około 8 lat
  • Ostatnio:prawie 4 lata
  • Postów:203
0

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

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)