A presentation at KCDC 2023 in in Kansas City, MO, USA by Laura Santamaria
What Cloud Engineers Could Learn from Clouds Laura Santamaria, Lead Developer Advocate Dell Technologies @nimbinatus (hachyderm)
@nimbinatus (hachyderm) Not these Photo by Taylor Vick on Unsplash 2 Copyright © Dell Inc. All Rights Reserved.
@nimbinatus (hachyderm) These Own work 3 Copyright © Dell Inc. All Rights Reserved.
“WAIT, AREN’T YOU A DEVELOPER ADVOCATE?” Intro @nimbinatus (hachyderm) 4 Copyright © Dell Inc. All Rights Reserved.
@nimbinatus (hachyderm) History 5 Copyright © Dell Inc. All Rights Reserved.
@nimbinatus (hachyderm) Planetary Atmospheres Credits: NASA/JPL-Caltech/SwRI/MSSS/ Gerald Eichstädt /Seán Doran © CC NC SA 6 Copyright © Dell Inc. All Rights Reserved.
@nimbinatus (hachyderm) Clouds and Clouds 7 Copyright © Dell Inc. All Rights Reserved.
Definitions @nimbinatus (hachyderm) 8 Copyright © Dell Inc. All Rights Reserved.
Complex Systems @nimbinatus (hachyderm) 9 Copyright © Dell Inc. All Rights Reserved.
@nimbinatus (hachyderm) A cloud physics example “Hoh Rain Forest Entrance Sign” by Adbar is licensed under CC BY-SA 3.0 10 Copyright © Dell Inc. All Rights Reserved.
@nimbinatus (hachyderm) A cloud computing example Photo by Jordan Harrison on Unsplash 11 Copyright © Dell Inc. All Rights Reserved.
Chaos and Chaotic Systems @nimbinatus (hachyderm) 12 Copyright © Dell Inc. All Rights Reserved.
@nimbinatus (hachyderm) A cloud physics example Photo by 2 Bro’s Media on Unsplash 13 Copyright © Dell Inc. All Rights Reserved.
@nimbinatus (hachyderm) A cloud computing example Photo by Jon Tyson on Unsplash 14 Copyright © Dell Inc. All Rights Reserved.
Patterns @nimbinatus (hachyderm) 15 Copyright © Dell Inc. All Rights Reserved.
@nimbinatus (hachyderm) A cloud physics example Photo by Jordan Steranka on Unsplash 16 Copyright © Dell Inc. All Rights Reserved.
@nimbinatus (hachyderm) A cloud computing example Photo by Brian McGowan on Unsplash 17 Copyright © Dell Inc. All Rights Reserved.
@nimbinatus (hachyderm) All of this is what modeling is about. 18 Copyright © Dell Inc. All Rights Reserved.
Learning from clouds @nimbinatus (hachyderm) 19 Copyright © Dell Inc. All Rights Reserved.
OBSERVATIONS AND DATA Understanding chaotic systems @nimbinatus (hachyderm) 20 Copyright © Dell Inc. All Rights Reserved.
@nimbinatus (hachyderm) Observations Photo by Daniel Lerman on Unsplash 21 Copyright © Dell Inc. All Rights Reserved.
@nimbinatus (hachyderm) Experiments Photo by CHUTTERSNAP on Unsplash 22 Copyright © Dell Inc. All Rights Reserved.
@nimbinatus (hachyderm) Observation and Experimentation Build Destroy Repeat Mindful Experimentation 23 Copyright © Dell Inc. All Rights Reserved. Chaos Experiments
HOW WE MAKE SENSE OF THINGS Modeling and predicting behavior @nimbinatus (hachyderm) 24 Copyright © Dell Inc. All Rights Reserved.
@nimbinatus (hachyderm) Data in, data out Photo by NOAA on Unsplash 25 Copyright © Dell Inc. All Rights Reserved.
@nimbinatus (hachyderm) Scale matters Photo by NOAA on Unsplash 26 Copyright © Dell Inc. All Rights Reserved.
@nimbinatus (hachyderm) Modeling in computing systems UML TLA+ 27 Copyright © Dell Inc. All Rights Reserved. Alloy
@nimbinatus (hachyderm) TLA+ example (truncated) From https:// www.hillelwayne.com/ modeling-deployments/ … variables servers = {“s1”, “s2”, “s3”}, load_balancer = servers, update_flag = [s \in servers |-> FALSE], updated = [s \in servers |-> FALSE]; define SameVersion == \A x, y \in load_balancer: updated[x] = updated[y] ZeroDowntime == \E server \in load_balancer: updated[server] /= UPDATING end define fair process update_server \in servers begin Update: await update_flag[self]; updated[self] := UPDATING; FinishUpdate: 28 Copyright © Dell Inc. All Rights Reserved. updated[self] := TRUE; end process; fair process start_update = “start_update” begin StartUpdate: load_balancer := {“s1”}; update_flag := [s \in servers |-> IF s = “s1” THEN FALSE ELSE TRUE]; Transition: await \A s \in (servers \ load_balancer): updated[s] = TRUE; load_balancer := servers \ load_balancer; update_flag[“s1”] := TRUE; Finish: await updated[“s1”] = TRUE; load_balancer := load_balancer \union {“s1”}; end process; …
@nimbinatus (hachyderm) TLA+ example (truncated) From https:// www.hillelwayne.com/ modeling-deployments/ … variables servers = {“s1”, “s2”, “s3”}, load_balancer = servers, update_flag = [s \in servers |-> FALSE], updated = [s \in servers |-> FALSE]; define SameVersion == \A x, y \in load_balancer: updated[x] = updated[y] ZeroDowntime == \E server \in load_balancer: updated[server] /= UPDATING end define fair process update_server \in servers begin Update: await update_flag[self]; updated[self] := UPDATING; FinishUpdate: updated[self] := TRUE; end process; fair process start_update = “start_update” begin StartUpdate: load_balancer := {“s1”}; update_flag := [s \in servers |-> IF s = “s1” THEN FALSE ELSE TRUE]; Transition: await \A s \in (servers \ load_balancer): updated[s] = TRUE; load_balancer := servers \ load_balancer; update_flag[“s1”] := TRUE; Finish: await updated[“s1”] = TRUE; load_balancer := load_balancer \union {“s1”}; Copyright © Dell Inc. All Rights Reserved. 29 end process;
@nimbinatus (hachyderm) TLA+ example (truncated) From https:// www.hillelwayne.com/ modeling-deployments/ … variables servers = {“s1”, “s2”, “s3”}, load_balancer = servers, update_flag = [s \in servers |-> FALSE], updated = [s \in servers |-> FALSE]; define SameVersion == \A x, y \in load_balancer: updated[x] = updated[y] ZeroDowntime == \E server \in load_balancer: updated[server] /= UPDATING end define fair process update_server \in servers begin Update: await update_flag[self]; updated[self] := UPDATING; FinishUpdate: updated[self] := TRUE; end process; fair process start_update = “start_update” begin StartUpdate: load_balancer := {“s1”}; update_flag := [s \in servers |-> IF s = “s1” THEN FALSE ELSE TRUE]; Transition: await \A s \in (servers \ load_balancer): Copyright © Dell Inc. All Rights Reserved. 30 updated[s] = TRUE;
@nimbinatus (hachyderm) TLA+ example (truncated) From https:// www.hillelwayne.com/ modeling-deployments/ servers = {“s1”, “s2”, “s3”}, load_balancer = servers, update_flag = [s \in servers |-> FALSE], updated = [s \in servers |-> FALSE]; define SameVersion == \A x, y \in load_balancer: updated[x] = updated[y] ZeroDowntime == \E server \in load_balancer: updated[server] /= UPDATING end define fair process update_server \in servers begin Update: await update_flag[self]; updated[self] := UPDATING; FinishUpdate: updated[self] := TRUE; end process; fair process start_update = “start_update” begin StartUpdate: load_balancer := {“s1”}; update_flag := [s \in servers |-> IF s = “s1” THEN FALSE ELSE TRUE]; Transition: await \A s \in (servers \ load_balancer): updated[s] = TRUE; load_balancer := servers \ load_balancer; update_flag[“s1”] := TRUE; Finish: await updated[“s1”] = TRUE; load_balancer := load_balancer \union {“s1”}; end process; Copyright © Dell Inc. All Rights Reserved. 31 …
@nimbinatus (hachyderm) TLA+ example (truncated) From https:// www.hillelwayne.com/ modeling-deployments/ … variables servers = {“s1”, “s2”, “s3”}, load_balancer = servers, update_flag = [s \in servers |-> FALSE], updated = [s \in servers |-> FALSE]; define SameVersion == \A x, y \in load_balancer: updated[x] = updated[y] ZeroDowntime == \E server \in load_balancer: updated[server] /= UPDATING end define fair process update_server \in servers begin Update: await update_flag[self]; updated[self] := UPDATING; FinishUpdate: updated[self] := TRUE; end process; fair process start_update = “start_update” begin StartUpdate: load_balancer := {“s1”}; update_flag := [s \in servers |-> IF s = “s1” THEN FALSE ELSE TRUE]; Transition: await \A s \in (servers \ load_balancer): updated[s] = TRUE; load_balancer := servers \ load_balancer; update_flag[“s1”] := TRUE; Finish: await updated[“s1”] = TRUE; load_balancer := load_balancer \union {“s1”}; end process; … 32 Copyright © Dell Inc. All Rights Reserved.
@nimbinatus (hachyderm) TLA+ example (truncated) From https:// www.hillelwayne.com/ modeling-deployments/ variables servers = {“s1”, “s2”, “s3”}, load_balancer = servers, update_flag = [s \in servers |-> FALSE], updated = [s \in servers |-> FALSE]; define SameVersion == \A x, y \in load_balancer: updated[x] = updated[y] ZeroDowntime == \E server \in load_balancer: updated[server] /= UPDATING end define fair process update_server \in servers begin Update: await update_flag[self]; updated[self] := UPDATING; FinishUpdate: updated[self] := TRUE; end process; fair process start_update = “start_update” begin StartUpdate: load_balancer := {“s1”}; update_flag := [s \in servers |-> IF s = “s1” THEN FALSE ELSE TRUE]; Transition: await \A s \in (servers \ load_balancer): updated[s] = TRUE; load_balancer := servers \ load_balancer; update_flag[“s1”] := TRUE; Finish: await updated[“s1”] = TRUE; load_balancer := load_balancer \union {“s1”}; end process; … Copyright © Dell Inc. All Rights Reserved. 33
@nimbinatus (hachyderm) TLA+ example (truncated) From https:// www.hillelwayne.com/ modeling-deployments/ … variables servers = {“s1”, “s2”, “s3”}, load_balancer = servers, update_flag = [s \in servers |-> FALSE], updated = [s \in servers |-> FALSE]; define SameVersion == \A x, y \in load_balancer: updated[x] = updated[y] ZeroDowntime == \E server \in load_balancer: updated[server] /= UPDATING end define fair process update_server \in servers begin Update: await update_flag[self]; updated[self] := UPDATING; FinishUpdate: updated[self] := TRUE; end process; fair process start_update = “start_update” begin StartUpdate: load_balancer := {“s1”}; update_flag := [s \in servers |-> IF s = “s1” THEN FALSE ELSE TRUE]; Transition: await \A s \in (servers \ load_balancer): updated[s] = TRUE; load_balancer := servers \ load_balancer; update_flag[“s1”] := TRUE; Finish: await updated[“s1”] = TRUE; load_balancer := load_balancer \union {“s1”}; end process; … 34 Copyright © Dell Inc. All Rights Reserved.
ERRORS, LIMITATIONS, AND KNOWLEDGE Working with and around chaotic systems @nimbinatus (hachyderm) 35 Copyright © Dell Inc. All Rights Reserved.
@nimbinatus (hachyderm) Models aren’t perfect Photo by Brett Jordan on Unsplash 36 Copyright © Dell Inc. All Rights Reserved.
@nimbinatus (hachyderm) Model less complex things first Photo by Marek Okon on Unsplash 37 Copyright © Dell Inc. All Rights Reserved.
@nimbinatus (hachyderm) Models have limitations Photo by Jiawei Zhao on Unsplash 38 Copyright © Dell Inc. All Rights Reserved.
SOME FINAL THOUGHTS Putting it all together @nimbinatus (hachyderm) 39 Copyright © Dell Inc. All Rights Reserved.
@nimbinatus (hachyderm) Embrace failure 40 Copyright © Dell Inc. All Rights Reserved.
@nimbinatus (hachyderm) Trust your experience 41 Copyright © Dell Inc. All Rights Reserved.
Own work Feedback welcome! Thanks https://developer.dell.com → https://linktr.ee/nimbinatus @nimbinatus (hachyderm) 42 Copyright © Dell Inc. All Rights Reserved.
Let’s talk about clouds. No, not that kind of cloud with other people’s computers. Let’s talk about the kind of clouds that kids draw as fluffy puffballs. Did you know that clouds are complex, chaotic systems that have a lot in common with our tech clouds of today? Weather systems and planetary atmospheres are fascinating explorations in understanding, modeling, and (attempting to) predict complex chaotic systems in an applied setting, and the human race has been studying clouds for millions of years. We’ve only started studying them from the perspective of mathematics and physics in recent times—a timeframe measured in hundreds of years. In comparison, the modern cloud-based computing world has only been around for a “short” time. There’s a lot we can learn from the world of meteorology and atmospheric science, so let’s go on a tour through our atmosphere and beyond, and see what we can learn about understanding, modeling, and predicting complex systems from these ephemeral masses of vapor.