Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Adventures in Umbrella App Design
Search
Desmond Bowe
September 29, 2017
Programming
1
74
Adventures in Umbrella App Design
An Experience Report on wacky things I've tried when building Umbrella projects.
Desmond Bowe
September 29, 2017
Tweet
Share
More Decks by Desmond Bowe
See All by Desmond Bowe
Parameter Validation in Phoenix Apps
desmondmonster
0
36
Phoenix LiveView
desmondmonster
0
40
How I Deploy at Crevalle
desmondmonster
0
55
Why Elixir?
desmondmonster
2
100
Recurring Tasks in Elixir
desmondmonster
0
620
Other Decks in Programming
See All in Programming
Scalable Customer Journey Orchestration (CJO)
lewuathe
0
410
使ってみよう Azure AI Document Intelligence
kosmosebi
2
360
Compose-View Interop in Practice (mDevCamp 2024)
stewemetal
0
160
TCAとKMPを用いた新規動画配信アプリ 「ABEMA Live」の設計
tomu28
2
120
try! Swift Tokyo 初参加報告LT
hinakko2
0
230
Domain-Driven Transformation
hschwentner
2
1.5k
From Spring Boot 2 to Spring Boot 3 with Java 21 and Jakarta EE
ivargrimstad
0
420
MicrosoftのPlatform Engineeringガイドを読んで実際になにかやってみた
ymd65536
1
500
見た目から始める生産性向上
ikumatadokoro
10
1.3k
Goのmultiple errorsについて (2024年4月版)
syumai
4
1.1k
Milestoner
bkuhlmann
1
410
Snowflakeで眠ったデータを起こそう!
estie
0
130
Featured
See All Featured
[RailsConf 2023] Rails as a piece of cake
palkan
27
4k
Designing the Hi-DPI Web
ddemaree
276
33k
GitHub's CSS Performance
jonrohan
1025
450k
No one is an island. Learnings from fostering a developers community.
thoeni
16
2.1k
WebSockets: Embracing the real-time Web
robhawkes
59
7k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
22
1.6k
Automating Front-end Workflow
addyosmani
1357
200k
How GitHub Uses GitHub to Build GitHub
holman
468
290k
A better future with KSS
kneath
231
16k
Designing for Performance
lara
602
67k
Web Components: a chance to create the future
zenorocha
306
41k
Code Reviewing Like a Champion
maltzj
515
39k
Transcript
Adventures in Umbrella App Design Desmond Bowe NYC Elixir Meetup
September 28, 2017
Elixir Training • Basics • OTP • Design / Architecture
EMPEX Founder
☂ "Umbrella projects are used to build applications that run
together in a single repository.” - elixirlang.org
☂ my_app/ _build/ config/ deps/ lib/ my_app/ my_app.ex log/ priv/
test/ mix.exs mix.lock _build/ apps/ my_app/ config/ deps/ lib/ my_app/ my_app.ex log/ priv/ test/ mix.exs mix.lock photo_service/ config/ deps/ mix.exs mix.lock Normal App Umbrella App
☂ Calling Functions Across Apps ☠
Should I Use One?
Experience Report Twig Crevalle
Example 1: Twig Infrastructure • landing site • admin site
• backoffice Needs • share assets across web frontends • web frontends need data from different services
Twig 1st approach • 3 phoenix applications • separate assets
app apps/ admin/ assets/ landing/ mother_brain/
Twig • share js, css, images • assets app is
styleguide • hard to share templates • redundant dependencies • painful upgrades
Twig 2nd approach • all web apps in single OTP
app apps/ mother_brain/ site/ config/ web/ admin/ assets/ landing/ controllers/ views/ endpoint.ex router.ex web.ex
None
Twig • share js, css, images • assets app is
styleguide • easy to share templates • streamlined dependencies • simpler authentication • configuration • file organization is important to reduce cognitive load
Example 2: Crevalle Infrastructure • many distinct user-facing apps with
individual datastore Needs • easily spin up new projects • reuse functionality • bird’s eye view of company
Crevalle Approach • each project is its own app •
shared functionality (e.g. image processing, authentication) is extracted to its own app apps/ chitta/ crux/ oauth/ postfactor/ pulse/ config/ lib/ web/
Crevalle • easy to create/deploy projects • simple integration testing
• deploy entire company platform at once
Crevalle if your entire company is an umbrella app, your
company’s individual services are their own OTP apps • teams work on specific app • apps are individually deployed to appropriate hardware • monolith + services • no more issues of internal API versions, data serialization
Anti-Patterns extracting all services to their own app because Boundaries
Rules of Thumb for OTP apps • it has its
own datastore • it has particular resource needs (eg high CPU load) • shared functionality
successful Elixir application design means thinking in terms of Applications
successful Elixir application design means thinking in terms of Applications
we are still figuring this out.
successful Elixir application design means thinking in terms of Applications
we are still figuring this out. join us at the bar!
thanks. @desmondmonster