Tag: open source

  • Microsoft strives to embrace open source culture

    Microsoft strives to embrace open source culture

    In many ways Microsoft is going through the corporate equivalent of a mid-life crisis—it has reached a stage where it longs to drop a few pounds, and turn back the clock a few years. After years of tremendous success, it’s now starting to show its age, and it is struggling to adapt to the new tech landscape and compete with younger, leaner, more innovative competitors.

    The shift began under ex-CEO Steve Ballmer. Ballmer’s approach, though, was misguided. Ballmer’s Microsoft suffered from hubris, and ignored the seismic shift in technology until it was too late. When Ballmer finally recognized the existential threat, and tried to turn the ship around, it was done from within the established bloated corporate culture. There was an effort to rearrange the chairs on the deck with a management reorganization, but it simply wasn’t enough.

    Then Satya Nadella took over. Nadella has a more aggressive vision. It’s still not an easy job, nor a goal that can be accomplished overnight with a behemoth the size of Microsoft, but Nadella has dramatically changed the culture, and the vision for where Microsoft is heading.

    Part of the new and improved Microsoft includes embracing communities that Microsoft has long ignored or alienated, and shifting the way things get done at Microsoft so the company can be more agile. It is evident in how Microsoft partnered with Chef and Puppet Labs to integrate popular DevOps tools into the Azure cloud platform, and it can be seen in how Microsoft is adopting open source.

    “Recent articles have shown that Microsoft is “open sourcing” code to their internal teams. The fact that that is advertised as innovation is telling,” declared Michael LaVista, CEO and Founder of Caxy. “That’s what smart organizations have always done. In fact, Microsoft has somehow found itself the underdog in this sense and probably needs to do things like this to attract talent.”

    Leveraging open source concepts internally isn’t quite the same thing, though, as actually making Microsoft code open source. Open source projects like Apache, Project Libre, or Docker share source code with the general public, and anyone can review the code, and submit changes to improve or fix the code. Open source communities collaborate to continuously enhance the code. Microsoft appears to be doing something similar, but without exposing its source code to the general public.

    LaVista suggests that Microsoft should take that next step, though, and work collaboratively with the open source community outside of Microsoft’s walls. If it does so, Microsoft will some issues to address. Will it accept code fixes from a 14-year old on the other side of the world? Will exposing source code for the Windows operating system, Microsoft Office, or other popular Microsoft applications open up a Pandora’s Box of security concerns?

    “They will have to embrace what happens to code when it is open sourced. Once the code is out there, everyone can see the flaws,” explains LaVista. “The benefit of the model is that you have so many more eyes looking at it from more perspectives. If Microsoft is used to running their own software and making their own decisions about what to work on and fix, this could pose problem.”

    Perhaps. LaVista makes good points about concerns Microsoft would face, but in and of themselves they’re not a reason not to adapt and evolve. Yes, exposing Microsoft source code to the general public would probably result in a spike in security concerns, but once the dust settles the collaborative approach of an open source community addressing those issues could result in quicker patch releases, and make the software more secure.

    LaVista recommends that Microsoft use companies like Red Hat, IBM, and HP as examples of how a larger corporation can be successful in an open source culture. Only time will tell. We’ll have to wait and see to what extent Microsoft makes the shift to open source, and we’ll have to wait and see how Nadella’s Microsoft adapts, and whether Microsoft can successfully reinvent itself to remain competitive in this new tech landscape.

  • An open-source pipeline for trusted images

    An open-source pipeline for trusted images

    There are a lot of good reasons to use a trusted image (aka “foundation image”), including reliability, reduced time to launch, secure configuration. [We’ve discussed them previously]

    In this article we are going to describe a development and quality assurance process for making trusted (aka “foundation” or “golden”) images.

    First, this is the tool set to be used.

    • Source Control Keeps track of all your scripts. Images will be built 100% by scripts, not by manual keying. Therefore source control is essential.
    • Virtual Machines You’ll need to periodically start from blank slate, when you make changes to your approach which are incompatible with the current state of your machine. Using virtual machines enables us to rapidly reset to a known state and re-apply scripts.
    • Vagrant Vagrant is a virtualization tool that makes it easy to quickly launch and re-launch virtual machines, bootstrap virtual machines with base packages and ssh configuration, and synchronize your files to the guest operating system.
    • Continuous Integration (CI) Server For reliability and repeatability, CI servers run scheduled and automated jobs which fetch and merge the latest code, produce output, run tests, and apply tags and other metadata.
    • Packer Provides the ability to build many images destined for different cloud environments from a single set of scripts.

    Now let’s move into the three steps required for creating a trusted image:

    1. Creating and testing the image on your local machine;
    2. Building the image, and;
    3. Validating and promoting the image.

     

    Step 1: Create and Test Your Trusted Images Locally

    Trusted images should not be built by hand, or you’ll quickly lose track of what’s on them! First, use version-controlled scripts to build up a virtual machine that works according to your specifications. When you control the target OS, you can use basic shell scripts. If you are building for multiple target operating systems, configuration management tools like Chef or Puppet will give you the ability to write a single set of platform-independent scripts. Vagrant is a very useful tool which makes virtualization and configuration management technologies work seamlessly together.

    Vagrant works by reading a Vagrantfile which you create for your project. It describes the base image (operating system) you want, the software you need to install, and the way you want to access the machine.

    You can then use Vagrant to launch local virtual machines right on your laptop/workstation using a virtualization tool like VirtualBox (a cross-platform virtualization tool), or you can work with remote virtual machines such as EC2.  Vagrant syncs a local folder to the VM so you can edit your scripts either locally or right on the VM, and because the scripts are right on the VM you can test them out in realtime as you edit and save. This makes the code/test cycle as rapid as possible, and it’s easy to keep both the scripts and the VM configuration (Vagrantfile) in source control.  Here’s an example of a Vagrantfile which starts with Ubuntu Precise and builds out the image using chef-solo:

    Vagrant.configure("2") do |config|
      The base operating system that you’ll start from
      config.vm.box = "precise64"
      config.vm.box_url = "http://files.vagrantup.com/precise64.box"
      If you install software using Git, you’ll want to forward your ssh key
      config.ssh.forward_agent = true
      We are using chef-solo as the “provisioner” to execute the configuration scripts.
      You can also use shell scripts, Puppet, SaltStack, etc.
      config.vm.provision :chef_solo do |chef|
      This configuration is specific to Chef. Other provisioners have their own options.
    	chef.roles_path = "roles"
    	chef.add_role 'myapp'
      end
    end 

    Your provisioner scripts (in this case, Chef) is where you will implement features on the VM like:

    • Installing and configuring 3rd party software packages
    • Downloading and installing your own company’s software, e.g. from Git
    • Applying system-wide configuration settings such as iptables, log rotation, syslog, etc
    • Installing any custom  SSL certificates that you may want the VM to trust

    Once you have scripts that build the virtual machine you want, and you’ve committed your code, it’s time to build an image candidate.

     

    Step 2: Building and Managing Images

    To build an image candidate, you’ll start over with a fresh virtual machine, run your scripts, and capture an image from it.

    Building an image is about the same as any other software “build” job; continuous integration tools like Jenkins are well-suited to this task. Create a Jenkins job to build your images. As you commit changes to your scripts, push to the source control repository and trigger the job which builds a new  image.  You can tag your images with build job number and other metadata.  This metadata will be very helpful as your image library grows. In particular, you’ll always need to be able to identify exactly which versions of your configuration scripts were used to build a specific image.

    Vagrant isn’t quite as good for building images as it is for launching and managing VMs, so for image building we will use a dedicated tool called Packer. Packer is a tool for creating identical machine images for multiple platforms from a single source configuration file.

    Packer can take your scripts and produce a variety of different images for platforms such as EC2, GCE, OpenStack, VirtualBox, Docker, Digital Ocean, and more. Packer’s JSON format has pretty much the same information as the Vagrantfile:

     {
      "variables": {
        "aws_account": "",
        "aws_region": "us-east-1",
        "ssh_username": "",
        "source_ami": "",
        "access_key_id": "{{env `AWS_ACCESS_KEY_ID`}}",
    	"secret_access_key": "{{env `AWS_SECRET_ACCESS_KEY`}}"
      },
      "builders": [
    	{
      	"type": "amazon-ebs",
          "ssh_timeout": "3m",
          "access_key": "{{user `access_key_id`}}",
          "secret_key": "{{user `secret_access_key`}}",
      	"region": "{{user `aws_region`}}",
          "ssh_username": "{{user `ssh_username`}}",
          "source_ami": "{{user `source_ami`}}",
          "instance_type": "m3.medium",
          "ami_name": "myapp-{{timestamp}}"
    	}
      ],
     
      "provisioners": [
    	{
      	"type": "chef-solo",
      	"roles_path": "roles",
          "cookbook_paths": ["vendor/cookbooks"],
          "run_list": [ "role[myapp]", "recipe[myapp::ami-cleanup]" ]
    	}
    }

     

    Step 3: Image Validation and Promotion

    Because your images aren’t exactly the same as the Vagrant environment that you used for developing configuration scripts, you need to perform software testing and quality assurance (QA) on each image candidate. Images that pass their tests will be promoted and released to downstream workflows (development/stage/production).

    This should sound like a familiar problem! Again, it’s well-suited to automated continuous integration systems like Jenkins. Like any other build job, your image-building job has a build number, can trigger downstream jobs (for performing QA on the image), and it can run promotion scripts. Use these facilities to validate your images, keep track of which ones have been fully tested, and tag them with important metadata such as the branch/sha of the scripts that built it.

    Conclusion

    With this “trusted” or “foundation” image you can easily create and push validated images to multiple cloud environments. This can alleviate the wait time of building and launching individual machines and the issues which can arrive with those repeated human components. And isn’t automation what DevOps is all about?

    Acknowledgements:  Kevin Gilpin, Hleb Rubanau, and Lucia Capano are coauthors on this post.

  • User pragmatism is stronger than ever

    User pragmatism is stronger than ever

    This is the third of a series of posts about why we thought the world needed another DevOps oriented company and so invested in and started StackStorm.   I hope we are touching on general themes that can help others understand the rapid disruptive shift towards DevOps approaches to building and operating technology.

    When starting StackStorm we were inspired by OpenStack.  This week is the OpenStack summit and we are contributing heavily to some pieces of OpenStack, so we remain enthusiastic community members.  However, our third reason for StackStorm has to do with how we lost our naive perspective on OpenStack and understood it more as a symptom of a new, more enlightened approach to technology selection, development and operation.

    OpenStack is important – however, users are more pragmatic and agnostic than ever.

    OpenStack is the full stack plus, plus, plus; it is very different than almost every other open source community thanks to its breadth, from storage through networking, security, compute, management and more. Not surprisingly, OpenStack is a massively diverse community. And it has unstoppable momentum. However, when we went to interview practitioners we consistently saw that the DevOps savvy see OpenStack pragmatically. The operators we know see OpenStack as a means to an end.

    To that point, a group of about 30 operators of OpenStack were recently asked at the OpenCompute 2014 summit in San Jose – what distribution do you use? There are of course many, many distributions and there has been talk of a distribution war. So we were really interested in the answer – who are these operators using?

    The answer – NO ONE. Top operators are taking the bits they need. While RedHat and presumably others will succeed over time in selling support for a distribution, I don’t think most commentators really understand to what extent the DevOps mindset alters the equation for legacy open source models as well as, of course, legacy proprietary models.

    A DevOps operator, generally speaking, takes the pieces that make sense and then ties them together so that their operations environment, their hybrid cloud, their software defined data center, are truly theirs and operate together as one system. To avoid accidental lock in, maintenance burden and technical debt, each of the many, many, many pieces that together comprise a DevOps environment are themselves almost always open source and broadly deployed by others. This way the operator avoids lock in while also having what they need for their business.

    So – open source and specifically OpenStack pieces are fundamental to the operators we know. However, through formal and informal communities these operators are now empowered to take the best of breed components and integrate them into a whole. And what does this get them?

    Refer back to an earlier post – this approach is delivering 10x-100x productivity improvements, which means a chance to stay in business because if you don’t make this transition and your competitors do, they will cycle faster than you closer and closer and closer to the customers.

    This brings me to a discussion of DevOps architectures. How can you tie together so many loosely coupled pieces? Does the Legos analogy stand up? Yes it does. More on that soon.

  • What Cisco’s OpFlex means for DevOps

    What Cisco’s OpFlex means for DevOps

    Some big news in networking land at Interop this year revolved around Cisco’s latest contribution to open source and the Internet, its proposed “OpFlex” control plane protocol.

    The protocol itself is focused on communicating with network elements and specifies encoding in a variety of formats, including JSON, that are developer-friendly. That’s nice, of course, but the big question as someone interested in operations and devOps is why should you care about what appears to be a networking protocol? After all, beauty is only interface deep. What’s in it for you?

    To see where DevOps fits into the picture, consider the description of OpFlex as specified in the IETF draft of the OpFlex protocol:

    The OpFlex architecture provides a distributed control system based on a declarative policy information model. The policies are defined at a logically centralized policy repository (PR) and enforced within a set of distributed policy elements (PE). The PR communicates with the subordinate PEs using the OpFlex Control protocol. This protocol allows for bidirectional communication of policy, events, statistics, and faults. This document defines the OpFlex Control Protocol.  [emphasis mine]

    What’s being offered is not just a protocol for bidirectional communication, but an entire architecture for sharing policies and actionable data. What’s more important to those who for whom “networking” is not their native technical tongue is that policies are designed to be declarative and abstract. That means instead of issuing a set of commands, often specific to the device or service, a policy declares (describes) what’s needed and each component participating in the architecture interprets those needs according to their specific function and capabilities.

    You might be thinking at this point (I know I certainly was) “What is this policy and who is defining it?” because that seems pretty central to the value proposition of this whole endeavor.

    For that, we need to look to the OpenDaylight (ODL) project which has created a new project called the ODL Group Policy plug-in. As explained by Cisco in an OpFlex white paper, “the goal of this project is to provide a policy-based API that can serve, in practice, as a standard information model in OpFlex implementations.”

    Jumping over to the ODL Group Policy Plug In wiki, then, the intention of the Group Policy Plugin is to introduce “the notion of groups of endpoints and policy abstractions that govern communication between these groups. The goal is to support a northbound API that accepts abstract policy based on application requirements while offering numerous concrete southbound implementations for programming network element with configuration/programming stanzas rendered from application policies.”

    Okay, so that’s a whole lot of .. words. What it boils down to is that instead of a policy describing a set of rules governing routing with the appropriate ACLs, one might simply declare that “Web Server A can talk to Database Server A to perform database transactions” while “Administrative Console B can talk to Database Server A about administrative tasks.” If you were to translate that into specifics you would likely have multiple imperative command lines, each describing VLAN participation and routing  as well as entries allowing traffic between specific VLANs or IP addresses on the ports appropriate to the application layer protocols. It would be long and prone to misconfiguration simply due to the number of commands required. Using a declarative (abstract) policy language simplifies not only the policy but also addresses the disparity inherent in competing products across a given market by eliminating it from being problematic.

    The problem with traditional proposals to solve the “different definitions and object models” across a given market space (like ADCs or IPSs or switches) is that they’ve all relied on finding the lowest common model, which inevitably ended up with all offerings needing to dumb down (commoditize) their value in order to ensure consistent support for all “XYZs”. By abstracting to the policy – and not the object model – level, the OpFlex approach effectively eliminates this issue and emphasizes defining what is desired by the application, but not how.

    Now, the actual policy declaration is unlikely to take the form of natural language (that’d be nice, but we’re not quite ready for that… yet, though Watson might disagree with me on that) but the general premise is to provide a far more, shall we say, friendly policy language.

    What this means is the operations folks most likely to be familiar with the application architecture and who understand what it needs and how it needs to work, could be the ones to actually codify that into policies. You’ll note that the intention for OpenDaylight, at least, is to “support a northbound API that accepts abstract policy based on application requirements.” That means someone – hint, hint, that’s you – might be able to integrate into the application deployment lifecycle provisioning of the network services and topological constraints required based on an understanding of the complex web of connections between each piece of an application. Someone who knows from experience that a “three tier architecture” means more than just three components, and can more effectively describe how they should be interacting.

    But that’s just the beginning. You’ll note that in the RFC summary above it specifies “bidirectional communication of policy, events, statistics, and faults.” That means actionable data is being exchanged between participating components. Actionable data enables, well, action. Actions that might address a fault that occurs between end-points. Actions that might address performance issues. Actions that might mitigate attacks in real-time.

    Ultimately this level of capability will drive new solutions – new workflows and processes – that take advantage of event-based systems and policy-driven networking. OpFlex should enable statements like “When X happens, do Y” to be executed upon, even if it requires coordination of three or four or more network components.

    What OpFlex means for the devops practitioner is a way to influence (or, one hopes, specify directly) what services the network provide for the applications you’re tasked with deploying and delivering, and how the network responds to the things that happen on any network that impact the performance, security or stability of those applications.

    As networking continues to recognize and address the need to provide application-driven services, including provisioning and real-time adaptation, it’s going to continue to become more programmable and integrated with the systems driving a more automated, orchestrated data center. And that means devops practitioners are going to have more and more options as to how they manage the entire application (and network) service lifecycle.

  • DevOps Is Free? Sure I’ll Support It

    DevOps Is Free? Sure I’ll Support It

    One of the biggest misnomers about DevOps is that since it’s all about process and communications there aren’t any costs associated with adoption. Sure, you can probably gain some improvement by simply modifying your current methods for delivering IT services in your organization, however, DevOps is about more than just modest improvements.

    Let’s explore why organizations that are succeeding with DevOps are succeeding over traditional IT approaches. From the article, “Fresh Stats Comparing Traditional IT and DevOps-Oriented Productivity,” also on devopsy.kinsta.cloud, we see that DevOps is driving down time spent on tasks where there is no value being added to the business, such as support, deploying changes, communication and firefighting. Time spent on these tasks reduce opportunities from innovation and responding to business needs, leading the business to view IT in an unfavorable manner unable to help them meet current business demands.

    Where DevOps-oriented teams do spend time is on automating repetitive tasks so that they don’t continually consume time, self-improvement and innovation. Instead of treating IT like assembly line workers capable of only completing the task at their station, which causes friction and increases turnover, DevOps-oriented organizations foster an environment where workers are rewarded for ensuring quality and reducing overhead.

    image-for-devops-com-byline

    So, where are the costs associated with becoming a DevOps-oriented organization?

    • Training / Education – DevOps transformational activities takes funds and requires outside training and, possibly, consulting. For businesses that desire to move forward but are stuck in the Catch-22 that is keeping the bus rolling while trying to paint it, it can be daunting to make the necessary changes. Getting past this point often requires groups trained in helping businesses make these types of transformations.
    • Tooling – There’s some great Open Source tools that can help drive continuous integration, automation and orchestration. However, the worst thing that can happen is that getting these tools to work the way you need them to ends up consuming resources and time that you’re trying to give back to driving business value. The supported versions of these tools will provide software support and deliver tested versions, which will minimize unnecessary disruptions.
    • Updates / Refresh – Older versions of some infrastructure components or software packages may not support automation efforts. Since this is a key element of DevOps, it may be a requirement to do a technical refresh or software update.
    • Platform Changes – Alas, the big kahuna, the platform change may be a necessary action to enable your IT team to become more agile and alleviate some operational challenges. The cloud is a perfect example of a platform change that supports DevOps. A platform change can be very expensive, but the long-term benefits need to be weighed; especially if it speeds transformation of your IT team into one that is agile and more quickly addressing the needs of the business.

    So, can you do DevOps without any financial outlay? Probably so, but the benefit received will be nominal, your team will most likely feel shorted and look to work for a business that has fully committed to a DevOps approach and the real time consuming sinks in your business will continue to exist eating your IT budget like a bear eating salmon in preparation for winter hibernation.

  • Deployment and Monitoring Automation with glu

    Deployment and Monitoring Automation with glu

    glu is a free/open source deployment and monitoring automation platform. glu is a project that was started at LinkedIn mid-2009 to address the exponentially growing needs of deploying the set of applications and services that make up the LinkedIn experience. Although some projects like Chef and Puppet existed at the time, they were mostly good at configuring the infrastructure (creating users, installing java, etc…). glu lives in a higher space: provisioning dynamic applications on an ensemble of machines (change often, real-time failure detection, etc…).

    glu is in the application deployment space

    First, let’s start with some definition: when I say application, I mean a piece of code that usually needs to run, and usually offers some form of api to talk to (which, at a lower level, is a socket listening on a port). Equivalent terminology is service or server. For example, a webapp server is an application. Although glu can also deal with one-off programs (run, do some computation and then stop) or infrastructure (perl, java, etc…), it is not optimized to handle these use cases and other projects are better at this task (Chef/Puppet).

    What is particular about applications in general, is that they tend to change a lot more often than infrastructure. In the age of continuous deployment, it is not uncommon sometimes to have the same application updated and deployed several times a day!

    glu has been designed to handle this use case: deploy applications to an arbitrary large set of nodes:

    • efficiently
    • with minimum/no human interaction
    • securely
    • in a reproducible manner
    glu executes a deployment
    simply click “OK”!

    glu is in the application monitoring space

    Once an application is up and running, many failures can happen from the low level hardware crashing to the application itself misbehaving. This is the nature of it, nothing is perfect, things will crash one way or another. So it is very important to monitor the state of the system in general in order to be able to react appropriately. glu has been designed to give a full view of the set of nodes on which you have deployed applications. When something goes wrong, you can know in a near real-time basis. You can then decide on the proper course of action like restarting the failed application on the node it crashed, or downgrading it to the previous version and redeploying the previous version to all the appropriate nodes. As a side note, you can also build a full monitoring solution on top of glu as explained in this blog post.

    glu detects failure

    glu is a platform

    It is very hard to build a one-size-fit-all solution. This is why glu has been designed to be a platform in order for you to build the solution that fits your environment and workflow on top of glu:

    • glu offers a REST api so that you can control glu yourself via a simple and documented api. For example, glu is not auto-reactive by design (which means that if something fails, glu will tell you about the failure, but it will not act on its own about it), but using the REST api, it is fairly easy to build a reactive solution on top of it.
    • the console (which is the main UI / REST api), is highly customizable (plugins to change the behavior of some features, css tweaks to let you change the look of it, etc…)
    • glu comes with its own package/distribution builder which lets you customize every component to suit your own needs (as simple as changing the port numbers or as complex as providing your own specializations).
    • glu does not dictate what a deployment mean to you, nor how to model your own system (clusters, groups, etc…), nor how to model your workflow (aka state machine in glu’s terminology). You are in control and you decide.

    glu in practice

    glu is not an academic exercise. glu has been built and successfully deployed at LinkedIn early 2010 prior to being released as open source. glu helps LinkedIn manage the complexity of releasing hundreds of applications/services on a 1000+ node environment (numbers from 2010). Other big names like Orbitz and Outbrain are using glu for their deployment needs.

    Over the years, glu has been refined and enhanced in order to support more use cases but the core and fundamental concepts on which glu was based originally and that I briefly introduced in this post are still what makes glu what it is!

    How to start with glu?

    If you want to take a look at glu, the best is to head to the main documentation page. I would also recommend to download glu and try the tutorial which gives you a feel of what glu is capable.

  • Netflix, the Simian Army, and the culture of freedom and responsibility

    Netflix, the Simian Army, and the culture of freedom and responsibility

    What do you do if you’re entire business relies on delivering streaming video content over the Web to millions of customers, and there are no examples to follow or tools to use? If you’re Netflix, you set the example and build the tools.

    Netflix had tremendous success with its original business model shipping movies on DVD to customers in trademark red envelopes. The precision of the shipping logistics, and the efficiency with which Netflix was able to meet user demand and ensure speedy delivery is a case study of its own. But, Netflix also saw the writing on the wall and became one of the first to embrace delivering movies via streaming video over the Internet.

    Networking protocols are fairly resilient, and able to get data from Point A to Point B eventually, but streaming content like audio or video is less forgiving. The data needs to be transferred at high speed, and the packets need to arrive in order to avoid buffering or glitchy playback.

    Netflix chose Amazon Web Services (AWS) to provide the cloud server infrastructure for delivering its streaming content. Amazon is reliable and resilient, but it is not infallible. When Amazon experiences a massive outage—as it has a few times in the past—it can mean down time for Netflix customers. Netflix, however, works very hard to guard against being affected by issues like that, and—thanks to the Simian Army—it is quite successful.

    Simian Army

    I spoke recently with Ruslan Meshenberg, director of platform engineering and Josh Evans, director of operations engineering for Netflix to learn more about how Netflix has embraced both DevOps and open source to develop tools that help it deliver high quality streaming video content to customers around the world.

    Simian Army is the name Netflix has given its suite of automated tools engineered to stress test the Netflix infrastructure and proactively identify weaknesses so Netflix can resolve them. The Simian Army is comprised of tools like ChaosMonkey, ChaosGorilla, and ChaosKong.

    Josh explained that when you’re dealing with a massively distributed system like the Netflix cloud infrastructure, it’s inevitable that you will encounter bugs. Rather than waiting for issues to surface, Netflix uses the Simian Army to intentionally induce failure on its own terms, so that issues can be identified and fixed before they impact customers.

    ChaosMonkey wreaks havoc on an individual server or cluster level—randomly shutting down servers to make sure that automated resilience works, and that redundant systems pick up the slack so content delivery is not interrupted. ChaosGorilla works on a larger scale by taking out entire AWS zones, and ChaosKong takes the concept to a national level by randomly shutting down the East Coast or West Coast regions of AWS to ensure traffic is automatically redirected to the remaining region.

    There are also other tools in the Simian Army. JanitorMonkey keeps everything tidy by cleaning up unused EC2 resources. As the name implies, its job is to automatically clean up after developers. Then there’s ConformityMonkey, which checks for EC2 instances that are not conforming to predefined rules for best practices.

    Netflix lets the Simian Army roam free causing random chaos, but only Monday through Friday between the hours of 9am and 3pm when managers and developers are present to address any urgent situations that might be caused inadvertently. In some cases the tools take automated corrective action, and in some they simply generate an alert and escalate the issue to the appropriate group or individual.

    Embracing Open Source

    One of the things that makes the Simian Army unique is that Netflix created these tools out of necessity. Netflix was blazing a trail on the cutting edge of delivering content from the cloud, and there simply were no commercial tools available to do the things Netflix needed to do.

    In the early stages of scaling cloud services to meet demand, Netflix frequently stumbled and hit a variety of walls. Netflix was a pioneer in delivering content through the cloud at this scale, but the open source community has experience, and an established understanding of working with a distributed environment.

    By marshaling the resources of the open source community, Netflix was able to get more eyes on the code, and enlist the volunteer support of hundreds or thousands of developers to help refine and improve the tools in the Simian Army, and other tools Netflix has developed. Ruslan and Josh also explained that there is an unintended benefit of cooperating with the open source community: in-house developers are more diligent when they know that the code they write will be exposed to the general public.

    Netflix doesn’t just take advantage of the open source community; it also makes its tools available to the general public through the Netflix Open Source Software Center on Github. There are tools for availability (like the Simian Army), cloud management, persistent systems, infrastructure services, developer productivity, and more—all available for free for anyone who wishes to use them.

    Culture of Freedom and Responsibility

    Lots of organizations talk a good game. It’s easy to come up with a profound mission statement, or an insightful set of company values. Actually living up to them, however, is a whole different story. Netflix prides itself on building a culture of freedom and responsibility.

    The Netflix culture is part of what makes the company so successful, and why Netflix has been able to achieve what it has in the realms of DevOps and open source. Netflix believes in finding highly skilled, seasoned engineers and developers, and allowing them the autonomy to get their jobs done and own responsibility for what they produce.

    Other organizations can learn a lot from Netflix. Netflix has paved new paths for DevOps, set the bar for collaborating with the open source community, and established a culture of success that any company could benefit from adopting.

  • The Automation Continuum

    The Automation Continuum

    The speed of innovation these days is often influenced by the speed of adoption of new and exciting tools, and specifically open source tools.  Open source projects have been growing at an exponential speed over the course of the past few years; however the process for exploring, testing, configuring, and ultimately integrating these in production often times is still quite complex and time consuming.  In many cases, this process is still done manually.  Like with all DevOps processes by automating this, we are then able to adopt new tooling much more quickly, and with less human error in the process.

    The Open Source Revolution

     

    The friction in this process is due, in large part, to the fact that each of these stages from exploration through POC and testing, integration and then management, many times requires the use of very different tools for each stage, on top of a completely different setup and environment.  This means that every time you want to move from exploration to testing, for example, you have to basically rebuild the entire system.  This can become quite frustrating and, as mentioned above, time consuming.

    What if we could streamline this process  and explore tens and even hundreds of projects quickly, thereby enabling us to seamlessly increase our innovation?

    How this could work – the flow:

    1. Exploration: Explore the product without having to install any software at all.  This could be through a click of a button on Github, and seeing the product in action.  This would enable you to play with it without having to download, configure, or set up any machines.

    2. Testing: When we move to trying it out, we want to use the same model as in the exploration phase.  We’d like to try it out also on a SaaS basis, but this time with more control.  By this I mean testing with real clusters & machines, in a more high performance, and production-like environment.

    3. Development: At this stage, we want to be able to test it with our actual stack, and plug it into our project quickly.  Then, eventually at a later stage download it and run it in our own environment.

    What’s Needed

    With a unified tool for all of these stages, the majority of the friction in the process can be diminished.  One way to achieve this is by running the project as a service or in our environment, with an orchestration engine that can basically be used to take us through all these stages.

    By wrapping the entire project into an uber-launcher [which with Cloudify we call it “the widget”] that any open source project can plug into – like an app store or repository, and any user can start using immediately without necessarily having to know how exactly it runs or works.

    The nice thing is that we can eventually take the software from that app catalog or store, since it’s not packaged as a black box but rather as a blueprint or script. We can then fork it and customize it to our needs.  Because of this, we can actually use the same tools through the entire cycle and break the friction completely.

    So what it all boils down to, is the basic principle of combining the power of SaaS and cloud orchestration to avoid complexity of installation, use a script-based model to make the packaging of software generic – but still customizable, and use a cloud abstraction to move environments without having to change recipe.  This is what we call the automation continuum, and we’ve been using to demonstrate how to take the power of any open source project to any cloud.

  • DevOps: It’s All Open Source’s Fault

    DevOps: It’s All Open Source’s Fault

    Blame DevOps on open source. After all, it was the open source movement that gave developers the idea that they were free to code, free to build applications and other software for their companies without needing prior approval. It was open source that crowned developers kingmakers. It was open source that gave developers the freedom to not only write code, but also manage it.

    It was open source that gave us DevOps.

    DevOps: Freedom To Get Stuff Done

    Traditionally, IT operations has been a specialized task, an exclusive one that largely controlled the code allowed to run within the enterprise. Given the fact that all software had to be purchased before it could be run, there was little risk of developers or anyone else introducing rogue software into the hallowed halls of the data center.

    Enterprises were able to enforce policies because all software had to start with Purchasing and end with Operations. There simply was no other viable way to get software into the enterprise.

    That is, until open source.

    Open source ruined the neat and tidy relationship between Purchasing and Operations. Suddenly software didn’t have to be purchased. It could simply be downloaded. As pressures mounted on lines of business to accelerate their pace of innovation, developers stepped up: “I have an open source project for that.”

    Operations fought back, trying to crimp open source adoption. They failed.

    There simply was too much pressure on developers to get stuff done. Once Amazon gave developers a home outside the data center to deploy their code, the battle was over and a new model for building and managing code was born. Dubbed DevOps, the movement gave developers end-to-end control over their creations.

    Since 2011, DevOps adoption has increased 26%, according to a 2013 survey by Puppet Labs, resulting in 50% application failures and the ability to recover up to 12X faster. The rise in DevOps also translates into the ability to ship code 30X faster. All of which is expressed in a separate CA Technologies survey of senior IT decision-makers, which found that improvements to the customer experience is by far the biggest reason enterprises are embracing DevOps. 

    Given these improvements, there’s no way we’re going back to Operations-focused IT.

    Blessing Or Curse?

    All of which is not to suggest that DevOps has been an unalloyed blessing. In my experience, developers are often unprepared or unwilling to take on the burden of managing their applications in production. Trained for years on the idea that they could build an application and dump it on Operations to manage, developers are discovering that the “Ops” in DevOps is real, and sometimes really a pain.

    For example, one big problem is that production environments and dev/test environments are typically very different. An application that works flawlessly in a small-scale test environment may miss a whole class of errors that only occur in the presence of the more complex production environment (e.g. problems that only occur when application changes interact with a complex, zoned network topology).

    The reality is that over-optimizing for Ops (safe, secure and slow) or Development (Fast, opportunistic, iterative) proves sub-optimal. A balance is needed.

    But that balance increasingly skews toward upgrading Ops to meet developer demands. Indeed, developers are writing a host of infrastructure and tools to help other developers better manage their creations. Often such tooling is SaaS-based, and a significant percentage is open source, allowing developers to continue to skirt the controls of Operations while maintaining flexibility. Companies like Boundary, Puppet Labs, SumoLogic and more have arisen to make operations easier for DevOps professionals, among others.

    My own company, MongoDB, develops the most popular database for modern applications. Universally lauded for how easy MongoDB makes development, our tools for facilitating the operation of MongoDB at scale have lagged. Over the past two years we have been building out monitoring, back-up and other management tooling for MongoDB. It’s simply not enough anymore to forget the “Ops” in DevOps.

    No Putting The DevOps Genie Back In The Bottle

    I expect we’ll see this trend continue. The power of developers will increase in large part because the industry will better enable them to manage their applications, or to work more seamlessly with their Ops peers. But the era of Ops dictating to developers is over.

    Blame open source.

  • IBM to Acquire Cloudant: Open, Cloud Database Service Helps Organizations Simplify Mobile, Web App and Big Data Development

    ARMONK, N.Y. – 24 Feb 2014: IBM (NYSE:IBM) today announced a definitive agreement to acquire Boston, MA-based Cloudant, Inc., a privately held database-as-a-service (DBaaS) provider that enables developers to easily and quickly create next generation mobile and web apps.  

    Cloudant will extend IBM’s Big Data and Analytics, Cloud Computing and Mobile offerings by further helping clients take advantage of these key growth initiatives. Financial terms were not disclosed.

    Clients across a variety of industries, including gaming, financial services, mobile device manufacturers, online learning, retail and healthcare are already using Cloudant technology.

    “IBM is leading the charge in helping its clients take advantage of big data, cloud and mobile,” said Sean Poulley, vice president, Databases & Data Warehousing, IBM. “Cloudant sits squarely at the nexus of these three key transformational areas and enables clients to rapidly deliver an entirely new level of innovative, engaging and data-rich apps to the marketplace.”

    Organizations are being challenged to quickly create engaging and data-rich mobile and web apps. Mobile device usage is proliferating rapidly worldwide, creating a surging demand for apps and an increased volume of structured and unstructured geographically encoded and globally distributed data.  Five petabytes of data are created every day by mobile phone subscribers around the world. To meet this growing demand, data must be always available and easily accessed by massive volumes and networks of users and devices.

    Cloudant, an active participant and contributor to the open source database community Apache CouchDBTM, delivers high availability, elastic scalability and innovative mobile device synchronization. Cloudant’s JSON cloud-based data service allows mobile and web developers to quickly and easily store and access the explosion of mobile data using an application programming interface (API) that is significantly easier to use than alternatives. Increasingly, developers have embraced NoSQL databases because of their flexibility, and JSON has become the predominant NoSQL database technology for mobile and web app developers.

    “IBM has a rich history in the field of data management, and one that will truly differentiate Cloudant’s technology in the marketplace,” said Cloudant CTO and Co-Founder Adam Kocoloski. “Joining IBM allows Cloudant to innovate faster than ever before, and IBM’s track record in open source software gives us complete confidence in our ongoing collaboration with the Apache CouchDB project. Cloudant could not have found a better home than IBM.”

    Cloudant complements IBM’s Big Data and Analytics portfolio beyond traditional data management by providing a database–as–a–service that enables clients to simplify and accelerate the development of engaging and scalable mobile and web apps. Cloudant also is integral to IBM’s MobileFirstsolutions. It enables developers who use Worklight, IBM’s mobile app development software, to quickly create flexible, reliable and scalable apps that include a variety of structured and unstructured data.

    Delivered as a managed cloud service, Cloudant technology ensures that app developers no longer need to be experts in database management, while database administrators (DBA) can focus on higher value tasks beyond day-to-day administration.

    The acquisition of Cloudant will also strengthen IBM’s cloud solutions by providing developers with the tools and resources to build, test, deploy and scale cloud apps on a variety of hosting layers. Cloudant runs on the IBM SoftLayer platform today and extends IBM’s recent investment in the SoftLayer cloud infrastructure. As a global service sold in 140 countries, SoftLayer provides an easy cloud “on-ramp” to help clients quickly deploy mobile capabilities with the security, privacy and reliability of private clouds and the economy, flexibility and speed of a public cloud.

    “Cloudant’s decision to join IBM highlights that the next wave of enterprise technology innovation has moved beyond infrastructure and is now happening at the data layer,” said Cloudant CEO Derek Schoettle. “Our relationship with IBM and SoftLayer has evolved significantly in recent years, with more connected devices generating data at an unprecedented rate. Cloudant’s NoSQL expertise, combined with IBM’s enterprise reliability and resources, adds data layer services to the IBM portfolio that others can’t match.”

    Cloudant’s DBaaS extensively leverages the availability, elasticity and reach of the cloud to create a global data delivery network enabling applications to scale larger and remain available to users wherever they are located.  In addition, the Cloudant managed cloud service:

    ·         Stores data of any structure as self-describing JSON documents

    ·         Leverages a multi-master replication system and advanced distributed design principles to achieve elastic database clusters that can span multiple racks, data centers, or cloud providers

    ·         Enables global data distribution and geo-load balancing to provide high availability and enhanced performance for applications that require data to be located close to users

    ·         Provides full-text search, advanced geo-spatial and temporal querying, and flexible, real-time indexing

    ·         Integrates via a RESTful application programming interface (API)

    ·         Enables easy data replication and sync for mobile applications, with open source, device-native software libraries

    ·         Offers 24×7 monitoring and management by its Big Data experts

    The acquisition of Cloudant is expected to close in 1Q14. Following the close, Cloudant will join IBM’s newly formed Information and Analytics Group led by Senior Vice President Bob Picciano, a business unit within the IBM Software & Systems Group.

    About Cloudant

    Cloudant provides the world’s first globally distributed database-as-a-service (DBaaS) for loading, storing, analyzing, and distributing operational application data for developers of large and/or fast-growing web and mobile applications. Delivered as a managed cloud service, Cloudant technology accelerates time-to-market and time-to-innovation because it frees developers from the mechanics of data management so they can focus exclusively on creating great applications. It also offers high availability, elastic scalability, and innovative mobile device synchronization. For more information, visit https://cloudant.com/

    For more information about IBM Big Data and Analytics, visit http://ibm.co/bigdataanalytics

    For more information on IBM Cloud, visit http://www.ibm.com/cloud-computing/us/en/

    For more information on IBM MobileFirst, visit http://www.ibm.com/mobilefirst/us/en/

    “Apache,” “Apache CouchDB,” and “CouchDB” are registered trademarks or trademarks of theApache Software Foundation in the United States and/or other countries. All other brands and trademarks are the property of their respective owners.