<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4179812064174942414</id><updated>2024-10-25T02:30:58.053-04:00</updated><category term="Cloud Foundry"/><category term="Pivotal Cloud Foundry"/><category term="JAVA"/><category term="Docker"/><category term="Hadoop"/><category term="Architecture"/><category term="Docker Swarm"/><category term="RabbitMQ"/><category term="Spring Framework"/><category term="Maven"/><category term="PAAS"/><category term="Consul"/><category term="Dependency Management"/><category term="Docker Cluster Networking"/><category term="Grails"/><category term="Groovy"/><category term="Micro Services"/><category term="Pivotal Hadoop"/><category term="Ambari"/><category term="Build V.s Buy"/><category term="GemFire-XD"/><category term="HAWQ"/><category term="Hortonworks"/><category term="Multihost Docker"/><category term="Pivotal"/><category term="Portal"/><category term="Spring-XD"/><category term="Stackato"/><category term="Virtualization"/><category term="AGILE"/><category term="Amazon Web Services"/><category term="Apache Ambari"/><category term="BOSH"/><category term="Best Practices"/><category term="Build Management"/><category term="CF-DEV"/><category term="Cloud"/><category term="DNS"/><category term="Developer Operations"/><category term="Disaster Recovery"/><category term="Docker Compose"/><category term="Domain Driven Design"/><category term="GemFire"/><category term="Go"/><category term="Google Container Engine"/><category term="Grails Portal WebFlow"/><category term="HP Helion"/><category term="IAAS"/><category term="IBM BlueMix"/><category term="IVY"/><category term="Interview"/><category term="Interview Traps"/><category term="Introduction"/><category term="J2EE"/><category term="JBOSS"/><category term="JEE"/><category term="JUnit"/><category term="Kubernetes"/><category term="Open Source"/><category term="OpenStack"/><category term="Performance"/><category term="Pivotal Cloud Foundry Install"/><category term="Pivotal HD"/><category term="Properties Integration"/><category term="REST"/><category term="Requirements"/><category term="SOA"/><category term="Services"/><category term="Sizing"/><category term="Spring Batch"/><category term="Spring Hateos"/><category term="Technical Interview"/><category term="VMware"/><category term="Web Applications"/><category term="Zookeeper"/><category term="configuration"/><category term="stemcell"/><title type='text'>Java and Cloud Architecture Rambings</title><subtitle type='html'>Microservices, Cloud and Big Data Musings</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://javaarchramble.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default'/><link rel='alternate' type='text/html' href='http://javaarchramble.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default?start-index=26&amp;max-results=25'/><author><name>Joshua Davis</name><uri>http://www.blogger.com/profile/10630084168049860089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyKSAAwDoasXgYegxE0iJSn-lY0wgimia82Zq3rLtAxh-BJ3nI4L8iDl0dcjlTazTrf2aFC0xLPHR4r6iEs6pQoSyoQcYS9zo58hPzruLEeHubkHC9nsMqwHZZLvMtxfg/s220/ProfilePhoto.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>46</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4179812064174942414.post-7640141955382928238</id><published>2018-05-23T10:43:00.000-04:00</published><updated>2018-05-23T11:02:14.039-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="BOSH"/><category scheme="http://www.blogger.com/atom/ns#" term="CF-DEV"/><category scheme="http://www.blogger.com/atom/ns#" term="Cloud Foundry"/><category scheme="http://www.blogger.com/atom/ns#" term="Pivotal Cloud Foundry"/><category scheme="http://www.blogger.com/atom/ns#" term="stemcell"/><title type='text'>How to Start Developing with Cloud Foundry for JVM based Languages - Part 1</title><content type='html'>There really is a very slim barrier to entry to start developing for JVM based languages on Cloud Foundry (CF). In fact, one of the easiest ways to start developing is to use the &lt;a href=&quot;https://github.com/cloudfoundry-incubator/cfdev&quot;&gt;CF-DEV project&amp;nbsp;&lt;/a&gt;. Development teams can proceed pretty far in the development life-cycle without having to actually think about the eventual deployment architecture and, once those decisions are made it will not affect your code&lt;br /&gt;
&lt;br /&gt;
There are some things to consider when you start developing such as how you are going to deal with data storage, and how you will access resources that are not on Cloud Foundry.&amp;nbsp; In this set of blog posts, there will be instructions on how to make sure that these factors do not throw your development process into disorder.&amp;nbsp; Also, in order to not have issues later on when you figure out your production deployment, there are some architectural considerations as well&lt;br /&gt;
&lt;br /&gt;
As part of the initial phase of starting to use Cloud Foundry for development, your security/infrastructure team may be involved in the decisions you make. Definitely, when you are deploying to a production environment they will be heavily involved.&amp;nbsp; It is a smart move to handle these situations early in the development cycle so that the impact (although not in the code) will be low. If not handled early, this choice will have an impact on your ability to deploy to a production Cloud Foundry environment:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;text-indent: -0.25in;&quot;&gt;Security on endpoints inside and outside of Cloud Foundry&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Certificates and HTTPS are natively part of Cloud Foundry.&amp;nbsp; There are options to run HTTPS inside of the containers, or just for the external endpoints. There are pros and cons associated with each decision.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;text-indent: -0.25in;&quot;&gt;Authentication and Authorization for the application components&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
OAUTH2, LDAP,&amp;nbsp;and SAML integration are all possible with either a commercial Authentication / Authorization solution or open source projects such as Cloud Foundry UAA or &lt;span class=&quot;SpellE&quot;&gt;Istio&lt;/span&gt;.&lt;br /&gt;
The storage of secrets outside of the application and Cloud Foundry is an important decision that can have an impact on the applications as code changes will need to be made to implement any of the possible solutions. Many organizations have versions of a specific operating system, agents that must run on any implemented virtual machine, and other requirements that conflict with the way that Cloud Foundry “out the box” executes.&lt;br /&gt;
&lt;h1&gt;
Intended Audience&lt;/h1&gt;
Technical management, software developers, and anybody who is evaluating Cloud Foundry or any of the distributions for use in deploying their micro-&lt;span class=&quot;GramE&quot;&gt;services based&lt;/span&gt; applications.&amp;nbsp; The assumption is that you have either attended some training for Cloud Foundry or one of it’s distributions or have read the large amounts of documentation available on cloudfoundry.org.&lt;br /&gt;
&lt;h1&gt;
A few words of wisdom&lt;/h1&gt;
&lt;div&gt;
&lt;div class=&quot;MsoListParagraphCxSpFirst&quot; style=&quot;mso-list: l0 level1 lfo1; text-indent: -.25in;&quot;&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;text-indent: -0.25in;&quot;&gt;Don’t be afraid to start over, the whole concept of Cloud Foundry is that you can change the platform without affecting your running applications.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Don’t be afraid to fail.&amp;nbsp; Trying a new service broker or BOSH release does not typically affect your running applications.&lt;/li&gt;
&lt;li&gt;You can start using Cloud Foundry without having to make it look like your production environment from the start.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Don’t attempt to figure out all of the scenarios immediately for how you will use Cloud Foundry.&amp;nbsp; From a development perspective,&lt;span style=&quot;text-indent: -0.25in;&quot;&gt; there is little risk in starting to use CF.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Spend time learning the underlying deployment technology that deploys Cloud Foundry onto your Infrastructure.&amp;nbsp; BOSH is what is used in most distributions,&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;MsoListParagraphCxSpMiddle&quot; style=&quot;mso-list: l0 level1 lfo1; text-indent: -.25in;&quot;&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoListParagraphCxSpMiddle&quot; style=&quot;mso-list: l0 level1 lfo1; text-indent: -.25in;&quot;&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoListParagraphCxSpLast&quot; style=&quot;mso-list: l0 level1 lfo1; text-indent: -.25in;&quot;&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h1&gt;
What to know before you start&lt;/h1&gt;
Cloud Foundry is a platform where “you don’t know what you don’t know” can be a bad thing but not something that will doom your project. Using Cloud Foundry as your development environment and eventual deployment may be the thing that enables you to have tremendous success or wallow in what I like to call “The pit of despair.”&amp;nbsp; There are many decisions that may not seem important at &lt;span class=&quot;GramE&quot;&gt;first but&lt;/span&gt; can doom your deployment to a production Cloud Foundry instance. It is typical, in my experience that because of the software architecture of Cloud Foundry mistakes can be remedied by re-installing the Cloud Foundry release or adding a BOSH release later. The great thing about this platform is that the act of re-installing Cloud Foundry has no effect on the running applications and the code.&lt;br /&gt;
&lt;h1&gt;
Cloud Foundry Operating Environment&lt;/h1&gt;
Is your operations or security team asking these questions? Can you change the operating system that runs the “Virtual Hosts” for Cloud Foundry and/or the operating system used to run the garden containers?&lt;br /&gt;
&lt;h2&gt;
What are your expectations for the operating environment?&lt;/h2&gt;
&lt;h3&gt;
Introduction to the Cloud Foundry (CF) Operating Environment&lt;/h3&gt;
If you didn’t already know, CF natively runs all of &lt;span class=&quot;SpellE&quot;&gt;its&lt;/span&gt; workloads in Garden containers.&amp;nbsp; For this blog post I am not going to go into detail on what containers are, but let’s think about them as an isolated system process that runs in isolation on a “Virtual Host.”&amp;nbsp; Each container It has &lt;span class=&quot;SpellE&quot;&gt;its&lt;/span&gt; own network, resources, and memory. For Cloud Foundry there are “Virtual Hosts” that run the containers and generally maintain them.&amp;nbsp; If you want more detail the Cloud Foundry documentation has quite a bit of documentation on the Cloud Controller which manages the “Virtual Hosts” and the containers.&lt;br /&gt;
&lt;br /&gt;
Each of the “Virtual Hosts” run a default Operating System that Cloud Foundry has selected through the BOSH release.&amp;nbsp; To change the operating system version, or to add some specific behavior at the operating system level you will have to make changes to the release of cloud foundry for BOSH. Making changes to the BOSH release can be difficult and not something that I would advise.&amp;nbsp; BOSH releases for CF are tested by the open source teams and certified to work, once changed it’s also difficult to ascertain what the resulting impact will be on the operation of Cloud Foundry.&lt;br /&gt;
&lt;br /&gt;
If the operating &amp;nbsp;Cloud Foundry uses a specific source container Operating System that is contained in what is called “&lt;span class=&quot;SpellE&quot;&gt;stemcells&lt;/span&gt;.”&amp;nbsp; By creating certified &lt;span class=&quot;SpellE&quot;&gt;stemcells&lt;/span&gt;, Cloud Foundry enables a system that does quite a bit for you in the software infrastructure area but is also “opinionated” on certain items such as the Operating System used for deployment and the specific set of security software that is deployed on it.&lt;br /&gt;
&lt;br /&gt;
The issue is that many larger organizations have standards for the Operating System that applications run on and the monitoring agents that must work with them as well.&amp;nbsp; The solution is typically a custom &lt;span class=&quot;SpellE&quot;&gt;stemcell.&amp;nbsp; If you follow the instructions on the Cloud Foundry website a new stemcell&lt;/span&gt;&amp;nbsp;can be created, it’s not easy but it can be done.&lt;br /&gt;
&lt;br /&gt;
This decision is not one to be taken lightly as there are tradeoffs in every situation. &amp;nbsp;&amp;nbsp;if you have no specific software infrastructure standards for development and are willing to accept the default container (OS and environment) from the Cloud Foundry community, and default build-pack (Java environment) you can implement and use Cloud Foundry right out of the box.&amp;nbsp; If you already have strict standards in place for what Operating System should be used or for example what version of Tomcat you want to support, and you just need something to enforce it then Cloud Foundry can be valuable, but difficult to implement.&lt;br /&gt;
&lt;br /&gt;
Next Post - When should you create a custom CF stemcell versus creating a custom CF Buildpack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://javaarchramble.blogspot.com/feeds/7640141955382928238/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4179812064174942414/7640141955382928238' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/7640141955382928238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/7640141955382928238'/><link rel='alternate' type='text/html' href='http://javaarchramble.blogspot.com/2018/05/how-to-start-developing-with-cloud.html' title='How to Start Developing with Cloud Foundry for JVM based Languages - Part 1'/><author><name>Joshua Davis</name><uri>http://www.blogger.com/profile/10630084168049860089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyKSAAwDoasXgYegxE0iJSn-lY0wgimia82Zq3rLtAxh-BJ3nI4L8iDl0dcjlTazTrf2aFC0xLPHR4r6iEs6pQoSyoQcYS9zo58hPzruLEeHubkHC9nsMqwHZZLvMtxfg/s220/ProfilePhoto.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4179812064174942414.post-8817091908926977299</id><published>2016-02-18T08:55:00.003-05:00</published><updated>2016-02-18T09:44:47.037-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Ambari"/><category scheme="http://www.blogger.com/atom/ns#" term="Docker"/><category scheme="http://www.blogger.com/atom/ns#" term="Docker Cluster Networking"/><category scheme="http://www.blogger.com/atom/ns#" term="Docker Swarm"/><category scheme="http://www.blogger.com/atom/ns#" term="Hadoop"/><category scheme="http://www.blogger.com/atom/ns#" term="Multihost Docker"/><title type='text'>An Example of Docker Multi-Host Networking With Hadoop Part 3 - Validating your Swarm Cluster</title><content type='html'>&lt;h2&gt;
Validating The Docker Swarm Cluster&lt;/h2&gt;
In parts &lt;a href=&quot;http://bit.ly/1ZMJSTZ&quot;&gt;1&lt;/a&gt; and &lt;a href=&quot;http://bit.ly/1QtFZJk&quot;&gt;2&lt;/a&gt; of this series I have shown the process of creating a bare-metal Docker Swarm Cluster using Ambari as an example. &amp;nbsp;In this post I will go through the steps that I take when I bring up the Docker Swarm Cluster in my home lab. &amp;nbsp;To make it easier to understand the infrastructure referenced, &amp;nbsp;I have created a &lt;a href=&quot;http://javaarchramble.blogspot.com/2016/02/an-example-docker-swarm-multi-host-lab.html&quot;&gt;post&lt;/a&gt; with the configuration of my home lab.&lt;br /&gt;
&lt;h3&gt;
Assumptions:&lt;/h3&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;All Docker hosts are booted up and running. &amp;nbsp;&lt;/li&gt;
&lt;li&gt;Docker Swarm has been installed on each host as a Linux service and is running.&lt;/li&gt;
&lt;li&gt;There is one host that has the Swarm manager running.&lt;/li&gt;
&lt;li&gt;There is at the minimum one host that has Consul running.&lt;/li&gt;
&lt;li&gt;An overlay network has been created successfully.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
Recommendations:&lt;/h3&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Start with just 2 hosts, run through these steps and then add the rest of your hosts.&lt;/li&gt;
&lt;li&gt;Have a couple of images that you would like to use already pulled from the your repository.&lt;/li&gt;
&lt;li&gt;For this cluster, use Consul as your DNS.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
Pre-Validation steps:&lt;/h3&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Follow instructions from Part I and Part II to install the server components and the second host.&lt;/li&gt;
&lt;li&gt;Pull the Ambari server and Ambari agent image from the public repository.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-indent: 50px;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;$ docker pull hortonworks/ambari-agent&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;$ docker pull hortonworks/ambari-server&lt;/span&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;On each host edit the .profile and add the DOCKER_HOST variable&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-indent: 50px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Add this line to the your .profile in the home directory&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;export DOCKER_HOST=&lt;i&gt;&lt;b&gt;DockerManagerHost&lt;/b&gt;&lt;/i&gt;:&lt;b&gt;&lt;i&gt;DockerManagerPort&lt;/i&gt;&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;On each host edit the .profile and add the CONSUL variable&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-indent: 50px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Add this line to the your .profile in the home directory&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;export CONSUL=&lt;b&gt;&lt;i&gt;ConsulManagerHost&lt;/i&gt;&lt;/b&gt;:&lt;b&gt;&lt;i&gt;ConsulManagerPort&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;
&lt;ul style=&quot;font-size: medium; font-weight: normal;&quot;&gt;
&lt;li&gt;Incorporate the .profile into your environment &amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;font-weight: normal; text-indent: 50px;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;$. .profile&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;or&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;$source .profile&lt;/span&gt;&lt;/div&gt;
&lt;/h3&gt;
&lt;h3&gt;
Validation Steps&lt;/h3&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;Check that the Docker Service, Consul, and the Docker Swarm service network components are functioning correctly.&lt;/li&gt;
&lt;ul style=&quot;margin-left: .5cm;&quot;&gt;
&lt;li&gt;&lt;b&gt;Get the status of the Swarm cluster - &lt;/b&gt;The first thing to check is that all of the expected hosts are actually part of the Swarm cluster. &amp;nbsp;Below is an example of the swarm list command which will provide the list of hosts. &amp;nbsp;Note that you should change the ip address &quot;192.168.1.18&quot; to the server where you have the consul server running. &amp;nbsp;The 8500 port number is the standard consul port.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;margin-left: 2cm;&quot;&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;$ swarm list consul://192.168.1.18:8500&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;192.168.1.16:2375&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;192.168.1.36:2375&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: small;&quot;&gt;What you should see is the list of hosts that you have setup to &quot;advertise&quot; as part of the Swarm Cluster. &amp;nbsp;If you don&#39;t see all of your hosts, check that both the Docker daemon is advertising it&#39;s port and that you have the Docker swarm daemon running and advertising the Docker port. &amp;nbsp;Try restarting all of the services on each host and then check to see if the host is showing up.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol&gt;&lt;ul style=&quot;margin-left: .5cm;&quot;&gt;
&lt;li&gt;&lt;b&gt;Check the Docker network components&lt;/b&gt; - When an overlay network is created, it creates a network that can be seen by all of the hosts. &amp;nbsp;That implies that you would not be able to create the network without the Consul server running since it stores the overlay network. &amp;nbsp;Also, as you can see from the example below, when you setup a multi-host network in Docker you should be able see all of the standard networks for each host, and the overlay network that is indicated by &quot;overlay&quot; in the Driver column.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;div style=&quot;margin-left: 2cm;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;margin-left: 2cm;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;$docker network ls&lt;/span&gt;&lt;/div&gt;
&lt;ol&gt;&lt;ul style=&quot;margin-left: .5cm;&quot;&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;div style=&quot;margin-left: 2cm;&quot;&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;NETWORK ID &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NAME &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DRIVER&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;88d2173cc4a2 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ubuntu-hp-jdavis/host &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;host&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;8427b3e43162 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ubuntu-jdavis-dell/none &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;null&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;7dfe494ce0aa &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;my-network &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; overlay&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;c1569a71811a &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ubuntu-hp-jdavis/docker_gwbridge &amp;nbsp; &amp;nbsp; bridge&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;90531773029a &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ubuntu-jdavis-dell/bridge &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;bridge&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;acd8851af5b2 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ubuntu-hp-jdavis/bridge &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;bridge&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;4614ab39398c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ubuntu-hp-jdavis/none &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;null&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;71fad951cfd7 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;my-net &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; overlay&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;e3fd92dd2bf3 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ubuntu-jdavis-dell/host &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;host&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;57b2a293c5d8 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ubuntu-jdavis-dell/docker_gwbridge &amp;nbsp; bridge&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;margin-left: 2cm;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;ul style=&quot;margin-left: .5cm;&quot;&gt;
&lt;li&gt;&lt;b&gt;Check the Docker standard networks&lt;/b&gt; - You should see all of the standard networks for each of your hosts in the response to displaying all of the networks. &amp;nbsp;If you don&#39;t see a network entry for each host that has for &quot;docker_gwbridge&quot;, &quot;host&quot;, &quot;bridge&quot;, and &quot;none&quot; then there could be an issue with your setup. Also, in my experience it could take a few seconds for all of the networks to display if you are doing this check immediately after creating the overlay network.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;li&gt;Pull a Docker image - When you pull a Docker image while using Swarm you should see that it&#39;s pulling the image into the local image repository of each server.&lt;/li&gt;
&lt;div style=&quot;margin-left: .5cm;&quot;&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;$ docker pull hortonworks/ambari-server&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;Using default tag: latest&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;ubuntu-hp-jdavis: Pulling hortonworks/ambari-server:latest... : downloaded&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;margin-left: .5cm;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;ubuntu-jdavis-dell: Pulling hortonworks/ambari-server:latest... : downloaded&lt;/span&gt;&lt;/div&gt;
&lt;li&gt;Start multiple containers to see what the distribution pattern is. &amp;nbsp;&lt;i&gt;In this case I used the amb-start-cluster script in the &lt;a href=&quot;https://github.com/joshuad2/docker-ambari&quot;&gt;docker-ambari project&lt;/a&gt;.&lt;/i&gt;&lt;/li&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: xx-small;&quot;&gt;CONTAINER ID &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IMAGE &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;COMMAND &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CREATED &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;STATUS &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PORTS &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; NAMES&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: xx-small;&quot;&gt;5f85b455e50c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;hortonworks/ambari-agent:latest &amp;nbsp; &amp;nbsp;&quot;/usr/sbin/init syste&quot; &amp;nbsp; 40 seconds ago &amp;nbsp; &amp;nbsp; &amp;nbsp; Up 38 seconds &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ubuntu-jdavis-dell/amb7&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: xx-small;&quot;&gt;210954b1138b &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;hortonworks/ambari-agent:latest &amp;nbsp; &amp;nbsp;&quot;/usr/sbin/init syste&quot; &amp;nbsp; 44 seconds ago &amp;nbsp; &amp;nbsp; &amp;nbsp; Up 42 seconds &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ubuntu-jdavis-dell/amb5&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: xx-small;&quot;&gt;4e46cbd8a36e &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;hortonworks/ambari-agent:latest &amp;nbsp; &amp;nbsp;&quot;/usr/sbin/init syste&quot; &amp;nbsp; 47 seconds ago &amp;nbsp; &amp;nbsp; &amp;nbsp; Up 45 seconds &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ubuntu-jdavis-dell/amb3&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: xx-small;&quot;&gt;e38674c6d93c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;hortonworks/ambari-agent:latest &amp;nbsp; &amp;nbsp;&quot;/usr/sbin/init syste&quot; &amp;nbsp; 59 seconds ago &amp;nbsp; &amp;nbsp; &amp;nbsp; Up 57 seconds &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ubuntu-hp-jdavis/amb6&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: xx-small;&quot;&gt;7534f368f1c0 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;hortonworks/ambari-agent:latest &amp;nbsp; &amp;nbsp;&quot;/usr/sbin/init syste&quot; &amp;nbsp; About a minute ago &amp;nbsp; Up 58 seconds &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ubuntu-jdavis-dell/amb1&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: xx-small;&quot;&gt;0550c56ac2fc &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;hortonworks/ambari-agent:latest &amp;nbsp; &amp;nbsp;&quot;/usr/sbin/init syste&quot; &amp;nbsp; About a minute ago &amp;nbsp; Up About a minute &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ubuntu-hp-jdavis/amb4&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: xx-small;&quot;&gt;51821a638f8e &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;hortonworks/ambari-agent:latest &amp;nbsp; &amp;nbsp;&quot;/usr/sbin/init syste&quot; &amp;nbsp; About a minute ago &amp;nbsp; Up About a minute &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ubuntu-hp-jdavis/amb2&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: xx-small;&quot;&gt;3a51c0cfa958 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;hortonworks/ambari-server:latest &amp;nbsp; &quot;/usr/sbin/init syste&quot; &amp;nbsp; About a minute ago &amp;nbsp; Up About a minute &amp;nbsp; 192.168.1.18:8182-&amp;gt;8080/tcp &amp;nbsp; ubuntu-jdavis-dell/amb-server&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: xx-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;Note that you can see that the containers were distributed between the two hosts in this example.&lt;/span&gt;&lt;/div&gt;
&lt;li&gt;Open a shell to a containers on one of the hosts to make sure that they have network access to the containers in the other hosts. &amp;nbsp;There are a few ways that the network can work. &amp;nbsp;In this case the script adds the &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;--dns=192.168.1.18&lt;/span&gt; to the &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;docker run. &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;This adds the ability have a FQDN (Fully Qualified Domain Name) for each of the containers. &amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small; margin-left: 0.5cm;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small; margin-left: 0.5cm;&quot;&gt;$ docker exec -i -t amb1 bash&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small; margin-left: 0.5cm;&quot;&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;margin-left: 0.5cm;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small; margin-left: 0.5cm;&quot;&gt;# ping amb2.service.consul&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;margin-left: 0.5cm;&quot;&gt;
&lt;/span&gt;
&lt;div style=&quot;font-family: &#39;courier new&#39;, courier, monospace; font-size: small; margin-left: 0.5cm;&quot;&gt;
&lt;span style=&quot;margin-left: 0.5cm;&quot;&gt;PING amb2.service.consul (10.0.2.4) 56(84) bytes of data.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;margin-left: 0.5cm;&quot;&gt;
&lt;div style=&quot;font-family: &#39;courier new&#39;, courier, monospace; font-size: small; margin-left: 0.5cm;&quot;&gt;
64 bytes from amb2.node.dc1.consul (10.0.2.4): icmp_seq=1 ttl=64 time=0.707 ms&lt;/div&gt;
&lt;div style=&quot;margin-left: 0.5cm;&quot;&gt;
&lt;div style=&quot;font-family: &#39;courier new&#39;, courier, monospace; font-size: small;&quot;&gt;
64 bytes from amb2.node.dc1.consul (10.0.2.4): icmp_seq=2 ttl=64 time=0.574 ms&lt;/div&gt;
&lt;div style=&quot;font-family: &#39;courier new&#39;, courier, monospace; font-size: small;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;The point here is that you should be able to ping a container that is on a different host. &amp;nbsp;This proves that your Docker Swarm Cluster is functional.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;h2&gt;
&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;Next Steps&lt;/span&gt;&lt;/h2&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;Now that you have validated the cluster, you can start adding new hosts, and actually use it. &amp;nbsp;In the next post, I will go through using Ambari to manager your Docker hosts, and how to enable different scenarios of Hadoop.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://javaarchramble.blogspot.com/feeds/8817091908926977299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4179812064174942414/8817091908926977299' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/8817091908926977299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/8817091908926977299'/><link rel='alternate' type='text/html' href='http://javaarchramble.blogspot.com/2016/02/an-example-of-docker-multi-host_18.html' title='An Example of Docker Multi-Host Networking With Hadoop Part 3 - Validating your Swarm Cluster'/><author><name>Joshua Davis</name><uri>http://www.blogger.com/profile/10630084168049860089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyKSAAwDoasXgYegxE0iJSn-lY0wgimia82Zq3rLtAxh-BJ3nI4L8iDl0dcjlTazTrf2aFC0xLPHR4r6iEs6pQoSyoQcYS9zo58hPzruLEeHubkHC9nsMqwHZZLvMtxfg/s220/ProfilePhoto.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4179812064174942414.post-3112120150884502966</id><published>2016-02-15T12:07:00.000-05:00</published><updated>2016-02-17T09:07:37.912-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Apache Ambari"/><category scheme="http://www.blogger.com/atom/ns#" term="Docker"/><category scheme="http://www.blogger.com/atom/ns#" term="Docker Cluster Networking"/><category scheme="http://www.blogger.com/atom/ns#" term="Docker Swarm"/><title type='text'>An example Docker Swarm Multi-Host Lab</title><content type='html'>&lt;h2&gt;
Why a Docker Multi-Host Lab?&lt;/h2&gt;
This post provides my experience with answering some of the questions around the use of Docker Swarm Clusters.&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Can Docker Swarm truly be used with a heterogenous set of hosts? &lt;i&gt;Yes it can.&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;Is Docker Swarm by itself (without a management tool) functional enough to be used for software development? &lt;i&gt;The biggest issue that I encountered was the deployment of the code to a running container, but once solved is very easy.&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;Does Docker Swarm out of the box truly provide a sufficient amount of resource control to run something like Docker Ambari and Hadoop without a tremendous degree of custom software and configuration?&lt;i&gt; For me it was trial and error to understand the number of services that I could embed into a container. &amp;nbsp;In the end, I am still working on the logging but for the most part it does not take too much configuration.&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;Is it possible to create a development/test cluster that could really be useful in my &quot;home lab?&quot; &lt;i&gt;I was able to create a usable test cluster for a certain set of test data useful for a development cluster.&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
The goal in the beginning of this exercise was to enable a very thin datacenter environment on my hosts so that most of the actual processing power would be put into the applications running on the cluster. &amp;nbsp;The resources are not very heavy on my hosts and something like Cloud Foundry, Kubernetes, OpenStack, or Mesos would add unnecessary complexity for what I needed.&lt;br /&gt;
&lt;h2&gt;
Description of the Hosts:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Ubuntu-dell - 4 cores 32gb memory - Intel Xeon 2TB SATA&lt;/li&gt;
&lt;li&gt;Ubuntu-hp - 4 cores 8gb memory - Intel I5 second generation 512gb SATA&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Ubuntu-jdavis - 8 cores 16gb memory - Intel I7 second generation 300 gb SSD&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
Installed software&lt;/h2&gt;
&lt;h3&gt;
Ubuntu-dell:&lt;/h3&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Ubuntu 14.04 Trusty&lt;/li&gt;
&lt;li&gt;Docker Daemon&lt;/li&gt;
&lt;li&gt;Docker Swarm&lt;/li&gt;
&lt;li&gt;Swarm Manager&lt;/li&gt;
&lt;li&gt;Consul Server&lt;/li&gt;
&lt;li&gt;MySQL Server (for Hive MetaStore)&lt;/li&gt;
&lt;li&gt;Tomcat7 Server&lt;/li&gt;
&lt;li&gt;RabbitMQ&lt;/li&gt;
&lt;li&gt;Apache NIFI&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
Ubuntu-hp:&lt;/h3&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Ubuntu 14.04 Trusty&lt;/li&gt;
&lt;li&gt;Docker Daemon&lt;/li&gt;
&lt;li&gt;Docker Swarm&lt;/li&gt;
&lt;li&gt;RabbitMq&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
Ubuntu-jdavis:&lt;/h3&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Ubuntu 14.04 Trusty&lt;/li&gt;
&lt;li&gt;Docker Daemon&lt;/li&gt;
&lt;li&gt;Docker Swarm&lt;/li&gt;
&lt;li&gt;RabbitMQ&lt;/li&gt;
&lt;li&gt;Tomcat7 Server&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://javaarchramble.blogspot.com/feeds/3112120150884502966/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4179812064174942414/3112120150884502966' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/3112120150884502966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/3112120150884502966'/><link rel='alternate' type='text/html' href='http://javaarchramble.blogspot.com/2016/02/an-example-docker-swarm-multi-host-lab.html' title='An example Docker Swarm Multi-Host Lab'/><author><name>Joshua Davis</name><uri>http://www.blogger.com/profile/10630084168049860089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyKSAAwDoasXgYegxE0iJSn-lY0wgimia82Zq3rLtAxh-BJ3nI4L8iDl0dcjlTazTrf2aFC0xLPHR4r6iEs6pQoSyoQcYS9zo58hPzruLEeHubkHC9nsMqwHZZLvMtxfg/s220/ProfilePhoto.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4179812064174942414.post-2248622319443814380</id><published>2016-02-13T22:07:00.000-05:00</published><updated>2016-02-13T22:07:36.539-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Consul"/><category scheme="http://www.blogger.com/atom/ns#" term="Docker"/><category scheme="http://www.blogger.com/atom/ns#" term="Docker Swarm"/><title type='text'>Creating a startup script for Docker Swarm Manager</title><content type='html'>&lt;h2&gt;
For Ubuntu-Server 14.04&lt;/h2&gt;
&lt;h3&gt;
Assumptions:&lt;/h3&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;You have downloaded the latest Docker Swarm, compiled and have Docker Swarm running.&lt;/li&gt;
&lt;li&gt;You have sudo access.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
Create the Swarm manager configuration file:&lt;/h3&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Create a file using your favorite editor in the /etc/init directory called swarm_mgr.conf.&lt;/li&gt;
&lt;li&gt;Below is an example of a startup script, please make sure to replace your own Docker Swarm IP and port that you have setup for Docker Swarm and the Consul Server IP and port that you are using as well.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;description &quot;Docker Swarm Manager&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;start on (local-filesystems and net-device-up IFACE!=lo)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;stop on runlevel [!2345]&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;limit nofile 524288 1048576&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;limit nproc 524288 1048576&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;respawn&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;kill timeout 20&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;pre-start script&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # see also https://github.com/tianon/cgroupfs-mount/blob/master/cgroupfs-mount&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;end script&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;script&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # modify these in /etc/default/$UPSTART_JOB (/etc/default/docker)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SWARM=/usr/bin/swarm&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SWARM_OPTS=&quot;-H tcp://&lt;b&gt;&lt;i&gt;DockerSwarmIP&lt;/i&gt;&lt;/b&gt;:2376 consul://&lt;i&gt;&lt;b&gt;consulServerIP&lt;/b&gt;&lt;/i&gt;:8500&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if [ -f /etc/default/$UPSTART_JOB ]; then&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; . /etc/default/$UPSTART_JOB&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fi&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; exec &quot;$SWARM&quot; manage $SWARM_OPTS&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;end script&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;# Don&#39;t emit &quot;started&quot; event until docker.sock is ready.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;# See https://github.com/docker/docker/issues/6647&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;post-start script&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DOCKER_OPTS=&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; echo &quot;swarm manage is up&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;end script&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://javaarchramble.blogspot.com/feeds/2248622319443814380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4179812064174942414/2248622319443814380' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/2248622319443814380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/2248622319443814380'/><link rel='alternate' type='text/html' href='http://javaarchramble.blogspot.com/2016/02/creating-startup-script-for-docker.html' title='Creating a startup script for Docker Swarm Manager'/><author><name>Joshua Davis</name><uri>http://www.blogger.com/profile/10630084168049860089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyKSAAwDoasXgYegxE0iJSn-lY0wgimia82Zq3rLtAxh-BJ3nI4L8iDl0dcjlTazTrf2aFC0xLPHR4r6iEs6pQoSyoQcYS9zo58hPzruLEeHubkHC9nsMqwHZZLvMtxfg/s220/ProfilePhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4179812064174942414.post-2773402717689313644</id><published>2016-02-10T20:05:00.000-05:00</published><updated>2016-02-19T09:13:58.952-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Consul"/><category scheme="http://www.blogger.com/atom/ns#" term="Docker"/><category scheme="http://www.blogger.com/atom/ns#" term="Docker Cluster Networking"/><category scheme="http://www.blogger.com/atom/ns#" term="Docker Swarm"/><category scheme="http://www.blogger.com/atom/ns#" term="Hadoop"/><category scheme="http://www.blogger.com/atom/ns#" term="Hortonworks"/><category scheme="http://www.blogger.com/atom/ns#" term="Multihost Docker"/><category scheme="http://www.blogger.com/atom/ns#" term="Services"/><title type='text'>An Example of Docker Multi-Host Networking with Hadoop - Part2</title><content type='html'>&lt;h2 style=&quot;border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; box-sizing: border-box; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, &#39;Segoe UI&#39;, Arial, freesans, sans-serif, &#39;Apple Color Emoji&#39;, &#39;Segoe UI Emoji&#39;, &#39;Segoe UI Symbol&#39;; font-size: 1.75em; line-height: 1.225; margin-bottom: 16px; margin-top: 1em; padding-bottom: 0.3em;&quot;&gt;
Next Steps - Add a host to your Cluster&lt;/h2&gt;
&lt;div&gt;
In &lt;a href=&quot;http://javaarchramble.blogspot.com/2016/01/an-example-of-docker-multi-host.html&quot;&gt;Part1&lt;/a&gt; we showed how to install the basic components for doing mult-host networking with Docker. &amp;nbsp;In this post I provide the first part of the instructions to add a host to a cluster.&amp;nbsp;&lt;a href=&quot;http://bit.ly/1SUdECk&quot;&gt;In Part 3&lt;/a&gt;&amp;nbsp;I explain the steps to validate your cluster.&lt;br /&gt;
&lt;br /&gt;
If you are interested in the composition of the lab that I used for this post, it is outlined &lt;a href=&quot;http://javaarchramble.blogspot.com/2016/02/an-example-docker-swarm-multi-host-lab.html&quot;&gt;here&lt;/a&gt;.&lt;/div&gt;
&lt;h3&gt;
Assumptions for adding a Host:&lt;/h3&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;You already have a running Swarm cluster which includes have Docker Swarm installed and the &lt;a href=&quot;http://javaarchramble.blogspot.com/2016/02/creating-startup-script-for-docker.html&quot;&gt;Docker Swarm Manager running&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The host has a static IP on a network&lt;/li&gt;
&lt;li&gt;You have access to the root user to install products&lt;/li&gt;
&lt;li&gt;The hosts have direct or proxy access to the internet&lt;/li&gt;
&lt;li&gt;Java 1.8 has been installed on the host&lt;/li&gt;
&lt;li&gt;No DNS software has been installed on the host&lt;/li&gt;
&lt;li&gt;IPtables has either been disabled or is not forwarding port 8081.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 style=&quot;border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; box-sizing: border-box; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, &#39;Segoe UI&#39;, Arial, freesans, sans-serif, &#39;Apple Color Emoji&#39;, &#39;Segoe UI Emoji&#39;, &#39;Segoe UI Symbol&#39;; font-size: 1.75em; line-height: 1.225; margin-bottom: 16px; margin-top: 1em; padding-bottom: 0.3em;&quot;&gt;
Adding a Host&lt;/h2&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;Install Linux on your host&lt;/li&gt;
&lt;li&gt;Install standard Linux packages&lt;/li&gt;
&lt;li&gt;Install Docker&lt;/li&gt;
&lt;li&gt;Install Consul (optional)&lt;/li&gt;
&lt;li&gt;Install Go&lt;/li&gt;
&lt;li&gt;Install GoDep&lt;/li&gt;
&lt;li&gt;Install Swarm&lt;/li&gt;
&lt;li&gt;Test your new host (next post).&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;h3 style=&quot;box-sizing: border-box; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, &#39;Segoe UI&#39;, Arial, freesans, sans-serif, &#39;Apple Color Emoji&#39;, &#39;Segoe UI Emoji&#39;, &#39;Segoe UI Symbol&#39;; font-size: 1.5em; line-height: 1.43; margin-bottom: 16px; margin-top: 1em;&quot;&gt;
Install your favorite Linux variant onto the host&lt;/h3&gt;
&lt;div style=&quot;box-sizing: border-box; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, &#39;Segoe UI&#39;, Arial, freesans, sans-serif, &#39;Apple Color Emoji&#39;, &#39;Segoe UI Emoji&#39;, &#39;Segoe UI Symbol&#39;; font-size: 16px; line-height: 25.6px; margin-bottom: 16px;&quot;&gt;
&lt;a href=&quot;http://releases.ubuntu.com/14.04/&quot; style=&quot;box-sizing: border-box; color: #4078c0; text-decoration: none;&quot;&gt;Ubuntu 14.04 trusty&lt;/a&gt;&amp;nbsp;is the Linux OS that has been used to build this, but you can&amp;nbsp;&lt;a href=&quot;https://docs.docker.com/engine/installation/&quot; style=&quot;box-sizing: border-box; color: #4078c0; text-decoration: none;&quot;&gt;pick&lt;/a&gt;&amp;nbsp;any Linux OS that is compatible with the latest version of Docker. The one requirement is that it must be a 64 bit Operating System.&lt;br /&gt;
&lt;h3&gt;
&lt;span style=&quot;font-size: 1.5em; line-height: 1.43;&quot;&gt;Install these standard Linux packages&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div style=&quot;box-sizing: border-box; margin-bottom: 16px;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;$sudo apt get install git&lt;/span&gt;&lt;br /&gt;
&lt;h3 style=&quot;color: #333333; font-family: &#39;helvetica neue&#39;, helvetica, &#39;segoe ui&#39;, arial, freesans, sans-serif, &#39;apple color emoji&#39;, &#39;segoe ui emoji&#39;, &#39;segoe ui symbol&#39;; font-size: 16px; line-height: 25.6px;&quot;&gt;
&lt;span style=&quot;font-size: 1.5em; line-height: 1.43;&quot;&gt;Install Docker Daemon&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;ul style=&quot;box-sizing: border-box; color: #333333; font-size: 16px; line-height: 25.6px; margin-bottom: 16px; margin-top: 0px; padding: 0px 0px 0px 2em;&quot;&gt;
&lt;li style=&quot;box-sizing: border-box; font-family: &#39;helvetica neue&#39;, helvetica, &#39;segoe ui&#39;, arial, freesans, sans-serif, &#39;apple color emoji&#39;, &#39;segoe ui emoji&#39;, &#39;segoe ui symbol&#39;;&quot;&gt;Follow instructions here for&amp;nbsp;&lt;a href=&quot;https://docs.docker.com/engine/installation/ubuntulinux/&quot; style=&quot;box-sizing: border-box; color: #4078c0; text-decoration: none;&quot;&gt;Ubuntu Linux&lt;/a&gt;, it is very important that you have a version of Docker installed that is equal or greater than 1.9.x.&lt;/li&gt;
&lt;li style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;freesans&amp;quot; , sans-serif , &amp;quot;apple color emoji&amp;quot; , &amp;quot;segoe ui emoji&amp;quot; , &amp;quot;segoe ui symbol&amp;quot;;&quot;&gt;As part of the installation the installation will create a startup script, in Ubuntu this will be in&amp;nbsp;&lt;/span&gt;&lt;code style=&quot;background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px; box-sizing: border-box; font-size: 13.6px; margin: 0px; padding: 0.2em 0px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;/etc/init/Docker&lt;/span&gt;&lt;/code&gt;&lt;span style=&quot;font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;freesans&amp;quot; , sans-serif , &amp;quot;apple color emoji&amp;quot; , &amp;quot;segoe ui emoji&amp;quot; , &amp;quot;segoe ui symbol&amp;quot;;&quot;&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;box-sizing: border-box; font-family: &#39;helvetica neue&#39;, helvetica, &#39;segoe ui&#39;, arial, freesans, sans-serif, &#39;apple color emoji&#39;, &#39;segoe ui emoji&#39;, &#39;segoe ui symbol&#39;;&quot;&gt;In later steps we will be changing this file so you will need to know where this file is.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;freesans&amp;quot; , sans-serif , &amp;quot;apple color emoji&amp;quot; , &amp;quot;segoe ui emoji&amp;quot; , &amp;quot;segoe ui symbol&amp;quot;; font-size: 1.5em; line-height: 1.43;&quot;&gt;Install Consul &amp;nbsp;(optional)&lt;/span&gt;&lt;/h3&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;freesans&amp;quot; , sans-serif , &amp;quot;apple color emoji&amp;quot; , &amp;quot;segoe ui emoji&amp;quot; , &amp;quot;segoe ui symbol&amp;quot;; font-size: 16px; line-height: 25.6px;&quot;&gt;You can install Consul on all of your hosts, or just one. So, if it&#39;s already installed on one of your hosts, this is an optional installation.&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;freesans&amp;quot; , sans-serif , &amp;quot;apple color emoji&amp;quot; , &amp;quot;segoe ui emoji&amp;quot; , &amp;quot;segoe ui symbol&amp;quot;;&quot;&gt;&lt;span style=&quot;line-height: 25.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;freesans&amp;quot; , sans-serif , &amp;quot;apple color emoji&amp;quot; , &amp;quot;segoe ui emoji&amp;quot; , &amp;quot;segoe ui symbol&amp;quot;; font-size: 16px; line-height: 25.6px;&quot;&gt;My recommendation is to use the instructions&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.digitalocean.com/community/tutorials/how-to-configure-consul-in-a-production-environment-on-ubuntu-14-04&quot; style=&quot;box-sizing: border-box; color: #4078c0; font-family: &#39;helvetica neue&#39;, helvetica, &#39;segoe ui&#39;, arial, freesans, sans-serif, &#39;apple color emoji&#39;, &#39;segoe ui emoji&#39;, &#39;segoe ui symbol&#39;; font-size: 16px; line-height: 25.6px; text-decoration: none;&quot;&gt;here&lt;/a&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;freesans&amp;quot; , sans-serif , &amp;quot;apple color emoji&amp;quot; , &amp;quot;segoe ui emoji&amp;quot; , &amp;quot;segoe ui symbol&amp;quot;; font-size: 16px; line-height: 25.6px;&quot;&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;freesans&amp;quot; , sans-serif , &amp;quot;apple color emoji&amp;quot; , &amp;quot;segoe ui emoji&amp;quot; , &amp;quot;segoe ui symbol&amp;quot;; font-size: 16px; line-height: 25.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;freesans&amp;quot; , sans-serif , &amp;quot;apple color emoji&amp;quot; , &amp;quot;segoe ui emoji&amp;quot; , &amp;quot;segoe ui symbol&amp;quot;; font-size: 16px; line-height: 25.6px;&quot;&gt;Install Consul as a service by creating a script in the /etc/init directory called &lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 16px; line-height: 25.6px;&quot;&gt;consul.conf.&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;freesans&amp;quot; , sans-serif , &amp;quot;apple color emoji&amp;quot; , &amp;quot;segoe ui emoji&amp;quot; , &amp;quot;segoe ui symbol&amp;quot;; font-size: 16px; line-height: 25.6px;&quot;&gt; &amp;nbsp;Below is an example of the file, if you follow the instructions from Consul it will provide you with explanations of all of the options in this file. Since I am using Consul as a DNS server, Consul is running as root. That is why I commented out the set user id and group id for consul.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;freesans&amp;quot; , sans-serif , &amp;quot;apple color emoji&amp;quot; , &amp;quot;segoe ui emoji&amp;quot; , &amp;quot;segoe ui symbol&amp;quot;; font-size: 16px; line-height: 25.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;freesans&amp;quot; , sans-serif , &amp;quot;apple color emoji&amp;quot; , &amp;quot;segoe ui emoji&amp;quot; , &amp;quot;segoe ui symbol&amp;quot;; font-size: 16px; line-height: 25.6px;&quot;&gt;Make sure to replace the &lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 16px; line-height: 25.6px;&quot;&gt;&lt;hostname&gt; &lt;/hostname&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;freesans&amp;quot; , sans-serif , &amp;quot;apple color emoji&amp;quot; , &amp;quot;segoe ui emoji&amp;quot; , &amp;quot;segoe ui symbol&amp;quot;; font-size: 16px; line-height: 25.6px;&quot;&gt;with the host that you are running consul on.&lt;/span&gt;&lt;br /&gt;
&lt;ul style=&quot;box-sizing: border-box; color: #333333; font-size: 16px; line-height: 25.6px; margin-bottom: 16px; margin-top: 0px; padding: 0px 0px 0px 2em;&quot;&gt;
&lt;/ul&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;description &quot;Consul server process&quot; &lt;br /&gt;start on (local-filesystems and net-device-up IFACE=eth0) &lt;br /&gt;stop on runlevel [!12345] &lt;br /&gt;respawn &lt;br /&gt;#setuid consul &lt;br /&gt;#setgid consul &lt;br /&gt;exec consul agent -config-dir /etc/consul.d/server&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;freesans&amp;quot; , sans-serif , &amp;quot;apple color emoji&amp;quot; , &amp;quot;segoe ui emoji&amp;quot; , &amp;quot;segoe ui symbol&amp;quot;; font-size: 16px; line-height: 25.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;freesans&amp;quot; , sans-serif , &amp;quot;apple color emoji&amp;quot; , &amp;quot;segoe ui emoji&amp;quot; , &amp;quot;segoe ui symbol&amp;quot;; font-size: 16px; line-height: 25.6px;&quot;&gt;Here is an example configuration file, put this file in the &lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 16px; line-height: 25.6px;&quot;&gt;--config-dir&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;freesans&amp;quot; , sans-serif , &amp;quot;apple color emoji&amp;quot; , &amp;quot;segoe ui emoji&amp;quot; , &amp;quot;segoe ui symbol&amp;quot;; font-size: 16px; line-height: 25.6px;&quot;&gt; that you specified above (&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 16px; line-height: 25.6px;&quot;&gt;/etc/consul.d/server&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;freesans&amp;quot; , sans-serif , &amp;quot;apple color emoji&amp;quot; , &amp;quot;segoe ui emoji&amp;quot; , &amp;quot;segoe ui symbol&amp;quot;; font-size: 16px; line-height: 25.6px;&quot;&gt;). &amp;nbsp;You should follow the instructions on the consul site to install, as you will need to encrypt a pass phrase and place it in this file.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;{&lt;br /&gt;    &quot;bootstrap&quot;: true,&lt;br /&gt;    &quot;server&quot;: true,&lt;br /&gt;    &quot;data_dir&quot;: &quot;/var/consul&quot;,&lt;br /&gt;    &quot;encrypt&quot;: &quot;&quot;,&lt;br /&gt;    &quot;log_level&quot;: &quot;INFO&quot;,&lt;br /&gt;    &quot;enable_syslog&quot;: true,&lt;br /&gt;    &quot;ui_dir&quot;: &quot;/ui&quot;,&lt;br /&gt;    &quot;client_addr&quot;: &quot;0.0.0.0&quot;,&lt;br /&gt;    &quot;ports&quot;: {&lt;br /&gt;&amp;nbsp; &amp;nbsp;&quot;dns&quot;: 53&lt;br /&gt;          },&lt;br /&gt;    &quot;recursor&quot;: &quot;8.8.8.8&quot;,&lt;br /&gt;    &quot;disable_update_check&quot;: true&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;box-sizing: border-box; color: #333333; font-size: 16px; line-height: 25.6px; margin-bottom: 16px;&quot;&gt;
&lt;h3 style=&quot;font-family: &#39;helvetica neue&#39;, helvetica, &#39;segoe ui&#39;, arial, freesans, sans-serif, &#39;apple color emoji&#39;, &#39;segoe ui emoji&#39;, &#39;segoe ui symbol&#39;;&quot;&gt;
&lt;span style=&quot;font-size: 1.5em; line-height: 1.43;&quot;&gt;Install Go&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;freesans&amp;quot; , sans-serif , &amp;quot;apple color emoji&amp;quot; , &amp;quot;segoe ui emoji&amp;quot; , &amp;quot;segoe ui symbol&amp;quot;;&quot;&gt;
&lt;span style=&quot;font-size: 16px; line-height: 25.6px;&quot;&gt;Execute these commands, substituting the latest Go version instead of the 1.5.3 version that I used:&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;$wget https://storage.googleapis.com/golang/go1.5.3.linux-amd64.tar.gz&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;$sudo tar -C /usr/local -xzf go1.5.3.linux-amd64.tar.gz&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;freesans&amp;quot; , sans-serif , &amp;quot;apple color emoji&amp;quot; , &amp;quot;segoe ui emoji&amp;quot; , &amp;quot;segoe ui symbol&amp;quot;; font-size: 16px; line-height: 25.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;freesans&amp;quot; , sans-serif , &amp;quot;apple color emoji&amp;quot; , &amp;quot;segoe ui emoji&amp;quot; , &amp;quot;segoe ui symbol&amp;quot;; font-size: 16px; line-height: 25.6px;&quot;&gt;Make a directory for the code in the home directory of the user that will compile Go code.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;mkdir gocode&lt;/span&gt;&lt;br /&gt;
&lt;ul style=&quot;box-sizing: border-box; color: #333333; font-size: 16px; line-height: 25.6px; margin-bottom: 16px; margin-top: 0px; padding: 0px 0px 0px 2em;&quot;&gt;
&lt;/ul&gt;
&lt;div style=&quot;color: #333333; display: inline !important; font-family: &#39;helvetica neue&#39;, helvetica, &#39;segoe ui&#39;, arial, freesans, sans-serif, &#39;apple color emoji&#39;, &#39;segoe ui emoji&#39;, &#39;segoe ui symbol&#39;; font-size: 16px; line-height: 25.6px;&quot;&gt;
Edit the&amp;nbsp;&lt;code style=&quot;background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px; box-sizing: border-box; font-family: Consolas, &#39;Liberation Mono&#39;, Menlo, Courier, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0px;&quot;&gt;.profile&lt;/code&gt;&amp;nbsp;or&amp;nbsp;&lt;code style=&quot;background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px; box-sizing: border-box; font-family: Consolas, &#39;Liberation Mono&#39;, Menlo, Courier, monospace; font-size: 13.6px; margin: 0px; padding: 0.2em 0px;&quot;&gt;.bash_profile&lt;/code&gt;&amp;nbsp;depending on the Linux variant and add this variable to the user that will compile the Swarm code.&lt;/div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;export PATH=$PATH:/usr/local/go/bin&lt;br /&gt;export GOPATH=$HOME/gocode&lt;br /&gt;export GOROOT=/usr/local/go&lt;/span&gt;&lt;br /&gt;
&lt;ul style=&quot;box-sizing: border-box; color: #333333; font-size: 16px; line-height: 25.6px; margin-bottom: 16px; margin-top: 0px; padding: 0px 0px 0px 2em;&quot;&gt;
&lt;/ul&gt;
&lt;h3&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;freesans&amp;quot; , sans-serif , &amp;quot;apple color emoji&amp;quot; , &amp;quot;segoe ui emoji&amp;quot; , &amp;quot;segoe ui symbol&amp;quot;; font-size: 1.5em; line-height: 1.43;&quot;&gt;Install Godep&lt;/span&gt;&lt;/h3&gt;
&lt;h3&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;freesans&amp;quot; , sans-serif , &amp;quot;apple color emoji&amp;quot; , &amp;quot;segoe ui emoji&amp;quot; , &amp;quot;segoe ui symbol&amp;quot;; font-size: 16px; line-height: 25.6px;&quot;&gt;Follow the instructions&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://github.com/tools/godep&quot; style=&quot;box-sizing: border-box; color: #4078c0; font-family: &#39;helvetica neue&#39;, helvetica, &#39;segoe ui&#39;, arial, freesans, sans-serif, &#39;apple color emoji&#39;, &#39;segoe ui emoji&#39;, &#39;segoe ui symbol&#39;; font-size: 16px; line-height: 25.6px; text-decoration: none;&quot;&gt;here&lt;/a&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;freesans&amp;quot; , sans-serif , &amp;quot;apple color emoji&amp;quot; , &amp;quot;segoe ui emoji&amp;quot; , &amp;quot;segoe ui symbol&amp;quot;; font-size: 16px; line-height: 25.6px;&quot;&gt;.&lt;/span&gt;&lt;/h3&gt;
&lt;h3&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;freesans&amp;quot; , sans-serif , &amp;quot;apple color emoji&amp;quot; , &amp;quot;segoe ui emoji&amp;quot; , &amp;quot;segoe ui symbol&amp;quot;; font-size: 1.5em; line-height: 1.43;&quot;&gt;Install Swarm&lt;/span&gt;&lt;/h3&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;freesans&amp;quot; , sans-serif , &amp;quot;apple color emoji&amp;quot; , &amp;quot;segoe ui emoji&amp;quot; , &amp;quot;segoe ui symbol&amp;quot;; font-size: 16px; line-height: 25.6px;&quot;&gt;Follow the instructions&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://github.com/docker/swarm&quot; style=&quot;box-sizing: border-box; color: #4078c0; font-family: &#39;helvetica neue&#39;, helvetica, &#39;segoe ui&#39;, arial, freesans, sans-serif, &#39;apple color emoji&#39;, &#39;segoe ui emoji&#39;, &#39;segoe ui symbol&#39;; font-size: 16px; line-height: 25.6px; text-decoration: none;&quot;&gt;here&lt;/a&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;freesans&amp;quot; , sans-serif , &amp;quot;apple color emoji&amp;quot; , &amp;quot;segoe ui emoji&amp;quot; , &amp;quot;segoe ui symbol&amp;quot;; font-size: 16px; line-height: 25.6px;&quot;&gt;&amp;nbsp;to compile Docker Swarm. If you have an earlier version of Go installed lower than 1.9 you will have compile errors in that situation you should follow the instructions, uninstall your current version and add the new version.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;freesans&amp;quot; , sans-serif , &amp;quot;apple color emoji&amp;quot; , &amp;quot;segoe ui emoji&amp;quot; , &amp;quot;segoe ui symbol&amp;quot;; font-size: 16px; line-height: 25.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;freesans&amp;quot; , sans-serif , &amp;quot;apple color emoji&amp;quot; , &amp;quot;segoe ui emoji&amp;quot; , &amp;quot;segoe ui symbol&amp;quot;; font-size: 16px; line-height: 25.6px;&quot;&gt;Copy the swarm executable from the&amp;nbsp;&lt;/span&gt;&lt;code style=&quot;background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px; box-sizing: border-box; color: #333333; font-family: consolas, &#39;liberation mono&#39;, menlo, courier, monospace; font-size: 13.6px; line-height: 25.6px; margin: 0px; padding: 0.2em 0px;&quot;&gt;${GOCODE}/bin&lt;/code&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;freesans&amp;quot; , sans-serif , &amp;quot;apple color emoji&amp;quot; , &amp;quot;segoe ui emoji&amp;quot; , &amp;quot;segoe ui symbol&amp;quot;; font-size: 16px; line-height: 25.6px;&quot;&gt;&amp;nbsp;directory to&amp;nbsp;&lt;/span&gt;&lt;code style=&quot;background-color: rgba(0, 0, 0, 0.0392157); border-radius: 3px; box-sizing: border-box; color: #333333; font-family: consolas, &#39;liberation mono&#39;, menlo, courier, monospace; font-size: 13.6px; line-height: 25.6px; margin: 0px; padding: 0.2em 0px;&quot;&gt;/usr/bin&lt;/code&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;freesans&amp;quot; , sans-serif , &amp;quot;apple color emoji&amp;quot; , &amp;quot;segoe ui emoji&amp;quot; , &amp;quot;segoe ui symbol&amp;quot;; font-size: 16px; line-height: 25.6px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;sudo chmod 755 /usr/bin/swarm sudo&lt;br /&gt; cp ${GOCODE}/bin/swarm /usr/bin/.&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;display: inline !important;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;freesans&amp;quot; , sans-serif , &amp;quot;apple color emoji&amp;quot; , &amp;quot;segoe ui emoji&amp;quot; , &amp;quot;segoe ui symbol&amp;quot;; font-size: 16px; line-height: 25.6px;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;div style=&quot;display: inline !important;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;freesans&amp;quot; , sans-serif , &amp;quot;apple color emoji&amp;quot; , &amp;quot;segoe ui emoji&amp;quot; , &amp;quot;segoe ui symbol&amp;quot;; font-size: 16px; line-height: 25.6px;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;freesans&amp;quot; , sans-serif , &amp;quot;apple color emoji&amp;quot; , &amp;quot;segoe ui emoji&amp;quot; , &amp;quot;segoe ui symbol&amp;quot;; font-size: 16px; line-height: 25.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;freesans&amp;quot; , sans-serif , &amp;quot;apple color emoji&amp;quot; , &amp;quot;segoe ui emoji&amp;quot; , &amp;quot;segoe ui symbol&amp;quot;; font-size: 16px; line-height: 25.6px;&quot;&gt;
Create a startup script in&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;/etc/init &lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;freesans&amp;quot; , sans-serif , &amp;quot;apple color emoji&amp;quot; , &amp;quot;segoe ui emoji&amp;quot; , &amp;quot;segoe ui symbol&amp;quot;;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;line-height: 25.6px;&quot;&gt;called &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 16px; line-height: 25.6px;&quot;&gt;swarm.conf,&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;helvetica neue&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;freesans&amp;quot; , sans-serif , &amp;quot;apple color emoji&amp;quot; , &amp;quot;segoe ui emoji&amp;quot; , &amp;quot;segoe ui symbol&amp;quot;; font-size: 16px; line-height: 25.6px;&quot;&gt; a sample is below. Please correct it with your own Docker server host Ip and Consul server IP. &amp;nbsp;In addition you will want to make sure that the port you are exposing for Docker and Consul are correct as well:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;br /&gt;description &quot;Swarm daemon&quot;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; start on (local-filesystems and net-device-up IFACE!=lo)&lt;br /&gt;&lt;br /&gt;stop on runlevel [!2345]&lt;br /&gt;limit nofile 524288 1048576&lt;br /&gt;limit nproc 524288 1048576&lt;br /&gt;&lt;br /&gt;respawn&lt;br /&gt;&lt;br /&gt;kill timeout 20&lt;br /&gt;&lt;br /&gt;pre-start script&lt;br /&gt;# see also https://github.com/tianon/cgroupfs-mount/blob/master/cgroupfs-mount&lt;br /&gt;end script&lt;br /&gt;&lt;br /&gt;script&lt;br /&gt;        # modify these in /etc/default/$UPSTART_JOB (/etc/default/swarm)&lt;br /&gt;        SWARM=/usr/bin/swarm&lt;br /&gt;        SWARM_OPTS=&quot;--advertise=&lt;i&gt;&lt;b&gt;hostServerIp&lt;/b&gt;&lt;/i&gt;:2375 consul:&lt;i&gt;&lt;b&gt;consul-server-ip&lt;/b&gt;&lt;/i&gt;//:8500&quot;&lt;br /&gt;        if [ -f /etc/default/$UPSTART_JOB ]; then&lt;br /&gt;                . /etc/default/$UPSTART_JOB&lt;br /&gt;        fi&lt;br /&gt;        exec &quot;$SWARM&quot; join $SWARM_OPTS&lt;br /&gt;end script&lt;br /&gt;&lt;br /&gt;# Don&#39;t emit &quot;started&quot; event until docker.sock is ready.&lt;br /&gt;# See https://github.com/docker/docker/issues/6647&lt;br /&gt;post-start script&lt;br /&gt;        SWARM_OPTS=&lt;br /&gt;        echo &quot;swarm join is up&quot;&lt;br /&gt;end script&lt;/span&gt;&lt;br /&gt;
&lt;h3&gt;
Start Swarm&lt;/h3&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;$ sudo service start swarm&lt;/span&gt;&lt;/div&gt;
&lt;h2&gt;
Configure Docker Daemon service&lt;/h2&gt;
&lt;div&gt;
When you installed the Docker Daemon in the previous step it created an &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;/etc/init/docker.conf&lt;/span&gt; file which has the configuration for the Docker Daemon. &amp;nbsp;Just like the Swarm install you will need to make sure that it has the correct IP address and Port for the docker host and the consul server. &amp;nbsp;Note that you should not have to create this file, and the only thing that should be changed is adding the entry for the Docker Options.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
These options tell the Docker daemon that the cluster store is using Consul at this specific machine, and it adds this host as part of the Docker Cluster. &amp;nbsp;Technically at this point you could do multi-host Docker without Swarm, since you can create an Overlay network across the hosts, but Swarm makes it much easier by handling placement of containers.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;description &quot;Docker daemon&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;start on (filesystem and net-device-up IFACE!=lo)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;stop on runlevel [!2345]&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;limit nofile 524288 1048576&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;limit nproc 524288 1048576&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;respawn&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;kill timeout 20&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;pre-start script&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # see also https://github.com/tianon/cgroupfs-mount/blob/master/cgroupfs-mount&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if grep -v &#39;^#&#39; /etc/fstab | grep -q cgroup \&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; || [ ! -e /proc/cgroups ] \&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; || [ ! -d /sys/fs/cgroup ]; then&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; exit 0&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fi&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ! mountpoint -q /sys/fs/cgroup; then&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mount -t tmpfs -o uid=0,gid=0,mode=0755 cgroup /sys/fs/cgroup&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fi&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cd /sys/fs/cgroup&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for sys in $(awk &#39;!/^#/ { if ($4 == 1) print $1 }&#39; /proc/cgroups); do&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mkdir -p $sys&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ! mountpoint -q $sys; then&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ! mount -n -t cgroup -o $sys cgroup $sys; then&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rmdir $sys || true&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fi&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fi&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; done&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; )&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;end script&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;script&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # modify these in /etc/default/$UPSTART_JOB (/etc/default/docker)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DOCKER=/usr/bin/$UPSTART_JOB&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DOCKER_OPTS=&quot;-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=consul://&lt;i&gt;&lt;b&gt;consulHostIp&lt;/b&gt;&lt;/i&gt;:8500 --cluster-advertise=&lt;i&gt;&lt;b&gt;dockerHostIp&lt;/b&gt;&lt;/i&gt;:2375&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if [ -f /etc/default/$UPSTART_JOB ]; then&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; . /etc/default/$UPSTART_JOB&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fi&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; exec &quot;$DOCKER&quot; daemon $DOCKER_OPTS&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;end script&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;# Don&#39;t emit &quot;started&quot; event until docker.sock is ready.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;# See https://github.com/docker/docker/issues/6647&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;post-start script&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DOCKER_OPTS=&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if [ -f /etc/default/$UPSTART_JOB ]; then&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; . /etc/default/$UPSTART_JOB&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fi&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ! printf &quot;%s&quot; &quot;$DOCKER_OPTS&quot; | grep -qE -e &#39;-H|--host&#39;; then&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while ! [ -e /var/run/docker.sock ]; do&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; initctl status $UPSTART_JOB | grep -qE &quot;(stop|respawn)/&quot; &amp;amp;&amp;amp; exit 1&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; echo &quot;Waiting for /var/run/docker.sock&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sleep 0.1&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; done&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; echo &quot;/var/run/docker.sock is up&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fi&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;end script&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;
Re-Start Docker service&lt;/h3&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;$ sudo service restart docker&lt;/span&gt;&lt;/div&gt;
&lt;h2&gt;
Next Steps&lt;/h2&gt;
&lt;div&gt;
At this point all of the services are running on your new host including Docker and Swarm. &amp;nbsp;You should now be able to try to use these hosts as one Docker Swarm. &amp;nbsp;&lt;a href=&quot;http://bit.ly/1SUdECk&quot;&gt;In the next post&lt;/a&gt; I explain the steps to validate your cluster.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://javaarchramble.blogspot.com/feeds/2773402717689313644/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4179812064174942414/2773402717689313644' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/2773402717689313644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/2773402717689313644'/><link rel='alternate' type='text/html' href='http://javaarchramble.blogspot.com/2016/02/an-example-of-docker-multi-host.html' title='An Example of Docker Multi-Host Networking with Hadoop - Part2'/><author><name>Joshua Davis</name><uri>http://www.blogger.com/profile/10630084168049860089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyKSAAwDoasXgYegxE0iJSn-lY0wgimia82Zq3rLtAxh-BJ3nI4L8iDl0dcjlTazTrf2aFC0xLPHR4r6iEs6pQoSyoQcYS9zo58hPzruLEeHubkHC9nsMqwHZZLvMtxfg/s220/ProfilePhoto.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4179812064174942414.post-1931747066236778246</id><published>2016-02-10T19:59:00.002-05:00</published><updated>2016-02-10T19:59:37.773-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AGILE"/><category scheme="http://www.blogger.com/atom/ns#" term="Architecture"/><category scheme="http://www.blogger.com/atom/ns#" term="Domain Driven Design"/><category scheme="http://www.blogger.com/atom/ns#" term="JAVA"/><category scheme="http://www.blogger.com/atom/ns#" term="Micro Services"/><category scheme="http://www.blogger.com/atom/ns#" term="SOA"/><title type='text'>Why do MicroServices projects fail to deliver?</title><content type='html'>&lt;h2&gt;
What is the definition of a Micro Services Architecture?&lt;/h2&gt;
&lt;div&gt;
A MicroService is a misused term. &amp;nbsp;The best way to understand micro-services is to understand that the concept of &quot;micro&quot; does not describe the size of the application but the domain by which the service encompasses. &amp;nbsp;It is well explained by many others, but at it&#39;s most simple it&#39;s the idea that if you can encapsulate a concept&#39;s data and functionality into a discrete set of commands you have a micro service. &amp;nbsp; This explanation is a reinterpretation of &lt;a href=&quot;http://martinfowler.com/microservices/&quot;&gt;Martin Fowler&#39;s&lt;/a&gt; as I believe it&#39;s not just about the services themselves but the domain barriers that it creates. &amp;nbsp;Eric Evan&#39;s seminal discussions around Micro Services Architecture and &lt;a href=&quot;http://www.infoq.com/news/2015/06/dddx-microservices-boundaries&quot;&gt;Domain Driven Design&lt;/a&gt; is the closest to an understanding of what it takes to have a successful implementation.&lt;br /&gt;
Micro Services architecture uses some specific concepts that may be unfamiliar to you, even if you are writing Micro Services at this time:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Domain Model - A domain model in regards to Micro Services provides the business context by which the service is exposed to the outside world. &amp;nbsp;The Domain model can be anything that represents the system as a singular perspective on a problem. &amp;nbsp;As a design principle Micro Services applications do not directly share data in their data except by activation through a service call. &amp;nbsp;For instance, the domain model that Docker exposes in it&#39;s services could be considered one that describes running systems, hosts, and applications. &amp;nbsp;In this case, it&#39;s domain is bound around a specific context which is containers and the information necessary to run a container.&lt;/li&gt;
&lt;li&gt;Service Contextual Boundary - The Contextual Boundary can be thought of as being the thin skin that separates the Domain Model of one system from another. &amp;nbsp;This can be though of as an abstraction of the interaction between very similar systems that would need to cooperate/collaborate to accomplish a specific goal. &amp;nbsp;The Service Contextual Boundary is used to further define when one service should have a set of functionality and therefore data, and when it should not.&lt;/li&gt;
&lt;li&gt;Domain Based Service &amp;nbsp;- A service based upon a domain is a fundamental architectural piece of the Micro Services architecture. One very important architectural decision is what domains truly belong to one service as direct data sharing is not permitted between two service based applications. &amp;nbsp;It is through the understanding of Domain Based Service concepts that it is understood what data, and what context should be used when interacting with the application.&lt;/li&gt;
&lt;li&gt;Shared Nothing Architecture - The idea that systems are built for web-scale when it does not have to share or save session state data, other than through established system level interfaces. &amp;nbsp;In addition, it has a degree of independence from other technical dependencies so that in a situation of hardware or network failure it can still function with the data that it has locally.&lt;/li&gt;
&lt;li&gt;Externally facing protocol and API(s) matter, but they don&#39;t define the architecture - A MicroService architecture should not be bound to a specific protocol such as AMQP or a public API such as JMS, or even REST. &amp;nbsp;These should be just bindings that can be changed at any time.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
This approach to architecture has become popular with anyone who plans to use Public Cloud Infrastructure As A Service (IAAS) such as Amazon, Google. &amp;nbsp;In addition, &amp;nbsp;the on-premise Platform As A Service (PAAS) such as Cloud Foundry provides considerable support for the Micro Services architecture.&lt;/div&gt;
&lt;h2&gt;
Why are MicroServices projects so difficult to deliver?&lt;/h2&gt;
&lt;/div&gt;
&lt;h3&gt;
&lt;div style=&quot;font-size: medium; font-weight: normal;&quot;&gt;
The Micro Services approach to application architecture has been hyped quite a bit since 2013. &amp;nbsp;The architecture has grown out of other architectures that were just as hyped such as Object Oriented Design, Functional programming, and Services Oriented Architecture. Each of these have been thought of as the &quot;Holy Grail&quot; for computing, and in Functional Programming&#39;s case is a resurrected approach that many had dismissed in the development community years ago. &amp;nbsp;Micro Services architecture in my view can be looked at as one of the options for shared-nothing approaches to distributed application design.&lt;/div&gt;
&lt;div style=&quot;font-size: medium; font-weight: normal;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-size: medium; font-weight: normal;&quot;&gt;
With this approach though, comes a degree of difficulty that many underestimate. &amp;nbsp;Organizations are attempting to put Micro Services projects in place and framing their software development around them. &amp;nbsp;As the number of projects overlap that cover the same domain areas, you have truly a complex problem. &amp;nbsp;This may not be a problem for a small number of people, but as the number of people grow and the number of services grow as well, everyone will have their own Micro Service to handle their own very specific problem within a very large domain. &amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;font-size: medium; font-weight: normal;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-size: medium; font-weight: normal;&quot;&gt;
&lt;b&gt;MicroService projects have a problem delivering primarily for this one reason:&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;font-size: medium; font-weight: normal;&quot;&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;font-size: medium; font-weight: normal;&quot;&gt;
&lt;b&gt;You must understand the domain and have a plan before you start developing your services. &amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;font-size: medium; font-weight: normal;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-size: medium; font-weight: normal;&quot;&gt;
With the advent of languages like Node.JS the size and complexity of these small almost &quot;snippets&quot; of code is pretty high as it is not understandable what each of these small services are actually doing. &amp;nbsp;Is it a bad practice to use scripting and small sets of code to do your Micro Services, absolutely not, but you must think about what you are doing within the context of your larger application and not violate any context boundaries whatever the programming language or size of code block.&lt;/div&gt;
&lt;/h3&gt;
&lt;h3&gt;
- Think of Micro Services as a &quot;Product&quot; not a &quot;Project.&quot;&lt;/h3&gt;
&lt;div&gt;
A problem was posed to me years ago when I was at a company that had over 175 individual financial reports that stated different numbers according to the whims of the individual requestor. &amp;nbsp;The problem was, &quot;How can I still have my individual report that has my His perspective on the numbers was while knowing that everyone else starts out with the same original facts?&quot;&lt;br /&gt;
&lt;br /&gt;
if this problem it turned on it&#39;s head you would find that the problem is not the language or the implementation of the services themselves, but the concept of how &quot;projects&quot; are delivered. &amp;nbsp;Micro Service architecture severely depends on having an understanding of the Service Contextual Boundary and a perception of the domain that goes beyond a specific project. &amp;nbsp;In order to accomplish this change, and effectively manage Micro Services the domain services need to be understood and thought of as a Product of the organization, not as an IT or software development project.&lt;br /&gt;
&lt;h3&gt;
Deployment is the big advantage or disadvantage&lt;/h3&gt;
Micro Service architectures when implemented have the greatest advantage over other architectures when the implementation is finished and it is deployed into a production environment. &amp;nbsp;Due to the natural testability of MicroServices deployments can be seamless. Scaling up and down can be quite a bit more easily accomplished than other approaches. &lt;br /&gt;
&lt;br /&gt;
At the same time, the disadvantage for a Micro Services deployment is that most infrastructure organizations are not used to deploying the volume of artifacts associated with this style of architecture. &amp;nbsp;Without implementing tools such as a Platform As A Service deployed on-premise or in the cloud the technical and procedural hurdles may be just too high for most operations teams.&lt;/div&gt;
&lt;h3&gt;
Why switch to a micro-service architecture if it&#39;s so difficult?&lt;/h3&gt;
&lt;div&gt;
Everyone looks for the next big thing. At this point the MicroService architecture has been attempted because it does offer some perceived advantages over traditional Services Oriented Architecture and Object Oriented development approaches.&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;It works well with AGILE projects in that you can define boundaries on functionality and define specific service interactions as part of your micro services boundary.&lt;/li&gt;
&lt;li&gt;Services Oriented Architecture and Domain Driven Design provide the technical mechanics behind deciding the style of the services that that we expose and the content of the messages we are passing. &amp;nbsp;These items are important to MicroService architecture.&lt;/li&gt;
&lt;li&gt;MicroService architecture provides specific patterns that enable horizontal scaling and failover. These are up to the individuals developing the services to implement the functionality, but it will be available if MicroService architecture principles are followed.&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h2&gt;
Conclusion&lt;/h2&gt;
&lt;/div&gt;
&lt;div&gt;
Follow the path:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Plan for failure&lt;/li&gt;
&lt;li&gt;Implement horizontal scaling&lt;/li&gt;
&lt;li&gt;Validate each service&#39;s use in the domain.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://javaarchramble.blogspot.com/feeds/1931747066236778246/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4179812064174942414/1931747066236778246' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/1931747066236778246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/1931747066236778246'/><link rel='alternate' type='text/html' href='http://javaarchramble.blogspot.com/2016/02/why-do-microservices-projects-fail-to.html' title='Why do MicroServices projects fail to deliver?'/><author><name>Joshua Davis</name><uri>http://www.blogger.com/profile/10630084168049860089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyKSAAwDoasXgYegxE0iJSn-lY0wgimia82Zq3rLtAxh-BJ3nI4L8iDl0dcjlTazTrf2aFC0xLPHR4r6iEs6pQoSyoQcYS9zo58hPzruLEeHubkHC9nsMqwHZZLvMtxfg/s220/ProfilePhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4179812064174942414.post-6674873766818849461</id><published>2016-01-20T12:33:00.001-05:00</published><updated>2016-02-18T09:47:38.229-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Ambari"/><category scheme="http://www.blogger.com/atom/ns#" term="Consul"/><category scheme="http://www.blogger.com/atom/ns#" term="DNS"/><category scheme="http://www.blogger.com/atom/ns#" term="Docker"/><category scheme="http://www.blogger.com/atom/ns#" term="Docker Compose"/><category scheme="http://www.blogger.com/atom/ns#" term="Docker Swarm"/><category scheme="http://www.blogger.com/atom/ns#" term="Go"/><category scheme="http://www.blogger.com/atom/ns#" term="Hadoop"/><category scheme="http://www.blogger.com/atom/ns#" term="Hortonworks"/><title type='text'>An example of Docker Multi Host Clustering Part 1</title><content type='html'>&lt;h1 id=&quot;toc_0&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-print-color-adjust: exact; background-color: white; cursor: text; font-family: Helvetica, arial, sans-serif; font-size: 28px; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; padding: 0px; position: relative; widows: auto;&quot;&gt;
Ambari on Docker - using multiple physical hosts for Bare-Metal Docker Swarm Clustering&lt;/h1&gt;
&lt;h1 id=&quot;toc_0&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-print-color-adjust: exact; background-color: white; cursor: text; font-family: Helvetica, arial, sans-serif; font-size: 28px; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; padding: 0px; position: relative; widows: auto;&quot;&gt;
&lt;div style=&quot;-webkit-print-color-adjust: exact; font-size: 14px; font-weight: normal; line-height: 22px; margin-bottom: 15px; margin-top: 15px; widows: auto;&quot;&gt;
&lt;span style=&quot;widows: auto;&quot;&gt;A new project that I have been working on at &lt;a href=&quot;https://github.com/joshuad2/docker-ambari&quot;&gt;joshuad2/docker-ambari&lt;/a&gt;&amp;nbsp;has been created&amp;nbsp;to help you to get started with multi-host Bare-Metal Docker Swarm Clustering. &amp;nbsp;In this case the scripts implement an Ambari Cluster which makes it much easier to create a Hadoop Cluster. Using a heterogenous set of physical machines you create a Docker Cluster that can continue to expand over time.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;-webkit-print-color-adjust: exact; font-size: 14px; font-weight: normal; line-height: 22px; margin-bottom: 15px; margin-top: 15px; widows: auto;&quot;&gt;
The instructions for Ambari can be extended to any other service that provided clustering such as Apache Tomcat, Apache Nifi, Apache Spark, and Apache Storm. &amp;nbsp;The lab that I used to do this is outlined &lt;a href=&quot;http://javaarchramble.blogspot.com/2016/02/an-example-docker-swarm-multi-host-lab.html&quot;&gt;here&lt;/a&gt;.&lt;/div&gt;
&lt;/h1&gt;
&lt;h2 id=&quot;toc_1&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-print-color-adjust: exact; background-color: white; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; cursor: text; font-family: Helvetica, arial, sans-serif; font-size: 24px; margin: 20px 0px 10px; padding: 0px; position: relative; widows: auto;&quot;&gt;
Bare-Metal Docker Swarm Clustering&amp;nbsp;&lt;/h2&gt;
&lt;h1 style=&quot;-webkit-font-smoothing: antialiased; -webkit-print-color-adjust: exact; background-color: white; cursor: text; font-family: Helvetica, arial, sans-serif; font-size: 28px; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; padding: 0px; position: relative; widows: auto;&quot;&gt;
&lt;div style=&quot;-webkit-print-color-adjust: exact; font-size: 14px; font-weight: normal; line-height: 22px; margin-bottom: 15px; margin-top: 15px; widows: auto;&quot;&gt;
Bare-Metal Docker Swarm Clusters are built using multiple physical hosts that have Docker and Swarm installed locally, not through Docker Machine.&amp;nbsp;&lt;/div&gt;
&lt;/h1&gt;
&lt;h2 id=&quot;toc_2&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-print-color-adjust: exact; background-color: white; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; cursor: text; font-family: Helvetica, arial, sans-serif; font-size: 24px; margin: 20px 0px 10px; padding: 0px; position: relative; widows: auto;&quot;&gt;
What is needed to make this work?&lt;/h2&gt;
&lt;h1 style=&quot;-webkit-font-smoothing: antialiased; -webkit-print-color-adjust: exact; background-color: white; cursor: text; font-family: Helvetica, arial, sans-serif; font-size: 28px; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; padding: 0px; position: relative; widows: auto;&quot;&gt;
&lt;ul style=&quot;-webkit-print-color-adjust: exact; font-size: 14px; font-weight: normal; line-height: 22px; margin: 15px 0px; padding-left: 30px; widows: auto;&quot;&gt;
&lt;li style=&quot;-webkit-print-color-adjust: exact; margin: 0px;&quot;&gt;More than one host with linux (Ubuntu 14.x) installed. They can be virutal machines, but if you are going to use VM&#39;s you may want to use Docker Machine which is well explained in the Docker documentation.&lt;/li&gt;
&lt;li style=&quot;-webkit-print-color-adjust: exact; margin: 0px;&quot;&gt;All hosts must have either a fixed IP or an IP that will not change&lt;/li&gt;
&lt;li style=&quot;-webkit-print-color-adjust: exact; margin: 0px;&quot;&gt;All hosts must not have a DNS installed&lt;/li&gt;
&lt;/ul&gt;
&lt;/h1&gt;
&lt;h2 id=&quot;toc_3&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-print-color-adjust: exact; background-color: white; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; cursor: text; font-family: Helvetica, arial, sans-serif; font-size: 24px; margin: 20px 0px 10px; padding: 0px; position: relative; widows: auto;&quot;&gt;
Why do I use Consul for DNS?&lt;/h2&gt;
&lt;h1 style=&quot;-webkit-font-smoothing: antialiased; -webkit-print-color-adjust: exact; background-color: white; cursor: text; font-family: Helvetica, arial, sans-serif; font-size: 28px; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; padding: 0px; position: relative; widows: auto;&quot;&gt;
&lt;ul style=&quot;-webkit-print-color-adjust: exact; font-size: 14px; font-weight: normal; line-height: 22px; margin: 15px 0px; padding-left: 30px; widows: auto;&quot;&gt;
&lt;li style=&quot;-webkit-print-color-adjust: exact; margin: 0px;&quot;&gt;Consul is used for three reasons:&lt;ul style=&quot;-webkit-print-color-adjust: exact; margin: 0px 0px 15px; padding-left: 30px;&quot;&gt;
&lt;li style=&quot;-webkit-print-color-adjust: exact; margin: 0px;&quot;&gt;&lt;strong style=&quot;-webkit-print-color-adjust: exact; margin-top: 0px;&quot;&gt;It is easy to install and use with Docker&lt;/strong&gt;&amp;nbsp;- Consul&#39;s documentation on setting it up for use is great and it has a very nice GUI. In addition it has greater ability to handle failover that may be nice to use in the future.&lt;/li&gt;
&lt;li style=&quot;-webkit-print-color-adjust: exact; margin: 0px;&quot;&gt;&lt;strong style=&quot;-webkit-print-color-adjust: exact; margin-top: 0px;&quot;&gt;Consul is used as a dynamic DNS for the Ambari nodes&lt;/strong&gt;&amp;nbsp;- Hadoop and many other network based software needs to have a fully qualified domain name (FQDN) to operate. Consul provides this. The important detail is that you have to create a Consul server with Port 53 exposed, which is used for DNS in order to have the Docker nodes use it. If you have dynamic DNS already installed in your environment you can use it as well, but you will need to find a way to add the containers dynamically at run-time.&lt;/li&gt;
&lt;li style=&quot;-webkit-print-color-adjust: exact; margin: 0px;&quot;&gt;&lt;strong style=&quot;-webkit-print-color-adjust: exact; margin-top: 0px;&quot;&gt;Consul is used as a &quot;backing store&quot; for the Docker Cluster&lt;/strong&gt;&amp;nbsp;- Docker requires that if you want to use Docker Swarm you must have a &quot;backing store.&quot; This is explained in great detail on the&amp;nbsp;&lt;a href=&quot;https://www.docker.com/&quot; style=&quot;-webkit-print-color-adjust: exact; color: #4183c4;&quot;&gt;Docker Site&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/h1&gt;
&lt;h2 id=&quot;toc_4&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-print-color-adjust: exact; background-color: white; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; cursor: text; font-family: Helvetica, arial, sans-serif; font-size: 24px; margin: 20px 0px 10px; padding: 0px; position: relative; widows: auto;&quot;&gt;
Pre-requisites for each host&lt;/h2&gt;
&lt;h1 style=&quot;-webkit-font-smoothing: antialiased; -webkit-print-color-adjust: exact; background-color: white; cursor: text; font-family: Helvetica, arial, sans-serif; font-size: 28px; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; padding: 0px; position: relative; widows: auto;&quot;&gt;
&lt;ul style=&quot;-webkit-print-color-adjust: exact; font-size: 14px; font-weight: normal; line-height: 22px; margin: 15px 0px; padding-left: 30px; widows: auto;&quot;&gt;
&lt;li style=&quot;-webkit-print-color-adjust: exact; margin: 0px;&quot;&gt;&lt;a href=&quot;https://golang.org/&quot; style=&quot;-webkit-print-color-adjust: exact; color: #4183c4; margin-top: 0px;&quot;&gt;Go Language&lt;/a&gt;&amp;nbsp;- Make sure to install the latest version of Go onto your hosts. If you do not go Dep and Swarm will not compile.&amp;nbsp;&lt;/li&gt;
&lt;li style=&quot;-webkit-print-color-adjust: exact; margin: 0px;&quot;&gt;&lt;a href=&quot;https://github.com/tools/godep&quot; style=&quot;-webkit-print-color-adjust: exact; color: #4183c4; margin-top: 0px;&quot;&gt;Go Dep&lt;/a&gt;&amp;nbsp;- Follow the instructions to download and install. You will need to set a couple of environment variables (GOROOT and GOCODE) before running the instructions.&lt;/li&gt;
&lt;li style=&quot;-webkit-print-color-adjust: exact; margin: 0px;&quot;&gt;&lt;a href=&quot;http://www.docker.com/&quot; style=&quot;-webkit-print-color-adjust: exact; color: #4183c4; margin-top: 0px;&quot;&gt;Docker&lt;/a&gt;&amp;nbsp;- Follow the instructions for your Linux variant, you should make sure to use atleast the Docker 1.9+ version. When installing Docker you will have a startup script installed so that you can access it as a service. You will need to follow the instructions on the Docker Swarm install to modify the startup for Docker Swarm.&lt;/li&gt;
&lt;li style=&quot;-webkit-print-color-adjust: exact; margin: 0px;&quot;&gt;&lt;a href=&quot;https://github.com/docker/swarm&quot; style=&quot;-webkit-print-color-adjust: exact; color: #4183c4; margin-top: 0px;&quot;&gt;Docker Swarm&lt;/a&gt;&amp;nbsp;- Follow the instructions to download and install Swarm. Once you have compiled Swarm copy the executable under ${GOCODE)/bin to /usr/bin (or the appropriate standard directory).&lt;/li&gt;
&lt;li style=&quot;-webkit-print-color-adjust: exact; margin: 0px;&quot;&gt;&lt;a href=&quot;https://www.consul.io/intro/getting-started/install.html&quot; style=&quot;-webkit-print-color-adjust: exact; color: #4183c4; margin-top: 0px;&quot;&gt;Consul&lt;/a&gt;&amp;nbsp;- Follow the instructions to install Consul. If you are not deploying this to a Production environment you may not need more than one host running Consul. Make sure that you expose port 53 for DNS (instructions are on the Consul site).&lt;/li&gt;
&lt;/ul&gt;
&lt;/h1&gt;
&lt;h2 id=&quot;toc_5&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-print-color-adjust: exact; background-color: white; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; cursor: text; font-family: Helvetica, arial, sans-serif; font-size: 24px; margin: 20px 0px 10px; padding: 0px; position: relative; widows: auto;&quot;&gt;
Optional Installs&lt;/h2&gt;
&lt;h1 style=&quot;-webkit-font-smoothing: antialiased; -webkit-print-color-adjust: exact; background-color: white; cursor: text; font-family: Helvetica, arial, sans-serif; font-size: 28px; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; padding: 0px; position: relative; widows: auto;&quot;&gt;
&lt;ul style=&quot;-webkit-print-color-adjust: exact; font-size: 14px; font-weight: normal; line-height: 22px; margin: 15px 0px; padding-left: 30px; widows: auto;&quot;&gt;
&lt;li style=&quot;-webkit-print-color-adjust: exact; margin: 0px;&quot;&gt;&lt;a href=&quot;https://github.com/docker/compose&quot; style=&quot;-webkit-print-color-adjust: exact; color: #4183c4; margin-top: 0px;&quot;&gt;Docker Compose&lt;/a&gt;&amp;nbsp;- Same as Docker Swarm, you will want to copy the executable into /usr/bin.&lt;/li&gt;
&lt;/ul&gt;
&lt;/h1&gt;
&lt;h2 id=&quot;toc_6&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-print-color-adjust: exact; background-color: white; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; cursor: text; font-family: Helvetica, arial, sans-serif; font-size: 24px; margin: 20px 0px 10px; padding: 0px; position: relative; widows: auto;&quot;&gt;
Prepare the hosts&lt;/h2&gt;
&lt;h1 style=&quot;-webkit-font-smoothing: antialiased; -webkit-print-color-adjust: exact; background-color: white; cursor: text; font-family: Helvetica, arial, sans-serif; font-size: 28px; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; padding: 0px; position: relative; widows: auto;&quot;&gt;
&lt;ul style=&quot;-webkit-print-color-adjust: exact; font-size: 14px; font-weight: normal; line-height: 22px; margin: 15px 0px; padding-left: 30px; widows: auto;&quot;&gt;
&lt;li style=&quot;-webkit-print-color-adjust: exact; margin: 0px;&quot;&gt;Add each host to the /etc/hosts file with a short name for the machine&lt;/li&gt;
&lt;li style=&quot;-webkit-print-color-adjust: exact; margin: 0px;&quot;&gt;Pick which host(s) will start the Consul service&lt;/li&gt;
&lt;li style=&quot;-webkit-print-color-adjust: exact; margin: 0px;&quot;&gt;Pick which host(s) will start the Consul GUI (it&#39;s optional)&lt;/li&gt;
&lt;li style=&quot;-webkit-print-color-adjust: exact; margin: 0px;&quot;&gt;Create a startup script (/etc/init/consul.conf) on the consul server machine so that when it comes up it will start up consul.&lt;/li&gt;
&lt;li style=&quot;-webkit-print-color-adjust: exact; margin: 0px;&quot;&gt;Decide which host will have a Docker Swarm Manager. You will want to use a port that is easy to remember as you will use it on each Docker call once the cluster is usable.&amp;nbsp;&lt;/li&gt;
&lt;li style=&quot;-webkit-print-color-adjust: exact; margin: 0px;&quot;&gt;Modify the Docker startup script on each host to advertise itself as part of the Docker Swarm Cluster.&lt;/li&gt;
&lt;li style=&quot;-webkit-print-color-adjust: exact; margin: 0px;&quot;&gt;Create a startup script to start Swarm on each host.&lt;/li&gt;
&lt;li style=&quot;-webkit-print-color-adjust: exact; margin: 0px;&quot;&gt;Create a &lt;a href=&quot;http://javaarchramble.blogspot.com/2016/02/creating-startup-script-for-docker.html&quot;&gt;startup script to Start the Swarm Manager on the host(s)&lt;/a&gt;.&lt;/li&gt;
&lt;li style=&quot;-webkit-print-color-adjust: exact; margin: 0px;&quot;&gt;When you have finished setting up the Docker Swarm, setup the&amp;nbsp;&lt;a href=&quot;https://docs.docker.com/engine/userguide/networking/dockernetworks/&quot; style=&quot;-webkit-print-color-adjust: exact; color: #4183c4; margin-top: 0px;&quot;&gt;Docker Overlay Network&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/h1&gt;
&lt;h2 id=&quot;toc_7&quot; style=&quot;-webkit-font-smoothing: antialiased; -webkit-print-color-adjust: exact; background-color: white; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; cursor: text; font-family: Helvetica, arial, sans-serif; font-size: 24px; margin: 20px 0px 10px; padding: 0px; position: relative; widows: auto;&quot;&gt;
Running Ambari and Hadoop using Docker Swarm&lt;/h2&gt;
&lt;h1 style=&quot;background-color: white; cursor: text; font-family: helvetica, arial, sans-serif; margin: 0px 0px 10px; padding: 0px; position: relative;&quot;&gt;
&lt;ul style=&quot;-webkit-print-color-adjust: exact; font-size: 14px; font-weight: normal; line-height: 22px; margin: 15px 0px; padding-left: 30px; widows: auto;&quot;&gt;
&lt;li style=&quot;-webkit-print-color-adjust: exact; margin: 0px;&quot;&gt;Use Git to pull down the &lt;a href=&quot;https://github.com/joshuad2/docker-ambari&quot;&gt;repository&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;-webkit-print-color-adjust: exact; margin: 0px;&quot;&gt;Export the location of your Docker Swarm Manager:&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;-webkit-print-color-adjust: exact; font-size: 14px; font-weight: normal; line-height: 22px; margin-bottom: 15px; margin-top: 15px; widows: auto;&quot;&gt;
&lt;code style=&quot;-webkit-print-color-adjust: exact; background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; white-space: nowrap;&quot;&gt;$export DOCKER_MANAGER=tcp://192.168.1.18:2376&lt;/code&gt;&lt;/div&gt;
&lt;ul style=&quot;-webkit-print-color-adjust: exact; font-size: 14px; font-weight: normal; line-height: 22px; margin: 15px 0px; padding-left: 30px; widows: auto;&quot;&gt;
&lt;li style=&quot;-webkit-print-color-adjust: exact; margin: 0px;&quot;&gt;Export the name of the Docker Overlay Network you are using&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;-webkit-print-color-adjust: exact; font-size: 14px; font-weight: normal; line-height: 22px; margin-bottom: 15px; margin-top: 15px; widows: auto;&quot;&gt;
&lt;code style=&quot;-webkit-print-color-adjust: exact; background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; white-space: nowrap;&quot;&gt;$export OVERLAY_NETWORK=my-net&lt;/code&gt;&lt;/div&gt;
&lt;ul style=&quot;-webkit-print-color-adjust: exact; font-size: 14px; font-weight: normal; line-height: 22px; margin: 15px 0px; padding-left: 30px; widows: auto;&quot;&gt;
&lt;li style=&quot;-webkit-print-color-adjust: exact; margin: 0px;&quot;&gt;Export the location of the Consul Server&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;-webkit-print-color-adjust: exact; font-size: 14px; font-weight: normal; line-height: 22px; margin-bottom: 15px; margin-top: 15px; widows: auto;&quot;&gt;
&lt;code style=&quot;-webkit-print-color-adjust: exact; background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; white-space: nowrap;&quot;&gt;$export CONSUL=192.168.1.18&lt;/code&gt;&lt;/div&gt;
&lt;ul style=&quot;-webkit-print-color-adjust: exact; font-size: 14px; font-weight: normal; line-height: 22px; margin: 15px 0px; padding-left: 30px; widows: auto;&quot;&gt;
&lt;li style=&quot;-webkit-print-color-adjust: exact; margin: 0px;&quot;&gt;Put the ambari functions into your environment&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;-webkit-print-color-adjust: exact; font-size: 14px; font-weight: normal; line-height: 22px; margin-bottom: 15px; margin-top: 15px; widows: auto;&quot;&gt;
&lt;code style=&quot;-webkit-print-color-adjust: exact; background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; white-space: nowrap;&quot;&gt;$ . ambari-functions&lt;/code&gt;&lt;/div&gt;
&lt;ul style=&quot;-webkit-print-color-adjust: exact; font-size: 14px; font-weight: normal; line-height: 22px; margin: 15px 0px; padding-left: 30px; widows: auto;&quot;&gt;
&lt;li style=&quot;-webkit-print-color-adjust: exact; margin: 0px;&quot;&gt;Start the ambari server and nodes. The command below will start an Ambari cluster with 5 nodes, one for the Ambari server and 4 nodes with Ambari agents.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;-webkit-print-color-adjust: exact; font-size: 14px; font-weight: normal; line-height: 22px; margin-bottom: 15px; margin-top: 15px; widows: auto;&quot;&gt;
&lt;code style=&quot;-webkit-print-color-adjust: exact; background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; white-space: nowrap;&quot;&gt;$ amb-start-cluster 5&lt;/code&gt;&lt;/div&gt;
&lt;ul style=&quot;-webkit-print-color-adjust: exact; font-size: 14px; font-weight: normal; line-height: 22px; margin: 15px 0px; padding-left: 30px; widows: auto;&quot;&gt;
&lt;li style=&quot;-webkit-print-color-adjust: exact; margin: 0px;&quot;&gt;Find the host where the Ambari server container has been created:&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;-webkit-print-color-adjust: exact; font-size: 14px; font-weight: normal; line-height: 22px; margin-bottom: 15px; margin-top: 15px; widows: auto;&quot;&gt;
&lt;code style=&quot;-webkit-print-color-adjust: exact; background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; white-space: nowrap;&quot;&gt;$ get-swarm-host amb-server&lt;/code&gt;&lt;/div&gt;
&lt;div style=&quot;-webkit-print-color-adjust: exact; font-size: 14px; font-weight: normal; line-height: 22px; margin-bottom: 15px; margin-top: 15px; widows: auto;&quot;&gt;
&lt;code style=&quot;-webkit-print-color-adjust: exact; background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; white-space: nowrap;&quot;&gt;$ ubuntu-hp-jdavis&lt;/code&gt;&lt;/div&gt;
&lt;ul style=&quot;font-size: 14px; font-weight: normal; line-height: 22px; margin: 15px 0px 0px; padding-left: 30px;&quot;&gt;
&lt;li style=&quot;-webkit-print-color-adjust: exact; margin: 0px;&quot;&gt;&lt;div style=&quot;-webkit-print-color-adjust: exact; margin-bottom: 15px;&quot;&gt;
Use the Ambari User Interface to create your cluster by going to the server to the server you received from the above query. If you have setup all of your hosts in /etc/host on each machine you will be able to access the server in your browser. Right now the port exposed for the Ambari server is 8182, you may need to change that if this port is already used on all of your hosts. Docker will not put this container onto a host where the port is already used.&lt;/div&gt;
&lt;ul style=&quot;-webkit-print-color-adjust: exact; margin: 15px 0px; padding-left: 30px;&quot;&gt;
&lt;li style=&quot;-webkit-print-color-adjust: exact; margin: 0px;&quot;&gt;In my environment the ambari server would be accessed using:&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;-webkit-print-color-adjust: exact; margin-bottom: 15px; margin-top: 15px;&quot;&gt;
&lt;code style=&quot;-webkit-print-color-adjust: exact; background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; white-space: nowrap;&quot;&gt;http://ubuntu-hp-jdavis:8182/#/login&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;-webkit-print-color-adjust: exact; margin: 0px;&quot;&gt;&lt;div style=&quot;-webkit-print-color-adjust: exact; margin-bottom: 15px;&quot;&gt;
At this point you can install your Hadoop server onto your Ambari cluster!&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;span style=&quot;font-size: 14px; font-weight: normal; line-height: 22px;&quot;&gt;Part 2 is &lt;a href=&quot;http://javaarchramble.blogspot.com/2016/02/an-example-of-docker-multi-host.html&quot;&gt;here&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 14px; font-weight: normal; line-height: 22px;&quot;&gt;Part 3 is&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://bit.ly/1SUdECk&quot; style=&quot;font-size: 14px; font-weight: normal; line-height: 22px;&quot;&gt;here&lt;/a&gt;&lt;/div&gt;
&lt;/h1&gt;
</content><link rel='replies' type='application/atom+xml' href='http://javaarchramble.blogspot.com/feeds/6674873766818849461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4179812064174942414/6674873766818849461' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/6674873766818849461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/6674873766818849461'/><link rel='alternate' type='text/html' href='http://javaarchramble.blogspot.com/2016/01/an-example-of-docker-multi-host.html' title='An example of Docker Multi Host Clustering Part 1'/><author><name>Joshua Davis</name><uri>http://www.blogger.com/profile/10630084168049860089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyKSAAwDoasXgYegxE0iJSn-lY0wgimia82Zq3rLtAxh-BJ3nI4L8iDl0dcjlTazTrf2aFC0xLPHR4r6iEs6pQoSyoQcYS9zo58hPzruLEeHubkHC9nsMqwHZZLvMtxfg/s220/ProfilePhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4179812064174942414.post-9152985726701317499</id><published>2015-07-31T14:47:00.000-04:00</published><updated>2015-07-31T14:47:42.500-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Amazon Web Services"/><category scheme="http://www.blogger.com/atom/ns#" term="Cloud Foundry"/><category scheme="http://www.blogger.com/atom/ns#" term="Docker"/><category scheme="http://www.blogger.com/atom/ns#" term="Google Container Engine"/><category scheme="http://www.blogger.com/atom/ns#" term="HP Helion"/><category scheme="http://www.blogger.com/atom/ns#" term="IBM BlueMix"/><category scheme="http://www.blogger.com/atom/ns#" term="Kubernetes"/><category scheme="http://www.blogger.com/atom/ns#" term="Pivotal Cloud Foundry"/><category scheme="http://www.blogger.com/atom/ns#" term="Stackato"/><title type='text'>Using Docker as a PAAS and a comparison to Pivotal Cloud Foundry</title><content type='html'>&lt;h2&gt;
Introduction&lt;/h2&gt;
&lt;div&gt;
Using Docker as a Platform as a Service (PAAS) in a similar way to Cloud Foundry is something that I did not think was possible until I actually had the challenge of putting it together. &amp;nbsp;Docker is part of an ecosystem of open source projects, similar to the Cloud Foundry project. &amp;nbsp;In addition to it&#39;s own projects and repositories that has been created by Docker each of the components except for the core containerization engine are available to be built by others as long as they adhere to the open standards that Docker has established through the Open Container Foundation.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
When you compare the Docker container engine to Cloud Foundry it&#39;s like comparing a human arm to a complete human body, it is just not fair. &amp;nbsp;But, when you add the Docker Compose, Docker Swarm, Docker Machine, and Docker Hub to the mix you are close. &amp;nbsp;It is only when you add the open source projects from HashiSource (Consul, Registrator, Packer, Consul Template) and Jenkins with the Jenkins DSL do you get closer to the full set of functionality offered by Cloud Foundry.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCv25-E8SJNuFk8cyLE0NP4_8WybjZsvQY-vchA4PfxdE0WGR_5UcrhMP3W9qY_SjarQuhLZLlNX2DfN6-WxuVF51LKJpiPWr3mEuVYpGXCQKnWPxQ-1BFZHSytYTWGFmCisdJrLyvGEs/s1600/Platform+As+A+Service.001.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;224&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCv25-E8SJNuFk8cyLE0NP4_8WybjZsvQY-vchA4PfxdE0WGR_5UcrhMP3W9qY_SjarQuhLZLlNX2DfN6-WxuVF51LKJpiPWr3mEuVYpGXCQKnWPxQ-1BFZHSytYTWGFmCisdJrLyvGEs/s640/Platform+As+A+Service.001.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;PAAS Execution Environment&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;h3&gt;
So, what is this PAAS thing?&lt;/h3&gt;
&lt;div&gt;
A PAAS at a high level has these components:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Infrastructure Abstraction - A way of abstracting the hardware infrastructure and networking layer away from the developer/programmer.&lt;/li&gt;
&lt;li&gt;Software Defined Infrastructure - A simple software abstraction that enables dynamic software defined infrastructure.&lt;/li&gt;
&lt;li&gt;Service Enablement - A self-service ability to create releases of software that enables the three &quot;C&#39;s&quot;.&amp;nbsp;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Continuous Delivery&lt;/li&gt;
&lt;li&gt;Continuous Integration&lt;/li&gt;
&lt;li&gt;Continuous Deployment&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Service location independence - A Services environment that enables the creation of user and system defined services where the programmer and user does not need to understand where the service actually executes, but only cares about the interface. &amp;nbsp;&lt;/li&gt;
&lt;li&gt;Operational consistency - A set of software components that regardless of Operating System or underlying infrastructure whether it be cloud or local provide consistent operational behavior.&lt;/li&gt;
&lt;li&gt;Configuration Management - A set of API&#39;s or software components that provide object management and versioning along with recovery and backup capabilities.&lt;/li&gt;
&lt;li&gt;Logging and Monitoring - API&#39;s should be available to enable Logging and Monitoring&lt;/li&gt;
&lt;li&gt;Security - Once enabled, the API&#39;s for security should enable typical security profiles used in an organization.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h3&gt;
Docker by itself is not a PAAS&amp;nbsp;&lt;/h3&gt;
&lt;div&gt;
Below is an example configuration for the &quot;Execution&quot; environment for the Docker images.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgj57oyGWut_aX3ZiADApWuXfma81vThQWpd5HNTXEjGDT_MFzImWMlnuC4b1jplaTzuB8jgJ217vleTCN6P8pS1Z0Pkzpe_yQRdJKdYN0txQEtfVH5xq8g4gtdDYX_jFGfO67_NGwnJ4k/s1600/Platform+As+A+Service.001.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;236&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgj57oyGWut_aX3ZiADApWuXfma81vThQWpd5HNTXEjGDT_MFzImWMlnuC4b1jplaTzuB8jgJ217vleTCN6P8pS1Z0Pkzpe_yQRdJKdYN0txQEtfVH5xq8g4gtdDYX_jFGfO67_NGwnJ4k/s640/Platform+As+A+Service.001.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The Docker projects in the open source community (Not Orca) are projects that are setup to work with other vendor&#39;s open source products. &amp;nbsp;The diagram above shows a simple high level implementation of the Docker Container engine alongside products from HashiSource, NGINX and different cloud providers. &amp;nbsp;Each of these products adhere or work with the Docker container runtime through the &amp;nbsp;API that is exposed, &amp;nbsp;For instance, when you start looking at Docker Swarm you can substitute Google Kubernetes, Apache Mesos, or even Apache Brooklyn. &amp;nbsp;In my experience though there really is nothing better than having one set of consistent interfaces to work with so Docker Swarm is actually a good place to start, especially when you are using it as a starting point for development.&lt;br /&gt;
&lt;h3&gt;
What is missing?&lt;/h3&gt;
&lt;/div&gt;
&lt;h4&gt;
On-premise build, release, and object storage&lt;/h4&gt;
&lt;div&gt;
There are two things missing from the diagram above, the ability to store released objects (in this case images) and the ability to release. &amp;nbsp;In the Docker ecosystem this is easily rectified by using a private Docker Hub repository and a Github or BitBucket account. &amp;nbsp;If you happen to be using one of these cloud based repositories, that&#39;s fine but if not you will have some work on your hands. &amp;nbsp;The way that I have seen this done is by using a locally hosted Git server, Apache Jenkins, and JFrog Artifactory. &amp;nbsp;Although not perfect, this combination of products can be used to create dynamically implemented build environments.&lt;/div&gt;
&lt;h3&gt;
Comparison to Cloud Foundry&lt;/h3&gt;
&lt;h4&gt;
Implementation Complexity&lt;/h4&gt;
&lt;div&gt;
Where Cloud Foundry has some very specific certified implementations you find that the Docker community has an infinite number of permutations of open source and proprietary products that are integrated with it. &amp;nbsp;The Cloud Foundry Foundation has reduced this complexity by providing a body by which something can be called &quot;Cloud Foundry.&quot; &amp;nbsp;This does not exist with Docker, although at it&#39;s core the Docker projects are extremely simple to implement and provide a simpler implementation &quot;substrate&quot; for most organizations that Cloud Foundry. &amp;nbsp;That said, there are many implementation decisions that have to made to implement Docker as a PAAS and most organizations will feel that this is a burden rather than an advantage.&lt;/div&gt;
&lt;h4&gt;
Ease to Deploy and use for Developers&amp;nbsp;&lt;/h4&gt;
&lt;div&gt;
This is definitely where Docker has an advantage. &amp;nbsp;Cloud Foundry out of the box has many complexities associated with it&#39;s main concepts from a development standpoint. &amp;nbsp;It is prescriptive and by doing this creates a situation where many legacy applications will just not run inside of Cloud Foundry. &amp;nbsp;In contrast, Docker has a simple model that allows for any application running on Linux (and Windows very soon) to be able to run without making a change. &amp;nbsp;There is always the danger that the developer may ignore the facts that drive space is typically ephemeral on Docker, but that is left to the software developer to figure out. &amp;nbsp;There are GUI tools for both Cloud Foundry and Docker.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
In both Cloud Foundry and Docker software developers can setup a &quot;host&quot; to run containerized applications locally. &amp;nbsp;The difference is that Docker can run on very small environments, even a Raspberry Pi.&lt;/div&gt;
&lt;h4&gt;
Ease to deploy for Operations on-premise&lt;/h4&gt;
&lt;div&gt;
Cloud Foundry would seem like it has an advantage, but not for long. &amp;nbsp;There are established procedures to getting a Cloud Foundry environment setup and there are vendors from the Cloud Foundry Foundation that will set it up in production. &amp;nbsp;They will certify the environment and train the operations teams. &amp;nbsp;There are established logging and monitoring tools available for Cloud Foundry. &amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The Docker ecosystem of open source projects provides many choices without one central winner. &amp;nbsp;Vendors are available to implement the Docker environment such as HashiSource but there is no central operations standard for logging and performance monitoring of Docker containers while having the level of security that most enterprises require.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The Docker approach requires a much more hands on &amp;nbsp;or &quot;active&quot; operations team to configure the exact base images, security, networking, and service registration necessary to build a functioning production system. &amp;nbsp;Cloud Foundry is much more prescriptive, and while that may make things difficult at first does incur quite a bit of benefits from an operations standpoint in that things are standardized therefore implementing a more &quot;passive&quot; approach.&lt;/div&gt;
&lt;h4&gt;
Usability in the Cloud&lt;/h4&gt;
&lt;div&gt;
Different vendors have implemented Docker in the cloud such as Amazon Web Services and Google. &amp;nbsp;These implementations are in Beta right now as of 7/31/2015. &amp;nbsp;Cloud Foundry is available through the same vendors as well as EMC, VMware, IBM, and Hewelett Packard. &amp;nbsp;&lt;/div&gt;
&lt;h4&gt;
Functionality&lt;/h4&gt;
&lt;div&gt;
From an overall functional standpoint for a PAAS Cloud Foundry provides in one package all that an organization would need. &amp;nbsp;The consequence of having all of the functionality is that it has a larger infrastructure footprint on install and has a higher barrier to entry technically for most organizations. &amp;nbsp;The Docker ecosystem on the cloud using Docker provides the same level of functionality. &amp;nbsp;Without Docker Hub, it does not provide the complete set of functionality, but with other open source projects it comes close. &amp;nbsp;The big difference from a functionality perspective comes down to the style of developer operations you are interested in (active vs. passive) and whether you want to roll your own PAAS that is customized for your organization. &amp;nbsp;Docker can be easily customized, Cloud Foundry can be customized but the tools and capabilities necessary to do so are quite high.&amp;nbsp;&lt;/div&gt;
&lt;h3&gt;
Summary&lt;/h3&gt;
&lt;div&gt;
Both options have some advantages, don&#39;t assume just because something is easy to download and use that it will be easy to implement in a production environment. &amp;nbsp;Docker and it&#39;s ecosystem is powerful and easy for developers to use. &amp;nbsp;Cloud Foundry is powerful as well, but maybe a little more difficult to use from a development perspective (almost on purpose). &amp;nbsp;Make sure that you have a plan to put both into production before you start using it in development, and perhaps consider a blended approach as well.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3&gt;
Resources/links&lt;/h3&gt;
&lt;div&gt;
&lt;a href=&quot;http://pivotal.io/platform-as-a-service/pivotal-cloud-foundry&quot; target=&quot;_blank&quot;&gt;Pivotal Cloud Foundry&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;https://www.cloudfoundry.org/&quot; target=&quot;_blank&quot;&gt;Cloud Foundry Foundation&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;https://www.docker.com/&quot; target=&quot;_blank&quot;&gt;Docker&lt;/a&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://javaarchramble.blogspot.com/feeds/9152985726701317499/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4179812064174942414/9152985726701317499' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/9152985726701317499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/9152985726701317499'/><link rel='alternate' type='text/html' href='http://javaarchramble.blogspot.com/2015/07/using-docker-as-paas-and-comparison-to.html' title='Using Docker as a PAAS and a comparison to Pivotal Cloud Foundry'/><author><name>Joshua Davis</name><uri>http://www.blogger.com/profile/10630084168049860089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyKSAAwDoasXgYegxE0iJSn-lY0wgimia82Zq3rLtAxh-BJ3nI4L8iDl0dcjlTazTrf2aFC0xLPHR4r6iEs6pQoSyoQcYS9zo58hPzruLEeHubkHC9nsMqwHZZLvMtxfg/s220/ProfilePhoto.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCv25-E8SJNuFk8cyLE0NP4_8WybjZsvQY-vchA4PfxdE0WGR_5UcrhMP3W9qY_SjarQuhLZLlNX2DfN6-WxuVF51LKJpiPWr3mEuVYpGXCQKnWPxQ-1BFZHSytYTWGFmCisdJrLyvGEs/s72-c/Platform+As+A+Service.001.jpg" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4179812064174942414.post-8593295856922803719</id><published>2015-03-09T14:41:00.001-04:00</published><updated>2015-03-09T14:41:49.437-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cloud Foundry"/><category scheme="http://www.blogger.com/atom/ns#" term="PAAS"/><category scheme="http://www.blogger.com/atom/ns#" term="Pivotal Cloud Foundry"/><category scheme="http://www.blogger.com/atom/ns#" term="Stackato"/><title type='text'>Stackato PAAS and contrasts to Pivotal Cloud Foundry</title><content type='html'>&lt;h2&gt;
Installing the Stackato Development Environment&lt;o:p&gt;&lt;/o:p&gt;&lt;/h2&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-size: 10.0pt;&quot;&gt;It is easy to install the Stackato
packaged virtual machine for development. &lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp;&lt;/span&gt;It loaded right into VMware Fusion.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;The resources that it needs are minimal which
is excellent for developers and for users trying out PAAS.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;There is no BOSH release to create and deploy
and initially getting it up and running is easy. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-size: 10.0pt;&quot;&gt;You have to add memory
resources to the Virtual Machine to enable applications to run, especially if
you are using VMware Fusion.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;An apparent
issue is that I experienced was a resource issue when deploying; I just did not
see the problem until the staging failed on an install of Jenkins. When an
application failed to stage because of memory or resource issues it does not
show the error (Pivotal Cloud Foundry has the same issue).&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;Normally, I would &lt;/span&gt;&lt;span style=&quot;font-family: Courier; font-size: 10.0pt;&quot;&gt;bosh ssh&lt;/span&gt;&lt;span style=&quot;font-size: 10.0pt;&quot;&gt; into the Bosh process.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;I don’t see a way of doing that with &lt;/span&gt;&lt;span style=&quot;font-family: Courier; font-size: 10.0pt;&quot;&gt;Kato&lt;/span&gt;&lt;span style=&quot;font-size: 10.0pt;&quot;&gt; although it may be possible using &lt;/span&gt;&lt;span style=&quot;font-family: Courier; font-size: 10.0pt;&quot;&gt;stackato ssh&lt;/span&gt;&lt;span style=&quot;font-size: 10.0pt;&quot;&gt; because
it’s using the same container for staging the application as it is for running
it.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h2&gt;
Deploying an Application to the Stackato PAAS&lt;o:p&gt;&lt;/o:p&gt;&lt;/h2&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-size: 10.0pt;&quot;&gt;Once the memory was increased
to 4 gigabytes of ram storage on the virtual machine I was able to deploy the
smallest application possible, a GO application. The experience is a different
from Pivotal Cloud Foundry (PCF) because PCF does not have an application
marketplace.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;PCF only has a services marketplace,
which I could not find on the Stackato GUI. You load the application from the
developer console via the Application Marketplace. That is interesting since in
PCF you can’t load an application in any way from the developer console. When started
the logs show Stackato uses the Docker container, which implies that Stackato
is in one way more advanced than “out of the box” PCF.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h2&gt;
Services&lt;o:p&gt;&lt;/o:p&gt;&lt;/h2&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-size: 10.0pt;&quot;&gt;Stackato hosted data services
are not cluster enabled.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;This is not an
issue because from a marketing perspective Stackato follows a very pragmatic
approach establishing that production data services will most likely be hosted
outside of the PAAS. Most customers have external services that they want to
use, but the advantage of having consistent deployment environments can’t be
undervalued.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;This is important for a good
continuous delivery process.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-size: 10.0pt;&quot;&gt;The Stackato documentation
encourages the use of Service Brokers to enable automated provisioning to the
external data services.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;This is an
excellent approach when working with customers who have legacy
applications.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;The potential issue is the
services are not managed directly by the Stackato health management and logging
services. From a service-offering standpoint, other than RabbitMQ, MySQL,
Redis, and others that are available as &lt;/span&gt;&lt;span style=&quot;font-family: Courier; font-size: 10.0pt;&quot;&gt;roles&lt;/span&gt;&lt;span style=&quot;font-size: 10.0pt;&quot;&gt;, the services are
minimal and not production ready out of the box when compared to PCF which is
described on the Stackato site.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h2&gt;
Management&lt;o:p&gt;&lt;/o:p&gt;&lt;/h2&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-size: 10.0pt;&quot;&gt;User and System Management
for Stackato is accomplished in one central website.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;At first glance it’s a very simple but well
designed site.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp;&lt;/span&gt;It is responsive and has the capability to be
customized to a customer’s needs, even re-branding.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;There are a few things that you can’t do on
the developer site that you can in the PCF Developer console.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;One is that you cannot scale, create, or bind
to a service directly from the application page.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;You either need to use the auto-scalar or do
the scaling from the command line. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h2&gt;
Where Stackato differs greatly from Pivotal Cloud Foundry &lt;o:p&gt;&lt;/o:p&gt;&lt;/h2&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-size: 10.0pt;&quot;&gt;Stackato &lt;/span&gt;&lt;span style=&quot;font-family: Courier; font-size: 10.0pt;&quot;&gt;roles&lt;/span&gt;&lt;span style=&quot;font-size: 10.0pt;&quot;&gt; seem to relate to a BOSH release but not exactly
because each VM can be assembled using &lt;/span&gt;&lt;span style=&quot;font-family: Courier; font-size: 10.0pt;&quot;&gt;kato node attach&lt;/span&gt;&lt;span style=&quot;font-size: 10.0pt;&quot;&gt;
which is similar to the concepts of BOSH.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp;
&lt;/span&gt;Kato seems to be an abstraction of BOSH.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp;
&lt;/span&gt;Roles are a different way of abstracting product installs into CF in
that they are a more concrete implementation. Also, In Pivotal Cloud Foundry
you can map ports, but the Harbor service in Stackato seems to imply that you
could possibly use it to enable RMI or any other binary protocol.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h2&gt;
Summary&lt;o:p&gt;&lt;/o:p&gt;&lt;/h2&gt;
&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;o:DocumentProperties&gt;
  &lt;o:Revision&gt;0&lt;/o:Revision&gt;
  &lt;o:TotalTime&gt;0&lt;/o:TotalTime&gt;
  &lt;o:Pages&gt;1&lt;/o:Pages&gt;
  &lt;o:Words&gt;681&lt;/o:Words&gt;
  &lt;o:Characters&gt;3886&lt;/o:Characters&gt;
  &lt;o:Company&gt;Pivotal&lt;/o:Company&gt;
  &lt;o:Lines&gt;32&lt;/o:Lines&gt;
  &lt;o:Paragraphs&gt;9&lt;/o:Paragraphs&gt;
  &lt;o:CharactersWithSpaces&gt;4558&lt;/o:CharactersWithSpaces&gt;
  &lt;o:Version&gt;14.0&lt;/o:Version&gt;
 &lt;/o:DocumentProperties&gt;
 &lt;o:OfficeDocumentSettings&gt;
  &lt;o:AllowPNG/&gt;
 &lt;/o:OfficeDocumentSettings&gt;
&lt;/xml&gt;&lt;![endif]--&gt;

&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:WordDocument&gt;
  &lt;w:View&gt;Normal&lt;/w:View&gt;
  &lt;w:Zoom&gt;0&lt;/w:Zoom&gt;
  &lt;w:TrackMoves/&gt;
  &lt;w:TrackFormatting/&gt;
  &lt;w:PunctuationKerning/&gt;
  &lt;w:ValidateAgainstSchemas/&gt;
  &lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;
  &lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;
  &lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;
  &lt;w:DoNotPromoteQF/&gt;
  &lt;w:LidThemeOther&gt;EN-US&lt;/w:LidThemeOther&gt;
  &lt;w:LidThemeAsian&gt;JA&lt;/w:LidThemeAsian&gt;
  &lt;w:LidThemeComplexScript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;
  &lt;w:Compatibility&gt;
   &lt;w:BreakWrappedTables/&gt;
   &lt;w:SnapToGridInCell/&gt;
   &lt;w:WrapTextWithPunct/&gt;
   &lt;w:UseAsianBreakRules/&gt;
   &lt;w:DontGrowAutofit/&gt;
   &lt;w:SplitPgBreakAndParaMark/&gt;
   &lt;w:EnableOpenTypeKerning/&gt;
   &lt;w:DontFlipMirrorIndents/&gt;
   &lt;w:OverrideTableStyleHps/&gt;
   &lt;w:UseFELayout/&gt;
  &lt;/w:Compatibility&gt;
  &lt;m:mathPr&gt;
   &lt;m:mathFont m:val=&quot;Cambria Math&quot;/&gt;
   &lt;m:brkBin m:val=&quot;before&quot;/&gt;
   &lt;m:brkBinSub m:val=&quot;&amp;#45;-&quot;/&gt;
   &lt;m:smallFrac m:val=&quot;off&quot;/&gt;
   &lt;m:dispDef/&gt;
   &lt;m:lMargin m:val=&quot;0&quot;/&gt;
   &lt;m:rMargin m:val=&quot;0&quot;/&gt;
   &lt;m:defJc m:val=&quot;centerGroup&quot;/&gt;
   &lt;m:wrapIndent m:val=&quot;1440&quot;/&gt;
   &lt;m:intLim m:val=&quot;subSup&quot;/&gt;
   &lt;m:naryLim m:val=&quot;undOvr&quot;/&gt;
  &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:LatentStyles DefLockedState=&quot;false&quot; DefUnhideWhenUsed=&quot;true&quot;
  DefSemiHidden=&quot;true&quot; DefQFormat=&quot;false&quot; DefPriority=&quot;99&quot;
  LatentStyleCount=&quot;276&quot;&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;0&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Normal&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;heading 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 7&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 8&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 9&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 7&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 8&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 9&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;35&quot; QFormat=&quot;true&quot; Name=&quot;caption&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;10&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Title&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;1&quot; Name=&quot;Default Paragraph Font&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;11&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Subtitle&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;22&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Strong&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;20&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Emphasis&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;59&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Table Grid&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Placeholder Text&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;1&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;No Spacing&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Shading&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful List&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Grid&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Revision&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;34&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;List Paragraph&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;29&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Quote&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;30&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Intense Quote&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Shading Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful List Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Grid Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Shading Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful List Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Grid Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Shading Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful List Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Grid Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Shading Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful List Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Grid Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Shading Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful List Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Grid Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Shading Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful List Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Grid Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;19&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Subtle Emphasis&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;21&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Intense Emphasis&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;31&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Subtle Reference&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;32&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Intense Reference&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;33&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Book Title&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;37&quot; Name=&quot;Bibliography&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; QFormat=&quot;true&quot; Name=&quot;TOC Heading&quot;/&gt;
 &lt;/w:LatentStyles&gt;
&lt;/xml&gt;&lt;![endif]--&gt;

&lt;!--[if gte mso 10]&gt;
&lt;style&gt;
 /* Style Definitions */
table.MsoNormalTable
 {mso-style-name:&quot;Table Normal&quot;;
 mso-tstyle-rowband-size:0;
 mso-tstyle-colband-size:0;
 mso-style-noshow:yes;
 mso-style-priority:99;
 mso-style-parent:&quot;&quot;;
 mso-padding-alt:0in 5.4pt 0in 5.4pt;
 mso-para-margin:0in;
 mso-para-margin-bottom:.0001pt;
 mso-pagination:widow-orphan;
 font-size:12.0pt;
 font-family:Cambria;
 mso-ascii-font-family:Cambria;
 mso-ascii-theme-font:minor-latin;
 mso-hansi-font-family:Cambria;
 mso-hansi-theme-font:minor-latin;}
&lt;/style&gt;
&lt;![endif]--&gt;



&lt;!--StartFragment--&gt;





























&lt;!--EndFragment--&gt;&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-size: 10.0pt;&quot;&gt;Stackato PAAS is an interesting
take on the Cloud Foundry Open Source Project.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp;
&lt;/span&gt;There are many differences between the commercial offerings including
the fact that Stackato has a smaller version for developers and PCF does
not.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;The fundamental difference between
the Stackato and PCF distributions is the way the virtual machines are
managed.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;One of the most difficult
things to explain about PCF is BOSH. It truly is a PAAS platform component that
has many generic management capabilities.&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp;
&lt;/span&gt;The Kato client and the concept of &lt;/span&gt;&lt;span style=&quot;font-family: Courier; font-size: 10.0pt;&quot;&gt;roles&lt;/span&gt;&lt;span style=&quot;font-size: 10.0pt;&quot;&gt; are simpler
and more manageable concepts to understand, and truly enable a lower point of
entry for most DevOps resources. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://javaarchramble.blogspot.com/feeds/8593295856922803719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4179812064174942414/8593295856922803719' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/8593295856922803719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/8593295856922803719'/><link rel='alternate' type='text/html' href='http://javaarchramble.blogspot.com/2015/03/stackato-paas-and-contrasts-to-pivotal.html' title='Stackato PAAS and contrasts to Pivotal Cloud Foundry'/><author><name>Joshua Davis</name><uri>http://www.blogger.com/profile/10630084168049860089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyKSAAwDoasXgYegxE0iJSn-lY0wgimia82Zq3rLtAxh-BJ3nI4L8iDl0dcjlTazTrf2aFC0xLPHR4r6iEs6pQoSyoQcYS9zo58hPzruLEeHubkHC9nsMqwHZZLvMtxfg/s220/ProfilePhoto.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4179812064174942414.post-5226094901974331375</id><published>2015-03-09T14:38:00.001-04:00</published><updated>2015-03-09T14:38:38.144-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="GemFire"/><category scheme="http://www.blogger.com/atom/ns#" term="JAVA"/><category scheme="http://www.blogger.com/atom/ns#" term="Performance"/><category scheme="http://www.blogger.com/atom/ns#" term="Web Applications"/><title type='text'>Solving the problem of poorly performing Web Applications</title><content type='html'>&lt;h1 dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;
&lt;span style=&quot;font-family: Arial; font-size: 23px; line-height: 1.38; white-space: pre-wrap;&quot;&gt;Introduction&lt;/span&gt;&lt;/h1&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 6pt; margin-top: 10pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;There have been many times since the “Web” era started that I have been asked to provide a solution for a non-performing website or web application. &amp;nbsp;The first thing that I create is a set of questions to understand the application or environment that is having problems. &amp;nbsp;There are some basic questions that I would ask, especially if I was coming into the situation fresh without any background or context.&lt;/span&gt;&lt;/div&gt;
&lt;h3 dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: #666666; font-family: &#39;Trebuchet MS&#39;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Sample Use Case:&lt;/span&gt;&lt;/h3&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Calibri; font-size: 15px; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;A customer was having trouble accessing their authorization policies in a timely manner from a custom built authorization system that they had created. &amp;nbsp;It used a complex policy RDBMS that could return the data under normal load. &amp;nbsp;When faced with load that was higher than normal it did not handle the number of queries and changes to the policies that had to happen at the same time.&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Calibri; font-size: 15px; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;GemFire was used (embedded) to create a local application NoSQL layer on top of the main relational database. &amp;nbsp;The performance increased 200% or more based upon the complexity of the policy. &amp;nbsp;The embedded mode for GemFire was used to enable the data to be as close as possible to the application. &amp;nbsp;It also enabled a NoSQL layer that backed a set of REST services for managing policies that were much more responsive than hitting the RDBMS directly.&lt;/span&gt;&lt;/div&gt;
&lt;h3 dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 6pt; margin-top: 8pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: #666666; font-family: &#39;Trebuchet MS&#39;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Questions that should be asked&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; margin-left: -48px; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Is the problem a user’s perception of the performance of the website not being responsive?&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: #1155cc; font-family: Arial; font-size: 15px; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Perception of a website’s performance can be affected by many factors including network, server performance, and choice of front end tool (JavaScript vs. others). &amp;nbsp;Most of these issues can be overcome with good application architecture focused on a responsive web experience that has an asynchronous backend. &amp;nbsp;Typically, I have found that this question can uncover many of the typical user experience issues that are incorrectly implemented by the application. &amp;nbsp;One example would be a shopping cart that saves in a synchronous manner to a back-end database at the conclusion of each step.&lt;/span&gt;&lt;/div&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; margin-left: -48px; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Does the performance problem center around search or retrieval of data from the back-end of the website?&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: #1155cc; font-family: Arial; font-size: 15px; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;It has been proven in many surveys over the years that most problems with application performance can be driven down to the queries that are run in the database. &amp;nbsp;Usually, there are two sources of data retrieval that cause problems. &amp;nbsp;The first is a heavily indexed relational database that is used by every application and reporting environment in the organization. &amp;nbsp;The second is the retrieval of data through REST or SOAP messages across many different sources. &amp;nbsp;Either of these or both can cause issues with performance in the long-term and constitute a form of technical debt.&lt;/span&gt;&lt;/div&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; margin-left: -48px; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &#39;Times New Roman&#39;; font-size: 9px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Is the performance issue only when saving in-process data in a long running business transaction?&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: #1155cc; font-family: Arial; font-size: 15px; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Many websites and web based applications in general have issues holding and preserving in-process state. &amp;nbsp;This data is the voluminous information that is garnered by the application before an actual physical transaction is recorded. &amp;nbsp;In many applications this data is either saved directly to the back end database, or held in the session state of the web application. &amp;nbsp;Either one of these solutions is likely to create problems when the application needs to scale and deal with failover.&lt;/span&gt;&lt;/div&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; margin-left: -48px; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Does the back-end database have issues when there is a peak usage of the database?&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: #1155cc; font-family: Arial; font-size: 15px; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Most databases are not used just for the web application(s) that create the transactions. &amp;nbsp;They have other responsibilities such as reporting and batch processing. &amp;nbsp;Peak usage of this kind of database come at unusual times and creates a poor user experience.&lt;/span&gt;&lt;/div&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; margin-left: -48px; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Does your application have “pausing” issues waiting for the data sources to be available?&lt;/span&gt;&lt;/h2&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: #1155cc; font-family: Arial; font-size: 15px; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;In certain cases if the application relies on databases, application services or an Enterprise Service Bus that is externally hosted network reliability can be an issue that affects application performance. &amp;nbsp;Having the data contained within the application can create a serious performance improvement as well as improving reliability. &amp;nbsp;Since the data is published to the backend asynchronously the data can be queued and wait for network connectivity to “reappear.”&lt;/span&gt;&lt;/div&gt;
&lt;h2 dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 17px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Solution Architecture&lt;/span&gt;&lt;/h2&gt;
&lt;h3 dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 8pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: #666666; font-family: &#39;Trebuchet MS&#39;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Why use the GemFire Embedded Topology as the in-memory NoSQL database for your application?&lt;/span&gt;&lt;img alt=&quot;GemFire Embedded.png&quot; height=&quot;265px;&quot; src=&quot;https://lh4.googleusercontent.com/XMxgwlxe42m1YWg55NYH2mkDQqWto-3wmvepguvy7AaG_iDQ--xrPS4IHOuihkrDGDYtHY3giII1ddYo0fhagBxidY2nNHfXXuU_OA__2AXtV9kz_-PChIcpPRT1LDHfmoxP4ro&quot; style=&quot;-webkit-transform: rotate(0.00rad); border: none; transform: rotate(0.00rad);&quot; width=&quot;356px;&quot; /&gt;&lt;/h3&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 10pt; margin-top: 10pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Using an embedded in-memory database such as GemFire is a great way of mitigating issues around Application performance.&lt;/span&gt;&lt;/div&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; margin-left: -48px; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;It is a simple solution that can be placed into your application “in-between” your existing front end user interface and your back end database.&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; margin-left: -48px; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;It is a NoSQL solution that can represent the domain of the web-site instead of forcing your web application to have the same domain model as your back end database.&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; margin-left: -48px; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Creates a high performance layer that can be asynchronously synchronized with your back end database.&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; margin-left: -48px; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Introduces transactional layer that will only communicate with your database when a transaction needs to placed into the back end database as the source of record.&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; margin-left: -48px; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Enables the future use of a distributed data cache when you need it instead of dealing with the up-front costs of implementation.&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 8pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: #666666; font-family: &#39;Trebuchet MS&#39;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Why use the embedded GemFire Topology over the Client/Server Topology?&lt;/span&gt;&lt;/h3&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;GemFire is a product that contains many options for deployment, only one of them is embedding the server within your application. &amp;nbsp;The Client/Server approach is an In Memory Data Grid (IMDG) that employs a horizontal scaling and failover approach. The additional GemFire component when compared to the embedded topology is the GemFire Locator. &amp;nbsp;Locators keep track of the nodes within the IMDG and coordinate queries. &amp;nbsp;This enables GemFire clients in applications to access an abstraction for the “location” of where the GemFire nodes are on the network and their exact topology implementation.&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;In the embedded mode you have the ability to share and exchange data between the nodes of embedded GemFire, but you must either know of the other nodes, or use the Multicast protocol to discover the other embedded nodes. &amp;nbsp;There are other differences when it comes to security options, WAN replication, load balancing and complexity that should be considered when choosing a topology. &amp;nbsp;&lt;/span&gt;&lt;img alt=&quot;p2p_topology.png&quot; height=&quot;66px;&quot; src=&quot;https://lh3.googleusercontent.com/2_WHIJ6swOSTI98np3TFKqy3QzNX-Ys_JdGc-cDXEXIPRLG2mkBVzUo-cmSfTOgCrfbfXsqz8um0Ju4AK5Y2akioOKX4PZPlvwIKJX-Y4kCQiiT4CTvuspASwgWy1ak4FWClfzw&quot; style=&quot;-webkit-transform: rotate(0.00rad); border: none; transform: rotate(0.00rad);&quot; width=&quot;334px;&quot; /&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;The basic rules of thumb for using the GemFire embedded topology are:&lt;/span&gt;&lt;/div&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 10pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Is the GemFire database used to support specific application(s) and the data &amp;nbsp;would not need to be shared with applications that do not have a GemFire embedded database?&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Since this topology does not support replication of data across a WAN (Wan replication) is their some other type of replication implemented in the application stack or is it not needed?&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Is a simple solution needed for degrading application performance?&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 8pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: #666666; font-family: &#39;Trebuchet MS&#39;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;How to use GemFire in your application&lt;/span&gt;&lt;/h3&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;There are a few resources where there are some great examples of using GemFire within your Java application. &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;a href=&quot;https://spring.io/guides/gs/accessing-data-gemfire/&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #1155cc; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Accessing Data in GemFire Guides&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;a href=&quot;https://github.com/spring-projects/spring-gemfire-examples&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #1155cc; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Spring GemFire Examples&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;span id=&quot;docs-internal-guid-db5e71d0-ffd3-c8e9-0645-86381bfdc982&quot;&gt;&lt;span style=&quot;font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Specifically, I recommend the use of the &lt;/span&gt;&lt;a href=&quot;https://github.com/spring-projects/spring-gemfire-examples/tree/master/basic/write-through&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;color: #1155cc; font-family: Arial; font-size: 15px; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;writethrough example&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; which provides a template for enabling back-end database synchronous and asynchronous replication from the front-end GemFire cache. &amp;nbsp;Another recommended example that provides an end-to-end example for a real world application is a version of the &lt;/span&gt;&lt;a href=&quot;https://github.com/bijoych/spring-petclinic-gemfire&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;color: #1155cc; font-family: Arial; font-size: 15px; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Spring Pet Clinic&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; application adapted for GemFire. &amp;nbsp;&lt;/span&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://javaarchramble.blogspot.com/feeds/5226094901974331375/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4179812064174942414/5226094901974331375' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/5226094901974331375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/5226094901974331375'/><link rel='alternate' type='text/html' href='http://javaarchramble.blogspot.com/2015/03/solving-problem-of-poorly-performing.html' title='Solving the problem of poorly performing Web Applications'/><author><name>Joshua Davis</name><uri>http://www.blogger.com/profile/10630084168049860089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyKSAAwDoasXgYegxE0iJSn-lY0wgimia82Zq3rLtAxh-BJ3nI4L8iDl0dcjlTazTrf2aFC0xLPHR4r6iEs6pQoSyoQcYS9zo58hPzruLEeHubkHC9nsMqwHZZLvMtxfg/s220/ProfilePhoto.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh4.googleusercontent.com/XMxgwlxe42m1YWg55NYH2mkDQqWto-3wmvepguvy7AaG_iDQ--xrPS4IHOuihkrDGDYtHY3giII1ddYo0fhagBxidY2nNHfXXuU_OA__2AXtV9kz_-PChIcpPRT1LDHfmoxP4ro=s72-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4179812064174942414.post-4535811747104023059</id><published>2015-03-03T07:37:00.000-05:00</published><updated>2015-03-03T07:37:11.015-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cloud Foundry"/><category scheme="http://www.blogger.com/atom/ns#" term="Pivotal Cloud Foundry"/><category scheme="http://www.blogger.com/atom/ns#" term="RabbitMQ"/><category scheme="http://www.blogger.com/atom/ns#" term="Sizing"/><title type='text'>How to Estimate RabbitMQ part 1</title><content type='html'>&lt;h2&gt;
How do you estimate the infrastructure needed for a RabbitMQ installation?&lt;/h2&gt;
It&#39;s a serious problem, you want to use or are already using RabbitMQ but you have no idea what the infrastructure should be for each node, and the cluster as a whole. &amp;nbsp;Over the past 3 years I have been building a method for answering these questions for RabbitMQ, but it could be useful for any distributed cluster product. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;table border=&quot;1&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse: collapse; width: 659px;&quot;&gt;
&lt;!--StartFragment--&gt;
 &lt;colgroup&gt;&lt;col style=&quot;mso-width-alt: 28117; mso-width-source: userset; width: 659pt;&quot; width=&quot;659&quot;&gt;&lt;/col&gt;
 &lt;/colgroup&gt;&lt;tbody&gt;
&lt;tr height=&quot;15&quot; style=&quot;height: 15.75pt; mso-height-source: userset;&quot;&gt;
  &lt;td class=&quot;xl63&quot; height=&quot;15&quot; style=&quot;height: 15.75pt; width: 659pt;&quot; width=&quot;659&quot;&gt;How
  many messages per day do you have going through your current system?&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;15&quot; style=&quot;height: 15.75pt; mso-height-source: userset;&quot;&gt;
  &lt;td class=&quot;xl63&quot; height=&quot;15&quot; style=&quot;height: 15.75pt; width: 659pt;&quot; width=&quot;659&quot;&gt;How
  much message growth in % are you expecting year over year?&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;31&quot; style=&quot;height: 31.5pt; mso-height-source: userset;&quot;&gt;
  &lt;td class=&quot;xl63&quot; height=&quot;31&quot; style=&quot;height: 31.5pt; width: 659pt;&quot; width=&quot;659&quot;&gt;Do you
  have peak hours where messaging is on the average sustainted higher than
  normal (peak hours)?&amp;nbsp; If so what are
  the hours?&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;15&quot; style=&quot;height: 15.75pt; mso-height-source: userset;&quot;&gt;
  &lt;td class=&quot;xl63&quot; height=&quot;15&quot; style=&quot;height: 15.75pt; width: 659pt;&quot; width=&quot;659&quot;&gt;What
  are the non-peak hours where there a fewer messages on average?&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;15&quot; style=&quot;height: 15.75pt; mso-height-source: userset;&quot;&gt;
  &lt;td class=&quot;xl63&quot; height=&quot;15&quot; style=&quot;height: 15.75pt; width: 659pt;&quot; width=&quot;659&quot;&gt;How
  many messages/second do you have/plan on having for peak and non-peak?&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;31&quot; style=&quot;height: 31.5pt; mso-height-source: userset;&quot;&gt;
  &lt;td class=&quot;xl63&quot; height=&quot;31&quot; style=&quot;height: 31.5pt; width: 659pt;&quot; width=&quot;659&quot;&gt;What is
  the planned life-span of a message (on average, or give detailed percentages)
  if it is not ingested by a consumer?&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;31&quot; style=&quot;height: 31.5pt; mso-height-source: userset;&quot;&gt;
  &lt;td class=&quot;xl63&quot; height=&quot;31&quot; style=&quot;height: 15.75pt; width: 659pt;&quot; width=&quot;659&quot;&gt;What is
  the size of your messages?&amp;nbsp; Can you
  break down into small/medium/large and give percentages?&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;15&quot; style=&quot;height: 15.75pt; mso-height-source: userset;&quot;&gt;
  &lt;td class=&quot;xl63&quot; height=&quot;15&quot; style=&quot;height: 15.75pt; width: 659pt;&quot; width=&quot;659&quot;&gt;What
  percentage of your messages need to be recoverable if the broker fails?&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;15&quot; style=&quot;height: 15.75pt; mso-height-source: userset;&quot;&gt;
  &lt;td class=&quot;xl63&quot; height=&quot;15&quot; style=&quot;height: 15.75pt; width: 659pt;&quot; width=&quot;659&quot;&gt;What
  percentage of your messages and queues need to be available in real-time if a
  broker fails?&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;94&quot; style=&quot;height: 94.5pt; mso-height-source: userset;&quot;&gt;
  &lt;td class=&quot;xl63&quot; height=&quot;94&quot; style=&quot;height: 15.75pt; width: 659pt;&quot; width=&quot;659&quot;&gt;Are you
  planning on sharing data across two data Centers separated by a WAN?&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;15&quot; style=&quot;height: 15.75pt; mso-height-source: userset;&quot;&gt;
  &lt;td class=&quot;xl63&quot; height=&quot;15&quot; style=&quot;height: 15.75pt; width: 659pt;&quot; width=&quot;659&quot;&gt;Are you
  planning on having an active-active configration for Disaster Recovery?&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;31&quot; style=&quot;height: 31.5pt; mso-height-source: userset;&quot;&gt;
  &lt;td class=&quot;xl63&quot; height=&quot;31&quot; style=&quot;height: 31.5pt; width: 659pt;&quot; width=&quot;659&quot;&gt;If you
  are planning on using RabbitMQ in multiple Data Centers, what percentage of
  the messages do you estimate will be shared?&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;31&quot; style=&quot;height: 31.5pt; mso-height-source: userset;&quot;&gt;
  &lt;td class=&quot;xl63&quot; height=&quot;31&quot; style=&quot;height: 31.5pt; width: 659pt;&quot; width=&quot;659&quot;&gt;What is
  the expected amount of time (in seconds) that you need to have messages saved
  in the queues for the worst case scenario?&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;15&quot; style=&quot;height: 15.75pt; mso-height-source: userset;&quot;&gt;
  &lt;td class=&quot;xl63&quot; height=&quot;15&quot; style=&quot;height: 15.75pt; width: 659pt;&quot; width=&quot;659&quot;&gt;How
  many messages are transformed by some intermediate system?&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;15&quot; style=&quot;height: 15.75pt; mso-height-source: userset;&quot;&gt;
  &lt;td class=&quot;xl63&quot; height=&quot;15&quot; style=&quot;height: 15.75pt; width: 659pt;&quot; width=&quot;659&quot;&gt;Do you
  need to have confirmation that a message has been placed onto a queue?&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;15&quot; style=&quot;height: 15.75pt; mso-height-source: userset;&quot;&gt;
  &lt;td class=&quot;xl63&quot; height=&quot;15&quot; style=&quot;height: 15.75pt; width: 659pt;&quot; width=&quot;659&quot;&gt;Do you
  need confirmation that the message has been processed by a consumer?&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;15&quot; style=&quot;height: 15.75pt; mso-height-source: userset;&quot;&gt;
  &lt;td class=&quot;xl63&quot; height=&quot;15&quot; style=&quot;height: 15.75pt; width: 659pt;&quot; width=&quot;659&quot;&gt;Do you
  have any clients that are expecting JTA transactions?&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;15&quot; style=&quot;height: 15.75pt; mso-height-source: userset;&quot;&gt;
  &lt;td class=&quot;xl63&quot; height=&quot;15&quot; style=&quot;height: 15.75pt; width: 659pt;&quot; width=&quot;659&quot;&gt;Do you
  have any clients that are expecting XA transactions?&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;15&quot; style=&quot;height: 15.75pt; mso-height-source: userset;&quot;&gt;
  &lt;td class=&quot;xl63&quot; height=&quot;15&quot; style=&quot;height: 15.75pt; width: 659pt;&quot; width=&quot;659&quot;&gt;What is
  your existing infrastructure plan?&amp;nbsp; How
  did you reach this plan?&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;15&quot; style=&quot;height: 15.75pt; mso-height-source: userset;&quot;&gt;
  &lt;td class=&quot;xl63&quot; height=&quot;15&quot; style=&quot;height: 15.75pt; width: 659pt;&quot; width=&quot;659&quot;&gt;What is
  the expected uptime of the hardware infrastructure? i.e. 99.9% or 99.99%&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;15&quot; style=&quot;height: 15.75pt; mso-height-source: userset;&quot;&gt;
  &lt;td class=&quot;xl63&quot; height=&quot;15&quot; style=&quot;height: 15.75pt; width: 659pt;&quot; width=&quot;659&quot;&gt;What is
  the expected RabbitMQ server uptime? i.e. 99.9% or 99.99%&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;15&quot; style=&quot;height: 15.75pt; mso-height-source: userset;&quot;&gt;
  &lt;td class=&quot;xl63&quot; height=&quot;15&quot; style=&quot;height: 15.75pt; width: 659pt;&quot; width=&quot;659&quot;&gt;Is
  there a hardware load balancer?&amp;nbsp; If
  not, are you using a software load balancer?&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;31&quot; style=&quot;height: 31.5pt; mso-height-source: userset;&quot;&gt;
  &lt;td class=&quot;xl63&quot; height=&quot;31&quot; style=&quot;height: 31.5pt; width: 659pt;&quot; width=&quot;659&quot;&gt;What is
  the monitoring plan, if any for RabbitMQ?&amp;nbsp;
  If there is none, what is the preferred tool in the organization?&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;31&quot; style=&quot;height: 31.5pt; mso-height-source: userset;&quot;&gt;
  &lt;td class=&quot;xl63&quot; height=&quot;31&quot; style=&quot;height: 31.5pt; width: 659pt;&quot; width=&quot;659&quot;&gt;Explain
  the scenario of working with RabbitMQ outages, is it a shared services team
  or a dedicated team?&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;31&quot; style=&quot;height: 31.5pt; mso-height-source: userset;&quot;&gt;
  &lt;td class=&quot;xl63&quot; height=&quot;31&quot; style=&quot;height: 31.5pt; width: 659pt;&quot; width=&quot;659&quot;&gt;Are the
  machines that RabbitMQ deployed on VM&#39;s or physical hardware?&amp;nbsp; If VM, are you using SAN for disk?&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;31&quot; style=&quot;height: 31.5pt; mso-height-source: userset;&quot;&gt;
  &lt;td class=&quot;xl63&quot; height=&quot;31&quot; style=&quot;height: 31.5pt; width: 659pt;&quot; width=&quot;659&quot;&gt;Is the
  link between the two WAN&#39;s encrypted or does RabbitMQ need to encrypt traffic
  between the nodes?&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;31&quot; style=&quot;height: 31.5pt; mso-height-source: userset;&quot;&gt;
  &lt;td class=&quot;xl63&quot; height=&quot;31&quot; style=&quot;height: 31.5pt; width: 659pt;&quot; width=&quot;659&quot;&gt;What is
  the corporate standard for authentication of applications access to resources
  such as a Messaging system?&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;15&quot; style=&quot;height: 15.75pt; mso-height-source: userset;&quot;&gt;
  &lt;td class=&quot;xl63&quot; height=&quot;15&quot; style=&quot;height: 15.75pt; width: 659pt;&quot; width=&quot;659&quot;&gt;Is LDAP
  authentication required?&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;15&quot; style=&quot;height: 15.75pt; mso-height-source: userset;&quot;&gt;
  &lt;td class=&quot;xl63&quot; height=&quot;15&quot; style=&quot;height: 15.75pt; width: 659pt;&quot; width=&quot;659&quot;&gt;Is LDAP
  authorization required?&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;31&quot; style=&quot;height: 31.5pt; mso-height-source: userset;&quot;&gt;
  &lt;td class=&quot;xl63&quot; height=&quot;31&quot; style=&quot;height: 31.5pt; width: 659pt;&quot; width=&quot;659&quot;&gt;If LDAP
  is not required: Do you plan on having users have only the ability to access
  their own queues/exchanges?&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr height=&quot;31&quot; style=&quot;height: 31.5pt; mso-height-source: userset;&quot;&gt;
  &lt;td class=&quot;xl63&quot; height=&quot;31&quot; style=&quot;height: 31.5pt; width: 659pt;&quot; width=&quot;659&quot;&gt;If LDAP
  is not requireed: Does each application accessing RabbitMQ need a
  username/password, is does every User who uses the application need a
  username/password?&lt;/td&gt;
 &lt;/tr&gt;
&lt;!--EndFragment--&gt;
&lt;/tbody&gt;&lt;/table&gt;
</content><link rel='replies' type='application/atom+xml' href='http://javaarchramble.blogspot.com/feeds/4535811747104023059/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4179812064174942414/4535811747104023059' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/4535811747104023059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/4535811747104023059'/><link rel='alternate' type='text/html' href='http://javaarchramble.blogspot.com/2015/03/how-to-estimate-rabbitmq-part-1.html' title='How to Estimate RabbitMQ part 1'/><author><name>Joshua Davis</name><uri>http://www.blogger.com/profile/10630084168049860089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyKSAAwDoasXgYegxE0iJSn-lY0wgimia82Zq3rLtAxh-BJ3nI4L8iDl0dcjlTazTrf2aFC0xLPHR4r6iEs6pQoSyoQcYS9zo58hPzruLEeHubkHC9nsMqwHZZLvMtxfg/s220/ProfilePhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4179812064174942414.post-4598928223081930705</id><published>2015-03-02T13:44:00.000-05:00</published><updated>2015-03-02T13:47:52.159-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Pivotal Cloud Foundry"/><title type='text'>What does the wildcard DNS requirement in Pivotal Cloud Foundry give you?</title><content type='html'>&lt;span style=&quot;background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.8000001907349px;&quot;&gt;What wildcard DNS enables in Pivotal Cloud Foundry is the ability to deploy apps and create the route for the app on-demand.&amp;nbsp; If we didn&#39;t have a wildcard DNS entry you could deploy an app but it would not be accessible until that route was added via the operations or networking team to the organization&#39;s DNS server.&amp;nbsp; So you&#39;d completely lose some of the great things like zero-downtime deploys, blue/green testing, or A/B testing.&amp;nbsp; At the minimum you&#39;d lose the ability to do those things easily without having to file a ticket with operations for each incident. &amp;nbsp;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://javaarchramble.blogspot.com/feeds/4598928223081930705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4179812064174942414/4598928223081930705' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/4598928223081930705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/4598928223081930705'/><link rel='alternate' type='text/html' href='http://javaarchramble.blogspot.com/2015/03/what-does-wildcard-dns-requirement-in.html' title='What does the wildcard DNS requirement in Pivotal Cloud Foundry give you?'/><author><name>Joshua Davis</name><uri>http://www.blogger.com/profile/10630084168049860089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyKSAAwDoasXgYegxE0iJSn-lY0wgimia82Zq3rLtAxh-BJ3nI4L8iDl0dcjlTazTrf2aFC0xLPHR4r6iEs6pQoSyoQcYS9zo58hPzruLEeHubkHC9nsMqwHZZLvMtxfg/s220/ProfilePhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4179812064174942414.post-140772619456960324</id><published>2015-03-02T12:55:00.000-05:00</published><updated>2015-04-01T10:01:25.065-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cloud Foundry"/><category scheme="http://www.blogger.com/atom/ns#" term="Docker"/><category scheme="http://www.blogger.com/atom/ns#" term="Pivotal Cloud Foundry"/><category scheme="http://www.blogger.com/atom/ns#" term="RabbitMQ"/><category scheme="http://www.blogger.com/atom/ns#" term="REST"/><title type='text'>Introducing RabbitMQEstimator</title><content type='html'>RabbitMQEstimator - RabbitMQ configuration management database, provisioner, and heuristic analysis of traffic.&lt;br /&gt;
&lt;br /&gt;
It is &lt;a href=&quot;https://github.com/joshuad2/RabbitMQClusterMgr&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt; on Github. (updated 4/1/2015 after leaving Pivotal)&lt;br /&gt;
&lt;br /&gt;
This project is a result of many discussions around the use and provisioning of RabbitMQ which has become pervasive in the past year. &amp;nbsp;The issue is that when you initially setup RabbitMQ and expose it to the different needs of the business it typically will fail. &amp;nbsp;As the use increases, the setup out of the box does not suffice. &amp;nbsp;This is where the RabbitMQEstimator comes into play. &amp;nbsp;The plan is for it to be a small clustered application that will work in a Pivotal Cloud Foundry, Docker compose or bare metal environment. &amp;nbsp;Eventually the work can be done to enable Puppet, Chef, and Ansible.&lt;br /&gt;
&lt;br /&gt;
Note that this code base uses ideas and code snippets from the RabbidManagement project&amp;nbsp;&lt;a href=&quot;https://www.blogger.com/null&quot;&gt;https://github.com/Berico-Technologies/RabbidManagement&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
This project is a REST service that provides a set of RESTful endpoints protected by OAuth 2. The REST service is based on the&amp;nbsp;&lt;a href=&quot;https://spring.io/guides/gs/rest-service/&quot;&gt;Building a RESTful Web Service&lt;/a&gt;&amp;nbsp;getting started guide. This project incorporates the new Java-based configuration support, now available in Spring Security OAuth 2.0.&lt;br /&gt;
&lt;br /&gt;
This project builds multiple virtual RabbitMQ clusters in an internal database through a provided resource based REST interface. This set of clusters is a &quot;Project&quot; which has clusters and then nodes.  The purpose of this is to have one place where a RabbitMQ Federation or just one RabbitMQ cluster can be stored either through provisioning the changes to the RabbitMQ cluster or provisioning the cluster through:
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;BOSH release&lt;/li&gt;
&lt;li&gt;Docker Compose&lt;/li&gt;
&lt;li&gt;Bare Metal (create the RabbitMQ config files)&lt;/li&gt;
&lt;li&gt;Puppet (later)&lt;/li&gt;
&lt;li&gt;Chef (later)&lt;/li&gt;
&lt;li&gt;Ansible (later)&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
The purpose of the RabbitMQEstimator service is that once the project is provisioned, it will continually collect heuristic information about the cluster. &amp;nbsp;This would be things like&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Drive space and memory used by queues&lt;/li&gt;
&lt;li&gt;Memory used by the system overall&lt;/li&gt;
&lt;li&gt;Number of Exchanges created&lt;/li&gt;
&lt;li&gt;Use of Federation&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Using the original template by which the project (and it&#39;s clusters) are created the RabbitMQEstimator will have the capability to automatically create the new cluster in the environments and then transition the load to the new cluster(s). &amp;nbsp;An HAProxy instance will be used to to create the no-downtime upgrade/deployment. &amp;nbsp;In the future it should support hardware based load balancers.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://javaarchramble.blogspot.com/feeds/140772619456960324/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4179812064174942414/140772619456960324' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/140772619456960324'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/140772619456960324'/><link rel='alternate' type='text/html' href='http://javaarchramble.blogspot.com/2015/03/introducing-rabbitmqestimator.html' title='Introducing RabbitMQEstimator'/><author><name>Joshua Davis</name><uri>http://www.blogger.com/profile/10630084168049860089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyKSAAwDoasXgYegxE0iJSn-lY0wgimia82Zq3rLtAxh-BJ3nI4L8iDl0dcjlTazTrf2aFC0xLPHR4r6iEs6pQoSyoQcYS9zo58hPzruLEeHubkHC9nsMqwHZZLvMtxfg/s220/ProfilePhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4179812064174942414.post-503594830814900229</id><published>2015-02-02T20:22:00.001-05:00</published><updated>2015-02-02T20:22:13.209-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Best Practices"/><category scheme="http://www.blogger.com/atom/ns#" term="OpenStack"/><category scheme="http://www.blogger.com/atom/ns#" term="Pivotal Cloud Foundry"/><category scheme="http://www.blogger.com/atom/ns#" term="RabbitMQ"/><title type='text'>RabbitMQ and OpenStack </title><content type='html'>&lt;h2&gt;
Introduction&lt;/h2&gt;
&lt;div&gt;
After spending time at a few customers that are using OpenStack with RabbitMQ it is very apparent that the documentation that is available on the OpenStack website is not enough to provide implementors with the basic understanding of how to really implement and administer RabbitMQ. &amp;nbsp;This blog posting will bring some best practices that already exist on the &lt;a href=&quot;http://www.rabbitmq.com/&quot; target=&quot;_blank&quot;&gt;RabbitMQ website&lt;/a&gt;&amp;nbsp;. &amp;nbsp;I would always say that everything that I talk about originates from within those pages.&lt;/div&gt;
&lt;h2&gt;
Implementing OpenStack with RabbitMQ&lt;/h2&gt;
&lt;div&gt;
The option to implement OpenStack with RabbitMQ is a good one! &amp;nbsp;RabbitMQ is extremely dependable, fast, and can be very easy to use. &amp;nbsp;&lt;/div&gt;
&lt;h3&gt;
Default OpenStack implementation&lt;/h3&gt;
&lt;div&gt;
This implementation has one RabbitMQ server on the Control Node, which is the simplest but most risky setup. &amp;nbsp;It is risky because if this server goes down your OpenStack installation will completely stop working.&lt;/div&gt;
&lt;h2&gt;
Notes&lt;/h2&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;One Server does not make a cluster&lt;/li&gt;
&lt;li&gt;OpenStack uses RPC so you need to understand how RPC works&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
RabbitMQ clustering basics implies that you need:&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
1. A low prime number of servers&lt;/div&gt;
&lt;div&gt;
2. A load balancer, either software or hardware&lt;/div&gt;
&lt;div&gt;
3. Keep everything in memory as much as possible&lt;/div&gt;
&lt;div&gt;
4. A procedure to bring down RabbitMQ and one to bring it back up.&lt;/div&gt;
&lt;div&gt;
5. Monitoring of the server for unsynchronized queues&lt;/div&gt;
&lt;div&gt;
6. A TTL on some queues that could hold data long term but should not&lt;/div&gt;
&lt;div&gt;
7. A DLQ that can hold messages that are not picked up&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
Persistence and Mirroring involves:&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
1. Understanding that you could lose messages under specific circumstances&lt;/div&gt;
&lt;div&gt;
2. Auto synchronization of queues&lt;/div&gt;
&lt;div&gt;
3. All will halt if one halts.&lt;/div&gt;
&lt;div&gt;
4. The concept of a &quot;master node for the queue.&quot;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
RabbitMQ Policies:&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
1. The default OpenStack RabbitMQ policy, why and how does it work?&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;h3&gt;
Frequently asked questions:&lt;/h3&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
1. What is the difference between Durability and Persistence?&lt;/div&gt;
&lt;div&gt;
2. Why do I have a bunch of queues that are Auto Delete but are not removed from the Broker.&lt;/div&gt;
&lt;div&gt;
3. Why can&#39;t I just re-boot the server that RabbitMQ is on without having problems?&lt;/div&gt;
&lt;div&gt;
4. Why does it always work with just one RabbiMQ Server?&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://javaarchramble.blogspot.com/feeds/503594830814900229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4179812064174942414/503594830814900229' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/503594830814900229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/503594830814900229'/><link rel='alternate' type='text/html' href='http://javaarchramble.blogspot.com/2015/02/rabbitmq-and-openstack.html' title='RabbitMQ and OpenStack '/><author><name>Joshua Davis</name><uri>http://www.blogger.com/profile/10630084168049860089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyKSAAwDoasXgYegxE0iJSn-lY0wgimia82Zq3rLtAxh-BJ3nI4L8iDl0dcjlTazTrf2aFC0xLPHR4r6iEs6pQoSyoQcYS9zo58hPzruLEeHubkHC9nsMqwHZZLvMtxfg/s220/ProfilePhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4179812064174942414.post-7673727208985675895</id><published>2015-02-02T20:19:00.000-05:00</published><updated>2015-02-02T20:19:37.067-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cloud Foundry"/><category scheme="http://www.blogger.com/atom/ns#" term="configuration"/><category scheme="http://www.blogger.com/atom/ns#" term="Pivotal"/><title type='text'>Open Source Cloud Foundry on Bosh-Lite Installation Notes</title><content type='html'>Important undocumented items:&lt;br /&gt;
&lt;br /&gt;
If you run the automated install, you can re-run the yml consolidation manually it will work.&lt;br /&gt;
&lt;br /&gt;
If for some reason the Bosh does not startup well, use bosh cck.&lt;br /&gt;
&lt;br /&gt;
If you get 500 error when logging in:&lt;br /&gt;
&lt;br /&gt;
add this to your cf-manifest.yml&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;background-color: white; border: 0px; color: #888888; font-family: Arial, Helvetica, sans-serif; font-size: 13px; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
login:&lt;/div&gt;
&lt;div style=&quot;background-color: white; border: 0px; color: #888888; font-family: Arial, Helvetica, sans-serif; font-size: 13px; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
&amp;nbsp; enabled: false&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;p1&quot;&gt;
Joshua-Davis-MacBook-Pro:postgres-release jdavis$ bosh deploy --recreate&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
Processing deployment manifest&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
------------------------------&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
Getting deployment properties from director...&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
Compiling deployment manifest...&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
Please review all changes carefully&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
Deploying&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
---------&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
Deployment name: `&lt;span class=&quot;s1&quot;&gt;postgres.yml&lt;/span&gt;&#39;&lt;/div&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;span class=&quot;s2&quot;&gt;Director name: `&lt;/span&gt;Bosh Lite Director&lt;span class=&quot;s2&quot;&gt;&#39;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
Are you sure you want to deploy? (type &#39;yes&#39; to continue): yes&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
Director task &lt;span class=&quot;s3&quot;&gt;11&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&amp;nbsp; Started preparing deployment&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&amp;nbsp; Started preparing deployment &amp;gt; &lt;span class=&quot;s1&quot;&gt;Binding deployment&lt;/span&gt;. Done (00:00:00)&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&amp;nbsp; Started preparing deployment &amp;gt; &lt;span class=&quot;s1&quot;&gt;Binding releases&lt;/span&gt;. Done (00:00:00)&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&amp;nbsp; Started preparing deployment &amp;gt; &lt;span class=&quot;s1&quot;&gt;Binding existing deployment&lt;/span&gt;. Done (00:00:00)&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&amp;nbsp; Started preparing deployment &amp;gt; &lt;span class=&quot;s1&quot;&gt;Binding resource pools&lt;/span&gt;. Done (00:00:00)&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&amp;nbsp; Started preparing deployment &amp;gt; &lt;span class=&quot;s1&quot;&gt;Binding stemcells&lt;/span&gt;. Done (00:00:00)&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&amp;nbsp; Started preparing deployment &amp;gt; &lt;span class=&quot;s1&quot;&gt;Binding templates&lt;/span&gt;. Done (00:00:00)&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&amp;nbsp; Started preparing deployment &amp;gt; &lt;span class=&quot;s1&quot;&gt;Binding properties&lt;/span&gt;. Done (00:00:00)&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&amp;nbsp; Started preparing deployment &amp;gt; &lt;span class=&quot;s1&quot;&gt;Binding unallocated VMs&lt;/span&gt;. Done (00:00:00)&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&amp;nbsp; Started preparing deployment &amp;gt; &lt;span class=&quot;s1&quot;&gt;Binding instance networks&lt;/span&gt;. Done (00:00:00)&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; Done preparing deployment (00:00:00)&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&amp;nbsp; Started preparing package compilation &amp;gt; &lt;span class=&quot;s1&quot;&gt;Finding packages to compile&lt;/span&gt;. Done (00:00:00)&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&amp;nbsp; Started preparing dns &amp;gt; &lt;span class=&quot;s1&quot;&gt;Binding DNS&lt;/span&gt;. Done (00:00:00)&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&amp;nbsp; Started preparing configuration &amp;gt; &lt;span class=&quot;s1&quot;&gt;Binding configuration&lt;/span&gt;. Done (00:00:00)&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&amp;nbsp; Started updating job &lt;span class=&quot;s1&quot;&gt;postgres-server&lt;/span&gt; &amp;gt; &lt;span class=&quot;s1&quot;&gt;postgres-server/0 (canary)&lt;/span&gt;. Done (00:00:15)&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&amp;nbsp; Started refilling resource pools &amp;gt; &lt;span class=&quot;s1&quot;&gt;infrastructure1/0&lt;/span&gt;. Done (00:00:02)&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
Task 11 &lt;span class=&quot;s3&quot;&gt;done&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
Started&lt;span class=&quot;Apple-tab-span&quot;&gt; &lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot;&gt; &lt;/span&gt;2014-12-11 14:53:14 UTC&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
Finished&lt;span class=&quot;Apple-tab-span&quot;&gt; &lt;/span&gt;2014-12-11 14:53:31 UTC&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
Duration&lt;span class=&quot;Apple-tab-span&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;00:00:17&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;p4&quot;&gt;
&lt;span class=&quot;s2&quot;&gt;Deployed `&lt;/span&gt;postgres.yml&lt;span class=&quot;s2&quot;&gt;&#39; to `&lt;/span&gt;Bosh Lite Director&lt;span class=&quot;s2&quot;&gt;&#39;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://javaarchramble.blogspot.com/feeds/7673727208985675895/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4179812064174942414/7673727208985675895' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/7673727208985675895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/7673727208985675895'/><link rel='alternate' type='text/html' href='http://javaarchramble.blogspot.com/2015/02/open-source-cloud-foundry-on-bosh-lite.html' title='Open Source Cloud Foundry on Bosh-Lite Installation Notes'/><author><name>Joshua Davis</name><uri>http://www.blogger.com/profile/10630084168049860089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyKSAAwDoasXgYegxE0iJSn-lY0wgimia82Zq3rLtAxh-BJ3nI4L8iDl0dcjlTazTrf2aFC0xLPHR4r6iEs6pQoSyoQcYS9zo58hPzruLEeHubkHC9nsMqwHZZLvMtxfg/s220/ProfilePhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4179812064174942414.post-912111634935599350</id><published>2015-02-02T19:54:00.005-05:00</published><updated>2015-02-02T20:00:52.662-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Interview"/><category scheme="http://www.blogger.com/atom/ns#" term="Interview Traps"/><category scheme="http://www.blogger.com/atom/ns#" term="Technical Interview"/><title type='text'>Technical Interview Interviewing Advice</title><content type='html'>&lt;h2&gt;
Interviewing Advice&amp;nbsp;&lt;/h2&gt;
A few days ago a friend&#39;s son who is a college student asked me for a list of simple principles for getting through a Technical Interview. &amp;nbsp;After having done interviews, and been the interviewee many times these are some of the items that I believe in.&lt;br /&gt;
&lt;br /&gt;
1. Make sure that you have a quiet place to answer the phone during the interview. &amp;nbsp;
&lt;br /&gt;
&lt;div style=&quot;color: #222222; font-family: arial, sans-serif;&quot;&gt;
2. Don&#39;t be late to the interview&lt;/div&gt;
&lt;div style=&quot;color: #222222; font-family: arial, sans-serif;&quot;&gt;
3. Be yourself and take a deep breath and talk slowly over the phone.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #222222; font-family: arial, sans-serif;&quot;&gt;
4. Remember that it&#39;s ok to say that you don&#39;t know something. &amp;nbsp;At the same time, if you have something to share about a question or topic make sure that it relates to the subject.&lt;/div&gt;
&lt;div style=&quot;color: #222222; font-family: arial, sans-serif;&quot;&gt;
5. Don&#39;t talk negatively about a former employer or school situation. &amp;nbsp;This is a common trap.&lt;/div&gt;
&lt;div style=&quot;color: #222222; font-family: arial, sans-serif;&quot;&gt;
6. When being asked about money you should say that you would prefer a paid internship but would take a look at all offers.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #222222; font-family: arial, sans-serif;&quot;&gt;
7. Always ask 4 questions (like these) at the end of the interview:&lt;/div&gt;
&lt;div style=&quot;color: #222222; font-family: arial, sans-serif;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;color: #222222; font-family: arial, sans-serif;&quot;&gt;
&amp;nbsp; &amp;nbsp;A. Am I a fit for the position that you are trying to fill?&lt;/div&gt;
&lt;div style=&quot;color: #222222; font-family: arial, sans-serif;&quot;&gt;
&amp;nbsp; &amp;nbsp;B. What are the responsibilities of the position?&lt;/div&gt;
&lt;div style=&quot;color: #222222; font-family: arial, sans-serif;&quot;&gt;
&amp;nbsp; &amp;nbsp;C. When are you planning on having someone start?&lt;/div&gt;
&lt;div style=&quot;color: #222222; font-family: arial, sans-serif;&quot;&gt;
&amp;nbsp; &amp;nbsp;D. I like this position, what are the next steps?&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://javaarchramble.blogspot.com/feeds/912111634935599350/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4179812064174942414/912111634935599350' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/912111634935599350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/912111634935599350'/><link rel='alternate' type='text/html' href='http://javaarchramble.blogspot.com/2015/02/technical-interview-interviewing-advice.html' title='Technical Interview Interviewing Advice'/><author><name>Joshua Davis</name><uri>http://www.blogger.com/profile/10630084168049860089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyKSAAwDoasXgYegxE0iJSn-lY0wgimia82Zq3rLtAxh-BJ3nI4L8iDl0dcjlTazTrf2aFC0xLPHR4r6iEs6pQoSyoQcYS9zo58hPzruLEeHubkHC9nsMqwHZZLvMtxfg/s220/ProfilePhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4179812064174942414.post-2765107974470310818</id><published>2015-02-01T10:53:00.000-05:00</published><updated>2015-02-01T11:18:38.816-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Developer Operations"/><category scheme="http://www.blogger.com/atom/ns#" term="Disaster Recovery"/><category scheme="http://www.blogger.com/atom/ns#" term="Pivotal Cloud Foundry"/><title type='text'>Pivotal Cloud Foundry and Disaster Recovery</title><content type='html'>&lt;h2&gt;
What is the best approach to architect for disaster recovery with Pivotal Cloud Foundry?&lt;/h2&gt;
&lt;h3&gt;
1. Warm Standby - You can have a daily backup script run that will backup PCF according to our documentation &lt;/h3&gt;
This backup information can be moved to a DR site and re-created when needed.&lt;br /&gt;
&lt;h3&gt;
2. Active-Active - Two live sites running PCF, and all applications and bosh deployments are deployed to both sites.&lt;/h3&gt;
There are also degrees of usage for both of these solutions based upon factors such as maybe only a set of the applications have to be available in Disaster Recovery, or perhaps the PCF environment is dependent on a database that has to be recovered first. &amp;nbsp;In my experience, the deciding factor is really how fast you would like to be able to cutover to a Disaster Recovery site. &amp;nbsp;You need to understand the Service Level Agreements that are understood for DR in order to select the correct approach.</content><link rel='replies' type='application/atom+xml' href='http://javaarchramble.blogspot.com/feeds/2765107974470310818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4179812064174942414/2765107974470310818' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/2765107974470310818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/2765107974470310818'/><link rel='alternate' type='text/html' href='http://javaarchramble.blogspot.com/2015/02/pivotal-cloud-foundry-and-disaster.html' title='Pivotal Cloud Foundry and Disaster Recovery'/><author><name>Joshua Davis</name><uri>http://www.blogger.com/profile/10630084168049860089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyKSAAwDoasXgYegxE0iJSn-lY0wgimia82Zq3rLtAxh-BJ3nI4L8iDl0dcjlTazTrf2aFC0xLPHR4r6iEs6pQoSyoQcYS9zo58hPzruLEeHubkHC9nsMqwHZZLvMtxfg/s220/ProfilePhoto.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4179812064174942414.post-6565407152129258069</id><published>2014-11-19T10:18:00.001-05:00</published><updated>2015-02-01T10:37:51.692-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Architecture"/><category scheme="http://www.blogger.com/atom/ns#" term="GemFire-XD"/><category scheme="http://www.blogger.com/atom/ns#" term="Hadoop"/><category scheme="http://www.blogger.com/atom/ns#" term="HAWQ"/><category scheme="http://www.blogger.com/atom/ns#" term="Pivotal Hadoop"/><category scheme="http://www.blogger.com/atom/ns#" term="RabbitMQ"/><category scheme="http://www.blogger.com/atom/ns#" term="Spring Batch"/><category scheme="http://www.blogger.com/atom/ns#" term="Spring Framework"/><category scheme="http://www.blogger.com/atom/ns#" term="Spring-XD"/><title type='text'>Using Spring-XD a real life example - Part 2</title><content type='html'>&lt;h2&gt;
Data Ingestion&lt;/h2&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;h3&gt;
Historical Data Load&lt;/h3&gt;
&lt;div&gt;
The technical use case is that by off-loading the data from the Enterprise Data Warehouse (EDW) and placing the data onto HDFS the most commonly queried data can stay in the EDW and the extended historical source data can be moved off for querying and reporting.&lt;/div&gt;
&lt;h4&gt;
Technical Implementation&lt;/h4&gt;
&lt;div&gt;
Data is loaded through a comma separated values file into a Spring-XD stream that runs a utility that loads data efficiently into HAWQ. &amp;nbsp;The GemFire data load is not performed in this case because GemFire only holds (in this case) 4 weeks of current data.&lt;/div&gt;
&lt;h3&gt;
Dimensional Data Load&lt;/h3&gt;
&lt;div&gt;
Dimensional Data is reference data that is used to help perform any business rules. &amp;nbsp;This would be used to reduce the size of the historical data load. &amp;nbsp;At times in any set of data there is repeated text such as flags or headings that can be substituted with a reference to a row in a dimension table.&lt;br /&gt;
&lt;h4&gt;
Technical Implementation&lt;/h4&gt;
Data is loaded through a Spring-XD stream that takes a comma separated value file and updates both GemFire and HAWQ.&lt;br /&gt;
&lt;h3&gt;
Streaming Data&amp;nbsp;&lt;/h3&gt;
&lt;/div&gt;
&lt;div&gt;
Data that is continually fed from devices can easily overwhelm a system not prepared to handle data in an asynchronous manner.&lt;/div&gt;
&lt;h4&gt;
Technical Implementation&lt;/h4&gt;
&lt;div&gt;
A custom source is used to pull files from HDFS and fed through the RabbitMQ message broker, and then process the data into a format that can be used by a GemFire and HAWQ import Spring-XD stream.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://javaarchramble.blogspot.com/2014/11/using-spring-xd-real-life-example-part-1.html&quot; target=&quot;_blank&quot;&gt;Using Spring-XD a real life example - Part 1&lt;/a&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://javaarchramble.blogspot.com/feeds/6565407152129258069/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4179812064174942414/6565407152129258069' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/6565407152129258069'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/6565407152129258069'/><link rel='alternate' type='text/html' href='http://javaarchramble.blogspot.com/2014/11/using-spring-xd-real-life-example-part-2.html' title='Using Spring-XD a real life example - Part 2'/><author><name>Joshua Davis</name><uri>http://www.blogger.com/profile/10630084168049860089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyKSAAwDoasXgYegxE0iJSn-lY0wgimia82Zq3rLtAxh-BJ3nI4L8iDl0dcjlTazTrf2aFC0xLPHR4r6iEs6pQoSyoQcYS9zo58hPzruLEeHubkHC9nsMqwHZZLvMtxfg/s220/ProfilePhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4179812064174942414.post-6701291443758284606</id><published>2014-11-05T09:22:00.002-05:00</published><updated>2014-11-06T10:11:55.323-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Architecture"/><category scheme="http://www.blogger.com/atom/ns#" term="Cloud Foundry"/><category scheme="http://www.blogger.com/atom/ns#" term="Micro Services"/><category scheme="http://www.blogger.com/atom/ns#" term="PAAS"/><category scheme="http://www.blogger.com/atom/ns#" term="Pivotal Cloud Foundry"/><title type='text'>Market Based approach to Micro-Service delivery in Pivotal Cloud Foundry Part II</title><content type='html'>&lt;h2 style=&quot;height: 0px;&quot;&gt;
Foundational Concepts behind a Market Based Approach&lt;/h2&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3&gt;
Measure, measure, measure&lt;/h3&gt;
&lt;div&gt;
Effective markets are measured by their ability to provide products that are needed, competition to encourage innovation, and the right amount of regulation. &amp;nbsp;The way to know if a Market is working is to measure and perform analysis of these factors. &amp;nbsp;Feedback on how effective the systems are is essential for success. &amp;nbsp;&lt;/div&gt;
&lt;h3&gt;
Create an effective marketplace&lt;/h3&gt;
&lt;div&gt;
Markets that work well are effective in providing the environment by which products can be bought and sold with a varying degree of &quot;friction.&quot; Friction in markets could be defined as the regulatory or governance framework that is put into place to manage the market. Removing this layer would create a scenario where fake or inherently low quality products could make it into the market and create havoc. &amp;nbsp;Too much friction in markets have been shown to increase the barriers to entry and eventually create &quot;Black Markets&quot; where products are sold without regard to the established market because it is ineffective.&lt;/div&gt;
&lt;h3&gt;
Enable, not discourage innovation&lt;/h3&gt;
&lt;div&gt;
Markets are built for innovation in that new practices and products will be adopted based upon their merit, but only if the market is &quot;fair.&quot; &amp;nbsp;A market based approach implements this by attaching a &quot;cost&quot; to the consumption of a Product/Micro-Service. &amp;nbsp;This would be similar to the concepts of a Service Level Agreement that many organizations create between groups, but much simpler. &amp;nbsp;Each micro-service establishes a cost structure that would &quot;fund&quot; their development and support efforts thereby providing a very easy way for organizations to understand where their costs will be in this new way of operating.&lt;/div&gt;
&lt;div&gt;
To enable innovation Markets must have a way to implement a &quot;Low Barrier To Entry.&quot; &amp;nbsp;This is where a product can be implemented quickly on a small scale, and then over time after demand picks up the product can be scaled and priced in a way that is appropriate. &amp;nbsp;Conversely, if the product fails to garner attention it can be removed quickly and easily from the environment without creating a large impact to the organization. &amp;nbsp;An effective Market enables innovation by allowing products to fail as well as succeed.&lt;/div&gt;
&lt;h4&gt;
Cost Drives Innovation&lt;/h4&gt;
&lt;div&gt;
What can be seen in markets is the basic supply and demand scenarios that drives cost lower (and higher). This is very similar to the Legacy services that are offered by many organizations. &amp;nbsp;It is difficult to realize the cost to maintain these services beyond their true lifetimes because the users of the service do not understand the costs associated with the use of it. &amp;nbsp;Also, by hiding all of complexity behind the service in an abstraction there is not an understanding of the underlying impact of the maintenance of this service.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;a href=&quot;http://javaarchramble.blogspot.com/2014/11/market-based-approach-to-micro-service.html&quot; target=&quot;_blank&quot;&gt;Market Based approach to Micro-Service delivery in Pivotal Cloud Foundry Part I&lt;/a&gt;&lt;/div&gt;
&lt;h2 style=&quot;height: 0px;&quot;&gt;
&lt;/h2&gt;
</content><link rel='replies' type='application/atom+xml' href='http://javaarchramble.blogspot.com/feeds/6701291443758284606/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4179812064174942414/6701291443758284606' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/6701291443758284606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/6701291443758284606'/><link rel='alternate' type='text/html' href='http://javaarchramble.blogspot.com/2014/11/market-based-approach-to-micro-service_5.html' title='Market Based approach to Micro-Service delivery in Pivotal Cloud Foundry Part II'/><author><name>Joshua Davis</name><uri>http://www.blogger.com/profile/10630084168049860089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyKSAAwDoasXgYegxE0iJSn-lY0wgimia82Zq3rLtAxh-BJ3nI4L8iDl0dcjlTazTrf2aFC0xLPHR4r6iEs6pQoSyoQcYS9zo58hPzruLEeHubkHC9nsMqwHZZLvMtxfg/s220/ProfilePhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4179812064174942414.post-3414193062530229631</id><published>2014-11-04T11:45:00.003-05:00</published><updated>2014-11-05T09:24:56.622-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Architecture"/><category scheme="http://www.blogger.com/atom/ns#" term="Cloud Foundry"/><category scheme="http://www.blogger.com/atom/ns#" term="Micro Services"/><category scheme="http://www.blogger.com/atom/ns#" term="PAAS"/><category scheme="http://www.blogger.com/atom/ns#" term="Pivotal Cloud Foundry"/><title type='text'>Market Based approach to Micro-Service delivery in Pivotal Cloud Foundry Part I</title><content type='html'>As part of my job as a Field Engineer for Pivotal the past few months has been spent doing implementations of Pivotal Cloud Foundry our Platform As a Service platform. &amp;nbsp;As part of the discussion around this new &quot;Third Platform&quot; we talk quite a bit about the concept of MicroServices with our customers. &amp;nbsp;This is because Micro-Services provide the avenue to innovation that most companies are looking for as we move into a world where the software produced at an organization defines it&#39;s value in the marketplace. &amp;nbsp;To understand Micro-Services the best place to start is&amp;nbsp;&lt;a href=&quot;http://martinfowler.com/articles/microservices.html&quot; target=&quot;_blank&quot;&gt;Martin Fowlers discussion around Micro Services.&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Martin Fowler has some very interesting points, and provides a definitive concise delivery of what Mirco-Service concepts define and how it is being used by different companies. &amp;nbsp;The fun part of the article from my perspective is that he does not define this as a &quot;new&quot; concept, and describes it mostly as an &quot;evolutionary&quot; concept, not a a revolutionary one. &amp;nbsp;What is revolutionary in my opinion is that the realities of software development in large organizations is now recognized as an actual best practice.&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Modularization of code becomes a Product and Micro-Service&lt;/b&gt;&amp;nbsp;- I have seen this trend growing over time as quality demands have grown over time. &amp;nbsp;Projects are driven at many organizations not by what it can be used for to solve the present problem, but by the value that it can give to other software that can integrate with it. &amp;nbsp;Modularization into libraries can only take a team so far when the cost to change the code underlying the library is very high. &amp;nbsp;A product can have different versions, can have a support structure. &amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Code responsibility in production given to the Software Development teams &lt;/b&gt;- What can I say? &amp;nbsp;Martin Fowler&#39;s point hits home as the biggest incentive for improvement is to be the one who gets called at 2:00 AM when there is a problem. &amp;nbsp;Many organizations have not recognized this fact, or have not come up with appropriate ways of measuring quality and Total Cost of Ownership to take this into account.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Removal of the importance of Canonical Domain Models &lt;/b&gt;- This points to the endless discussions organizations have around data, and views of data. &amp;nbsp;This is a recognition that the &quot;nature&quot; of data is changing so quickly that trying to capture exactly where it is and what it &lt;span style=&quot;font-family: Times, Times New Roman, serif;&quot;&gt;means may just be impossible. &amp;nbsp;It reminds me of the Heisenberg uncertainty principle which&lt;span style=&quot;background-color: white; line-height: 18.2000007629395px;&quot;&gt;&amp;nbsp;states that you can never simultaneously know the exact position and the exact speed of an object.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Times, Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 18.2000007629395px;&quot;&gt;What all of these concepts have in common is that they are loosely based on social science, specifically the use of Market Economics.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h2&gt;
&lt;span style=&quot;font-family: Times, Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 18.2000007629395px;&quot;&gt;What is a Market Based Approach to Micro-Services?&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Times, Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 18.2000007629395px;&quot;&gt;This approach is based around the economics of Products in a market economy. &amp;nbsp;One of the main concepts of Micro-Services is that each service is a Product. &amp;nbsp;The development teams are divided into Product Groups where they are responsible for the Micro-Services from &quot;cradle to grave.&quot; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Times, Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 18.2000007629395px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Times, Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 18.2000007629395px;&quot;&gt;The users of the services will:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Times, &#39;Times New Roman&#39;, serif; line-height: 18.2000007629395px;&quot;&gt;Invest in the Micro-Service by using the Product&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Times, &#39;Times New Roman&#39;, serif; line-height: 18.2000007629395px;&quot;&gt;Punish a Product by either not using it or &quot;recalling&quot; the product due to poor performance/functionality.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
The producers of the services will:&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Charge a specific cost for the use and support of the Product/Micro-Service&lt;/li&gt;
&lt;li&gt;Continually produce new and upgraded services based upon the economics of developing the service.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;a href=&quot;http://javaarchramble.blogspot.com/2014/11/market-based-approach-to-micro-service_5.html&quot; target=&quot;_blank&quot;&gt;Part II - Foundational Concepts in a Market Based Approach&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://javaarchramble.blogspot.com/feeds/3414193062530229631/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4179812064174942414/3414193062530229631' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/3414193062530229631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/3414193062530229631'/><link rel='alternate' type='text/html' href='http://javaarchramble.blogspot.com/2014/11/market-based-approach-to-micro-service.html' title='Market Based approach to Micro-Service delivery in Pivotal Cloud Foundry Part I'/><author><name>Joshua Davis</name><uri>http://www.blogger.com/profile/10630084168049860089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyKSAAwDoasXgYegxE0iJSn-lY0wgimia82Zq3rLtAxh-BJ3nI4L8iDl0dcjlTazTrf2aFC0xLPHR4r6iEs6pQoSyoQcYS9zo58hPzruLEeHubkHC9nsMqwHZZLvMtxfg/s220/ProfilePhoto.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4179812064174942414.post-3292404195347268624</id><published>2014-11-04T10:29:00.000-05:00</published><updated>2015-03-02T13:48:49.472-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="GemFire-XD"/><category scheme="http://www.blogger.com/atom/ns#" term="Hadoop"/><category scheme="http://www.blogger.com/atom/ns#" term="HAWQ"/><category scheme="http://www.blogger.com/atom/ns#" term="JAVA"/><category scheme="http://www.blogger.com/atom/ns#" term="Pivotal Hadoop"/><category scheme="http://www.blogger.com/atom/ns#" term="Pivotal HD"/><category scheme="http://www.blogger.com/atom/ns#" term="Spring Framework"/><category scheme="http://www.blogger.com/atom/ns#" term="Spring Hateos"/><category scheme="http://www.blogger.com/atom/ns#" term="Spring-XD"/><category scheme="http://www.blogger.com/atom/ns#" term="Zookeeper"/><title type='text'>Using Spring-XD a real life example - Part 1</title><content type='html'>&lt;h2&gt;
Introduction&lt;/h2&gt;
I have been spending quite a bit of time working on Spring-XD and Hadoop over the past few months doing a proof of concept around high speed ingestion and transformation of files from a Linux file system to the Hadoop File System (HDFS). &lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;h3 style=&quot;clear: both; text-align: left;&quot;&gt;
The Business Use Case&lt;/h3&gt;
&lt;div&gt;
In many situations, time series data is fed from a source on a continuous basis, whether that data is sensor data from a device, customer data from a feed, Tweets from Twitter, or Facebook Posts, or health claims data that comes from an external source. &amp;nbsp;In the past this data would be staged, ingested, and then transformed using a tool like Informatica or Microsoft BizTalk. The data would then be placed into a relational database and then used for analytics.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
There are two types of data for this use case, data that &quot;batched&quot; up into very large files (20 gigabytes+) that are received on a periodic basis such as 15 minutes or an hour. &amp;nbsp;The second type of data is received as a stream of data and will need to be processed continually to show the results of the analysis.&lt;/div&gt;
&lt;h3&gt;
The Technical Use Case&lt;/h3&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
A Spring-XD cluster was setup to process very large files coming from devices at the 15 minute interval. &amp;nbsp;These files are of consistent format and range from 500 megabytes to 20 gigabytes in size. &amp;nbsp;The process was setup to use Spring-Batch to &amp;nbsp;the files from XML to .csv and then put the data into different databases such as HBase, Hive, GemFire-XD, and Hawq.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
The interesting part of this was that processing the file using Spring-Batch alone is just not possible under normal circumstances. &amp;nbsp;Spring-XD enables the processing of each file to be easily be shared across a larger number of machines. &amp;nbsp;&lt;/div&gt;
&lt;h3 style=&quot;clear: both; text-align: left;&quot;&gt;
The Solution&lt;/h3&gt;
&lt;div style=&quot;text-align: right;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;clear: both; text-align: left;&quot;&gt;
We decided to use a combination of Spring-XD, RabbitMQ, Redis, ZooKeeper, GemFire-XD, HAWQ, and Pivotal Hadoop (Pivotal HD). &amp;nbsp;In addition, a relational database (HSQLDB), Spring Framework, Map Reduce, HBASE, and Spring-HATEOS are used in this solution. &amp;nbsp;This combination was used to implement both a real-time and batch system to integrate the ingestion process into Hadoop and HAWQ.&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
Products/Frameworks Used&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Times, Times New Roman, serif;&quot;&gt;Spring XD - A server that is used to abstract the mechanisms behind ingestion, processing, and depositing data. &amp;nbsp;The ingestion step is called a &quot;Source&quot;, a processor is called a &quot;Transform&quot;, and a deposit is called a &quot;Sink.&quot; &amp;nbsp;There are many components included in Spring-XD that can be used for processing data.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Times, Times New Roman, serif;&quot;&gt;RabbitMQ - An AMQP message broker that is used in this case to assist in Spring-XD job management and as a source, transform, and sink.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Times, Times New Roman, serif;&quot;&gt;Redis - An object caching server that is used to hold statistics for Spring-XD.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Times, Times New Roman, serif;&quot;&gt;ZooKeeper - A node based database that holds what has been deployed and what could be deployed for Spring-XD. &amp;nbsp;It helps Spring-XD to keep a constant view of what should be running and what should be deployed to each instance of Spring-XD node.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Times, Times New Roman, serif;&quot;&gt;&lt;a href=&quot;http://www.pivotal.io/big-data/pivotal-hd&quot; target=&quot;_blank&quot;&gt;GemFire-XD&lt;/a&gt; - An SQL 2003 compliant in memory data grid (IMDG) that is used to hold a window for fast querying of data. &amp;nbsp;This is used as a sink in this case, but could be used as a source as well. &amp;nbsp;It is used a the source for a REST services layer. &amp;nbsp;This database has the ability to overflow and write to HDFS using OLTP type semantics.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Times, Times New Roman, serif;&quot;&gt;&lt;a href=&quot;http://www.pivotal.io/big-data/pivotal-hd&quot; target=&quot;_blank&quot;&gt;HAWQ&lt;/a&gt; - HAdoop With Query is an analytical database query engine built on top of HDFS. &amp;nbsp;The query engine originated with GreenPlum but has been built to enable a fully SQL compliant engine for Hadoop.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Times, Times New Roman, serif;&quot;&gt;&lt;a href=&quot;http://www.pivotal.io/big-data/pivotal-hd&quot; target=&quot;_blank&quot;&gt;Pivotal Hadoop&lt;/a&gt; (HD) - A version of open source Hadoop that has been hardened and certified for use in an enterprise. &amp;nbsp;This version of Hadoop has the ability to take advantage of HAWQ and GemFire-XD.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Times, Times New Roman, serif;&quot;&gt;HSQLDB - A simple relational database used with Spring-XD. &amp;nbsp;It would be wise to use your preferred relational database.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Times, Times New Roman, serif;&quot;&gt;&lt;a href=&quot;http://projects.spring.io/spring-framework/&quot; target=&quot;_blank&quot;&gt;Spring-Framework&lt;/a&gt; - A comprehensive Java framework that&amp;nbsp;&lt;span style=&quot;background-color: white; line-height: 20px;&quot;&gt;provides a comprehensive programming and configuration model for modern Java-based enterprise applications - on any kind of deployment platform.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Times, Times New Roman, serif;&quot;&gt;&lt;span style=&quot;background-color: white; line-height: 20px;&quot;&gt;Map Reduce - A fundamental part of the Hadoop ecosystem, Map Reduce provides a Java Framework for parallel processing of data. &amp;nbsp;For certain use cases including processing large files Map Reduce is a great solution.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Times, Times New Roman, serif;&quot;&gt;&lt;span style=&quot;background-color: white; line-height: 20px;&quot;&gt;HBASE - A no-sql database which runs on Hadoop, HBASE is a very powerful tool to use for time-series data and querying.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Times, Times New Roman, serif;&quot;&gt;&lt;span style=&quot;background-color: white; line-height: 20px;&quot;&gt;Spring HATEOS - A framework that can be used with Spring-REST to expose a database in a resource based manner.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Times, Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 20px;&quot;&gt;&lt;a href=&quot;http://javaarchramble.blogspot.com/2014/11/using-spring-xd-real-life-example-part-2.html&quot; target=&quot;_blank&quot;&gt;Using Spring-XD a real life example - Part 2&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://javaarchramble.blogspot.com/feeds/3292404195347268624/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4179812064174942414/3292404195347268624' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/3292404195347268624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/3292404195347268624'/><link rel='alternate' type='text/html' href='http://javaarchramble.blogspot.com/2014/11/using-spring-xd-real-life-example-part-1.html' title='Using Spring-XD a real life example - Part 1'/><author><name>Joshua Davis</name><uri>http://www.blogger.com/profile/10630084168049860089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyKSAAwDoasXgYegxE0iJSn-lY0wgimia82Zq3rLtAxh-BJ3nI4L8iDl0dcjlTazTrf2aFC0xLPHR4r6iEs6pQoSyoQcYS9zo58hPzruLEeHubkHC9nsMqwHZZLvMtxfg/s220/ProfilePhoto.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4179812064174942414.post-2918228782162344783</id><published>2014-05-19T12:02:00.000-04:00</published><updated>2014-05-19T12:02:01.732-04:00</updated><title type='text'>Presenting &quot;Moving from JEE to Cloud Foundry a Fruitful Journey&quot;</title><content type='html'>Just in case anyone is interested I will be presenting &quot;Presenting &quot;Moving from JEE to Cloud Foundry a Fruitful Journey&quot; at the &lt;a href=&quot;http://www.tampajug.org/&quot;&gt;Tampa Java Users Group &lt;/a&gt;May 20th, and at the &lt;a href=&quot;http://www.codetown.us/events/orlandojug-moving-to-cloud-foundry-from-jee-the-paas-journey/&quot;&gt;Orlando Java User Group&lt;/a&gt; May 22nd. &lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://javaarchramble.blogspot.com/feeds/2918228782162344783/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4179812064174942414/2918228782162344783' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/2918228782162344783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/2918228782162344783'/><link rel='alternate' type='text/html' href='http://javaarchramble.blogspot.com/2014/05/presenting-moving-from-jee-to-cloud.html' title='Presenting &quot;Moving from JEE to Cloud Foundry a Fruitful Journey&quot;'/><author><name>Joshua Davis</name><uri>http://www.blogger.com/profile/10630084168049860089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyKSAAwDoasXgYegxE0iJSn-lY0wgimia82Zq3rLtAxh-BJ3nI4L8iDl0dcjlTazTrf2aFC0xLPHR4r6iEs6pQoSyoQcYS9zo58hPzruLEeHubkHC9nsMqwHZZLvMtxfg/s220/ProfilePhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4179812064174942414.post-5557761855179619166</id><published>2014-05-18T15:47:00.000-04:00</published><updated>2014-05-18T17:57:39.115-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cloud Foundry"/><category scheme="http://www.blogger.com/atom/ns#" term="IAAS"/><category scheme="http://www.blogger.com/atom/ns#" term="J2EE"/><category scheme="http://www.blogger.com/atom/ns#" term="JEE"/><category scheme="http://www.blogger.com/atom/ns#" term="PAAS"/><category scheme="http://www.blogger.com/atom/ns#" term="Spring Framework"/><title type='text'>Moving from JEE to Pivotal Cloud Foundry PAAS a fruitful journey</title><content type='html'>&lt;h2&gt;
Introduction&lt;/h2&gt;
&lt;div&gt;
This set of blog posts will go through the important concepts behind Platform As A Service (PAAS) and how Cloud Foundry works to make Java Development and software development in general faster and more productive. &amp;nbsp;We will first go through some of the motivations behind moving to PAAS from the traditional application server approach. &amp;nbsp;We will walk through developing an application and show the differences and advantages to using Cloud Foundry over other approaches. &amp;nbsp;In addition the blog entries will show the pre-requisites for using Cloud Foundry, and the steps to convert a JEE application built with JMS into one that can be enabled on the cloud using open source frameworks and RabbitMQ.&lt;/div&gt;
&lt;div&gt;
This set of blog posts will not be providing a tutorial on Cloud Foundry, or PAAS in general. &amp;nbsp;That has been done very well in other blogs and on the Cloud Foundry web site. &amp;nbsp;The foremost goal here is to enable developers to quickly understand the important high-level problems that PAAS and Cloud Foundry solves, and provide the conceptual background for taking the next step and either installing the product, or evaluating the product on our public Cloud Foundry site. &amp;nbsp;First though, we need to understand why using a PAAS is important to software development and most software developers.&lt;/div&gt;
&lt;h2&gt;
A little bit of history&lt;/h2&gt;
&lt;div&gt;
If we look back a little over 10 years to see what were the software development trends software development struggled to deploy web applications to a server in a standard and managed way. &amp;nbsp;The paradigm was that you published web applications that typically were low bandwidth and a small part of everyday business for most companies large or small. &amp;nbsp;Still, these application servers gave rudimentary ability to scale applications and provide an ecosystem for developers to publish their applications. &amp;nbsp;Application servers were dedicated to the style and ecosystem of a specific vendor&#39;s tools and recommended architecture. &amp;nbsp;This spanned a large area, from IBM&#39;s WebSphere which concentrated on working with their mainframes and MQSeries, to JBOSS which concentrated on strict J2EE adherence to Apache Tomcat. &amp;nbsp;In this time open source projects like Apache Tomcat were in their infancy.&lt;/div&gt;
&lt;h2&gt;
Targeting Software Development for Cloud and PAAS&lt;/h2&gt;
&lt;div&gt;
The &quot;Cloud&quot; environment that has been created over the past couple of years has been placed into the public where we thing of Amazon and Google as the cloud whereas the reality is that these environments are basically no more convenient than bare metal machines.&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;They are nice to be able to have a cloud environment that you can call on new machines and you can duplicate those virtual machines anytime &amp;nbsp;that you want,.&lt;/li&gt;
&lt;li&gt;The real advantage to cloud is not just that but is what is called Infrastructure as a Service (IAAS).&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
PAAS environment == Platform as a Service&lt;/h4&gt;
&lt;div&gt;
PAAS implies many things to different vendors and groups. &amp;nbsp;What I understand it to be is that you have a set of server components that you can deploy applications to. &amp;nbsp;The focus is not on the provisioning of the servers or the virtualized environment, but on the applications. &amp;nbsp;Why is that important? &amp;nbsp;Well, when we start thinking about PAAS or increasing the amount of time we can have doing the development rather than provisioning, and decreasing the time it takes to provision the environment, we really see that decreasing the time that we are spending on infrastructure we can spend more on actually developing applications and solving business problems.&lt;/div&gt;
&lt;h3&gt;
De-Coupling the Application from the Application Server&lt;/h3&gt;
&lt;div&gt;
PAAS also implies some separation from the Application Server that executes the application. &amp;nbsp;This is really about creating Application Server agnostic applications so that our applications can work beyond WebSphere or Oracle BEA. &amp;nbsp;Over the past 10 years developers for many reasons good and bad wrote code that tightly coupled their applications to the Java Application Server and to the database that was being used for their application. &amp;nbsp; This was not necessarily a bad thing for numerous reasons:&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Performance is always important, and some Application Servers were faster than others on certain hardware platforms.&lt;/li&gt;
&lt;li&gt;Why re-create the wheel if it was already done in the Application Server?&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Application Servers were sold as a &quot;platform&quot; by which you could depend on for years to come.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
As in any other situation where code stays around for a long time and the intention of the framework changes, this proposition can be difficult, if not impossible to keep. &amp;nbsp;The advantage of using non-standard features within a JEE application server was very popular a few years ago when Open Sources was not as big of a force as it is today.&lt;/div&gt;
&lt;div&gt;
Also, when we look at the options today for Application Servers, they are basically &quot;Commodity Services.&quot; &amp;nbsp;The &quot;technical&quot; advantages of going with a commercial Application Server should only extend to the support that a vendor will supply if there is a problem. &amp;nbsp;Each situation is different, and there are always situations where it makes sense to use such extensions. &amp;nbsp;What is a smart way to use those Application Server extensions if they are not covered by an established standard?&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Write your own adapter to &quot;abstract&quot; the service away from your code, and separate the abstraction into a separate deliverable. &amp;nbsp;An example would be if the commercial cache vendor does not supply a adapter class to implement JSR 107.&lt;/li&gt;
&lt;li&gt;Use the SpringFramework (or any other injection framework) to inject an &amp;nbsp;interface that implements the functionality.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;code&quot; style=&quot;background-color: #cfe2f3;&quot;&gt;
&lt;i&gt;Developer Notes I&lt;/i&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;JEE components that use RMI such as &quot;Session Beans&quot; do not work at all in Cloud Foundry due to the restrictions that have been placed upon the virtual machines. &amp;nbsp;If you have to use session beans, re-develop them to be REST based services or use a messaging environment like RabbitMQ.&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;JMS message drive beans (MDB) that are tied to a message service that is embedded locally in the application server will not work in Cloud Foundry due to the restriction that it is tied to a specific instance of the messaging environment. &amp;nbsp;If asynchronous messaging is absolutely needed take a look at other solutions that work in Cloud Foundry such as RabbitMQ and Redis.&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
&amp;nbsp;Why is it important?&lt;/h4&gt;
To be able to take advantage of the best open-source technologies available today and into the future development groups must be flexible enough to be polyglot in environments not just in languages. &amp;nbsp;Also, to enable the application to scale horizontally and vertically at run-time the application should not be bound by a specific implementation of server interface such as messaging, database, or services.&lt;br /&gt;
&lt;br /&gt;
It is really a challenge when we as developers, write applications tied to a specific Application Server and/or a specific implementation of IAAS. &amp;nbsp;This &quot;tight coupling&quot; of our code to a specific Application Server creates issues when one of these dependencies change or becomes un-supported.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Generally, these items
are important to any development process, but especially when we are developing a system that will be deployed into a PAAS:&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoListParagraphCxSpFirst&quot; style=&quot;margin-left: 38.65pt; mso-add-space: auto; mso-list: l0 level1 lfo1; text-indent: -.25in;&quot;&gt;
&lt;span style=&quot;font-family: Symbol; text-indent: -0.25in;&quot;&gt;&lt;span style=&quot;font-family: &#39;Times New Roman&#39;; font-size: 7pt;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b style=&quot;text-indent: -0.25in;&quot;&gt;Where we store our data&lt;/b&gt;&lt;span style=&quot;text-indent: -0.25in;&quot;&gt; - Instances of the application can come an go, data can&#39;t be stored locally to be used for any kind of permanent storage. &amp;nbsp;Databases, NAS, or service caches are the preferred method of storing data when you use a PAAS.&lt;/span&gt;&lt;br /&gt;
&lt;b style=&quot;text-indent: -0.25in;&quot;&gt;Where we are retrieving our data &lt;/b&gt;&lt;span style=&quot;text-indent: -0.25in;&quot;&gt;- Databases and Cache&#39;s must be able to handle initial creation of tables or maintenance of the cache of data through the application itself. &amp;nbsp;Retrieving data from the local filesystem is not recommended.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoListParagraphCxSpMiddle&quot; style=&quot;margin-left: 38.65pt; mso-add-space: auto; mso-list: l0 level1 lfo1; text-indent: -.25in;&quot;&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoListParagraphCxSpMiddle&quot; style=&quot;margin-left: 38.65pt; mso-add-space: auto; mso-list: l0 level1 lfo1; text-indent: -.25in;&quot;&gt;
&lt;b&gt;Where we to run our applications from a file-system
perspective&lt;/b&gt; - As filesystems are transient all file system references should be relative paths.&lt;br /&gt;
&lt;b style=&quot;text-indent: -0.25in;&quot;&gt;What does the application depend on - &lt;/b&gt;&lt;span style=&quot;text-indent: -0.25in;&quot;&gt;What system dependencies are part of the application environment?&lt;/span&gt;&lt;br /&gt;
&lt;b style=&quot;text-indent: -0.25in;&quot;&gt;What enables the application to scale horizontally, vertically or both - &lt;/b&gt;&lt;span style=&quot;text-indent: -0.25in;&quot;&gt;Does the application enable scaling, or is it accomplished using the PAAS?&lt;/span&gt;&lt;/div&gt;
&lt;div id=&quot;code&quot; style=&quot;background-color: #cfe2f3;&quot;&gt;
&lt;i&gt;Developer Notes ||&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;All of the above issues are part of the reason why Cloud Foundry was created to begin with.&amp;nbsp;&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Cloud Foundry assumes that you application has some standard property file that you use for configuring your application for each environment (prod, dev, qa) which can be placed into the configuration of the PAAS.&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Cloud Foundry does not have the facility for storing files on the local drive and enabling it to be used in the next execution of the application. &amp;nbsp;It is based around the concept that you can have many instances of the application running, and it may not return to the same instance if you leave some kind of &quot;state&quot; behind in the local filesystem. &amp;nbsp;In these cases you really should be using a relational database or something like Redis or RabbitMQ.&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;In most Platform As a Service Offerings including Cloud Foundry scaling horizontally and/or vertically should always be done within the PAAS itself. &amp;nbsp;Threading within the application is not as important as making sure that the application is completely stable.&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h3 style=&quot;margin-left: 2.65pt;&quot;&gt;
&lt;o:p&gt;Why does it matter? (or why should I care?)&lt;/o:p&gt;&lt;/h3&gt;
&lt;h4 style=&quot;margin-left: 2.65pt;&quot;&gt;
System Dependencies are Ubiquitous&lt;/h4&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin-left: 2.65pt;&quot;&gt;
System dependencies are resources that you either have chosen to use, or have been given to you to use for your application to perform basic functionality that enables your application to work within a deployed environment. &amp;nbsp;Examples of these kinds of dependencies are:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Relational database that is not embedded in your application.&lt;/li&gt;
&lt;li&gt;Distributed cache to handle failover of your application&lt;/li&gt;
&lt;li&gt;Load balancer that sits in front of other dependencies&lt;/li&gt;
&lt;li&gt;Centralized authentication mechanism such as LDAP or Active Directory.&lt;/li&gt;
&lt;li&gt;Messaging environment such as JMS or RabbitMQ that is not embedded in your application.&lt;/li&gt;
&lt;li&gt;Other external applications or services that you do not control.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
With the trends progressing today, even if your application does not interact with these kinds of dependencies, if it is deployed into a company with enough size and complexity your application will need to adapt to handle these dependencies. &lt;br /&gt;
This really isn’t that much to think about,
but who has requirements for these kinds of applications today?&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;It seems from my experience lately that the days are in the past where customers have just a
website with some information to share with their users. &amp;nbsp;&lt;/li&gt;
&lt;li&gt;Typically, even
if we start talking about doing applications without data management dependencies the users still have content management systems that work to integrate other enterprise systems.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin-left: 2.65pt;&quot;&gt;
In &amp;nbsp;this manner, what we presume as developers to be the simplest of web
applications can very quickly start to look like a full-fledged complex web
application by having extended complexity that was not assumed at the start. &amp;nbsp;Therefore, in reality there is no such thing as a web application
these days without any dependencies or future complexity, so either we as software development teams need to write these mechanisms into our applications, or we use a tool such as PAAS (and injection frameworks like Spring Framework) to help us along the way.&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin-left: 2.65pt;&quot;&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;o:DocumentProperties&gt;
  &lt;o:Revision&gt;0&lt;/o:Revision&gt;
  &lt;o:TotalTime&gt;0&lt;/o:TotalTime&gt;
  &lt;o:Pages&gt;1&lt;/o:Pages&gt;
  &lt;o:Words&gt;1180&lt;/o:Words&gt;
  &lt;o:Characters&gt;6730&lt;/o:Characters&gt;
  &lt;o:Company&gt;VMWare&lt;/o:Company&gt;
  &lt;o:Lines&gt;56&lt;/o:Lines&gt;
  &lt;o:Paragraphs&gt;15&lt;/o:Paragraphs&gt;
  &lt;o:CharactersWithSpaces&gt;7895&lt;/o:CharactersWithSpaces&gt;
  &lt;o:Version&gt;14.0&lt;/o:Version&gt;
 &lt;/o:DocumentProperties&gt;
 &lt;o:OfficeDocumentSettings&gt;
  &lt;o:AllowPNG/&gt;
 &lt;/o:OfficeDocumentSettings&gt;
&lt;/xml&gt;&lt;![endif]--&gt;

&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:WordDocument&gt;
  &lt;w:View&gt;Normal&lt;/w:View&gt;
  &lt;w:Zoom&gt;0&lt;/w:Zoom&gt;
  &lt;w:TrackMoves/&gt;
  &lt;w:TrackFormatting/&gt;
  &lt;w:PunctuationKerning/&gt;
  &lt;w:ValidateAgainstSchemas/&gt;
  &lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;
  &lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;
  &lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;
  &lt;w:DoNotPromoteQF/&gt;
  &lt;w:LidThemeOther&gt;EN-US&lt;/w:LidThemeOther&gt;
  &lt;w:LidThemeAsian&gt;JA&lt;/w:LidThemeAsian&gt;
  &lt;w:LidThemeComplexScript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;
  &lt;w:Compatibility&gt;
   &lt;w:BreakWrappedTables/&gt;
   &lt;w:SnapToGridInCell/&gt;
   &lt;w:WrapTextWithPunct/&gt;
   &lt;w:UseAsianBreakRules/&gt;
   &lt;w:DontGrowAutofit/&gt;
   &lt;w:SplitPgBreakAndParaMark/&gt;
   &lt;w:EnableOpenTypeKerning/&gt;
   &lt;w:DontFlipMirrorIndents/&gt;
   &lt;w:OverrideTableStyleHps/&gt;
   &lt;w:UseFELayout/&gt;
  &lt;/w:Compatibility&gt;
  &lt;m:mathPr&gt;
   &lt;m:mathFont m:val=&quot;Cambria Math&quot;/&gt;
   &lt;m:brkBin m:val=&quot;before&quot;/&gt;
   &lt;m:brkBinSub m:val=&quot;--&quot;/&gt;
   &lt;m:smallFrac m:val=&quot;off&quot;/&gt;
   &lt;m:dispDef/&gt;
   &lt;m:lMargin m:val=&quot;0&quot;/&gt;
   &lt;m:rMargin m:val=&quot;0&quot;/&gt;
   &lt;m:defJc m:val=&quot;centerGroup&quot;/&gt;
   &lt;m:wrapIndent m:val=&quot;1440&quot;/&gt;
   &lt;m:intLim m:val=&quot;subSup&quot;/&gt;
   &lt;m:naryLim m:val=&quot;undOvr&quot;/&gt;
  &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:LatentStyles DefLockedState=&quot;false&quot; DefUnhideWhenUsed=&quot;true&quot;
  DefSemiHidden=&quot;true&quot; DefQFormat=&quot;false&quot; DefPriority=&quot;99&quot;
  LatentStyleCount=&quot;276&quot;&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;0&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Normal&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;heading 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 7&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 8&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 9&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 7&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 8&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;toc 9&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;35&quot; QFormat=&quot;true&quot; Name=&quot;caption&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;10&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Title&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;1&quot; Name=&quot;Default Paragraph Font&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;11&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Subtitle&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;22&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Strong&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;20&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Emphasis&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;59&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Table Grid&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Placeholder Text&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;1&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;No Spacing&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Shading&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful List&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Grid&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; UnhideWhenUsed=&quot;false&quot; Name=&quot;Revision&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;34&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;List Paragraph&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;29&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Quote&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;30&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Intense Quote&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Shading Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful List Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Grid Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Shading Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful List Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Grid Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Shading Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful List Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Grid Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Shading Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful List Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Grid Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Shading Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful List Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Grid Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Shading Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light List Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Light Grid Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 1 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Shading 2 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 1 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium List 2 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 1 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 2 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Medium Grid 3 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Dark List Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Shading Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful List Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; Name=&quot;Colorful Grid Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;19&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Subtle Emphasis&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;21&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Intense Emphasis&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;31&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Subtle Reference&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;32&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Intense Reference&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;33&quot; SemiHidden=&quot;false&quot;
   UnhideWhenUsed=&quot;false&quot; QFormat=&quot;true&quot; Name=&quot;Book Title&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;37&quot; Name=&quot;Bibliography&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; QFormat=&quot;true&quot; Name=&quot;TOC Heading&quot;/&gt;
 &lt;/w:LatentStyles&gt;
&lt;/xml&gt;&lt;![endif]--&gt;

&lt;!--[if gte mso 10]&gt;
&lt;style&gt;
 /* Style Definitions */
table.MsoNormalTable
 {mso-style-name:&quot;Table Normal&quot;;
 mso-tstyle-rowband-size:0;
 mso-tstyle-colband-size:0;
 mso-style-noshow:yes;
 mso-style-priority:99;
 mso-style-parent:&quot;&quot;;
 mso-padding-alt:0in 5.4pt 0in 5.4pt;
 mso-para-margin:0in;
 mso-para-margin-bottom:.0001pt;
 mso-pagination:widow-orphan;
 font-size:12.0pt;
 font-family:Cambria;
 mso-ascii-font-family:Cambria;
 mso-ascii-theme-font:minor-latin;
 mso-hansi-font-family:Cambria;
 mso-hansi-theme-font:minor-latin;}
&lt;/style&gt;
&lt;![endif]--&gt;



&lt;!--StartFragment--&gt;





















&lt;!--EndFragment--&gt;&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin-left: 2.65pt;&quot;&gt;
&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div id=&quot;code&quot; style=&quot;background-color: #cfe2f3;&quot;&gt;
&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&lt;i&gt;Developer Notes III&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;Dependencies are handled very elegantly in Cloud Foundry by the use of CF Services.&lt;/i&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;Services are enabled across all users in Cloud Foundry and are typically implement a multi-tennant security model.&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Services are bound specifically to applications and are configured at deploy-time or at development time using configuration classes.  This works with JVM based languages such as Scala and Java.&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Environment variables are used to get and set the values within the application so the application can be easily deployed to a local application server and to Cloud Foundry.&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;i&gt;Complexity in applications are assumed in Cloud Foundry, but not applied until it is absolutely necessary as you can move from a local JDBC database to an enterprise database with just a change in configuration if you adhere to some basic precepts:&lt;/i&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;The database must have the ability to create itself using scripts executed within the application.&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Default data for the database must have the ability to populate itself using scripts executed within the application.&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Non-standard SQL should be avoided if possible.&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;A&lt;/span&gt;pplication development teams are always striving to put together web applications together that can handle interacting with the
resources that we did not expect at the beginning of the project. To accomplish this, we need to have ways to include those resources without having drastic impact to our applications should those services have problems such as:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Resources/dependencies become overloaded&lt;/li&gt;
&lt;li&gt;Resources/dependencies are inaccessible due to network failure&lt;/li&gt;
&lt;li&gt;Resources/dependencies are non-responsive&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;margin-left: 2.65pt;&quot;&gt;
The concepts behind PAAS from a developer perspective is truly to make your life easier when it comes to these &quot;System Level&quot; dependencies that are totally out a programmer&#39;s hands. &amp;nbsp;My personal experience has always been that by virtue of being in a &quot;development&quot; environment I don&#39;t have the ability to truly test the system that I&#39;m working on at scale with all of the services that I would typically have in either my QA or Production environment. &amp;nbsp;A well implemented PAAS offers interfaces to services that implement those interfaces, and a way to easily scale and test your development system.&lt;/div&gt;
&lt;h4 style=&quot;margin-left: 2.65pt;&quot;&gt;
Deployment is hard&lt;/h4&gt;
&lt;div&gt;
One of the biggest challenges for most software development organizations is to actually deploy their code into their different environments. &amp;nbsp;There are many tools that I would recommend for this including Bamboo and Jenkins. &amp;nbsp;These tools can help to put your process in order, but can also just add another set of complexity to the mix.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Cloud Foundry simplifies the journey of the application from initial development inception to putting it into production by enabling developers and developer operations to have a fully scriptable deployment environment to use as a basis for development, quality assurance, and production deployment.&lt;/li&gt;
&lt;li&gt;Deployment and promotion from one environment to the next becomes seamless, automated and a trusted process instead of a manual, tricky one.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 style=&quot;margin-left: 2.65pt;&quot;&gt;
Solution Framework&lt;/h2&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin-left: 2.65pt;&quot;&gt;
To solve these kinds of issues in the past (prior to PAAS) you would you go ahead and put together an application architecture where you have a few choices:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Deployment is hard&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Create scriptable environments using Puppet and Chef to automate the creation of different environments.&lt;/li&gt;
&lt;li&gt;Use non-standard complex configuration management software and processes that are restrictive to the component development process.&lt;/li&gt;
&lt;li&gt;Employ a group of people that all they do is deploy software.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;System Dependencies&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Hardcode the dependencies into your application&lt;/li&gt;
&lt;li&gt;Put in place someplace in
your environment where those things are and then when your connection to those
things these resources really (using the Service Locator Pattern).&lt;/li&gt;
&lt;li&gt;Use a service registry such as UDDI to find and locate your System Dependencies and use JNDI to return a reference to that service.&lt;/li&gt;
&lt;li&gt;Put in place a set of abstractions in your application that would allow you to &quot;inject&quot; using an injection framework such as Spring Framework to create abstractions around your dependencies.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Horizontal and Vertical Scaling&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Enable multi-threading within your application, thereby increasing complexity and the likely case that it will not be maintainable. &amp;nbsp; This will only enable vertical scaling.&lt;/li&gt;
&lt;li&gt;Enable application to be stateless and multi tenant. &amp;nbsp;Deploy to an established number of servers, and number of instances of the application. &amp;nbsp;This architecture allows for the the maximum number of users, and is not efficient with infrastructure resources as it uses a steady amount of resources all of the time.&lt;/li&gt;
&lt;li&gt;Enable distributed processing - Deploy a distributed cache environment that can scale vertically and horizontally (similar to Gemfire).&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div&gt;
As Cloud Foundry becomes part of the development process:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Deployments are easy&lt;/li&gt;
&lt;li&gt;Dependencies are abstracted away by Cloud Foundry, not by your code/application.&lt;/li&gt;
&lt;li&gt;Horizontal and Vertical Scaling are done through Cloud Foundry, not your code/application.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://javaarchramble.blogspot.com/feeds/5557761855179619166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4179812064174942414/5557761855179619166' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/5557761855179619166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/5557761855179619166'/><link rel='alternate' type='text/html' href='http://javaarchramble.blogspot.com/2014/05/moving-from-jee-to-pivotal-cloud.html' title='Moving from JEE to Pivotal Cloud Foundry PAAS a fruitful journey'/><author><name>Joshua Davis</name><uri>http://www.blogger.com/profile/10630084168049860089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyKSAAwDoasXgYegxE0iJSn-lY0wgimia82Zq3rLtAxh-BJ3nI4L8iDl0dcjlTazTrf2aFC0xLPHR4r6iEs6pQoSyoQcYS9zo58hPzruLEeHubkHC9nsMqwHZZLvMtxfg/s220/ProfilePhoto.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4179812064174942414.post-3523538816333842174</id><published>2014-05-16T09:28:00.000-04:00</published><updated>2014-05-18T18:24:13.464-04:00</updated><title type='text'>Why Spring Boot, why now? </title><content type='html'>I have been taking a very long look at the concept of a new architecture for developing Java applications.  As many of you who have read my posts in the past have seen, I&#39;m a big advocate of convention based development.&lt;br /&gt;
&lt;br /&gt;
What is &quot;Convention Based Software Development?&quot;  This is a development strategy that is based upon the concept that if you are going to typically use a specific way of working, it should be something that you can repeat without having to spend time re-doing it again. &lt;br /&gt;
&lt;br /&gt;
To really take a look at Spring Boot you should understand that it&#39;s not going to do everything for you, but if you are going to use Cloud Foundry with Java it certainly makes it easier. &amp;nbsp;To really simplify here is what you get:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;No XML configuration files for Spring (unless you absolutely want one)&lt;/li&gt;
&lt;li&gt;No web.xml, it&#39;s all done within Spring Boot!&lt;/li&gt;
&lt;li&gt;Using annotations, Gradle and Spring Boot you can use any of the Pivotal Spring Framework projects without having to create very much configuration.&lt;/li&gt;
&lt;li&gt;A plain and simple way to get started with any Java Spring Framework application, no fuss, no worry.&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
</content><link rel='replies' type='application/atom+xml' href='http://javaarchramble.blogspot.com/feeds/3523538816333842174/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4179812064174942414/3523538816333842174' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/3523538816333842174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/3523538816333842174'/><link rel='alternate' type='text/html' href='http://javaarchramble.blogspot.com/2014/05/why-spring-boot-why-now.html' title='Why Spring Boot, why now? '/><author><name>Joshua Davis</name><uri>http://www.blogger.com/profile/10630084168049860089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyKSAAwDoasXgYegxE0iJSn-lY0wgimia82Zq3rLtAxh-BJ3nI4L8iDl0dcjlTazTrf2aFC0xLPHR4r6iEs6pQoSyoQcYS9zo58hPzruLEeHubkHC9nsMqwHZZLvMtxfg/s220/ProfilePhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4179812064174942414.post-5463396965772664061</id><published>2014-04-26T11:46:00.001-04:00</published><updated>2014-05-28T18:57:29.930-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cloud Foundry"/><category scheme="http://www.blogger.com/atom/ns#" term="Pivotal Cloud Foundry"/><category scheme="http://www.blogger.com/atom/ns#" term="Pivotal Cloud Foundry Install"/><title type='text'>Pivotal Cloud Foundry Setup Notes</title><content type='html'>I have been doing some Pivotal Cloud Foundry installs lately, here are some interesting things that I have run into:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Always use Chrome or Firefox, not Internet Explorer when you get to the point where you have to use the Operations manager.&lt;/li&gt;
&lt;li&gt;If you are going to install MySQL you need to allocate another 200GB or more.&lt;/li&gt;
&lt;li&gt;Make sure that you have at least a minimum of 32 IP addresses on the segment you will be deploying Cloud Foundry to.&lt;/li&gt;
&lt;li&gt;If you are not going to deploy many applications you can reduce the amount of NFS storage that you need. &amp;nbsp;The NFS storage is to hold the applications, not your actual data for your applications.&lt;/li&gt;
&lt;li&gt;Make sure that you use the vCenter Portgroup for the network name when setting up the vSphere Network. &amp;nbsp;Bosh uses this information to setup the Network Interface in Ubuntu. &amp;nbsp;If you don&#39;t do this correctly the install will fail even though it validates correctly.&lt;/li&gt;
&lt;li&gt;The NTP servers must be in exact synchronization with vSphere. &amp;nbsp;One solution is to use the Cloud Controller as the NTP server by starting it within the installation VM before you install Pivotal Cloud Foundry.&lt;/li&gt;
&lt;li&gt;If you run into problems installing Pivotal Cloud Foundry, especially if you have network issues it&#39;s much easier to just re-install from scratch then to try to fix it manually.&lt;/li&gt;
&lt;li&gt;Make sure that you have a wildcard domain already created in your DNS for your Cloud Foundry installation. &amp;nbsp;It does not say this exactly in the instructions but it won&#39;t work without it.&lt;/li&gt;
&lt;li&gt;The wildcard you put into the DNS must match the domains that you put into your self signed cert or public cert. &amp;nbsp;This is very important. &amp;nbsp;It will get to the end of the install and fail if you don&#39;t do this.&lt;/li&gt;
&lt;li&gt;The first user that is available to setup users is the UAA user. &amp;nbsp;The credentials for this user is in the &quot;Credentials&quot; table in Operations Manager for the Elastic Runtime.&lt;/li&gt;
&lt;li&gt;If you &quot;push&quot; an application to Cloud Foundry and it&#39;s taking a long time, or it seems to just not work when it is pushed delete the application and increase the memory for the application.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;h3&gt;
Important cf command line (cli) commands:&lt;/h3&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;cf target https://.... This command has to come first as it points the CLI to the correct PCF instance&lt;/li&gt;
&lt;li&gt;cf push &lt;appname&gt; &amp;nbsp;- Don&#39;t be surprised if there is a .yml file in the directory it will use that file for pushing it.&lt;/appname&gt;&lt;/li&gt;
&lt;li&gt;cf tail &lt;appname&gt; --app &lt;name&gt; tails the log file for all of the instances running the application&lt;/name&gt;&lt;/appname&gt;&lt;/li&gt;
&lt;li&gt;&lt;appname&gt;cf crashlogs --app &lt;name&gt;&amp;nbsp;&lt;appname&gt;&lt;appname&gt; this gives the crash log for when it is up and crashes. &amp;nbsp;&lt;/appname&gt;&lt;/appname&gt;&lt;/name&gt;&lt;/appname&gt;&lt;/li&gt;
&lt;li&gt;&lt;appname&gt;If you are having trouble with pushing applications use cf push &lt;app&gt; -t . &amp;nbsp;The -t option gives you a nice trace.&lt;/app&gt;&lt;/appname&gt;&lt;/li&gt;
&lt;li&gt;&lt;appname&gt;&lt;app&gt;cf delete --app &lt;appname&gt; deletes the app from cloud foundry&lt;/appname&gt;&lt;/app&gt;&lt;/appname&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h3&gt;
What do you do once you have PCF installed&lt;/h3&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class=&quot;gmail_default&quot; style=&quot;background-color: white; color: #222222; font-family: arial, sans-serif; font-size: small;&quot;&gt;
First, you need to install the &quot;CLI&quot; -&lt;/div&gt;
&lt;div class=&quot;gmail_default&quot; style=&quot;background-color: white; color: #222222; font-family: arial, sans-serif; font-size: small;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;gmail_default&quot; style=&quot;background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13.333333969116211px;&quot;&gt;
&lt;a href=&quot;http://docs.cloudfoundry.org/devguide/installcf/install-go-cli.html&quot; style=&quot;color: #1155cc;&quot; target=&quot;_blank&quot;&gt;http://docs.cloudfoundry.org/&lt;wbr&gt;&lt;/wbr&gt;devguide/installcf/install-go-&lt;wbr&gt;&lt;/wbr&gt;cli.html&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;gmail_default&quot; style=&quot;background-color: white; color: #222222; font-family: arial, sans-serif; font-size: small;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;gmail_default&quot; style=&quot;background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13.333333969116211px;&quot;&gt;
Then, you need to target the cloud foundry instance&lt;/div&gt;
&lt;div class=&quot;gmail_default&quot; style=&quot;background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13.333333969116211px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;gmail_default&quot; style=&quot;background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13.333333969116211px;&quot;&gt;
&lt;span style=&quot;font-family: courier new, monospace;&quot;&gt;-&amp;gt;&lt;b&gt;cf target&amp;nbsp;&lt;a href=&quot;http://api.southeast1.fe.gopivotal.com/&quot; style=&quot;color: #1155cc;&quot; target=&quot;_blank&quot;&gt;api.southeast1.fe.gopivotal.&lt;wbr&gt;&lt;/wbr&gt;com&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: courier new, monospace;&quot;&gt;Setting target to&amp;nbsp;&lt;a href=&quot;https://api.southeast1.fe.gopivotal.com/&quot; style=&quot;color: #1155cc;&quot; target=&quot;_blank&quot;&gt;https://api.southeast1.fe.&lt;wbr&gt;&lt;/wbr&gt;gopivotal.com&lt;/a&gt;...&amp;nbsp;OK&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;gmail_default&quot; style=&quot;background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13.333333969116211px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;gmail_default&quot; style=&quot;background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13.333333969116211px;&quot;&gt;
Then you need to login, using the administrator for UAA that you retrieve off of the &quot;Credentials&quot; tab in the Elastic Runtime from Pivotal Operations Manager.&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;gmail_default&quot; style=&quot;background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13.333333969116211px;&quot;&gt;
&lt;span style=&quot;font-family: &#39;courier new&#39;, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;gmail_default&quot; style=&quot;background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13.333333969116211px;&quot;&gt;
&lt;span style=&quot;font-family: &#39;courier new&#39;, monospace;&quot;&gt;&lt;b&gt;-&amp;gt;cf login&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;gmail_default&quot; style=&quot;background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13.333333969116211px;&quot;&gt;
&lt;span style=&quot;font-family: courier new, monospace;&quot;&gt;target:&amp;nbsp;&lt;a href=&quot;https://api.southeast1.fe.gopivotal.com/&quot; style=&quot;color: #1155cc;&quot; target=&quot;_blank&quot;&gt;https://api.southeast1.fe.&lt;wbr&gt;&lt;/wbr&gt;gopivotal.com&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: courier new, monospace;&quot;&gt;Email&amp;gt;&amp;nbsp;jdavis&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: courier new, monospace;&quot;&gt;Password&amp;gt;&amp;nbsp;*******&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: courier new, monospace;&quot;&gt;Authenticating...&amp;nbsp;OK&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: courier new, monospace;&quot;&gt;1: org1&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: courier new, monospace;&quot;&gt;2: org2&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: courier new, monospace;&quot;&gt;3: jdavis-org&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: courier new, monospace;&quot;&gt;Organization&amp;gt;&amp;nbsp;3&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: courier new, monospace;&quot;&gt;Switching to organization&amp;nbsp;jdavis-org...&amp;nbsp;OK&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: courier new, monospace;&quot;&gt;1: development&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: courier new, monospace;&quot;&gt;2: production&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: courier new, monospace;&quot;&gt;3: staging&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: courier new, monospace;&quot;&gt;Space&amp;gt;&amp;nbsp;1&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: courier new, monospace;&quot;&gt;Switching to space&amp;nbsp;development...&amp;nbsp;OK&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;gmail_default&quot; style=&quot;background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13.333333969116211px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;gmail_default&quot; style=&quot;background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13.333333969116211px;&quot;&gt;
&lt;a href=&quot;http://docs.cloudfoundry.org/adminguide/cli-user-management.html&quot; style=&quot;color: #1155cc;&quot; target=&quot;_blank&quot;&gt;http://docs.cloudfoundry.org/&lt;wbr&gt;&lt;/wbr&gt;adminguide/cli-user-&lt;wbr&gt;&lt;/wbr&gt;management.html&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;gmail_default&quot; style=&quot;background-color: white; color: #222222; font-family: arial, sans-serif; font-size: small;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;gmail_default&quot; style=&quot;background-color: white; color: #222222; font-family: arial, sans-serif; font-size: small;&quot;&gt;
In general, I would start taking a look at this documentation to learn more about operating PCF:&lt;/div&gt;
&lt;div class=&quot;gmail_default&quot; style=&quot;background-color: white; color: #222222; font-family: arial, sans-serif; font-size: small;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;gmail_default&quot; style=&quot;background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13.333333969116211px;&quot;&gt;
&lt;a href=&quot;http://docs.cloudfoundry.org/&quot; style=&quot;color: #1155cc;&quot; target=&quot;_blank&quot;&gt;http://docs.cloudfoundry.org/&lt;/a&gt;&lt;div class=&quot;yj6qo ajU&quot; style=&quot;cursor: pointer; outline: none; padding: 10px 0px; width: 22px;&quot;&gt;
&lt;div aria-label=&quot;Show trimmed content&quot; class=&quot;ajR&quot; data-tooltip=&quot;Show trimmed content&quot; id=&quot;:ht&quot; role=&quot;button&quot; style=&quot;background-color: #f1f1f1; border: 1px solid rgb(221, 221, 221); clear: both; line-height: 6px; outline: none; position: relative; width: 20px;&quot; tabindex=&quot;0&quot;&gt;
&lt;img class=&quot;ajT&quot; src=&quot;https://mail.google.com/mail/u/1/images/cleardot.gif&quot; style=&quot;background: url(https://ssl.gstatic.com/ui/v1/icons/mail/ellipsis.png) no-repeat; height: 8px; opacity: 0.3; width: 20px;&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://javaarchramble.blogspot.com/feeds/5463396965772664061/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/4179812064174942414/5463396965772664061' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/5463396965772664061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4179812064174942414/posts/default/5463396965772664061'/><link rel='alternate' type='text/html' href='http://javaarchramble.blogspot.com/2014/04/pivotal-cloud-foundry-setup-notes.html' title='Pivotal Cloud Foundry Setup Notes'/><author><name>Joshua Davis</name><uri>http://www.blogger.com/profile/10630084168049860089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyKSAAwDoasXgYegxE0iJSn-lY0wgimia82Zq3rLtAxh-BJ3nI4L8iDl0dcjlTazTrf2aFC0xLPHR4r6iEs6pQoSyoQcYS9zo58hPzruLEeHubkHC9nsMqwHZZLvMtxfg/s220/ProfilePhoto.jpg'/></author><thr:total>1</thr:total></entry></feed>