Ili je vaš zadatak mali ili ga možete podijeliti na manje zadatke. A mali zadatak savršeno odgovara mikroservisu.
Dizajn softvera bitna je faza u razvoju softvera. Dizajnerski pristup može utjecati na cijeli projekt i na to kako se nosite s različitim zahtjevima.
Programeri su često koristili monolitnu arhitekturu, spajajući sve softverske komponente u jedan modul. Međutim, ovaj se pristup može pokazati neučinkovitim, osobito za veće primjene.
Mikrousluge imaju za cilj riješiti ta ograničenja. Mikroservis je mala, modularna aplikacija koja obavlja određene funkcije. Za razliku od monolitnih aplikacija, mikroservisi omogućuju neovisnu implementaciju i skaliranje. Kao rezultat toga, fleksibilniji su i lakši za održavanje.
Arhitektura mikroservisa
Arhitektura mikroservisa pristup je dizajnu softvera koji veliku aplikaciju rastavlja na neovisne usluge, pri čemu je svaka usluga dizajnirana za rješavanje specifičnih poslovnih zahtjeva.
Ove usluge rade na namjenskim resursima, uključujući zasebne instance baze podataka i računalne snage. Za razliku od monolitnih sustava, mikrouslužne aplikacije su labavo povezane što omogućuje veću fleksibilnost.
U distribuiranom sustavu čvorovi poslužitelja postavljaju i izvršavaju aplikacije mikroservisa kao zasebni procesi — međusobno komuniciranje korištenjem komunikacijskih protokola kao što je HTTP ili putem brokera poruka poput RabbitMQ.
U suštini, ovaj arhitektonski pristup omogućuje uslugama da zadrže svoju neovisnost jedna o drugoj dok učinkovito rade unutar softverskog sustava.
U ovom vodiču vodit ćemo vas kroz implementaciju jednostavne korisničke mikroservise koja upravlja korisničkim podacima pomoću Flaska i PostgreSQL-a
Postavite PostgreSQL bazu podataka
Za početak instalirajte PostgreSQL. Ako nemate instaliran PostgreSQL, možete saznati kako instalirati PostgreSQL na Windows ili kako instalirati PostgreSQL na macOS.
Alternativno, možete konfigurirati a udaljena baza podataka PostgreSQL primjer.
Ovaj će vodič koristiti Renderov besplatni sloj za postavljanje PostgreSQL baze podataka. Slijedite ove kako biste pokrenuli instancu PostgreSQL baze podataka na Renderu:
- Prijeđite na Renderovo web mjesto, prijavite se za račun i prijavite se na svoj nadzorna ploča stranica.
- Na stranici nadzorne ploče s prikazanog popisa usluga odaberite uslugu PostgreSQL.
- Na stranici s postavkama baze podataka ispunite potrebne podatke i svakako odaberite besplatni sloj, i na kraju kliknite Stvorite bazu podataka.
Kôd ovog projekta možete pronaći ovdje GitHub spremište.
Stvorite Flask Microservice
- U svom terminalu napravite novi direktorij i prijeđite u njega:
mkdir boca-mikroservis
cd boca-mikroservis - Zatim instalirajte virtualenv, za stvaranje izoliranog virtualnog razvojnog okruženja.
pip instaliraj virtualenv
- Stvorite virtualno okruženje u svom projektu:
virtualenv venv
- Na kraju, aktivirajte virtualno okruženje.
# Windows:
.\venv\Skripte\aktivirati
# Unix ili MacOS:
izvor venv/bin/aktivirati
Instalirajte potrebne pakete
- Stvorite novi zahtjevi.txt datoteku u korijenskom direktoriju i dodajte ove pakete:
pljoska
psycopg2-binarni
sqlalkemija - Zatim instalirajte pakete.
pip install -r zahtjevi.txt
Stvorite Flask poslužitelj
U korijenskom direktoriju izradite novu datoteku: usluga.py, i sljedeći kod:
- Napravite sljedeće uvoze:
iz pljoska uvoz Flask, zahtjev, jsonify
iz sqlalkemija uvoz create_engine, stupac, cijeli broj, niz
iz sqlalchemy.orm uvoz sessionmaker
iz sqlalchemy.ext.declarative uvoz deklarativna_baza
uvoz psycopg2 - Stvorite instancu Flaska i konfigurirajte vezu s bazom podataka.
Kopiraj URL vanjske baze podataka na stranici postavki Renderove baze podataka. Koristit ćemo se SQLAlchemy create_engine metoda i Psycopg2 za konfiguriranje veze s bazom podataka. Obavezno ažurirajte i zamijenite URL baze podataka u gornjem kodu s URL-om vlastite PostgreSQL instance koja odgovara gore navedenom formatu. Ako format URL-a nije ispravan, kod će izbaciti pogrešku.aplikacija = Flask (__ime__)
motor = create_engine("postgresql+psycopg2://flask_service_fe0v_user: 4785MhjfkdjfhjfjyUx67O2Nuzjchb2MQIP@dpg-chffjfjdkgfk54d6mb7860-a.oregon-postgres.render.com/flask_service_fe0v")
- Napravite SQLAlchemy model za bazu podataka.
Kod definira podatkovni model za tablicu korisnika. Nakon definiranja modela, kreira tablicu pomoću SQLAlchemy create_all metoda koja uzima bazu podataka objekt veze motor kao parametar. Konačno, stvara instancu maker sesije korištenje istog objekta stroja za omogućavanje interakcija s bazom podataka.Baza = deklarativna_baza()
razredaKorisnik(Baza):
__naziv tablice__ = 'korisnici'
id = Stupac (cijeli broj, primarni_ključ=Pravi)
ime = stupac (niz(50))
Base.metadata.create_all (motor)
ispis("Tablica 'korisnici' uspješno je kreirana.")
Sesija = sessionmaker (motor) - Na kraju, definirajte API rute za mikroservis.
@app.route("/api/user", metode=["POST"])
defstvoriti_korisnika():
podaci = zahtjev.get_json()
ime = podaci["Ime"]
probati:
sesija = Sesija()
new_user = Korisnik (name=ime)
session.add (novi_korisnik)
session.commit()
povratak {"iskaznica": new_user.id, "Ime": novo_korisničko.ime, "poruka": f"Korisnik {Ime} stvorio."}, 201
osim Iznimka kao e:
ispis(f"Greška"{e}' dogodilo.")
povratak {"greška": "Došlo je do pogreške prilikom kreiranja korisnika."}, 500
@app.route("/api/user", metode=["GET"])
defdobiti_sve_korisnike():
probati:
sesija = Sesija()
korisnici = session.query (Korisnik).all()
ako korisnici:
rezultat = []
za korisnik u korisnici:
result.append({"iskaznica": user.id, "Ime": Korisničko ime})
povratak jsonify (rezultat)
drugo:
povratak jsonify({"greška": f"Korisnici nisu pronađeni."}), 404
osim Iznimka kao e:
ispis(f"Greška"{e}' dogodilo.")
povratak {"greška": "Došlo je do pogreške prilikom preuzimanja svih korisnika."}, 500
ako __ime__ == "__glavni__":
app.run (debug=Pravi, domaćin="0.0.0.0")
Testirajte Microservice
Gornji kod demonstrira jednostavnu mikrouslugu korisničkih podataka koja dodaje i dohvaća podatke iz PostgreSQL baze podataka. U idealnom slučaju, mikroservisi odražavaju REST API arhitektura budući da omogućuje fleksibilan pristup izgradnji web usluga—ova se arhitektura dobro uklapa u obrazac dizajna mikroservisa.
Međutim, važno je napomenuti da mikrousluge mogu koristiti i druge vrste pristupa dizajnu i komunikacijskih protokola, ovisno o specifičnim potrebama sustava.
Da biste testirali uslugu, zavrtite razvojni poslužitelj i prijeđite na Postman da postavite HTTP zahtjeve prema definiranim krajnjim točkama.
flask --pokretanje usluge aplikacije
U Postmanu napravite POST zahtjev za dodavanje korisničkih podataka.
Kontejneriziranje mikroservisa s Dockerom
Docker grupira aplikacije i njihove ovisnosti u spremnike. Ovaj pristup usmjerava razvoj, implementaciju i upravljanje mikroservisima u proizvodnom okruženju budući da svaka usluga može raditi neovisno i komunicirati s drugim uslugama pomoću konfigurirane komunikacije protokol.
Prije nego što počnete, najprije trebate instalirati Docker slijedeći korake na Docker web mjesto. Zatim izradite Docker sliku iz Dockerfilea koja sadrži potrebne upute za postavljanje potrebnih ovisnosti za pokretanje aplikacije u spremniku.
- Stvorite Dockerfile u korijenskom direktoriju svoje mape projekta i dodajte ove upute:
IZ piton:3.9-alpski
RADNI DIR /app
KOPIRATI zahtjevi.txt ./
TRČANJE pip install -r zahtjevi.txt
KOPIRATI. .
IZLOŽITI5000
CMD ["piton", "./service.py"] - Pokrenite naredbu u nastavku za izradu Docker slike.
docker build -t flask-microservice.
- Na kraju pokrenite Docker spremnik.
docker run -p 5000:5000 flask-microservice
Ovo će pokrenuti Docker spremnik koji pokreće mikroservis Flask i izložiti port 5000 na spremniku priključak 8000 na glavnom računalu, što vam omogućuje da postavljate HTTP zahtjeve iz svog web preglednika ili Poštara koristeći URL http://localhost: 5000.
Usvajanje mikroservisne arhitekture
Arhitektura mikroservisa postala je popularan pristup razvoju skalabilnih i robusnih softverskih aplikacija. Dijeleći aplikaciju na male servise koji se mogu neovisno implementirati, arhitektura mikroservisa olakšava održavanje i skaliranje sustava.
Iako ova arhitektura ima potencijalne prednosti, nije prikladna za sve slučajeve upotrebe. U svakom slučaju, specifični poslovni zahtjevi projekta prvenstveno trebaju utjecati na usvojeni pristup projektiranju.