<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Infrastructure on Mia Heidenstedt</title><link>https://heidenstedt.org/tags/infrastructure/</link><description>Recent
content
in Infrastructure on Mia Heidenstedt</description><generator>
Hugo</generator><language>en</language><lastBuildDate>Sat, 04 Jul 2026 11:03:00 +0000</lastBuildDate><atom:link href="https://heidenstedt.org/tags/infrastructure/index.xml" rel="self" type="application/rss+xml"/><item><title>Building a web search engine from scratch in two months with 3 billion neural embeddings</title><link>https://heidenstedt.org/links/building-a-web-search-engine-from-scratch-in-two-months-with-3-billion-neural-embeddings/</link><pubDate>Mon, 17 Nov 2025 16:39:46 +0000</pubDate><guid>https://heidenstedt.org/links/building-a-web-search-engine-from-scratch-in-two-months-with-3-billion-neural-embeddings/</guid><description><![CDATA[<p>
      <em>Best viewed on the <a href="https://heidenstedt.org/links/building-a-web-search-engine-from-scratch-in-two-months-with-3-billion-neural-embeddings/">original page</a>, where extended functionality like the
    footnote helper is available.</em>
    </p><p>I stumbled upon this quite bonkers article about building a web search engine from scratch as a solo developer with relatively modest resources, i absolutely can recommend reading it:</p>
<p><a href="https://blog.wilsonl.in/search-engine/">Building a web search engine from scratch in two months with 3 billion neural embeddings</a></p>
<h2 id="summary-generated"><a href="https://heidenstedt.org/links/building-a-web-search-engine-from-scratch-in-two-months-with-3-billion-neural-embeddings/#summary-generated">Summary (Generated):</a></h2><ul>
<li>Wilson Lin built a full web search engine <strong>from scratch in ~2 months</strong>, crawling ~<strong>280M pages</strong> and generating <strong>3B SBERT embeddings</strong> on a GPU cluster consisting of 200 GPUs.</li>
<li>Lin focused on <strong>neural-embedding search</strong>, with smart HTML normalization + sentence-level chunking + contextual “statement chaining” so queries match <strong>meaning and intent</strong>, not keywords.</li>
<li>The infra is highly optimized + cheap: custom <strong>crawler &amp; RocksDB-based queues/KV</strong>, sharded <strong>HNSW / CoreNN vector DB</strong>, mTLS service mesh, hundreds of GPUs on low-cost providers (Runpod, Hetzner, Oracle).</li>
<li>The SERP emphasizes <strong>high-quality, low-SEO-spam content</strong>, knowledge panels (Wikipedia/Wikidata), and a light <strong>AI assistant</strong> for quick answers and reranking, but still feels like a classic fast search engine.</li>
<li>Biggest lessons: <strong>crawling + quality filtering are the hardest part</strong>, embeddings make very specific queries vastly better, and search + LLMs will likely coexist (LLMs shouldn’t memorize everything, but retrieve via dense indices).</li>
</ul>
]]></description><content:encoded><![CDATA[<p>
      <em>Best viewed on the <a href="https://heidenstedt.org/links/building-a-web-search-engine-from-scratch-in-two-months-with-3-billion-neural-embeddings/">original page</a>, where extended functionality like the
    footnote helper is available.</em>
    </p><p>I stumbled upon this quite bonkers article about building a web search engine from scratch as a solo developer with relatively modest resources, i absolutely can recommend reading it:</p>
<p><a href="https://blog.wilsonl.in/search-engine/">Building a web search engine from scratch in two months with 3 billion neural embeddings</a></p>
<h2 id="summary-generated"><a href="https://heidenstedt.org/links/building-a-web-search-engine-from-scratch-in-two-months-with-3-billion-neural-embeddings/#summary-generated">Summary (Generated):</a></h2><ul>
<li>Wilson Lin built a full web search engine <strong>from scratch in ~2 months</strong>, crawling ~<strong>280M pages</strong> and generating <strong>3B SBERT embeddings</strong> on a GPU cluster consisting of 200 GPUs.</li>
<li>Lin focused on <strong>neural-embedding search</strong>, with smart HTML normalization + sentence-level chunking + contextual “statement chaining” so queries match <strong>meaning and intent</strong>, not keywords.</li>
<li>The infra is highly optimized + cheap: custom <strong>crawler &amp; RocksDB-based queues/KV</strong>, sharded <strong>HNSW / CoreNN vector DB</strong>, mTLS service mesh, hundreds of GPUs on low-cost providers (Runpod, Hetzner, Oracle).</li>
<li>The SERP emphasizes <strong>high-quality, low-SEO-spam content</strong>, knowledge panels (Wikipedia/Wikidata), and a light <strong>AI assistant</strong> for quick answers and reranking, but still feels like a classic fast search engine.</li>
<li>Biggest lessons: <strong>crawling + quality filtering are the hardest part</strong>, embeddings make very specific queries vastly better, and search + LLMs will likely coexist (LLMs shouldn’t memorize everything, but retrieve via dense indices).</li>
</ul>
]]></content:encoded></item><item><title>Release: OuroborosDB Data Storage Calculator</title><link>https://heidenstedt.org/posts/2024/release-ouroborosdb-data-storage-calculator/</link><pubDate>Fri, 01 Nov 2024 11:17:10 +0200</pubDate><guid>https://heidenstedt.org/posts/2024/release-ouroborosdb-data-storage-calculator/</guid><description><![CDATA[<p>
      <em>Best viewed on the <a href="https://heidenstedt.org/posts/2024/release-ouroborosdb-data-storage-calculator/">original page</a>, where extended functionality like the
    footnote helper is available.</em>
    </p><p>I forgot to mention that i released a new tool for my project <a href="https://github.com/i5heu/ouroboros-db">ouroboros-db</a>, so here it is:</p>
<p>The &ldquo;OuroborosDB Overhead Calculator&rdquo; is a little tool which helps you to calculate the overhead of erasure coding systems while also considering the overhead of indexes and the blocks themselves. It is kinda fun to play around with so give it a try!</p>
<p><a href="https://i5heu.github.io/ouroboros-db-overhead-calculator/">https://i5heu.github.io/ouroboros-db-overhead-calculator/</a></p>
<video width="100%" controls>
  <source src="https://heidenstedt.org/posts/2024/release-ouroborosdb-data-storage-calculator/demo.webm" type="video/webm">
  Your browser does not support the video tag.
</video>]]></description><content:encoded><![CDATA[<p>
      <em>Best viewed on the <a href="https://heidenstedt.org/posts/2024/release-ouroborosdb-data-storage-calculator/">original page</a>, where extended functionality like the
    footnote helper is available.</em>
    </p><p>I forgot to mention that i released a new tool for my project <a href="https://github.com/i5heu/ouroboros-db">ouroboros-db</a>, so here it is:</p>
<p>The &ldquo;OuroborosDB Overhead Calculator&rdquo; is a little tool which helps you to calculate the overhead of erasure coding systems while also considering the overhead of indexes and the blocks themselves. It is kinda fun to play around with so give it a try!</p>
<p><a href="https://i5heu.github.io/ouroboros-db-overhead-calculator/">https://i5heu.github.io/ouroboros-db-overhead-calculator/</a></p>
<video width="100%" controls>
  <source src="https://heidenstedt.org/posts/2024/release-ouroborosdb-data-storage-calculator/demo.webm" type="video/webm">
  Your browser does not support the video tag.
</video>]]></content:encoded></item><item><title>My New Public Service: PathfinderBeacon</title><link>https://heidenstedt.org/posts/2024/my-new-public-service-pathfinderbeacon/</link><pubDate>Fri, 23 Aug 2024 16:00:00 +0200</pubDate><guid>https://heidenstedt.org/posts/2024/my-new-public-service-pathfinderbeacon/</guid><description><![CDATA[<p>
      <em>Best viewed on the <a href="https://heidenstedt.org/posts/2024/my-new-public-service-pathfinderbeacon/">original page</a>, where extended functionality like the
    footnote helper is available.</em>
    </p><p>In the midst of working on my project, <a href="https://github.com/i5heu/ouroboros-db">ouroboros-db</a>, I realized I needed a straightforward way to locate other nodes using the same RSA key. That&rsquo;s when <a href="https://github.com/i5heu/PathfinderBeacon">PathfinderBeacon</a> came into being and that i release to the public with these words.</p>
<h2 id="what-is-pathfinderbeacon"><a href="https://heidenstedt.org/posts/2024/my-new-public-service-pathfinderbeacon/#what-is-pathfinderbeacon">What is PathfinderBeacon?</a></h2><p><a href="https://github.com/i5heu/PathfinderBeacon">PathfinderBeacon</a> is a tool designed to make it easier to bootstrap your distributed systems using just a RSA key and one of the most robust dictionaries available: DNS. Since DNS inherently caches information at various levels, it allows PathfinderBeacon to deliver node addresses quickly and with minimal bandwidth usage. This means if multiple searches are conducted within the same network for the same room, there&rsquo;s a high chance the requests won&rsquo;t even leave your local network, thanks to the caching capabilities of your router&rsquo;s local DNS.</p>
<p>You can think of it like a DDNS (Dynamic Domain Name System) service, but you only need an RSA key to write to a subdomain. The subdomain is generated from the RSA key, and there is little surface for abuse since you can only publish highly sanitized TXT records.</p>
<h2 id="how-it-works"><a href="https://heidenstedt.org/posts/2024/my-new-public-service-pathfinderbeacon/#how-it-works">How It Works</a></h2><p>Setting up is pretty simple. You either provide an RSA key or let PathfinderBeacon generate one for you. Once set, you can publish your room and node addresses, and anyone with the same RSA key can write to the same room, while anyone can read from it. This makes it easy to bootstrap your distributed systems without the need of running your own bootstrap service.</p>
<p>Currently, there is an official Golang library for interacting with PathfinderBeacon, which you can find <a href="https://github.com/i5heu/PathfinderBeacon-Client-Go">here</a>. If you&rsquo;re interested in developing libraries for other programming languages, feel free to reach out, and I&rsquo;d be glad to assist and subsequently feature your work on the project repository.</p>
<h2 id="future-directions"><a href="https://heidenstedt.org/posts/2024/my-new-public-service-pathfinderbeacon/#future-directions">Future Directions</a></h2><p>For me this project is pretty much finished since it solves the underlying problem quite effectively, but i am fascinated by this problem and i would love to develop PathfinderBeacon further, maybe even in a distributed thingy without a central server, private rooms and much more is thinkable. You can checkout the <a href="https://github.com/i5heu/PathfinderBeacon?tab=readme-ov-file#potential-future-features-and-ideas">README</a> for more ideas.</p>
<p>So, that’s PathfinderBeacon in a nutshell—a simple, secure way to manage node addresses within distributed systems. It&rsquo;s a small project with big potential, and I&rsquo;m excited to see how it can support and simplify the management of distributed networks.</p>
<p>Thanks for reading, and I’m looking forward to constructive feedback or contributions!</p>
<p>You can find PathfinderBeacon on <a href="https://github.com/i5heu/PathfinderBeacon">GitHub</a></p>
]]></description><content:encoded><![CDATA[<p>
      <em>Best viewed on the <a href="https://heidenstedt.org/posts/2024/my-new-public-service-pathfinderbeacon/">original page</a>, where extended functionality like the
    footnote helper is available.</em>
    </p><p>In the midst of working on my project, <a href="https://github.com/i5heu/ouroboros-db">ouroboros-db</a>, I realized I needed a straightforward way to locate other nodes using the same RSA key. That&rsquo;s when <a href="https://github.com/i5heu/PathfinderBeacon">PathfinderBeacon</a> came into being and that i release to the public with these words.</p>
<h2 id="what-is-pathfinderbeacon"><a href="https://heidenstedt.org/posts/2024/my-new-public-service-pathfinderbeacon/#what-is-pathfinderbeacon">What is PathfinderBeacon?</a></h2><p><a href="https://github.com/i5heu/PathfinderBeacon">PathfinderBeacon</a> is a tool designed to make it easier to bootstrap your distributed systems using just a RSA key and one of the most robust dictionaries available: DNS. Since DNS inherently caches information at various levels, it allows PathfinderBeacon to deliver node addresses quickly and with minimal bandwidth usage. This means if multiple searches are conducted within the same network for the same room, there&rsquo;s a high chance the requests won&rsquo;t even leave your local network, thanks to the caching capabilities of your router&rsquo;s local DNS.</p>
<p>You can think of it like a DDNS (Dynamic Domain Name System) service, but you only need an RSA key to write to a subdomain. The subdomain is generated from the RSA key, and there is little surface for abuse since you can only publish highly sanitized TXT records.</p>
<h2 id="how-it-works"><a href="https://heidenstedt.org/posts/2024/my-new-public-service-pathfinderbeacon/#how-it-works">How It Works</a></h2><p>Setting up is pretty simple. You either provide an RSA key or let PathfinderBeacon generate one for you. Once set, you can publish your room and node addresses, and anyone with the same RSA key can write to the same room, while anyone can read from it. This makes it easy to bootstrap your distributed systems without the need of running your own bootstrap service.</p>
<p>Currently, there is an official Golang library for interacting with PathfinderBeacon, which you can find <a href="https://github.com/i5heu/PathfinderBeacon-Client-Go">here</a>. If you&rsquo;re interested in developing libraries for other programming languages, feel free to reach out, and I&rsquo;d be glad to assist and subsequently feature your work on the project repository.</p>
<h2 id="future-directions"><a href="https://heidenstedt.org/posts/2024/my-new-public-service-pathfinderbeacon/#future-directions">Future Directions</a></h2><p>For me this project is pretty much finished since it solves the underlying problem quite effectively, but i am fascinated by this problem and i would love to develop PathfinderBeacon further, maybe even in a distributed thingy without a central server, private rooms and much more is thinkable. You can checkout the <a href="https://github.com/i5heu/PathfinderBeacon?tab=readme-ov-file#potential-future-features-and-ideas">README</a> for more ideas.</p>
<p>So, that’s PathfinderBeacon in a nutshell—a simple, secure way to manage node addresses within distributed systems. It&rsquo;s a small project with big potential, and I&rsquo;m excited to see how it can support and simplify the management of distributed networks.</p>
<p>Thanks for reading, and I’m looking forward to constructive feedback or contributions!</p>
<p>You can find PathfinderBeacon on <a href="https://github.com/i5heu/PathfinderBeacon">GitHub</a></p>
]]></content:encoded></item><item><title>Blog Infrastructure Update 2</title><link>https://heidenstedt.org/posts/2022/blog-infrastructure-update-2/</link><pubDate>Wed, 03 Aug 2022 21:17:10 +0200</pubDate><guid>https://heidenstedt.org/posts/2022/blog-infrastructure-update-2/</guid><description><![CDATA[<p>
      <em>Best viewed on the <a href="https://heidenstedt.org/posts/2022/blog-infrastructure-update-2/">original page</a>, where extended functionality like the
    footnote helper is available.</em>
    </p><p>Sadly i did&rsquo;t saved measurements form before the migration to the new Infrastructure. I will do better next time ;)</p>
<p>My blog has experienced a major infrastructure update.<br>
Previously this blog was served by a tiny but highly optimized server at a Hetzner datacenter.<br>
Since this blog is static it was for example possible to pre-compress the files, which shaved a massive 1-0.5ms from a cold TTBF.</p>
<p>Sadly this approach was a bit flawed because outside of germany the cold TTBF times weren&rsquo;t exactly good.<br>
Surprisingly CloudFlare did nothing to these times, since the cache of CloudFlare is short lived and not prefetched.</p>
<p>My solution to this problem, to make a global low cold TTBF possible, was BunnyCDN which provides a Service that can store and server static file, these files are replicated Globally to user-selectable locations.<br>
At my case (i use all locations), the price per GB per month is 0.28$ which is very good if you consider that all content is replicated and served from SSDs in 14 locations.</p>
<p><div class="imageLoadingWrap"><img
          alt="A graph showing 14 locations of the SSDs"
          title="A graph showing 14 locations of the SSDs"
          loading="lazy"
          src="https://heidenstedt.org/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_d7e629ebf8216616.webp"
          width="1050"
          height="640"
          srcset='/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_9a021a600996c8a5.avif 100w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_e633eb4d54a03176.webp 100w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_1d478d53e9e747e9.avif 200w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_1aa6c06c37144445.webp 200w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_348e50f8ed2b8ddf.avif 300w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_320908db5073cf83.webp 300w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_8edf4168c7885001.avif 400w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_eb595935cf71ec9f.webp 400w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_a810e83baef1a3f0.avif 500w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_847f54e6d80be463.webp 500w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_dffa053f07b01eb7.avif 600w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_317f8b09d06a6f69.webp 600w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_50a1c96a3b3b6675.avif 700w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_8e734f63892166d7.webp 700w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_bb8e0c42bbdc144c.avif 800w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_ff6dbb064149642.webp 800w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_9ebe052b1c1b1dbd.avif 900w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_91dc0922c04f6415.webp 900w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_64da2fbe5dc1ef77.avif 1000w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_aedca361feff1d47.webp 1000w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_48657180e40f5837.avif 1050w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_33f97b7cd30896aa.webp 1050w
          '
          sizes="(max-width: 672px) calc(85vw - 32px), (max-width: 736px) 640px, 657px"
        ><div class="imageLoading"></div>
</div></p>
<p>Here you can see where these locations are, green is the &ldquo;main storage zone&rdquo;, which is not configurable.</p>
<p>The switch to BunnyCDN gave me a immense performance boost around the world, and surprisingly also in germany.<br>
BunnyCDN dose not allow for rsync or something usable to transfer the Files to them.</p>
<p>I use <code>lftp</code> to transfer the files via FTP, which takes about 9 min each time. This is tbh shitty, and i don&rsquo;t like it a bit.</p>
<h2 id="dns-and-peering"><a href="https://heidenstedt.org/posts/2022/blog-infrastructure-update-2/#dns-and-peering">DNS and Peering</a></h2><p>Sadly BunnyCDN dose not allow to use them as a nameServer, also i have to use a c-name to hook up to their CDN.<br>
Cloudflare on the other side acts as a nameservers and returns direct IPv4s and IPv6s on the DNS-query, this will save 1 DNS-Request and is therefore faster, especially since most users using the DNS-Server from their ISP which are often very slow.</p>
<p>So i tried to put CloudFlare in front of BunnyCDN, which had a negative impact on the TTFB, although not a great one.<br>
In same cases it is faster to get a uncached page on BunnyCDN through CloudFlare because CloudFlare has a lot and very good peering to ISPs and exchanges.</p>
<p>Sadly CloudFlare TTBF behaves a unpredictable.<br>
It can be that you get in one request 20ms TTFB and the next one takes 300ms.</p>
<p>I think i will run CloudFlare anyway in front of BunnyCDN in hope to better mitigate Attacks and big page visit numbers.<br>
I hope that CloudFlare will cache such surges for me&hellip; they can become expensive.</p>
<h2 id="costs"><a href="https://heidenstedt.org/posts/2022/blog-infrastructure-update-2/#costs">Costs</a></h2><p>This entire setup cost me less then 1$ per Month (without the Domain), which is very very cheap for something this fast.<br>
I think it is amazing how cheap and easy you can distribute your ideas and thoughts today, without relining on a platform that appropriates your content.</p>
<h2 id="conclusion"><a href="https://heidenstedt.org/posts/2022/blog-infrastructure-update-2/#conclusion">Conclusion</a></h2><p>Costs less then 1$ per Month.<br>
Scales amazingly.<br>
Very fast global latency.<br>
I don&rsquo;t have to keep a server updated.</p>
]]></description><content:encoded><![CDATA[<p>
      <em>Best viewed on the <a href="https://heidenstedt.org/posts/2022/blog-infrastructure-update-2/">original page</a>, where extended functionality like the
    footnote helper is available.</em>
    </p><p>Sadly i did&rsquo;t saved measurements form before the migration to the new Infrastructure. I will do better next time ;)</p>
<p>My blog has experienced a major infrastructure update.<br>
Previously this blog was served by a tiny but highly optimized server at a Hetzner datacenter.<br>
Since this blog is static it was for example possible to pre-compress the files, which shaved a massive 1-0.5ms from a cold TTBF.</p>
<p>Sadly this approach was a bit flawed because outside of germany the cold TTBF times weren&rsquo;t exactly good.<br>
Surprisingly CloudFlare did nothing to these times, since the cache of CloudFlare is short lived and not prefetched.</p>
<p>My solution to this problem, to make a global low cold TTBF possible, was BunnyCDN which provides a Service that can store and server static file, these files are replicated Globally to user-selectable locations.<br>
At my case (i use all locations), the price per GB per month is 0.28$ which is very good if you consider that all content is replicated and served from SSDs in 14 locations.</p>
<p><div class="imageLoadingWrap"><img
          alt="A graph showing 14 locations of the SSDs"
          title="A graph showing 14 locations of the SSDs"
          loading="lazy"
          src="https://heidenstedt.org/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_d7e629ebf8216616.webp"
          width="1050"
          height="640"
          srcset='/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_9a021a600996c8a5.avif 100w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_e633eb4d54a03176.webp 100w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_1d478d53e9e747e9.avif 200w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_1aa6c06c37144445.webp 200w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_348e50f8ed2b8ddf.avif 300w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_320908db5073cf83.webp 300w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_8edf4168c7885001.avif 400w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_eb595935cf71ec9f.webp 400w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_a810e83baef1a3f0.avif 500w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_847f54e6d80be463.webp 500w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_dffa053f07b01eb7.avif 600w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_317f8b09d06a6f69.webp 600w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_50a1c96a3b3b6675.avif 700w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_8e734f63892166d7.webp 700w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_bb8e0c42bbdc144c.avif 800w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_ff6dbb064149642.webp 800w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_9ebe052b1c1b1dbd.avif 900w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_91dc0922c04f6415.webp 900w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_64da2fbe5dc1ef77.avif 1000w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_aedca361feff1d47.webp 1000w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_48657180e40f5837.avif 1050w,/posts/2022/blog-infrastructure-update-2/bunny_cdn_storage_regions_hu_33f97b7cd30896aa.webp 1050w
          '
          sizes="(max-width: 672px) calc(85vw - 32px), (max-width: 736px) 640px, 657px"
        ><div class="imageLoading"></div>
</div></p>
<p>Here you can see where these locations are, green is the &ldquo;main storage zone&rdquo;, which is not configurable.</p>
<p>The switch to BunnyCDN gave me a immense performance boost around the world, and surprisingly also in germany.<br>
BunnyCDN dose not allow for rsync or something usable to transfer the Files to them.</p>
<p>I use <code>lftp</code> to transfer the files via FTP, which takes about 9 min each time. This is tbh shitty, and i don&rsquo;t like it a bit.</p>
<h2 id="dns-and-peering"><a href="https://heidenstedt.org/posts/2022/blog-infrastructure-update-2/#dns-and-peering">DNS and Peering</a></h2><p>Sadly BunnyCDN dose not allow to use them as a nameServer, also i have to use a c-name to hook up to their CDN.<br>
Cloudflare on the other side acts as a nameservers and returns direct IPv4s and IPv6s on the DNS-query, this will save 1 DNS-Request and is therefore faster, especially since most users using the DNS-Server from their ISP which are often very slow.</p>
<p>So i tried to put CloudFlare in front of BunnyCDN, which had a negative impact on the TTFB, although not a great one.<br>
In same cases it is faster to get a uncached page on BunnyCDN through CloudFlare because CloudFlare has a lot and very good peering to ISPs and exchanges.</p>
<p>Sadly CloudFlare TTBF behaves a unpredictable.<br>
It can be that you get in one request 20ms TTFB and the next one takes 300ms.</p>
<p>I think i will run CloudFlare anyway in front of BunnyCDN in hope to better mitigate Attacks and big page visit numbers.<br>
I hope that CloudFlare will cache such surges for me&hellip; they can become expensive.</p>
<h2 id="costs"><a href="https://heidenstedt.org/posts/2022/blog-infrastructure-update-2/#costs">Costs</a></h2><p>This entire setup cost me less then 1$ per Month (without the Domain), which is very very cheap for something this fast.<br>
I think it is amazing how cheap and easy you can distribute your ideas and thoughts today, without relining on a platform that appropriates your content.</p>
<h2 id="conclusion"><a href="https://heidenstedt.org/posts/2022/blog-infrastructure-update-2/#conclusion">Conclusion</a></h2><p>Costs less then 1$ per Month.<br>
Scales amazingly.<br>
Very fast global latency.<br>
I don&rsquo;t have to keep a server updated.</p>
]]></content:encoded></item></channel></rss>