Skip to content
HomeVideosBooksBlogs
AllTop postsTopics
Podcasts
HistoryListsWatch laterLiked videosFollowing

The videos, books, blogs and podcasts Hacker News keeps recommending, all in one place.

VideosBooksBlogsPodcastsAboutPrivacySettings

Data from Hacker News, HackerTube, HackerBooks, HackerBlogs and Open Library. Credits · Not affiliated with Y Combinator.

HomeVideosBooksBlogsPodcasts
Ctrl K

    Twitch Engineering Blog

    blog.twitch.tv · Company blog · on HN since 2011

    Twitch's engineering team writes about running its streaming platform, including Go performance, PostgreSQL use, and policy updates.

    Visit blogHN submissions
    Systems & PerformanceProgrammingDatabases
    What HN says

    HN mostly links it for the Go memory ballast article, which commenters discuss in relation to Go garbage collector tuning and runtime.SetMemoryLimit.

    Stats for nerds
    178HN people shared it
    132linked in comments
    2Kstory points
    Jan 2026last shared
    2015people per year2026

    Top posts on HN

    1. 1
      Go’s march to low-latency GC
      7 people · 453 points · first shared 2016 · 289 comments on HN
    2. 2
      Twirp: A new RPC framework for Go
      2 people · 368 points · first shared 2018 · 97 comments on HN
    3. 3
      Let’s Talk About Hot Tub Streams
      2 people · 151 points · first shared 2021 · 252 comments on HN
    4. 4
      Go memory ballast: How I learnt to stop worrying and love the heap
      20 people · 149 points · first shared 2019 · 88 comments on HN
    5. 5
      Introducing Twitch Creative
      1 person · 104 points · first shared 2015 · 72 comments on HN
    6. 6
      How Twitch Uses PostgreSQL
      8 people · 69 points · first shared 2016 · 6 comments on HN
    7. 7
      The Twitch DJ Program
      2 people · 68 points · first shared 2024 · 76 comments on HN
    8. 8
      Important Notice About Your Twitch Account
      2 people · 59 points · first shared 2015 · 4 comments on HN
    9. 9
      Justin.tv Moves Domains from GoDaddy
      1 person · 53 points · first shared 2012 · 7 comments on HN
    10. 10
      Taking legal action against the most active sellers of viewbot services
      1 person · 48 points · first shared 2016 · 14 comments on HN

    What HN people wrote when they linked it

    • btownJun 2018

      Software for scaling up live-streaming CDN points of presence (POPs) is a pretty crazy domain. For on-demand video, you can think of a CDN as a cache, getting known-ahead-of-time chunks. But what about for live streaming? It's not feasible to stream frame-by-frame directly from your encoding backend to all the viewers of the World Cup, over something like RMTP - you'd want to use a CDN. So typically, you distribute meaty (multi-second) HLS segments as individual video files, or collections of files, to your CDN; once available, they then need to be requested by browsers/mobile clients as a whole segment, over HTTP(S). Works well with existing CDN infrastructure (provided they can handle the write volume and have big enough inbound pipes)... but the huge issue is that the length of the segment plus round-trips is a lower bound on effective latency. And when interactivity is required, multi-second delays can be horrible.

      https://www.wowza.com/blog/hls-latency-sucks-but-heres-how-to-fix-it is a great writeup. Another overview of the problem, and a proposed solution, is in this excellent article by Twitter here:

      https://medium.com/@periscopecode/introducing-lhls-media-streaming-eb6212948bef

      > In HLS live streaming, for instance, the succession of media frames arriving from the broadcaster is normally aggregated into TS segments that are each a few seconds long. Only when a segment is complete can a URL for the segment be added to a live media playlist. The latency issue is…

    • sdfgdfgbsdfgApr 2022

      I agree with this overall.

      It seems that C is a language/compiler/toolchain combo that lets you shoot yourself in the foot, but gives you enough access to stuff to be maximially performant in a random (i.e. not specialized) use case. (C++ is in this camp too).

      Rust is a language/compiler/toolchain combo that tries its best to not let you shoot yourself in the foot by presenting those footguns for you to fix up front, without giving up much of the access to stuff (C++ tried some things in this camp like destructors and smart pointers. GC is also something that's in this camp)

      Golang is a language/compiler/toolchain combo that lets you shoot yourself in the foot in some circumstances, and does not give you enough access to be maximally performant in every random case, but rather it seems to posit to give you opinions that will get you really, good performance in most random cases (if you need to tune the GC, for instance, you're probably worse off, like here: https://blog.twitch.tv/en/2019/04/10/go-memory-ballast-how-i-learnt-to-stop-worrying-and-love-the-heap/). Meaning it's making the tradeoffs of upfront complexity vs runtime issues, and Tim Toady vs The One True Way for you, because in the general case those are the most optimized tradeoffs. I don't disagree, especially when the closed-world ecosystem is good enough to not need to reach out to external tools whether those are via cgo or in the build toolchain.

      In general, I think that if you reach the point where…

    • asdkhadsjDec 2018

      I work in a small shop, much "behind the times", and recently tried introducing gRPC. It went okay. The problem is it was a hard sell and for our limited needs, a lot of gRPC's features weren't something we didn't happily solve with REST. Some of the other more complex features that REST didn't support were things we didn't feel we needed. All together, gRPC was a big burden for me to push, with little payoff for people. I think I was the only one that liked it, and even I disliked parts of it.

      So before pulling the switch too far, I decided to take a step back and assess with benefits we all got from gRPC. Mainly it was Protobuf spec, RPC design (ie not REST verbs and whatnot), and code generation.

      Because those were the things we all agreed upon, I went with Twirp[0]. It's been a great experience so far. The rollout is just a bit ahead of where our gRPC was, and it's been mostly effortless.

      The most effortless thing? I've got an (internal) API user switching from the old REST API to the proto RPC spec, and all they're changing is the URL and a few field naming schemes. It's still JSON for them. They're not generating code, they're not doing anything. It all "just works", which is pretty impressive.

      TL;DR: We love simpler options that let us gain the benefits of Protobufs, without the complexity of gRPC when we don't need it.

      [0]: https://blog.twitch.tv/twirp-a-sweet-new-rpc-framework-for-go-5f2febbf35f

    • TheRoqueJan 2026

      > The only way to accomplish this at scale is to build something that is legit better and let the market decide. Anything else is just principled wishful thinking.

      Classic neo-liberalism BS (pardon my french). Markets are not some natural law written in the atoms, it's a human construction, and we shape it the way we want. Countries can create or destroy markets just with laws, you put a tax here, you put a legal requirement there. That's for example the reason that big american tech companies have been kicked out of South Korea:

      - https://www.theguardian.com/world/2025/aug/08/south-korea-google-maps-geographic-data-restrictions

      - https://blog.twitch.tv/en/2023/12/05/an-update-on-twitch-in-korea/

      Sure, if there are 2 competing companies that play with the exact set of rules, the mArKeT wIlL deCiDe, but that would be a really stupid decision from any government to not shape the rules in its favor. Europe is slowly waking up to this reality, better late than never I guess.

      Did the "market decide" that Nvidia chips won't be shipped to China ? Did "the market decide" to put tariffs to get benefits from other countries ? Did "the market decide" to put embargo to Cuba, Iran, Venezuela.. ?

      Hearing that regulations and laws is "wishful thinking" makes no sense at all. It's more the opposite, it's the only way to shape the markets the way you want to.

    • 013aDec 2020

      I can't speak for why Herman Li, or any other musician, would be banned for DMCA. But, its my understanding that Twitch pays for a live performance license from the major music publishers to enable musicians to stream on their platform [1]. Of course, this didn't work for Herman Li, but I think it at least speaks to their long-term goals for the platform.

      Additionally, while they say to never play recorded music on stream, unless from a source where the copyrights are taken care of, their specific recommendations even in this "clarification" post are very opaque. Never play recorded music on stream, unless you own all the rights, but you probably don't, if you're not sure turn off your VODs. None of that is consistent with some overarching idea of why people get DMCA'd; would I get DMCA'd for playing recorded music live, but not having VODs? I would guess even Twitch doesn't know; its outside of their control.

      In short, music on Twitch is REALLY risky, primarily because their rights enforcement is so immature. Its akin to them wildly shooting in the air with a machine gun. YouTube's Content ID is a bit more mature and predictable, so diversifying there may be a good idea.

      [1] https://blog.twitch.tv/en/2020/11/11/music-related-copyright-claims-and-twitch/

    • throwaway189262Sep 2020

      V8 still uses STW for mark sweep. The benchmark image on this https://v8.dev/blog/concurrent-marking shows 50+ms pause time, quite bad compared to ~5ms or less in new Java collectors. This might be due to STW move phase though? They don't really explain, but the long pause times show that there's definitely still long STW pauses in V8.

      For Go, I'm going to be a bad HN user and not read the whole article. Sorry, it's just too long for this time of night. It does appear that my understanding of Go GC is out of date. There's been many improvements in the last couple years. Some strange behavior due to not enough knobs to configure GC, but it appears to have a near constant GC pause? https://blog.twitch.tv/en/2019/04/10/go-memory-ballast-how-i-learnt-to-stop-worrying-and-love-the-heap-26c2462549a2/

      I'm annoyed that Google doesn't offer much benchmarking results for V8. Huge articles about improvements made with a single benchmark image. And they didn't use standard benchmarks for either so it's unclear what they're even benchmarking. The Go slides you linked include benchmarks from some guys production server he tweeted images of, a bunch of standard benchmarks but they only show % throughout improvement, and no pause times.

    Related

    Timescale Blogblog.timescale.com95 people

    How percentile approximation works and why it's more useful than averages

    Timescale Blog
    Company · last shared 2022
    Uber Engineering Blogeng.uber.com525 people

    Why Uber Engineering Switched from Postgres to MySQL

    Uber Engineering Blog
    Company · last shared 2025
    Netflix Tech Blognetflixtechblog.com363 people

    The Case of the Extra 40ms

    Netflix Tech Blog
    Company · last shared 2026
    fasterthanli.mefasterthanli.me236 people

    A half-hour to learn Rust

    fasterthanli.me
    Personal · last shared 2026
    Go Blogblog.golang.org529 people

    Go 2, here we come

    Go Blog
    Company · last shared 2026
    Stream Bloggetstream.io60 people

    Winds 2.0: It’s Time to Revive RSS

    Stream Blog
    Company · last shared 2026
    Sourcegraph Blogabout.sourcegraph.com156 people

    An ex-Googler’s guide to dev tools

    Sourcegraph Blog
    Company · last shared 2024
    #AltDevBlogADayaltdevblogaday.com163 people

    John Carmack on the importance of Static Code Analysis

    #AltDevBlogADay
    Publication · last shared 2023