![Page 1: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/1.jpg)
© 2015, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Adrian Trenaman
SVP Engineering, gilt.com
@adrian_trenaman
October 2015
From Monolithic to MicroservicesEvolving Architecture Patterns in the Cloud
Derek Chiles
Sr. Mgr, Solutions Architecture, AWS
@derekchiles
ARC309
![Page 2: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/2.jpg)
Gilt’s Journey
![Page 3: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/3.jpg)
Gilt: Luxury designer brands at members-only prices
![Page 4: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/4.jpg)
... we shoot the product in our studios
![Page 5: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/5.jpg)
... we receive, store, pack, and ship ...
![Page 6: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/6.jpg)
... we sell every day at noon EST
![Page 7: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/7.jpg)
… stampede!
![Page 8: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/8.jpg)
... this is what noon really looks like.
![Page 9: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/9.jpg)
How It All Started…
![Page 10: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/10.jpg)
From Rails to Riches ― 2007: A Ruby on Rails monolith
Jobs
Ruby on Rails memcache
Postgres
![Page 11: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/11.jpg)
2011: Java, loosely-typed, monolithic services
(1) Large,
loosely typed
services
(2) Teams
focused on
business lines
(3) Monolithic Java
application; huge
bottleneck for innovation
(4) Hidden linkages;
buried business logic
![Page 12: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/12.jpg)
“How can we arrange our teams around
strategic initiatives? How can we make it fast
and easy to get to change to production?”
Enter: µ-services
![Page 13: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/13.jpg)
2015: LOSA (Lots of Small Apps) & Microservices
![Page 14: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/14.jpg)
Driving Forces Behind Gilt’s Emergent
Architecture
• Team autonomy
• Voluntary adoption (tools, techniques, processes)
• KPI / goal-driven initiatives
• Failing fast and openly
• Being open and honest, even when it’s difficult
![Page 15: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/15.jpg)
Service growth over time: point of inflexion === Scala.
![Page 16: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/16.jpg)
What are all these services doing?
![Page 17: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/17.jpg)
Anatomy of a service
![Page 18: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/18.jpg)
Anatomy of a gilt service – typical choices
gilt-service-
framework,
, Java, Javascript
Log4j, Cloudwatch
Cave
or
![Page 19: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/19.jpg)
Lines of code per service (logarithmic scale)
![Page 20: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/20.jpg)
# source files per service (includes build, config, xml, Java, Scala, Ruby...)
![Page 21: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/21.jpg)
Service discovery: straightforward
ZooKeeper
Brocade Traffic Manager (aka Zeus,
Stringray, SteelApp,...)
![Page 22: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/22.jpg)
From bare metal…
PHX
IAD
![Page 23: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/23.jpg)
… to vapour.
![Page 24: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/24.jpg)
Lift-and-shift + elastic teams
Existing Data Centre
Dual 10-Gb direct connect line, 2-ms latency.
“Legacy VPC”
MobileCommonPerson-
alisationAdmin Data
(1) Deploy to VPC
(2) “Department” accounts for elasticity & DevOps
![Page 25: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/25.jpg)
Single-tenant deployment: one service per EC2 instance
![Page 26: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/26.jpg)
Reproducible, immutable deployments: Docker
![Page 27: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/27.jpg)
Service discovery: new services use ELB
ZooKeeper
Elastic Load
Balancing (ELB)
![Page 28: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/28.jpg)
# running instances per service: “rule of three” (previously “rule of four”)
![Page 29: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/29.jpg)
EC2 instance sizing: lots of small instances
![Page 30: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/30.jpg)
Evolution of architecture and tech organization
![Page 31: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/31.jpg)
We (heart) μ-services
• Lessen dependencies between
teams: faster code-to-prod
• Lots of initiatives in parallel
• Your favourite
<tech/language/framework>
here
• Graceful degradation of
service
• Disposable code: easy to
innovate, easy to fail and move
on.
![Page 32: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/32.jpg)
We (heart) cloud
• Do DevOps in a meaningful
way.
• Low barrier of entry for new
tech (Amazon DynamoDB,
Amazon Kinesis,...)
• Isolation
• Cost visibility
• Security tools (IAM)
• Well documented
• Resilience is easy
• Hybrid is easy
• Performance is great
![Page 33: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/33.jpg)
Common Challenges and
Patterns
![Page 34: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/34.jpg)
Monolithic Microservices
• Simple deployments
• Binary failure modes
• Inter-module refactoring
• Technology monoculture
• Vertical scaling
• Partial deployments
• Graceful degradation
• Strong module boundaries
• Technology diversity
• Horizontal scaling
![Page 35: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/35.jpg)
• Organization
• Discovery
• Data management
• Deployment
• I/O explosion
• Monitoring
Common Challenges and Patterns
![Page 36: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/36.jpg)
Organization
![Page 37: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/37.jpg)
Monolithic Ownership
Organized on technology capabilities
UI Team
DBA Team
App Logic Team
Web Tier
App Tier
DB
Organizational Structure Application Architecture
![Page 38: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/38.jpg)
Microservices Ownership
Organized on business responsibilities
Login
Registration
Order
Personalization
Accounts team
Mobile
Personalization team Mobile team
![Page 39: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/39.jpg)
Microservices Ownership
• Requirements
• Technology selection
• Development
• Quality
• Deployment
• Support
![Page 40: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/40.jpg)
How to Be a Good Citizen (Service Consumer)
• Design for failure
• Expect to be throttled
• Retry w/ exponential backoff
• Degrade gracefully
• Cache when appropriate
![Page 41: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/41.jpg)
How to Be a Good Citizen (Service Provider)
• Publish your metrics
• Protect yourself
• Keep your implementation details private
• Maintain backwards compatibility
![Page 42: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/42.jpg)
Amazon API Gateway
• Throttling (global and per-method)
• Caching (with TTLs and invalidation)
• Monitoring (RPS, latency, error rate)
• Versioning
• Authentication
![Page 43: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/43.jpg)
Discovery
![Page 44: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/44.jpg)
Use DNS
Convention-based naming
<service-name>-<environment>.domain.com
shoppingcart-gamma.example.com
<service-name>.<environment>.domain.com
shoppingcart.gamma.example.com
![Page 45: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/45.jpg)
Use a Dynamic Service Registry
• Avoids the DNS TTL issue
• More than service registry & discovery
• Configuration management
• Health checks
• Plenty of options
• ZooKeeper (Apache)
• Eureka (Netflix)
• Consul (HashiCorp)
• SmartStack (Airbnb)
![Page 46: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/46.jpg)
Data management
![Page 47: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/47.jpg)
Challenge: Centralized Database
Monolithic applications typically
have a monolithic data store:
• Difficult to make schema
changes
• Technology lock-in
• Vertical scaling
• Single point of failure
user-svc account-svccart-svc
DB
![Page 48: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/48.jpg)
Centralized Database – Anti-pattern
Monolithic applications typically
have a monolithic data store:
• Difficult to make schema
changes
• Technology lock-in
• Vertical scaling
• Single point of failure
user-svc account-svccart-svc
DB
![Page 49: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/49.jpg)
Decentralized Data Stores
• Each service chooses its data
store technologies
• Low impact schema changes
• Independent scalability
• Data is gated through the
service API
account-
svc
cart-
svc
DynamoDB RDS
user-
svc
ElastiCache RDS
![Page 50: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/50.jpg)
Challenge: Transactional Integrity
• Use a pessimistic model
• Handle it in the client
• Add a transaction manager / distributed locking service
• Rethink your design
• Use an optimistic model
• Accept eventual consistency
• Retry (if idempotent)
• Fix it later
• Write it off
![Page 51: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/51.jpg)
Challenge: Aggregation
• Pull: Make the data available via your service API
• Push: To Amazon S3, Amazon CloudWatch, or another service
you create
• Pub/sub: Via Amazon Kinesis or Amazon SQS
![Page 52: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/52.jpg)
Deployment
![Page 53: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/53.jpg)
Continuous Delivery & Continuous Deployment
Create the right build pipeline for each service
• AWS CodeDeploy
• AWS Elastic Beanstalk
• Jenkins, CircleCI, Travis,…
Integration
& perf tests
Build &
unit testsbeta Produser-svc
Integration &
perf tests
Build &
unit testsbeta gamma Prodcart-svc
![Page 54: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/54.jpg)
AWS CodePipeline
![Page 55: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/55.jpg)
Multiple Services per Container/Instance
• Independent monitoring
• Independent scaling
• Clear ownership
• Immutable deployments
user-svc
cart-svc
account-svc
Container or instance
![Page 56: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/56.jpg)
Multiple Services per Container/Instance – Anti-pattern
• Independent monitoring
• Independent scaling
• Clear ownership
• Immutable deployments
user-svc
cart-svc
account-svc
Container or instance
![Page 57: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/57.jpg)
Single Service per Container/Instance
• Independent monitoring
• Independent scaling
• Clear ownership
• Immutable deployments
user-svc
container or instance
account-svc
cart-svc
container or instance
container or instance
![Page 58: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/58.jpg)
…Or Just Use AWS Lambda
LambdaAPI Gateway
RDS
DynamoDB
![Page 60: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/60.jpg)
Challenge: Request Multiplication
checkout-
svc
cart-svc
account-svc
user-svc
Single request
![Page 61: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/61.jpg)
Add Client Caching
checkout-
svc
cart-svc
account-svc
user-svc
Single request
cache
user & account cache
![Page 62: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/62.jpg)
Challenge: Hotspots
cart-svc order-svcshipping-
svc
user-svc
single request
get (user x, col y) get (user x, col y) get (user x, col y)
![Page 63: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/63.jpg)
Use Dependency Injection
cart-svc order-svcshipping-
svc
user-svc
single request
get (user x, col y)
(user x, col y) (user x, col y)
![Page 64: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/64.jpg)
Monitoring
![Page 65: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/65.jpg)
Challenge: monitoring
• Publish externally relevant metrics
• Latency
• RPS
• Error rate
• Understand internally relevant metrics
• Basic – CloudWatch
• OS
• Application
![Page 66: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/66.jpg)
Challenge: Logging
• Pick a common log aggregation solution
• Agree on log entry formats
• Use naming conventions
• Agree on correlation strategy
![Page 67: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/67.jpg)
Challenge: Correlating Requests
ui-svc catalog-
svc
checkout-
svc
shipping-
svc
payment-
svc
request
![Page 68: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/68.jpg)
Use Correlation IDs
09-02-2015 15:03:24 ui-svc INFO [uuid-123] ……
09-02-2015 15:03:25 catalog-svc INFO [uuid-123] ……
09-02-2015 15:03:26 checkout-svc ERROR [uuid-123] ……
09-02-2015 15:03:27 payment-svc INFO [uuid-123] ……
09-02-2015 15:03:27 shipping-svc INFO [uuid-123] ……
ui-svc catalog-
svc
checkout-
svc
shipping-
svc
payment-
svc
request correlation id:
“uuid-123”correlation id:
“uuid-123”
![Page 69: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/69.jpg)
What did we cover?
• Ownership
• Discovery
• Data management
• Deployment
• I/O explosion
• Monitoring
![Page 70: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/70.jpg)
Related Sessions
• ARC201 - Microservices Architecture for Digital Platforms with AWS
Lambda, Amazon CloudFront and Amazon DynamoDB
• CMP302 - Amazon EC2 Container Service: Distributed Applications
at Scale
• DEV203 - Using Amazon API Gateway with AWS Lambda to Build
Secure and Scalable APIs
• DVO401 - Deep Dive into Blue/Green Deployments on AWS
• SPOT304 - Faster, Cheaper, Safer Products with AWS: Adrian
Cockcroft Shares Experiences Helping Customers Move to the
Cloud
![Page 71: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/71.jpg)
Remember to complete
your evaluations!
![Page 72: (ARC309) Getting to Microservices: Cloud Architecture Patterns](https://reader034.vdocument.in/reader034/viewer/2022042611/5871aed31a28abda6a8b630d/html5/thumbnails/72.jpg)
Thank you!
Adrian Trenaman
SVP Engineering, gilt.com
@adrian_trenaman
Derek Chiles
Sr. Mgr, Solutions Architecture, AWS
@derekchiles