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
Contents
[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.