{"id":554,"date":"2011-02-28T15:48:46","date_gmt":"2011-02-28T21:48:46","guid":{"rendered":"http:\/\/www.openstack.org\/blog\/?p=554"},"modified":"2011-02-28T15:48:46","modified_gmt":"2011-02-28T21:48:46","slug":"10-steps-to-initiating-an-openstack-cloud-service","status":"publish","type":"post","link":"https:\/\/www.openstack.org\/blog\/10-steps-to-initiating-an-openstack-cloud-service\/","title":{"rendered":"10 Steps to Initiating an OpenStack Cloud Service"},"content":{"rendered":"<p class=\"lead\">This blog post originates from Eric Day at <a href=\"http:\/\/oddments.org\/?p=591\" target=\"_blank\">http:\/\/oddments.org\/?p=591<\/a>. I have copied it here for your reference:<\/p>\n<p>OpenStack currently consists of three main components: Nova (Compute), Swift  (Object Storage), and Glance (Image Service). There are some other  projects such as a dashboard and mobile apps as well. You can see the <a href=\"https:\/\/launchpad.net\/openstack\">full list here<\/a>. This is  great start, but in order for OpenStack to compete long term other  infrastructure and platform services will need to be brought in. I\u2019d  like to talk about the process I\u2019m taking with a new message queue  service.<\/p>\n<p><strong>Step 1 \u2013 Idea<\/strong><\/p>\n<p>The first step is to figure out what is missing. What new service  would compliment the software already available? What hasn\u2019t been solved  yet? What are users asking for? A message queue seemed like an  appropriate next step as most applications that need to scale out and be  highly available will make use of a queue at some point (sometimes not  in the most obvious form). It will also allow other cloud services to be  built on top of it. In fact, the current OpenStack projects could even  leverage a queue service for new features.<\/p>\n<p><strong>Step 2 \u2013 Initial requirements<\/strong><\/p>\n<p>Before you write up a proposal and send it out, it might be a good  idea to gather some initial requirements and figure out what it may look  like. Don\u2019t worry about details as the community will help flush this  out later. Some of the major requirements when thinking about OpenStack  projects are horizontal scalability, multi-tenancy, modular API, REST  API, zones and locality awareness, and no single points of failure (high  availability). This is a pretty heavy set of requirements before even  getting into service specifics, but this will help you think about how  to approach a service. You may have to diverge away from traditional  thinking for a particular service. For example, what worked in a rack or  a data center may not work in the cloud. You need to account for this  up front and state behavioral differences from what folks may expect.  For the queue service, this meant not taking a traditional approach you  see in some queue protocols and services, and instead integrating ideas  from distributed services.<\/p>\n<p>A multi-tenant cloud is a very different environment from what many  people are used to and usually requires a different approach to solve  problems. If folks tell you you\u2019re re-inventing the wheel, take their  concerns into consideration, but also realize you may not be. You may be  writing a jet engine.<\/p>\n<p><strong>Step 3 \u2013 Wiki and Mailing List Proposal<\/strong><\/p>\n<p>Once you have a good idea and a rough outline, you\u2019ll probably want  to run it by a couple people for feedback before sending it to everyone.  You\u2019ll then want to create a new wiki page on <a href=\"http:\/\/wiki.openstack.org\/\">the OpenStack wiki<\/a> and send a note  to <a href=\"https:\/\/launchpad.net\/%7Eopenstack\">the public mailing list<\/a> that mentions the wiki page and asks for community feedback. For  example, the queue service proposal I wrote <a href=\"http:\/\/wiki.openstack.org\/QueueService\">can be found here<\/a>.  There is an enormous amount of collective experience and brain power on  the mailing list which will help point out any issues with the proposal.  The service you initially propose may look nothing like the service you  actually build. It\u2019s also quite possible the service you propose is not  a good fit for the cloud or OpenStack. The community will help iron all  these details out.<\/p>\n<p><strong>Step 4 \u2013 Wait<\/strong><\/p>\n<p>It can take folks a while to catch up on public mailing lists, so be  patient. Let people know about the proposal by other means (blog, tweet,  irc, \u2026) and help facilitate the conversation as people respond.<\/p>\n<p><strong>Step 5 \u2013 Prototype<\/strong><\/p>\n<p>Once you feel the community is content with the proposal and it\u2019s a  viable idea (don\u2019t expect consensus), prototype it! This shows the  community you are serious and this exercise will help work out more  issues in the proposal. Let the community know about it and again wait  for any feedback. This doesn\u2019t need to be anything fancy, for the queue  service <a href=\"http:\/\/bazaar.launchpad.net\/%7Eeday\/+junk\/osq\/view\/head:\/osq.py\">I  put this together<\/a> over a weekend.<\/p>\n<p><strong>Step 6 \u2013 Name and Language<\/strong><\/p>\n<p>Now comes the difficult part, choosing a project name. I\u2019d suggest  not using the mailing list for this as it will be a lot of noise for a  matter that isn\u2019t too important. Ask a couple folks who may also be  interested for ideas and make sure it\u2019s not already taken (search on  github, Launchpad, Google, etc). For the queue service we decided on  \u201cBurrow\u201d.<\/p>\n<p>You\u2019ll also need to figure out the most appropriate language. For  middleware and services, Python is a good default. If efficiency is a  concern, look at Erlang or C\/C++. Be sure to send another mail to the  list and ask for feedback. With the queue service I initially proposed  C++ with Erlang as an alternative since efficiency is a major concern  (especially around utilizing multiple cores), and the community came  back mixed but with more enthusiasm for Erlang.<\/p>\n<p><strong>Step 7 \u2013 Bootstrap the Project on Launchpad<\/strong><\/p>\n<p>We\u2019re using Launchpad for OpenStack project management. You\u2019ll need  to create a project and a number of groups to manage it. For example,  the queue project can be <a href=\"https:\/\/launchpad.net\/burrow\">found  here<\/a>. The groups have the following roles (replace burrow with your  project name):<\/p>\n<ul>\n<li><a href=\"https:\/\/launchpad.net\/%7Eburrow\">burrow<\/a> \u2013 Public group  that anyone can join. This currently includes members on the main  OpenStack mailing list, but we\u2019re setup this way in case we need to  break projects out into their own list.<\/li>\n<li><a href=\"https:\/\/launchpad.net\/%7Eburrow-drivers\">burrow-drivers<\/a> \u2013 The group responsible for maintaining the project, managing  blueprints, and making releases.<\/li>\n<li><a href=\"https:\/\/launchpad.net\/%7Eburrow-core\">burrow-core<\/a> \u2013 The  group responsible for performing code reviews.<\/li>\n<li><a href=\"https:\/\/launchpad.net\/%7Eburrow-bugs\">burrow-bugs<\/a> \u2013 The  group responsible for managing bugs.<\/li>\n<\/ul>\n<p><strong>Step 8 \u2013 Lock onto Releases and Milestone Schedule<\/strong><\/p>\n<p>While not important right away, it might be a good idea to start  working with the OpenStack release cycle. Releases are currently every  three months with milestones setup in each release for feature freeze,  bug freeze, and releases. See <a href=\"http:\/\/wiki.openstack.org\/Release\">the release page<\/a> for more  details. Launchpad makes it fairly simple to manage this, you\u2019ll just  want to create a new series (for example, \u201ccactus\u201d right now), and a  couple milestones within that series for the freezing and release. Ask  on the mailing list or on IRC if you need any help, but a good rule of  thumb is to follow what other established projects do (like Nova).<\/p>\n<p><strong>Step 9 \u2013 Code!<\/strong><\/p>\n<p>Get to work and try to recruit other developers to help you. Keep the  community updated with progress by using IRC, mailing list, <a href=\"http:\/\/planet.openstack.org\/\">planet.openstack.org<\/a>, and  tweets.<\/p>\n<p><strong>Step 10 \u2013 Submit to the Project Oversight Committee<\/strong><\/p>\n<p>Up until this point your project has not been an official OpenStack  project. It is a well thought-out idea driven by the community that  probably has a good chance though. You\u2019ll need to make a proposal to the  POC using <a href=\"http:\/\/wiki.openstack.org\/Governance\/POC\">this page<\/a> once the project can stand on it\u2019s own. You probably don\u2019t need a final  version, but you need something that is functional and more robust than  a prototype. The POC meets weekly, although it may take more time (and  some conversations) to decide if your project is ready. The queue  service I\u2019ve been driving has not been proposed since it\u2019s not ready, so  you may want to take all this with a grain of salt. It is my hope to  have the first version ready to propose in April as part of the Cactus  release.<\/p>\n<p><strong>Final Thoughts<\/strong><\/p>\n<p>This process will vary and can certainly be refined. I\u2019m stating what  I\u2019ve done with a new project, but existing projects will obviously need  to take a different route. The main idea to keep in mind though is that  any OpenStack project should be seen as community driven, not just by  an individual or company. One or more individuals may carry out a large  part of the work of the community initially, but community concerns and  feedback should always be taken with the utmost importance.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This blog post originates from Eric Day at http:\/\/oddments.org\/?p=591. I have copied it here for your reference: OpenStack currently consists of three main components: Nova (Compute), Swift (Object Storage), and Glance (Image Service). There are some other projects such as a dashboard and mobile apps as well. You can see the full list here. This&#8230;  <a href=\"https:\/\/www.openstack.org\/blog\/10-steps-to-initiating-an-openstack-cloud-service\/\" class=\"more-link\" title=\"Read 10 Steps to Initiating an OpenStack Cloud Service\">Read more &raquo;<\/a><\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[7,21,4],"tags":[110,88,111],"_links":{"self":[{"href":"https:\/\/www.openstack.org\/blog\/wp-json\/wp\/v2\/posts\/554"}],"collection":[{"href":"https:\/\/www.openstack.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.openstack.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.openstack.org\/blog\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.openstack.org\/blog\/wp-json\/wp\/v2\/comments?post=554"}],"version-history":[{"count":1,"href":"https:\/\/www.openstack.org\/blog\/wp-json\/wp\/v2\/posts\/554\/revisions"}],"predecessor-version":[{"id":555,"href":"https:\/\/www.openstack.org\/blog\/wp-json\/wp\/v2\/posts\/554\/revisions\/555"}],"wp:attachment":[{"href":"https:\/\/www.openstack.org\/blog\/wp-json\/wp\/v2\/media?parent=554"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.openstack.org\/blog\/wp-json\/wp\/v2\/categories?post=554"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.openstack.org\/blog\/wp-json\/wp\/v2\/tags?post=554"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}