{"componentChunkName":"component---src-templates-author-jsx","path":"/blog/author/digitalocean/3/","result":{"data":{"prismic":{"allFeaturedblogs":{"edges":[{"node":{"featured_blogs_enabled":true,"heading":[{"type":"paragraph","text":"Featured posts","spans":[]}],"featured_blog_1":{"__typename":"PRISMIC_Blog","_linkType":"Link.document","blog_header_image":{"dimensions":{"width":790,"height":395},"alt":null,"copyright":null,"url":"https://images.prismic.io/www-static/6d8d81b1-971a-4313-b033-b4e125cb14a0_MondoDB-blog-header-790x395.PNG?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Introducing DigitalOcean Managed MongoDB – a fully managed, database as a service for modern apps","spans":[]}],"blog_post_date":"2021-06-29","blog_post_content":[{"type":"paragraph","text":"MongoDB is one of the most popular databases, and it’s ideal for apps that evolve rapidly and need to handle huge volumes of data and traffic. It offers advantages like flexible document schemas, code-native data access, change-friendly design, and easy horizontal scale-out.","spans":[{"start":22,"end":44,"type":"hyperlink","data":{"link_type":"Web","url":"https://db-engines.com/en/ranking","target":"_blank"}}]},{"type":"paragraph","text":"However, building and maintaining MongoDB clusters from the ground up can be a huge undertaking. Developers often complain that they have to spend their valuable time and resources on database management. Well, we’ve been listening and have some great news: accessing and managing MongoDB on DigitalOcean just got a lot simpler!","spans":[]},{"type":"paragraph","text":"We are excited to announce that DigitalOcean Managed MongoDB is now in General Availability. Managed MongoDB is a fully managed, database as a service (DBaaS) offering from DigitalOcean, built in partnership with and certified by MongoDB Inc. It provides you all the technical capabilities that make MongoDB so beloved in the developer community. Together we have ensured that you will get access to all the latest releases of the MongoDB document database as they become available.","spans":[{"start":32,"end":91,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/products/managed-databases-mongodb/"}},{"start":230,"end":241,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.mongodb.com/","target":"_blank"}}]},{"type":"paragraph","text":"Managed MongoDB simplifies the MongoDB administration. Developers of all skill levels, even those who do not have prior experience in databases, can spin up MongoDB clusters in just a few minutes. We handle the provisioning, managing, scaling, updates, backups, and security of your MongoDB clusters, allowing you to offload the complex, time consuming –yet critical – database administration tasks to us. This empowers you to focus on what really matters: building awesome apps.","spans":[]},{"type":"embed","oembed":{"height":113,"width":200,"embed_url":"https://www.youtube.com/watch?v=NvHQSV7jnKA","type":"video","version":"1.0","title":"Create a MongoDB Database on DigitalOcean","author_name":"DigitalOcean","author_url":"https://www.youtube.com/c/Digitalocean","provider_name":"YouTube","provider_url":"https://www.youtube.com/","cache_age":null,"thumbnail_url":"https://i.ytimg.com/vi/NvHQSV7jnKA/hqdefault.jpg","thumbnail_width":480,"thumbnail_height":360,"html":"<iframe width=\"200\" height=\"113\" src=\"https://www.youtube.com/embed/NvHQSV7jnKA?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>"}},{"type":"heading2","text":"Benefits of Managed MongoDB","spans":[]},{"type":"paragraph","text":"","spans":[]},{"type":"list-item","text":"Easy set up and maintenance: We create the database clusters for you. Simply choose the cluster configuration (e.g., memory, disk size, number of nodes, etc.), and the data center in which you want to host the database. Follow a few simple steps and your database cluster will be up and running in a matter of minutes. You can spin up clusters using the cloud control panel, CLI, or API.\n\n","spans":[{"start":0,"end":28,"type":"strong"}]},{"type":"list-item","text":"Automatic daily backups with point in time recovery: Data is one of the most important assets of an app, so it’s critical to backup your database. We take backups of your entire clusters automatically on a daily basis, for free. We also provide a point in time recovery for 7 days, that way if things go wrong due to human error, machine error, or some combination of both, you can easily restore the database as it was at any point in the previous 7 days. \n\n","spans":[{"start":0,"end":52,"type":"strong"}]},{"type":"list-item","text":"Automatic updates and access to latest MongoDB releases: You get access to MongoDB 4.4. This is the latest release of MongoDB and comes packed with numerous enhancements like hedged reads, rust, and swift drivers. Since we have developed Managed MongoDB in partnership with MongoDB Inc, you will always get access to new releases as they become available. With Managed MongoDB, the updates happen automatically. Just select a date and time for the updates and we take care of the rest. This makes it easy to stay up to date with MongoDB releases without disrupting your business.\n\n","spans":[{"start":0,"end":56,"type":"strong"},{"start":148,"end":169,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.mongodb.com/new","target":"_blank"}}]},{"type":"list-item","text":"High availability with automated failover: If your database goes down, it can take down the entire app, leading to bad customer experiences. With Managed MongoDB, you can easily minimize the downtime for your database and make it highly available with standby nodes. Standby nodes add redundancy, so if for example the primary node fails, the standby node is immediately promoted to primary and begins serving requests while we provision a replacement standby node in the background.\n\n","spans":[{"start":0,"end":42,"type":"strong"}]},{"type":"list-item","text":"Scale up easily to handle traffic spikes: As your app gains traction and the usage grows, it’s important to have a database that can keep up with the increased demand. With Managed MongoDB, you can easily scale up the size of database nodes when needed.\n\n","spans":[{"start":0,"end":41,"type":"strong"}]},{"type":"list-item","text":"Secure by default: Since data is critical, it also needs to be secure. We encrypt data at rest with LUKS and in transit with SSL. When you create a new cluster, it’s placed in a VPC network by default that provides a more secure connection between resources. You can also restrict access to your nodes to prevent brute-force password and denial-of-service attacks.","spans":[{"start":0,"end":18,"type":"strong"},{"start":178,"end":189,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/docs/networking/vpc/"}}]},{"type":"heading2","text":"The need for Managed Databases","spans":[]},{"type":"paragraph","text":"DigitalOcean’s mission is to simplify cloud computing so developers, startups, and SMBs can spend more time building software that changes the world. While databases are a critical component to any application, building, maintaining, and scaling them can be complex and time consuming. For developers that are building apps for their business, database administration is often not a core focus area. But it’s quite common to find developers that write the code and then also roll up their sleeves to maintain databases. Such users would rather offload the tedious database administration and focus their limited time and energy on building and enhancing their apps. ","spans":[]},{"type":"paragraph","text":"With this in mind, we introduced Managed Databases a couple of years ago and are excited to add Managed MongoDB to our portfolio. With this release, DigitalOcean Managed Databases now supports the following engines:","spans":[{"start":33,"end":50,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/products/managed-databases/"}}]},{"type":"image","url":"https://images.prismic.io/www-static/87745cc1-1c5f-4463-b104-104b7fc30dc7_managed-databases-logos.png?auto=compress,format","alt":null,"copyright":null,"dimensions":{"width":849,"height":104}},{"type":"paragraph","text":"Managed MongoDB launch comes on the heels of DigitalOcean App Platform, a modern, reimagined PaaS (Platform as a Service) that we released a few months ago. App Platform makes it very easy to build, deploy, and scale apps and static sites. You can deploy code by simply pointing to your GitHub and GitLab repos, and App Platform will do all the heavy lifting of managing infrastructure, app runtimes, and dependencies. App Platform, along with Managed Databases, helps fulfill DigitalOcean’s mission by empowering developers, startups, and SMBs to focus more on their apps, and less on the underlying infrastructure and databases.","spans":[{"start":45,"end":70,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/products/app-platform/"}}]},{"type":"heading2","text":"How Managed MongoDB works","spans":[]},{"type":"paragraph","text":"DigitalOcean provides you with various compute options to build your apps like:","spans":[]},{"type":"list-item","text":"Droplets: On-demand, Linux virtual machines suitable for production business applications and personal passion projects.","spans":[{"start":0,"end":8,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/products/droplets/"}}]},{"type":"list-item","text":"DigitalOcean Kubernetes: Managed Kubernetes with automatic scaling, upgrades, and a free control plane.","spans":[{"start":0,"end":23,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/products/kubernetes/"}}]},{"type":"list-item","text":"DigitalOcean App Platform: A fully managed Platform as a Service.","spans":[{"start":0,"end":25,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/products/app-platform/"}}]},{"type":"paragraph","text":"No matter which compute option you choose to build your apps, you can easily add Managed MongoDB to it. In addition to this, Managed MongoDB also integrates with the Node.js 1-Click App from DigitalOcean Marketplace making it a lot easier to build Node.js apps.","spans":[{"start":166,"end":215,"type":"hyperlink","data":{"link_type":"Web","url":"https://marketplace.digitalocean.com/apps/nodejs"}}]},{"type":"heading2","text":"Simple, predictable pricing","spans":[]},{"type":"paragraph","text":"Just like all DigitalOcean products, Managed MongoDB provides simple, predictable pricing that allows you to control costs and prevent any surprise bills. You can spin up a database cluster for just $15/month, or a highly available three-node replica set for $45/month. Click here for more information.","spans":[{"start":270,"end":301,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/pricing/#managed-databases"}}]},{"type":"heading2","text":"Regional availability","spans":[]},{"type":"paragraph","text":"Managed MongoDB is currently available in the following regions:","spans":[]},{"type":"list-item","text":"NYC3 (New York, USA)","spans":[]},{"type":"list-item","text":"FRA1 (Frankfurt, Germany)","spans":[]},{"type":"list-item","text":"AMS3 (Amsterdam, Netherlands)","spans":[]},{"type":"paragraph","text":"We will be making Managed Mongo available in other regions soon. Please check out the release notes for most up to date information on regional availability.","spans":[{"start":86,"end":99,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/docs/release-notes/"}}]},{"type":"heading2","text":"Join us at deploy, DigitalOcean’s virtual user conference","spans":[]},{"type":"paragraph","text":"Today we have deploy, DigitalOcean’s signature user conference, which focuses on celebrating, educating, and connecting awesome builders from all over the world.","spans":[{"start":14,"end":20,"type":"hyperlink","data":{"link_type":"Web","url":"https://deploy.digitalocean.com/home"}}]},{"type":"paragraph","text":"Check out the keynote session from DigitalOcean's CEO, Yancey Spruill, in which he talks about where we're headed as a company and shares some exciting product updates. His keynote will be followed by sessions from community members, engineers, customers, and other experts that are building technologies and businesses powered by the cloud. With live Q&A and an active Discord server, there’s ample opportunity to engage and learn something new. Click here to attend the deploy conference.","spans":[{"start":14,"end":69,"type":"hyperlink","data":{"link_type":"Web","url":"https://deploy.digitalocean.com/agenda/session/552806"}},{"start":347,"end":384,"type":"hyperlink","data":{"link_type":"Web","url":"http://do.co/deploy-discord"}},{"start":461,"end":489,"type":"hyperlink","data":{"link_type":"Web","url":"http://do.co/deploy"}}]},{"type":"paragraph","text":"We are also launching a hackathon for DigitalOcean Managed MongoDB. Learn how you can participate, submit an app and get a t-shirt.","spans":[{"start":24,"end":66,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/mongodb-hackathon"}}]},{"type":"paragraph","text":"We hope you will give Managed MongoDB a try. Here are some sample datasets and sample apps that you can use to kick the tires. Check out the docs and let us know what you think!","spans":[{"start":22,"end":43,"type":"hyperlink","data":{"link_type":"Web","url":"https://cloud.digitalocean.com/databases/new?engine=mongodb"}},{"start":59,"end":90,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/do-community/mongodb-resources","target":"_blank"}},{"start":141,"end":145,"type":"hyperlink","data":{"link_type":"Web","url":"https://docs.digitalocean.com/products/databases/mongodb/"}}]},{"type":"paragraph","text":"If you’d like to have a conversation about using DigitalOcean and Managed MongoDB in your business, please feel free to contact our sales team.","spans":[{"start":120,"end":142,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/company/contact/sales/"}}]},{"type":"paragraph","text":"Happy coding!","spans":[]},{"type":"paragraph","text":"André Bearfield","spans":[]},{"type":"paragraph","text":"Director of Product Management","spans":[]}],"tags":[{"tag1":{"__typename":"PRISMIC_Tag","tag":"Product Updates","_linkType":"Link.document","_meta":{"uid":"product-updates"}}}],"author":{"__typename":"PRISMIC_Author","author_name":"André Bearfield","author_image":{"dimensions":{"width":553,"height":547},"alt":"André Bearfield","copyright":null,"url":"https://images.prismic.io/www-static/fdc7c85186f0a850b04083e1d4306bd1c19772e8_andre-bearfield.png?auto=compress,format"},"_meta":{"uid":"andre-bearfield"}},"_meta":{"uid":"introducing-digitalocean-managed-mongodb"}},"featured_blog_2":{"__typename":"PRISMIC_Blog","_linkType":"Link.document","blog_header_image":{"dimensions":{"width":790,"height":400},"alt":"Droplet Console","copyright":null,"url":"https://images.prismic.io/www-static/710499ae-78cc-4179-afc1-15793637b200_DODX3727-790x400-logo-2.jpg?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Securely connect to Droplets with SSH key pairs using a new Droplet Console","spans":[]}],"blog_post_date":"2021-08-10","blog_post_content":[{"type":"paragraph","text":"The famous author Ken Blanchard once said, “Feedback is the breakfast of champions.\" This is something we truly believe at DigitalOcean, and we always strive to enhance our products based on customer feedback.","spans":[]},{"type":"paragraph","text":"With this goal in mind, we are excited to introduce a new Droplet Console that will make it much easier to connect to your Droplets securely. The new Droplet Console provides one-click SSH access to your Droplets through a native-like SSH/Terminal experience. It also eliminates the need for a password or manual configuration of SSH keys. Starting today, we’re pleased to announce that the new Droplet Console is now available to all Droplet users.","spans":[]},{"type":"heading2","text":"Why you should be using Secure Shell (SSH) ","spans":[]},{"type":"paragraph","text":"Password-based security is notoriously insecure due to password fatigue and the overuse of passwords such as ‘123456’. Secure Shell or SSH is a network communication protocol that solves this by using passwordless solutions for encryption, enabling two computers to communicate and securely share data. At a high level, SSH works by creating cryptographic key pairs consisting of a public and private key, which are computer generated and stored separately to ensure their security. ","spans":[{"start":80,"end":117,"type":"hyperlink","data":{"link_type":"Web","url":"https://cybernews.com/best-password-managers/most-common-passwords/"}}]},{"type":"paragraph","text":"SSH has become the default encryption protocol for many industries, but it was difficult to use SSH keys with DigitalOcean’s current Recovery (VNC) console, which is why we developed our new Droplet Console. The new Droplet Console is backed by an agent that security supervises the key pair, while also providing one-click SSH access to our users. You can see the full list of features below.","spans":[]},{"type":"heading2","text":"The new Droplet Console: More time saving, less time wasting ","spans":[]},{"type":"paragraph","text":"The new Droplet Console is for everyone who is looking to build fast, secure apps and avoid hassles with SSH access & usability issues.","spans":[]},{"type":"paragraph","text":"In addition to easier SSH access, the new Droplet Console comes with:","spans":[]},{"type":"list-item","text":"Copy/paste text: Instead of typing lengthy key pairs and text manually, you can use copy/paste to save time. ","spans":[{"start":0,"end":17,"type":"strong"}]},{"type":"list-item","text":"Multi-color support: Multi-color support makes the console more useful and intuitive, and breaks the conventional standard appearance which is black text on a white background. ","spans":[{"start":0,"end":41,"type":"strong"}]},{"type":"list-item","text":"Multi-language support: DigitalOcean’s new Droplet Console supports multiple languages, meaning you can now type and view any content in any language that is supported by UTF-8","spans":[{"start":0,"end":24,"type":"strong"}]},{"type":"list-item","text":"OS/images supported: Linux distributions (Ubuntu(16.04 - 20.04), Fedora (32 & 33), Debian (9), CentOS (7.6 & 8.3), CentOS 8 Stream, Rocky Linux and Marketplace images.","spans":[{"start":0,"end":20,"type":"strong"},{"start":148,"end":159,"type":"hyperlink","data":{"link_type":"Web","url":"https://marketplace.digitalocean.com/"}}]},{"type":"paragraph","text":"The new Droplet Console is available by default on any new Droplets you spin up. You can also enable it manually on older Droplets. Click here to learn more!","spans":[{"start":132,"end":157,"type":"hyperlink","data":{"link_type":"Web","url":"https://docs.digitalocean.com/products/droplets/how-to/connect-with-console/"}}]},{"type":"paragraph","text":"Check out this short walkthrough video that shows the new Droplet Console in action: ","spans":[]},{"type":"embed","oembed":{"type":"video","embed_url":"https://www.youtube.com/watch?v=Qt7QihVuxiE","title":"Access Your Droplet Terminal Through the Web Console","provider_name":"YouTube","thumbnail_url":"https://i.ytimg.com/vi/Qt7QihVuxiE/hqdefault.jpg","provider_url":"https://www.youtube.com/","author_name":"DigitalOcean","author_url":"https://www.youtube.com/c/Digitalocean","height":113,"width":200,"version":"1.0","thumbnail_height":360,"thumbnail_width":480,"html":"<iframe width=\"200\" height=\"113\" src=\"https://www.youtube.com/embed/Qt7QihVuxiE?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>"}},{"type":"paragraph","text":"We hope you’re excited about the new Droplet Console. You’re welcome to spin some Droplets up right now, and try out the new Droplet Console – why wait?","spans":[{"start":72,"end":103,"type":"hyperlink","data":{"link_type":"Web","url":"https://cloud.digitalocean.com/droplets/new"}}]},{"type":"paragraph","text":"Happy coding!","spans":[]},{"type":"paragraph","text":"Harsh Banwait, Senior Product Manager","spans":[]}],"tags":[{"tag1":{"__typename":"PRISMIC_Tag","tag":"Product Updates","_linkType":"Link.document","_meta":{"uid":"product-updates"}}}],"author":{"__typename":"PRISMIC_Author","author_name":"Harsh Banwait","author_image":{"dimensions":{"width":600,"height":399},"alt":null,"copyright":null,"url":"https://images.prismic.io/www-static/e83ff690-b20c-4d88-a2b6-57e562558cd6_download.png?auto=compress,format"},"_meta":{"uid":"harsh-banwait"}},"_meta":{"uid":"new-droplet-console-ssh-support"}},"featured_blog_3":{"__typename":"PRISMIC_Blog","_linkType":"Link.document","blog_header_image":{"dimensions":{"width":790,"height":400},"alt":null,"copyright":null,"url":"https://images.prismic.io/www-static/588e28d3-d41e-480b-937b-8c3b19201f6e_DODX3568-790x400-Blog.jpg?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"How to scale your SaaS product without breaking the bank","spans":[]}],"blog_post_date":"2021-06-22","blog_post_content":[{"type":"paragraph","text":"These days, if you are in the business of software, chances are you are delivering or plan to deliver your services using a Software-as-a-Service (SaaS) model. A combination of internet-based delivery, subscription-based pricing, and low-friction product experiences have made SaaS solutions valuable tools for their users, and an excellent vehicle for software builders looking to distribute their products.","spans":[]},{"type":"paragraph","text":"These factors have made SaaS solutions ubiquitous; SaaS is the largest segment in the public cloud market, and is used to provide functionality ranging from personal finance apps for consumers, to productivity software for businesses, and even tools and services for software developers themselves to compose their applications and simplify their workflows. It is also not uncommon to find micro-SaaS applications being built for specific industries such as retail, job functions such as accounting or marketing, or tasks such as event management. ","spans":[]},{"type":"paragraph","text":"The best thing about this SaaS wave has been that it has allowed a new generation of software builders to build and monetize applications and participate in the digital economy. Previously, you had to be a big company with lots of resources, name recognition and distribution networks to successfully sell software products. Now, irrespective of whether you are a single person working on a passion project, a small team of developers in a startup, or a small and medium-sized business (SMB), the SaaS model enables you to express your ideas in the form of software and deliver them to customers anywhere in the world.","spans":[]},{"type":"heading2","text":"The unique challenges of building SaaS solutions","spans":[]},{"type":"paragraph","text":"","spans":[]},{"type":"paragraph","text":"Despite the opportunities that come with the widespread adoption of SaaS products, software builders still have to answer key questions in their journey to building successful SaaS products. Understanding what customers to target, features to prioritize, how to price your product, and how to acquire customers are all critical questions to figure out while you are also doing the important job of actually building and operating the product. ","spans":[]},{"type":"paragraph","text":"Writing the code, testing, deployment, monitoring the usage in production, and ensuring that your apps are able to handle the additional demand when customer base and usage grows are all essential and time-consuming tasks.","spans":[]},{"type":"paragraph","text":"Additionally, being able to test multiple ideas, pivot, and double down on the ideas that actually work is critical in early stages of SaaS development. Once growth comes, it is equally important to scale up without compromising on performance or reliability. Needless to say, all of this needs to be economically viable as well, since not everyone has the resources of large SaaS providers like Salesforce or Adobe.","spans":[]},{"type":"heading2","text":"Cloud Computing enables builders but also poses challenges","spans":[]},{"type":"paragraph","text":"","spans":[]},{"type":"paragraph","text":"Fortunately, for the act of building and operating your apps, cloud computing can help take some load off your shoulders. Unless you have the scale and resources of Facebook, chances are you are not going to set up your own data centers to host the computing infrastructure that powers your SaaS company. Public cloud infrastructure providers can bring great value to SaaS builders by providing on-demand computing services with usage-based pricing. However, just like how the legacy software companies weren't built for the SaaS model, the early (and big) cloud computing services were not optimized for the unique needs of small SaaS building teams. ","spans":[]},{"type":"paragraph","text":"Smaller SaaS teams face challenges with large cloud computing providers, including:","spans":[]},{"type":"heading4","text":"Too many technology options","spans":[]},{"type":"paragraph","text":"There are just too many options for tech stacks on which to build your SaaS - programming languages, application development frameworks, libraries, runtime environments, architectural patterns, and deployment models - and the list is growing by the day.","spans":[]},{"type":"heading4","text":"Complexity of cloud computing services","spans":[]},{"type":"paragraph","text":"Even when you have decided on a technology stack, there is a lot of cloud vendor-specific terminology you need to learn and heavy lifting you need to do to build on the cloud, not all of which contributes to making your SaaS applications successful.","spans":[]},{"type":"heading4","text":"Unpredictable costs","spans":[]},{"type":"paragraph","text":"The experimentation necessary in early stages of SaaS development, as well as the scaling of applications required during the growth phase, call for affordable and predictable pricing from your cloud provider. The last thing SaaS teams want is surprising and indecipherable bills from your cloud provider. Unfortunately, smaller businesses often experience unpredictable costs with cloud providers who are busy serving only the large enterprises.","spans":[]},{"type":"heading2","text":"DigitalOcean provides a simple, cost effective solution for SaaS builders","spans":[]},{"type":"paragraph","text":"Fortunately, at DigitalOcean we have a laser focus on small software development teams, who are trying to build the next generation of applications. Today, DigitalOcean customers are already building SaaS applications which serve all kinds of customers.","spans":[{"start":191,"end":217,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/solutions/saas/"}}]},{"type":"paragraph","text":"We believe SaaS builders should focus on building apps that power their business, and not spend their valuable time on managing infrastructure. That is exactly what we have been able to enable through our intuitive products that are built for scale and reliability.","spans":[{"start":205,"end":223,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/products/"}}]},{"type":"list-item","text":"Vidazoo is an advertising technology company specializing in video streaming and serving. It serves video ads to thousands of websites and handles close to 10 billion requests per day. \n\n“We are as much a data company as an adtech company. Our business relies on speedy and accurate data processing at massive scale. DigitalOcean provides us the perfect set of tools to operate our SaaS business profitably, while not making us feel the need to become full time system administrators. We plan to move a lot of our apps to DigitalOcean App Platform and other fully managed products.” - Roman Svichar, CTO of Vidazoo","spans":[{"start":0,"end":7,"type":"hyperlink","data":{"link_type":"Web","url":"https://vidazoo.com/"}},{"start":187,"end":583,"type":"em"}]},{"type":"paragraph","text":"We believe in meeting customers where they are. If they already have an understanding of cloud infrastructure technologies, they should be able to leverage that knowledge and get started with our products without any further ramp up.","spans":[]},{"type":"list-item","text":"Whatfix is an enterprise SaaS provider that offers a digital adoption platform to businesses. The company helps enterprises gain the full value of their investments in enterprise applications by providing real-time, interactive, and contextual guidance to users of those applications. \n\n“What we really love about the DigitalOcean platform is the ease of use. We feel like we know infrastructure and can handle most of the configuration and management. What we needed from a cloud was not bells and whistles but efficiency and reliability. DigitalOcean provides us a platform to build our apps and then gets out of the way. Just how we like it.” - Achyuth Krishna, Director of Engineering of Whatfix","spans":[{"start":0,"end":7,"type":"hyperlink","data":{"link_type":"Web","url":"https://whatfix.com/blog/driving-the-future-now-were-excited-to-announce-our-90-million-series-d-funding/"}},{"start":287,"end":648,"type":"em"}]},{"type":"paragraph","text":"We understand that scaling while maintaining reliability of applications and profitability of business is important, so we provide robust solutions which minimize downtime.","spans":[]},{"type":"list-item","text":"Centra is a SaaS-based e-commerce platform for global direct-to-consumer and wholesale e-commerce brands. Centra provides a powerful e-commerce backend that lets brands build pixel-perfect, custom designed, online flagship stores. \n\n“How do we enable our customers to create differentiated online experiences? How do we ensure their e-commerce apps stay up and running at all times? How do we scale on-demand when traffic grows or new customers come in? These are the questions that we ask ourselves every day. Thankfully, we have a partner in DigitalOcean that provides just the platform to answer those questions enabling us to guarantee 99.9% uptime for our clients.” - Martin Jensen, CEO of Centra","spans":[{"start":0,"end":6,"type":"hyperlink","data":{"link_type":"Web","url":"https://centra.com/"}},{"start":233,"end":673,"type":"em"}]},{"type":"paragraph","text":"These are just a few examples of SaaS businesses finding success on DigitalOcean. We are constantly amazed by the creativity and innovation that software builders are utilizing our platform for. If you are interested in learning more about product updates, technical deep-dives and best practices for building SaaS products and businesses, please contact us to learn how we can help you get started. ","spans":[{"start":340,"end":357,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/migrate/?utmmedium=blog","target":"_blank"}}]},{"type":"paragraph","text":"Come build with DigitalOcean!","spans":[]},{"type":"paragraph","text":"Looking to migrate your SaaS to DigitalOcean? Leverage free infrastructure credits, robust training, and technical support to ensure a worry-free migration.","spans":[{"start":0,"end":156,"type":"strong"},{"start":0,"end":156,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/migrate/?utmmedium=blog","target":"_blank"}}]},{"type":"paragraph","text":"","spans":[]},{"type":"paragraph","text":"Raman Sharma","spans":[]},{"type":"paragraph","text":"Vice President, Product & Programs Marketing","spans":[]}],"tags":[{"tag1":{"__typename":"PRISMIC_Tag","tag":"Developer Relations","_linkType":"Link.document","_meta":{"uid":"developer-relations"}}}],"author":{"__typename":"PRISMIC_Author","author_name":"Raman Sharma","author_image":{"dimensions":{"width":512,"height":512},"alt":null,"copyright":null,"url":"https://images.prismic.io/www-static/497b4b14-d192-493a-8b66-7ae176ba99f3_raman.png?auto=compress,format"},"_meta":{"uid":"raman-sharma"}},"_meta":{"uid":"how-to-scale-your-saas-product-without-breaking-the-bank"}}}}]}}},"pageContext":{"limit":12,"skip":24,"numAuthorPages":10,"currentPage":3,"uid":"digitalocean","data":[{"node":{"author":{"_linkType":"Link.document","author_name":"DigitalOcean","author_image":{"dimensions":{"width":600,"height":600},"alt":"Sammy avatar","copyright":null,"url":"https://images.prismic.io/www-static/a10e3c2eb15b74ee43f872be3044313423b1c9a9_sammy_avatar.png?auto=compress,format"},"_meta":{"uid":"digitalocean"}},"blog_header_image":{"dimensions":{"width":1500,"height":800},"alt":null,"copyright":null,"url":"https://images.prismic.io/www-static/28ccd8ae-ad02-40aa-a1af-358551aa7d14_goquemu.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Open Source at DigitalOcean: Introducing go-qemu and go-libvirt","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"At DigitalOcean, we use libvirt with QEMU to create and manage the virtual machines that compose our Droplet product. QEMU is the workhorse that enables hundreds of Droplets to run on a single server within our data centers. To perform management actions (like powering off a Droplet), we originally built automation which relied on shelling out to `virsh`, a command-line client used to interact with the libvirt daemon.","spans":[{"start":118,"end":122,"type":"hyperlink","data":{"link_type":"Web","url":"http://wiki.qemu.org/Main_Page"}}]},{"type":"paragraph","text":"As we began to deploy Go into production, we realized we would need simple and powerful building blocks for future Droplet management tooling. In particular, we wanted packages with:","spans":[]},{"type":"list-item","text":"Well-thought-out, idiomatic APIs with great documentation","spans":[]},{"type":"list-item","text":"No use of cgo to simplify our build pipelines and allow easy cross compilation","spans":[]},{"type":"list-item","text":"Direct interaction with QEMU monitor sockets to enable maximum control","spans":[]},{"type":"paragraph","text":"We explored several open source packages for managing libvirt and QEMU, but none of them were able to completely fulfill our wants and needs, so we created our own: go-qemu.","spans":[{"start":165,"end":172,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/digitalocean/go-qemu) and [go-libvirt](https://github.com/digitalocean/go-libvirt"}}]},{"type":"heading2","text":"How Do QEMU and go-qemu Work?","spans":[]},{"type":"paragraph","text":"QEMU provides the hardware emulation layer between Droplets and our bare metal servers. Each QEMU process provides a JSON API over a UNIX or TCP socket, much like a REST API you might find when working with web services. However, instead of using HTTP, it communicates over a protocol known as the QEMU Monitor Protocol (QMP). When you request an action, like powering off a Droplet, the request eventually makes its way to the QEMU process via the QMP socket in the form of `{ \"execute\" : \"system_powerdown\" }`.","spans":[{"start":321,"end":324,"type":"hyperlink","data":{"link_type":"Web","url":"http://wiki.qemu.org/Documentation/QMP"}}]},{"type":"paragraph","text":"go-qemu is a Go package that provides a simple interface for communicating with QEMU instances over QMP. It enables the management of QEMU virtual machines directly, using either the monitor socket of a VM or by proxying the request through libvirt. All go-qemu interactions rely on the qemu.Domain and qmp.Monitor types. A qemu.Domain is constructed with an underlying qmp.Monitor, which understands how to speak to the monitor socket of a given VM.","spans":[{"start":287,"end":298,"type":"hyperlink","data":{"link_type":"Web","url":"https://godoc.org/github.com/digitalocean/go-qemu/qemu#Domain"}},{"start":303,"end":314,"type":"hyperlink","data":{"link_type":"Web","url":"https://godoc.org/github.com/digitalocean/go-qemu/qmp#Monitor"}}]},{"type":"heading2","text":"How Do libvirt and go-libvirt Work?","spans":[]},{"type":"paragraph","text":"libvirt was designed for client-server communication. Users typically interact with the libvirt daemon through the command-line client `virsh`. `virsh` establishes a connection to the daemon either through a local UNIX socket or a TCP connection. Communication follows a custom asynchronous protocol whereby each RPC request or response is preceded by a header describing the incoming payload. Most notably, the header contains a procedure identifier (e.g,. \"start domain\"), the type of request (e.g., `call` or `reply`), and a unique serial number used to correlate RPC calls with their respective responses. The payload following the header is XDR encoded providing an architecture-agnostic method for describing strict data types.","spans":[{"start":271,"end":299,"type":"hyperlink","data":{"link_type":"Web","url":"https://libvirt.org/internals/rpc.html"}},{"start":646,"end":649,"type":"hyperlink","data":{"link_type":"Web","url":"https://tools.ietf.org/html/rfc4506"}}]},{"type":"paragraph","text":"go-libvirt is a Go package which provides a pure Go interface to libvirt. go-libvirt can be used in conjunction with go-qemu to manage VMs by proxying communication through the libvirt daemon.","spans":[]},{"type":"paragraph","text":"go-libvirt exploits the availability of the RPC protocol to communicate with libvirt without the need for cgo and C bindings. While using the libvirt's C bindings would be easier up front, we try to avoid cgo when possible. Dave Cheney has written an excellent blog post which mirrors many of our own findings. A pure Go library simplifies our build pipelines, reduces dependency headaches, and keeps cross-compilation simple.","spans":[{"start":261,"end":270,"type":"hyperlink","data":{"link_type":"Web","url":"https://dave.cheney.net/2016/01/18/cgo-is-not-go"}}]},{"type":"paragraph","text":"By circumventing the C library, we need to keep a close eye on changes in new libvirt releases; libvirt developers may modify the RPC protocol at any time, potentially breaking go-libvirt. To ensure stability and compatibility with various versions of libvirt, we install and run it within Travis CI which allows integration tests to be run for each new commit to go-libvirt.","spans":[]},{"type":"heading3","text":"Example","spans":[]},{"type":"paragraph","text":"The following code demonstrates usage of go-qemu and go-libvirt to interact with all libvirt-managed virtual machines on a given hypervisor.","spans":[]},{"type":"preformatted","text":"```[php]{`","spans":[]},{"type":"paragraph","text":"    package main","spans":[]},{"type":"paragraph","text":"    ","spans":[]},{"type":"paragraph","text":"    import (  ","spans":[]},{"type":"paragraph","text":"        \"fmt\"","spans":[]},{"type":"paragraph","text":"        \"log\"","spans":[]},{"type":"paragraph","text":"        \"net\"","spans":[]},{"type":"paragraph","text":"        \"time\"","spans":[]},{"type":"paragraph","text":"    ","spans":[]},{"type":"paragraph","text":"        \"github.com/digitalocean/go-qemu/hypervisor\"","spans":[]},{"type":"paragraph","text":"    )","spans":[]},{"type":"paragraph","text":"    ","spans":[]},{"type":"paragraph","text":"    func main() {  ","spans":[]},{"type":"paragraph","text":"        driver := hypervisor.NewRPCDriver(func() (net.Conn, error) {","spans":[]},{"type":"paragraph","text":"            return net.DialTimeout(\"unix\", \"/var/run/libvirt/libvirt-sock\", 2*time.Second)","spans":[]},{"type":"paragraph","text":"        })","spans":[]},{"type":"paragraph","text":"    ","spans":[]},{"type":"paragraph","text":"        hv := hypervisor.New(driver)","spans":[]},{"type":"paragraph","text":"    ","spans":[]},{"type":"paragraph","text":"        fmt.Println(\"Domain\\t\\tQEMU Version\")","spans":[]},{"type":"paragraph","text":"        fmt.Println(\"--------------------------------------\")","spans":[]},{"type":"paragraph","text":"        domains, err := hv.Domains()","spans":[]},{"type":"paragraph","text":"        if err != nil {","spans":[]},{"type":"paragraph","text":"            log.Fatal(err)","spans":[]},{"type":"paragraph","text":"        }","spans":[]},{"type":"paragraph","text":"    ","spans":[]},{"type":"paragraph","text":"        for _, dom := range domains {","spans":[]},{"type":"paragraph","text":"            version, err := dom.Version()","spans":[]},{"type":"paragraph","text":"            if err != nil {","spans":[]},{"type":"paragraph","text":"                log.Fatal(err)","spans":[]},{"type":"paragraph","text":"            }","spans":[]},{"type":"paragraph","text":"    ","spans":[]},{"type":"paragraph","text":"            fmt.Printf(\"%s\\t\\t%s\\n\", dom.Name, version)","spans":[]},{"type":"paragraph","text":"            dom.Close()","spans":[]},{"type":"paragraph","text":"        }","spans":[]},{"type":"paragraph","text":"    }","spans":[]},{"type":"paragraph","text":"    `}```","spans":[]},{"type":"heading4","text":"Output","spans":[]},{"type":"preformatted","text":"```[php]{`","spans":[]},{"type":"paragraph","text":"    Droplet-1        2.7.0","spans":[]},{"type":"paragraph","text":"    Droplet-2        2.6.0","spans":[]},{"type":"paragraph","text":"    Droplet-3        2.5.0","spans":[]},{"type":"paragraph","text":"    `}```","spans":[]},{"type":"heading2","text":"What's Next?","spans":[]},{"type":"paragraph","text":"Both go-qemu and go-libvirt are still under active development, in the future, we intend to provide an optional cgo QMP monitor which wraps the libvirt C API using the libvirt-go package.","spans":[{"start":5,"end":12,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/digitalocean/go-qemu"}},{"start":17,"end":27,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/digitalocean/go-libvirt"}},{"start":164,"end":186,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/rgbkrk/libvirt-go"}}]},{"type":"paragraph","text":"go-qemu and go-libvirt are used in production at DigitalOcean, but the APIs should be treated as unstable, and we recommend that users of these packages vendor them into their applications.","spans":[]},{"type":"paragraph","text":"We welcome contributions to the project! In fact, a recent major feature in the go-qemu project was contributed by an engineer outside of DigitalOcean. David Anderson is working on a way to automatically generate QMP structures using the QMP specification in go-qemu. This will save an enormous amount of tedious development and enables contributors to simply wrap these raw types in higher-level types to provide a more idiomatic interface to interact with QEMU instances.","spans":[{"start":152,"end":166,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/danderson"}}]},{"type":"paragraph","text":"If you'd like to join the fun, feel free to open a GitHub pull-request, file an issue, or join us on IRC (freenode/#go-qemu).","spans":[]},{"type":"paragraph","text":"Edit: as clarified by user \"eskultet\" in our IRC channel, libvirt does indeed guarantee API and ABI stability, and the RPC layer is able to detect any extra or missing elements that would cause the RPC payload to not meet a fixed size requirement.  This blog has been updated to reflect this misunderstanding.","spans":[]},{"type":"paragraph","text":"  ","spans":[]},{"type":"paragraph","text":"  by Matt Layher & Ben LeMasurier","spans":[{"start":5,"end":16,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/mdlayher"}},{"start":19,"end":33,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/lemasurier"}}]}],"blog_post_date":"2016-11-21","tags":[{"tag1":{"tag":"Engineering","_linkType":"Link.document","_meta":{"uid":"engineering"}}}],"_meta":{"uid":"introducing-go-qemu-and-go-libvirt"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"DigitalOcean","author_image":{"dimensions":{"width":600,"height":600},"alt":"Sammy avatar","copyright":null,"url":"https://images.prismic.io/www-static/a10e3c2eb15b74ee43f872be3044313423b1c9a9_sammy_avatar.png?auto=compress,format"},"_meta":{"uid":"digitalocean"}},"blog_header_image":{"dimensions":{"width":785,"height":419},"alt":"high memory droplets","copyright":null,"url":"https://images.prismic.io/www-static/1d1e82c2-8403-446b-be8a-f735b24c339f_hero.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Support RAM-Intensive Workloads with High Memory Droplets","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"At DigitalOcean, we aim to make it simple and intuitive for developers to build and scale their infrastructure, from an application running on a single Droplet to a highly distributed service running across thousands of Droplets. As applications grow and become more specialized, so too do the configurations needed to run them effectively. Recently, with the launch of Block Storage, we made it easy to scale storage independently from compute at a lower price point than before. Today, we're doing something similar for RAM with the release of High Memory Droplet plans.","spans":[{"start":370,"end":383,"type":"hyperlink","data":{"link_type":"Web","url":"https://assets.digitalocean.com/blog/static/block-storage-more-space-to-scale/"}}]},{"type":"paragraph","text":"Standard Droplets offer a great balance of RAM, CPU, and storage for most general use-cases. Our new High Memory Droplets are optimized for RAM-intensive use-cases such as high-performance databases, in-memory caches like Redis or Memcache, or search indexes.","spans":[]},{"type":"paragraph","text":"High Memory Droplet plans start with 16GB and scale up to 224GB of RAM with smaller ratios of local storage and CPU relative to Standard Plans. They are priced 25% lower than our Standard Plans on a per-gigabyte of RAM basis. Find all the details in the chart below and on our pricing page.","spans":[{"start":273,"end":289,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/pricing/"}}]},{"type":"paragraph","text":"","spans":[{"start":0,"end":0,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/pricing/"}}]},{"type":"image","url":"https://images.prismic.io/www-static/8a1863647562dd172b9e4e0b4991c64b09647732_price-chart.png?auto=compress,format","alt":"Pricing chart","copyright":null,"dimensions":{"width":768,"height":220}},{"type":"paragraph","text":"We're actively looking at ways to support more specialized workloads and provide a platform that enables developers to tailor their environment to their applications' needs. We'd love to hear how we can better support your use-case. Let us know in the comments or over on our UserVoice.","spans":[{"start":272,"end":285,"type":"hyperlink","data":{"link_type":"Web","url":"https://digitalocean.uservoice.com"}}]}],"blog_post_date":"2016-09-12","tags":[{"tag1":{"tag":"Product Updates","_linkType":"Link.document","_meta":{"uid":"product-updates"}}}],"_meta":{"uid":"high-memory-droplets"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"DigitalOcean","author_image":{"dimensions":{"width":600,"height":600},"alt":"Sammy avatar","copyright":null,"url":"https://images.prismic.io/www-static/a10e3c2eb15b74ee43f872be3044313423b1c9a9_sammy_avatar.png?auto=compress,format"},"_meta":{"uid":"digitalocean"}},"blog_header_image":{"dimensions":{"width":1400,"height":750},"alt":"hatch","copyright":null,"url":"https://images.prismic.io/www-static/7bb44246-0999-4ba1-9ebd-aa3d1ea7b9c6_hero.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Introducing Hatch (Beta)","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"We're excited to launch Hatch (currently in beta), an online incubator program designed to help and support startups. Infrastructure can be one of the largest expenses facing these companies as they begin to scale. With Hatch, startups can receive access to both DigitalOcean credit and a range of other resources like 1-on-1 technical consultations.","spans":[{"start":24,"end":49,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/hatch"}}]},{"type":"paragraph","text":"Our goal with Hatch is to give back to the startup ecosystem and provide support to founders around the world so they can focus on building their businesses and not worry about their infrastructure. Having come through the Techstars program, we know just how valuable this support network can be.","spans":[]},{"type":"paragraph","text":"The Hatch program includes a range of perks for startups to get started, including 12 months of DigitalOcean credit up to $100,000 (actual amount varies by partner organization). The program also offers various support services such as 1-on-1 technical consultations, access to mentorship opportunities, solutions engineering, and priority support. We're looking to go beyond just offering infrastructure credits. We want to provide founders with an educational and networking experience that will add tremendous value to their startup for the long term.","spans":[]},{"type":"heading2","text":"Is my startup eligible?","spans":[]},{"type":"paragraph","text":"Starting now, we are piloting the program to a small group of startups. While in beta, we'll be working to refine the offering and eligibility criteria for future bootstrapped and funded startups who apply.","spans":[]},{"type":"paragraph","text":"As of today (September 7, 2016), here are the Hatch eligibility requirements for startups:","spans":[]},{"type":"list-item","text":"Must be backed by a partner accelerator, incubator, or VC firm.","spans":[{"start":20,"end":62,"type":"hyperlink","data":{"link_type":"Web","url":"https://digitalocean.com/hatch/#Partners"}}]},{"type":"list-item","text":"Less than 24 months in company duration.","spans":[]},{"type":"list-item","text":"Less than $10 million raised, up to Series A.","spans":[]},{"type":"list-item","text":"Startups who've received previous DigitalOcean promotional credit may not be eligible to receive additional credit.","spans":[]},{"type":"paragraph","text":"You can apply to Hatch by visiting digitalocean.com/hatch and completing the online application. Want to learn more? Read the FAQ.","spans":[{"start":35,"end":57,"type":"hyperlink","data":{"link_type":"Web","url":"https://digitalocean.com/hatch"}},{"start":126,"end":129,"type":"hyperlink","data":{"link_type":"Web","url":"https://digitalocean.com/hatch/#FAQ"}}]},{"type":"heading2","text":"Want to become a partner?","spans":[]},{"type":"paragraph","text":"We're currently adding over a hundred accelerators, investors, and partners to introduce startups around the world to the Hatch community. If you're interested in becoming a portfolio partner of Hatch, you can apply here.","spans":[{"start":210,"end":220,"type":"hyperlink","data":{"link_type":"Web","url":"https://digitalocean.com/hatch/#PartnerApplication"}}]},{"type":"paragraph","text":"Is your startup eligible and do you plan on applying? We'd love to hear from you! Reach out to us on Twitter or use the #hatchyouridea hashtag to tell us what your startup is all about.","spans":[{"start":101,"end":108,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/digitalocean"}}]}],"blog_post_date":"2016-09-06","tags":[{"tag1":{"tag":"Community","_linkType":"Link.document","_meta":{"uid":"community"}}}],"_meta":{"uid":"introducing-hatch"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"DigitalOcean","author_image":{"dimensions":{"width":600,"height":600},"alt":"Sammy avatar","copyright":null,"url":"https://images.prismic.io/www-static/a10e3c2eb15b74ee43f872be3044313423b1c9a9_sammy_avatar.png?auto=compress,format"},"_meta":{"uid":"digitalocean"}},"blog_header_image":{"dimensions":{"width":784,"height":419},"alt":"san francisco sf2","copyright":null,"url":"https://images.prismic.io/www-static/70e8977e-892c-4f85-b9dd-bd8ea5bcce85_hero.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Announcing SFO2: Hello Again San Francisco!","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"Great news: SFO2 is now live! It will be our second West Coast datacenter joining SFO1, one of our most popular. By adding a second datacenter to the region, we are enabling developers to build out more resilient infrastructure. Creating redundancy by scaling across multiple datacenters in the same region enables more robust applications.","spans":[{"start":12,"end":16,"type":"strong"}]},{"type":"paragraph","text":"When architecting for high-availability, replicating your data and being able to failover from one datacenter to another can keep application downtime to a minimum even in the face an unlikely outage. SFO2 opens up the possibility for our users in the region to design more fault-tolerant infrastructure.","spans":[]},{"type":"paragraph","text":"SFO2 comes with our latest hypervisor design, and the datacenter is equipped with 40GbE networking. Built with Block Storage in mind, the feature will be available here on day one of general availability.","spans":[{"start":111,"end":124,"type":"strong"}]},{"type":"paragraph","text":"Offering both new features and greater reliability, we think this one of our most exciting datacenter launches yet.","spans":[]},{"type":"paragraph","text":"Deploy your first Droplet in SFO2 today!","spans":[{"start":0,"end":39,"type":"hyperlink","data":{"link_type":"Web","url":"https://cloud.digitalocean.com/droplets/new?region=sfo2"}}]}],"blog_post_date":"2016-07-11","tags":[{"tag1":{"tag":"News","_linkType":"Link.document","_meta":{"uid":"news"}}}],"_meta":{"uid":"announcing-sfo2"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"DigitalOcean","author_image":{"dimensions":{"width":600,"height":600},"alt":"Sammy avatar","copyright":null,"url":"https://images.prismic.io/www-static/a10e3c2eb15b74ee43f872be3044313423b1c9a9_sammy_avatar.png?auto=compress,format"},"_meta":{"uid":"digitalocean"}},"blog_header_image":{"dimensions":{"width":784,"height":393},"alt":"Namaste India illustration with words Introducing Our Bangalore Region text","copyright":null,"url":"https://images.prismic.io/www-static/f56678231bf22603bbbcf34edc114d0737eeac75_hero-3.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Introducing Our Bangalore Region: BLR1","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"Today we are excited to announce the launch of our first datacenter in India and our twelfth globally. Developers can now launch Droplets in our newest region, Bangalore (BLR1)!","spans":[]},{"type":"paragraph","text":"Our community has been requesting an India region for a while now, and we're thrilled to announce that it is now finally available. We will continue to offer a single pricing plan across all of our datacenters worldwide, including Bangalore, with SSD cloud servers starting at $5 USD per month.","spans":[{"start":34,"end":49,"type":"hyperlink","data":{"link_type":"Web","url":"https://digitalocean.uservoice.com/forums/136585-digitalocean/suggestions/4135044-india-datacenter"}}]},{"type":"paragraph","text":"Our goal is to empower developers and software companies around the world to build amazing things, and our robust, affordable, and simple infrastructure is making the cloud more accessible than ever. Today, India is home to the fastest growing ecosystem of startups and entrepreneurs, with approximately 4,000 startups launching this past year. With the number of software developers throughout India expected to grow to over 5 million by the year 2018, this region is poised to unleash a tremendous amount of innovation in the next decade. We want to be there to support every startup to grow and succeed.","spans":[]},{"type":"paragraph","text":"We're focused on making it easier than ever before for startups and teams of software developers from India, and around the world, to deploy and scale their applications.  We are excited to see what we can build together in Bangalore.","spans":[{"start":212,"end":220,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/company/careers#india-outreach-manager-"}}]},{"type":"paragraph","text":"No need to wait any longer. Spin up a Droplet in BLR1!","spans":[{"start":28,"end":53,"type":"hyperlink","data":{"link_type":"Web","url":"https://cloud.digitalocean.com/droplets/new?size=2gb&amp;region=blr1"}}]}],"blog_post_date":"2016-05-30","tags":[{"tag1":{"tag":"News","_linkType":"Link.document","_meta":{"uid":"news"}}}],"_meta":{"uid":"introducing-our-bangalore-region-blr1"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"DigitalOcean","author_image":{"dimensions":{"width":600,"height":600},"alt":"Sammy avatar","copyright":null,"url":"https://images.prismic.io/www-static/a10e3c2eb15b74ee43f872be3044313423b1c9a9_sammy_avatar.png?auto=compress,format"},"_meta":{"uid":"digitalocean"}},"blog_header_image":{"dimensions":{"width":784,"height":392},"alt":"Collage of images with servers in ocean and dolphins jumping in the middle with the logo CloudSound","copyright":null,"url":"https://images.prismic.io/www-static/85b48a0771e59a67aab0518518c87b8ec89fe409_hero.jpg?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Introducing CloudSound: The Music Your Server Makes","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"If a server whirrs in a datacenter and no one is around to hear it, does it still make a sound? Yes, yes it does. And now you can confirm this with a simple click of your mouse.","spans":[]},{"type":"paragraph","text":"Today, we're introducing our new acoustic monitoring feature called CloudSound. CloudSound brings the ambient, meditative sounds of datacenters to the DO control panel. Users can now spin up Droplets to the calming hum of their servers running in the background.","spans":[{"start":68,"end":78,"type":"strong"}]},{"type":"image","url":"https://images.prismic.io/www-static/84c92bcfaf81a8501db71547a03faa3125e6c906_listen.png?auto=compress,format","alt":null,"copyright":null,"dimensions":{"width":1052,"height":486}},{"type":"paragraph","text":"We understand that the move from bare metal to the cloud can cause some anxiety. In the past, you knew your server was working because you could hear it working. Now? Only a deafening silence. With CloudSound, you're reassured that everything works with the steady, pleasant datacenter buzz of yesteryear...","spans":[{"start":145,"end":149,"type":"em"}]},{"type":"paragraph","text":"Is the sound of whirring servers through your headphones not enough? DigitalOcean is currently hiring people to work in our datacenters; experience CloudSound all the time!","spans":[{"start":69,"end":101,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/company/careers/"}}]}],"blog_post_date":"2016-03-31","tags":[{"tag1":{"tag":"Community","_linkType":"Link.document","_meta":{"uid":"community"}}}],"_meta":{"uid":"introducing-cloudsound"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"DigitalOcean","author_image":{"dimensions":{"width":600,"height":600},"alt":"Sammy avatar","copyright":null,"url":"https://images.prismic.io/www-static/a10e3c2eb15b74ee43f872be3044313423b1c9a9_sammy_avatar.png?auto=compress,format"},"_meta":{"uid":"digitalocean"}},"blog_header_image":null,"blog_headline":[{"type":"heading1","text":"Update on the March 24, 2016 DNS Outage","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"Yesterday, DigitalOcean's DNS infrastructure was unavailable for two hours and four minutes. During this time we were only able to respond to a small fraction of the DNS requests sent to ns1, ns2, and ns3.digitalocean.com. We know how much you rely on DigitalOcean, and we take the availability and reliability of our services very seriously. We would like to apologize and share more details about our DNS system in general, this specific attack, and what we are doing to make our systems more resilient from here on.","spans":[{"start":166,"end":169,"type":"hyperlink","data":{"link_type":"Web","url":"https://en.wikipedia.org/wiki/Domain_Name_System"}}]},{"type":"heading2","text":"Some background","spans":[]},{"type":"paragraph","text":"The resolvers which compose our authoritative DNS infrastructure are fronted by a well-known DDoS mitigation company. The service they offer uses anycast to move traffic from clients all across the world to DigitalOcean's nearest datacenter. We then have authoritative resolvers in all of our facilities to process and respond to DNS queries. One of the most significant advantages to this approach is it allows for simple load distribution across our global footprint and makes it easy to add more resolvers to deal with increased capacity needs.","spans":[{"start":146,"end":153,"type":"hyperlink","data":{"link_type":"Web","url":"https://en.wikipedia.org/wiki/Anycast"}}]},{"type":"heading2","text":"The incident","spans":[]},{"type":"paragraph","text":"At 2:34 pm UTC (10:34 am EDT) on March 24, 2016, we began to receive alerts from our monitoring system that all the resolvers were failing to respond to DNS queries. As we investigated the issue, we noticed that the resolvers were receiving orders of magnitude more queries than normal. Although there was significantly more capacity available than is required during typical peak operation, it was still not enough to answer this unusually large quantity of inbound queries. We started to take a closer look  at the queries which were being sent to the resolvers in an attempt to differentiate normal traffic from that of a bad actor. The traffic patterns and source IP addresses matched what we would expect — just at much larger volumes than normal. You can see uncached (the yellow line) and cached traffic (the green line) below.","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/7021c1cd69e69f37e271338c8536ca9dba0c7f5d_image01.png?auto=compress,format","alt":null,"copyright":null,"dimensions":{"width":1886,"height":1190}},{"type":"paragraph","text":"At this point, our DDoS mitigation provider was engaged. All of our DNS traffic flows through their network, which has numerous protections in place to both identify and mitigate attacks. However, neither of us were able to find anything abnormal about this traffic beyond its volume at that point.","spans":[]},{"type":"paragraph","text":"Our DNS daemon was configured to empty the queue of unanswered queries at a certain threshold to ensure the daemon would be able to answer future inbound queries. This inadvertently caused cache invalidation. We rolled out a new configuration that solved this issue, but the caches failed to repopulate. Although the system can withstand all the resolvers losing their query caches under normal conditions, the vastly increased number of queries made it impossible for the resolvers to rebuild their cache. This all took place while the resolvers were already under abnormally high load, causing them further stress.","spans":[]},{"type":"paragraph","text":"At this point, we further engaged with our DDoS mitigation provider to help identify the source and types of traffic and recognized a higher-than-normal percentage of queries for PTR records. We began blocking them to allow us to respond to other queries. They were also able to reduce the number of queries reaching our resolvers by blocking some autonomous system numbers (ASNs) from which the most significant volumes of traffic were originating. Finally, we increased the TTL for cached DNS records, which is the length of time for which the edge caches responses before allowing new queries to hit the origin resolvers.  As we looked through the traffic to find patterns, it became clear that the attacker knew a large number of domains managed with our DNS infrastructure. All of our public subnets are available via ARIN, which means it's possible to find domains which are hosted on our service, infer they are using our DNS, and then send large volumes of legitimate-looking queries. Although the ASN blocking certainly prevented some legitimate DNS lookups from being answered, it almost immediately allowed the system to begin answering most queries.","spans":[{"start":348,"end":373,"type":"hyperlink","data":{"link_type":"Web","url":"https://en.wikipedia.org/wiki/Autonomous_system_(Internet)"}}]},{"type":"paragraph","text":"The service began responding to queries with normal latencies starting at 4:40 pm UTC (12:40 pm EDT). Caches began to repopulate and query volume returned to normal levels. At 5:30 pm UTC (1:30 pm EDT), the vast majority of traffic ingressing to our resolvers was clean. In the first graph below, it's possible to see the dramatic increase in query cache hit rate as the service begins to recover.","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/8eef2a4c1fdb6a094823ab50b19765cb7c6a7fa9_image02.png?auto=compress,format","alt":null,"copyright":null,"dimensions":{"width":1094,"height":472}},{"type":"paragraph","text":"The graph below shows SERVFAILs in green, 50th percentile latencies between the edge and our resolvers in blue, and 90th percentile latencies in yellow.","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/b0db6aabe0d8ae40a9fbc08c1c11a98f935390de_image03.png?auto=compress,format","alt":null,"copyright":null,"dimensions":{"width":1764,"height":236}},{"type":"paragraph","text":"At 7:22 pm UTC (3:22 pm EDT), the majority of the filtering was removed.","spans":[]},{"type":"heading2","text":"Future measures","spans":[]},{"type":"paragraph","text":"There are a number of pieces of infrastructure we are reviewing and improving. Most notably, we will be building better means of moving DNS traffic around within our infrastructure. One of the things which caused this incident to span two hours was the lack of control we had over the traffic which was reaching our network. Although we'll continue to work with the DDoS mitigation provider, we will also be improving our own DNS network by creating means to internally move, rate limit, and shape traffic in order to continue to respond to most requests even while under attack. We already have robust tooling in place for mitigating attacks on the Droplet network and will extend that to support DNS as well.","spans":[]},{"type":"paragraph","text":"We will be decoupling the provisioning of additional capacity from the DDoS mitigation provider entirely. External communications with our DDoS mitigation provider meant that we had a fairly constant back-and-forth during the incident, making it harder for us to test mitigation techniques on our own. They transparently send through requests to the resolvers, which means our ability to provision more resolver capacity is dependent upon the provider's speed of response. This caused adding additional nodes to the pool to take much longer than is ideal, which subsequently slowed our return to normal operation. We're planning to change how we present our network to the proxies run by our DDoS mitigation provider to make dynamically changing the capacity of the pool easier.","spans":[]},{"type":"heading2","text":"In Conclusion","spans":[]},{"type":"paragraph","text":"First and foremost, we know that our service is critical in the success of your projects and businesses. All of us at DigitalOcean would like to apologize for the impact of this outage. We will continue to analyze this incident, hone our internal communications, and take steps to improve the reliability and resilience of the systems which power DigitalOcean.","spans":[]}],"blog_post_date":"2016-03-23","tags":[{"tag1":{"tag":"News","_linkType":"Link.document","_meta":{"uid":"news"}}}],"_meta":{"uid":"update-on-the-march-24-2016-dns-outage"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"DigitalOcean","author_image":{"dimensions":{"width":600,"height":600},"alt":"Sammy avatar","copyright":null,"url":"https://images.prismic.io/www-static/a10e3c2eb15b74ee43f872be3044313423b1c9a9_sammy_avatar.png?auto=compress,format"},"_meta":{"uid":"digitalocean"}},"blog_header_image":{"dimensions":{"width":784,"height":418},"alt":"DO is coming to india","copyright":null,"url":"https://images.prismic.io/www-static/fe06d0c8-d583-42c6-8b4c-2a3643f04681_hero.jpg?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Announcing the Home of our Next Data Center: Bangalore, India","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"Tomorrow morning, India Standard Time, our COO Karl will announce our newest data center region at SURGE conference in Bangalore, India's central tech hub and the place where we plan to power up our next facility this summer.","spans":[{"start":99,"end":104,"type":"hyperlink","data":{"link_type":"Web","url":"https://surgeconf.com/"}}]},{"type":"paragraph","text":"Developers throughout India and the neighboring regions have been with us since the very beginning of DigitalOcean and as early as June 2013 have been urging us to come to India. We are proud to already have amazing Indian startups like KartRocket, NoBroker.in, and Flipkart among our customers today. For two years in a row, we have sponsored GopherConIndia and have had the pleasure to meet Indian developers there.","spans":[{"start":164,"end":177,"type":"hyperlink","data":{"link_type":"Web","url":"https://digitalocean.uservoice.com/forums/136585-digitalocean/suggestions/4135044-india-datacenter"}},{"start":237,"end":247,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.kartrocket.com/"}},{"start":249,"end":260,"type":"hyperlink","data":{"link_type":"Web","url":"http://nobroker.in/"}},{"start":266,"end":274,"type":"hyperlink","data":{"link_type":"Web","url":"http://www.flipkart.com/"}},{"start":344,"end":358,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/digitalocean/status/701038995845713920"}}]},{"type":"image","url":"https://images.prismic.io/www-static/367db1a410786cd84c448e76f9681e1491ff45e6_gophercon.jpg?auto=compress,format","alt":"GopherConIndia","copyright":null,"dimensions":{"width":563,"height":422}},{"type":"paragraph","text":"Look at what we spotted at GopherConIndia just last week – a Hacktoberfest 2015 T-shirt! And it wasn't the only one.","spans":[{"start":0,"end":116,"type":"em"},{"start":27,"end":41,"type":"hyperlink","data":{"link_type":"Web","url":"http://www.gophercon.in/"}}]},{"type":"paragraph","text":"We are inspired by the entrepreneurial energy and the incredible pace of innovation here. The number of software developers throughout India will grow to over 5 million by the year 2018. Last year there were thousands of startups throughout India, and the number is projected to triple by 2020!","spans":[]},{"type":"paragraph","text":"By opening a new data center in the region, we're hoping to further facilitate innovation and collaboration for developer teams. The data center will be equipped with our most up-to-date hardware and network architecture, and it will be among the first to have access to our newest products coming out this year.","spans":[]},{"type":"paragraph","text":"We are truly excited to be coming to India, and look forward to hearing feedback on how we can best serve the community. If you are at SURGE, make sure to drop by our developers' lounge. If not, reach out to us in the comments or on Twitter any time. And remember to subscribe to the request on UserVoice in order to get updated when the data center launches!","spans":[{"start":233,"end":240,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/digitalocean"}},{"start":280,"end":304,"type":"hyperlink","data":{"link_type":"Web","url":"https://digitalocean.uservoice.com/forums/136585-digitalocean/suggestions/4135044-india-datacenter"}}]}],"blog_post_date":"2016-02-21","tags":[{"tag1":{"tag":"News","_linkType":"Link.document","_meta":{"uid":"news"}}}],"_meta":{"uid":"announcing-the-home-of-our-next-datacenter"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"DigitalOcean","author_image":{"dimensions":{"width":600,"height":600},"alt":"Sammy avatar","copyright":null,"url":"https://images.prismic.io/www-static/a10e3c2eb15b74ee43f872be3044313423b1c9a9_sammy_avatar.png?auto=compress,format"},"_meta":{"uid":"digitalocean"}},"blog_header_image":{"dimensions":{"width":750,"height":420},"alt":"city skyline with sunset and text 'Introducing TOR1'","copyright":null,"url":"https://images.prismic.io/www-static/780c928cbe5e8daa734e4b316f4b9a25c025a593_tor1_blog.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Introducing Our New Canadian Datacenter: TOR1","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"Today, we're excited to announce the launch of our first Canadian datacenter in beautiful Toronto!","spans":[]},{"type":"paragraph","text":"It's hard to deny that the Canadian startup ecosystem has been booming. There are nearly half a million software developers throughout Canada, and we at DigitalOcean have always felt lots of love from the Canadian developer community. Today we're excited to send some love back their way as we proudly open the doors to our Canadian datacenter, TOR1. Universe, a platform for people to discover and create events based in Toronto, is already a DigitalOcean customer. We are excited to help them expand their business in Canada.","spans":[{"start":351,"end":359,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.universe.com/home"}}]},{"type":"paragraph","text":"This was a highly requested location. Each hypervisor comes equipped with 40GbE networking and the latest model of SSDs.","spans":[{"start":11,"end":36,"type":"hyperlink","data":{"link_type":"Web","url":"https://digitalocean.uservoice.com/forums/136585-digitalocean/suggestions/3554083-canadian-datacenter"}}]},{"type":"paragraph","text":"Because all of these Droplets will be physically in Canada, if your business needs to keep data in the Great White North, you'll now be able to do that. DigitalOcean is committed to upholding the highest standards in privacy and security, and TOR1 enables us to extend those protections to our customers' customers.","spans":[]},{"type":"paragraph","text":"To celebrate the TOR1 launch with our friends in Canada, we'll be hosting events throughout October. Save the dates for your cities: Toronto (Oct 13-15), Vancouver (Oct 20-22), and Montreal (Oct 28 - 29). The official event details will be added to this post soon.","spans":[]},{"type":"paragraph","text":"Head over to the Droplet create page or use the API to spin up a maple-flavored Droplet in TOR1 today!","spans":[{"start":17,"end":36,"type":"hyperlink","data":{"link_type":"Web","url":"https://cloud.digitalocean.com/droplets/new"}},{"start":40,"end":51,"type":"hyperlink","data":{"link_type":"Web","url":"https://developers.digitalocean.com/documentation/v2/#create-a-new-droplet"}}]}],"blog_post_date":"2015-09-22","tags":[{"tag1":{"tag":"News","_linkType":"Link.document","_meta":{"uid":"news"}}}],"_meta":{"uid":"introducing-our-new-canadian-datacenter-tor1"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"DigitalOcean","author_image":{"dimensions":{"width":600,"height":600},"alt":"Sammy avatar","copyright":null,"url":"https://images.prismic.io/www-static/a10e3c2eb15b74ee43f872be3044313423b1c9a9_sammy_avatar.png?auto=compress,format"},"_meta":{"uid":"digitalocean"}},"blog_header_image":{"dimensions":{"width":784,"height":418},"alt":"Sunset over ocean with fish jumping over the text 'Thank you!' illustration","copyright":null,"url":"https://images.prismic.io/www-static/ead0daf7acfebeee9c21c3c8759797106654db2a_thank_you.jpg?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Series B Funding: Writing a New Chapter in the DigitalOcean Story","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"For over three years, we've been driven by the desire to empower developers and make cloud infrastructure simple. To date, over 500,000 developers have deployed more than 6 million Droplets on DigitalOcean and as the infrastructure needs of our developer community have continued to evolve, we have aspired to as well.","spans":[]},{"type":"paragraph","text":"Today, we're excited to announce that we've closed a Series B funding round worth $83 million, led by Access Industries with participation from Andreessen Horowitz. This funding represents our continued commitment to helping developers thrive and to help scaling startups grow on our infrastructure.","spans":[]},{"type":"heading3","text":"Scaling","spans":[]},{"type":"paragraph","text":"We've experienced many of the growing pains that come with turning into a scalable business. In 2011, our five founders wanted to create a simple infrastructure experience that developers would love to use. In 2012, TechStars accepted us into their Boulder class; we set up shop in Colorado that summer and graduated the program with our first 400 customers.","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/8285e1a0c09ab58da49745359130542415501aac_the_beginning.jpg?auto=compress,format","alt":"TechStars","copyright":null,"dimensions":{"width":564,"height":396}},{"type":"paragraph","text":"TechStars 2012","spans":[{"start":0,"end":14,"type":"em"}]},{"type":"paragraph","text":"The early DigitalOcean adopters had only two choices of datacenter regions (New York and Amsterdam) on a cloud that was maintained and operated on just a few servers.","spans":[]},{"type":"paragraph","text":"Since then, a lot has changed. We've raised a seed round and Series A which we used to build out servers in six locations (New York, London, Singapore, Frankfurt, Amsterdam, and San Francisco), added features like user data, IPv6, private networking, team account management, and updated our Community platform. Our hardware footprint expanded, the complexity of our system deepened, and the technological challenges we faced grew. A cloud that once ran on six servers now is powered by over ten thousand.","spans":[{"start":292,"end":301,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community"}}]},{"type":"heading3","text":"Growing Together","spans":[]},{"type":"paragraph","text":"Since our outset, we have loved to see the variety of amazing work hosted on DigitalOcean, from single-server hacks created overnight at hackathons to innovative applications which serve millions of happy users.","spans":[]},{"type":"paragraph","text":"As developers and entrepreneurs ourselves, we've seen how quickly a company can grow. That same single-server app, gone viral on Hacker News, can transition from a personal project to a full-fledged business. We want to make that transition effortless and raised this Series B to continue supporting individual developers further on in their journey.","spans":[]},{"type":"paragraph","text":"How? The $83 million is going directly into growing our team and expanding our product offerings with networking and storage features. When we started, we felt the pain points of developers who had to contend with questions on how to spin up a single server rather than being able to focus on their applications. We solved this by providing developers with a simple and intuitive control panel. Now, by learning from our own company's growth, we're focused on addressing developers' challenges as they grow; spinning up a server should be simple, but so should creating a production environment to handle load at any scale.","spans":[{"start":44,"end":60,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/company/careers/"}}]},{"type":"heading3","text":"Thank You!","spans":[]},{"type":"paragraph","text":"We are extraordinarily indebted to the amazing people who have personally made all of this possible.","spans":[]},{"type":"paragraph","text":"Thank you to the DigitalOcean family for building and supporting this cloud with your signature love, creativity, passion, and hard work!","spans":[{"start":17,"end":36,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/company/about/"}}]},{"type":"paragraph","text":"Thank you to our investors, IA Ventures, Andreessen Horowitz, and Access Industries for believing in our vision.","spans":[]},{"type":"paragraph","text":"Last but certainly not least, we would like to thank you, our community! Thank you for growing with us and for challenging us to be better every day. We wouldn't be here without you.","spans":[]},{"type":"paragraph","text":"Here's to writing this new chapter together!","spans":[]},{"type":"paragraph","text":"DigitalOcean HQ 2015","spans":[{"start":0,"end":20,"type":"em"}]},{"type":"image","url":"https://images.prismic.io/www-static/0470fe0347edc7a6a3342eb5940af5300b213e5b_the_team.jpg?auto=compress,format","alt":"DigitalOcean HQ","copyright":null,"dimensions":{"width":2000,"height":1333}}],"blog_post_date":"2015-07-07","tags":[{"tag1":{"tag":"News","_linkType":"Link.document","_meta":{"uid":"news"}}}],"_meta":{"uid":"series-b-funding-writing-a-new-chapter-in-the-digitalocean-story"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"DigitalOcean","author_image":{"dimensions":{"width":600,"height":600},"alt":"Sammy avatar","copyright":null,"url":"https://images.prismic.io/www-static/a10e3c2eb15b74ee43f872be3044313423b1c9a9_sammy_avatar.png?auto=compress,format"},"_meta":{"uid":"digitalocean"}},"blog_header_image":{"dimensions":{"width":784,"height":418},"alt":"stack javascript.com","copyright":null,"url":"https://images.prismic.io/www-static/3cdeeb9a-1675-4b14-bd12-1c3cfd01c8b1_guest-post-javascript-com.jpg?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Guest Post: Behind the Stack of JavaScript.com","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"This morning at Code School we released JavaScript.com, a free community resource that serves two purposes: to provide a starting point to learn JavaScript, and to keep JavaScript developers up to date with the latest news, frameworks, and libraries.","spans":[{"start":16,"end":27,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.codeschool.com/"}},{"start":40,"end":54,"type":"hyperlink","data":{"link_type":"Web","url":"http://javascript.com"}}]},{"type":"paragraph","text":"Since the purpose of JavaScript.com is to teach everyone about web development, I couldn't resist this opportunity to spread a little knowledge about the site's deployment process. In this article, I thought I'd give a peek behind the curtain to show you the stack we're using and why we're hosting with DigitalOcean.","spans":[]},{"type":"heading2","text":"How Does JavaScript.com Work?","spans":[]},{"type":"paragraph","text":"JavaScript.com is developed in JavaScript, of course. We chose Node.js for its speed, ease of use, and community support. But that's not telling the whole story.","spans":[]},{"type":"paragraph","text":"We don't want every web request to make it all the way to our application servers, since that would strain them unnecessarily. So, before any web request makes it to the application, it passes through several layers that help offload and balance the traffic between multiple servers.","spans":[]},{"type":"heading2","text":"Content Delivery & Caching","spans":[]},{"type":"paragraph","text":"The first destination on your request's journey is CloudFlare. We've been experimenting with CloudFlare for some time at Code School, as both a security and extra caching layer. If CloudFlare sees a request for a static page that's been generated recently, it will return that page from one of its data centers rather than asking our application servers to regenerate the page. The sort of page and asset caching CloudFlare provides works extremely well with a read-heavy site like JavaScript.com. After all, the best kind of cached request never even hits your server.","spans":[]},{"type":"heading2","text":"Load Balancing","spans":[]},{"type":"paragraph","text":"After CloudFlare, any uncached request will go through one of two load balancers running HAProxy. These load balancers allow us to quickly add new application servers to the mix as the load increases. A lone HAProxy process can service many millions of requests per day, so we run only two of them: one to serve requests from the Internet, and one on standby, ready to take over if the hot server fails. This is called a \"hot standby\" configuration.","spans":[]},{"type":"heading2","text":"Application Servers","spans":[]},{"type":"paragraph","text":"Finally, HAProxy routes the request down to our NGINX and Phusion Passenger stack. NGINX is a web server that handles static requests (like images), while Phusion Passenger manages our Node processes and dynamic requests (like the comments page) from within NGINX. We really enjoy Passenger on the DevOps side of things since it makes Node process management dead simple.","spans":[]},{"type":"paragraph","text":"All of these application servers are designed to run independently from one another. So, we can fire up as many as we need of each type to handle whatever traffic we see on JavaScript.com.","spans":[]},{"type":"heading2","text":"Database Servers","spans":[]},{"type":"paragraph","text":"In order to save all those stories and comments, JavaScript.com uses the PostgreSQL database. It is an extremely quick and reliable piece of software that we use across Code School for a variety of applications.","spans":[]},{"type":"paragraph","text":"The database always gets its own server, along with a spare, should the main server ever go down. As a bonus, a PostgreSQL hot spare can be used by the JavaScript.com application as a read-only database should the main server fall under too much load.","spans":[]},{"type":"heading2","text":"One Command to Deploy Them All","spans":[]},{"type":"paragraph","text":"JavaScript.com is made up of a minimum of six servers: two load balancers, two application servers, and two database servers. Since we want to be able to scale out at a moment's notice, we need a way to spin up new servers quickly and automatically. Enter SaltStack and DigitalOcean.","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/4413289e7896aff6e20f3f97813062020413c3cf_stack-of-javascript-com.png?auto=compress,format","alt":"Javascript.com","copyright":null,"dimensions":{"width":745,"height":460}},{"type":"paragraph","text":"SaltStack is a configuration management system for servers that lets us configure the following:","spans":[]},{"type":"list-item","text":"Deploy a new DigitalOcean server","spans":[]},{"type":"list-item","text":"Configure the server to run JavaScript.com","spans":[]},{"type":"list-item","text":"Grant access to the database servers","spans":[]},{"type":"list-item","text":"Add the new server to the load balancer so it can start handling requests","spans":[]},{"type":"paragraph","text":"It finishes this provisioning process for a new server in just a few minutes. Our process for code deployments is exactly the same, since SaltStack knows how to ship new code to existing servers as well.","spans":[]},{"type":"paragraph","text":"In order to scale out horizontally, we needed a provider that not only spins up servers very quickly, but can also do so programmatically. DigitalOcean works very well on both fronts, and in multiple locations around the world. If we end up with more traffic than expected, more capacity is just a salt-cloud command away.","spans":[]},{"type":"heading2","text":"Conclusion","spans":[]},{"type":"paragraph","text":"To create a website that's ready to handle a great deal of traffic, you need a detailed plan. Not only do you need a caching layer, but you must also be able to spin up new servers quickly as more uncacheable requests flow in. The first step in this process is separating your stack into layers so that each can scale independently. The second is making use of tools like HAProxy, SaltStack, and DigitalOcean to bring it all together.","spans":[]},{"type":"paragraph","text":"Now that you've read about JavaScript.com's stack, go try it — and feel free to promote your own stack, framework, or library on our community news page.","spans":[{"start":27,"end":41,"type":"hyperlink","data":{"link_type":"Web","url":"http://javascript.com"}}]},{"type":"paragraph","text":"by Thomas Meeks","spans":[{"start":3,"end":15,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/codeschool"}}]}],"blog_post_date":"2015-06-15","tags":[{"tag1":{"tag":"Community","_linkType":"Link.document","_meta":{"uid":"community"}}}],"_meta":{"uid":"guest-post-behind-the-stack-of-javascript-com"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"DigitalOcean","author_image":{"dimensions":{"width":600,"height":600},"alt":"Sammy avatar","copyright":null,"url":"https://images.prismic.io/www-static/a10e3c2eb15b74ee43f872be3044313423b1c9a9_sammy_avatar.png?auto=compress,format"},"_meta":{"uid":"digitalocean"}},"blog_header_image":null,"blog_headline":[{"type":"heading1","text":"Update on CVE-2015-3456, aka the VENOM Security Vulnerability","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"Earlier today, CVE-2015-3456, a security vulnerability also known as VENOM was publicly announced. This bug in KVM/QEMU, our virtualization environment, could potentially exploit a VM's virtual floppy driver as described in detail here and here. DigitalOcean has conducted a thorough audit of our platform and taken steps to mitigate the issue.","spans":[{"start":231,"end":235,"type":"hyperlink","data":{"link_type":"Web","url":"https://access.redhat.com/articles/1444903"}},{"start":240,"end":244,"type":"hyperlink","data":{"link_type":"Web","url":"http://www.ubuntu.com/usn/usn-2608-1/"}}]},{"type":"paragraph","text":"On hypervisors running the latest version of our cloud, the QEMU process is confined by a mandatory access control profile which would prevent a would-be attacker from accessing the host system or other Droplets. We are rolling out updates across all of our infrastructure to ensure the latest QEMU security patches are applied on each server. In addition, we have implemented a number of other security and monitoring features in order to provide early warning of attempts to exploit similar vulnerabilities.","spans":[]},{"type":"paragraph","text":"In order to complete the process of applying the security patches, a small number of our hypervisors will require a reboot. Our team is currently working to schedule this in the least disruptive manner possible. We will keep you posted on our progress.","spans":[]},{"type":"paragraph","text":"If you have any additional questions, please reach out to our support team:","spans":[]},{"type":"paragraph","text":"https://cloud.digitalocean.com/support","spans":[{"start":0,"end":38,"type":"hyperlink","data":{"link_type":"Web","url":"https://cloud.digitalocean.com/support"}}]}],"blog_post_date":"2015-05-12","tags":[{"tag1":{"tag":"Engineering","_linkType":"Link.document","_meta":{"uid":"engineering"}}}],"_meta":{"uid":"update-on-cve-2015-3456"}}}]}}}