Serverless-kehitys AWS Lambdalla · Oppitunti

Tapahtumaohjattujen mikropalvelujen rakentaminen

Suunnitelkaa ja toteuttakaa vankkoja mikropalveluarkkitehtuureja, joissa Lambda-funktiot viestivät asynkronisesti tapahtumien välityksellä, mikä edistää löyhää kytkentää ja skaalautuvuutta.

Oppitunti 1/411 vaihetta

Tapahtumaohjattujen mikropalvelujen rakentaminen on ilmainen Serverless-kehitys AWS Lambdalla-oppitunti CoddyKitissä. Tämä on oppitunti 1/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.

Mikropalvelut ja tapahtumaviestintä

Modernit sovellukset jaetaan usein pienempiin, toisistaan riippumattomiin palveluihin, joita kutsutaan mikropalveluiksi. Tämä lähestymistapa helpottaa monimutkaisuuden hallintaa ja mahdollistaa tiimien itsenäisen työskentelyn.

Mutta miten nämä palvelut viestivät keskenään? Perinteiset menetelmät, kuten suorat API-kutsut, voivat luoda tiiviitä riippuvuuksia. Tässä tapahtumaohjautuvat arkkitehtuurit ovat parhaimmillaan!

Tapahtumaohjautuvuuden voima

Tapahtumaohjautuvat mikropalvelut viestivät lähettämällä ja käsittelemällä tapahtumia. Kuvitelkaa palvelu ilmoittamassa: "jotain tapahtui!" välittämättä siitä, kuka kuulee ilmoituksen.

  • Löyhä kytkentä: Palvelujen ei tarvitse tuntea toisiaan.
  • Skaalautuvuus: Jokainen palvelu voi skaalautua itsenäisesti.
  • Vikasietoisuus: Yhden palvelun häiriöt vaikuttavat epätodennäköisemmin muihin.
  • Joustavuus: Uusia kuluttajia voidaan lisätä helposti muuttamatta olemassa olevia tuottajia.

Tapahtumien ja tuottajien selitys

Tämän mallin ytimessä ovat tapahtumat ja tapahtumatuottajat.

  • Tapahtuma on merkintä tapahtuneesta asiasta, kuten "OrderCreated" tai "ProductUpdated". Se on yleensä pieni datapaketti.
  • Tapahtumatuottaja on palvelu, joka luo ja julkaisee näitä tapahtumia. Se suorittaa toiminnon ja ilmoittaa siitä sitten muille.

Tuottajat eivät odota vastausta, vaan julkaisevat tapahtuman ja jatkavat toimintaansa.

Kuluttajat ja tapahtumaväylä

Toisella puolella ovat tapahtumakuluttajat ja tapahtumaväylä.

  • Tapahtumakuluttaja on palvelu, joka tilaa tiettyjä tapahtumia ja käsittelee niitä. AWS Lambda -funktiot sopivat erinomaisesti tapahtumakuluttajiksi!
  • Tapahtumaväylä, kuten Amazon SNS tai EventBridge, toimii keskitettynä reitittimenä. Tuottajat lähettävät tapahtumat väylälle, joka toimittaa ne kiinnostuneille kuluttajille.

Tämä keskitetty solmukohta irrottaa tuottajat kuluttajista.

Mikropalveluesimerkki työnkulusta

Kuvitellaan verkkokauppajärjestelmä:

  1. Käyttäjä tekee tilauksen (Order Service).
  2. Order Service julkaisee "OrderCreated"-tapahtuman tapahtumaväylään.
  3. Inventory Service (Lambda) kuluttaa "OrderCreated"-tapahtuman varaston päivittämiseksi.
  4. Myös Notification Service (Lambda) kuluttaa "OrderCreated"-tapahtuman vahvistussähköpostin lähettämiseksi.

Kukin palvelu toimii itsenäisesti ja reagoi samaan tapahtumaan.

Producer Lambda Pythonilla

Tässä on yksinkertainen Pythonilla kirjoitettu Lambda-funktio, joka toimii tapahtuman tuottajana. Se julkaisee "UserRegistered"-tapahtuman Amazon SNS -aiheeseen.

Muistakaa korvata 'arn:aws:sns:REGION:ACCOUNT_ID:MyTopic' oman SNS-aiheenne ARN-tunnisteella.

import json
import boto3

sns_client = boto3.client('sns')
SNS_TOPIC_ARN = 'arn:aws:sns:REGION:ACCOUNT_ID:MyTopic' # Replace with your SNS Topic ARN

def lambda_handler(event, context):
    user_id = 'user123'
    username = 'Alice'
    
    event_payload = {
        'detail-type': 'UserRegistered',
        'source': 'com.coddykit.userservice',
        'detail': {
            'userId': user_id,
            'username': username
        }
    }
    
    try:
        response = sns_client.publish(
            TopicArn=SNS_TOPIC_ARN,
            Message=json.dumps(event_payload),
            MessageAttributes={
                'event_type': {
                    'DataType': 'String',
                    'StringValue': 'UserRegistered'
                }
            }
        )
        print(f"Published event: {event_payload}")
        return {
            'statusCode': 200,
            'body': json.dumps('Event published successfully!')
        }
    except Exception as e:
        print(f"Error publishing event: {e}")
        return {
            'statusCode': 500,
            'body': json.dumps(f'Error: {str(e)}')
        }

Consumer Lambda Pythonilla

Luodaan seuraavaksi Pythonilla kirjoitettu Lambda-funktio, joka toimii tapahtuman kuluttajana. Tämä funktio olisi tilattu edellisen näkymän SNS-aiheeseen.

Se vain kirjaa vastaanotetun tapahtuman lokiin ja simuloi sen käsittelyä.

import json

def lambda_handler(event, context):
    print("Received event:")
    print(json.dumps(event, indent=2))
    
    # Extract message from SNS notification
    if 'Records' in event:
        for record in event['Records']:
            if 'Sns' in record:
                sns_message = json.loads(record['Sns']['Message'])
                print(f"Processing event of type: {sns_message.get('detail-type')}")
                print(f"User ID: {sns_message.get('detail', {}).get('userId')}")
                # Add your business logic here
    
    return {
        'statusCode': 200,
        'body': json.dumps('Event processed successfully!')
    }

Löyhän kytkennän hyödyt

Huomaatteko, ettei tuottaja-Lambda (User Service) tiedä mitään kuluttaja-Lambdasta (esimerkiksi Welcome Email Service -palvelusta). Se vain julkaisee "UserRegistered"-tapahtuman.

  • Jos lisäätte uuden palvelun (esimerkiksi Loyalty Points Service -palvelun), jonka on myös reagoitava "UserRegistered"-tapahtumaan, tilaatte sen yksinkertaisesti samaan SNS-aiheeseen.
  • User Service -palveluun ei tarvita muutoksia! Tämä joustavuus on keskeistä kehittyvissä mikropalveluarkkitehtuureissa.

Skaalautuvuus ja vikasietoisuus

Tapahtumapohjaiset mallit parantavat merkittävästi skaalautuvuutta ja vikasietoisuutta:

  • Skaalautuvuus: Kukin kuluttaja voi skaalautua itsenäisesti työkuormansa mukaan. Jos Notification Service on kuormitettu, se ei hidasta Inventory Service -palvelua.
  • Vikasietoisuus: Jos kuluttaja epäonnistuu tilapäisesti, tapahtumaväylä yrittää usein toimittaa tapahtuman uudelleen (tietyissä palveluissa), tai tapahtuma voidaan tallentaa Dead Letter Queue -jonoon (DLQ) myöhempää käsittelyä varten, mikä estää tietojen häviämisen.

Näin koko järjestelmästä tulee vankempi.

Tapahtumapohjaisten mikropalveluiden testi

Testataan ymmärrystänne tapahtumapohjaisista mikropalveluarkkitehtuureista.

Kertaus: tapahtumapohjaiset mikropalvelut

Olette oppineet, kuinka tapahtumapohjaiset arkkitehtuurit ovat keskeisiä vankkojen ja skaalautuvien mikropalveluiden rakentamisessa AWS Lambdan avulla.

  • Palvelut viestivät asynkronisesti tapahtumien välityksellä.
  • Tapahtumien tuottajat julkaisevat tapahtumia tapahtumaväylään (kuten SNS:ään).
  • Tapahtumien kuluttajat (Lambda-funktiot) tilaavat nämä tapahtumat ja reagoivat niihin.
  • Tämä malli mahdollistaa löyhän kytkennän, itsenäisen skaalautuvuuden ja paremman järjestelmän vikasietoisuuden.

Jatkakaa hämmästyttävien, toisistaan irrotettujen palveluiden rakentamista!

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 ”Tapahtumaohjattujen mikropalvelujen rakentaminen” ilmainen?

Kyllä – oppitunnin ”Tapahtumaohjattujen mikropalvelujen rakentaminen” 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 ”Tapahtumaohjattujen mikropalvelujen rakentaminen”?

Suunnitelkaa ja toteuttakaa vankkoja mikropalveluarkkitehtuureja, joissa Lambda-funktiot viestivät asynkronisesti tapahtumien välityksellä, mikä edistää löyhää kytkentää ja skaalautuvuutta. 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 1/4.

Kuinka kauan ”Tapahtumaohjattujen mikropalvelujen rakentaminen”-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. Tapahtumaohjattujen mikropalvelujen rakentaminen
  2. Amazon EventBridgen integrointi
  3. Reaaliaikainen käsittely Kinesiksellä
  4. Saga-malli hajautetuille transaktioille
← Takaisin: Serverless-kehitys AWS Lambdalla