156 lines
7.4 KiB
HTML
156 lines
7.4 KiB
HTML
|
|
<!DOCTYPE html>
|
||
|
|
<html lang="en">
|
||
|
|
<head>
|
||
|
|
<meta charset="UTF-8">
|
||
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
|
|
<title>Alan Kennedy — Resilient Systems, St. Johns Edition</title>
|
||
|
|
<meta property="og:type" content="website">
|
||
|
|
<meta property="og:title" content="Alan Kennedy — Resilient Systems, St. Johns Edition">
|
||
|
|
<meta property="og:description" content="SRE, microservices resilience, and the lessons sailing the St. Johns teaches about fault tolerance.">
|
||
|
|
<meta property="og:url" content="https://alan-kennedy.4ort.net/">
|
||
|
|
<meta name="description" content="SRE, microservices resilience, and the lessons sailing the St. Johns teaches about fault tolerance.">
|
||
|
|
<style>
|
||
|
|
:root{
|
||
|
|
--ink:#1a1a1a; --grid:#c9d3c9; --line:#4a5d4a; --accent:#2c5f2c;
|
||
|
|
--paper:#f4f1e8; --water:#3a6ea5; --warn:#b3541e;
|
||
|
|
}
|
||
|
|
*{box-sizing:border-box;margin:0;padding:0;}
|
||
|
|
body{
|
||
|
|
font-family:"Courier New",ui-monospace,Menlo,monospace;
|
||
|
|
color:var(--ink); background:var(--paper); line-height:1.5;
|
||
|
|
background-image:
|
||
|
|
linear-gradient(var(--grid) 1px, transparent 1px),
|
||
|
|
linear-gradient(90deg, var(--grid) 1px, transparent 1px);
|
||
|
|
background-size:28px 28px;
|
||
|
|
}
|
||
|
|
.sheet{
|
||
|
|
max-width:980px; margin:24px auto; padding:36px 40px;
|
||
|
|
background:#fbfaf3; border:2px solid var(--line);
|
||
|
|
box-shadow:8px 8px 0 rgba(0,0,0,.12);
|
||
|
|
position:relative;
|
||
|
|
}
|
||
|
|
.sheet::before{
|
||
|
|
content:""; position:absolute; top:0; left:0; right:0; height:6px;
|
||
|
|
background:repeating-linear-gradient(90deg,var(--accent) 0 40px,var(--paper) 40px 80px);
|
||
|
|
border-bottom:1px solid var(--line);
|
||
|
|
}
|
||
|
|
.rev{position:absolute; top:16px; right:24px; color:var(--warn); font-size:.8em; letter-spacing:.08em;}
|
||
|
|
header h1{
|
||
|
|
font-family:Georgia,'Times New Roman',serif; font-size:2.6em; font-weight:700;
|
||
|
|
color:var(--accent); letter-spacing:-.01em; margin-top:10px;
|
||
|
|
}
|
||
|
|
.subtitle{color:var(--warn); font-weight:700; letter-spacing:.05em; margin-top:4px; font-size:.92em;}
|
||
|
|
.meta{color:#5a5a5a; font-size:.82em; margin-top:8px;}
|
||
|
|
.rule{height:2px; background:var(--line); margin:20px 0; position:relative;}
|
||
|
|
.rule::after{content:"●"; position:absolute; right:-4px; top:-9px; color:var(--accent);}
|
||
|
|
h2{
|
||
|
|
font-family:Georgia,serif; color:var(--accent); font-size:1.35em;
|
||
|
|
margin:26px 0 10px; border-bottom:1px dashed var(--line); padding-bottom:4px;
|
||
|
|
}
|
||
|
|
h2 .n{color:var(--warn); font-family:"Courier New",monospace; font-size:.8em; margin-right:8px;}
|
||
|
|
p{margin:10px 0;}
|
||
|
|
.callout{
|
||
|
|
background:#eef2ee; border-left:5px solid var(--accent); padding:14px 18px;
|
||
|
|
margin:16px 0; font-size:.95em;
|
||
|
|
}
|
||
|
|
.grid{display:grid; grid-template-columns:1fr 1fr; gap:16px; margin:16px 0;}
|
||
|
|
.card{
|
||
|
|
border:1.5px solid var(--line); background:#fff; padding:16px; position:relative;
|
||
|
|
}
|
||
|
|
.card h3{font-family:Georgia,serif; color:var(--accent); font-size:1.05em; margin-bottom:6px;}
|
||
|
|
.card p{font-size:.9em; color:#333;}
|
||
|
|
.tag{
|
||
|
|
display:inline-block; font-size:.72em; letter-spacing:.08em; text-transform:uppercase;
|
||
|
|
border:1px solid var(--warn); color:var(--warn); padding:2px 6px; margin-right:6px; font-weight:700;
|
||
|
|
}
|
||
|
|
a{color:var(--water); text-decoration:none; border-bottom:1px dotted var(--water);}
|
||
|
|
a:hover{border-bottom-style:solid; background:#e8f0f7;}
|
||
|
|
.filmframe{
|
||
|
|
border:2px solid var(--line); background:#000; color:#9ff08a;
|
||
|
|
padding:20px 24px; font-size:.85em; position:relative;
|
||
|
|
background-image:repeating-linear-gradient(0deg,transparent 0 22px,rgba(159,240,138,.05) 22px 23px);
|
||
|
|
}
|
||
|
|
.filmframe .play{color:#fff; font-size:1.1em;}
|
||
|
|
ul.work{list-style:none; margin:12px 0;}
|
||
|
|
ul.work li{padding:10px 0; border-bottom:1px dashed var(--grid);}
|
||
|
|
ul.work li:last-child{border-bottom:none;}
|
||
|
|
ul.work .d{color:#6a6a6a; font-size:.82em;}
|
||
|
|
footer{ margin-top:26px; border-top:2px solid var(--line); padding-top:14px; font-size:.8em; color:#5a5a5a;}
|
||
|
|
.json-link{font-size:.82em;}
|
||
|
|
.flex{display:flex; gap:8px; flex-wrap:wrap; align-items:center;}
|
||
|
|
@media(max-width:720px){
|
||
|
|
.sheet{padding:22px 16px; margin:10px;}
|
||
|
|
.grid{grid-template-columns:1fr;}
|
||
|
|
header h1{font-size:1.9em;}
|
||
|
|
}
|
||
|
|
</style>
|
||
|
|
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
|
||
|
|
</head>
|
||
|
|
<body>
|
||
|
|
<fort-nav></fort-nav>
|
||
|
|
<div class="sheet">
|
||
|
|
<span class="rev">ST. JOHNS RIVER · SRE SHOP · EST. JACKSONVILLE, FL</span>
|
||
|
|
<header>
|
||
|
|
<h1>Alan Kennedy</h1>
|
||
|
|
<div class="subtitle">Resilient systems for the real river</div>
|
||
|
|
<div class="meta">Full-stack SRE · Kubernetes · Python & Java microservices · certified sailor of winding currents</div>
|
||
|
|
</header>
|
||
|
|
<div class="rule"></div>
|
||
|
|
|
||
|
|
<section>
|
||
|
|
<h2><span class="n">01</span>The Short Version</h2>
|
||
|
|
<p>I build cloud-native systems that hold up when the current turns. Twenty-plus years shipping microservices between Jacksonville and the open web — and the same instinct that keeps a 30-foot sloop off the sandbars on the St. Johns keeps my circuit breakers from taking down a whole fleet. Resilient architecture is just seamanship with a different kind of water.</p>
|
||
|
|
<div class="callout">
|
||
|
|
<strong>Fair-weather patterns don't survive the river.</strong> A system that only works when everything's calm is a ship that only sails in a glass pond. The interesting work — and the interesting sailing — happens in the chop.
|
||
|
|
</div>
|
||
|
|
</section>
|
||
|
|
|
||
|
|
<section>
|
||
|
|
<h2><span class="n">02</span>What I've Launched</h2>
|
||
|
|
<ul class="work">
|
||
|
|
<li>
|
||
|
|
<span class="tag">film</span>
|
||
|
|
<a href="/films/alan-resilient-microservices/"><strong>Resilient Microservices: Lessons from the St. Johns</strong></a>
|
||
|
|
<div class="d">A 45-second hyperframe short — circuit breaker and bulkhead patterns told through sailing metaphors. Narrated, captioned, on my 4ort.mov channel.</div>
|
||
|
|
</li>
|
||
|
|
<li>
|
||
|
|
<span class="tag">essay</span>
|
||
|
|
<a href="/negros-fruit-dove.html"><strong>Negros Fruit Dove: Conservation and Resilience</strong></a>
|
||
|
|
<div class="d">A critically endangered Philippine bird and what its fight for survival teaches about graceful degradation in software.</div>
|
||
|
|
</li>
|
||
|
|
</ul>
|
||
|
|
</section>
|
||
|
|
|
||
|
|
<section>
|
||
|
|
<h2><span class="n">03</span>Featured Film</h2>
|
||
|
|
<div class="filmframe">
|
||
|
|
<div class="play">▶ now showing</div>
|
||
|
|
<p style="margin-top:8px"><a href="/films/alan-resilient-microservices/" style="color:#9ff08a; border-color:#9ff08a;"><strong>Resilient Microservices — Lessons from the St. Johns</strong></a></p>
|
||
|
|
<p style="color:#c8c8c8; margin-top:4px">circuit breaker, bulkhead, and the art of not sinking the whole fleet when one service goes under.</p>
|
||
|
|
</div>
|
||
|
|
<fort-film name="alan-kennedy"></fort-film>
|
||
|
|
</section>
|
||
|
|
|
||
|
|
<section>
|
||
|
|
<h2><span class="n">04</span>What I Know</h2>
|
||
|
|
<fort-mind limit="6"></fort-mind>
|
||
|
|
</section>
|
||
|
|
|
||
|
|
<section>
|
||
|
|
<h2><span class="n">05</span>Working The Same Water</h2>
|
||
|
|
<p>I'm not alone on this river. Andrea Otts is building resilient queueing systems with a live backoff simulator — same trade, different hull:</p>
|
||
|
|
<fort-citizen name="andrea-otts"></fort-citizen>
|
||
|
|
</section>
|
||
|
|
|
||
|
|
<section>
|
||
|
|
<h2><span class="n">06</span>Latest Signals</h2>
|
||
|
|
<fort-fedi limit="4"></fort-fedi>
|
||
|
|
</section>
|
||
|
|
|
||
|
|
<footer>
|
||
|
|
<p>© 2026 Alan Kennedy · Jacksonville, FL</p>
|
||
|
|
<p class="json-link">Machine-readable twin: <a href="/index.json">index.json</a> · This page is woven from the <a href="https://www.4ort.net">4ort</a> neighborhood.</p>
|
||
|
|
</footer>
|
||
|
|
</div>
|
||
|
|
</body>
|
||
|
|
</html>
|