<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: mjb</title><link>https://news.ycombinator.com/user?id=mjb</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Wed, 22 Apr 2026 23:54:44 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=mjb" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[The invisible engineering behind Lambda's network]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.allthingsdistributed.com/2026/04/the-invisible-engineering-behind-lambdas-network.html">https://www.allthingsdistributed.com/2026/04/the-invisible-engineering-behind-lambdas-network.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47867970">https://news.ycombinator.com/item?id=47867970</a></p>
<p>Points: 4</p>
<p># Comments: 0</p>
]]></description><pubDate>Wed, 22 Apr 2026 19:14:49 +0000</pubDate><link>https://www.allthingsdistributed.com/2026/04/the-invisible-engineering-behind-lambdas-network.html</link><dc:creator>mjb</dc:creator><comments>https://news.ycombinator.com/item?id=47867970</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47867970</guid></item><item><title><![CDATA[New comment by mjb in "Three Cache Layers Between Select and Disk"]]></title><description><![CDATA[
<p>Cool article!<p>> This is why free -h on a Linux box can look alarming. You see almost no “free” memory, but most of it is “available” - and the page cache is using it.<p>And other buffers and stuff too. This is a great thing on bare metal, because it's a bet that the marginal cost of using an empty memory page is zero. This is true on bare metal, always. But in containers, or multi-tenant infrastructure, that isn't true anymore. That's where stuff like DAMON come in: <a href="https://www.kernel.org/doc/html/v5.17/vm/damon/index.html" rel="nofollow">https://www.kernel.org/doc/html/v5.17/vm/damon/index.html</a><p>In Aurora Serverless this kind of page cache management is a critical part of what the control plane does. Essentially we need to size the page cache to be big enough for great performance, but small enough not to cost the customer unnecessarily. We go into quite a lot of detail on that in our VLDB'25 paper: <a href="https://assets.amazon.science/ee/a4/41ff11374f2f865e5e24de11bd17/resource-management-in-aurora-serverless.pdf" rel="nofollow">https://assets.amazon.science/ee/a4/41ff11374f2f865e5e24de11...</a><p>> Linux fills free memory with page cache on purpose. It’s a bet: if someone reads this block again, I already have it.<p>This works because most database workloads have great temporal and spatial locality. And it works well. But it's also one of the biggest practical issues people run into with relational databases in production: performance is great until it isn't. The shared buffers and page cache keep reads to near zero, but when the working set grows even a tiny bit bigger, then the rate of reads can go up super quickly.<p>This is why in both Aurora Serverless and Aurora DSQL we do buffer and cache sizing very dynamically, getting rid of this cliff for most workloads.</p>
]]></description><pubDate>Thu, 12 Feb 2026 22:29:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=46996204</link><dc:creator>mjb</dc:creator><comments>https://news.ycombinator.com/item?id=46996204</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46996204</guid></item><item><title><![CDATA[New comment by mjb in "I wanted a camera that doesn't exist, so I built it"]]></title><description><![CDATA[
<p>Indeed. Collecting cameras, and talking about cameras, is a very different hobby from photography. That's OK! Both can be fun.<p>Inspired me to write this blog post: <a href="https://brooker.co.za/blog/2023/04/20/hobbies.html" rel="nofollow">https://brooker.co.za/blog/2023/04/20/hobbies.html</a></p>
]]></description><pubDate>Tue, 06 Jan 2026 23:45:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=46520560</link><dc:creator>mjb</dc:creator><comments>https://news.ycombinator.com/item?id=46520560</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46520560</guid></item><item><title><![CDATA[New comment by mjb in "I wanted a camera that doesn't exist, so I built it"]]></title><description><![CDATA[
<p>The haters will hate, but tap guides are great (e.g. <a href="https://biggatortools.com/v-tapguide-faqs" rel="nofollow">https://biggatortools.com/v-tapguide-faqs</a>, but even a block of hard wood with a clearance hole drilled in it works fine).<p>Unless you're tapping something super tough (306?), Amazon taps are fine for hand tapping. Go in straight, use a good lubricant.</p>
]]></description><pubDate>Tue, 06 Jan 2026 23:44:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=46520548</link><dc:creator>mjb</dc:creator><comments>https://news.ycombinator.com/item?id=46520548</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46520548</guid></item><item><title><![CDATA[New comment by mjb in "$50 PlanetScale Metal Is GA for Postgres"]]></title><description><![CDATA[
<p>I don't think either is a bad choice, but Aurora has some advantages if you're not a DB expert. Starting with Aurora Serverless:<p>- Aurora storage scales with your needs, meaning that you don't need to worry about running out of space as your data grows.
- Aurora will auto-scale CPU and memory based on the needs of your application, within the bounds you set. It does this without any downtime, or even dropping connections. You don't have to worry about choosing the right CPU and memory up-front, and for most applications you can simply adjust your limits as you go. This is great for applications that are growing over time, or for applications with daily or weekly cycles of usage.<p>The other Aurora option is Aurora DSQL. The advantages of picking DSQL are:<p>- A generous free tier to get you going with development.
- Scale-to-zero and scale-up, on storage, CPU, and memory. If you aren't sending any traffic to your database it costs you nothing (except storage), and you can scale up to millions of transactions per second with no changes.
- No infrastructure to configure or manage, no updates, no thinking about replicas, etc. You don't have to understand CPU or memory ratios, think about software versions, think about primaries and secondaries, or any of that stuff. High availability, scaling of reads and writes, patching, etc is all built-in.</p>
]]></description><pubDate>Mon, 15 Dec 2025 17:46:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=46277788</link><dc:creator>mjb</dc:creator><comments>https://news.ycombinator.com/item?id=46277788</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46277788</guid></item><item><title><![CDATA[New comment by mjb in "Why Strong Consistency?"]]></title><description><![CDATA[
<p>I spoke about this exact thing at a conference (HPTS’19) a while back. This can work, but introduces modal behaviors into systems that make reasoning about availability very difficult and tends to cause meta stable behaviors and long outages.<p>The feedback loop is replicas slow -> traffic increases to primary -> primary slows -> replicas slow, etc. The only way out of this loop is to shed traffic.</p>
]]></description><pubDate>Fri, 28 Nov 2025 04:20:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=46075482</link><dc:creator>mjb</dc:creator><comments>https://news.ycombinator.com/item?id=46075482</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46075482</guid></item><item><title><![CDATA[New comment by mjb in "Why Strong Consistency?"]]></title><description><![CDATA[
<p>When does AP help?<p>It helps in the case where clients are (a) able to contact a minority partition, and (b) can tolerate eventual consistency, and (c) can’t contact the majority partition. These cases are quite rare in modern internet-connected applications.<p>Consider a 3AZ cloud deployment with remote clients on the internet, and one AZ partitioned off. Most often, clients from the outside will either be able to contact the remaining majority (the two healthy AZs), or will be able to contact nobody. Rarely, clients from the outside will have a path into the minority partition but not the majority partition, but I don’t think I’ve seen that happen in nearly two decades of watching systems like this.<p>What about internal clients in the partitioned off DC? Yes, the trade-off is that they won’t be able to make isolated progress. If they’re web servers or whatever, that’s moot because they’re partitioned off and there’s no work to do. Same if they’re a training cluster, or other highly connected workloads. There are workloads that can tolerate a ton of asynchrony where being able to continue while disconnected is interesting, but they’re the exception rather than the rule.<p>Weak consistency is much more interesting as a mechanism for reducing latency (as DynamoDB does, for example) or increasing scalability (as the typical RDBMS ‘read replicas’ pattern does).</p>
]]></description><pubDate>Fri, 28 Nov 2025 04:18:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=46075473</link><dc:creator>mjb</dc:creator><comments>https://news.ycombinator.com/item?id=46075473</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46075473</guid></item><item><title><![CDATA[New comment by mjb in "Why Strong Consistency?"]]></title><description><![CDATA[
<p>Practically, the difference in availability for typical internet connected application is very small. Partitions do happen, but in most cases its possible to route user traffic around them, given the paths that traffic tends to take into large-scale data center clusters (redundant, typically not the same paths as the cross-DC traffic). The remaining cases do exist, but are exceedingly rare in practice.<p>Note that I’m not saying that partitions don’t happen. They do! But in typical internet connected applications the cases where a significant proportion of clients is partitioned into the same partition as a minority of the database (i.e. the cases where AP actually improves availability) are very rare in practice.<p>For client devices and IoT, partitions off from the main internet are rare, and there local copies of data are a necessity.</p>
]]></description><pubDate>Fri, 28 Nov 2025 04:12:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=46075446</link><dc:creator>mjb</dc:creator><comments>https://news.ycombinator.com/item?id=46075446</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46075446</guid></item><item><title><![CDATA[New comment by mjb in "Why Strong Consistency?"]]></title><description><![CDATA[
<p>Yes, you can do stuff like that. You might enjoy the CRAQ paper by Terrace et al, which does something similar to what you are saying (in a very different setting, chain replication rather than DBs).</p>
]]></description><pubDate>Fri, 28 Nov 2025 04:08:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=46075425</link><dc:creator>mjb</dc:creator><comments>https://news.ycombinator.com/item?id=46075425</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46075425</guid></item><item><title><![CDATA[New comment by mjb in "Why Strong Consistency?"]]></title><description><![CDATA[
<p>(Op here) No deadlocks needed! There’s nothing about providing strong consistency (or even strong isolation) that requires deadlocks to be a thing. DSQL, for example, doesn’t have them*.<p>Event sourcing architectures can be great, but they also tend to be fairly complex (a lot of moving parts). The bigger practical problem is that they make it quite hard to offer clients ‘outside the architecture’ meaningful read-time guarantees stronger than a consistent prefix. That makes clients’ lives hard for the reasons I argue in the blog post.<p>I really like event-based architectures for things like observability, metering, reporting, and so on where clients can be very tolerant to seeing bounded stale data. For control planes, website backends, etc, I think strongly consistent DB architectures tend to be both simpler and offer a better customer experience.<p>* Ok, there’s one edge case in the cross-shard commit protocol where two committers can deadlock, which needs to be resolved by aborting one of them (the moral equivalent of WAIT-DIE). This never happens with single-shard transactions, and can’t be triggered by any SQL patterns.</p>
]]></description><pubDate>Fri, 28 Nov 2025 04:06:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=46075414</link><dc:creator>mjb</dc:creator><comments>https://news.ycombinator.com/item?id=46075414</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46075414</guid></item><item><title><![CDATA[New comment by mjb in "Why Strong Consistency?"]]></title><description><![CDATA[
<p>(OP here).<p>The point of that section, which maybe isn’t obvious enough, is to reflect on how eventually-consistent read replicas limit the options of the database system builder (rather than the application builder). If I’m building the transaction layer of a database, I want to have a bunch of options for where to send me reads, so I don’t have the send the whole read part of every RMW workloads to the single leader.</p>
]]></description><pubDate>Fri, 28 Nov 2025 01:10:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=46074676</link><dc:creator>mjb</dc:creator><comments>https://news.ycombinator.com/item?id=46074676</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46074676</guid></item><item><title><![CDATA[New comment by mjb in "Why Strong Consistency?"]]></title><description><![CDATA[
<p>(OP here). I don’t love leaking this kind of thing through the API. I think that, for most client/server shaped systems at least, we can offer guarantees like linearizability to all clients with few hard real-world trade-offs. That does require a very careful approach to designing the database, and especially to read scale-out (as you say) but it’s real and doable.<p>By pushing things like read-scale-out into the core database, and away from replicas and caches, we get to have stronger client and application guarantees with less architectural complexity. A great combination.</p>
]]></description><pubDate>Fri, 28 Nov 2025 01:07:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=46074654</link><dc:creator>mjb</dc:creator><comments>https://news.ycombinator.com/item?id=46074654</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46074654</guid></item><item><title><![CDATA[New comment by mjb in "Why Strong Consistency?"]]></title><description><![CDATA[
<p>That’s a fair point. To be fair to the academic definitions, “eventually consistent” is a quiescent state in most definitions, and there are more specific ones (like “bounded staleness”, or “monotonic prefix”) that are meaningful to clients of the system.<p>But I agree with you in general - the dynamic nature of systems means, in my mind, that you need to use client-side guarantees, rather than state guarantees, to reason about this stuff in general. State guarantees are nicer to prove and work with formally (see Adya, for example) while client side guarantees are trickier and feel less fulfilling formally (see Crooks et al “Seeing is Believing”, or Herlihy and Wing).</p>
]]></description><pubDate>Fri, 28 Nov 2025 01:03:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=46074631</link><dc:creator>mjb</dc:creator><comments>https://news.ycombinator.com/item?id=46074631</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46074631</guid></item><item><title><![CDATA[New comment by mjb in "Why Strong Consistency?"]]></title><description><![CDATA[
<p>Read-your-writes is a client guarantee, that requires stickiness (i.e. a definition of “your”) to be meaningful. It’s not a level of consistency I love, because it raises all kinds of edge-case questions. For example, if I have to reconnect, am I still the same “your”? This isn’t even the some rare edge case! If I’m automating around a CLI, for example, how is the server meant to know that the next CLI invocation from the same script (a different process) is the same “your”? Sure, I can fix that with some kind of token, but then I’ve made the API more complicated.<p>Linearizability, as a global guarantee, is much nicer because it avoids all those edge cases.</p>
]]></description><pubDate>Fri, 28 Nov 2025 00:59:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=46074605</link><dc:creator>mjb</dc:creator><comments>https://news.ycombinator.com/item?id=46074605</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46074605</guid></item><item><title><![CDATA[New comment by mjb in "Why Strong Consistency?"]]></title><description><![CDATA[
<p>The point is that, in a disaggregated system, the transaction processor has less flexibility about how to route parts of the same transaction (that section is a point about internal implementation details of transaction systems).</p>
]]></description><pubDate>Fri, 28 Nov 2025 00:54:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=46074574</link><dc:creator>mjb</dc:creator><comments>https://news.ycombinator.com/item?id=46074574</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46074574</guid></item><item><title><![CDATA[New comment by mjb in "Why Strong Consistency?"]]></title><description><![CDATA[
<p>There is no reason a database can’t be both strongly consistent (linearizable, or equivalent) and available to clients on the majority side of a partition. This is, by far, the common case of real-world partitions in deployments with 3 data centers. One is disconnected or fails. The other two can continue, offering both strong consistency and availability to clients on their side of the partition.<p>The Gilbert and Lynch definition of CAP calls this state ‘unavailable’, in that it’s not available to all clients. Practically, though, it’s still available for two thirds of clients (or more, if we can reroute clients from the outside), which seems meaningfully ‘available’ to me!<p>If you don’t believe me, check out Phil Bernstein’s paper (Bernstein and Das) about this. Or read the Gilbert and Lynch proof carefully.</p>
]]></description><pubDate>Fri, 28 Nov 2025 00:53:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=46074562</link><dc:creator>mjb</dc:creator><comments>https://news.ycombinator.com/item?id=46074562</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46074562</guid></item><item><title><![CDATA[New comment by mjb in "/dev/null is an ACID compliant database"]]></title><description><![CDATA[
<p>This doesn't work as cleanly for SQL-style transactions where there are tons of RW transactions, sadly.</p>
]]></description><pubDate>Fri, 24 Oct 2025 01:15:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=45689600</link><dc:creator>mjb</dc:creator><comments>https://news.ycombinator.com/item?id=45689600</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45689600</guid></item><item><title><![CDATA[New comment by mjb in "/dev/null is an ACID compliant database"]]></title><description><![CDATA[
<p>Best of all, /dev/null is also serializable (but not strict serializable) under many academic and textbook definitions.<p>Specifically, these definitions require that transactions appear to execute in <i>some</i> serial order, and place no constraints on that serial order. So the database can issue all reads at time zero, returning empty results, and all writes at the time they happen (because who the hell cares?).<p>The lesson? Demand real-time guarantees.</p>
]]></description><pubDate>Fri, 24 Oct 2025 01:03:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=45689517</link><dc:creator>mjb</dc:creator><comments>https://news.ycombinator.com/item?id=45689517</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45689517</guid></item><item><title><![CDATA[New comment by mjb in "Optical diffraction patterns made with a MOPA laser engraving machine [video]"]]></title><description><![CDATA[
<p>That's much better results than mine!<p>I notice a similar 'holographic' effect when coloring titanium a couple weeks back, and experimented with getting them dialed in along the same lines as this video. I didn't have nearly as much success, despite the underlying physics being similar. My guess is that the much lower thermal conductivity of titanium causes a lot more smudging than on stainless, which makes the grating effect less pronounced.<p>One interesting thing I noted with Ti is that satin finished Ti (media blasted with 500 grit glass media) won't take a color from electrocoloring, but will from MOPA laser coloring. Not nearly as nice as polished Ti, but still there. Given that they are such similar processes (growing a set thickness oxide layer), its somewhat surprising to see different results.<p>I guess I'm going to have to experiment on some polished 304.</p>
]]></description><pubDate>Mon, 20 Oct 2025 21:39:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=45649740</link><dc:creator>mjb</dc:creator><comments>https://news.ycombinator.com/item?id=45649740</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45649740</guid></item><item><title><![CDATA[New comment by mjb in "SQL Anti-Patterns"]]></title><description><![CDATA[
<p>I agree. Modern code models tend to do a great job advising in SQL, especially if you include the table definition and EXPLAIN output in the context. Alternatively, I've found that an EXPLAIN MCP tool works well.</p>
]]></description><pubDate>Sun, 19 Oct 2025 03:35:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=45631921</link><dc:creator>mjb</dc:creator><comments>https://news.ycombinator.com/item?id=45631921</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45631921</guid></item></channel></rss>