Service Bus symmetry
Whether your application runs in the cloud or on premises, it often needs to integrate with other applications or other instances of the application. Windows Azure Service Bus provides messaging technologies including Relay and Brokered messaging to achieve this. You also have the flexibility of using the Azure Service Bus (multi-tenant PAAS) and/or Service Bus 1.0 (for Windows Server). This post takes a look at both these hosting options from the application developer perspective.
The key principle in providing these offerings is to enable applications to be developed, hosted and managed consistently between cloud service and on-premise hosted environments. Most features in Service Bus are available in both environments and only those that are clearly not applicable to a certain hosting environment are not symmetric. Applications can be written against the common set of features and then can be run between these environments with configuration only changes.
The choice of using Azure Service Bus and Service Bus on-premise can be driven by several factors. Understanding the differences between these offering will help guide the right choice and produce the best results. Azure Service Bus is a multi-tenant cloud service, which means that the service is shared by multiple users. Consuming this service requires no administration of the hosting environment, just provisioning through your subscriptions. Service Bus on-premise is a when you install the same service bits on machines and thus manage tenancy and the hosting environment yourself.
Figure 1: Windows Azure Service Bus (PAAS) and Service Bus On-premise
To use any of the Service Bus features, Windows applications can use Windows Communication Foundation (WCF). For queues and topics, Windows applications can also use a Service Bus-defined Messaging API. Queues and topics can be accessed via HTTP as well, and to make them easier to use from non-Windows applications, Microsoft provides SDKs for Java, Node.js, and other languages.
All of these options will be symmetric between Azure Service Bus and Service Bus 1.0, but given the Beta nature of the release, this symmetry is not yet available. The key considerations are called out below:
- The same APIs and SDKs can be used to target Azure Service Bus and Service Bus on-premise
- Configuration only changes can target application to the different environments
- The same application can target both environments
- Identity and authentication methods will vary thus having application configuration impact
- Latency, throughput and other environmental differences can affect application performance since these are directly tied to the physical hardware that the service is hosted in
- Quotas vary between environments (details here)
It’s important to understand that there is only one instance of Azure Service Bus that is available as a PAAS service but several on-premise environments may exists either thru third-party hosters or self-managed IT departments. Since the service is continually evolving with new features and improvements it is a significant factor in deciding with features to consume based on the environment targeted. Below is a conceptual timeline of how the features will be released (note this does NOT track to any calendar dates):
Figure 2: Client SDK release and compatibility timeline
The key considerations from an application perspective can be driven by business or engineering needs. The key similarities and differences from this perspective are listed below:
- Namespaces are the unit for identity and management of your artifacts
- Queues/Topics are contained within a Namespace
- Claims based permissions can be managed on a per-entity basis
- Size constraints are applied on Queues/Topics
- Relay messaging is currently unavailable on Service Bus on-premise
- Service Registry is currently available on Service Bus on-premise
- Token based Identity providers for Service are ACS and for on-premise is AD and Self-signed tokens
- SQL Server is the storage mechanism that is provisioned and managed by you for on-premises
- Latency and throughput of messages vary between the environments
- The maximum allowable values for message size and entity size vary
Do give the Service Bus 1.0 Beta a try, following are some additional resources:
- Download Service Bus 1.0
- Service Bus 1.0 Documentation
- NuGet package to develop with Service Bus 1.0