{"componentChunkName":"component---src-templates-blog-list-jsx","path":"/blog/20/","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":228,"numPages":33,"currentPage":20,"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":null,"blog_headline":[{"type":"heading1","text":"Update on the April 11th SFO2 Power Outage","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"On April 11th at 06:43 UTC, DigitalOcean's SFO2 region experienced an outage of compute and networking services. The catalyst of this incident was the failure of multiple redundant power distribution units (PDU) within the datacenter. Complications during the recovery effort prolonged the incident and caused intermittent failures of our control panel and API. We'd like to apologize, share more details about exactly what happened, and talk about how we are working to make sure it doesn't happen again.","spans":[]},{"type":"heading2","text":"The Incident","spans":[]},{"type":"paragraph","text":"The initial power loss affected SFO2 including the core networking infrastructure for the region. As power and connectivity were restored, our event processing system was placed under heavy load from the backlog of in-progress events. The database backing this system was unable to support the load of the SFO2 datacenter recovery in addition to our normal operational load from other datacenters. This temporarily disabled our control panel and API. We then proceeded with recovery on multiple fronts.","spans":[]},{"type":"heading2","text":"Timeline of Events","spans":[]},{"type":"paragraph","text":"06:15 UTC - A datacenter-level PDU in the building housing our SFO2 region suffered a critical failure. Hardware automatically began drawing power from a secondary PDU.","spans":[]},{"type":"paragraph","text":"06:40 UTC - The secondary PDU also suffered a failure.","spans":[]},{"type":"paragraph","text":"06:43 UTC - Multiple alerts indicated that SFO2 was unreachable and initial investigations were undertaken by our operations and network engineering teams.","spans":[]},{"type":"paragraph","text":"07:00 UTC - After finding that all circuits in the region were down, we opened a ticket with the facility operator.","spans":[]},{"type":"paragraph","text":"07:49 UTC - A DigitalOcean datacenter engineer arrived and confirmed the power outage.","spans":[]},{"type":"paragraph","text":"08:27 UTC - The facility operations staff arrived and began restoring power to the affected racks.","spans":[]},{"type":"paragraph","text":"09:04 UTC - Recovery commenced and both management servers and hypervisors containing customer Droplets began to come back online.","spans":[]},{"type":"paragraph","text":"09:49 UTC - After an initial \"inception problem\" where portions of our compute infrastructure which were self-hosted couldn't bootstrap themselves, services began to recover.","spans":[]},{"type":"paragraph","text":"09:53 UTC - Customer reports and alerts indicated that our control panel and API had become inaccessible. Our event processing system became overloaded attempting to process the backlog of pending events while also supporting the normal operational load of our other regions. Work commenced to slow-roll activation of services.","spans":[]},{"type":"paragraph","text":"16:32 UTC - All services activated in SFO2 and event processing re-enabled; customers able to start deploying new Droplets. Existing Droplets not yet restarted. Work began to re-start Droplets in controlled way.","spans":[]},{"type":"paragraph","text":"19:43 UTC - 50% of all Droplets restored.","spans":[]},{"type":"paragraph","text":"20:15 UTC - All Droplets and services fully restored.","spans":[]},{"type":"heading2","text":"Future Measures","spans":[]},{"type":"paragraph","text":"There were a number of major issues that contributed to the cause and duration of this outage and we are committed to providing you with the stable and reliable platform you require to launch, scale, and manage your applications.","spans":[]},{"type":"paragraph","text":"During this incident, we were faced with conditions from our provider that were outside of our control. We're working to implement stronger safeguards and validation of our power management system to ensure this power failure does not reoccur.","spans":[]},{"type":"paragraph","text":"In addition, we're conducting a review of our datacenter recovery procedures to ensure that we can move more quickly in the event that we do lose power to an entire facility.","spans":[]},{"type":"paragraph","text":"Finally, we will be adding additional capacity to our event processing system to ensure it is able to sustain significant peaks in load, such as the one that occurred here.","spans":[]},{"type":"heading2","text":"In Conclusion","spans":[]},{"type":"paragraph","text":"We wanted to share the specific details around this incident as quickly and accurately as possible to give you insight into what happened and how we handled it. We recognize this may have had a direct impact on your business and for that we are deeply sorry. We will be issuing SLA credits to affected users, which will be reflected on their May 1st invoice, and we will continue to explore better ways of mitigating future customer impacting events. The entire team at DigitalOcean thanks you for your understanding and patience.","spans":[]}],"blog_post_date":"2017-04-13","tags":[{"tag1":{"tag":"News","_linkType":"Link.document","_meta":{"uid":"news"}}}],"_meta":{"uid":"update-on-the-april-11th-sfo2-power-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":null,"blog_headline":[{"type":"heading1","text":"Update on the April 5th, 2017 Outage","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"Today, DigitalOcean's control panel and API were unavailable for a period of four hours and fifty-six minutes. During this time, all running Droplets continued to function, but no additional Droplets or other resources could be created or managed. We know that you depend on our services, and an outage like this is unacceptable. We would like to apologize and take full responsibility for the situation. The trust you've placed in us is our most important asset, so we'd like to share all of the details about this event.","spans":[]},{"type":"paragraph","text":"At 10:24 AM EDT on April 5th, 2017, we began to receive alerts that our public services were not functioning. Within three minutes of the initial alerts, we discovered that our primary database had been deleted. Four minutes later we commenced the recovery process, using one of our time-delayed database replicas. Over the next four hours, we copied and restored the data to our primary and secondary replicas. The duration of the outage was due to the time it took to copy the data between the replicas and restore it into an active server.","spans":[]},{"type":"paragraph","text":"At 3:20 PM EDT the primary database was completely restored, and no data was lost.","spans":[]},{"type":"heading2","text":"Timeline of Events","spans":[]},{"type":"list-item","text":"T0.00 - 10:24 EDT - First observation of issues","spans":[]},{"type":"list-item","text":"T0.03 - 10:27 EDT - Verified that production database had been deleted on master","spans":[]},{"type":"list-item","text":"T0.10 - 10:34 EDT - Began recovery from time-delayed replica","spans":[]},{"type":"list-item","text":"T1.29 - 11:53 EDT - Backup of time-delayed replica completed","spans":[]},{"type":"list-item","text":"T2.10 - 12:34 EDT - Copy of backup to master completed; recovery commencing","spans":[]},{"type":"list-item","text":"T3.07 - 13:31 EDT - Recovery of master completed; copy of backups to replicas ongoing","spans":[]},{"type":"list-item","text":"T4.56 - 15:20 EDT - All systems restored","spans":[]},{"type":"heading2","text":"Future Measures","spans":[]},{"type":"paragraph","text":"The root cause of this incident was a engineer-driven configuration error. A process performing automated testing was misconfigured using production credentials. As such, we will be drastically reducing access to the primary system for certain actions to ensure this does not happen again.","spans":[]},{"type":"paragraph","text":"As noted above, duration of the incident was primarily influenced by the speed of our network while reloading the data into our database. While it should be a rare occurrence that this type of action would happen again, we are in the process of upgrading our network connectivity between database servers and also updating our hardware to improve the speed of recovery. We expect these improvements to be completed over the next few months.","spans":[]},{"type":"heading2","text":"In Conclusion","spans":[]},{"type":"paragraph","text":"We wanted to share this information with you as soon as possible so that you can understand the nature of the outage and its impact. In the coming days, we will continue to assess further safeguards against developer error, work to improve our processes around data recovery, and explore ways to provide better real time information during future customer impacting events. We take the reliability of our service seriously and are committed to delivering a platform that you can depend on to run your mission-critical applications. The entire team at DigitalOcean thanks you for your understanding and, again, we apologize for the impact of this incident.","spans":[]}],"blog_post_date":"2017-04-04","tags":[{"tag1":{"tag":"News","_linkType":"Link.document","_meta":{"uid":"news"}}}],"_meta":{"uid":"update-on-the-april-5th-2017-outage"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"Ankur Jain","author_image":null,"_meta":{"uid":"ankur_jain"}},"blog_header_image":{"dimensions":{"width":1576,"height":840},"alt":"graphs illustration","copyright":null,"url":"https://images.prismic.io/www-static/5f92538fe55637c159eacdccfd2a120d1c3f1a66_hero.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Introducing Monitoring: Insight into Your Infrastructure","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"Over the lifecycle of your application, knowing when and why an issue in production occurs is critical. At DigitalOcean, we understand this and want to enable developers to make informed decisions about scaling their infrastructure. That's why we are excited to announce our new Monitoring service, available today for free with all Droplets. It gives you the tools to resolve issues quickly by alerting you when one occurs and giving you the information you need to understand it.","spans":[{"start":275,"end":297,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/products/monitoring/"}},{"start":319,"end":323,"type":"strong"}]},{"type":"paragraph","text":"Monitoring the applications you've deployed should be as simple and intuitive as the rest of the DigitalOcean experience. Earlier this year, we released an open source agent and improved graphs that give you a better picture of the health of your Droplets. That was just the first piece of the puzzle. The agent offers greater visibility into your infrastructure, and now Monitoring will let you know when to act on that information.","spans":[{"start":156,"end":193,"type":"hyperlink","data":{"link_type":"Web","url":"https://assets.digitalocean.com/blog/static/improved-graphs/"}}]},{"type":"paragraph","text":"Monitoring is natively integrated with the DigitalOcean platform and can be enabled at no extra cost by simply checking a box when creating your Droplets. It introduces new alerting capabilities using the metrics collected by the agent, allowing your team to receive email or Slack notifications based on the resource utilization and operational health of your Droplets.","spans":[]},{"type":"heading2","text":"View Graphs & Statistics","spans":[]},{"type":"paragraph","text":"The Monitoring service exposes system metrics and provides an overview of your Droplets' health. The metrics are collected at one-minute intervals and the data is retained for a month, enabling you to view both up-to-the-minute and historical data. The improved Droplet graphs allow you to visualize how your instances are performing over time.","spans":[]},{"type":"paragraph","text":"The following metrics are currently available:","spans":[]},{"type":"list-item","text":"CPU","spans":[]},{"type":"list-item","text":"Disk I/O","spans":[]},{"type":"list-item","text":"Memory","spans":[]},{"type":"list-item","text":"Disk usage","spans":[]},{"type":"list-item","text":"Inbound and outbound bandwidth","spans":[]},{"type":"list-item","text":"A process list ordered by CPU or memory usage","spans":[]},{"type":"heading2","text":"Create Alert Policies","spans":[]},{"type":"paragraph","text":"You can create alert policies on any of your metrics to receive notifications when the metric crosses your specified threshold. An alert policy monitors a single metric over a time period you specify. Alerts are triggered when the state is above or below your threshold for the specified time period. You can leverage DigitalOcean tags to group your Droplets based on your project or environment. Then you can apply the alert policy to specific Droplets or groups of tagged Droplets.","spans":[{"start":309,"end":335,"type":"hyperlink","data":{"link_type":"Web","url":"https://assets.digitalocean.com/blog/static/droplet-tagging-organize-your-infrastructure/"}}]},{"type":"paragraph","text":"Alert policies can be created from the Monitoring tab in the DigitalOcean control panel:","spans":[{"start":35,"end":53,"type":"hyperlink","data":{"link_type":"Web","url":"https://cloud.digitalocean.com/monitors/new"}}]},{"type":"image","url":"https://images.prismic.io/www-static/02a1b56ef16a17f97bc3c801c87d21a95def9708_monitoring_create_page.png?auto=compress,format","alt":"Create alert","copyright":null,"dimensions":{"width":1045,"height":670}},{"type":"paragraph","text":"You can find more information about creating alert policies in this tutorial on the DigitalOcean Community site.","spans":[{"start":63,"end":111,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/how-to-set-up-alerts-with-digitalocean-monitoring"}}]},{"type":"heading2","text":"Configure Notifications","spans":[]},{"type":"paragraph","text":"When you set up an alert policy, you will be able to choose between two notification methods:","spans":[]},{"type":"list-item","text":"Slack Alerts — Post to your team's Slack channel when a new alert is triggered.","spans":[{"start":0,"end":12,"type":"strong"}]},{"type":"list-item","text":"Email Notifications — Send emails when a new alert alert is triggered.","spans":[{"start":0,"end":19,"type":"strong"}]},{"type":"image","url":"https://images.prismic.io/www-static/15b363b051cbfba0b54112283e9851990f55d96f_slack.png?auto=compress,format","alt":"Slack notifications","copyright":null,"dimensions":{"width":653,"height":316}},{"type":"paragraph","text":"You'll receive notifications both when an alert threshold has been exceeded and when the issue has been resolved.","spans":[]},{"type":"heading2","text":"Getting Started","spans":[]},{"type":"paragraph","text":"To enable Monitoring on your Droplets, you'll need to have the agent installed. On new Droplets, it's as simple as clicking the Monitoring checkbox during Droplet creation.","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/20d26efd02e34c10a7796f68047a9ab47e17369b_select_monitoring.png?auto=compress,format","alt":"Enable monitoring","copyright":null,"dimensions":{"width":734,"height":125}},{"type":"paragraph","text":"On existing Droplets, you can install the agent by running:","spans":[]},{"type":"preformatted","text":"curl -sSL https://agent.digitalocean.com/install.sh | sh\n","spans":[]},{"type":"paragraph","text":"Find more information on the agent itself in this tutorial on the DigitalOcean Community site.","spans":[{"start":45,"end":93,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/how-to-install-and-use-the-digitalocean-agent-for-additional-droplet-graphs"}}]},{"type":"heading2","text":"Coming Soon","spans":[]},{"type":"paragraph","text":"With the first iteration of our Monitoring service out the door, we're already working on what's next. Some features you will see soon include:","spans":[]},{"type":"list-item","text":"API support for alert policies","spans":[]},{"type":"list-item","text":"Enhanced visualization of alerts","spans":[]},{"type":"list-item","text":"Monitoring for Block Storage","spans":[]},{"type":"list-item","text":"Webhooks to notify external services about alerts","spans":[]},{"type":"paragraph","text":"From alerting on issues to visualizing metrics, we want to provide you with the tools you need to monitor the health and performance of your applications in production. We'd love to hear your feedback. What metrics are important for your team? How can we help integrate Monitoring into your workflow? Let us know in the comments or submit a suggestion on our UserVoice page.","spans":[{"start":359,"end":373,"type":"hyperlink","data":{"link_type":"Web","url":"https://digitalocean.uservoice.com"}}]}],"blog_post_date":"2017-04-04","tags":[{"tag1":{"tag":"Product Updates","_linkType":"Link.document","_meta":{"uid":"product-updates"}}}],"_meta":{"uid":"introducing-monitoring"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"Rafael Rosa","author_image":{"dimensions":{"width":250,"height":250},"alt":"Rafael Rosa","copyright":null,"url":"https://images.prismic.io/www-static/6326cb734e557630247062ec390166664f5d3b63_77d07a0ba7bc27b40afc8f5932c57417.png?auto=compress,format"},"_meta":{"uid":"rafael_rosa"}},"blog_header_image":{"dimensions":{"width":800,"height":400},"alt":null,"copyright":null,"url":"https://images.prismic.io/www-static/02bf5d30-c2bb-4407-827d-aa35e0276491_moreways.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"More Ways to Work with Load Balancers","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"When building new products at DigitalOcean, one of our goals is to ensure that they're simple to use and developer friendly. And that goes beyond the control panel; we aim to provide intuitive APIs and tools for each of our products. Since the release of Load Balancers last month, we've worked to incorporate them into our API client libraries and command line client. We've also seen community-supported open source projects extended to support Load Balancers.","spans":[]},{"type":"paragraph","text":"Today, we want to share several new ways you can interact with Load Balancers.","spans":[]},{"type":"heading2","text":"Command Line: doctl","spans":[]},{"type":"paragraph","text":"doctl is our easy-to-use, official command line client. Load Balancer support landed in version v1.6.0. You can download the release from GitHub or install it using Homebrew on Mac:","spans":[]},{"type":"paragraph","text":"   ```[php]{` brew install doctl `}```","spans":[]},{"type":"paragraph","text":"You can use doctl for anything you can do in our control panel. For example, here's how you would create a Load Balancer:","spans":[]},{"type":"preformatted","text":"```[php]{`","spans":[]},{"type":"paragraph","text":"    doctl compute load-balancer create --name \"example-01\" \\","spans":[]},{"type":"paragraph","text":"        --region \"nyc3\" --tag-name \"web:prod\" \\","spans":[]},{"type":"paragraph","text":"        --algorithm \"round_robin\" \\","spans":[]},{"type":"paragraph","text":"        --forwarding-rules \\","spans":[]},{"type":"paragraph","text":"        \"entry_protocol:http,entry_port:80,target_protocol:http,target_port:80\"","spans":[]},{"type":"paragraph","text":"    `}```","spans":[]},{"type":"paragraph","text":"Find doctl's full documentation in this DigitalOcean tutorial.","spans":[{"start":35,"end":61,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/how-to-use-doctl-the-official-digitalocean-command-line-client"}}]},{"type":"heading2","text":"Go: godo","spans":[]},{"type":"paragraph","text":"We're big fans of Go, and godo is the way to interact with DigitalOcean using Go. Load Balancer support is included in the recently tagged v1.0.0 release. Here's an example:","spans":[{"start":139,"end":153,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/digitalocean/godo/releases/tag/v1.0.0"}}]},{"type":"preformatted","text":"```[php]{`","spans":[]},{"type":"paragraph","text":"    createRequest := &godo.LoadBalancerRequest{","spans":[]},{"type":"paragraph","text":"        Name:      \"example-01\",","spans":[]},{"type":"paragraph","text":"        Algorithm: \"round_robin\",","spans":[]},{"type":"paragraph","text":"        Region:    \"nyc3\",","spans":[]},{"type":"paragraph","text":"        ForwardingRules: []godo.ForwardingRule{","spans":[]},{"type":"paragraph","text":"            {","spans":[]},{"type":"paragraph","text":"                EntryProtocol:  \"http\",","spans":[]},{"type":"paragraph","text":"                EntryPort:      80,","spans":[]},{"type":"paragraph","text":"                TargetProtocol: \"http\",","spans":[]},{"type":"paragraph","text":"                TargetPort:     80,","spans":[]},{"type":"paragraph","text":"            },","spans":[]},{"type":"paragraph","text":"        },","spans":[]},{"type":"paragraph","text":"        HealthCheck: &godo.HealthCheck{","spans":[]},{"type":"paragraph","text":"            Protocol:               \"http\",","spans":[]},{"type":"paragraph","text":"            Port:                   80,","spans":[]},{"type":"paragraph","text":"            Path:                   \"/\",","spans":[]},{"type":"paragraph","text":"            CheckIntervalSeconds:   10,","spans":[]},{"type":"paragraph","text":"            ResponseTimeoutSeconds: 5,","spans":[]},{"type":"paragraph","text":"            HealthyThreshold:       5,","spans":[]},{"type":"paragraph","text":"            UnhealthyThreshold:     3,","spans":[]},{"type":"paragraph","text":"        },","spans":[]},{"type":"paragraph","text":"        StickySessions: &godo.StickySessions{","spans":[]},{"type":"paragraph","text":"            Type: \"none\",","spans":[]},{"type":"paragraph","text":"        },","spans":[]},{"type":"paragraph","text":"        Tag:                 \"web:prod\",","spans":[]},{"type":"paragraph","text":"        RedirectHttpToHttps: false,","spans":[]},{"type":"paragraph","text":"    }","spans":[]},{"type":"paragraph","text":"    ","spans":[]},{"type":"paragraph","text":"    lb, _, err := client.LoadBalancers.Create(ctx, createRequest)","spans":[]},{"type":"paragraph","text":"    `}```","spans":[]},{"type":"paragraph","text":"The library's full documentation is available on GoDoc.","spans":[{"start":36,"end":54,"type":"hyperlink","data":{"link_type":"Web","url":"https://godoc.org/github.com/digitalocean/godo"}}]},{"type":"heading2","text":"Ruby: droplet_kit","spans":[]},{"type":"paragraph","text":"droplet_kit is our Ruby API client library. Version 2.1.0 has Load Balancer support and is now available on Rubygems. You can install it with this command:","spans":[{"start":44,"end":57,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/digitalocean/droplet_kit/releases/tag/v2.1.0"}},{"start":108,"end":116,"type":"hyperlink","data":{"link_type":"Web","url":"https://rubygems.org/gems/droplet_kit/versions/2.1.0"}}]},{"type":"paragraph","text":"   ```[php]{` gem install droplet_kit `}```","spans":[]},{"type":"paragraph","text":"And you can create a new Load Balancer like so:","spans":[]},{"type":"preformatted","text":"```[php]{`","spans":[]},{"type":"paragraph","text":"    load_balancer = DropletKit::LoadBalancer.new(","spans":[]},{"type":"paragraph","text":"      name: 'example-lb-001',","spans":[]},{"type":"paragraph","text":"      algorithm: 'round_robin',","spans":[]},{"type":"paragraph","text":"      tag: 'web:prod',","spans":[]},{"type":"paragraph","text":"      redirect_http_to_https: true,","spans":[]},{"type":"paragraph","text":"      region: 'nyc3',","spans":[]},{"type":"paragraph","text":"      forwarding_rules: [","spans":[]},{"type":"paragraph","text":"        DropletKit::ForwardingRule.new(","spans":[]},{"type":"paragraph","text":"          entry_protocol: 'http',","spans":[]},{"type":"paragraph","text":"          entry_port: 80,","spans":[]},{"type":"paragraph","text":"          target_protocol: 'http',","spans":[]},{"type":"paragraph","text":"          target_port: 80,","spans":[]},{"type":"paragraph","text":"          certificate_id: '',","spans":[]},{"type":"paragraph","text":"          tls_passthrough: false","spans":[]},{"type":"paragraph","text":"        )","spans":[]},{"type":"paragraph","text":"      ],","spans":[]},{"type":"paragraph","text":"      sticky_sessions: DropletKit::StickySession.new(","spans":[]},{"type":"paragraph","text":"        type: 'none',","spans":[]},{"type":"paragraph","text":"        cookie_name: '',","spans":[]},{"type":"paragraph","text":"        cookie_ttl_seconds: nil","spans":[]},{"type":"paragraph","text":"      ),","spans":[]},{"type":"paragraph","text":"      health_check: DropletKit::HealthCheck.new(","spans":[]},{"type":"paragraph","text":"        protocol: 'http',","spans":[]},{"type":"paragraph","text":"        port: 80,","spans":[]},{"type":"paragraph","text":"        path: '/',","spans":[]},{"type":"paragraph","text":"        check_interval_seconds: 10,","spans":[]},{"type":"paragraph","text":"        response_timeout_seconds: 5,","spans":[]},{"type":"paragraph","text":"        healthy_threshold: 5,","spans":[]},{"type":"paragraph","text":"        unhealthy_threshold: 3","spans":[]},{"type":"paragraph","text":"      )","spans":[]},{"type":"paragraph","text":"    )","spans":[]},{"type":"paragraph","text":"    ","spans":[]},{"type":"paragraph","text":"    client.load_balancers.create(load_balancer)","spans":[]},{"type":"paragraph","text":"`}```    ","spans":[]},{"type":"heading2","text":"Community Supported","spans":[]},{"type":"paragraph","text":"Besides our official open source projects, there are two community contributions we'd like to highlight:","spans":[]},{"type":"paragraph","text":"- ","spans":[]},{"type":"paragraph","text":"HashiCorp's declarative infrastructure tool, Terraform, added the digitalocean_loadbalancer resource shortly after the launch of Load Balancers. It's now available in their v0.8.8 release.","spans":[{"start":0,"end":11,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.hashicorp.com/"}},{"start":45,"end":54,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.terraform.io/"}},{"start":173,"end":187,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/hashicorp/terraform/releases/tag/v0.8.8"}}]},{"type":"paragraph","text":"- ","spans":[]},{"type":"paragraph","text":"Lorenzo Setale's Python API client library, python-digitalocean, shipped Load Balancer support in yesterday's v1.11 release. It can be installed using PIP: `pip install -U python-digitalocean`","spans":[{"start":0,"end":16,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/koalalorenzo"}},{"start":44,"end":63,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/koalalorenzo/python-digitalocean"}}]},{"type":"paragraph","text":"Thanks to our colleagues Viola and Andrew for working on these features, and the open source community for including Load Balancer support in their projects. In particular, we want to give a special shout out to Paul Stack and the rest of our friends at HashiCorp who added support to Terraform so quickly. You rock!","spans":[{"start":25,"end":30,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/viola"}},{"start":35,"end":41,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/andrewsomething"}},{"start":212,"end":222,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/stack72"}}]},{"type":"paragraph","text":"We're excited to see more tools add Load Balancer support. If you're the maintainer of a project that has added support, Tweet us @digitalocean. We can help spread the word!","spans":[{"start":130,"end":143,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/digitalocean"}}]},{"type":"paragraph","text":"Rafael Rosa","spans":[]},{"type":"paragraph","text":"Product Manager, High Availability","spans":[]}],"blog_post_date":"2017-03-15","tags":[{"tag1":{"tag":"Product Updates","_linkType":"Link.document","_meta":{"uid":"product-updates"}}}],"_meta":{"uid":"more-ways-to-work-with-load-balancers"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"Nick Vigier","author_image":null,"_meta":{"uid":"nick_vigier"}},"blog_header_image":null,"blog_headline":[{"type":"heading1","text":"DigitalOcean, Your Data, and the Cloudflare Vulnerability","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"Over the course of the last several hours, we have received a number of inquiries about the Cloudflare vulnerability reported on February 23, 2017. Since the information release, we have been told by Cloudflare that none of our customer data has appeared in search caches. The DigitalOcean security team has done its own research into the issue, and we have not found any customer data present in the breach.","spans":[{"start":92,"end":116,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.cloudflare.com/incident-report-on-memory-leak-caused-by-cloudflare-parser-bug/"}}]},{"type":"paragraph","text":"Out of an abundance of caution, DigitalOcean's engineering teams have reset all session tokens for our users, which will require that you log in again.","spans":[]},{"type":"paragraph","text":"We recommend that you do the following to further protect your account:","spans":[]},{"type":"list-item","text":"Update your password","spans":[]},{"type":"list-item","text":"Rotate your API tokens","spans":[]},{"type":"list-item","text":"Take the opportunity to turn on Two-Factor Authentication (we posted a blog entry earlier this week about our improved process)","spans":[{"start":71,"end":81,"type":"hyperlink","data":{"link_type":"Web","url":"https://assets.digitalocean.com/blog/static/updates-to-digitalocean-two-factor-authentication/"}}]},{"type":"paragraph","text":"Again, we would like to reiterate that there is no evidence that any customer data has been exposed as a result of this vulnerability, but we care about your security. So we are therefore taking this precaution as well as continuing to monitor the situation.","spans":[]},{"type":"paragraph","text":"Nick Vigier, Director of Security","spans":[]}],"blog_post_date":"2017-02-24","tags":[{"tag1":{"tag":"Engineering","_linkType":"Link.document","_meta":{"uid":"engineering"}}}],"_meta":{"uid":"digitalocean-your-data-and-the-cloudflare-vulnerability"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"Josh Viney","author_image":{"dimensions":{"width":250,"height":250},"alt":"Josh Viney","copyright":null,"url":"https://images.prismic.io/www-static/a2f3442df272c869c0482d6e5ecc23d3fbc6baf1_f2e1ef84a186a79c8c642193dbbed89f.jpg?auto=compress,format"},"_meta":{"uid":"josh_viney"}},"blog_header_image":{"dimensions":{"width":1024,"height":512},"alt":"QR code illustration","copyright":null,"url":"https://images.prismic.io/www-static/206b5d62f10af1781a7b7d02e8ae1010ab70edf7_hero.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Updates to DigitalOcean Two-factor Authentication","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"Today we'd like to talk about security.","spans":[]},{"type":"paragraph","text":"We know how challenging it can be to balance security and usability. The user experience around security features can often feel like an afterthought, but we believe that shouldn't be the case. Usability is just as important when it comes to security as any other part of your product because added friction can lead users to make less-secure choices. Today, we want to share with you some updates we rolled out this week to our two-factor login features to make them easier to use.","spans":[]},{"type":"paragraph","text":"Our previous version required both SMS and an authenticator app to enable two-factor authentication. While SMS can work in a crunch, it's no longer as secure as it once was, delivery for our international customers wasn't always reliable, and tying both methods for authentication to the same mobile device definitely wasn't a great experience for anyone whose phone was unavailable.","spans":[]},{"type":"paragraph","text":"Our new two-factor authentication features allow developers to choose between an authenticator app or SMS as a primary method, and between downloadable codes, authenticator app, or SMS as backup methods. This way SMS stays an option, but isn't a necessary part of securing access to your DigitalOcean account.","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/28746e7048d223ffd3250964c499a06d1af6bea8_2fa-add-backup-method.png?auto=compress,format","alt":"Add backup methods","copyright":null,"dimensions":{"width":1082,"height":661}},{"type":"paragraph","text":"To take a look at the changes and enable it on your account, simply navigate to Settings and click the link in your profile to \"Enable two-factor authentication.\"","spans":[{"start":128,"end":160,"type":"hyperlink","data":{"link_type":"Web","url":"https://cloud.digitalocean.com/settings/security"}}]},{"type":"image","url":"https://images.prismic.io/www-static/Nzc1ODNlODQtMTJjOC00ZmYwLWE1MjAtMDI4NTc2OGY5MGU5_settings-2fa.gif?auto=compress,format","alt":"Enable two-factor authentication","copyright":null,"dimensions":{"width":1108,"height":628}},{"type":"paragraph","text":"Making two-factor authentication a little easier and more broadly available is just a first step. We believe securing access to your infrastructure should be as simple as it is to spin up a few Droplets and a Load Balancer.","spans":[]},{"type":"paragraph","text":"Do you have any suggestions for how we can help make security easier? We want to hear from you. We're already considering features like YubiKey support. What else would you like to see?  Please reach out to us on our UserVoice or let us know in the comments below.","spans":[{"start":136,"end":143,"type":"hyperlink","data":{"link_type":"Web","url":"https://en.wikipedia.org/wiki/YubiKey"}},{"start":217,"end":226,"type":"hyperlink","data":{"link_type":"Web","url":"https://digitalocean.uservoice.com"}}]},{"type":"paragraph","text":"Nick Vigier - Director of Security","spans":[]},{"type":"paragraph","text":"Josh Viney - Product Manager, Customer Experience","spans":[]}],"blog_post_date":"2017-02-23","tags":[{"tag1":{"tag":"Product Updates","_linkType":"Link.document","_meta":{"uid":"product-updates"}}}],"_meta":{"uid":"updates-to-digitalocean-two-factor-authentication"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"Rafael Rosa","author_image":{"dimensions":{"width":250,"height":250},"alt":"Rafael Rosa","copyright":null,"url":"https://images.prismic.io/www-static/6326cb734e557630247062ec390166664f5d3b63_77d07a0ba7bc27b40afc8f5932c57417.png?auto=compress,format"},"_meta":{"uid":"rafael_rosa"}},"blog_header_image":{"dimensions":{"width":785,"height":418},"alt":"Droplets illustration","copyright":null,"url":"https://images.prismic.io/www-static/f8c7101d73d1abaa03a00e01bc28a5d1d6eb4abf_hero.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Load Balancers: Simplifying High Availability","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"Over the past five years, we've seen our community grow by leaps and bounds, and we've grown right alongside it. More and more of our users are managing complex workloads that require more resilience and need to be highly available. Our Floating IPs already enable you to implement an architecture that eliminates single points of failure, but we knew we could do better by bringing our \"DO-Simple\" approach to the problem.","spans":[{"start":237,"end":249,"type":"hyperlink","data":{"link_type":"Web","url":"https://assets.digitalocean.com/blog/static/floating-ips-start-architecting-your-applications-for-high-availability/"}}]},{"type":"paragraph","text":"So today, we are releasing Load Balancers—a fully managed, highly available service that you can deploy as easily as a Droplet.","spans":[{"start":27,"end":41,"type":"strong"}]},{"type":"paragraph","text":"Our goal is to provide simple and intuitive tools that let your team launch, scale, and manage production applications of any size. With our Load Balancers, just choose a region and which Droplets will receive the traffic. We take care of the rest.","spans":[]},{"type":"paragraph","text":"Load Balancers cost $10/month [note: edited November 5, 2018, from $20/month] with no additional bandwidth charges and are available in all DigitalOcean regions.","spans":[{"start":20,"end":29,"type":"strong"}]},{"type":"heading2","text":"Features","spans":[]},{"type":"list-item","text":"Load balance TCP, HTTP, and HTTPS workloads within a specific DigitalOcean region.","spans":[]},{"type":"list-item","text":"When using HTTPS, you can either terminate SSL on our Load Balancer or choose to use a passthrough mode.","spans":[]},{"type":"list-item","text":"Choose your balancing algorithm and configure custom health checks, or use our defaults.","spans":[]},{"type":"list-item","text":"Track Load Balancer usage and troubleshoot problems using the integrated graphs and metrics.","spans":[]},{"type":"list-item","text":"Manage your Load Balancers using our web dashboard or APIs.","spans":[{"start":54,"end":58,"type":"hyperlink","data":{"link_type":"Web","url":"https://developers.digitalocean.com/documentation/v2/#load-balancers"}}]},{"type":"paragraph","text":"For more details, see this overview on our Community site.","spans":[{"start":22,"end":35,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/an-introduction-to-digitalocean-load-balancers"}}]},{"type":"heading3","text":"Simplified Service Discovery","spans":[]},{"type":"paragraph","text":"Your Load Balancer will distribute incoming traffic across your Droplets, allowing you to build more reliable and performant applications by creating redundancy. You can add target Droplets to a Load Balancer by either choosing specific Droplets, or choosing a tag used by a group of Droplets.","spans":[]},{"type":"paragraph","text":"With tags, scaling your application horizontally becomes easy. Launch a new Droplet with the tag applied, and it will be automatically added to your Load Balancer's backend pool, ready to receive traffic. Remove the tag, and the Droplet will be removed from the backend pool.","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/4d5d954b159ec8c42fc8a41d5b2b4787d9a34b8c_control-panel.png?auto=compress,format","alt":"Control panel","copyright":null,"dimensions":{"width":934,"height":927}},{"type":"paragraph","text":"Get started by following this step-by-step guide on our Community site.","spans":[{"start":30,"end":48,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/how-to-create-your-first-digitalocean-load-balancer"}}]},{"type":"heading3","text":"Security & SSL Options","spans":[]},{"type":"paragraph","text":"We didn't forget about security! Here's how Load Balancers' measure up:","spans":[]},{"type":"list-item","text":"HTTPS configuration that gives you Grade A security out of the box.","spans":[{"start":35,"end":51,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.ssllabs.com/ssltest/analyze.html"}}]},{"type":"list-item","text":"Uploaded SSL certificates are placed in a fully encrypted, isolated, and secure storage system.","spans":[]},{"type":"list-item","text":"Load Balancer logs aren't stored anywhere on our systems (only metrics for troubleshooting).","spans":[]},{"type":"list-item","text":"Provisioning and operation of our Load Balancers is fully automated; there's no human interaction.","spans":[]},{"type":"paragraph","text":"If you're configuring a Load Balancer instance to use SSL termination, keep in mind that any Droplet using Shared Private Networking connected to the Load Balancer will have traffic sent to its private IP. Otherwise, it will use the Droplet's public IP. (For full control and end-to-end encryption, choose the \"SSL passthrough\" option.)","spans":[]},{"type":"paragraph","text":"Learn more about configuring either SSL termination or SSL passthrough with our Community tutorials.","spans":[{"start":36,"end":51,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/how-to-configure-ssl-termination-on-digitalocean-load-balancers"}},{"start":55,"end":70,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/how-to-configure-ssl-passthrough-on-digitalocean-load-balancers"}}]},{"type":"heading2","text":"Coming Soon","spans":[]},{"type":"paragraph","text":"We already have many Load Balancer improvements planned. Some features you will see soon include:","spans":[]},{"type":"list-item","text":"Support for Load Balancers in our Ruby and Go libraries as well as our command-line client, doctl.","spans":[{"start":34,"end":38,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/digitalocean/droplet_kit"}},{"start":43,"end":45,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/digitalocean/godo"}},{"start":92,"end":97,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/digitalocean/doctl"}}]},{"type":"list-item","text":"Integration with Let's Encrypt for provisioning and deploying free TLS certificates with ease.","spans":[{"start":17,"end":30,"type":"hyperlink","data":{"link_type":"Web","url":"https://letsencrypt.org/"}}]},{"type":"list-item","text":"Alerting on Load Balancer metrics with our upcoming Monitoring solution.","spans":[{"start":52,"end":62,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/products/monitoring/"}}]},{"type":"list-item","text":"Improved integration with DNS records managed by DigitalOcean.","spans":[]},{"type":"list-item","text":"Improved controls for rolling deployments.","spans":[]},{"type":"list-item","text":"Load Balancers that work across nearby datacenters.","spans":[]},{"type":"list-item","text":"IPv6 support.","spans":[]},{"type":"paragraph","text":"Load Balancers are just the beginning. Our 2017 roadmap is focused on bringing the \"DO-Simple\" experience to more complex, production workloads. Your feedback will help us as we improve Load Balancers and roll out more features, including new storage, security, and networking capabilities. Let us know what you think in the comments!","spans":[{"start":43,"end":55,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/2017-whats-shipping-next-on-digitalocean/"}}]}],"blog_post_date":"2017-02-14","tags":[{"tag1":{"tag":"Product Updates","_linkType":"Link.document","_meta":{"uid":"product-updates"}}}],"_meta":{"uid":"load-balancers-simplifying-high-availability"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"Julia Austin","author_image":null,"_meta":{"uid":"julia_austin"}},"blog_header_image":{"dimensions":{"width":1024,"height":512},"alt":"cruise ship illustration ","copyright":null,"url":"https://images.prismic.io/www-static/a77a8855beb861806f5675788706473dd0cbe3fc_hero-1.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"2017: What's Shipping Next on DigitalOcean","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"The start of a new year is a great opportunity to reflect on the past twelve months. At the beginning of 2016, I began advising the team at DigitalOcean and I knew the company and the products were something special. I joined DigitalOcean as the CTO in June 2016 and our engineering team was scaling rapidly, teams were organizing around new product initiatives, and we were gearing up for the second product to be shipped in our company's history: Block Storage.","spans":[{"start":449,"end":462,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/products/storage/"}}]},{"type":"paragraph","text":"Going from one great product to two in 2016 was a major shift for DigitalOcean and the start of what's going to be an exciting year of new capabilities to support larger production workloads in 2017.","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/1f7dbe26e1c7f71eac10ee845433b07722704a41_2016_in_review.png?auto=compress,format","alt":"2016 achievements","copyright":null,"dimensions":{"width":1024,"height":1005}},{"type":"heading2","text":"The \"DO-Simple\" Way","spans":[]},{"type":"paragraph","text":"In the coming year, we are not only strengthening the foundation of our platform to increase performance and enable our customers to scale, we are also broadening our product portfolio to offer services we know teams of developers need. However, we are not just bringing new products and features to market; we are ensuring that what we offer maintains the \"DO-Simple\" standard that our customers expect and appreciate.","spans":[{"start":308,"end":418,"type":"strong"}]},{"type":"paragraph","text":"What does DO-Simple mean? At DigitalOcean, we are committed to sticking to our mission to simplify infrastructure and create an experience that developers love. We are challenging the status quo and disrupting the way developers think about using the cloud. This is an exciting chapter for our company and something we believe sets us apart in the market. We want developers to focus on building their applications, not waste time and money on setting up, configuring, and monitoring. Writing great software is hard. The cloud that software runs on should be easy.","spans":[{"start":90,"end":159,"type":"strong"}]},{"type":"heading2","text":"2017 Product Horizon","spans":[]},{"type":"paragraph","text":"With distributed systems spread over thousands of servers in 12 datacenters across the world, we have valuable operational knowledge on managing infrastructure at scale. We believe our users can leverage the work we do in-house to manage their own infrastructure. Just this month, we released an open source agent that lets developers get a better picture of the health of their Droplets. We also added several new graphs to the Droplet graphs page and made the existing graphs much more precise. Having visibility into your infrastructure is only the first step, knowing when to act on that information is just as important. That's why later this quarter, we will be releasing additional monitoring capabilities and tools to better manage your Droplets in the DO-Simple way you expect. (Learn more about Monitoring on DigitalOcean.)","spans":[{"start":296,"end":313,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/improved-graphs/"}},{"start":805,"end":831,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/products/monitoring/"}}]},{"type":"paragraph","text":"As we approach one million registered users and more than 40,000 teams of developers over the last 5 years, it is critical that we give our users the tools, scale and performance that are required to seamlessly launch, scale and manage any size production application. We have more and more customers managing complex workloads and large environments on DigitalOcean that would benefit from a Load Balancer. You can now request early access to Load Balancers on DigitalOcean here.","spans":[{"start":475,"end":479,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/products/load-balancer/"}}]},{"type":"paragraph","text":"We aren't stopping at just adding load balancing to our offerings in 2017. We have a number of important capabilities we're working on to to meet your high availability, data storage, security, and networking needs. Additionally, we will continue to iterate and invest in our Block Storage offering by making it available in more datacenter locations around the world.","spans":[{"start":151,"end":192,"type":"strong"},{"start":198,"end":208,"type":"strong"}]},{"type":"heading2","text":"Feedback Matters","spans":[]},{"type":"paragraph","text":"We believe in building a customer-first organization that is committed to transparency. Therefore, I will continue to share more updates to our roadmap throughout the year. We have an iterative product development approach and engage our customers in many ways as part of the product prioritization and design process. The developer's voice matters at DigitalOcean. We don't assume that we have all the answers. Talking with and listening to the people who use our cloud day in and day out plays a major role in creating the simple and intuitive developer experience we strive to maintain. In the months to come, we will be engaging our customers through each product beta and general release.","spans":[]},{"type":"paragraph","text":"Excited about what's coming? Have ideas about what we should do next? Share your thoughts with us in the comments below.","spans":[]},{"type":"paragraph","text":"Happy coding,","spans":[]},{"type":"paragraph","text":"Julia Austin, CTO","spans":[{"start":0,"end":12,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/austinfish"}}]}],"blog_post_date":"2017-01-18","tags":[{"tag1":{"tag":"Product Updates","_linkType":"Link.document","_meta":{"uid":"product-updates"}}}],"_meta":{"uid":"2017-whats-shipping-next-on-digitalocean"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"Carlos Amedee","author_image":null,"_meta":{"uid":"carlos_amedee"}},"blog_header_image":{"dimensions":{"width":784,"height":418},"alt":null,"copyright":null,"url":"https://images.prismic.io/www-static/35ccb43c-b8b9-4db4-be5f-4386480ab857_improved.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Improved Graphs: Powered by the Open Source DO Agent","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"At DigitalOcean, we want to make monitoring the services you've deployed simple and easy. As engineers, we know that having greater insight into the machines running in your fleet increases the speed at which you can troubleshoot issues.","spans":[]},{"type":"paragraph","text":"That's why we're excited to launch new and improved memory and disk space graphs! We've gathered the knowledge that we've learned involving telemetry and performance observability and poured it into an open-source project called `do-agent`. This monitoring application helps you get a better picture of the health of your Droplets by adding several new graphs to the Droplet graphs page and making the existing graphs much more precise.","spans":[{"start":199,"end":239,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/digitalocean/do-agent"}}]},{"type":"image","url":"https://images.prismic.io/www-static/2e45601f-e327-4e48-a40e-d901d5af28c6_graphs.png?auto=compress,format","alt":"new graphs","copyright":null,"dimensions":{"width":850,"height":1100}},{"type":"paragraph","text":"To get these graphs, you'll need to have the new agent. On new Droplets, just click the **Monitoring** checkbox during Droplet creation.","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/e0f707a0-1a20-4636-b756-8478f2c1155f_select_monitoring.png?auto=compress,format","alt":"select monitoring","copyright":null,"dimensions":{"width":734,"height":125}},{"type":"paragraph","text":"On existing Droplets, you can install the agent by running:","spans":[]},{"type":"paragraph","text":"    ```[php]{`curl -sSL https://agent.digitalocean.com/install.sh | sh`}```","spans":[]},{"type":"paragraph","text":"Or get all the details in this tutorial on the DigitalOcean community site.","spans":[{"start":47,"end":74,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/how-to-install-and-use-the-digitalocean-agent-for-additional-droplet-graphs"}}]},{"type":"heading2","text":"How Does do-agent Work?","spans":[]},{"type":"paragraph","text":"`do-agent` is a lightweight application which runs on Droplets and periodically collects system performance/state metrics. The collected metrics are immediately transmitted to the monitoring API endpoints and made available to you via the Droplet graphs page.","spans":[]},{"type":"paragraph","text":"When we began thinking of `do-agent`, security was one of our top priorities; we wanted to take great care not to collect any data that may be considered private. How could we collect the metrics we felt were necessary with an agent that would require the minimum amount of resources and security privileges?","spans":[]},{"type":"paragraph","text":"We chose to collect system information from the `/proc` pseudo filesystem, which contains everything from CPU metrics to Linux kernel versions. In true Unix fashion, `/proc` presents system information laid out as files on the filesystem; the hierarchy determines the information you are attempting to access. The greatest benefit we gain from using `/proc` is the ability to access this information as a very low-privileged user.","spans":[]},{"type":"paragraph","text":"The `/proc` files are read and converted into metrics that are transmitted via gRPC to a metrics endpoint. The agent authenticates as belonging to your Droplet and tags all of your data with the Droplet ID.","spans":[]},{"type":"heading2","text":"What's Next?","spans":[]},{"type":"paragraph","text":"This new agent opens up many possibilities for future tools that will provide insight into Droplet performance. We're not stopping here! Currently, we're working on a suite of tools which will enable engineers to collectively monitor groups of Droplets instead of individual Droplets.","spans":[{"start":167,"end":181,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/products/monitoring/"}}]},{"type":"paragraph","text":"`do-agent` also has a plugin architecture built in. We don't have any plugins written yet, but this architecture enables us to create them to observe more than just Droplet metrics; you could potentially collect other software performance metrics running on or alongside your software.","spans":[]},{"type":"paragraph","text":"The Prometheus project was a great inspiration and model for this project (and is used in the agent itself), and the ability for you to install plugins to collect arbitrary metrics was inspired by the Munin open-source project. `do-agent` is itself open source, and we welcome contributions!","spans":[{"start":4,"end":22,"type":"hyperlink","data":{"link_type":"Web","url":"https://prometheus.io/"}},{"start":201,"end":206,"type":"hyperlink","data":{"link_type":"Web","url":"http://munin-monitoring.org/"}},{"start":228,"end":260,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/digitalocean/do-agent"}}]},{"type":"paragraph","text":"We're excited about the possibilities these graphs and this agent open up for us. If you are too, sign up to be the first to know as we begin to roll out new monitoring and alerting features early this year.","spans":[{"start":98,"end":129,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/products/monitoring/"}}]},{"type":"paragraph","text":"  ","spans":[]},{"type":"paragraph","text":"By Carlos Amedee","spans":[{"start":3,"end":16,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/cagedmantis"}}]}],"blog_post_date":"2017-01-03","tags":[{"tag1":{"tag":"Product Updates","_linkType":"Link.document","_meta":{"uid":"product-updates"}}}],"_meta":{"uid":"improved-graphs"}}},{"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":"Stephanie Morillo","author_image":{"dimensions":{"width":188,"height":188},"alt":"Stephanie Morillo","copyright":null,"url":"https://images.prismic.io/www-static/88c5ec7b08345ce34cc82af6a32619bee69b1dae_stephanie_morillo-abc491ab.png?auto=compress,format"},"_meta":{"uid":"stephanie_morillo"}},"blog_header_image":{"dimensions":{"width":784,"height":418},"alt":"laptop sticker","copyright":null,"url":"https://images.prismic.io/www-static/1306b2a6-e150-44ba-91ea-43474b2defd6_laptop-sticker.gif?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Open Source at Its (Hacktober)best","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"The third-annual Hacktoberfest, which wrapped up October 31, brought a community of project maintainers, seasoned contributors, and open-source beginners together to give back to many great projects.  It was a record setting year which confirmed the power of communities in general, and specifically the open source community.","spans":[{"start":17,"end":30,"type":"strong"}]},{"type":"paragraph","text":"Here's what you accomplished in a nutshell:","spans":[]},{"type":"list-item","text":"📈 92,569 total PRs were opened this Hacktoberfest, up from 49,000 last year","spans":[]},{"type":"list-item","text":"📂 29,287 total repos were contributed to","spans":[]},{"type":"list-item","text":"💝 Most popular projects included Homebrew Cask and Home Assistant","spans":[{"start":33,"end":46,"type":"hyperlink","data":{"link_type":"Web","url":"https://caskroom.github.io/"}},{"start":51,"end":65,"type":"hyperlink","data":{"link_type":"Web","url":"https://home-assistant.io/"}}]},{"type":"list-item","text":"👕 10,227 people completed the challenge and will receive shirts this year","spans":[]},{"type":"paragraph","text":"In this post, we'll get more into numbers and will share some stories from contributors, maintainers, and communities across the world.","spans":[]},{"type":"heading3","text":"Contributors","spans":[]},{"type":"paragraph","text":"We put the challenge out there and you stepped up to exceed it! Congratulations to both first-time open source contributors and experienced contributors who set aside time and resources to push the needle forward for thousands of open source projects.","spans":[]},{"type":"paragraph","text":"This year, we had a record number of contributors from around the world participate:","spans":[]},{"type":"list-item","text":"👨‍👩‍👧‍👦 29,616 people signed up to participate","spans":[]},{"type":"list-item","text":"🌍 Contributions came in from 114 countries","spans":[]},{"type":"paragraph","text":"Developers around the world shared their stories with us, explaining what Hacktoberfest meant to them. One contributor who completed the challenge said:","spans":[]},{"type":"preformatted","text":"I am a senior computer science student but have always been too intimidated to submit to other open github projects. Hacktoberfest gave me a reason to do that and I am really glad I did. I will for sure be submitting a lot more in the future.","spans":[]},{"type":"paragraph","text":"Aditya Dalal from Homebrew Cask went from being a Hacktoberfest contributor in 2015 to being a project maintainer in 2016:","spans":[{"start":0,"end":12,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/adidalal"}}]},{"type":"preformatted","text":"I actually started contributing to Open Source in a meaningful way because of Hacktoberfest. Homebrew Cask was a convenient tool in my daily usage, and Hacktoberfest provided an extra incentive to contribute back. Over time, I continued contributing and ended up as a maintainer, focusing on triaging issues and making the contribution process as simple as possible (which I like to think we have succeeded at).","spans":[]},{"type":"heading3","text":"Maintainers","spans":[]},{"type":"paragraph","text":"A HUGE and very special shout out goes out to project maintainers. Many of you added \"Hacktoberfest\" labels (+15,000) to project issues and tweeted out your projects, encouraging others to join in on the fun. We know that Hacktoberfest makes things busier than usual. Thank you for setting a great example for future project maintainers—without you, Hacktoberfest wouldn't be possible!","spans":[{"start":2,"end":6,"type":"strong"}]},{"type":"paragraph","text":"Some maintainers went out of their way to make sure contributors had a great experience:","spans":[]},{"type":"preformatted","text":"Nice job @IamAdiSri scoring a #hacktoberfest PR on @osquery! pic.twitter.com/C8J6DgNX9u\n— Nick Anderson (@PoppySeedPlehzr) October 21, 2016","spans":[{"start":9,"end":19,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/IamAdiSri"}},{"start":30,"end":44,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/hashtag/hacktoberfest?src=hash"}},{"start":51,"end":59,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/osquery"}},{"start":61,"end":87,"type":"hyperlink","data":{"link_type":"Web","url":"https://t.co/C8J6DgNX9u"}},{"start":123,"end":139,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/PoppySeedPlehzr/status/789532263855722496"}}]},{"type":"preformatted","text":"@IAmWillMadison, thanks for contributing to our #Golang Rest HTTP Client open source library, happy #hacktoberfest!🙌 https://t.co/HXTqnPdGbF\n— SendGrid (@SendGrid) October 21, 2016","spans":[{"start":0,"end":15,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/IAmWillMadison"}},{"start":48,"end":55,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/hashtag/Golang?src=hash"}},{"start":100,"end":114,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/hashtag/hacktoberfest?src=hash"}},{"start":117,"end":140,"type":"hyperlink","data":{"link_type":"Web","url":"https://t.co/HXTqnPdGbF"}},{"start":164,"end":180,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/SendGrid/status/789509892835053568"}}]},{"type":"paragraph","text":"...and others created awesome challenges:","spans":[]},{"type":"preformatted","text":"#Chocolatey is participating in @digitalocean#hacktoberfesthttps://t.co/CP3gcOQwIf - A few lucky folks will additionally get this T-Shirt! pic.twitter.com/iF0ZzWm05V\n— Rob Reynolds (@ferventcoder) October 2, 2016","spans":[{"start":0,"end":11,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/hashtag/Chocolatey?src=hash"}},{"start":32,"end":45,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/digitalocean"}},{"start":45,"end":59,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/hashtag/hacktoberfest?src=hash"}},{"start":59,"end":82,"type":"hyperlink","data":{"link_type":"Web","url":"https://t.co/CP3gcOQwIf"}},{"start":139,"end":165,"type":"hyperlink","data":{"link_type":"Web","url":"https://t.co/iF0ZzWm05V"}},{"start":197,"end":212,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/ferventcoder/status/782621022176419840"}}]},{"type":"preformatted","text":"MJLM is on Hacktoberfest !  Win MJML T-shirts + stickers if your PR got accepted https://t.co/dt5eRsLljs#hacktoberfest@digitaloceanpic.twitter.com/JHUZWZ2Kid\n— mjml. (@mjmlio) October 12, 2016","spans":[{"start":81,"end":104,"type":"hyperlink","data":{"link_type":"Web","url":"https://t.co/dt5eRsLljs"}},{"start":104,"end":118,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/hashtag/hacktoberfest?src=hash"}},{"start":118,"end":131,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/digitalocean"}},{"start":131,"end":157,"type":"hyperlink","data":{"link_type":"Web","url":"https://t.co/JHUZWZ2Kid"}},{"start":176,"end":192,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/mjmlio/status/786205198431780865"}}]},{"type":"heading3","text":"Events","spans":[]},{"type":"paragraph","text":"This year, we wanted to highlight the collaborative aspect of open source and created a Hacktoberfest-themed Meetup Kit with tips and tools for anyone who wanted to organize a Hacktoberfest event.","spans":[{"start":88,"end":119,"type":"hyperlink","data":{"link_type":"Web","url":"https://docs.google.com/document/d/1EwrKFnL6J8w8CM0lLgmH06SguOy8RBvjhil5t4oZI-Q/edit#heading=h.4kugqow703r4"}}]},{"type":"paragraph","text":"As a result, Hacktoberfest meetups popped up all over the world. More than 30 communities held 40 events in 29 cities across 12 countries including Cameroon,Canada, Denmark, Finland, France, India, Kenya, New Zealand, Spain, Ukraine, UK, and the US (click here to see a full list of Hacktoberfest events).","spans":[{"start":256,"end":260,"type":"hyperlink","data":{"link_type":"Web","url":"https://docs.google.com/spreadsheets/d/1QIZYYJPt111XQ1R8PYGdn-riDFKaRVekdj1MJmFX2do/edit#gid=0"}}]},{"type":"paragraph","text":"Thank you to event organizers who brought your communities together through pair programming, mentorship, demos, workshops, and hack fests.","spans":[]},{"type":"paragraph","text":"If you didn't have a chance to attend a Hacktoberfest-themed event near you, we encourage you to host one anytime or suggest the idea to your favorite meetup.","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/f743dbd2f0547a9d0b5f8807d5e68cc9794a5207_sigfox.png?auto=compress,format","alt":"Hacktoberfest Paris Meetup by Sigfox","copyright":null,"dimensions":{"width":1192,"height":874}},{"type":"image","url":"https://images.prismic.io/www-static/a3f578ea265b1c9f830c10fd9e9b17baaa6ebe03_fullstack.jpg?auto=compress,format","alt":"Fullstack Open Source | Hacktober Edition, Los Angeles, California, USA","copyright":null,"dimensions":{"width":2000,"height":1472}},{"type":"image","url":"https://images.prismic.io/www-static/e45c03ac7cc0a3c381ffa307c4a635ca3e5f7885_blackcodecollective.png?auto=compress,format","alt":"Hacktober Night by BlackCodeCollective, Arlington, Virginia, USA","copyright":null,"dimensions":{"width":1997,"height":978}},{"type":"image","url":"https://images.prismic.io/www-static/4763a078e5457ffe167dae903a09956547b0bb55_nitksurathkal.jpg?auto=compress,format","alt":"Hacktober Fest Meetup at NITK Surathkal, Mangalore, India","copyright":null,"dimensions":{"width":1995,"height":969}},{"type":"paragraph","text":"Clockwise, from top left:\nHacktoberfest Paris Meetup by Sigfox, Paris, France, Fullstack Open Source | Hacktober Edition, Los Angeles, California, USA, Hacktober Fest Meetup at NITK Surathkal, Mangalore, India, and Hacktober Night by BlackCodeCollective, Arlington, Virginia, USA.","spans":[{"start":0,"end":25,"type":"em"},{"start":26,"end":280,"type":"em"}]},{"type":"heading3","text":"Beyond 2016","spans":[]},{"type":"paragraph","text":"Thank you to our friends at GitHub for helping us make Hacktoberfest 2016 possible. And special thanks go out to our friends at Mozilla, Intel, and CoreOS for supporting the initiative.","spans":[]},{"type":"paragraph","text":"Tell us: What did you enjoy about Hacktoberfest this year? What can we do to make it even better next year? Let us know in the comments.","spans":[]},{"type":"paragraph","text":"Until we meet again—happy hacking!","spans":[]}],"blog_post_date":"2016-11-15","tags":[{"tag1":{"tag":"Community","_linkType":"Link.document","_meta":{"uid":"community"}}}],"_meta":{"uid":"open-source-at-its-hacktoberbest"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"David E. Worth","author_image":{"dimensions":{"width":250,"height":250},"alt":"David E. Worth","copyright":null,"url":"https://images.prismic.io/www-static/88908d6f279ad5cae0d19e5f8f8193854aa2d489_da3f9c3ffc8b92a283a0dc067f6750f7.jpg?auto=compress,format"},"_meta":{"uid":"david_e_worth"}},"blog_header_image":{"dimensions":{"width":784,"height":418},"alt":null,"copyright":null,"url":"https://images.prismic.io/www-static/04445093-8458-49ab-abb1-7932e6da088b_droplet-tag.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Droplet Tagging: Organize Your Infrastructure","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"At DigitalOcean, we are on a mission to make managing production applications simple. Today, we are officially announcing the addition of Droplet tags to make it even easier to work with large-scale production applications.","spans":[]},{"type":"paragraph","text":"Last fall, we quietly launched tagging and management of resources via our public API. Since then, over 94,000 Droplets have been tagged including use cases like:","spans":[{"start":31,"end":85,"type":"hyperlink","data":{"link_type":"Web","url":"https://developers.digitalocean.com/documentation/v2/#tags"}}]},{"type":"list-item","text":"Blue/green deployments","spans":[]},{"type":"list-item","text":"Ownership assertions, e.g. Droplets tagged webserver:dave or team:metrics","spans":[]},{"type":"list-item","text":"Environment assertions, e.g. env:production or env:dev","spans":[]},{"type":"list-item","text":"Application assertions, e.g. MySQL, MongoDB, web","spans":[]},{"type":"list-item","text":"Even deployment platforms, like Kubernetes!","spans":[]},{"type":"paragraph","text":"As developers ourselves, we know how important it is to stay organized when working on and managing applications. Tags are a simple and powerful way to do this.","spans":[]},{"type":"heading2","text":"How Do You Use Tags?","spans":[]},{"type":"paragraph","text":"When we released tagging via the API, we received a lot of fantastic feedback. It was exciting to see our community embrace a feature to this extent, and it proved that we needed to add tags to our Cloud control panel too.","spans":[]},{"type":"paragraph","text":"We've added tags to all Droplet-related views, like the main Droplets page, in order to make managing your Droplets and tags simpler from wherever you are - Cloud control panel, Metadata Service, and API.","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/aba1adb0-2af5-4e8c-a50d-fbf4f856382d_screenshot1.png?auto=compress,format","alt":"control panel","copyright":null,"dimensions":{"width":1146,"height":896}},{"type":"paragraph","text":"We also created a new tag-only view, which allows you to see all Droplets with a given tag. Here, you can see how our team groups our production Droplets by tag:","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/b7a29738-034c-47b0-b4f8-339993e3509e_screenshot2.png?auto=compress,format","alt":"control panel filtered by tag","copyright":null,"dimensions":{"width":1146,"height":617}},{"type":"paragraph","text":"For more detail on how to use tags via the control panel, check out our tagging tutorial on our Community Site.","spans":[{"start":72,"end":110,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/how-to-tag-digitalocean-droplets"}}]},{"type":"heading2","text":"What Can You Use Tags For?","spans":[]},{"type":"heading3","text":"Managing Resource Ownership","spans":[]},{"type":"paragraph","text":"A simple tag like `team:data` or `team:widget` makes it easy to know exactly who is responsible for a given set of Droplets. For example, different teams in a company may share a single DigitalOcean Team, and can use tags to track their resource usage separately. Engineers on an on-call rotation, an ops-team, a finance team, or anyone simply debugging a problem can benefit from these kinds of tags as well.","spans":[{"start":186,"end":203,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/how-to-use-teams-on-digitalocean"}}]},{"type":"heading3","text":"Monitoring and Automation","spans":[]},{"type":"paragraph","text":"Knowing the importance of a given Droplet to the healthy operation of a product is an essential part of ensuring the reliability of your system, and tagging your Droplets with `env:production` or `env:dev` can help facilitate this.","spans":[]},{"type":"paragraph","text":"For example, if your alerting infrastructure is tag-aware, rules can be made less sensitive to increased load or memory usage on a staging or development server than on production servers. If your infrastructure management system is sufficiently mature, you may be able to self-heal by scaling your application servers automatically.","spans":[]},{"type":"paragraph","text":"Similarly, with Prometheus' file-based service discovery and regular calls to the DigitalOcean API (e.g., by a cronjob), you can dynamically configure metrics based on tags. You can fine tune parameters like scrape interval, evaluation interval, and any external labels you want to apply — which may be tags themselves.","spans":[{"start":16,"end":26,"type":"hyperlink","data":{"link_type":"Web","url":"https://prometheus.io/"}},{"start":82,"end":98,"type":"hyperlink","data":{"link_type":"Web","url":"https://developers.digitalocean.com/"}}]},{"type":"heading3","text":"Logging and Data Retention Policies","spans":[]},{"type":"paragraph","text":"Logging and metric data is invaluable, especially during outages, but storing that data can be costly on high-traffic systems. Tagging resources and including those tags in your structured logs can be used to dictate log retention policies. This can help optimize disk usage to ensure critical infrastructure has the most log retention while test servers get little or none. Systems such as RSyslog can apply rules based on JSON-structured logs in CEE format.","spans":[{"start":424,"end":459,"type":"hyperlink","data":{"link_type":"Web","url":"http://www.rsyslog.com/json-elasticsearch/"}}]},{"type":"heading3","text":"Deployments and Infrastructure Management","spans":[]},{"type":"paragraph","text":"A common strategy for testing and rolling out deployments is to use blue/green deployments. Implementing a blue/green deployment becomes easy with tags; simply use two tags, `blue` and `green`, to track which Droplets are in which set, then use the API to trigger the promotion (by switching the traffic direction later, e.g. by updating a Floating IP, load balancer configuration, or DNS record).","spans":[{"start":107,"end":128,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/how-to-use-blue-green-deployments-to-release-software-safely#what-is-blue-green-deployment"}}]},{"type":"paragraph","text":"Infrastructure management is an art in and of itself. Recently, our own Tommy Murphy contributed support for DigitalOcean's tags to HashiCorp's Terraform infrastructure automation platform. This has been used to build lightweight firewall management tooling (GitHub) to ensure that hosts with a given tag can pass traffic but will drop traffic from any other host.","spans":[{"start":72,"end":84,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/tam7t"}},{"start":109,"end":153,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.terraform.io/docs/providers/do/r/tag.html"}},{"start":259,"end":265,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/tam7t/droplan"}}]},{"type":"heading2","text":"What's Coming Up Next?","spans":[]},{"type":"paragraph","text":"Being able to tag your Droplets is only the beginning. We know that Block Storage, Floating IPs, DNS records, and other resources are all critical parts of your production infrastructure too. In order to make your deployment, monitoring, and development infrastructure simpler to manage, we're working on letting you manage entire groups of resources via tags over the coming months.","spans":[{"start":68,"end":81,"type":"hyperlink","data":{"link_type":"Web","url":"https://assets.digitalocean.com/blog/static/block-storage-more-space-to-scale/"}},{"start":83,"end":95,"type":"hyperlink","data":{"link_type":"Web","url":"https://assets.digitalocean.com/blog/static/floating-ips-start-architecting-your-applications-for-high-availability/"}},{"start":97,"end":108,"type":"hyperlink","data":{"link_type":"Web","url":"https://assets.digitalocean.com/blog/static/digitalocean-labs-presents-dns-management/"}}]},{"type":"heading2","text":"Conclusion","spans":[]},{"type":"paragraph","text":"Thank you to everyone who has used tags and provided feedback. We hope these improvements help make it a little easier for you to build and ship great things. Please keep the feedback coming. How do you use tagging to manage your infrastructure? We would love to hear from you!","spans":[{"start":166,"end":190,"type":"hyperlink","data":{"link_type":"Web","url":"https://digitalocean.uservoice.com"}}]},{"type":"paragraph","text":"by David E. Worth","spans":[{"start":3,"end":17,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/david_e_worth"}}]}],"blog_post_date":"2016-10-25","tags":[{"tag1":{"tag":"Product Updates","_linkType":"Link.document","_meta":{"uid":"product-updates"}}}],"_meta":{"uid":"droplet-tagging-organize-your-infrastructure"}}}]}}}