Automatyzacja, DevOps

Maszyna i Serwer dla Developmentu cz.1


3 miesiące temu napisałem krótki artykuł o możliwościach jakie mamy obecnie. Jak małym kosztem zwiększyć wydajność sprzętu dla dewelopmentu poprzez delegowanie zadań na dwie maszyny zamiast wirtualnego środowiska.

Pokazałem przykładowe rozwiązanie w artykule:

dev environment for fast development with odroid xu4, mini PC and switch, without virtualization

Ograniczenia, wirtualne rozwiązania

[responsivevoice_button voice="UK English Female" buttontext="wersja audio artykułu"]

Rozwiązania wirtualne mają wadę w postaci zależności wynikających ze wspólnej warstwy fizycznej.

Postarałem się o stworzenie rozwiązania, które by mnie uwolniło od konfigurowania tego wszystkiego za każdym razem, gdy konieczna jest zmiana na komputerze.

Pewne kwestie jak konfiguracja linuxa pozostaje stała na podstawowym poziomie, są też usługi dedykowane tylko dla środowiska w którym pracuję.

Nie lubię też ograniczać się tylko do tworzenia oprgoramowania na jednym komputerze, chcę mieć wolność w wyborze pomiędzy:

  • PC stacjonarnym
  • komputerem w praca i w domu
  • laptop, tablet z dowolnym systemem

Development

Specyfika mojej pracy

W związku z tym że nie tylko tworzę w jednej technologii i nie tylko zajmuję się programowaniem, nie mogę w prosty sposób zainstalować wszystkich aplikacji na jednym komputerze w jednej rozdzielczości.

Np pisanie artykułów i przeglądanie stron o mediów to kwestie, które nie są problemem.

Ograniczenia są wówczas, gdy ten sam komputer ma setki zadań a niestety nie sprawdza się w nich na najwyżsym poziomie z racji fizycznych cech.

Motywy do zmiany

Mały miniPc wystarczał do dewelopmentu, ale nie był tak wydajny jak PC.

Nie chcę tworzyć na PC całego środowiska do programowania.

Wolałbym mieć możliwość łatwej zmiany sprzętu PC na inny, np. na laptop bez potrzeby konfigurowania wszystkiego co potrzebne do tworzenia oprogramowania.

Obecnie wygląda to tak, że na PC są wszystkie projekty, w różnych językach programowania, do tego są potrzebne narzędzia do wirtualizacji, np docker, itd.

Moim celem jest wyizolowania danych od oprogramowania narzędziowego służącego bezpośrednio do pisania kodu.

Charakter dostępnego sprzętu na rynku

Poniżej piszę o dość oczywistych specyficznych dla danego urządzenia cechach fizycznych.

Smartfon

Np przeglądanie poczty i segregacja wiadomości jest łatwiejsza na Smartfonie z dedykowaną aplikacją, gdyż korzystam z dotykowego interfejsu, który jest wygodniejszy i ma specyfik minimalistyczną, pomocną w szybkiej pracy z E-mailami.

Tablet

idealnie nadaje się do mediów oraz czytania, ewentualnie przeglądania stron www

PC- komputer stacjonarny

ma bardzo szerokie możliwości konfiguracji i rozbudowy.

Monitory mogą być odpowiednio dostosowane do stanowiska pracy.

Urządzenia i oprogramowanie można łatwo dostosować na wielu systemach jednocześnie dzięki wirtualizacji.

Może służyć do zdalnego zarządzania laptopami, serwerami, smartfonami, bez problemów wydajnościowych.

Laptop

jest ograniczony wielkością i wydajnością, klawiatura jest zależna od konkretnego modelu, nieoptymalna i nieergonomiczna.

Motywy i możliwości

Oczywiście są możliwości zakupu lepszego sprzętu w danym segmencie, ale nie warto ponosić np 50% większych kosztów, gdy można zakupić w zamian za to kilka innych urządzeń, które wyjdą poza ograniczenia jednego urządzenia.

Rozwiązanie

obecnie potrzebuję wydajniejszego środowiska, gdzie będzie możliwe wykorzystanie dwóch bardziej wydajnych sprzętów

Na np. laptopie wolałbym tylko konfigurować samo IDE a resztę mieć na małym przenośnym serwerze.

Serwer byłby mały, przenośny.

Wówczas nie ma problemu z pracą nad tymi samymi projektami na komputerze w pracy i na kompterze w domu.

Stanowiska mogą być oparte o różne systemy, ale kod i działajace usługi byłyby na przenośnym serwerze, dzięki czemu nie było by problemu z używaniem różnych narzędzi i sprzętu.

Sprzęt docelowy

MiniPC jako Serwer z Debianem i Dockerem

CPU i3 + RAM 8GB + SSD 400MB/s

PC jako Komputer z IDE

CPU i5 4Ghz + RAM 16GB + SSD 1500MB/s

Architektura

komputer IDE

  • dowolny sprzet, nawet tablet, wystarczy, ze bedzie mial przegladarke, gdzie bedzie funkcjonowal np. eclipse che
  • Nie ma znaczenia system, uslugi dzialaja na serwerze
  • komputer bedzie korzystał bezpośrednio z dysków zdalnych udostępnianych na Serwerze, dlatego ważne jest wydajne połączenie z serwerem

dev server

  • debian 9
  • serwisy z docker
  • edytor online: che, jupyter
  • workspaces
  • git repozytorium, gitlab
  • serwer testowy pipeline

hub + router mobilny lub  GSM usb stick

  • połączenie wewnątrz sieci pomiędzy serwerem i komputerem z IDE musi być maksymalnie szybkie, 1GB LAN, dlatego najbardziej praktyczny i mały będzie HUB
  • Na serwerze będą dziesiątki działających usług, dlatego powinna być możliwość ich pokazania ON-line albo synchronizacja ze zdalnym serwerem na którym bedą lustrzane usługi dla klientów, testerów
  • wszystkie usługi mogą być opcjonalnie widoczne w internecie pod domeną

Możliwości konfiguraji i rozbudowy

W tej konfiguracji jest możliwa rozbudowa o kolejne serwery i komputery.

jeden programista

Np. jeden programista może mieć 2 komputery do programowania w różnych środowiskach a nawet więcej, gdy potrzebuje środowisk testowych.

dwóch programistów, tester i programista

w zależności od HUB-a możliwe jest używanie kilku komputerów korzystających z jednego serwera.

Ważne jest by korzystać ze swojego workspace, dlatego powinno być to rozwiązane na poziomie praw dostępu do systemu plików samba

Co dalej?

Powyższa, teoretyczna analiza pozwala na zogniskowanie rozwiązania.

W nastęnym artykule znajdują się praktyczne przykłady, jak stworzyć platformę w oparciu o darmowe oprogramowanie.

Maszyna i Serwer dla Developmentu cz.2

Tom
Tagi: , ,