First, a definition of terms to ensure a common understanding:
- Web-Scale is the buzz-word for Cloud-native applications that consist of micro-services running from “Containers” that can dynamically auto-scale to meet varying demand. The term is borrowed from public cloud companies that specialise in specific micro-services (eg. Twitter, Facebook, Google, Amazon) with custom built, bare-bones hardware and is being applied to the Enterprise.
- Containers are the next evolution of abstraction, where the micro-service application is abstracted from the Guest Operating System. This allows the “Application Container” to be executed on any container platform regardless of vendor. To me, it is a very similar concept to what Sun Microsystems did with Java Virtual Machines in 1995 (before the invention of the Type-1 hypervisor).
- DevOps (Developer Operations) is a term that describes the team work and close alignment between Development and Operations. The primary goal of DevOps is to shorten the release cycle and increase the throughput of “work” to deliver features and services to the customer. You can use DevOps for any generation of technology to optimise the flow of work, however an organisation that is using Web-Scale infrastructure with Cloud-native applications and tools will have the highest “run-rate” compared to legacy solutions.
- Hybrid Cloud is the ideal blend of “rent, lease or own” for cloud resources. It is a Private Cloud solution (Owned) connected to a Public Cloud (Rented/Leased) where an organisation can “Cloud Burst” into the Rented or Leased resources during periods of peak usage. This could be using Virtual Machines or Containers. Note that a variation of hybrid cloud could be Public Cloud A (eg. AWS) to Public Cloud B (eg. Azure).
Second, the traditional Enterprise journey to the “Cloud” has the following steps (or similar):
- Virtualise x86 Server Workloads (P2V).
- Incorporate Advanced Operations and Disaster Recovery into the Virtual Infrastructure with possibly some type of scripting for automating repetitive tasks.
- Application transformation of non-x86 workloads to virtualised x86.
- Incorporate a Cloud Management Platform and publish some form of a Self-Service Catalogue with Application Blueprints. Initially for Test and Development, before employing with Production services.
Third, in recent years, these additional “Web-Scale” steps have now been appended to the “Cloud” journey:
- Transform the Data Center to the SDDC (Network and Storage Virtualisation).
- Start experimenting with Cloud-native apps, Containers and DevOps.
How has this influenced the consulting process for infrastructure design? All of the designs I produce, I consider the following layers of Web-Scale:
- Web-Scale Infrastructure
- Web-Scale DevOps (People & Process)
- Web-Scale Applications
- DevOps Tools
Where each layer is an increase in difficulty and therefore must be mastered before proceeding to the next.
Using a HCI vendor solution to augment and replace Legacy, Vertically-scaled 3-Tier infrastructure is the easy part. With a minimum of effort you can start consuming HCI and immediately realise the benefits of “invisible“ infrastructure.
Most HCI vendors have features and mechanisms built into their solutions that allow legacy, vertically tiered applications to thrive on HCI infrastructure (eg. Metro-Storage Clustering, Asynchronous Replication).
It gets harder when you deploy HCI at scale, you need to make sure you have next-gen Data Center facilities to power and cool the high-density infrastructure. You also need to transform how your staff and processes/procedures interact with the infrastructure.
- Nutanix, SimpliVity, CohoData, VMware, EMC, HP, Atlantis, Maxta, Scale Computing, Nimbox, Steel Fusion, Piston Cloud, StarWind, etc.
Web-Scale DevOps (People & Process)
This is the most important part of the puzzle. If you do not have an organisation that is willing to collaborate and try new things and fail repeatedly while learning this new skill, then they are not ready for change.
Web-Scale, DevOps and Cloud-native is really about organisational transformation. The information flow and neural network of a “Web-Scale” company is very different from a similar company following the “Legacy” way of doing things.
If a company is willing to try new things and have a genuine need for the “higher run-rate”, then DevOps could be their future operating model.
For DevOps to work, you need a “Dev” team. This is a pool of skilled developers who maintain the code base for each Release cycle. They can initially increase the cadence of releases for legacy, vertically tiered applications and eventually transform these applications into micro-services running from containers. This is going to take a lot of time, it will not occur overnight. A serious investment in consulting, training, transformation and tools will be required, including the breakdown of traditional organisational silos.
Then you need the “Ops” team to provide the infrastructure and tools that will allow the “Dev” team to be more agile. They must also be willing to break-down their silos and become team players.
- Kanban, Agile, Continuous Integration, Continuous Delivery, Continuous Deployment, etc.
Depending upon whether you have your own development team or just purchase “off the shelf” solutions, this will have a big impact on how you transform your legacy, vertically tiered applications to Cloud-native micro-services.
If you have a significant investment in legacy, vertically tiered applications, it is going to be very difficult to transform to Cloud-native micro-services and Containers. In fact, it may make sense to use Cloud-native only for your home-grown applications that are your core business and require a high release rate and keep the rest of your “legacy, off-the-shelf” applications as is (eg. Microsoft Exchange, SharePoint, Oracle HRMS, etc.).
- Cloud-native Applications: SAP HANA, Hadoop, Cloud Foundry, etc.
- Containers: Docker, Rocket, VMware Photon, Kuberneties, Mesosphere, Kismatic, etc.
Web-Scale DevOps Tools
Once you have the people and processes in place (manually operated), the next step is to automate these processes and reach the peak of work throughput in your organisation. Here are some of the tools you can use to do that:
- Continuous Integration/Continuous Delivery/Continuous Deployment (CICD): Jenkins, CodeStream, etc.
- Source Code Management: Git/Github
- Log Analysis: Splunk, vRealize LogInsight, ELK stack (Elasticsearch, Logstash and Kibana), SignalFX
- Environment Provisioning: Vagrant, Razor
- Image Creation: Packer
- Configuration Management: Puppet, vRealize Configuration Manager, Ansible
- Infrastructure Automation: Chef (with Knife)
- Automation: PowerShell, vRealize Automation, vRealize Orchestrator, vRealize Application Services
Some of the questions that I ask as part of the consulting process:
- What is the required “run-rate” of development for this organisation or targeted application? Maybe they are not ready for Web-Scale applications.
- How siloed is this organisation? Do they communicate effectively and work as a team?
- What applications do they have? From which vendors? Do these vendors have Cloud-native versions on the way?
- What percentage of their application list is home-grown and supported by their own developers?
- Do they have a small application that could be the first candidate Cloud-native application, with Containers and DevOps?
In summary, my designs provide a step in the right direction for Enterprise customers. They include a “Web-Scale” framework and a “Web-Scale” migration plan, which provides a strategy that can be executed over a number of years. “Web-Scale” is not an immediate solution or a switch that can be flicked, but a progressive journey to a better way of doing business. In my opinion, future enterprises will most likely have a mix of home grown Cloud-native micro-services and legacy, vertically tiered off-the-shelf applications.