Teie ülesanne on kas väike või saate selle jagada väiksemateks ülesanneteks. Ja väike ülesanne sobib mikroteenuseks suurepäraselt.

Tarkvara kujundamine on tarkvaraarenduse oluline etapp. Disaini lähenemine võib mõjutada kogu projekti ja seda, kuidas te erinevate nõuetega tegelete.

Arendajad on sageli kasutanud monoliitset arhitektuuri, koondades kõik tarkvarakomponendid ühte moodulisse. See lähenemisviis võib aga osutuda ebaefektiivseks, eriti suuremate rakenduste puhul.

Mikroteenuste eesmärk on neid piiranguid käsitleda. Mikroteenus on väike, modulaarne rakendus, mis täidab teatud funktsioone. Erinevalt monoliitsetest rakendustest võimaldavad mikroteenused iseseisvat juurutamist ja skaleerimist. Tänu sellele on need paindlikumad ja kergemini hooldatavad.

Mikroteenuste arhitektuur

Mikroteenuste arhitektuur on tarkvara kujundamise lähenemisviis, mis jagab suure rakenduse sõltumatuteks teenusteks, kusjuures iga teenus on mõeldud konkreetse ärivajaduse rahuldamiseks.

Need teenused töötavad spetsiaalsetel ressurssidel, sealhulgas eraldi andmebaasi eksemplaridel ja arvutusvõimsusel. Erinevalt monoliitsetest süsteemidest on mikroteenuste rakendused lõdvalt ühendatud, võimaldades suuremat paindlikkust.

instagram viewer

Hajussüsteemis juurutavad ja käivitavad serverisõlmed mikroteenuse rakendusi eraldi protsessid – üksteisega suhtlemine sideprotokollide (nt HTTP) või sõnumimaaklerite kaudu nagu RabbitMQ.

Põhimõtteliselt võimaldab see arhitektuurne lähenemisviis teenustel säilitada üksteisest sõltumatust, töötades samal ajal tõhusalt tarkvarasüsteemis.

Selles õpetuses juhendame teid lihtsa kasutaja mikroteenuse juurutamisel, mis haldab kasutajaandmeid Flaski ja PostgreSQL-i abil.

Seadistage PostgreSQL-i andmebaas

Alustamiseks installige PostgreSQL. Kui teil pole PostgreSQL-i installitud, saate teada kuidas installida PostgreSQL Windowsi või kuidas installida PostgreSQL MacOS-i.

Teise võimalusena saate konfigureerida a kaug-PostgreSQL andmebaas näiteks.

See juhend kasutab PostgreSQL-i andmebaasi seadistamiseks Renderi tasuta taset. PostgreSQL-i andmebaasi eksemplari renderdamisel loomiseks järgige neid.

  1. Suunduge poole Renderi veebisait, registreerige konto ja logige sisse oma armatuurlaud lehel.
  2. Valige oma armatuurlaua lehel kuvatud teenuste loendist PostgreSQL-i teenus.
  3. Andmebaasi sätete lehel sisestage nõutud üksikasjad ja valige kindlasti tasuta taseja lõpuks klõpsake Loo andmebaas.

Selle projekti koodi leiate siit GitHubi hoidla.

Looge kolvi mikroteenus

  1. Tehke oma terminalis uus kataloog ja muutke see sisse:
    mkdir kolb-mikroteenus
    cd kolb-mikroteenus
  2. Järgmisena installige virtualenv, et luua isoleeritud virtuaalne arenduskeskkond.
    pip install virtualenv
  3. Looge oma projektis virtuaalne keskkond:
    virtualenv venv
  4. Lõpuks aktiveerige virtuaalne keskkond.
    # Windows: 
    .\venv\Scripts\activate
    # Unix või MacOS:
    allikas venv/bin/activate

Installige nõutavad paketid

  1. Loo uus nõuded.txt faili juurkataloogi ja lisage järgmised paketid:
    kolb
    psycopg2-binaarne
    sqlalkeemia
  2. Järgmisena installige paketid.
    pip install -r nõuded.txt

Looge Flask Server

Loo juurkataloogis uus fail: service.pyja järgmine kood:

  1. Tehke järgmised impordid:
    alates kolb importida Kolb, taotle, jsonify
    alates sqlalkeemia importida loomise_mootor, veerg, täisarv, string
    alates sqlalchemy.orm importida seansitegija
    alates sqlalchemy.ext.declarative importida deklaratiivne_alus
    importida psycopg2
  2. Looge Flask eksemplar ja konfigureerige andmebaasiühendus.
    rakendus = Kolb (__name__)

    mootor = create_engine("postgresql+psycopg2://flask_service_fe0v_user: 4785MhjfkdjfhjfjyUx67O2Nuzjchb2MQIP@dpg-chffjfjdkgfk54d6mb7860-a.oregon-postgres.0v_service_feflaskv_service.)

    Kopeerige välise andmebaasi URL Renderi andmebaasi seadete lehel. Me kasutame SQLAlchemy create_engine meetod ja Psycopg2 andmebaasiühenduse konfigureerimiseks. Värskendage ja asendage ülaltoodud koodi andmebaasi URL kindlasti oma PostgreSQL-i eksemplari URL-iga, mis vastab ülaltoodud vormingule. Kui URL-i vorming on vale, annab kood veateate.
  3. Looge andmebaasi jaoks SQLAlchemy mudel.
    Alus = deklaratiivne_alus()
    klassKasutaja(Baas):
    __tabelinimi__ = "kasutajad"
    id = veerg (täisarv, esmane_võti=Tõsi)
    name = Veerg (String(50))
    Base.metadata.create_all (mootor)
    print("Tabel "kasutajad" on edukalt loodud.")
    Seanss = sessionmaker (mootor)
    Kood määratleb kasutajate tabeli andmemudeli. Pärast mudeli määratlemist loob ta tabeli, kasutades SQLAlchemy create_all meetod, mis võtab andmebaasi ühenduse mootori objekt parameetrina. Lõpuks loob see eksemplari seansi tegija sama mootoriobjekti kasutamine andmebaasiga suhtlemise võimaldamiseks.
  4. Lõpuks määrake mikroteenuse API marsruudid.
    @app.route("/api/user", method=["POSTITA"])
    defloo_kasutaja():
    andmed = request.get_json()
    nimi = andmed["nimi"]
    proovi:
    seanss = Seanss()
    uus_kasutaja = Kasutaja (nimi=nimi)
    session.add (uus_kasutaja)
    session.commit()
    tagasi {"id": uus_kasutaja.id, "nimi": uus_kasutaja.nimi, "sõnum": f"Kasutaja {nimi} loodud."}, 201
    välja arvatud Erand nagu e:
    print(f "viga"{e}' toimunud.")
    tagasi {"viga": "Kasutaja loomisel ilmnes viga."}, 500
    @app.route("/api/user", method=["GET"])
    defhanki_kõik_kasutajad():
    proovi:
    seanss = Seanss()
    kasutajad = session.query (Kasutaja).all()
    kui kasutajad:
    tulemus = []
    jaoks kasutaja sisse kasutajad:
    result.append({"id": kasutaja ID, "nimi": kasutaja.nimi})
    tagasi jsonify (tulemus)
    muidu:
    tagasi jsonify({"viga": f "Kasutajaid ei leitud."}), 404
    välja arvatud Erand nagu e:
    print(f "viga"{e}' toimunud.")
    tagasi {"viga": "Kõigi kasutajate hankimisel ilmnes viga."}, 500
    kui __nimi__ == "__main__":
    app.run (debug=Tõsi, host="0.0.0.0")

Testige mikroteenust

Ülaltoodud kood demonstreerib lihtsat kasutajaandmete mikroteenust, mis lisab andmeid PostgreSQL-i andmebaasist ja hangib sealt. Ideaalis peegeldavad mikroteenused REST API arhitektuur kuna see võimaldab paindlikult läheneda veebiteenuste loomisele – see arhitektuur sobib hästi mikroteenuste disainimustriga.

Siiski on oluline märkida, et mikroteenused võivad sõltuvalt süsteemi konkreetsetest vajadustest kasutada ka teist tüüpi disainilahendusi ja sideprotokolle.

Teenuse testimiseks käivitage arendusserver ja minge Postmani juurde, et teha määratud lõpp-punktidesse HTTP-päringuid.

flask – rakenduse teenuse käitamine

Tee Postmanis POST-i päring kasutajaandmete lisamiseks.

Mikroteenuste konteinerisse paigutamine Dockeriga

Docker koondab rakendused ja nende sõltuvused konteineritesse. See lähenemisviis lihtsustab mikroteenuste arendamist, juurutamist ja haldamist tootmiskeskkonnas kuna iga teenus saab töötada iseseisvalt ja suhelda teiste teenustega, kasutades konfigureeritud sidet protokolli.

Enne alustamist peate esmalt installima Dockeri, järgides samme Dockeri veebisait. Seejärel looge Dockeri failist Dockeri pilt, mis sisaldab vajalikke juhiseid nõutavate sõltuvuste seadistamiseks, et rakendust konteineris käitada.

  1. Looge oma projektikausta juurkataloogis Dockerfile ja lisage järgmised juhised:
    FROM python:3.9- alpi
    TÖÖDIREKTOR /app
    KOPERI nõuded.txt ./
    JOOKSE pip install -r nõuded.txt
    KOPERI. .
    AVALDA5000
    CMD ["püüton", "./service.py"]
  2. Käivitage Dockeri kujutise loomiseks allolev käsk.
     docker build -t flask-microservice .
  3. Lõpuks käivitage Dockeri konteiner.
    docker run -p 5000:5000 kolb-mikroteenus

See käivitab Dockeri konteineri, milles töötab Flask mikroteenus ja avab konteineri pordi 5000 port 8000 hostmasinas, mis võimaldab teil teha HTTP-päringuid oma veebibrauserist või Postimehest, kasutades URL http://localhost: 5000.

Mikroteenuste arhitektuuri kasutuselevõtt

Mikroteenuste arhitektuur on muutunud populaarseks lähenemisviisiks skaleeritavate ja töökindlate tarkvararakenduste arendamiseks. Jagades rakenduse väikesteks iseseisvalt juurutatavateks teenusteks, muudab mikroteenuste arhitektuur süsteemi hooldamise ja skaleerimise lihtsamaks.

Kuigi sellel arhitektuuril on potentsiaalseid eeliseid, ei sobi see mitte kõikidele kasutusjuhtudele. Igal juhul peaksid projekti konkreetsed ärinõuded eelkõige mõjutama vastuvõetud disainilahendust.