Thursday, February 9, 2017

MinRole for SharePoint 2016 and the November 2016 Public Update

The Beauty of MinRole

SharePoint 2016 introduced a host of new features, including MinRole. MinRole promised easier administration of SharePoint servers. You can read about how it was touted to simplify deployment, improve performance and reliability, and simplify capacity planning and farm scalability here, All you had to do when you installed SharePoint 2016 was select one of the predefined roles in the configuration wizard:

If you selected "Front-end", "Application", "Distributed Cache", or "Search", SharePoint would take care of installing the appropriate bits and turning on the appropriate services on the server.

Microsoft had learned a lot from running SharePoint at a massive scale in Office 365. They were passing that learning on to us.

The Problem with MinRole

The problem with MinRole at RTM was that it was generally more beneficial for companies that ran large farms (much like Microsoft did in the cloud). If you wanted to run a highly available MinRole farm that also runs workflow and office online server, you would generally need about 15 servers for just one environment:

For many small to mid-size organizations that want to keep their SharePoint environment on premises, this is a lot of infrastructure, especially considering that most organizations need at least two more environments: Staging and Disaster Recovery. MinRole, just wasn't an Custom was the option to select in the Configuration different than how it would be done in SharePoint 2013.

The Solution

Starting with the November 2016 Public Update for SharePoint Server 2016 Microsoft introduced the concept of Shared roles. Instead of each server having 1 of 4 distinct roles, servers could now share roles. So, Front End and Distributed Cache could be combined and Application and Search could be combined. The new configuration wizard now looks like this:

A fully built out, highly available SharePoint 2016 farm using shared min roles was now 11 servers instead of 15, which is a little easier to swallow, especially considering many small organizations don't implement the workflow functionality and would only have 8 servers

Lessons Learned

I really like that Microsoft is leveraging its experience with cloud technologies to bring them to on-premises or hybrid installations. I would love to see more of that. I also like that Microsoft quickly reacted to customers' feedback about the number of servers required for a fully scaled out MinRole environment and made adjustments to suit the needs of the small to mid-size businesses.

Friday, May 8, 2015

Microsoft's Ignite Conference SharePoint Updates and Announcements

As Microsoft's Ignite Conference winds down, there have been several SharePoint-related updates and announcements:

SharePoint 2016 will ship in the second quarter of 2016 and will include the following enhancements:
  •  Patching SharePoint 2016 will require zero downtime! Yay!!! In addition to that, distributed cache is being enhanced to support increased uptime. Microsoft is promising the capability to deliver 99.99% up-time with SharePoint 2016 on premises!
  • SharePoint 2016 will require SQL server 2014 or later
  • There is a new “min role” installation option. This codifies the server role by laying down only the bits it needs to fulfill the role. The roles include Web Front End, Caching, Application, Search, and Specialized.
  • Content DBs will be allowed to scale to TBs
  • The list threshold soft limit will be significantly increased beyond the current 5,000
  • Maximum file size limit will be increased to 10 GB.
  • There is a new “fast site creation” capability which basically creates sites from a “base version” stored in the database. Creating a team site, for example will simply require copying a few rows from the database and will take a matter of a seconds.
In addition to the SharePoint 2016 announcements, there were several announcements for hybrid scenarios:
  • There will be a wizard-like process for setting up and creating hybrid team sites, extranets, and search capabilities
  • Office Graph and Delve capabilities will be enabled for SharePoint on premises beginning with SharePoint 2013 later this year.
  • Microsoft is investing heavily in hybrid scenarios and we can expect to see much more coming in this area.
Windows 10 will be the last “version” of Windows. It will continue to receive small, incremental updates…similar to how other browsers are updated.
One consistent message has been that Office 365 is NOT well suited for traditional

branding customizations (custom mater pages and site definitions). Microsoft continues to take the stance that Office 365 should ONLY be customized through the app model and custom apps.

There still is no good forms story for SharePoint. There was no big announcement. The message remains…use out of the box and InfoPath forms for simple stuff. Use third party tools or custom development for more complex forms
OneDrive continues to play a huge role in the Microsoft ecosystem as they try to get enterprises to go to the cloud. Microsoft openly acknowledged that OneDrive for Business has had its share of issues. However, they have stated that improving OneDrive for Business is THE #1 PRIORITY for the SharePoint team.

This is by no means a comprehensive list. I encourage you to check out the session videos on Channel 9:

Thursday, July 24, 2014

Getting Values from SharePoint 2013 Property Bags

SharePoint 2013 has a hierarchical set of property bags. At each of the following levels in a SharePoint farm, one can store properties and their corresponding values:
  • Farm
  • Web Application
  • Site
  • Web
  • List
This can be extremely handy when writing code. For example, if you have four different environments (Development, QA, Staging, Production), you could store properties in each  environment's farm property bag that specifies things like connection strings, debugging constants, or host URLs.

It's even handier when you have a simple means to extract these properties from the property bag in your code. I generally make a class (FarmProperty in the example below) with a "Get" method that extracts the string value for the given property.

    public class FarmProperty
        public static string Get(string name)
            string value = null;
            SPSecurity.RunWithElevatedPrivileges(() =>
                var farm = SPFarm.Local;
                foreach (var prop in farm.Properties.Cast<DictionaryEntry>().Where(prop => prop.Key.Equals(name)))
                    value = prop.Value.ToString();
            return value;

To use this code, just call the Get method on the FarmProperty class. If the property doesn't exist, it will return null.

    var reportServerHost = FarmProperty.Get("ReportServerHost");