Palvelimettomat arkkitehtuurimallit
Tutustukaa yleisiin palvelimettomiin arkkitehtuurimalleihin, kuten fan-outiin, scatter-gatheriin ja tapahtumalähteistykseen, ja soveltakaa niitä monimutkaisten liiketoimintaongelmien tehokkaaseen ratkaisemiseen.
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:
- päivitettävä varastosaldo.
- lähetettävä vahvistussähköposti.
- luotava lähetysosoitekortti.
- 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.
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
- Canary- ja Blue/Green-julkaisut
- Vikasietoisten palvelimettomien järjestelmien rakentaminen
- Palvelimettomat arkkitehtuurimallit
- Serverless-arkkitehtuurien kustannusten optimointi