{"id":52441,"date":"2016-03-18T10:49:03","date_gmt":"2016-03-18T17:49:03","guid":{"rendered":"https:\/\/www.backblaze.com\/blog\/?p=52441"},"modified":"2025-12-12T13:11:35","modified_gmt":"2025-12-12T21:11:35","slug":"load-balancing-and-b2-cloud-storage","status":"publish","type":"post","link":"https:\/\/www.backblaze.com\/blog\/load-balancing-and-b2-cloud-storage\/","title":{"rendered":"Load Balancing and Backblaze B2 Cloud Storage"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-52611\" src=\"https:\/\/www.backblaze.com\/blog\/wp-content\/uploads\/2016\/03\/blog-load-balance.jpg\" alt=\"Load Balancer\" width=\"720\" height=\"405\" srcset=\"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2016\/03\/blog-load-balance.jpg 720w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2016\/03\/blog-load-balance-300x169.jpg 300w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2016\/03\/blog-load-balance-560x315.jpg 560w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2016\/03\/blog-load-balance-220x124.jpg 220w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/p>\n<p id=\"bzdropcap\">A few months ago we announced Backblaze<a href=\"https:\/\/www.backblaze.com\/b2\/sign-up.html\"> B2 Cloud Storage,<\/a> our cloud storage product. Cloud storage presents different challenges versus cloud backup in the server environment. Load balancing is one such issue. Let&#8217;s take a look at the challenges that have come up, and our solutions.<\/p>\n<p>A load balancer is a server or specialized device that distributes load among the servers that actually do work and reply to requests. In addition to allowing the work to be distributed among several servers, it also makes sure that requests only get sent to healthy servers that are prepared to handle them.<\/p>\n<p>For <a href=\"https:\/\/www.backblaze.com\/cloud-backup\/personal\" target=\"_blank\" rel=\"noopener noreferrer\">Backblaze Personal Backup<\/a> and Backblaze <a href=\"https:\/\/www.backblaze.com\/business-computer-backup.html\">Business Backup<\/a> products, we\u2019ve had it easy in terms of load balancing: We wrote the client, so we can just make it smart enough to ask us which server to talk to. No separate load balancer needed. The Backblaze products are also very tolerant of short outages, since the client will just upload the files slightly later.<\/p>\n<p>For Backblaze B2, though, the clients are web browsers or programming language libraries like libcurl. They just make a single request for a file and expect an answer immediately. This means we need a load balancer both to distribute the load and allow us to take individual servers offline to update them.<\/p>\n<h2>Option 1: Layer 7, Full Proxy<\/h2>\n<p>The simplest and most flexible way to do load balancing is to have a pair of hosts, one active and one standby, that accept HTTPS connections from the client and create new connections to the server, then proxy the traffic back and forth between the two. This is usually referred to as \u201clayer 7, full proxy\u201d load balancing.<\/p>\n<p>This doesn\u2019t generally require any special setup on the server, other than perhaps making sure it understands the x-forwarded-for header so it knows the actual client\u2019s IP address. It does have one big downside, though: The load balancer has to have enough bandwidth to handle every request and response in both directions, and enough CPU to handle TCP and SSL in both directions. Modern processors with AES-NI\u2014onboard AES encryption and decryption\u2014help a lot with this, but it can still quickly become a performance bottleneck when you\u2019re talking about transferring large files at 1 Gb\/s or higher.<\/p>\n<h2>Option 2: Layer 4, Full Proxy<\/h2>\n<p>Another option, if you want to reduce the burden on the load balancers, is layer 4 load balancing. The load balancers accept TCP connections from the client and create a new TCP session to the server, but they proxy through the HTTPS traffic inside the TCP session without decrypting or re-encrypting it. This still requires that the load balancer have enough bandwidth to handle all your traffic, but a lot less CPU compared to layer 7. Unfortunately, it also means that your servers don\u2019t really have a good way to see the original client\u2019s IP address short of hijacking the TCP options field with a proprietary extension.<\/p>\n<h2>Option 3: DSR<\/h2>\n<p>All of this is adding a lot of work layered on top of a load balancer\u2019s basic purpose: to distribute client requests among multiple healthy back-end servers. To do this, the load balancer only needs to see the request and modify the destination at the outermost layers. No need to parse all the way to layer 7, and no need to even see the response. This is generally called Direct Server Return (DSR).<\/p>\n<p>Especially when serving large files with SSL, DSR requires minimal amounts of bandwidth and CPU power on the load balancer. Because the source IP address is unchanged, the server can see the original client\u2019s IP without even needing an x-forwarded-for header. This does have a few tradeoffs, though: It requires a fairly complex setup not only on the load balancers, but also on the individual servers. In full-proxy modes the load balancer can intercept bad responses and retry the request on a different back-end server or display a friendlier error message to the client, but since the response bypasses the load balancer in DSR mode this isn\u2019t possible. This also makes health-checking tricky because there\u2019s no path for responses from the back-end host to the load balancer.<\/p>\n<p>After some testing, we ended up settling on DSR. Although it\u2019s a lot more complicated to set up and maintain, it allows us to handle large amounts of traffic with minimal hardware. It also makes it easy to fulfill our goal of keeping user traffic encrypted even within our data center.<\/p>\n<h3>How Does It Work?<\/h3>\n<p>DSR load balancing requires two things:<\/p>\n<ol>\n<li>A load balancer with the VIP address attached to an external NIC and ARPing, so that the rest of the network knows it \u201cowns\u201d the IP.<\/li>\n<li>Two or more servers on the same layer 2 network that also have the VIP address attached to a NIC, either internal or external, but are <strong>not<\/strong> replying to ARP requests about that address. This means that no other servers on the network know that the VIP exists anywhere but on the load balancer.<\/li>\n<\/ol>\n<p>A request packet will enter the network, and be routed to the load balancer. Once it arrives there, the load balancer leaves the source and destination IP addresses intact and instead modifies the destination MAC address to that of a server, then puts the packet back on the network. The network switch only understands MAC addresses, so it forwards the packet on to the correct server.<br \/>\n<a href=\"\/blog\/wp-content\/uploads\/2016\/03\/blog-network-diagram.png\" target=\"_blank\" rel=\"attachment wp-att-52711 noopener noreferrer\" data-rel=\"lightbox-gallery-HMDQvO31\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-52711\" src=\"https:\/\/www.backblaze.com\/blog\/wp-content\/uploads\/2016\/03\/blog-network-diagram.png\" alt=\"blog-network-diagram\" width=\"720\" height=\"439\" srcset=\"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2016\/03\/blog-network-diagram.png 720w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2016\/03\/blog-network-diagram-300x183.png 300w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2016\/03\/blog-network-diagram-560x341.png 560w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/a><\/p>\n<p>When the packet arrives at the server\u2019s network interface, it checks to make sure the destination MAC address matches its own. It does, so accepts the packet. It then, separately, checks to see whether the destination IP address is one attached to it somehow. It is, even though the rest of the network doesn\u2019t know it, so it accepts the packet and passes it on to the application. The application then sends a response with the VIP as the source IP address and the client as the destination IP, so it\u2019s routed directly to the client without passing back through the load balancer.<\/p>\n<h3>How Do I Set It Up?<\/h3>\n<p>DSR setup is very specific to each individual network setup, but we\u2019ll try to provide enough information that this can be adapted to most cases. The simplest way is probably to just pay a vendor like F5, A10, or Kemp to handle it. You\u2019ll still need the complex setup on the individual hosts, though, and the commercial options tend to be pretty pricey. We also tend to prefer open-source over black-box solutions, since they\u2019re more flexible and debuggable.<\/p>\n<p>HAProxy and likely other applications can do DSR, but we ended up using <a href=\"http:\/\/www.linuxvirtualserver.org\/software\/ipvs.html\" target=\"_blank\" rel=\"noopener noreferrer\">IPVS<\/a> (formerly known as LVS). The core packet routing of IPVS is actually part of the Linux kernel, and then various user-space utilities are used for health checks and other management. For user-space management, there\u2019s a number of other good options like <a href=\"http:\/\/www.keepalived.org\" target=\"_blank\" rel=\"noopener noreferrer\">Keepalived<\/a>, Ldirectord, Piranha, and Google\u2019s recently-released Seesaw. We ended up choosing Keepalived because we also wanted VRRP support for failing over between load balancers, and because it\u2019s both simple and stable\/mature.<\/p>\n<h4>Setting Up IPVS and Keepalived<\/h4>\n<p>Good news! If your kernel is 2.6.10 or newer (and it almost certainly is), IPVS is already included. If <code>\/proc\/net\/ip_vs exists<\/code>, it\u2019s already loaded. If not, <code>modprobe ip_vs<\/code> will load the module. Most distributions will probably compile it as a kernel module, but your results with VPS providers may vary. At this point, you\u2019ll probably also want to install the ipvsadm utility so you can manually inspect and modify the IPVS config.<\/p>\n<p>The Keepalived load-balancing config is fairly straightforward: a virtual_server section with a real_server section inside of it for each back-end server. Most of the rest depends on your specific needs, but you\u2019ll want to set lb_kind to \u201cDR.\u201d You can use SSL_GET as a simple health checker, but we use \u201cMISC_CHECK\u201d with a custom script, which lets us stop sending new traffic to a server that\u2019s shutting down by setting its weight to 0.<\/p>\n<p>The host config is where things get a bit more complicated. The important part is that the VIP address is assigned to an interface, but the server isn\u2019t sending ARP replies about it. There\u2019s a few ways to do this that work about equally well, but we use arptables rules defined in <code>\/etc\/network\/interfaces<\/code>:<\/p>\n<p><code>pre-up \/sbin\/arptables -I INPUT -j DROP -d &lt;VIPADDRESS&gt;<br \/>\npre-up \/sbin\/arptables -I OUTPUT -j mangle -s &lt;VIPADDRESS&gt; \u2010\u2010mangle-ip-s &lt;SERVERIPADDRESS&gt;<br \/>\npre-down \/sbin\/arptables -D INPUT -j DROP -d &lt;VIPADDRESS&gt;<br \/>\npre-down \/sbin\/arptables -D OUTPUT -j mangle -s &lt;VIPADDRESS&gt; \u2010\u2010mangle-ip-s &lt;SERVERIPADDRESS&gt;<\/code><\/p>\n<p>Once the arptables rules are in place, you\u2019ll want to add the actual address to the interface:<\/p>\n<p><code>post-up \/sbin\/ip addr add &lt;VIPADDRESS&gt;\/32 dev $LOGICAL<br \/>\npre-down \/sbin\/ip addr del &lt;VIPADDRRESS&gt;\/32 dev $LOGICAL<\/code><\/p>\n<p>If your backend server doesn\u2019t have an actual external IP and normally talks to the outside via NAT, you will need to create a source-based route, also in the interfaces config:<\/p>\n<p><code>post-up \/sbin\/ip rule add from &lt;VIPADDRESS&gt; lookup 200<br \/>\npre-down \/sbin\/ip rule del from &lt;VIPADDRESS&gt; lookup 200<br \/>\npost-up \/sbin\/ip route add default via &lt;VIPADDRESS&gt; dev $LOGICAL table 200<br \/>\npre-down \/sbin\/ip route del default via &lt;VIPADDRESS&gt; dev $LOGICAL table 200<\/code><\/p>\n<p>Finally, make sure your web server (or other daemon) is listening on specifically, or on all addresses (0.0.0.0 or :::).<\/p>\n<h3>It\u2019s Not Working!<\/h3>\n<ul>\n<li>First, make sure the load balancer and server are on the same layer-2 network. If they\u2019re on different subnets, none of this will work.<\/li>\n<li>Check the value of <code>\/proc\/sys\/net\/ipv4\/conf\/*\/rp_filter<\/code> and make sure it\u2019s not set to 1 anywhere.<\/li>\n<li>Run <code>tcpdump -e -n host <\/code> on the load balancer and make sure that the requests are reaching the load balancer with a destination IP of and a destination MAC address belonging to the load balancer, then leaving again with the same source and destination IP but the MAC address of the back-end server.<\/li>\n<li>Run <code>ipvsadm<\/code> on the load balancer and make sure IPVS is configured<\/li>\n<li>Run <code>tcpdump -e -n host <\/code> on the server and make sure that requests are arriving with a destination IP of , and leaving again with a source of and a destination of<\/li>\n<li>On the server, run <code>ip route get from<\/code> to make sure the host has a non-NATTED return route to the outside.<\/li>\n<li>On the server, run <code>ip neigh show <\/code>, where is the &#8220;via\u201d IP from the previous \u201cip route get\u201d command, to make sure the host knows how to reach the gateway.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Backblaze&#8217;s firsthand account on the difference between load balancing in cloud backup and cloud storage server environments.<\/p>\n","protected":false},"author":101,"featured_media":52611,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","footnotes":"","jetpack_post_was_ever_published":false},"categories":[7],"tags":[291,468,373],"class_list":["post-52441","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cloud-storage","tag-b2","tag-b2cloud","tag-developer","entry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How to Use a VIP for Your Load Balancer with Backblaze B2<\/title>\n<meta name=\"description\" content=\"Backblaze&#039;s firsthand account on the difference between load balancing in cloud backup and cloud storage server environments.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.backblaze.com\/blog\/load-balancing-and-b2-cloud-storage\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Load Balancing and B2 Cloud Storage\" \/>\n<meta property=\"og:description\" content=\"Backblaze&#039;s firsthand account on the difference between load balancing in cloud backup and cloud storage server environments.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.backblaze.com\/blog\/load-balancing-and-b2-cloud-storage\/\" \/>\n<meta property=\"og:site_name\" content=\"Backblaze Blog | Cloud Storage &amp; Cloud Backup\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/backblaze\" \/>\n<meta property=\"article:published_time\" content=\"2016-03-18T17:49:03+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-12-12T21:11:35+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2016\/03\/blog-network-diagram-3.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Elliott Sims\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@backblaze\" \/>\n<meta name=\"twitter:site\" content=\"@backblaze\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Elliott Sims\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to Use a VIP for Your Load Balancer with Backblaze B2","description":"Backblaze's firsthand account on the difference between load balancing in cloud backup and cloud storage server environments.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.backblaze.com\/blog\/load-balancing-and-b2-cloud-storage\/","og_locale":"en_US","og_type":"article","og_title":"Load Balancing and B2 Cloud Storage","og_description":"Backblaze's firsthand account on the difference between load balancing in cloud backup and cloud storage server environments.","og_url":"https:\/\/www.backblaze.com\/blog\/load-balancing-and-b2-cloud-storage\/","og_site_name":"Backblaze Blog | Cloud Storage &amp; Cloud Backup","article_publisher":"https:\/\/www.facebook.com\/backblaze","article_published_time":"2016-03-18T17:49:03+00:00","article_modified_time":"2025-12-12T21:11:35+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2016\/03\/blog-network-diagram-3.png","type":"image\/png"}],"author":"Elliott Sims","twitter_card":"summary_large_image","twitter_creator":"@backblaze","twitter_site":"@backblaze","twitter_misc":{"Written by":"Elliott Sims","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.backblaze.com\/blog\/load-balancing-and-b2-cloud-storage\/#article","isPartOf":{"@id":"https:\/\/www.backblaze.com\/blog\/load-balancing-and-b2-cloud-storage\/"},"author":{"name":"Elliott Sims","@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#\/schema\/person\/e0dec9b544aa70f19772d02bc7d3eb6c"},"headline":"Load Balancing and Backblaze B2 Cloud Storage","datePublished":"2016-03-18T17:49:03+00:00","dateModified":"2025-12-12T21:11:35+00:00","mainEntityOfPage":{"@id":"https:\/\/www.backblaze.com\/blog\/load-balancing-and-b2-cloud-storage\/"},"wordCount":1640,"commentCount":6,"publisher":{"@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.backblaze.com\/blog\/load-balancing-and-b2-cloud-storage\/#primaryimage"},"thumbnailUrl":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2016\/03\/blog-load-balance.jpg","keywords":["B2","B2Cloud","Developer"],"articleSection":["Cloud Storage"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.backblaze.com\/blog\/load-balancing-and-b2-cloud-storage\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.backblaze.com\/blog\/load-balancing-and-b2-cloud-storage\/","url":"https:\/\/www.backblaze.com\/blog\/load-balancing-and-b2-cloud-storage\/","name":"How to Use a VIP for Your Load Balancer with Backblaze B2","isPartOf":{"@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.backblaze.com\/blog\/load-balancing-and-b2-cloud-storage\/#primaryimage"},"image":{"@id":"https:\/\/www.backblaze.com\/blog\/load-balancing-and-b2-cloud-storage\/#primaryimage"},"thumbnailUrl":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2016\/03\/blog-load-balance.jpg","datePublished":"2016-03-18T17:49:03+00:00","dateModified":"2025-12-12T21:11:35+00:00","description":"Backblaze's firsthand account on the difference between load balancing in cloud backup and cloud storage server environments.","breadcrumb":{"@id":"https:\/\/www.backblaze.com\/blog\/load-balancing-and-b2-cloud-storage\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.backblaze.com\/blog\/load-balancing-and-b2-cloud-storage\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.backblaze.com\/blog\/load-balancing-and-b2-cloud-storage\/#primaryimage","url":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2016\/03\/blog-load-balance.jpg","contentUrl":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2016\/03\/blog-load-balance.jpg","width":720,"height":405},{"@type":"BreadcrumbList","@id":"https:\/\/www.backblaze.com\/blog\/load-balancing-and-b2-cloud-storage\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Load Balancing and Backblaze B2 Cloud Storage"}]},{"@type":"WebSite","@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#website","url":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/","name":"Backblaze Cloud Solutions Blog","description":"Cloud Storage &amp; Cloud Backup","publisher":{"@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#organization","name":"Backblaze","url":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/i0.wp.com\/www.backblaze.com\/blog\/wp-content\/uploads\/2017\/12\/backblaze_icon_transparent.png?fit=512%2C512&ssl=1","contentUrl":"https:\/\/i0.wp.com\/www.backblaze.com\/blog\/wp-content\/uploads\/2017\/12\/backblaze_icon_transparent.png?fit=512%2C512&ssl=1","width":512,"height":512,"caption":"Backblaze"},"image":{"@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/backblaze","https:\/\/x.com\/backblaze","https:\/\/www.youtube.com\/user\/Backblaze","https:\/\/en.wikipedia.org\/wiki\/Backblaze"]},{"@type":"Person","@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#\/schema\/person\/e0dec9b544aa70f19772d02bc7d3eb6c","name":"Elliott Sims","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2019\/04\/elliott_sims-150x150.png","url":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2019\/04\/elliott_sims-150x150.png","contentUrl":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2019\/04\/elliott_sims-150x150.png","caption":"Elliott Sims"},"description":"Elliott is a Senior Sysadmin at Backblaze. Previously, he worked at Facebook from 2009-2015, building and maintaining infrastructure through exponential growth.","sameAs":["http:\/\/www.backblaze.com"],"url":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/author\/elliott\/"}]}},"jetpack_featured_media_url":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2016\/03\/blog-load-balance.jpg","_links":{"self":[{"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/posts\/52441","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/users\/101"}],"replies":[{"embeddable":true,"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/comments?post=52441"}],"version-history":[{"count":0,"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/posts\/52441\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/media\/52611"}],"wp:attachment":[{"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/media?parent=52441"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/categories?post=52441"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/tags?post=52441"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}