gRPC:n hyödyntäminen mikropalveluiden synkronisessa kommunikoinnissa
Hakala, Juuso (2024)
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:amk-2024100326025
https://urn.fi/URN:NBN:fi:amk-2024100326025
Tiivistelmä
Tämä toiminnallinen opinnäytetyö käsittelee mikropalveluiden synkronista kommunikointia gRPC-nimisen teknologian näkökulmasta. Työssä perehdytään siihen, miten gRPC:stä voidaan hyötyä mikropalveluiden kehityksessä, miten se parantaa mikropalveluiden kommunikointia, ja miten gRPC:tä voidaan käyttää käytännössä. Työ keskittyy mikropalveluiden kommunikointiin, joten koko mikropalveluarkkitehtuuria ei käsitellä.
Työ alkaa teoriaosuudella, jossa esitellään aluksi mikropalveluarkkitehtuuria ja mikropalveluiden piirteitä. Tästä edetään tutkimaan palvelimien rakennetta, toimintaa ja virtualisointia. Lisäksi tutkitaan mikropalveluiden ajamista palvelimilla ja mikropalveluiden ajoympäristön keskeisimpiä kommunikointiin liittyviä komponentteja. Seuraavaksi selvitetään, miten mikropalvelut voidaan integroida yhtenäiseksi kokonaisuudeksi API:en avulla. Mikropalveluiden eri kommunikointitapoja esitellään, jossa pääpainona keskitytään synkroniseen kommunikointiin. Lopuksi perehdytään gRPC:hen, jonka osalta tarkastellaan sen hyötyjä ja haittoja, sekä soveltuvuutta mikropalveluiden synkroniseen kommunikointiin. Hyötyjen kannalta käsitellään esimerkiksi HTTP/2-protokollan ja Protocol Buffers -nimisen datan sarjoittamismuodon käyttöä. Nämä nopeuttavat tiedonsiirtoa mikropalveluiden välillä binäärimuodon ansiosta. Teoriaosuuden lopussa käsitellään gRPC:n eri viestintämalleja, toimintaa ja toteuttamista ohjelmistoihin.
Teoriaosuuden jälkeen alkaa työn toiminnallinen osuus, jossa kuvataan tämän opinnäytetyön osana kehitetyn mikropalveluprojektin toteutus alusta loppuun. Projektin kehitys koostui eri vaiheista, jotka käsitellään johdonmukaisesti toteuttamisen mukaisessa järjestyksessä. Projektin toteutuksessa hyödynnettiin ohjelmistokehityksen menetelmiä ja työkaluja.
Projekti on esimerkkiprojekti, jonka tarkoituksena on täydentää tietoperustan sisältöjä käytännön toteutuksella. Sen avulla voidaan näyttää, miten eri gRPC API:n rakentamisen vaiheet voidaan toteuttaa mikropalveluille, ja miten mikropalvelut voidaan integroida toimivaksi kokonaisuudeksi toteutettujen API:en avulla. Projekti koostuu kolmesta Go-ohjelmointikielellä ohjelmoidusta mikropalvelusta, jotka kommunikoivat keskenään synkronisesti tekijän suunnitteleman kommunikointiketjun mukaisesti. Synkroninen kommunikointi toteutettiin gRPC:llä hyödyntäen Protocol Buffersia datan sarjoittamismuotona ja rajapinnan määritelmäkielenä. Kommunikointiketjussa mikropalvelut lähettävät eri verkkopyyntöjä toisillensa etäproseduurikutsujen avulla tietyssä järjestyksessä. Jokaisen mikropalvelun gRPC API:a voidaan testata erikseen.
Tuloksena saatiin aikaiseksi mikropalveluiden lähdekoodit, gRPC API:en määritelmät prototiedostoissa ja generoidut gRPC-ohjelmakoodit Go-ohjelmointikielelle. Nämä kaikki julkaistiin avoimena lähdekoodina GitHub-palvelussa. Lisäksi projekti sisältää dokumentaation Markdown-muodossa, jossa ohjeistetaan mikropalveluiden ajaminen, konfiguroiminen ja testaaminen.
Työ alkaa teoriaosuudella, jossa esitellään aluksi mikropalveluarkkitehtuuria ja mikropalveluiden piirteitä. Tästä edetään tutkimaan palvelimien rakennetta, toimintaa ja virtualisointia. Lisäksi tutkitaan mikropalveluiden ajamista palvelimilla ja mikropalveluiden ajoympäristön keskeisimpiä kommunikointiin liittyviä komponentteja. Seuraavaksi selvitetään, miten mikropalvelut voidaan integroida yhtenäiseksi kokonaisuudeksi API:en avulla. Mikropalveluiden eri kommunikointitapoja esitellään, jossa pääpainona keskitytään synkroniseen kommunikointiin. Lopuksi perehdytään gRPC:hen, jonka osalta tarkastellaan sen hyötyjä ja haittoja, sekä soveltuvuutta mikropalveluiden synkroniseen kommunikointiin. Hyötyjen kannalta käsitellään esimerkiksi HTTP/2-protokollan ja Protocol Buffers -nimisen datan sarjoittamismuodon käyttöä. Nämä nopeuttavat tiedonsiirtoa mikropalveluiden välillä binäärimuodon ansiosta. Teoriaosuuden lopussa käsitellään gRPC:n eri viestintämalleja, toimintaa ja toteuttamista ohjelmistoihin.
Teoriaosuuden jälkeen alkaa työn toiminnallinen osuus, jossa kuvataan tämän opinnäytetyön osana kehitetyn mikropalveluprojektin toteutus alusta loppuun. Projektin kehitys koostui eri vaiheista, jotka käsitellään johdonmukaisesti toteuttamisen mukaisessa järjestyksessä. Projektin toteutuksessa hyödynnettiin ohjelmistokehityksen menetelmiä ja työkaluja.
Projekti on esimerkkiprojekti, jonka tarkoituksena on täydentää tietoperustan sisältöjä käytännön toteutuksella. Sen avulla voidaan näyttää, miten eri gRPC API:n rakentamisen vaiheet voidaan toteuttaa mikropalveluille, ja miten mikropalvelut voidaan integroida toimivaksi kokonaisuudeksi toteutettujen API:en avulla. Projekti koostuu kolmesta Go-ohjelmointikielellä ohjelmoidusta mikropalvelusta, jotka kommunikoivat keskenään synkronisesti tekijän suunnitteleman kommunikointiketjun mukaisesti. Synkroninen kommunikointi toteutettiin gRPC:llä hyödyntäen Protocol Buffersia datan sarjoittamismuotona ja rajapinnan määritelmäkielenä. Kommunikointiketjussa mikropalvelut lähettävät eri verkkopyyntöjä toisillensa etäproseduurikutsujen avulla tietyssä järjestyksessä. Jokaisen mikropalvelun gRPC API:a voidaan testata erikseen.
Tuloksena saatiin aikaiseksi mikropalveluiden lähdekoodit, gRPC API:en määritelmät prototiedostoissa ja generoidut gRPC-ohjelmakoodit Go-ohjelmointikielelle. Nämä kaikki julkaistiin avoimena lähdekoodina GitHub-palvelussa. Lisäksi projekti sisältää dokumentaation Markdown-muodossa, jossa ohjeistetaan mikropalveluiden ajaminen, konfiguroiminen ja testaaminen.