Building scalable and fault-tolerant software systems with Kafka

Loading...
Thumbnail Image

URL

Journal Title

Journal ISSN

Volume Title

Perustieteiden korkeakoulu | Master's thesis

Date

2023-12-11

Department

Major/Subject

Computer Science

Mcode

SCI3042

Degree programme

Master’s Programme in Computer, Communication and Information Sciences

Language

en

Pages

49

Series

Abstract

Distributed systems have been rising in popularity throughout the last decade, and organizations are increasingly favoring microservice architectures instead of monolithic architectures. The movement in architectures aims to solve issues related to scalability and fault-tolerance. These subjects have gained greater significance because, in today's environment, the user base and data volume within a service can experience rapid fluctuations, potentially leading to challenges in the quality of service. Every service with communication needs will need a communication mechanism. Choosing between communication mechanisms depends on many factors. With the rise of microservice architectures, publisher-subscriber messaging-based communication has been gaining popularity as well. It works well with the need to decouple services that are under heavy loads and where the messages need to be distributed to multiple places. Many options that implement message brokers exists, this thesis focuses on Apache Kafka, an open-source distributed streaming system. The aim of this thesis is to study how Kafka can be used to build scalable and fault-tolerant software systems. Kafka inherently offers mechanisms that enable easy scalability and fault-tolerance. However, the software using Kafka needs to be implemented in a manner where these mechanisms can be used to their full potential. This thesis investigates the role of Kafka in a system and the steps required to enable the potential of Kafka. To showcase the potential of Kafka, we present two case studies that both have two use cases. These case studies demonstrate how Kafka can be used to scale services and how to maximize fault-tolerance. Furthermore, the case studies present solutions for maintaining fault-tolerance in the event of fault scenarios. The implementations of these case studies performed robustly and through various test scenarios, I was reaffirmed of Kafka’s capabilities in handling various fault scenarios. In addition, decoupling bottleneck services into horizontally scalable microservices demonstrated an enhancement in performance and service quality, addressing the shortcomings of our previous monolithic architecture. Our findings show that utilizing Kafka enables services to be scaled easily and creates a fault-tolerant environment. However, there are certain situations where Kafka cannot handle fault scenarios, and those need to be addressed by the system itself. Ultimately, Kafka is well-suited for systems that need to be scalable and fault-tolerant. However, the largest downside of integrating Kafka is the added complexity and operational overhead.

Viimeisen vuosikymmenen aikana hajautetut järjestelmät ovat kasvattaneet suosiotaan, ja organisaatiot suosivat yhä enemmän mikropalveluarkkitehtuureja monoliittisten arkkitehtuurien sijaan. Arkkitehtuurimuutoksen tavoitteena on ratkaista skaalautuvuuteen ja virheidensietoon liittyviä ongelmia. Nämä aiheet ovat entistä tärkeämpiä, koska nykymaailmassa palveluiden käyttäjämäärä ja datan määrä voivat vaihdella nopeasti, aiheuttaen haasteita palvelun laadulle. Jokainen palvelu, jolla on viestintätarpeita, tarvitsee viestintämekanismin. Viestintämekanismin valinta riippuu monista tekijöistä. Mikropalveluarkkitehtuurien yleistyessä julkaisija-tilaaja malliin perustuva viestintä on myös saanut suosiota. Julkaisija-tilaaja malli toimii hyvin tilanteissa, joissa raskaan kuorman alla olevia palveluita pitää irrottaa järjestelmästä, sekä tilanteissa joissa viestit on jaettava useisiin paikkoihin. Viestintäpalveluja toteuttavia vaihtoehtoja on monia, mutta tämä diplomityö keskittyy Apache Kafkaan, avoimen lähdekoodin hajautettuun suoratoistojärjestelmään. Tämän diplomityön tarkoituksena on tutkia miten Kafkaa voidaan hyödyntää skaalautuvien ja virheidensietoisten ohjelmistojärjestelmien rakentamisessa. Kafka tarjoaa luontaisesti mekanismeja, jotka mahdollistavat helpon skaalautuvuuden ja virheenkestävyyden. Kafkaa käyttävät ohjelmistot ovat kuitenkin toteutettava tavalla, jossa näitä mekanismeja voidaan hyödyntää täysimääräisesti. Tämä diplomityö tutkii Kafkaa roolia järjestelmässä ja selvittää, mitkä askeleet tarvitaan Kafkan potentiaalin hyödyntämiseksi. Näyttääksemme Kafkan potentiaalin, esittelemme kaksi tapaustutkimusta, joissa kummassakin on kaksi käyttötapaa. Nämä tapaustutkimukset osoittavat, miten Kafkaa voidaan hyödyntää palvelujen skaalaamiseen ja virheensietokyvyn maksimointiin. Lisäksi tapaustutkimukset esittävät ratkaisuja virheenkestävyyden ylläpitämiseen virhetilanteissa. Näiden tapaustutkimusten toteutukset suoriutuivat vakaasti, ja erilaisten testitilanteiden kautta minulle vahvistui Kafkan kyky monien erilaisten vikatilanteiden käsittelyssä. Lisäksi pullonkaula palvelujen irrottaminen skaalautuviin mikropalveluihin osoitti suorituskyvyn ja palvelun laadun parantumista, korjaten aiemman monoliittisen arkkitehtuurimme heikkouksia. Tutkimuksemme osoittavat, että Kafkan hyödyntäminen mahdollistaa palvelujen helpon skaalautumisen ja luo virheenkestävän ympäristön. On kuitenkin tilanteita, joissa Kafka ei kykene käsittelemään virhetilanteita, ja ne on ratkaistava itse järjestelmän toimesta. Pohjimmiltaan Kafka soveltuu hyvin järjestelmiin, jotka tarvitsevat skaalautuvuutta ja virheensietokykyä. Suurin haittapuoli Kafkan integroimisessa on lisääntynyt monimutkaisuus ja toiminnallinen taakka.

Description

Supervisor

Ylä-Jääski, Antti

Thesis advisor

Saarela, Janne

Keywords

Apache Kafka, fault-tolerance, scalability, monolithic architecture, microservice architecture, microservices

Other note

Citation