developing cloud serverless components in domain-driven ......serverless-native architecture is yet...
TRANSCRIPT
![Page 1: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/1.jpg)
Developing Cloud Serverless Components in
PythonDomain-Driven Design Perspective
Asher [email protected]
![Page 2: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/2.jpg)
About Myself● Software technologist/architect● VP Engineering @ BST● Previously CTO @ IRKI, DE @ Cisco, VP Technologies @ NDS● Cross-discipline approach (connecting the dots):
○ (Strategic) Domain-Driven Design○ Serverless Architecture○ Cynefin○ Wardley Maps○ Lean Startup○ Promise Theory○ ...
● Articles on Medium● Presentations on Slideshare● @asterkin on Twitter● Source code for this talk on GitHub
![Page 3: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/3.jpg)
Connecting the Dots
![Page 4: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/4.jpg)
What is Serverless Architecture?● No servers to manage● Highly available● Flexible scaling● Two flavors:
○ AWS Lambda - no pay for idle ○ AWS Fargate - log running fully managed containers
● More details● Serverless computing is a tectonic shift in the software industry
○ S. Wardley “Why the fuss about serverless?”
![Page 5: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/5.jpg)
“New Platform Capabilities Lead to New Architectural Style and
New Operational Practices
S. Wardley (liberal quoting of mine)
![Page 6: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/6.jpg)
Serverless-native Architecture is yet to Emerge
Some exploration and “safe-to-fail” experimentation are
required
Cloud VM-native
architecture
Cloud Container-
native architecture
?Cloud
Serverless- native
architecture
![Page 7: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/7.jpg)
Tools have strong influence on thinking
![Page 8: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/8.jpg)
Python is a Superb Tool for Exploration and Experimentation
Outcomes of this research will be easy to port to other languages
![Page 9: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/9.jpg)
AWS Lambda Function in Pythonprint('Loading function') #executed at cold start
def lambda_handler(event, context): # executed at every invocation print("value1 = " + event['key1']) # input data usually comes as a dict print("value2 = " + event['key2']) print("value3 = " + event['key3']) return event['key1'] # Return something if invoked synchronously #raise Exception('Something went wrong')
![Page 10: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/10.jpg)
AWS Lambda Performance
Source: Yun Zhi Lin, “Comparing AWS Lambda performance of Node.js, Python, Java, C# and Go”
![Page 11: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/11.jpg)
Serverless Architecture Needs Some Organizing
PrinciplesTo prevent creation of a distributed monolith
![Page 12: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/12.jpg)
Domain-Driven Design
![Page 13: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/13.jpg)
Domain-Driven Design at a Glance
LanguageModelBoundariesNesting
![Page 14: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/14.jpg)
Language● Common (ubiquitous) language for domain
and software experts ● Vocabulary reflected directly in software● Normally a subset of domain-specific jargon
DDD is essentially a linguistic process
![Page 15: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/15.jpg)
Boundaries● “One size fits all” models are impractical● G-d like models result in Big Ball of Mud● DDD insists on identifying multiple models:
○ Coherent within their own boundaries○ Mapped onto others where
appropriate
DDD is about maintaining boundaries for- and mappings between- models
![Page 16: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/16.jpg)
Subdomains (my interpretation)
Generic Services
Supporting Services
Core
From the same area of activity, but not specific enough
What justifies developing software in the first place
Completely generic, applicable to any domain
![Page 17: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/17.jpg)
Subdomains (my interpretation)
Generic Services
Supporting Services
Core
From the same area of activity, but not specific enough
What justifies developing software in the first place
Completely generic, applicable to any domain
![Page 18: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/18.jpg)
Evaluation Criteria● Is domain language reflected directly in the code?● Is core logic clearly separated from supporting, and generic subdomains?● Is there an appropriate model underneath?
![Page 19: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/19.jpg)
DDD Sample Application: Cargo Tracking System
![Page 20: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/20.jpg)
Questions I wanted to address● What would be an objective reason to prefer Python over JavaScript?● What is involved in implementing DDD cargo Sample in Serverless Python?● What is missing in the Serverless Python infrastructure, if any?
![Page 21: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/21.jpg)
I was Very Surprised with the Answers
Let’s see why
![Page 22: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/22.jpg)
You Always Start with a Use Case Model, Don’t YouIn fact nobody does, and it’s a big problem
![Page 23: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/23.jpg)
Cargo Tracking Use Cases
Book Cargo
OperatorChange
Destination
Re-route Cargo
Check Delivery Status
External System
Record Cargo Tracking Event
![Page 24: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/24.jpg)
You Start with Architecturally Essential
Use Case(s)It’s far from trivial - you need an architect
![Page 25: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/25.jpg)
Cargo Tracking Use Cases
Book Cargo
OperatorChange
Destination
Re-route Cargo
Check Delivery Status
External System
Record Cargo Tracking Event
● Interfacing with external systems● High volume● High velocity● Security concerns
![Page 26: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/26.jpg)
Diving One Inch Deeper
Operator
Cargo Tracking System
3rd Party Operator
api.cts.com
events.cts.com
CargoTrackingEvents
CargoTrackingEventsArchive
CargoTrackingEvents
CargoTrackingEventErrors
![Page 27: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/27.jpg)
Cargo Handling Event
CargoTrackingEvent
completionTimeeventType
Location CargoVoyage
CarrierMovement
loadTimeunloadTime
*
loadLocation
unlo
adLo
catio
n
core
supporting
![Page 28: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/28.jpg)
Record Cargo Tracking Event: First CutREST or IoT End Point RecordCargoHandling
Event
invokeget_item(crago)
get_item(location)
get_item(voyage)
put_item(event)
![Page 29: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/29.jpg)
Record Cargo Handling Event: Architecture
events.cts.com
/events
POST
recordCargoHandlingEvent
Cargo
Location
Voyage
CargoHandlingEvent
CargoHandlingEventErrors
Can we program this in half-an-hour?
![Page 30: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/30.jpg)
import boto3import os
dynamodb = boto3.resource('dynamodb')
def checkItem(table, key, event, value): if value in event: if 'Item' in table.get_item(Key={key:event[value]},ProjectionExpression=key): return [] else: return ['%s not found' % value] else: return ['%s is missing' % value]
def flatten(status): return [e for es in status for e in es]
![Page 31: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/31.jpg)
cargoTable = dynamodb.Table(os.getenv('CARGO_TABLE'))def checkCargo(event): return checkItem(cargoTable, 'trackingId', event, 'cargo')
locationTable = dynamodb.Table(os.getenv('LOCATION_TABLE'))def checkLocation(event): return checkItem(locationTable, 'unLocationCode', event, 'location')
VOYAGE_REQUIRED = {'LOAD', 'UNLOAD'} voyageTable = dynamodb.Table(os.getenv('VOYAGE_TABLE'))def checkVoyage(event): if not 'eventType' in event: return ['eventType is missing'] if event['eventType'] in VOYAGE_REQUIRED: return checkItem(voyageTable, 'id', event, 'voyage') else: return ['unexpected voyageId'] if 'voyage' in event else []
![Page 32: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/32.jpg)
from botocore.exceptions import ClientErrorimport timeeventTable = dynamodb.Table(os.getenv('EVENT_TABLE'))def recordEvent(event): try: eventTable.put_item( Item= { 'cargoTrackingId': event['cargo'], 'completionTime': event['completionTime'], 'registrationTime': int(time.time()*1000), 'voyageId' : event['voyage'], 'eventType' : event['eventType'], 'location': event['location'] }, ConditionExpression = 'attribute_not_exists(cargoTrackingId) AND attribute_not_exists(completionTime)' ) return 'OK' except ClientError as e: if e.response['Error']['Code'] == 'ConditionalCheckFailedException': return 'DUPLICATE' raise
![Page 33: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/33.jpg)
import json
def reportError(event, error): print(json.dumps({'event': event, 'error': error})) def lambda_handler(event, context): inputStatus = flatten([checkCargo(event), checkLocation(event), checkVoyage(event)]) if len(inputStatus) > 0 : reportError(event, inputStatus) else : recordingStatus = recordEvent(event) if recordingStatus != 'OK' : reportError(event, recordingStatus)
![Page 34: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/34.jpg)
Evaluation Criteria● Is domain language reflected directly in the code?● Is core logic clearly separated from supporting, and generic subdomains?● Is there an appropriate model underneath?
![Page 35: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/35.jpg)
What would be an alternative?
Without alternatives it’s an ideology, not engineering
![Page 36: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/36.jpg)
What if we used inappropriate tool for
modelling the system logic?Always a good question to ask
![Page 37: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/37.jpg)
CheckCargo CheckLocation CheckVoyage
InputValidationSucceeded?
RecordEvent
ReportErrors EventRecordingSucceeded?
Success
Input validations could be performed in parallel
![Page 38: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/38.jpg)
How could we implement such logic?● Use Python asyncio?● Switch to JavaScript?● Any other option?
![Page 39: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/39.jpg)
AWS Step Functions
events.cts.com
/events
POST
Cargo_checkCargo
Cargo
Location
Voyage
CargoHandlingEvent
CargoHandlingEventErrors
Voyage_checkLocation
Voyage_checkVoyage
CargoHandlingEvent_record
CargoHandlingEventErrors_report
RecordCargoTrackingEvent
CargoHandlingEvent_checkVoyage
![Page 40: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/40.jpg)
Look, Ma!There is (almost) no code here!
![Page 41: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/41.jpg)
Cisco Confidential© 2010 Cisco and/or its affiliates. All rights reserved. 41
"""Encapsulates Cargo Repository and all relevant computations."""import matte
CARGO = 'cargo'CARGO_KEY = {CARGO : str}
Cargoes = matte.repository('Cargoes', hashKey = CARGO_KEY)Specifications = matte.repository('Specifications', hashKey = CARGO_KEY)Itineraries = matte.repository('Itineraries', hashKey = CARGO_KEY)
Cargo.py check_cargo.py""" Check whether cargo reference is correct."""from Cargo import Cargoes
cargoes = Cargoes.get_client()
def check_cargo(cargo): return cargoes.has_item(cargo)
![Page 42: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/42.jpg)
What About Other Use Cases?
Could we apply the same approach?
![Page 43: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/43.jpg)
Cargo Tracking Object Model
CargoTrackingEvent
completionTimeeventType
Location
Cargo
Voyage
origindestination
RouteSpecification
arrivalDeadline*
Itinerary
Leg
loadTimeunloadTime
loadLocationunloadLocation
Customer
core
![Page 44: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/44.jpg)
GetSpecification GetItinerary GetLastEvent
CalculateTransportStatus
FormatStatusPage
Get Delivery Status
CalculateDirectionStatus CalculateRoutingStatus CalculateNextEvent
![Page 45: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/45.jpg)
Get Delivery Status
api.cts.com
/delivery/{id}
GET
Cargo_getSpecification
CargoSpecification
CargoItinerary
CargoHandlingEvent
Cargo_getItinerary
CargoHandlingEvent_calculateDeliveryStatus
Cargo_isSpecificationStatisfied
GetCargoDeliveryStatus
CargoHandlingEvent_getLast
CargoHandlingEvent_calculateNextActivity CargoHandlingEvent_calculateTransportStatus
CargoDeliveryStatusPage_format
![Page 46: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/46.jpg)
Now, We Speak Domain Language in the Code
As we are supposed to
![Page 47: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/47.jpg)
Polymorphism over EventType
Polymorphism over Event Type
![Page 48: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/48.jpg)
Cargo Tracking System (Micro?) Services
CargoTrackingSystem
Cargo
CargoHandlingEvent
Voyage
![Page 49: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/49.jpg)
Missing Infrastructure Elements● Conversion to/from JavaScript-style objects● find() with predicate function● Dropping None values from dict● High-level encapsulation of managed services● Automatic generation of SAM templates● Automatic generation of Step Functions
![Page 50: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/50.jpg)
Introducing Matte (Staff in
Hebrew)Staff of Moses that, upon
command, was transformed to a snake, forth and back
![Page 51: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/51.jpg)
MatteExperimental Pyhton3
infrastructure toolkit to remove as much boilerplate from Serverless DDD code as
possible
jso lazy dict -> object conversion
find list lookup with predicate
drop_nulls remove None values from dict
make_handler Automatic code generator of lambda_handler
make_sam_template SAM template builder
Repository DynamoDB resource descriptor
RepositoryClient DynamoDB client with permissions
DecimalEncoder Proper handling of Numeric fields
... More to follow
![Page 52: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/52.jpg)
Cargo Tracking System Subdomains
Generic Services
Supporting Services
Core
Voyage, Location
Cargo, Specification, Itinerary, CargoHandlingEvent
Matte
![Page 53: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/53.jpg)
Software Architecture is a Context Mapping Process
From Use Cases to Core, to Supportive, to Generic sub-domains
![Page 54: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/54.jpg)
Beware of CouplingAnd always make it explicit
![Page 55: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/55.jpg)
VoyageCargoHandlingEvent
nahash
calculateDeiveryStatus
calculateNextActivity
calculateDeliveryStatus.py
calculateNextActivity.py
CargoHandlingEvent
CargoHandlingEvent.py
Voyage.py
Leg.py
Cargo
putItinerary
getItinerary
Itinerary
● Convention● Conversion● Shared Library● Avro● Protobuf● ORM● Same Service
CarrierMovement.py
findPath.py
Voyage
Itinerary.py
![Page 56: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/56.jpg)
But isn’t this approach terribly inefficient?
Too many forth and backs between Step Function and Lambda
![Page 57: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/57.jpg)
You never know until you measure
It might actually scale better than we think
![Page 58: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/58.jpg)
Why it might scale better?
Tiny FootprintEasy to find
resources for new instance
Single-purpose Function
Few policies to check
Built-in basic monitoring
Data-driven ML-based
optimization is possible
![Page 59: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/59.jpg)
What Comes After Serverless?
Some Wild Ideas, Inspired by this Research
![Page 60: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/60.jpg)
I Feel MonadishPure
Functions Domain Logic
Non-Pure Functions
Interfacing Managed Services
Activity Flow
Use Case Controllers
AmazonS3
AmazonDynamoDB
AmazonSNS
...
AWS IoT
Amazon API Gateway
AWS Appsync
Amazon CloudWatch
Collect Data and Optimize
![Page 61: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/61.jpg)
Maybe We Should Call it Threadless Architecture?
Who knows? Time will Tell.
![Page 62: Developing Cloud Serverless Components in Domain-Driven ......Serverless-native Architecture is yet to Emerge Some exploration and “safe-to-fail” experimentation are required Cloud](https://reader030.vdocuments.mx/reader030/viewer/2022041015/5ec6fa6843af28539a4c9964/html5/thumbnails/62.jpg)
Please, Disagree with Me“Consensus is poisonous for innovation”
D. Snowden