Vorgurakendused 2 prax 1 Mikroteenused 2021 kevad
Sarnaselt teiste praktikumitöödega oleks alustuseks vaja implementeerida lihtne P2P protokoll üle HTTP, nii et:
- protokoll oleks realiseeritud HTTP protokolli peale (vaja implementeerida ka HTTP server ja klient)
- mitu sinu rakenduse klooni suudavad suhelda nii samas masinas, töötades eri portide peal, kui mitmes erinevas masinas eri IP-de peal.
- eesmärk on kõigi rakendused omavahel suhtlema ja ühise võrguna tegutsema panna
Programmeerimiskeel on vabalt valitav. Masin(ad), kus su süsteem töötab, on vabalt valitavad: võid kasutada oma laptoppi, dijkstrat või mõnda muud serverit.
Kood peaks olema TTÜ Gitlabis repositooriumis nimega `ITI0215_2021`. Niimoodi on praktikumitööd õppejõudude poolt lihtsasti leitavad.
Sisukord
Praktikumitöö kirjtutamiseks on kaks suunda.
1. Olemasoleva monoliit-süsteemi dekomponeerimine mikroteenusteks ja selle töölepanemine HTTP Protokollil
2. Stsenaarium, kus on arhitektuur ette kirjutatud (see täpsustub) ja komponendid vahetavad omavahel andmeid.
Vaata ka: Uberi mikroteenuste arhitektuur - https://eng.uber.com/microservice-architecture/.
Mõlemal juhul oleks stsenaarium selline et erinevad teenused saadavad (olgu käsitsi või automaatselt) andmeid failiandmebaasile. Andmebaasiteenus peab suutma hakkama saada sellega et tuleb vastuolulist infot ja olema "single source of truth".
Implementeerida tuleb queue, mis protsese sünkroniseerib.
Edasiarendatud variandis ehitatakse eksperimentaalne süsteemi kus teenuseid pannakse käima hästi palju ja osad neist tehakse meelega katki. Selle kaudu selguvad parimad strateegiad kuidas erinevatest veaolukordadest välja tulla.
Millises järjekorras asju teha
- Vali välja ja seadista arendusvahendid: IDE sõltuvalt keelest milles kirjutad, tekita esmane Giti repo. Võiksid ka nüüd välja mõelda, kus kavatsed rakendust jooksutada ja kuidas võimalikult mugavalt deployda.
- Mõtle välja esmane topoloogia - komponendid millest rakendus koosneb ja kuidas need omavahel on seotud.
- Alustada jooksvalt dokumenteerimist. Mugav on seda teha README.md failis mida Giti repos hoiad
- Kirjutada hästi lihtne klient ja server, kõigepeallt fiksitud aadressil ja pordil - hiljem saad selle muuta dünaamiliseks.
- Mõtle juba praegu läbi kuidas ja mida konkreetselt demoda (stsenaariumid, konsoolimessaged jne)
Soovitusi tehnoloogiate valikul
Serverikomponent
Kuna selles aines valmisehitatud veebiservereid a'la Apache või Nginx kasutada ei tohi, siis peaksid selle implementeerima ise. Siin on soovitusi ja viiteid teekide valikuks:
Python:
- http.server + socketserver
- https://pythonbasics.org/webserver/
- https://docs.python.org/3/library/http.server.html
- https://www.afternerd.com/blog/python-http-server/
- https://www.bogotobogo.com/python/python_network_programming_socketserver_framework_for_network_servers.php
Java
- `HttpServer`
- Loe ka õpetust: A Simple HTTP Server in Java. https://dzone.com/articles/simple-http-server-in-java
Node
- Sissehitatud `http` moodul. https://nodejs.org/api/http.html
- Loe ka õpetust: How To Create a Web Server in Node.js with the HTTP Module. https://www.digitalocean.com/community/tutorials/how-to-create-a-web-server-in-node-js-with-the-http-module
Go, PHP jne
- (Go) `net/http` moodul https://gobyexample.com/http-servers
- (PHP) http server - https://github.com/amphp/http-server
Päringute testimine
- Postman. https://www.postman.com/
- Insomnia. https://insomnia.rest/
Loe ka: Postman vs Insomnia – why not both?. https://blog.tdwright.co.uk/2018/08/14/postman-vs-insomnia-why-not-both/
Mudeldamine. Kirjeldamine. Dokumenteerimine
Juhul kui juba kasutad mõnda "päris" mudeldamistööriista nt Visual Paradign, Enterprise Architect sobib see väga hästi. Aga reeglina on selliste tööriistade kasutuselevõtmine ajamahukas ja õppimiskõver kõrge. Seepärast on siin erinevaid kergeid alternatiive mis ei vaja installeerimist ja on intuitiivselt kasutatavad.
- Jadaskeemide (sequence diagrams) joonistamiseks: https://sequencediagram.org/ või https://www.websequencediagrams.com/
- Klassi jms diagrammid: Nomnoml - https://nomnoml.com/
Viiteid
- The Dark Side of Microservices. https://dzone.com/articles/the-dark-side-of-microservices
- 10 Challenges and Solutions for Microservices — Tips and Tricks. https://dzone.com/articles/10-challenges-of-microservices-and-solutions-tips
- A microservices example: writing a simple to-do application. https://developers.redhat.com/blog/2016/09/15/writing-microservices-an-example-through-a-simple-to-do-application/
- How to connect microservices: Part 1 Types of communication. https://www.cncf.io/blog/2021/01/22/how-to-connect-microservices-part-1-types-of-communication/
- Paxos vs Raft: Have we reached consensus on distributed consensus? https://arxiv.org/abs/2004.05074
- Incident response from monolith to microservices. https://www.effx.com/blog/incident-response-from-monolith-to-microservices