{"id":4637,"date":"2017-10-10T18:02:45","date_gmt":"2017-10-10T18:02:45","guid":{"rendered":"http:\/\/redmonk.com\/jgovernor\/?p=4637"},"modified":"2017-10-10T21:06:06","modified_gmt":"2017-10-10T21:06:06","slug":"whats-on-your-plate-twelve-factortraditional-hybid-apps-and-habitat","status":"publish","type":"post","link":"https:\/\/redmonk.com\/jgovernor\/whats-on-your-plate-twelve-factortraditional-hybid-apps-and-habitat\/","title":{"rendered":"What&#8217;s On Your Plate? Twelve factor\/traditional hybrid apps and Habitat"},"content":{"rendered":"<p><a href=\"http:\/\/jgovernor-media.redmonk.com\/jgovernor\/files\/2017\/10\/food.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-4638\" src=\"http:\/\/jgovernor-media.redmonk.com\/jgovernor\/files\/2017\/10\/food-1024x768.jpg\" alt=\"\" width=\"561\" height=\"420\" \/><\/a><\/p>\n<p>One of the incredible privileges of this job is that you regularly get to hang out with people that have driven the state of the art in tech forward. In the world of DevOps, Adam Jacob and Luke Kanies are two such examples, being the creators of Chef and Puppet respectively. Last week Kanies spoke at our Monktoberfest 2018 conference.\u00a0Today I had lunch with Jacob at Chef&#8217;s London community summit.<\/p>\n<p>One thing that really strongly me in conversations with both of them was the deep pragmatism, and indeed pessimism about how far we have actually travelled as an industry in terms of improving how we manage infrastructure. Matt Asay recently <a href=\"https:\/\/www.datamation.com\/applications\/the-sorry-state-of-devops.html\">quoted Kanies saying<\/a>\u00a0DevOps practices are &#8220;barely present around the market&#8221;, and &#8220;as a result we\u2019re going to <em>be another decade or two<\/em> before anything interesting happens.&#8221; [italics mine]<\/p>\n<p>In the cloud native ecosystem we&#8217;re currently seeing a bit of magical thinking, where containers are going to solve all known IT problems.\u00a0Jacob said he and Kanies, having been in the management trenches for 20 years, &#8220;the real world&#8221; as he put it, had a different perspective than some of these new market entrants.<\/p>\n<p>Jacobs has a point &#8211; the idea that just because Google created an open source version of its container orchestration layer &#8211; Kubernetes &#8211; that it&#8217;s applicable to general purpose IT doesn&#8217;t really make sense. Let&#8217;s face it, very few organisations face Google&#8217;s scale challenges. How many enterprises have the kind of infrastructure homogeneity and control Google does? Zero. The boundary between cloud native, and traditional enterprise IT, is a really interesting point of friction in the industry right now. We have come round to the idea that hybrid cloud is indeed a thing, so now the question becomes how are we going to run and manage it? Do we really need to re-platform all of our apps? Ain&#8217;t going to happen. Take Cloud Foundry, for example, which is strongly opinionated, originally conceived as a Heroku for enterprise IT to run so-called <a href=\"https:\/\/12factor.net\/\">Twelve Factor<\/a> apps. Quick reminder:<\/p>\n<p id=\"i_codebase\" style=\"padding-left: 30px;\"><a href=\"https:\/\/12factor.net\/codebase\">I. Codebase<\/a><\/p>\n<p id=\"one_codebase_tracked_in_revision_control_many_deploys\" style=\"padding-left: 30px;\">One codebase tracked in revision control, many deploys<\/p>\n<p id=\"ii_dependencies\" style=\"padding-left: 30px;\"><a href=\"https:\/\/12factor.net\/dependencies\">II. Dependencies<\/a><\/p>\n<p id=\"explicitly_declare_and_isolate_dependencies\" style=\"padding-left: 30px;\">Explicitly declare and isolate dependencies<\/p>\n<p id=\"iii_config\" style=\"padding-left: 30px;\"><a href=\"https:\/\/12factor.net\/config\">III. Config<\/a><\/p>\n<p id=\"store_config_in_the_environment\" style=\"padding-left: 30px;\">Store config in the environment<\/p>\n<p id=\"iv_backing_services\" style=\"padding-left: 30px;\"><a href=\"https:\/\/12factor.net\/backing-services\">IV. Backing services<\/a><\/p>\n<p id=\"treat_backing_services_as_attached_resources\" style=\"padding-left: 30px;\">Treat backing services as attached resources<\/p>\n<p id=\"v_build_release_run\" style=\"padding-left: 30px;\"><a href=\"https:\/\/12factor.net\/build-release-run\">V. Build, release, run<\/a><\/p>\n<p id=\"strictly_separate_build_and_run_stages\" style=\"padding-left: 30px;\">Strictly separate build and run stages<\/p>\n<p id=\"vi_processes\" style=\"padding-left: 30px;\"><a href=\"https:\/\/12factor.net\/processes\">VI. Processes<\/a><\/p>\n<p id=\"execute_the_app_as_one_or_more_stateless_processes\" style=\"padding-left: 30px;\">Execute the app as one or more stateless processes<\/p>\n<p id=\"vii_port_binding\" style=\"padding-left: 30px;\"><a href=\"https:\/\/12factor.net\/port-binding\">VII. Port binding<\/a><\/p>\n<p id=\"export_services_via_port_binding\" style=\"padding-left: 30px;\">Export services via port binding<\/p>\n<p id=\"viii_concurrency\" style=\"padding-left: 30px;\"><a href=\"https:\/\/12factor.net\/concurrency\">VIII. Concurrency<\/a><\/p>\n<p id=\"scale_out_via_the_process_model\" style=\"padding-left: 30px;\">Scale out via the process model<\/p>\n<p id=\"ix_disposability\" style=\"padding-left: 30px;\"><a href=\"https:\/\/12factor.net\/disposability\">IX. Disposability<\/a><\/p>\n<p id=\"maximize_robustness_with_fast_startup_and_graceful_shutdown\" style=\"padding-left: 30px;\">Maximize robustness with fast startup and graceful shutdown<\/p>\n<p id=\"x_devprod_parity\" style=\"padding-left: 30px;\"><a href=\"https:\/\/12factor.net\/dev-prod-parity\">X. Dev\/prod parity<\/a><\/p>\n<p id=\"keep_development_staging_and_production_as_similar_as_possible\" style=\"padding-left: 30px;\">Keep development, staging, and production as similar as possible<\/p>\n<p id=\"xi_logs\" style=\"padding-left: 30px;\"><a href=\"https:\/\/12factor.net\/logs\">XI. Logs<\/a><\/p>\n<p id=\"treat_logs_as_event_streams\" style=\"padding-left: 30px;\">Treat logs as event streams<\/p>\n<p id=\"xii_admin_processes\" style=\"padding-left: 30px;\"><a href=\"https:\/\/12factor.net\/admin-processes\">XII. Admin processes<\/a><\/p>\n<p id=\"run_adminmanagement_tasks_as_oneoff_processes\" style=\"padding-left: 30px;\">Run admin\/management tasks as one-off processes<\/p>\n<p>Let&#8217;s be honest &#8211; a vanishingly small set of enterprise IT customers is going to deeply understand this list, let alone develop apps this way. Cloud Foundry was not intended to run traditional enterprise workloads, but rather to demand a new style of writing and running applications.<\/p>\n<p>One of the key questions for bridging the new and old worlds is persistent storage. How, for example, do you manage an app that uses both Cloud Foundry and SAP HANA (which expects a very particular storage model, and set up of physical disc for persistence). Kubernetes, meanwhile, can be extended to cover other persistent models, but they&#8217;re going to then only be manageable in the context of Kubernetes.<\/p>\n<p>Jacobs argues <a href=\"https:\/\/www.habitat.sh\/\">Habitat<\/a> can be used to manage this tension between hybrid 12Factor\/traditional infrastructures because it manages packages and dependencies for you. Of course that&#8217;s the promise of more runtime-oriented platforms and platforms (as a Service) &#8211; but the difference is that Habitat is designed so that you can\u00a0deploy an application consistently in multiple formats and runtime environments: Docker, Kubernetes, Cloud Foundry, Mesosphere, VMs, bare metal, and more. Chef announced support for Cloud Foundry and Kubernetes just yesterday &#8211; good write up <a href=\"https:\/\/blog.chef.io\/2017\/10\/09\/habitat-builder-fastest-path-code-cloud-native\/?utm_source=twitter&amp;utm_medium=social&amp;utm_content=ok-twitter&amp;utm_campaign=ok-2017+H2+Blog+Posts\">here<\/a> by friend of RedMonk Michael Ducy.<\/p>\n<p>While the industry was over-rotating to everything is public cloud (<a href=\"http:\/\/redmonk.com\/jgovernor\/2008\/03\/13\/15-ways-to-tell-its-not-cloud-computing\/\">15 Ways To Tell It&#8217;s Not Cloud Computing<\/a>) it might have seemed like overkill to worry about platform support. Let the cloud manage this stuff. Then containers came along, and we over-rotated there. But in a world where on-prem is still a thing, people are going to make decisions like using bare metal (in say high frequency trading). And disc isn&#8217;t going to suddenly disappear. Jacobs wants to position Habitat as a bridge between the newer runtimes and formats and all the other stuff, particular where persistence is a problem. For all the excitement about containers there is definitely a market for the configuration as code DevOps models pioneered by Chef and Puppet. Red Hat&#8217;s acquisition of Ansible is paying dividends as sales tick along nicely because customers have all kinds of non cloud native stuff to manage, and automation never goes out of fashion. Also enterprises are always going to do custom things, no matter how strong the vendor opinion is. As Jacob would put it &#8220;that&#8217;s why we can&#8217;t have nice things&#8221;. But it is reality.<\/p>\n<p>I am Cloud Foundry&#8217;s European summit in Basel tomorrow, and Docker Con in Copenhagen tomorrow, so I will try and flesh out some of these thoughts, with a view to better understanding the emerging hybrid &#8211; 12Factor\/traditional landscape.<\/p>\n<p>&nbsp;<\/p>\n<p>disclosure: Cloud Foundry Foundation and Docker are clients, but all opinions expressed are mine.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>One of the incredible privileges of this job is that you regularly get to hang out with people that have driven the state of the art in tech forward. In the world of DevOps, Adam Jacob and Luke Kanies are two such examples, being the creators of Chef and Puppet respectively. Last week Kanies spoke<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","footnotes":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false},"categories":[1],"tags":[440,410,505,133,518],"class_list":["post-4637","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-chef","tag-cloud","tag-cloud-foundry","tag-devops","tag-puppet"],"jetpack_featured_media_url":"","jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p9wfjh-1cN","_links":{"self":[{"href":"https:\/\/redmonk.com\/jgovernor\/wp-json\/wp\/v2\/posts\/4637","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/redmonk.com\/jgovernor\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/redmonk.com\/jgovernor\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/redmonk.com\/jgovernor\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/redmonk.com\/jgovernor\/wp-json\/wp\/v2\/comments?post=4637"}],"version-history":[{"count":0,"href":"https:\/\/redmonk.com\/jgovernor\/wp-json\/wp\/v2\/posts\/4637\/revisions"}],"wp:attachment":[{"href":"https:\/\/redmonk.com\/jgovernor\/wp-json\/wp\/v2\/media?parent=4637"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/redmonk.com\/jgovernor\/wp-json\/wp\/v2\/categories?post=4637"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/redmonk.com\/jgovernor\/wp-json\/wp\/v2\/tags?post=4637"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}