What Cloud Engineers Could Learn from Clouds Laura Santamaria, Lead Developer Advocate Dell Technologies @nimbinatus (hachyderm)
A presentation at KCDC 2023 in June 2023 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.