"Internet of Things" to temat wiodący również na konferecji Google Cloud Next ’19. Postaram się wyjawić kilka szczegółów o tym, dlaczego i jak robotyka oraz IoT stają się na serio produkcyjnym standardem.
Wracając do IoT, zastanawiacie się pewnie, co ten temat robi na konferencji Google o chmurach? Rozjaśnię pytanie, w tym roku jeszcze nie rządzi :-)
Jak wiadomo powszechnie, wiele tematów jest wchłanianych przez Google, także temat zwany partnerstwem z największymi producentami Open Source i wielkimi firmami od spraw bankowych, logistycznych, magazynowych i baz danych. Google chce mieć konkurencję pod kontrolą, a wiadomo, że to jest w pewnym sensie win-win, bo partnerzy mogą sprzedawać swoje usługi w wersji "enterprise" w koloejnej z kilku największych chmur publicznych.
Aby nie umniejszać firmie Amazon, w chmurze AWS istnieje również taki market, na którym Ci sami partnerzy sprzedają swoje wersje płatne rozwiązań.
Następnym wchłanianym tematem jest nagłaśniany coraz bardziej aspekt dotyczący masowego zastosowania robotów w produkcji. Temu tematowi został poświęcony m. in. poniższy temat wystąpienia.
Connected Robots: IoT in the Warehouse (Cloud Next '19)
Jak się domyślacie magazynier, to jeden z pierwszych zawodów, który znika po ponad 150-latach z naszego rynku pracy. Na ten moment zastąpiony jest robotami w wielkich fabrykach, ale kwestią czasu jest zanim zawód magazynier to będzie historia. W opasłych centrach magazynownia już ludzie nie biegają za paczuszkami, a stanowią jedynie nadzorców procesów, sortują niewygodne dla manipulatorów w robotach detale, wspomagają roboty w ich masowej pracy. Celowo wytłuszczam wspomagają, bo tak na prawdę, to kwestia powstania w miarę uniwersalnego manipulatora i pozamiatane :-)
Wracając do wykładu, to przedstawia on dziedzinę magazynowania odnosząc się do IoT jako konieczność w tych czasach i naturalny kierunek rozwoju dla magazynów (ang. warehouses). Zaprezentowany jest jeden z przedstawicieli gatunku - robot wspomagający prace magazynowe. Przy okazji opowiadają, że do prototypowania i testowania nowych konceptów, nowego softu wspierają się też usługą Kubernates, gdyż jest wygodną formą stawiania infrastruktury na życzenie. Prowadzący wyjaśnia, że pokazany wyżej robot powstał w 9 miesięcy dzięki:
platformie NVIDIA Jetson
platformie ROS Open Source
platforma Google Cloud
Na powyższym diagramie prowadzący wyjaśnia, że dzięki robotom zawód magazyniera może doznać znaczącej poprawy wydajności i roboty wyraźnie przyspieszają pracę magazynu. Da się to zmierzyć i można powiedzieć, że każdy człowiek współpracujący z robotem na magazynie jest 2/3-razy wydajniejszy.
Efektywność jest określana przez dane i decyzje. Roboty, które pracują na magazynie mają bardzo wiele danych z czujników i ciągle podejmują decyzje o kolejnych zadaniach. Prowadzący wyjaśnia, że dzięki pojęciu inteligencji operacyjnej oraz złożonym zapytaniom w czasie rzeczywistym, możliwe jest działanie bez przerw i znaczących awarii. Zamyka się to w slajdzie Data Driven Decisions:
Bardzo ciekawe jest też podejście do diagnostyki sieci WiFi, która służy do komunikacji z farmą robotów. Posiadają dedykowane dashboardy do tego:
Bardzo ważne podczas budowania robotów przemysłowych jest śledzenie tego co robot robi. Mam na myśli, czym się zajmuje w większości czasu. Oto jak prowadzący prezentują nam ten temat i coś przewidywalnego w takim zastosowaniu - robot po prostu w ~50% czasu jeździ :-)
Idąc dalej za metrykami, które w takim magazynie są istotne będzie to efektywność pracy robota w magazynie. Co jest ciekawego w tym wystąpieniu? Okazuje się, że nie można uzyskać większej wydajności, kiedy zwiększamy prędkość przemieszczania się robotów w magazynie !!!
Z pomocą przychodzi AI i Machine Learning, dzięki któremu inżynierowie przygotowali/wytrenowali modele ML pozwalające uzyskać największą efektywność.
Poniższy slajd obrazuje na górze model podstawowy rozkładu prędkości jazdy, który nie zapewniał oczekiwanej efektywności i na dole, który zapewnia największą efektywność w pracy robotów CHUCK w magazynie. Jak widać model nie ma charakterystyki stałej w czasie (patrz na kolory), co tłumaczy fakt konieczności optymalizacji zależnie od miejsc, które przemierza robot.
Kolejnym zagadnieniem typowym dla powierzchni magazynowych jest orientacja w czasie rzeczywistym, gdzie i jak przemieszczają się zarówno roboty jak i ludzie po magazynie.
Dla prawidłowego działania magazynu niezbędny jest monitoring robotów, które mogą określone zadania. Niechcianym przypadkiem jest blokowanie drogi przez kilka robotów, które "zagubiły się" lub po prostu skończyło im się zasilanie. Monitoring pozycji w czasie rzeczywistym stanowi podstawę utrzymania infrastruktury magazynowej i zapewnia bezpieczeństwo ludziom.
Monitoring w czasie rzeczywistym jest związany z faktem działania magazynu produktowego przez 24h bez przerwy. Klienci oczekują dostawy w 2 dni, więc niezbędne okazują się metryki na temat tempa pracy maszyn i ich stanu. Co ciekawe monitorowanie odbywa się w znanej w świecie Internetu Rzeczy bazie serii czasowych InfluxDB, która spełnia właściwie swoją rolę.
Opowiadający wspomina, o tym, że monitoring CPU robotów jest super ważny, gdyż przegrzanie się procesorów na skutek uszkodzenia wiatraka to typowy przypadek i wówczas roboty zachowują się w nieprzewidywalny sposób.
Wspomina również o koncepcie Preventive Maintenence (PdM) (pol. konserwacja zapobiegawcza), zgodnie z którym można wymieniając w odpowiednich momentach części znając ich zużycie oszczędzić czas klientów. Jest to związane ze zmniejszeniem czasu potrzebnego na angażowanie inżynierów w utrzymanie. Po prostu w tym czasie programiści mogą wytworzyć kolejne ważne i cenne funkcjonalności.
Bardzo ważne okazują się dla utrzymania i weryfikowania optymalnych rozwiązań nagrania ścieżek jazdy robotów CHUCK. Do tego celu inżynierowie stworzyli specjalne archiwum zapisujące to jak "widzi trasę robot" i mogą w dowolnym momencie "spojrzeć jego oczami" bez konieczności przelotu osobiście samolotem do odległego o tysiące kilometrów magazynu.
"Everything as Code" to koncept, który przywołuje bazę programowania, czyli kod. Oczywiście większości z nas kod kojarzy się z pisaniem programów. Jednakże każdy system jesteśmy opisać również dedykowanym kodem i w ten sposób mamy zapewnionie analogicznie jak w przypadku programów sprawniejsze rozwijanie i utrzymanie systemów informatycznych.
Zgodnie z trendami w IT doszło do takiej sytuacji, że frazes "as code" został wykorzystany do wielu produktów, które pokrótcec w tym wpisie chciałbym przedstawić. Oto najpopularniejsze pojęcia, które bardzo silnie wpływają na propagowanie omawianej filozofi "... as code" w IT.
Configuration as Code
Configuration as Code ( CaC ) - Konfiguracja jako kod jest praktyką traktowania wszystkich części systemu jako kodu. Oznacza to przechowywanie konfiguracji wraz z kodem źródłowym w repozytorium, takim jak git lub svn. Przechowywanie konfiguracji kompilacji, właściwości aplikacji i konfiguracji wdrażania jako kodu oznacza, że są one śledzone i można je odtworzyć jednym kliknięciem. Oczywiście w sytuacji ingerencji osoby z zewnątrz do systemu łatwo przywrócić stan konfiguracji automatycznie.
Centralne zarządzanie nawet bardzo rozproszoną konfiguracją to klucz do bezpiecznego i stabilnego systemu, w którym wiemy dlaczego coś działa zgodnie z ustawieniami.
Infrastructure as code
Infrastructure as code - ( IaC ) - Infrastruktura jako kod obejmuje projekt systemu, również zapisany jako kod. W starym świecie IT infrastruktura wymagała specjalistycznych umiejętności oraz fizycznego sprzętu i kabli do zainstalowania. Systemy były cenne lub nie były często dotykane / aktualizowane, ponieważ ludzie, którzy je stworzyli, nie działają już dla firmy. Początek przetwarzania w chmurze i aplikacji natywnych w chmurze sprawił, że jest to tania i łatwa w rozlokowaniu infrastruktura wirtualna. Przechowując konfigurację środowisk wirtualnych jako kodu, można je cyklicznie przetwarzać i odtwarzać w razie potrzeby.
Automatyzacja wdrożeń to klucz do bezpiecznego i stabilnego systemu, w którym poszczególne bloki / usługi / mikroserwisy mają swoją znaną z góry rolę.
Dlaczego infrastruktura jako kod?
Wirtualizacja, chmura, kontenery, automatyzacja serwerów i sieci zdefiniowane przez oprogramowanie powinny uprościć pracę działu IT. Zapewnienie, skonfigurowanie, zaktualizowanie i utrzymanie usług wymaga mniej czasu i wysiłku. Problemy powinny być szybko wykrywane i rozwiązywane, a systemy powinny być konsekwentnie konfigurowane i aktualne.
Pracownicy IT powinni spędzać mniej czasu na rutynowych pracach, mając czas na szybkie wprowadzanie zmian i ulepszeń, aby pomóc ich organizacjom w zaspokajaniu ciągle zmieniających się potrzeb współczesnego świata. Ale nawet z najnowszymi i najlepszymi nowymi narzędziami i platformami zespoły ds. Obsługi IT wciąż uważają, że nie nadążają za codziennym obciążeniem pracą. Nie mają czasu na rozwiązywanie długotrwałych problemów z ich systemami, a tym bardziej ich modernizację, aby jak najlepiej wykorzystać nowe narzędzia.
W rzeczywistości chmura i automatyzacja często pogarszają sytuację. Łatwość dostarczania nowej infrastruktury prowadzi do ciągle rosnącego portfolio systemów i potrzeba coraz więcej czasu, aby wszystko się nie zawaliło. Przyjęcie narzędzi chmurowych i automatyzacyjnych natychmiast obniża bariery dla wprowadzania zmian w infrastrukturze. Jednak zarządzanie zmianami w sposób poprawiający spójność i niezawodność nie wychodzi z pudełka z oprogramowaniem. Potrzeba ludzi, aby zastanowili się, w jaki sposób wykorzystają narzędzia i wprowadzą systemy, procesy i nawyki, aby skutecznie z nich korzystać.
Wartościowy cytat z wartościowej książki o IaC odpowiadający na postawione pytanie. Przy okazji polecam tą książkę jako lekturę podstawową w tym temacie. Oto jak prezentuje się okładka:
Potężne narzędzia operacyjne DevOps we współczesnych systemach IT
Od wielu lat poskramiamy rozwiązania w chmurach prywatnych, publicznych i hybrydowych. Zdecydowanie więcej Dev niżeli Ops jest obecnie w codziennej pracy w nowowczesnym dziale IT.
Koncept DevOps to stałe poszukiwanie możliwości automatyzacji powtarzalnych admińskich działań poprzez rozwój warsztatu developerskiego. Automatyzacja infrastruktury poprzez kod uwypukla ten koncept.
Najczęściej kod opisujący infrastrukturę to specjalny język domenowy DSL (ang. Domain Specific Language), czyli rozwiązujący problemy określonej dziedziny. W tym przypadku problem to opis konfiguracji i kolejności instalacji poporzez skrypty automatyczne naszych maszyn, systemów i oprogramowania na nich.
Najczęściej plików definicji nie piszemy od zera, gdyż analogicznie do języków programowania istnieją biblioteki, które ułatwiają nam wiele typowych czynności t.j. ustawienie strefy czasowej, automatyzacja aktualizacji, czyszczenie starych kerneli z listy, postawienie serwera www, itp.
Przedstawiam poniżej kilka gotowych do użycia ideii oraz narzędzi automatyzacji i wsparcia operacyjnego dla świeta DevOps(pod linkiem mój odrębny artykuł p.t. "Fenomen DEVOPS na ratunek dla skostniałych i niezbyt wydajnych zespołów w IT (programista i administrator w jednym)").
Puppet - bazując na dialekcie języka Ruby powstał pakiet pierwotnie pod banderą 'Puppet Labs' do zarządzania farmą maszyn. Obecnie Puppet doczekał się wersji 5 co potwierdza jego popularność wśród środowsk produkcyjnych. Działa dość sprawnie i zasadniczo tworzymy plik z rozszerzeniem *.pp a wnim zawieramy recepturę. Oczywiście dotyczyła będzie w praktyce całej farmy/klasy maszyn a nie jednej maszynki. Taka receptura trafia do repozytorium, z którego puppet-agent - zainstalowany na maszynce tuż po postawieniu z kanonicznego obrazu systemu - pobiera sobie przebieg działań i skutecznie je wykonuje.
Ansible - to narzędzie do provisioningu, któro pozwala na podłączenie się do node/maszyny, wgranie tam modułów. Moduły to zasoby wykorzystywane w opisie deklaratywnym stan systemu. Moduły są następnie wykonywane. Po wykonaniu moduły są kasowane. Słowo klucz tutaj to deklaratywny stan systemu. Czyli coś co nam opisuje jaki jest pożądany końcowy stan – jeżeli coś odbiega od założeń my mamy prawo odpowiednio zareagować, jak? zależy od nas.
Ansible najlepiej nadaje się do środowisk już istniejących, np. kiedy przejmujemy "legacy system" i musimy wesprzeć się automatyzacją, to możemy dodawać nowe zmiany już w sposób kontrolowany, przy pomocy receptur pisanych w Ansible.
Plusem Ansible jest prosta konfiguracja zmiennych i zadań do wykonania na środowisku oraz brak konieczności instalowania na klientach (w puppet musimy zainstalować puppet-agent na mszynkach).
Oczywiście mamy jeszcze do dyspozycji Chef, Salt i wiele innych możliwości.
Kolejnymi ważnymi pojęciami, które warto kojarzyć w kontekście konfiguracji jako kodu jest:
Platform as a service - PaaS - opis całej platformy w kodzie, który pozwala na postawienie np: całego naszego systemu w innej chmurze publicznej w celu wykonania testów lub sprawnej migracji do modelu hybrydowego.
Function as a service - FaaS - funkcje w chmurze (koncepcja serverless computing), dzięki którym nie musimy budować wielu mikroserwisów. Są to funkcje zazwyczaj dostępne publicznie po protokole HTTP i oferujące ~kilka minut przetwarzania naszych danych wejściowych. W wielu chmurach publicznych umożliwiają łączenie z wieloma usługami wewnętrznymi a nawet zewnętrznumi spotkałem się z takim ciekawym przypakiem w Azure, że można np: wpisywać do Google Docs rezultaty przetwarzania danych z FaaS.
Oto ciekawe porównanie, IaaS, PaaS i FaaS:
Pamiętaj, kiedy potrzebujesz potężnych narzędzi operacyjnych. Musisz napisać kod.
Zdajecie sobie sprawę z tego ilu adminów musi posiadać firma, aby serwery działały. Czasami warto zresetować myślenie o utrzymaniu infrastruktury i nie mnożyć stada adminów w firmie. Dlaczego ? - o tym właśnie jest ten wpis. Przychodzi nam na ratunek szereg rozwiązań zwanych automatyzacją IT.
W sumie istnieje przetestowane i rekomendowane przeze mnie rozwiązanie do zarządzania farmami serwerów, o którym wspominałem kilka lat temu. Nazywa się Puppet. W skrócie to synonim uproszczonej automatyzacji powtarzalnych czynności i procesów, który kojarzy się z szybkim wdrażaniem systemów i aplikacji w dziale infrastrukturyIT.
Warto wspomnieć, że automatyzacja w IT to nie tylko możliwość zdalnego zainstalowania softu, to również szereg zadań na każdym z etapów cyklu życia systemów:
wdrażanie (provisioning),
odkrywanie (discovery),
zarządzanie systemami i aplikacjami,
zarządzanie budowaniem i dystrybucją aplikacji,
zarządzanie wdrażaniem poprawek (patching),
audytowanie i śledzenie zgodności środowisk (audit)
Chciałbym się podzielić kilkoma cennymi i gotowymi materiałami z sieci, które warto znać, gdy podejmuje się decyzję o ułatwieniu życia działowi IT. Oto wartościowe materiały:
Marcin Bielak, architekt i programista biznesowych aplikacji internetowych. Stawia od początku na wysoką jakość produktu. W programowaniu wykorzystuje: Open Source, Linux, Python, Golang, ECMAScript/JavaScript.