migrating a data stack from aws to azure (via raspberry pi)
TRANSCRIPT
![Page 1: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/1.jpg)
MIGRATING A DATA STACKFROM AWS TO AZURE
VIA RASPBERRY PI@SOOBROSA @WUNDERLIST @MICROSOFT
![Page 2: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/2.jpg)
THE VOICE OF GOD
![Page 3: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/3.jpg)
![Page 4: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/4.jpg)
THE TEAM
![Page 5: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/5.jpg)
TOPICS
1. Origins2. Planning
3. In-Flight Refactor4. Fixup
5. Buzzwords
![Page 6: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/6.jpg)
DISCLAIMER
ALL OPINIONS SHARED ARE MY OWNI MIGHT BE STATISTICALLY MEAN
![Page 7: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/7.jpg)
SCALE AND COMPLEXITY
![Page 8: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/8.jpg)
WUNDERLISTPRODUCTIVITY APP ON IPHONE, IPAD, MAC, ANDROID, WINDOWS,
KINDLE FIRE AND THE WEB
21+ MILLION USERS, 6 YEARS, HEADCOUNT OF 67
FROM MONOLITHIC RAILS TO POLYGLOT MICROSERVICES
SCALA, CLOJURE, GO ON AWS
![Page 9: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/9.jpg)
@MYOBIE
![Page 10: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/10.jpg)
POLYGLOT MICROSERVICES
@ROTEV
![Page 11: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/11.jpg)
![Page 12: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/12.jpg)
DATA MOSTLY IN POSTGRESQL
> Hosted on AWS> ~33 databases
> ~120 concurrent connections/database> Usually 2-3 tables per database
> tasks table contains 1 billion records.
![Page 13: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/13.jpg)
DATA SIZING
> Collect every event from clients 125M/day> Parse & filter compressed logs' 375GB/day
> Mirror every production database 35GB inc./day> Load external sources (e.g.: app store, payments)
> Calculate KPIs, aggregates, business logic - 200+ queries> Self service data for everybody
![Page 14: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/14.jpg)
INGREDIENTSUNIXBASHMAKE
CRONTABSQL
![Page 15: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/15.jpg)
WHY MAKE?
> blame Jeff Hammerbacher> it's a machine-readable documentation
> supports dependencies, retries> easy to test, even locally all target> executes multiple targets in parallel
> coding is necessary to modify -> changelog in Git
![Page 16: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/16.jpg)
# Dumps users table from production.public.users.csv.gz: script/users/dump_users_rds_table.sh | gzip -c8 > $@
# Upload the compressed dump into S3. users_s3_url:=s3://wunderlytics/.../users-delta-$(TODAY)-$(TMP_TOKEN).csv.gzpublic.users.csv.gz.uploaded: public.users.csv.gz script/move_to_s3.sh $< $(users_s3_url) > $@
# Load users into Redshift.public.users: | public.users.csv.gz.uploaded night-shift/lib/run_sql_template.rb \ --dialect redshift \ --aws_creds "`lib/aws_cred.py`" \ --config config/redshift_fast_queries_pg_credentials.sh \ --s3file "`cat $(firstword $|)`" \ script/users/schema.sql.erb \ script/users/replace_users_table.sql.erb touch $@
![Page 17: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/17.jpg)
NIGHT-SHIFT AS ETL> cron for scheduling
> make for dependencies, partial results, retries> glue with bash
> inject variables and logic into SQL with Ruby's ERB> runs in a tracking shell, so timing, output and errors are logged
> monitoring interface in Flask> locally testable
> Open source
![Page 18: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/18.jpg)
# Create a temporary tableCREATE TABLE #notes_staging ( <%= specs.map {|col, type| "#{col} #{type}"}.join(", ") %>) SORTKEY(id);
# Load data into the temporary table from S3COPY #notes_staging ( <%= columns.join "," %> )FROM '<%= s3file %>'WITH CREDENTIALS <%= aws_creds %>GZIP TRUNCATECOLUMNS DELIMITER '\001' ESCAPE REMOVEQUOTES;
# Updating the changed valuesUPDATE notes SET <%= updates.join "," %>FROM #notes_staging uWHERE ( u.deleted_at IS NOT NULL OR u.updated_at > notes.updated_at ) AND notes.id = u.id;
# Inserting the new rowsINSERT INTO notes ( <%= columns.join "," %> ) ( SELECT <%= columns.join "," %> FROM #notes_staging u WHERE u.id NOT IN (SELECT id FROM notes) );
![Page 19: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/19.jpg)
![Page 20: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/20.jpg)
![Page 21: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/21.jpg)
ANALYTICS IN REDSHIFT10 TB COMPRESSED AGGREGATION
Two clusters:
> Hot: 22 x dc1.large(2 vCPU, 15GB RAM, 160GB SSD)
> Cold: 6 x ds2.xlarge(4 vCPU, 31GB RAM, 2TB HDD)
![Page 22: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/22.jpg)
cold storage(Redshift)
hot storage(Redshift)
productiondatabase(s)
external sources
S3
S3
microservice applications Rsyslog
Noxy
EMR (Hadoop)
logging
clients (phone, tablet, etc.) email
Tracking
SNS
SQS
SQS dumper
tracking
Postamt
Chart.io
AWS + DWH
riporting
data-flow
S3
2015-12
![Page 23: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/23.jpg)
PLANNING
![Page 24: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/24.jpg)
LET'S MOVE A DATA ARCHITECTURE FROM AWS
TO AZURE
![Page 25: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/25.jpg)
WITH AN AVERAGE OF
1,5 ENGINEERSAT HAND IN ANY GIVEN MOMENT.
![Page 26: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/26.jpg)
TRANSLATED TO BUSINESS
> Total Cost of Ownership is dead serious
> can't do 24/7 support on data> forensic analysis is not our scope
> remove if you can
![Page 27: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/27.jpg)
THE BUCOLIC DATA
LANDSCAPE(MACIEJ CEGŁOWSKI)
![Page 28: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/28.jpg)
@BFALUDI
![Page 29: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/29.jpg)
PRAY OUR LORDJAMES MICKENSAND LET'S GO!
![Page 30: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/30.jpg)
IN-FLIGHT REFACTOR
![Page 31: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/31.jpg)
GOALS
> Simplify> Abstract away AWS specific parts
> Remove unnecessary complications like Hadoop> Add Azure support for the components> Refactor and make the code reusable
![Page 32: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/32.jpg)
cold storage(Redshift)
hot storage(Redshift)
productiondatabase(s)
external sources
S3
S3
microservice applications Rsyslog
Noxy
EMR (Hadoop)
logging
clients (phone, tablet, etc.) email
Tracking
SNS
SQS
SQS dumper
tracking
Postamt
Chart.io
AWS + DWH
riporting
data-flow
S3
2015-12
![Page 33: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/33.jpg)
cold storage(Redshift)
hot storage(Redshift)
productiondatabase(s)
external sources
S3
S3
RsyslogNoxy
Jr. Beaver
logging
clients (phone, tablet, etc.) email
Tracking
SNS
SQS
SQS dumper
tracking
Postamt
Chart.io
AWS + DWH
riporting
data-flow
S3
2016-01
![Page 34: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/34.jpg)
EMR TO JR. BEAVER
> Detects the format of every log line> Log cruncher that standardizes microservices' logs
> Classifies events' names based on API's URL> Filters the analytically interesting rows
> Map/reduce functionality.> Hadoop+Scala to make+pypy
![Page 35: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/35.jpg)
JR. BEAVER
> Configurable with YAML files> Written in Pypy instead of Go
> Using night-shift's make for parallelism> "Big RAM kills Big data"
> No Hadoop+Scala headache anymore> Gives monitoring
![Page 36: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/36.jpg)
VCPU COUNT
EMR (600+ in 20 computers): ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Jr. Beaver (8 in 1 computer): ||||||||
![Page 37: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/37.jpg)
VCPU * WORKING HOURS COMPARISON
EMR (600hrs): ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Jr. Beaver (64hrs): ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![Page 38: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/38.jpg)
cold storage(Redshift)
hot storage(Redshift)
productiondatabase(s)
external sources
S3
S3
RsyslogNoxy
Jr. Beaver
logging
clients (phone, tablet, etc.) email
Tracking
SNS
SQS
SQS dumper
tracking
Postamt
Chart.io
AWS + DWH
riporting
data-flow
S3
2016-01
![Page 39: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/39.jpg)
cold storage(Redshift)
hot storage(Redshift)
productiondatabase(s)
external sources
S3
S3
RsyslogNoxy
Jr. Beaver
logging
clients (phone, tablet, etc.) email
Hamustro
tracking
Chart.io
AWS + DWH
riporting
data-flow
S3
2016-02
![Page 40: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/40.jpg)
HOMEBREW TRACKING TO HAMUSTRO
> Tracks client device events> Saves to cloud targets
> Handles sessions and strict order of events> Rewritten from NodeJS to Go
> Uses S3 directly instead of SNS/SQS(inspired by Marcio Castilho)
![Page 41: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/41.jpg)
HAMUSTRO
> Supports Amazon SNS/SQS, Azure Queue Storage> Supports Amazon S3, Azure Blob Storage
> Tracks up to 6M events/min on a single 4vCPU server> Using Protobuf/JSON for events sending
> Written in Go> Open source
![Page 42: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/42.jpg)
VCPU COUNT
Homebrew tracking (12x1):
||||||||||||
Hamustro (2x2):
||||
![Page 43: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/43.jpg)
S3 VS. SNS IN A SINGLE 4VCPU COMPUTERHamustro's S3 dialect (~6M/min):
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Hamustro's SNS dialect (~60k/min):
||||||
![Page 44: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/44.jpg)
EVEN A SINGLE RASBERRYPI IS OVERKILL FOR OUR 25K EVENTS/MIN
![Page 45: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/45.jpg)
FIXUP
![Page 46: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/46.jpg)
MAPPING AND BENCHMARKING
Azure Blob Storage
Azure SQL Data Warehouse
Ubuntu 14.04
Amazon S3
Amazon Redshift
Ubuntu 14.04
Amazon SNS/SQS
ChartioChartio
HamustroHamustro
Power BI(under evaluation)
Tracking
![Page 47: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/47.jpg)
AMAZON S3 = AZURE BLOB STORAGE
![Page 48: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/48.jpg)
AMAZON REDSHIFT ~ AZURE SQL DATA WAREHOUSE
![Page 49: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/49.jpg)
IT DEPENDS ON THE PERSPECTIVE
![Page 50: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/50.jpg)
TOOLS IN UNIX FOR PRODUCTION
> azrcmd: CLI to download and upload files to Azure Blob Storage. Provides s3cmd like functionality
> cheetah: CLI for MSSQL that works in OSX and Linux and also supports Azure SQL Data Warehouse. Similar to psql and superior to sql-cli and Microsoft's
sqlcmd
![Page 51: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/51.jpg)
cold storage(Redshift)
hot storage(Redshift)
productiondatabase(s)
external sources
S3
S3
RsyslogNoxy
Jr. Beaver
logging
clients (phone, tablet, etc.) email
Hamustro
tracking
Chart.io
AWS + DWH
riporting
data-flow
S3
2016-02
![Page 52: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/52.jpg)
SQLDWH
productiondatabase(s)
external sources ABS
WeaselNoxy
Jr. Beaver
clients (phone, tablet, etc.)
Hamustro
Chart.io
Azure + DWH
riporting
data-flow
logging
tracking
ABS
2016-04
![Page 53: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/53.jpg)
ADAPT SQL APPROACH
> Different loading strategies> Scale up while the data pipeline is running
> Set up the right resource groups for every user> Define distributions and use partitions
> Use full featured SQL> Find the perfect balance between concurrency and speed
![Page 54: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/54.jpg)
BUZZWORDS
![Page 55: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/55.jpg)
HYBRID, CLOUD AGNOSTIC DATA STACK*
POST-CLOUD DATA INFRASTRUCTUREAKA A DOZEN RPI POWERTAPED TOGETHER
*REDNECK DATA
AS OPPOSING DATA SCIENCE
![Page 56: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/56.jpg)
THIS IS A FERRY@ELMOSWELT
![Page 57: Migrating a data stack from AWS to Azure (via Raspberry Pi)](https://reader031.vdocument.in/reader031/viewer/2022021507/58eccf761a28abcc368b4581/html5/thumbnails/57.jpg)
#MAHLZEIT@SOOBROSA