Hacker Newsnew | past | comments | ask | show | jobs | submit | Thaxll's commentslogin

They never said that.

The "world" runs on Kubernetes which is using Raft: https://pkg.go.dev/go.etcd.io/etcd/raft/v3

Are you saying that this implementation is wrong?

"This Raft library is stable and feature complete. As of 2016, it is the most widely used Raft library in production, serving tens of thousands clusters each day. It powers distributed systems such as etcd, Kubernetes, Docker Swarm, Cloud Foundry Diego, CockroachDB, TiDB, Project Calico, Flannel, Hyperledger and more."

One of the most popular distributed DB is Cockroach which is written in go and also uses Raft: https://github.com/cockroachdb/cockroach/tree/master/pkg/raf...


etcd has had numerous liveness and safety bugs, with one happening as recently as December of 2025. Would you consider that a correct implementation?

You may be interested in knowing that the largest managed Kubernetes service in the world (AWS EKS) ripped out etcd for in favor of their homegrown consensus service for large scale EKS clusters: https://aws.amazon.com/blogs/containers/under-the-hood-amazo...


etcd is some of the most amateur code I've ever seen, despite being one of the oldest and presumably most mature "infrastructure" projects written in Go.

goBGP is arguably even worse.

I don't have a third place in mind that's even worth mentioning relative to these two.


just curious, what problems do you see with gobgp?

(I have only a rather basic familiarity with go, but was considering gobgp for an infra project...)


Not speaking to their code, but to start GoBGP has the worst performance of any BGP daemon by a large margin [1].

[1] https://elegantnetwork.github.io/posts/comparing-open-source...


Garbage collected languages like Go will always have worse performance than lower level languages like C (frr and bird are implemented in C).

Gobgp is great if you want to embed it directly into a Go app though. Talos Linux has done that recently.


Nope, it is a matter of skill as well.

https://github.com/ixy-languages/ixy-languages


No they won't. They are generally faster in throughput than any non-gc application that isn't heavily hand optimized. Their problems are higher memory usage and unpredictable latency, not speed.

Just look at the code. Anywhere you like. There's nothing I can say that will be a substitute for seeing it yourself.

I've had to use it as a library sometimes, and it's also really poorly designed as a library. There's no consistent principle for what is exported and what remains internal, so almost anything non-trivial you do may require you to copy-paste parts of the library code because something happened to not be exported. So you must think, okay sure, but in return for that you get a minimal and stable API. Nope! It also has some of the most API churn of any Go module, already up to /v4 and that's only counting the semver-major breakage they bothered to acknowledge, not the many semver papercuts along the way.


Sorry to pile on, but yeah, I wanted to use etcd during 2021 and 2022, around v3.5, but etcd had serious issues including silent data corruption. If you are curious, ask gemini flash "there were a number of etcd releases years ago where it seems a new wave of developers came in and started breaking everything"

Why type out a prompt instead of link to an authoritative source? Gemini is not a source.

I'd like to know what you base your statement on that the Raft implementations in etcd or CockroachDB are incorrect. Your original paper does not mention those implementations, so where does that claim come from?

Having run a fleet of 100s of etcd clusters for 10000s of rps, and the fact that upstream runs tests similar to antithesis and recently partnered with antithesis [0], and jepsen has tested it long ago as well [1]. Etcd's raft algorithm is fine. Someone even did a TLA+ proof on it in the last couple years[2]. Yes there was a correctness issue a few years ago but otherwise the person you're replying to doesn't know what they're talking about. Also those bugs have nothing to do with the raft implementation, but instead the state machine implemented on top.

0: https://etcd.io/blog/2025/autonomus_testing_with_antithesis/

1: https://jepsen.io/analyses/etcd-3.4.3

2: https://github.com/etcd-io/raft/pull/113


"there was a correction issue" is downplaying it. Etcd is truly the worst example of Raft.

Etcd corruption and loss of quorum is extremely common in practice and the GitHub issues sit for years. The design is simple, the performance is modest, yet it still has still never been reliable, despite being marketed as so. I can't speak to whether this is specifically due to their Raft implementation, but I'd argue the entire codebase is over-engineered and questionable.


My beef with etcd is that its neither performant nor reliable.

Its very much {reliable, performant, flexible} pick none.


Their lock, leader election, sessions, and leases are all awful and I'd never recommend anyone to use those. But as a strongly consistent kv store and if you need the watch mechanics, its useful. It has its place and that's mostly being used by kubernetes.

> Etcd corruption and loss of quorum is extremely common in practice and the GitHub issues sit for years.

Do these have reproducible test cases?


Is the correctness of its implementation of the algorithm unaffected by bugs in this state machine? Maybe I missed something.

The raft algorithm works and if you implemented a less complex state machine (like using a simpler kv store that doesn't need global event ordering via revisions and watches) it would work. That's what antithesis said they did to test the raft algorithms in the other article linked

doesnt raft have a problem that it assumes no hysteresis? and that in general you can construct a latency graph that deterministically causes a permanent lock in the leadership election phase?

I'm not sure I fully understand your question, but the heartbeat time outs and leader election time outs are static. And yeah if you make votes and heartbeats time out in a way that nobody can be elected, then raft can't make progress.

I've never had this be a problem in reality but AWS has a pretty good backbone. Maybe if you were running it over a pretty unreliable network this would be an issue?


Surely the King is doing it, so that must be the correct way. Look, the King even wears clothes and is totally not naked at all.

That the world runs on Kubernetes is no qualitative statement about the correctness of its Raft implementation. You can say that it's clearly good enough to not matter most of the time, but that is a different statement. No matter who you look at, they're just cooking with gas like you do, and they can make mistakes in just the same way.

Now; I'm only attacking your argument. I do neither know nor particularly care about the correctness of that implementation itself. There's been better refutations of the claim you replied to in other answers anyway.


It's not even a qualitative statement about Kubernetes.

Kubernetes doesn't solve any technical problem, so the language it's written in is irrelevant.

I have a bunch of volumes that I'd like to get automatically attached and mounted to nodes on which their respective workload runs (which are automatically scheduled) who automatically fetch and mount their config files and secrets from a HA DB on demand. I also need some internal loadbalancing and integrations with something like certbot for all of my web workloads. Id also like to make sure that I get metrics and logs from every workload in some form.

Thats basically it for starters, what non-technical solution do you propose?


If k8s works for you, then go for it.

But k8s was invented so that "dev" and "ops" teams could play nicely when they are different org structures, with their own budgets, deadlines, etc.

If it solves some technical issue then that's incidental.


So you propose to just let Ops personnel handle attaching volumes and renewing certificates, that these arent technical problems but just one of team structure?

Please, do describe your solution for the concerns above. So far Ive only seen equivalents of Greenspun's tenth rule


What I meant is that the fact that the world is running on Kubernetes is not a qualitative statement about Kubernetes.

Now there's three of them https://github.com/hashicorp/raft

etcd is notoriously unreliable and one of the biggest problems in k8s.

I didn't know Go just isn't a good language for it, but now that I know I'm no longer surprised at etcd being problematic.


Having maintained multiple etcd clusters for self-managed kubernetes the last few years I disagree with the "problematic" characterization.

Sure it may not be the best fit in a scenario where you want a cluster spanned over the entire globe (thats why GKE uses paxos-based Spanner instead of it) , but even spanned across an entire continent (in europe via glass fiber) it works quite well for me. Its one of the least problematic parts of the stack.


I'm running big k8s cluster and my small ones at home for 8 years, never had an etcd issue.

Could you elaborate?


That's not remotely what he's saying at all.

> As another example, Go still has not yielded a correct implementation of Raft or Paxos

> are you saying this implementation is wrong?

> That's not remotely what he's saying at all.

I'm v confused by this thread


I don't care for Go myself (especially its concurrency model, which is a total dinosaur in a world where we have structured concurrency) so I'm not saying this to support my favourite language, but:

That is literally what the comment says.


Thank you. I don't know why this is so complicated.

The video game industry is built arround that, game engines use that model all the time as gameplay scripting.

https://dev.epicgames.com/documentation/unreal-engine/bluepr...


Golang-ci exists for a while and everyone is using it.

Not sure what you're talking about.


I've been using golangci-lint for years, it's okay but it's slow even with a cache, as soon as you have good amount of lints enabled your ci can suddendly take minutes.

That's not the fault of golangci-lint, it's just the concept of bringing together a bunch of different linters and keeping it fast is impossible. And the configuration is a bit wild too, because every linter obviously has their own decisions on how it wants to be configured.

Ruff can lint in seconds or even sub second.


It's like 100 times slower than ruff. They had to massive caching techniques to get it to a remotely acceptable speed.


SQLite gets so much praise here but when you start using it, you realize quickly how bad it is, the type system is by default very limited and dangerous.

It's like comparing old php with a strongly typed language.

There is not even a date type...


SQLite competes with fopen. Not Postgres


It’s curious how many people don’t understand what SQLite is and its intended feature set. They get huffy that it’s not a full client server model with multimaster clustering across 8 data centers on 12 continents plus New Zealand with realtime synchronous replication.

It’s a product that allows you to do sql like things without a database server. If you need to have database server behavior, you’re using the wrong product.


Well, it goes both ways. You'll see articles saying essentially "you don't need Postgres or any other fancy database, SQlite is enough" while ignoring the fact that some use-cases warrant a more conventional DB server.

Different tools for different situations!


I think this critique was traditionally about the LAMP stack. Imagine how many engineering years would have been saved if Wordpress ran on SQLite,

- no db user configuration - no installing multiple tenants in the same db - no phpmyadmin (ftp db files) - no remote database hacks - no backup tools


I agree with you. There are 2 dozen foot-guns to be kept in mind. And discovered a new footgun regarding multi-byte strings and NUL handling today on HN. SQLite became popular because it was the only free and open-source choice 2 decades ago. Now there are other type-safe and robust choices.


It is very simple. Which means fast to setup in dev environment for local testing. Which makes first version very easy. And then people just keep fixing that one.

Still I quite a lot of question the use on servers if you have decided that I need a database.

Not that there isn't more valid use cases like local storage or self-contained information transfer for specific use.


What are other choices for FOSS serverless relational databases? I’ve been looking everywhere and couldn’t find anything.


Firebird can be embedded, although neither the database itself, nor the embedded mode are as popular as they once were.

It's a fully featured database though, with everything you expect from one, including actually working ALTER TABLEs.


DuckDB ? Strict by default and excellent for logs, telemetry, dashboard apps, etc.


From what I can tell, DuckDB is more focused on huge-scale data analysis than simple data persistence, so I’m not sure if it fits my use cases. Otherwise, it looks good.


It’s not as bad since you can always use a powerful programming language with a good type system that avoids type errors at the SQL level. You can build good abstractions in your programming language.


It doesn't exists because:

- it's against ToS

- it can get you banned

Reversing API is trivial, this is not the reason.



Most major studios are using custom engines, Ubisoft, EA, Activision, Take2, Blizzard ect...


That's not how it works, first of all IdTech is not a general engine, it's only made to build specific games: fps.

Next you need to make a product out of that meaning a very large investment so that the engine is actually usable outside of ID, people that don't know what an engine is think of the rendering part but it's actually very minor compare to pipelines ect ... which we know nothing about, it might not even be good or painful to use.

Unreal is widely used because it can create any kind of game and the pipeline, tooling are good and well integrated.


So... exactly the same situation the Unreal engine was in, before its current open-licensing model starting with UE3?

I hear a lot of good things about modern idTech. Pervasive multithreading is one, and it's not particular to the FPS genre.


Your first statement is wrong. The new Indiana jones game is not an FPS and it uses the same engine


I'm not wrong they forked the engine and it's the same studio that worked with the same engine before, id tech is made for fps it's clear.


A lot of unreal engine games also fork the engine. If your bar is being forked then unreal doesn’t meet the bar for a lot of people either.

3D Engines of that fidelity are rarely genre specific. Editors might be but the engines are often fairly flexible because most genres share a lot in 3D space.


Overwatch is a bit different though , it's not a pure hitscan fps such as valorant, cs or r6. Cheats in Overwatch are not as useful because the gameplay is different from other fps.


Since you're not a gamer sorry but your opinion does not means much, you don't seem to realize how cheating is a problem in online games, it's not just an inconvenience, it kills games.


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: