This is a short blog which briefly discusses Shared Service Architecture in a multi farm environment.   I will discuss some core components and describe how these components work together.  I will not go into exact setup steps due to the fact TechNet has a great run through here:

 

Exchanging Certs:      http://technet.microsoft.com/en-us/library/ee704552(office.14).aspx

Publishing a Service Application:    http://technet.microsoft.com/en-us/library/ee704545(office.14).aspx

Connecting to a Published Service Application:  http://technet.microsoft.com/en-us/library/ee704558(office.14).aspx

Special shout-out goes to Ram and Sheyi for some great contributions to this blog.   I recommend reviewing Shared Service Architecture Part 1 blog to build a foundation before continuing further.

 

Basics

SharePoint 2010 Shared Service architecture has been revamped to provide great flexibility in a single farm.   This flexibility in a single farm has been extended to include multiple farms.   For Example, Shared Services can exist in a farm I’ll call “Services Farm”.   All content like SharePoint sites and My-Sites reside in a farm called “Consumer Farm”.   A services farm consists of multiple shared services that can be published and made available to remote farms.   The Consumer Farm can connect to a published service application from the services farm and consume from it.  

For Example:

Services Farm: Published Search Service Application and give Admin access via permissions button for the specified service application.

Consumer Farm:  Consumes Search Service Application from Services Farm

Action from Consumer FarmUser accessing a site performs a search

Results from Services Farm: Search results are pulled from Services Farm.

 

Initial Deployment is a four step process. 

  1. Setup trust between farms by copying\importing  root\STS security token certificates

          Note:  The STS cert is provided to the Publishing farm from the Consumer farm

    2.   On the services farm, publish shared service applications making them available to other farms

    3.   Set Permissions on who can access the published shared service applications

    4.  The consumer farm will use Connect button to discover the services in a destination farm and to create a Proxy to a Shared service in a remote farm.

Note:  A successful attempt at step 4 creates a service application proxy and places in a proxy group within the Consumer farm.  Only web applications mapped to the same proxy group will consume from this published service application.

 

Topology Discovery Service Application

This is known as the Application Discover and Load Balancer Service Application, “I’ll refer to as the topology service”. Within IIS, it’s listed as Topology and runs using WCF web service. 

 

Central Administrator:

clip_image001

 

IIS:

clip_image002

Without a Topology Discovery Service Application, consuming services across farms is not possible.  Why it’s not possible will be answered when the entire blog has been reviewed.

 

Functions of Topology Service on publishing farm

In a services “publishing” farm, the topology service provides a list of published shared service applications that are available for consumption.  It also keeps track of which Published Shared Service application instances are online\offline so that it consistently maintains a fresh list of URI’s.   It maintains a cache of these URI’s to avoid multiple round trips to the configuration database.

 

Functions of Topology Service on consuming farm

The topology service functions in a consuming farm take effect only after a connection is established.  That is, a service application proxy is created on a consumer farm that connects to service application in publishing farm.   In a consumer farm, the topology service connects to the Publishing farms (remote) topology service to retrieve a list of added/removed URI’s.  A timer job controls when this takes place called the Application address refresh timer job.  The default is every 15 minutes.  When it runs, it calls the Publishing farm’s Topology Web Service to retrieve the updated service end-point URI list.  If there is any change, it will update the associated service application proxy.

 

Load Balancer 

The load balancer component provides two functions in a content farm:

1. It ensures request from service application proxies are evenly distributed to remote published shared service instances.

2. Maintains a list of fresh URI’s

On a consumer farm, when a service application proxy is first provisioned that is consuming service in a remote publishing farm,  the service application proxy directly connects to the publishing farms remote topology service to get the list of available URI’s (See the troubleshooting section for more details).  It stores these URI’s in a load balancer cache.  Therefore, each service application proxy in a consuming farm contains a unique load balancer component.   After the initial provision, the load balancer component will not attempt to connect to the remote topology service again to receive URI updates.   It will only receive updates from the local topology service via the Application address refresh timer job.  

Question: What if a load balancer discovers service connection endpoints are down?

Answer: It maintains freshness in that when it discovers service endpoints are no longer available it marks them as down for a period of time and will not use it until that time period has expired.   For further service calls, the load balancer tries to get the next available URI from its cache.   When the time period is over, it will bring the downed link back online.

 

 

Troubleshooting Topology Service (basics)

This section will uncover what takes place behind the scenes “what the trace logs look like” on various aspects of multi farm communication.   I’ll cover each action in its own section.  The data provided will display a glimpse of healthy activity and can be used as a reference based on the type of action taken.  

 

Connecting to Topology Service to consume Search Service Application

In this example, SharePoint administrator in consumer farm is connecting to topology service in publishing farm and selecting a Search Service Application to consume from it: 

03/08/2010 09:03:03.08         w3wp.exe (0x0A00)               0x07AC    SharePoint Foundation           Logging Correlation Data       xmnv       Medium                Name=Request (POST:http://consumerfarm:4444/_admin/ServiceApplicationConnect.aspx?IsDlg=1)           bcb6e7a2-4749-4c2d-99d0-49ad45544e1d

03/08/2010 09:03:03.11         w3wp.exe (0x0A00)               0x07AC    SharePoint Foundation           Topology 84cy        Verbose   Retrieving shared service application information for url: 'https://servicesfarm:32844/Topology/topology.svc'          bcb6e7a2-4749-4c2d-99d0-49ad45544e1d

03/08/2010 09:03:03.11         w3wp.exe (0x0A00)               0x07AC    SharePoint Foundation           Topology 84d0        Verbose   The specified url is not topology service load balanced. Assuming the uri is hardware load balanced for the topology service 'https://servicesfarm:32844/Topology/topology.svc'          bcb6e7a2-4749-4c2d-99d0-49ad45544e1d

03/08/2010 09:03:03.30         w3wp.exe (0x0A00)               0x07AC    SharePoint Foundation           Topology e5mc       Medium  WcfSendRequest: RemoteAddress: 'https://servicesfarm:32844/Topology/topology.svc' Channel: 'Microsoft.SharePoint.ITopologyWebServiceApplication' Action: 'http://tempuri.org/ITopologyWebServiceApplication/EnumerateSharedServiceApplications' MessageId: 'urn:uuid:ace71aeb-f378-41d2-8593-e43af416c98b'        bcb6e7a2-4749-4c2d-99d0-49ad45544e1d

03/08/2010 09:03:03.44         w3wp.exe (0x0A00)               0x07AC    SharePoint Foundation           Logging Correlation Data       xmnv       Medium                Name=Request (GET:http://consumerfarm:4444/_admin/SelectApplication.aspx?proxyId=&typeId=&IsDlg=1)            1aeaeebc-e766-41af-89c7-9d4ece0f24b0

03/08/2010 09:03:03.44         w3wp.exe (0x0A00)               0x07AC    SharePoint Foundation           Topology 84d3        Verbose   The specified url is a topology service url. Not filtering retrieved results              bcb6e7a2-4749-4c2d-99d0-49ad45544e1d

03/08/2010 09:03:03.45         w3wp.exe (0x0A00)               0x07AC    SharePoint Foundation           General   6t8b         Verbose   Looking up context  site http://consumerfarm:4444/_admin/SelectApplication.aspx?proxyId=&typeId=&IsDlg=1 in the farm SharePoint_Config2             140e4dd4-fa79-47f9-b0c5-9e638dad9258

03/08/2010 09:03:03.45         w3wp.exe (0x0A00)               0x07AC    SharePoint Foundation           General   6t8h         Verbose   Found typical site / (cd40b0f0-3b69-484a-94b6-30bdb2def735) in web application SPAdministrationWebApplication.  140e4dd4-fa79-47f9-b0c5-9e638dad9258

03/08/2010 09:03:03.50         w3wp.exe (0x0A00)               0x07AC    SharePoint Foundation           Topology 84d4        Verbose   Getting supporting proxy types for application 'Search Service Application 1' using proxyId '00000000-0000-0000-0000-000000000000' and typeId '00000000-0000-0000-0000-000000000000'       140e4dd4-fa79-47f9-b0c5-9e638dad9258

03/08/2010 09:03:03.50         w3wp.exe (0x0A00)               0x07AC    SharePoint Foundation           Topology 84d5        Verbose   Found supporting proxy '' for application 'Search Service Application 1'    140e4dd4-fa79-47f9-b0c5-9e638dad9258

03/08/2010 09:03:11.67         OWSTIMER.EXE (0x0FEC)      0x11AC    SharePoint Server Search       Administration        dk3p        Verbose SearchService.Provision: Begin.             5483fb53-a1f1-4cec-b08f-803a4b15d422

03/08/2010 09:03:11.67         OWSTIMER.EXE (0x0FEC)      0x11AC    SharePoint Server Search       Administration        dk3s        Verbose SearchService.Provision: End.                5483fb53-a1f1-4cec-b08f-803a4b15d422

 

Communication to web services

In this example, user Dan is attempting to edit his profile and populate some properties.   He is logged into Consumer farm which is consuming Profile Service application in services farm.  To find which URI is being used by the User Profile Service Application Proxy, filter the ULS log to (category = Topology and Message contains = WcfSendRequest). 

03/08/2010 06:05:01.23         OWSTIMER.EXE (0x0FEC)      0x1134    SharePoint Foundation           Topology e5mc       Medium  WcfSendRequest: RemoteAddress: 'http://servicesfarm:32843/fe60ff7b10af4828a2b76ca61ee38da6/ProfilePropertyService.svc' Channel: 'Microsoft.Office.Server.UserProfiles.IProfilePropertyService' Action: 'http://Microsoft.Office.Server.UserProfiles/GetProfileProperties' MessageId: 'urn:uuid:6868c5bd-a277-4593-ba77-4821840c713f'           

03/08/2010 06:30:07.16         OWSTIMER.EXE (0x0FEC)      0x0A60    SharePoint Foundation           Topology e5mc       Medium  WcfSendRequest: RemoteAddress: 'http://servicesfarm:32843/fe60ff7b10af4828a2b76ca61ee38da6/ProfileDBCacheService.svc' Channel: 'Microsoft.Office.Server.UserProfiles.IProfileDBCacheService' Action: 'http://Microsoft.Office.Server.UserProfiles/GetUserData' MessageId: 'urn:uuid:cd65949f-cccd-425c-8c43-de26e4db9c79'             ffbe7cb1-0db1-4966-8196-f533c54eaccf

This is ideal for troubleshooting in that you can see the URI specified.  Also, this is a valid first step to validate were successfully reaching the service application instance.   This could also be coupled with Netmon and\or Fiddler to get a complete picture.

 

Application address refresh timer job

Again, the Application Address refresh timer job executes on consumer farm and connects to remote Services farm’s topology service.  It fetches changes (Added\Removed URI’s).   In the following example, the consumer topology component is fetching the latest changes for one published service application.   In this example, no updated changes are discovered.

03/08/2010 14:32:16.48         OWSTIMER.EXE (0x0FEC)      0x1200    SharePoint Foundation           Logging Correlation Data       xmnv       Medium                Name=Timer Job job-spconnectedserviceapplication-addressesrefresh             5af1cadb-02f8-4522-a6ab-a5451a738e26

03/08/2010 14:32:15.47         OWSTIMER.EXE (0x0FEC)      0x0AD4   SharePoint Foundation           Timer      5utp         Verbose   Scheduled timer job Application Addresses Refresh Job, id {879484E3-BFEB-436E-9FC1-B26C810BCA29} at 08 Mar 2010 14:32:16 -0800 (now is 08 Mar 2010 14:32:15 -0800)               

03/08/2010 14:32:16.48         OWSTIMER.EXE (0x0FEC)      0x1200    SharePoint Foundation           Topology e5mc       Medium  WcfSendRequest: RemoteAddress: 'https://servicesfarm:32844/Topology/topology.svc' Channel: 'Microsoft.SharePoint.ITopologyWebServiceApplication' Action: 'http://tempuri.org/ITopologyWebServiceApplication/GetEndPoints' MessageId: 'urn:uuid:282a3a03-4a87-4d81-9fb0-be529953cdf6'       5af1cadb-02f8-4522-a6ab-a5451a738e26

03/08/2010 14:32:16.48         OWSTIMER.EXE (0x0FEC)      0x1200    SharePoint Foundation           Monitoring              nasq        Verbose   Entering monitored scope (ExecuteWcfOperation:http://tempuri.org/ITopologyWebServiceApplication/GetEndPoints)              5af1cadb-02f8-4522-a6ab-a5451a738e26

03/08/2010 14:32:16.53         OWSTIMER.EXE (0x0FEC)      0x1200    SharePoint Foundation           Topology 3ls4         Verbose   Application addresses for connected application: 46ad8378-690c-4568-b8d8-2485b1b89c1b are up-to-date             5af1cadb-02f8-4522-a6ab-a5451a738e26

03/08/2010 14:32:16.53         OWSTIMER.EXE (0x0FEC)      0x1200    SharePoint Foundation           Monitoring              b4ly         Verbose   Leaving Monitored Scope (ExecuteWcfOperation:http://tempuri.org/ITopologyWebServiceApplication/GetEndPoints). Execution Time=49.8323110898173                5af1cadb-02f8-4522-a6ab-a5451a738e26

03/08/2010 14:32:17.31         OWSTIMER.EXE (0x0FEC)      0x1200    SharePoint Foundation           Monitoring              b4ly         Medium  Leaving Monitored Scope (Timer Job job-spconnectedserviceapplication-addressesrefresh). Execution Time=830.343800678578             5af1cadb-02f8-4522-a6ab-a5451a738e26

 

-Russ Maxwell, MSFT