Ali je vaša naloga majhna ali pa jo lahko razdelite na manjše naloge. In majhna naloga je popolna za mikro storitev.
Oblikovanje programske opreme je bistvena faza pri razvoju programske opreme. Oblikovalski pristop lahko vpliva na celoten projekt in na to, kako obravnavate različne zahteve.
Razvijalci so pogosto uporabljali monolitno arhitekturo, pri čemer so vse komponente programske opreme združili v en sam modul. Vendar se ta pristop lahko izkaže za neučinkovitega, zlasti pri večjih aplikacijah.
Cilj mikrostoritev je odpraviti te omejitve. Mikrostoritev je majhna, modularna aplikacija, ki izvaja določene funkcije. Za razliko od monolitnih aplikacij mikrostoritve omogočajo neodvisno uvajanje in skaliranje. Posledično so bolj prožni in lažji za vzdrževanje.
Arhitektura mikrostoritve
Arhitektura mikrostoritev je pristop načrtovanja programske opreme, ki razdeli veliko aplikacijo na neodvisne storitve, pri čemer je vsaka storitev zasnovana tako, da obravnava specifično poslovno zahtevo.
Te storitve delujejo na namenskih virih, vključno z ločenimi primerki baze podatkov in računalniško močjo. Za razliko od monolitnih sistemov so aplikacije mikrostoritev ohlapno povezane, kar omogoča večjo prilagodljivost.
V porazdeljenem sistemu strežniška vozlišča nameščajo in izvajajo aplikacije mikrostoritev ločeno procesi – medsebojno komuniciranje z uporabo komunikacijskih protokolov, kot je HTTP, ali prek posrednikov sporočil kot RabbitMQ.
V bistvu ta arhitekturni pristop omogoča storitvam, da ohranijo svojo neodvisnost druga od druge, medtem ko učinkovito delujejo znotraj programskega sistema.
V tej vadnici vas bomo vodili skozi implementacijo preproste uporabniške mikrostoritve, ki upravlja uporabniške podatke z uporabo Flask in PostgreSQL
Nastavite bazo podatkov PostgreSQL
Za začetek namestite PostgreSQL. Če nimate nameščenega PostgreSQL, lahko to ugotovite kako namestiti PostgreSQL v Windows oz kako namestiti PostgreSQL na macOS.
Druga možnost je, da konfigurirate a oddaljena baza podatkov PostgreSQL primerek.
Ta priročnik bo uporabil Renderjevo brezplačno raven za nastavitev baze podatkov PostgreSQL. Sledite tem, da zavrtite primerek baze podatkov PostgreSQL na Render:
- Pojdite na Renderjevo spletno mesto, se prijavite za račun in se prijavite v svoj armaturna plošča strani.
- Na strani nadzorne plošče s prikazanega seznama storitev izberite storitev PostgreSQL.
- Na strani z nastavitvami baze podatkov izpolnite zahtevane podrobnosti in se prepričajte, da ste izbrali brezplačna stopnjain na koncu kliknite Ustvari bazo podatkov.
Tukaj lahko najdete kodo tega projekta Repozitorij GitHub.
Ustvarite mikroservis Flask
- V vašem terminalu ustvarite nov imenik in se pomaknite vanj:
mkdir flask-microservice
cd flask-microservice - Nato namestite virtualenv, za ustvarjanje izoliranega virtualnega razvojnega okolja.
pip namestite virtualenv
- Ustvarite virtualno okolje v svojem projektu:
virtualenv venv
- Nazadnje aktivirajte virtualno okolje.
# Windows:
.\venv\Skripti\aktivirati
# Unix ali MacOS:
vir venv/bin/activate
Namestite zahtevane pakete
- Ustvari novo zahteve.txt datoteko v korenskem imeniku in dodajte te pakete:
bučko
psycopg2-binarni
sqlalchemy - Nato namestite pakete.
pip install -r requirements.txt
Ustvarite strežnik Flask
V korenskem imeniku ustvarite novo datoteko: service.pyin naslednjo kodo:
- Izvedite naslednje uvoze:
od bučko uvoz Bučka, zahteva, jsonify
od sqlalchemy uvoz create_engine, stolpec, celo število, niz
od sqlalchemy.orm uvoz sessionmaker
od sqlalchemy.ext.declarative uvoz deklarativna_osnova
uvoz psycopg2 - Ustvarite instanco Flask in konfigurirajte povezavo z bazo podatkov.
Kopiraj URL zunanje baze podatkov na strani z nastavitvami baze podatkov Render. Uporabili bomo SQLAlchemy create_engine metoda in Psycopg2 za konfiguracijo povezave z bazo podatkov. Prepričajte se, da posodobite in zamenjate URL baze podatkov v zgornji kodi z URL-jem svojega lastnega primerka PostgreSQL, ki se ujema z zgoraj navedenim formatom. Če oblika URL-ja ni pravilna, bo koda vrgla napako.app = Flask (__ime__)
motor = create_engine("postgresql+psycopg2://flask_service_fe0v_user: 4785MhjfkdjfhjfjyUx67O2Nuzjchb2MQIP@dpg-chffjfjdkgfk54d6mb7860-a.oregon-postgres.render.com/flask_service_fe0v")
- Ustvarite model SQLAlchemy za bazo podatkov.
Koda definira podatkovni model za tabelo uporabnikov. Po definiranju modela ustvari tabelo z uporabo SQLAlchemy create_all metoda, ki prevzame bazo podatkov priključni objekt motorja kot parameter. Končno ustvari primerek izdelovalec sej z uporabo istega predmeta mehanizma za omogočanje interakcij z bazo podatkov.Osnova = deklarativna_osnova()
razredUporabnik(Osnova):
__ime tabele__ = 'uporabniki'
id = stolpec (celo število, primarni_ključ=Prav)
ime = stolpec (niz(50))
Base.metadata.create_all (motor)
natisni("Tabela 'uporabniki' je bila uspešno ustvarjena.")
Seja = ustvarjalec sej (motor) - Na koncu definirajte poti API-ja za mikrostoritev.
@app.route("/api/user", metode=["POST"])
defcreate_user():
podatki = request.get_json()
ime = podatki["ime"]
poskusi:
seja = Seja()
new_user = Uporabnik (name=ime)
session.add (nov_uporabnik)
session.commit()
vrnitev {"id": new_user.id, "ime": novo_uporabniško.ime, "sporočilo": f"Uporabnik {name} ustvarjen."}, 201
razen Izjema kot e:
natisni(f"Napaka"{e}' se je zgodilo.")
vrnitev {"napaka": "Med ustvarjanjem uporabnika je prišlo do napake."}, 500
@app.route("/api/user", metode=["GET"])
defget_all_users():
poskusi:
seja = Seja()
uporabniki = session.query (Uporabnik).all()
če uporabniki:
rezultat = []
za uporabnik v uporabniki:
result.append({"id": Uporabniško ime, "ime": uporabniško.ime})
vrnitev jsonify (rezultat)
drugače:
vrnitev jsonify({"napaka": f"Uporabniki niso bili najdeni."}), 404
razen Izjema kot e:
natisni(f"Napaka"{e}' se je zgodilo.")
vrnitev {"napaka": "Pri pridobivanju vseh uporabnikov je prišlo do napake."}, 500
če __ime__ == "__glavni__":
app.run (debug=Prav, gostitelj="0.0.0.0")
Preizkusite Microservice
Zgornja koda prikazuje preprosto uporabniško podatkovno mikrostoritev, ki doda in pridobi podatke iz baze podatkov PostgreSQL. V idealnem primeru mikrostoritve zrcalijo Arhitektura REST API ker omogoča prilagodljiv pristop k gradnji spletnih storitev – ta arhitektura se dobro ujema z vzorcem oblikovanja mikrostoritev.
Vendar je pomembno omeniti, da lahko mikrostoritve uporabljajo tudi druge vrste pristopov oblikovanja in komunikacijskih protokolov, odvisno od posebnih potreb sistema.
Če želite preizkusiti storitev, zavrtite razvojni strežnik in se pomaknite do Postmana, da naredi zahteve HTTP do definiranih končnih točk.
flask --app service run
V programu Postman naredite zahtevo POST za dodajanje uporabniških podatkov.
Kontejneriziranje mikrostoritev z Dockerjem
Docker združuje aplikacije in njihove odvisnosti v vsebnike. Ta pristop racionalizira razvoj, uvajanje in upravljanje mikrostoritev v proizvodnem okolju saj lahko vsaka storitev deluje neodvisno in komunicira z drugimi storitvami s pomočjo konfigurirane komunikacije protokol.
Preden začnete, morate najprej namestiti Docker tako, da sledite korakom na Spletno mesto Docker. Nato zgradite sliko Dockerja iz datoteke Dockerfile, ki vsebuje potrebna navodila za nastavitev zahtevanih odvisnosti za izvajanje aplikacije v vsebniku.
- Ustvarite datoteko Dockerfile v korenskem imeniku mape projekta in dodajte ta navodila:
OD python:3.9-alpski
DELOVNI DIR /app
KOPIRATI zahteve.txt ./
TECI pip install -r requirements.txt
KOPIRATI. .
IZPOSTITE5000
CMD ["python", "./service.py"] - Zaženite spodnji ukaz za izdelavo slike Docker.
docker build -t flask-microservice.
- Na koncu zaženite vsebnik Docker.
docker run -p 5000:5000 flask-microservice
To bo zagnalo vsebnik Docker, ki izvaja mikrostoritev Flask, vrata 5000 na vsebniku pa izpostavi vrata 8000 na gostiteljskem računalniku, kar vam omogoča pošiljanje zahtev HTTP iz spletnega brskalnika ali poštarja z uporabo URL http://localhost: 5000.
Sprejemanje arhitekture mikrostoritev
Arhitektura mikrostoritev je postala priljubljen pristop za razvoj razširljivih in robustnih programskih aplikacij. Z delitvijo aplikacije na majhne storitve, ki jih je mogoče neodvisno uvesti, arhitektura mikrostoritev olajša vzdrževanje in prilagajanje sistema.
Čeprav ima ta arhitektura možne prednosti, ni primerna za vse primere uporabe. Vsekakor pa morajo na sprejet projektantski pristop vplivati predvsem specifične poslovne zahteve projekta.