Sitecore is THE BEST Web Content Management System (WCM) available on the market. If you in the midst of an RFP (Request for Proposal) for a WCM, I bet you have Sitecore as one of the finalists. I am not surprised! You may want to check the Gartner’s magic quadrant for WCM 2014, Sitecore positioned furthest in Completeness of Vision in Gartner Magic Quadrant for Web Content Management
This blog post is for all those who want have glimpse of what Sitecore is all about. I have worked with 6.5 and 7.0 versions of Sitecore. All the following information is relevant to Sitecore 7.0. Please note that, Sitecore have major enhancements to versions 7.5 and the current version 8.0 (beta at the time of writing of this post). Describing these enhancements is out of scope of this blog post.
If you are starting off a new project with Sitecore, I would highly recommend to go with versions 7.5 and above. Sitecore has invested a lot of time and effort to build a highly scalable, high performance web content management system. And upgrading from version 7.5 to 8.0 is a lot more easier that upgrading from 7.0 or less to 8.0.
Lets get started, following is the overall view of what Sitecore 7.0 offers as products.
Sitecore Overview – Products offered
Sitecore is not all about just publishing content onto your websites. Its does a lot more and is packaged with lot of great products and intelligence. Sitecore is built on .NET framework and I am sure Microsoft cannot be more prouder than this, having the best WCM built on their framework.
Following is the high level summary of these products. I will try to add more posts on explaining these products in detail.
- WCM (Web content management): This is the core functionality which does the publishing of the content. and this is best among the products offered.
- CEP (Customer Engagement Platform): This platform is dedicated to provide an elegant, integrated solutions that connects channels, engagement automation, and engagement analytics, with external tools and databases
- DMS (Digital Marketing Suite): The best suite available in the market for advanced online marketing capabilities like Campaign Management, web analytics, visitor profiling etc
- Solution Accelerators: These are pre-built extensions for Sitecore like E-Commerce, Intranet platform etc to accelerate your implementation.
- AppCenter : This is a portal to sign up for various apps like email delivery etc., spam detect etc
 2014 Gartner Magic Quadrant for Web Content Management
Cloud platforms have plethora of options and they come in many flavors. Be it Microsoft Azure, Rackspace, AWS, Oracle or any cloud platform of your choice, all of these are unique and are irreplaceable. But they all share one common offering i.e. Infrastructure as Service (IaaS) and Platform as a Service (PaaS). IaaS is the most basic and widely adapted cloud offering. PaaS is gaining popularity and would be the default choice in near future, but not at the time of writing this blog.
So if you are Cloud Applications developer, it is key that you understand what IaaS/PaaS is and things to bear in mind while developing applications for cloud platforms.
If you assumed that Cloud or Cloud Computing is nothing but a mere collection of millions and millions of VMs/servers remotely hosted and maintained by someone else. Also deployment is all about copying and pasting your code on to those servers! I am afraid you are wrong!
Developing cloud applications is not just mere copy and paste, there is much more to that.
This post will cover few examples that would influence your thought process while developing applications for cloud. Again, there are many more, many more things to consider while developing apps for Cloud platforms.
The following is an honest attempt to influence you to adopt different prospective while you design Cloud apps.
- Automation of Deployments and Hardware Provisioning
- There are high chance that you may not have been concerned about hardware provisioning with traditional development. But with cloud application development, it is key that you are aware of automation all your hardware provisioning and deployments.You could leverage Windows Azure Object Model that helps automate lot of things that are typical with Cloud application development like creation of VMs, Websites, Storage Accounts etc.
- You my leverage C#, PowerShell scripts or popular tools like Chef , Puppet for IT/Deployment automation.
- Automation is one of the key design principles of Cloud application development and highly recommended by Microsoft. This will not only minimize errors but also makes it easier to create and deploy items repeatedly.
- Example: Consider a scenario where you were requested to create a developer VMs for 20 developers with with Windows Server 2012 R2, SQL Sever R2, IIS 8.0, Sharepoint 2010, MS office and other supporting tools.
- What is the first thought you get? I am sure you are tempted to create 20 VMs on Azure portal, RDP onto these machines and install these software. I bet even if you spend like 2 to 3 hours for each VM it would take 60 hours i.e. close to two business weeks.
- You might have also thought that, I would create one instance, generalize it and create the rest out of it correct? Note that some software cannot be part of generalization of VM and therefore cannot part of template
- Solution: Use scripts or any kind of automation of your choice.
Write a script to create and spin up these 20 VMs. This can be easily done using Power Shell scripts often with few lines of code. This could hardly take an hour or two.
The other issue with software that doesn’t support generalization or bundling with VM images/templates, you could read Bootstrapping a Virtual Machine with Windows Azure, by Michael Washam.
- Budgeting and Cost Conscious
- As a traditional developer cost is not something you would consider while developing. But when you are designing for Cloud apps everything come with a price. For instance, your design choice storing your data in-memory vs. database can have huge impact on pricing.
- Based on your application design choice you my end up saving a ton or pay the price for not having cost as as important parameter
- Cost calculation is as important as application design, development and testing. This should be an integral part of design.
- Fluid/Adaptive design choices
- The beauty of cloud platforms is you can start with minimal configuration and grow as needed. So your design should be flexible to adapt to changing hardware, it could be reduced CPU utilization or memory allocations or additional servers added to the NLB, it could be anything.
- You design choices are critical for Cloud development. For instance, for Session management, you have to prefer Outproc session management to Inproc while using ‘Swap Deployment‘ feature with Azure.What it means is that virtual IPs swap between the staging and production environments for a service. If the service is currently running in the staging environment, it will be swapped to the production. If it is running in the production environment, it will be swapped to staging.So if are leveraging Inproc session management, you would loose your state, it id ideal that you choose Outproc session management.Please see the below screen capture highlighting ‘Swap’ feature under instances.
Swap Deployment with Microsoft Azure
- High availability, Performance and Fault Tolerance
- Most of the Cloud providers will have an SLA of 99.5 and above for availability. This is valid only if you provision at least two instance for every service. Developers should be aware of this.
- If you choose only one instance, your application may be temporarily unavailable while patching or reboots.
- Another important feature that every developer should understand is Affinity Groups.These allow to group your Azure services to optimize performance. All services and VMs within an affinity group will be located in the same region. For instance, it is ideal that you may associate your application and supporting database servers to the same Affinity group to avoid any network latency and increase performance.
Conclusion: It is key to understand that developing Cloud based application development is not same as traditional development. You should start with leaving aside our ego and stop acting that developing for Cloud Platforms, is no different to traditional development. And stop thinking developing for Cloud platforms is all about logging on to a VM, copy-paste, deploy and configure. As a matter of fact, I was under the same impression and attitude when started picking up Azure. Its time to digest the notion that Cloud application development has lot more different in terms of design, development and cost AND IS NOT ALL ABOUT VMs.