Automatically Scaling a System Across Multiple Servers : A Comparison of Docker Swarm and Kubernetes
Strömberg, Petteri (2021)
Strömberg, Petteri
2021
Bachelor's Programme in Science and Engineering
Informaatioteknologian ja viestinnän tiedekunta - Faculty of Information Technology and Communication Sciences
This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.
Hyväksymispäivämäärä
2021-05-05
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:tuni-202104233404
https://urn.fi/URN:NBN:fi:tuni-202104233404
Tiivistelmä
Running applications in the cloud has many benefits over using physical machines. Cloud computing automates resource allocation and thus enables serving varying loads efficiently. Microservice applications can harness this functionality particularly well, as they are comprised of small independent services that can be scaled independently. This elasticity sets requirements for the software, such as managing the services across multiple servers and handling their states.
This thesis describes how a target system consisting of stateful containerised services can be distributed and automatically scaled across multiple servers. To achieve this, the system is redesigned to adhere to a microservice architecture. The redesigned system consists of stateless services that can be scaled horizontally with ease. The statelessness of the services is achieved by migrating from disk-based data storage to a streaming solution powered by Apache Kafka.
For distributing the target system, this thesis studies the two most popular container orchestrators: Docker Swarm and Kubernetes. A performance comparison of the orchestrators is conducted based on existing research and the functionality of the tools is compared using available documentation. One of the key features studied is automatic scaling. While Kubernetes supports automatic scaling natively, Docker Swarm services can only be scaled manually. This thesis proposes two solutions for scaling services automatically in Docker Swarm. The solutions use existing third-party software and the application programming interface provided by Docker.
The results of this thesis indicate that while Kubernetes offers a more complete set of features expected when running complex enterprise applications, its complexity causes both performance and management overhead compared to Docker Swarm. Docker Swarm, on the other hand, offers a great alternative where simplicity is prioritised over an extensive set of features. Furthermore, this thesis shows that the limited functionality of Docker Swarm can be extended to enable automatic scaling, although a sufficient solution for the target system of this thesis would require maintaining an additional component in-house. In the end, Kubernetes is chosen for orchestrating the target system, as it provides a more complete ready-made solution with built-in automatic scaling. Sovellusten ajaminen pilvessä tuottaa useita hyötyjä fyysisillä palvelimilla ajamiseen verrattuna. Pilvilaskenta automatisoi resurssien jakamisen ja täten mahdollistaa muuttuvan kuorman palvelemisen tehokkaasti. Mikropalvelupohjaiset sovellukset soveltuvat pilveen erityisen hyvin, sillä ne koostuvat pienistä itsenäisistä palveluista, joita voidaan skaalata yksitellen. Tämä elastisuudeksi kutsuttu ominaisuus edellyttää, että usealle palvelimelle hajautettuja palveluita ja niiden tiloja voidaan hallita.
Tässä työssä kuvataan, kuinka tilallisista konteista koostuva kohdejärjestelmä voidaan hajauttaa ajettavaksi usealla palvelimella, ja kuinka järjestelmän skaalaus voidaan automatisoida. Jotta tässä voidaan onnistua, järjestelmä suunnitellaan uudelleen noudattaen mikropalveluarkkitehtuuria. Uusi järjestelmä koostuu tilattomista palveluista, joiden horisontaalinen skaalaus on vaivatonta. Tilattomuus saadaan aikaan siirtymällä levypohjaisesta datan tallennuksesta tietovirtapohjaiseen ratkaisuun Apache Kafkan avulla.
Työssä vertaillaan kahta suosituinta konttien orkestrointityökalua, Docker Swarmia ja Kubernetesta, joiden avulla järjestelmä voidaan hajauttaa ajettavaksi usealla palvelimella. Työkalujen suorituskykyä vertaillaan olemassa olevan tutkimuksen pohjalta, ja ominaisuuksien vertailussa hyödynnetään työkalujen dokumentaatiota. Työssä keskitytään erityisesti palveluiden automaattiseen skaalaukseen. Kubernetes tarjoaa sisäänrakennetun ratkaisun automaattiseen skaalaukseen, mutta Docker Swarmissa palveluita voi skaalata vain manuaalisesti. Työssä esitellään kaksi vaihtoehtoista ratkaisua palveluiden automaattiseen skaalaukseen Docker Swarmissa. Ratkaisuissa hyödynnetään olemassa olevia ohjelmia ja Dockerin ohjelmointirajapintaa.
Työn tuloksena selviää, että Kubernetes tarjoaa kokonaisvaltaisemman valikoiman ominaisuuksia, joita etenkin vaativimmat yrityssovellukset tarvitsevat toimiakseen. Kuberneteksen monitahoinen rakenne vaikuttaa kuitenkin negatiivisesti sen suorituskykyyn ja tekee siitä Docker Swarmia vaikeamman hallita. Docker Swarm sen sijaan tarjoaa hyvän vaihtoehdon Kubernetekselle, kun yksinkertaisuus on laajoja ominaisuuksia tärkeämpää. Lisäksi työ osoittaa, että automaattinen skaalaus on mahdollista toteuttaa myös Docker Swarmissa. Kohdejärjestelmälle sopiva skaalausratkaisu vaatisi kuitenkin ylimääräisen komponentin kehittämisen ja ylläpidon. Kubernetes valikoituukin kohdejärjestelmän orkestrointityökaluksi, koska se tarjoaa valmiimman orkestrointiratkaisun ja sisäänrakennetun automaattisen skaalauksen.
This thesis describes how a target system consisting of stateful containerised services can be distributed and automatically scaled across multiple servers. To achieve this, the system is redesigned to adhere to a microservice architecture. The redesigned system consists of stateless services that can be scaled horizontally with ease. The statelessness of the services is achieved by migrating from disk-based data storage to a streaming solution powered by Apache Kafka.
For distributing the target system, this thesis studies the two most popular container orchestrators: Docker Swarm and Kubernetes. A performance comparison of the orchestrators is conducted based on existing research and the functionality of the tools is compared using available documentation. One of the key features studied is automatic scaling. While Kubernetes supports automatic scaling natively, Docker Swarm services can only be scaled manually. This thesis proposes two solutions for scaling services automatically in Docker Swarm. The solutions use existing third-party software and the application programming interface provided by Docker.
The results of this thesis indicate that while Kubernetes offers a more complete set of features expected when running complex enterprise applications, its complexity causes both performance and management overhead compared to Docker Swarm. Docker Swarm, on the other hand, offers a great alternative where simplicity is prioritised over an extensive set of features. Furthermore, this thesis shows that the limited functionality of Docker Swarm can be extended to enable automatic scaling, although a sufficient solution for the target system of this thesis would require maintaining an additional component in-house. In the end, Kubernetes is chosen for orchestrating the target system, as it provides a more complete ready-made solution with built-in automatic scaling.
Tässä työssä kuvataan, kuinka tilallisista konteista koostuva kohdejärjestelmä voidaan hajauttaa ajettavaksi usealla palvelimella, ja kuinka järjestelmän skaalaus voidaan automatisoida. Jotta tässä voidaan onnistua, järjestelmä suunnitellaan uudelleen noudattaen mikropalveluarkkitehtuuria. Uusi järjestelmä koostuu tilattomista palveluista, joiden horisontaalinen skaalaus on vaivatonta. Tilattomuus saadaan aikaan siirtymällä levypohjaisesta datan tallennuksesta tietovirtapohjaiseen ratkaisuun Apache Kafkan avulla.
Työssä vertaillaan kahta suosituinta konttien orkestrointityökalua, Docker Swarmia ja Kubernetesta, joiden avulla järjestelmä voidaan hajauttaa ajettavaksi usealla palvelimella. Työkalujen suorituskykyä vertaillaan olemassa olevan tutkimuksen pohjalta, ja ominaisuuksien vertailussa hyödynnetään työkalujen dokumentaatiota. Työssä keskitytään erityisesti palveluiden automaattiseen skaalaukseen. Kubernetes tarjoaa sisäänrakennetun ratkaisun automaattiseen skaalaukseen, mutta Docker Swarmissa palveluita voi skaalata vain manuaalisesti. Työssä esitellään kaksi vaihtoehtoista ratkaisua palveluiden automaattiseen skaalaukseen Docker Swarmissa. Ratkaisuissa hyödynnetään olemassa olevia ohjelmia ja Dockerin ohjelmointirajapintaa.
Työn tuloksena selviää, että Kubernetes tarjoaa kokonaisvaltaisemman valikoiman ominaisuuksia, joita etenkin vaativimmat yrityssovellukset tarvitsevat toimiakseen. Kuberneteksen monitahoinen rakenne vaikuttaa kuitenkin negatiivisesti sen suorituskykyyn ja tekee siitä Docker Swarmia vaikeamman hallita. Docker Swarm sen sijaan tarjoaa hyvän vaihtoehdon Kubernetekselle, kun yksinkertaisuus on laajoja ominaisuuksia tärkeämpää. Lisäksi työ osoittaa, että automaattinen skaalaus on mahdollista toteuttaa myös Docker Swarmissa. Kohdejärjestelmälle sopiva skaalausratkaisu vaatisi kuitenkin ylimääräisen komponentin kehittämisen ja ylläpidon. Kubernetes valikoituukin kohdejärjestelmän orkestrointityökaluksi, koska se tarjoaa valmiimman orkestrointiratkaisun ja sisäänrakennetun automaattisen skaalauksen.
Kokoelmat
- Kandidaatintutkielmat [8452]