2 mar 202213 min czytania
Dawid Karczewski
Senior full stack developer i CTO w Ideamotive.
Patrząc z perspektywy 2023 roku: raport Microservices Adoption opublikowany przez O'Reilly w 2020 roku podkreślił rosnącą popularność mikroserwisów i sukcesy firm, które wdrożyły tę architekturę. To obszerne badanie, w którym wzięło udział 1500 osób - inżynierów oprogramowania, architektów technicznych i decydentów - pokazało, że 77% przedsiębiorstw sięgnęło po mikroserwisy. Co więcej, imponujące 92% z nich deklarowało wysokie zadowolenie z tej decyzji, co pokazuje potencjał mikroserwisów w usprawnianiu wytwarzania i wdrażania oprogramowania.
Co więcej, mikroserwisy stają się jedną z wiodących architektur oprogramowania dzięki skalowalności. Według tego raportuniemal 85% doświadczonych inżynierów i menedżerów uważa, że mikroserwisy staną się standardem w back-endzie i złożonych systemach.
W 2023 roku trend na mikroserwisy kwitnie. Ale czy mikroserwisy są dobre dla Twojego projektu? Czy warto zwrócić się w tej sprawie do programistów Go/Golang ?
Odpowiedź na te pytania da wyjaśnienie, czym są mikroserwisy, czym różnią się od architektury monolitycznej i jak może Ci w tym pomóc język programowania Google'a.
Zanurzmy się więc w temat!
Architektura mikroserwisowa to podejście do wytwarzania oprogramowania, w którym pojedynczą aplikację rozbijasz na wiele mniejszych usług, z których każda działa we własnym procesie i komunikuje się lekkimi mechanizmami.
Mikroserwisy projektuje się z myślą o możliwościach biznesowych i można je wdrażać niezależnie, automatycznym mechanizmem wdrożeniowym. Architektura mikroserwisów wymaga minimalnego zarządzania usługami zbudowanymi w różnych językach programowania i z użyciem różnych technologii składowania danych.

Mikroserwisy, czyli architektura mikroserwisowa, to podejście do wytwarzania oprogramowania, które pozwala zbudować aplikację jako zbiór małych usług w obrębie domeny biznesowej. Innymi słowy, oprogramowanie składa się z małych, niezależnych usług komunikujących się przez dobrze zdefiniowane interfejsy programistyczne (API).

Architektura monolityczna to dokładne przeciwieństwo mikroserwisów. W tym podejściu całe oprogramowanie jest jednym kawałkiem, zaprojektowanym jako samodzielna całość. Wszystkie komponenty programu monolitycznego są ze sobą powiązane i zależne.
Architektura monolityczna to powszechna metoda budowania aplikacji. Stosunkowo ułatwia wdrożenie, rozwój i testowanie oprogramowania. Jeśli więc wybierzesz tę metodę, dostaniesz gotowy produkt szybciej i taniej.
Architektura monolityczna jest dobrym wyborem przy tworzeniu koncepcji eksperymentalnej albo dla firm na etapie zakładania.
Gdy jednak aplikacja potrzebuje większej skalowalności, lepiej sięgnąć po architekturę mikroserwisową. Przy aplikacji monolitycznej, żeby wprowadzić drobną zmianę, musisz modyfikować cały stos. To czasochłonne, trudne i ryzykowne, bo jeden punkt awarii może wyłożyć cały program.
Architektura mikroserwisowa oznacza możliwość samodzielnej zmiany dowolnej funkcji - i uniknięcia wszystkich tych ryzyk oraz dodatkowych kosztów.
Netflix wykorzystuje mikroserwisy, żeby dostarczać swoją popularną usługę streamingu wideo na całym świecie. Mikroserwisów używają też globalne firmy takie jak Amazon, Apple czy Uber. Trudno więc powiedzieć, że o tym typie architektury mówi się tylko w wąskich kręgach.
Zobaczmy, jakie możliwości biznesowe czynią rozwiązania mikroserwisowe tak popularnymi:
Mikroserwisy można tworzyć w różnych językach programowania, frameworkach, a nawet na różnym sprzęcie, bez utraty interoperacyjności.
Architektura mikroserwisowa daje elastyczność oprogramowania, co oznacza, że zawsze możesz rozszerzyć rozwiązanie o nowe funkcje i wdrażać nowe usługi niezależnie od istniejących.
Mikroserwisy są proste, bo organizuje się je wokół możliwości biznesowych. Ponieważ każda usługa to osobny blok kodu z własną bazą danych, testowanie i rozwój stają się łatwiejsze i zajmują mniej czasu.
Jeśli jedna usługa przestanie działać (przez utrzymanie albo awarię), jej chwilowa niedostępność nie wpłynie na działanie reszty systemu.
Gdy już wybierzesz mikroserwisy do swojego projektu, kolejnym krokiem jest wybór technologii, która pozwoli wycisnąć z tej architektury maksimum.
Jak już wspomnieliśmy, do tworzenia mikroserwisów można użyć różnych frameworków i języków programowania. Sam proces zależy jednak w pełni od Twoich wymagań, które decydują o tym, co sprawdzi się najlepiej. Wybór języka programowania to jeden z najważniejszych kroków w całym procesie.
W teorii nada się każdy język programowania. Żeby jednak uniknąć pewnych problemów i wycisnąć z mikroserwisów maksimum korzyści, technologia musi spełniać następujące wymagania:
Rozwiązanie mikroserwisowe musi być jak najszybsze w obsłudze baz danych i routingu.
Minimalna liczba bibliotek zewnętrznych. Większość z nich ma licencje nieodpowiednie dla rozwiązań korporacyjnych. Poza tym, choć dają solidną funkcjonalność, ich użycie bywa niebezpieczne z punktu widzenia cyberbezpieczeństwa.
Procesy wytwarzania i testowania powinny być zautomatyzowane w możliwie największym stopniu, żeby skrócić czas wdrożenia i zmniejszyć ryzyko błędu człowieka.
Każda usługa powinna być zdecentralizowana, żeby przyspieszyć wytwarzanie oprogramowania i uprościć utrzymanie.
System należy zaprojektować tak, żeby łatwo było znaleźć ludzi zdolnych go utrzymywać.
Pozwala to wdrażać i aktualizować produkt tak szybko, jak to możliwe, przy minimalnym koszcie. Kultura CI/CD przyspiesza i ułatwia też sam rozwój.
Werdykt: Python, Java, JavaScript, .NET i Go spełniają te kryteria, bo każdy z nich ma dobrą czytelność i interoperacyjność oraz oferuje frameworki do budowy architektur mikroserwisowych. Coraz więcej firm wybiera jednak tworzenie aplikacji webowych w Golangu zamiast innych opcji przy budowie mikroserwisów.
Na przykład The Economist wybrał język Go do tworzenia mikroserwisów przy przejściu z monolitu na architekturę mikroserwisową (głównie ze względu na doskonałą spójność z architekturą platformy). Poza tym składnia Go jest stosunkowo prosta, więc łatwo było od razu zacząć pisać działający kod. Szybkie zwycięstwo zespołu w okresie przejściowym.
Nie ma lepszego związku niż Go i mikroserwisy. Język Golang spełnia i przewyższa wszystkie wymagania opisane wyżej. Oto kilka kolejnych powodów, dla których Twój biznes skorzysta na budowaniu mikroserwisów w Golangu:
Go to prosty język, którego łatwo się nauczyć, i to być może najlepsza cecha języka programowania z punktu widzenia procesów biznesowych. Składnia Golanga jest stosunkowo skromna i od dawna używana bez większych zmian. Ponieważ nie trzeba uczyć się nowych paradygmatów ani składni, kod pisany w Go jest przejrzysty i łatwy do zrozumienia.
Czyni to Go idealnym wyborem do backendów, mikroserwisów, systemów chmurowych i nie tylko. Jego cechy pomagają też łagodzić wady mikroserwisów:
Architektura mikroserwisowa w Golangu sprawia, że programiści nie spędzają mnóstwa czasu na czytaniu cudzego kodu i szybciej wchodzą w projekt. Nawet jeśli musisz zmienić zespół, wciąż bez problemu utrzymasz i zaktualizujesz swoje oprogramowanie.
Golang kompiluje się szybciej niż większość innych języków, co oszczędza czas programistów i pieniądze właścicieli firm. Oto kilka powodów:
Wydajność Go również jest znakomita. Oto kilka testów pokazujących, że w wielu przypadkach Golang wypada lepiej niż popularne języki programowania

Źródło: Benchmarks Game
dzięki ścisłemu rozdzieleniu modułów. Promuje niezależne komponenty realizujące logikę biznesową zgodnie ze wzorcami projektowymi mikroserwisów. Co więcej, faktyczny rozmiar skompilowanych binariów Go wskazuje na pożądaną, niewielką konstrukcję samego mikroserwisu.
Promuje programowanie zdarzeniowe bez potrzeby dziedziczenia, callbacków, futures, promise'ów czy strategii, które często prowadzą do niepotrzebnie złożonej logiki. Dzięki zwięzłości mikroserwisy w Go nie wiążą się ze sobą przy pojedynczych zadaniach.
Daje:
Ma swoje wady, ale mocne strony czynią go świetnym uzupełnieniem architektury opartej na mikroserwisach.
Każdy mikroserwis jest niezależny od pozostałych, jest hermetyczny. Możesz więc zmieniać i aktualizować każdy z nich zgodnie ze swoimi wymaganiami i poprawiać niezależnie.
Programiści mogą tworzyć każdy mikroserwis innymi narzędziami, bo nie wpłynie to na rozwój pozostałych. Podobnie każdy mikroserwis może mieć inną bazę danych.
Ponieważ mikroserwisy w Golangu są od siebie niezależne, mogą mieć różne daty wydania. Nie są powiązane i mają elastyczne harmonogramy wydań.
Ponad 16 000 programistów w badaniu HackerEarth Insights uznało Go za najpopularniejszy język do nauki w 2020 roku. Zarówno wśród studentów (29%), jak i doświadczonych programistów (32%) Go był wyraźnym zwycięzcą jako najbardziej poszukiwany język programowania.
Co więcej, społeczność Go może pochwalić się ogromną liczbą blogerów Go. Nic dziwnego, że sam Go i mikroserwisy w Golangu zyskują popularność równolegle.
Bez wątpienia product ownerzy nie odczują w najbliższych latach braku programistów webowych Go.

Omówmy teraz frameworki, których możemy użyć do architektury mikroserwisowej. Weźmiemy pod uwagę następujące:
Go Micro to zdecydowanie najpopularniejszy framework RPC, jaki spotkaliśmy. To framework RPC z wtyczkami. Go Micro daje nam:
Architekturę Go Micro można przedstawić następująco -

To trójwarstwowy stos:
Wtyczki są następujących typów:
Daje też funkcję o nazwie Sidecar. Sidecar pozwala integrować usługi napisane w językach innych niż Go. Zapewnia nam także kodowanie i dekodowanie gRPC, rejestrację usług i handlery HTTP.
Go Kit to zestaw narzędzi do budowania mikroserwisów. W przeciwieństwie do Go Micro jest to biblioteka, którą importuje się jako pakiet. Zasady Go Kit są dość proste:
Go Kit daje pakiety do:
Architektura usługi w Go Kit wygląda tak -

Gizmo to zestaw narzędzi mikroserwisowych od The New York Times. Daje pakiety do łączenia serwera i demonów pubsub. Zawiera następujące pakiety:
Pakiet Pubsub daje interfejsy do pracy z następującymi kolejkami:
Gizmo plasuje się gdzieś między Go Micro a Go Kit. Nie jest kompletną „czarną skrzynką” jak Go Micro. Jednocześnie nie jest tak surowy jak Go Kit. Daje komponenty wyższego poziomu, takie jak pakiety config i pubsub.
Kite to framework mikroserwisowy dla Golanga. Daje pakiety klienta i serwera RPC. Tworzone usługi rejestrują się automatycznie w systemie odkrywania usług Kontrol. Kontrol jest napisany w Kite i sam jest usługą Kite. Oznacza to, że mikroserwisy Kite dobrze działają we własnym środowisku. Jeśli musisz podłączyć mikroserwis Kite do innego systemu odkrywania usług, potrzebna będzie konfiguracja.
W zasadzie są dwa powody, dla których język programowania Google'a wykorzystują firmy różnej wielkości:
Golang powstał z myślą o chmurze obliczeniowej. Wykorzystuje równoległość i współbieżność, jakie daje nowoczesny sprzęt.
Z tym podejściem do równoległości pracuje się bardzo łatwo. W porównaniu z Pythonem czy Javą uruchomienie funkcji w gorutynie wymaga minimum kodu szablonowego.
Gorutyny i oparte na kanałach podejście do równoległości bardzo ułatwiają wykorzystanie wszystkich dostępnych rdzeni CPU i obsługę równoległego I/O bez komplikowania pracy.
Z czasem na tych fundamentalnych systemach, bibliotekach i językach zbudowano nowe, złożone systemy. Zbyt często nie myśli się o ukrytych kosztach złożoności. Prawda jest taka, że kod czyta się znacznie częściej, niż się go pisze. Złożoność mocno obciąża tempo pracy zespołu.
Kod w Go jest bardzo prosty i łatwy do czytania. Ta prostota pozwala zespołom współpracować w sposób wcześniej niemożliwy.
Platformy technologiczne dają wspólny zestaw funkcji, który przyspiesza tworzenie aplikacji, więc rozwiązania szybciej trafiają do firm. Często wymagają wysokiej skalowalności i niezawodności, a te Golang zapewnia w 100%.
System rezerwacji online pozwala zamawiać usługi i płacić za nie przez aplikacje webowe lub mobilne, co pozwala firmom skalować działalność. W codziennej pracy takie systemy wymagają najwyższej niezawodności, skalowalności i integracji z innymi systemami. Skoro Golang daje takie możliwości mikroserwisowe, dlaczego nie napisać w nim swojego kodu?
Startupy e-commerce, małe i średnie firmy oraz duże przedsiębiorstwa mierzą się z czasami ładowania stron, problemami ze skalowalnością i dostępnością serwisu, na przykład podczas dużych promocji. Golang jest szeroko stosowany do rozwiązywania tych problemów.
Przy globalnej pracy 24/7 i ostrych SLA stabilność i automatyczne odzyskiwanie są koniecznością, bo każdy krok w potoku płatności wymaga możliwie najniższych opóźnień, jakie daje Golang.
Protokoły takie jak HLS w Golangu ułatwiają zbudowanie usługi streamingowej, którą łatwo się instaluje i która daje najefektywniejszą wydajność. Obsługuje najczęściej używane formaty plików i kodowania. Dużą zaletą streamingu w tym języku jest szybkość, zwłaszcza przy transmisjach na żywo. Bez płynnego przejścia przy kodowaniu, dekodowaniu i pakowaniu obrazu i dźwięku transmisja na żywo nie jest możliwa. Go obsługuje wszystkie te procesy bezproblemowo, co daje widzowi wysoką jakość przy minimalnych przerwach.

Dropbox wiele zawdzięcza Pythonowi - językowi, który pozwolił firmie szybko iterować i się rozwijać. Gdy jednak baza użytkowników urosła, zaczęto szukać sposobów na efektywniejsze skalowanie systemów. Doprowadziło to do przeniesienia krytycznych wydajnościowo backendów z Pythona do Go, żeby skorzystać z lepszego wsparcia dla współbieżności i szybszego wykonania.
To była ogromna praca - około 200 000 linii kodu Go - wykonana przez mały zespół inżynierów. Z powodzeniem przenieśli główne części naszej infrastruktury do Go. Zviad Metreveli wcześniej opisał szczegóły tego przedsięwzięcia w mikroserwisie Go w Dropboksie.
Ludzie bardzo szybko stają się produktywni w Go, nasza infrastruktura opiera się dziś na Go i wszystkie nowe rzeczy budujemy w Go.
— Zviad Metreveli, Senior Lead Engineer, Dropbox.
Poza tym Dropbox udostępnił jako open source kilka bibliotek Golanga , które pomagają usprawnić buforowanie, standardowy interfejs błędów i nie tylko.
W 2022 roku Dropbox nadal rozbija monolityczną bazę kodu w Pythonie i zamienia ją w zarządzaną platformę bezserwerową, która zmniejszy zaciemnienie kodu i uwolni usługi oraz stojące za nimi zespoły inżynierskie od wzajemnego splątania. W tym celu aktualizuje architekturę - na przykład standaryzację gRPC i użycie transkodowania gRPC-HTTP w Envoyu. Zobacz ich wpis na blogu.

Choć Uber historycznie opierał się głównie na Node.js i Pythonie, Go staje się językiem pierwszego wyboru przy budowie wielu nowych usług Uber Engineering.
Uber napisał w Golangu ponad sto usług. Geobase to jedna z ostatnich usług Ubera napisanych w tym języku. Dopasowuje pasażerów do kierowców, dzieląc dopasowania według samochodów. W praktyce Golang napędza większość usług Ubera o wysokim RPS.
Patrząc wstecz, jesteśmy bardzo zadowoleni z decyzji, żeby się na to zdecydować i napisać naszą usługę w nowym języku.
— Kai Wei.
Najważniejsze punkty:
Źródło: How we created the highest request per second Uber Engineering service with Go.

Silnik kontenerowy PouchContainer grupy Alibaba jest napisany w Golangu. Potrafi pakować, dostarczać i uruchamiać dowolną aplikację. Daje aplikacjom lekkie środowisko uruchomieniowe z silną izolacją i minimalnym narzutem.
PouchContainer działał stabilnie na dziesiątkach tysięcy węzłów w Alibabie i pomógł płynnie obsłużyć wszystkie transakcje online podczas Dnia Singla 2017 na milionach kontenerów.

American Express znany jest przede wszystkim z kart kredytowych i obsługi płatności.
W 2016 roku zespoły platformy płatności i programów lojalnościowych jako jedne z pierwszych zaczęły oceniać Go. Skupiały się głównie na mikroserwisach, routingu transakcji i równoważeniu obciążenia, a potrzebowały unowocześnić architekturę.
Po pracy w Go większość naszych programistów nie chce wracać do innych języków.
— Benjamin Cain, wiceprezes i główny inżynier, American Express
Żeby pomóc innym firmom ocenić, czy Go jest dla nich, opublikowali przykład użycia Go: American Express Uses Go for Payments & Rewards.
Źródło: Choosing Go at American Express

PayPal był pionierem płatności online i pozostaje wiodącym procesorem płatności dla sklepów internetowych, serwisów aukcyjnych i wielu innych użytkowników komercyjnych na świecie.
PayPal zatrudnia dziś ponad 100 programistów Go. Choć Go może nigdy nie zastąpi Node.js w niektórych zastosowaniach, w PayPalu jest językiem pierwszej klasy.
Go daje kanały i podprogramy do rozwiązywania złożonych problemów; mogliśmy ustrukturyzować kod zgodnie z naszymi wymaganiami.
— Bala Natarajan, Senior CTO, Developer Experience at PayPal.
Źródło: PayPal Taps Go to Modernize and Scale

SoundCloud to serwis konsumencki, wiodąca platforma audio w internecie - a to znaczy wszystko, od domowych DJ-ów wrzucających swoje miksy po zawodowych dziennikarzy publikujących wywiady i podcasty.
SoundCloud utrzymuje około pół tuzina usług i kilkanaście repozytoriów napisanych w całości w Go. Coraz częściej sięgamy po Go, gdy startujemy z nowymi projektami serwerowymi.
Źródła: Go at SoundCloud, Peter Bourgon on CRDTs, Go at SoundCloud

To platforma do streamingu wideo na żywo, skupiona na transmisjach z gier, muzyce, treściach kreatywnych, rozgrywkach e-sportowych i nie tylko.
Twitch używa Go w wielu naszych najbardziej obciążonych systemach. Jego prostota, bezpieczeństwo, wydajność i czytelność czynią z niego dobre narzędzie do rozwiązywania problemów, które napotykamy, dostarczając wideo na żywo i czat milionom użytkowników. Go jest ważną częścią skalowania Twitcha, zwłaszcza w połączeniu z AWS Lambda.
— Spencer Nelson, inżynier w Twitchu.
W 2018 roku Twitch udostępnił framework RPC, którego używa do komunikacji między własnymi serwerami napisanymi w Go - Twirp: a sweet new RPC framework for Go
Źródło: Twitch Engineering: An Introduction and Overview
Mikroserwisy może i nie są najszybszym sposobem budowania oprogramowania, ale na dłuższą metę to mądry wybór. Tańsze i bardziej elastyczne niż architektury monolityczne, mikroserwisy mogą być rozwijane i testowane równolegle i niemal niezależnie przez małe zespoły. Architektura mikroserwisowa upraszcza też wdrażanie i diagnozowanie problemów. Nie wspominając o tym, że mikroserwisy są właściwym wyborem dla skalowalnych projektów.
Jeśli choć część powyższego dotyczy Twojego projektu, śmiało - pamiętaj tylko, że będziesz potrzebować właściwego stosu technologicznego, żeby wycisnąć z tej architektury maksimum. Język Go jest do tego znakomitym wyborem. Nie tylko spełnia wszystkie kryteria stosu mikroserwisowego, ale daje też ogromne korzyści biznesowe.
Golang różni się od innych języków młodym wiekiem i możliwością tworzenia ciekawych projektów od samego początku istnienia.
Golang daje wysoką wydajność jak C/C++, bardzo skuteczne przetwarzanie równoległe jak Java i klarowną czytelność jak Python, Perl czy Erlang. Zaprojektowano go do obsługi mocno obciążonych systemów przy 100-procentowym wykorzystaniu architektury wieloprocesorowej. Z tych powodów wiele firm przechodzi na Go z innych języków i tworzy wydajne oprogramowanie w architekturze mikroserwisowej.
Mikroserwisy w Golangu łatwo się czyta, a więc i łatwo utrzymuje. Jeśli z czasem będziesz musiał zmienić zespół, nie zagrozi to całemu biznesowi.
W Ideamotive od dawna używamy Golanga, więc nasza rozległa Talent Network uzupełni Twój zespół o świetnych ekspertów. Możemy też zebrać doświadczony, w pełni samodzielny dedykowany zespół programistów, project managerów i projektantów dopasowany do pomysłu Twojego projektu.
Skontaktuj się z nami , żeby omówić, która architektura i który język będą najlepsze dla Twojego pomysłu i projektu!
Dawid jest full stack developerem. Tworzy aplikacje w Ruby on Rails i React Native od pierwszego pomysłu aż po wdrożenie. Buduje dla naszych klientów rozwiązania, które pomagają im rosnąć.
Zobacz wszystkie wpisy autoraPopularne artykuły
21 inspirujących projektów UI aplikacji mobilnych na 2023 rok
Michał Pruciak 7 min czytania
MedTech vs HealthTech vs BioTech: jakie są różnice?
Michał Pruciak 7 min czytania
10 biznesowych zastosowań sieci neuronowych (z przykładami!)
Michał Pruciak 4 min czytania
10 przykładów dobrych praktyk w web designie na 2023 rok
Adam Kozłowski 7 min czytania
28 znanych aplikacji webowych napisanych w PHP
Dawid Karczewski 14 min czytania
Jakich usług programistycznych szukasz?
W naszej sieci talentów czekają dziesiątki zweryfikowanych specjalistów Golang.
Dane rejestrowe:
Firma
Usługi
Najczęściej poszukiwani specjaliści
Ocena 4,8 / 5,0 od klientów z różnych branż i lokalizacji.
Zatrudnij autora artykułu
Dawid to full-stack developer z bogatym doświadczeniem w Golangu. Brzmi ciekawie? Porozmawiajmy o dostępności Dawida.