Serverless-kehitys AWS Lambdalla · Oppitunti

Palvelimettomat arkkitehtuurimallit

Tutustukaa yleisiin palvelimettomiin arkkitehtuurimalleihin, kuten fan-outiin, scatter-gatheriin ja tapahtumalähteistykseen, ja soveltakaa niitä monimutkaisten liiketoimintaongelmien tehokkaaseen ratkaisemiseen.

Oppitunti 3/411 vaihetta

Palvelimettomat arkkitehtuurimallit on ilmainen Serverless-kehitys AWS Lambdalla-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Serverless-kehitys AWS Lambdalla-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Serverless-kehitys AWS Lambdalla-kurssilla on yhteensä 4 oppituntia.

Mitä ovat palvelimettomat arkkitehtuurimallit?

Palvelimettomassa kehityksessä kohtaamme usein samankaltaisia haasteita. Arkkitehtuurimallit ovat hyväksi havaittuja, uudelleenkäytettäviä ratkaisuja näihin yleisiin ongelmiin.

Ne auttavat suunnittelemaan skaalautuvia, vikasietoisia ja ylläpidettäviä palvelimettomia sovelluksia tarjoamalla mallin eri palvelujen väliselle vuorovaikutukselle.

Fan-Out-malli

Fan-Out-mallissa yksi syötetapahtuma käynnistää useita rinnakkaisia prosesseja tai toimintoja. Sitä voi ajatella veteen heitetyn kiven aiheuttamana väreilynä.

Tämä malli sopii erinomaisesti palvelujen irrottamiseen toisistaan ja samanaikaisten tehtävien suorittamiseen. Esimerkiksi uuden tiedoston lataus voi edellyttää useita samanaikaisia käsittelytapoja.

Fan-Out: esimerkki kuvankäsittelystä

Ajatellaan kuvan lataamista. Lambda-funktio voisi hajauttaa tämän tapahtuman useiksi erillisiksi prosesseiksi, jotka luovat pikkukuvan, lisäävät vesileiman ja poimivat metatiedot – kaikki rinnakkain.

Tässä on käsitteellinen Python-esimerkki, joka simuloi tätä fan-out-logiikkaa:

def process_image_event(image_id):
    print(f"Processing image: {image_id}")
    # Simulate publishing to different services
    print(f"  - Publishing to Thumbnail Service for {image_id}")
    print(f"  - Publishing to Watermark Service for {image_id}")
    print(f"  - Publishing to Metadata Service for {image_id}")

def main():
    print("--- Fan-Out Simulation ---")
    image_id = "img-12345.jpg"
    process_image_event(image_id)
    print("--- Simulation Complete ---")

if __name__ == "__main__":
    main()

Scatter-Gather-malli

Scatter-Gather-mallissa pyyntö lähetetään useille vastaanottajille (scatter), niiden kaikki vastaukset kerätään ja yhdistetään yhdeksi vastaukseksi (gather).

Tätä käytetään usein esimerkiksi useista tietolähteistä hakemiseen tai eri toimittajien hintojen vertailuun.

Scatter-Gather: esimerkki tuotehausta

Kun haette tuotetta, Lambda voisi hajauttaa kyselyn eri toimittajien rajapinnoille ja koota sekä yhdistää niiden tulokset näyttääkseen parhaat vaihtoehdot.

Tässä esimerkissä simuloidaan eri toimittajilta kyselyä ja halvimman tuotteen etsimistä:

def get_product_info(vendor_name, product_id):
    # Simulate calling a vendor API
    print(f"  - Querying {vendor_name} for product {product_id}...")
    if vendor_name == "VendorA":
        return {"vendor": "VendorA", "price": 100, "stock": 5}
    elif vendor_name == "VendorB":
        return {"vendor": "VendorB", "price": 95, "stock": 10}
    elif vendor_name == "VendorC":
        return {"vendor": "VendorC", "price": 110, "stock": 3}
    return None

def main():
    print("--- Scatter-Gather Simulation ---")
    product_id = "PROD-XYZ"
    vendors = ["VendorA", "VendorB", "VendorC"]
    
    all_results = []
    print(f"Searching for product {product_id} across vendors:")
    for vendor in vendors:
        result = get_product_info(vendor, product_id)
        if result:
            all_results.append(result)
    
    print("\n--- Aggregated Results ---")
    if all_results:
        for res in all_results:
            print(f"  Vendor: {res['vendor']}, Price: ${res['price']}, Stock: {res['stock']}")
        
        cheapest = min(all_results, key=lambda x: x['price'])
        print(f"\nCheapest option: {cheapest['vendor']} at ${cheapest['price']}")
    else:
        print("No results found.")
    print("--- Simulation Complete ---")

if __name__ == "__main__":
    main()

Event Sourcing -malli

Event Sourcing on arkkitehtuurimalli, jossa kaikki sovelluksen tilan muutokset tallennetaan muuttumattomien tapahtumien sarjana. Sen sijaan, että tallennettaisiin vain nykyinen tila, tallennetaan myös se, miten tähän tilaan päädyttiin.

Tämä tarjoaa täydellisen auditointipolun, mahdollistaa aiempien tilojen uudelleenrakentamisen ja toimii monimutkaisten tapahtumaohjattujen järjestelmien perustana.

Event Sourcing: esimerkki tilausten hallinnasta

Verkkokauppajärjestelmässä Order-tietueen päivittämisen sijaan tallennetaan esimerkiksi tapahtumat OrderCreated, ItemAdded ja OrderShipped. Nykyinen tila johdetaan sitten soveltamalla näitä tapahtumia järjestyksessä.

Tässä on simulaatio tilauksen tapahtumien tallentamisesta:

import datetime

def record_event(event_type, payload):
    timestamp = datetime.datetime.now().isoformat()
    event = {
        "eventId": f"evt-{datetime.datetime.now().timestamp()}",
        "eventType": event_type,
        "timestamp": timestamp,
        "payload": payload
    }
    # In a real system, this would write to a database stream (e.g., DynamoDB Streams, Kinesis)
    print(f"Recorded Event: {event['eventType']} at {event['timestamp']}")
    print(f"  Payload: {event['payload']}")
    return event

def main():
    print("--- Event Sourcing Simulation ---")
    
    # Simulate an order creation
    order_id = "ORD-001"
    record_event("OrderCreated", {"orderId": order_id, "customer": "Alice", "initialItems": []})
    
    # Simulate adding an item
    record_event("ItemAdded", {"orderId": order_id, "itemId": "SKU-A", "quantity": 1})
    
    # Simulate updating an item quantity
    record_event("ItemQuantityUpdated", {"orderId": order_id, "itemId": "SKU-A", "newQuantity": 2})
    
    # Simulate shipping the order
    record_event("OrderShipped", {"orderId": order_id, "shippingProvider": "UPS"})
    
    print("\n--- Event Stream Recorded ---")

if __name__ == "__main__":
    main()

Palvelimettomien arkkitehtuurimallien hyödyt

Nämä mallit tarjoavat merkittäviä etuja palvelimettomille sovelluksille:

  • Skaalautuvuus: Käsittele kasvava kuormitus helposti lisäämällä rinnakkaisten prosessien määrää.
  • Irrottaminen: Palvelut toimivat itsenäisesti, mikä vähentää riippuvuuksia ja parantaa vikasietoisuutta.
  • Vikasietoisuus: Fan-out- tai scatter-gather-työnkulun yhden osan virheet eivät välttämättä pysäytä koko prosessia.
  • Auditoitavuus (Event Sourcing): Täydellinen muutoshistoria on korvaamaton virheenkorjauksessa, vaatimustenmukaisuuden varmistamisessa ja analytiikassa.

Oikean mallin valitseminen

Oikean mallin valinta riippuu käsillä olevasta ongelmasta:

  • Käyttäkää Fan-Out-mallia, kun yhden tapahtuman on käynnistettävä useita toisistaan riippumattomia rinnakkaisia toimintoja.
  • Käyttäkää Scatter-Gather-mallia, kun tietoja on haettava useista lähteistä ja vastaukset on koottava yhteen.
  • Käyttäkää Event Sourcing -mallia, kun tarvitsette täydellisen, muuttumattoman muutoshistorian tai monimutkaisia ajallisia kyselyitä.

Usein näitä malleja voidaan yhdistää osaksi laajempaa palvelimetonta arkkitehtuuria.

Mallien haaste

Uuden verkkokauppa-alustan on käsiteltävä asiakkaiden tilauksia. Kun tilaus tehdään, järjestelmän on:

  1. päivitettävä varastosaldo.
  2. lähetettävä vahvistussähköposti.
  3. luotava lähetysosoitekortti.
  4. käsiteltävä maksu.

Mikä palvelimeton arkkitehtuurimalli soveltuu parhaiten näiden toisistaan riippumattomien tehtävien koordinointiin tilauksen tekemisen jälkeen?

Mallien kertaus

Olemme tutustuneet keskeisiin palvelimettomiin arkkitehtuurimalleihin: Fan-Out yhden tapahtuman käynnistämään rinnakkaiskäsittelyyn, Scatter-Gather useista lähteistä saatavien vastausten kokoamiseen ja Event Sourcing tilamuutosten muuttumattoman historian ylläpitämiseen.

Näiden mallien ymmärtäminen auttaa suunnittelemaan vankkoja, skaalautuvia ja vikasietoisia palvelimettomia sovelluksia sekä valitsemaan oikean työkalun kuhunkin monimutkaiseen ongelmaan.

Aloita maksutta

Opi Serverless-kehitys AWS Lambdalla tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
12
Oppitunnit
48

Usein kysytyt kysymykset

Onko oppitunti ”Palvelimettomat arkkitehtuurimallit” ilmainen?

Kyllä – oppitunnin ”Palvelimettomat arkkitehtuurimallit” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Serverless-kehitys AWS Lambdalla-kurssin, päivitä CoddyKit PROhon. Serverless-kehitys AWS Lambdalla-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Palvelimettomat arkkitehtuurimallit”?

Tutustukaa yleisiin palvelimettomiin arkkitehtuurimalleihin, kuten fan-outiin, scatter-gatheriin ja tapahtumalähteistykseen, ja soveltakaa niitä monimutkaisten liiketoimintaongelmien tehokkaaseen rat… Harjoittelet Serverless-kehitys AWS Lambdalla-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Serverless-kehitys AWS Lambdalla-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Serverless-kehitys AWS Lambdalla-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”Palvelimettomat arkkitehtuurimallit”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Serverless-kehitys AWS Lambdalla-oppitunnilla?

Kyllä. Jokainen Serverless-kehitys AWS Lambdalla-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Canary- ja Blue/Green-julkaisut
  2. Vikasietoisten palvelimettomien järjestelmien rakentaminen
  3. Palvelimettomat arkkitehtuurimallit
  4. Serverless-arkkitehtuurien kustannusten optimointi
← Takaisin: Serverless-kehitys AWS Lambdalla