The Problem: Scaling for User Volume
When users connect to your InterSystems IRIS databases via applications, they need quick and efficient access to the data. Whether your enterprise is small, large, or in between, a high number of concurrent user requests against the databases — user volume — can cause performance problems on the system that hosts the databases. This can potentially affect many more users, making them wait longer to receive the information they need. And in a dynamic business, user volume can grow rapidly, further impacting performance.
The Solution: Distributed Caching
To improve the speed and efficiency of users’ access to the data, InterSystems IRIS can use distributed caching. This technology allows InterSystems IRIS to store the database cache on multiple application servers. User volume can then be distributed across those servers, thus increasing the cache efficiency. The internode communication that makes this possible is enabled by ECP, the Enterprise Cache Protocol.
Using distributed caching, you can enable users who make similar queries to share a portion of the cache, which is hosted on an application server clustered with the data server where your data is hosted. The actual data remains on the data server, but caches are maintained on the application servers for faster user access. The data server takes care of keeping the cached data up-to-date on each application server in the enterprise.
With a distributed cache cluster, you can easily scale your solution by adding or removing application servers as needed. All application servers automatically maintain their own connections to the data server, and attempt to recover the connection if it drops.
You can configure application servers and their associated data servers on the individual cluster instances using their Management Portals, or deploy and configure a cluster using InterSystems Cloud Manager (ICM). For more information on ICM, see First Look: ICM and the InterSystems Cloud Manager Guide.
How Does Distributed Caching Work?
When you deploy an InterSystems IRIS distributed cache cluster, you designate one instance as the data server, and one or more instances as application servers. The instances do not need to run on the same operating system or hardware; they only need to conform to the InterSystems IRIS system requirements.
- The data server performs like a standard InterSystems IRIS server, hosting databases in namespaces and providing the data to other systems upon request.
- The application servers receive data requests from applications. When a user opens an application, instead of connecting to the data server, it connects to an application server. The user will not notice anything different. The application server fetches the necessary data from the data server and provides it to the user.
- The application server stores the data in its own cache, so that the next time any user requests the same data, the application server can provide it without needing to contact the data server again.
- The data server monitors all of the application servers to make sure that the data in their caches is up-to-date. The data server also handles data locks for the whole system.
- If the connection between an application server and the data server is lost, the application server automatically attempts to reconnect and recover any needed data.
- You can design your applications to direct users who make similar queries to the same application server. That way, the users can share a cache that includes the data they need the most. For example, in a healthcare setting, you might have clinicians running a particular set of queries and front-desk staff running different queries, using the same application and the same underlying data; those sets of users can be grouped together on separate application servers. As another example, if the cluster handles multiple applications, each application’s users can be directed to their own application server(s) for maximum cache efficiency.
Trying Distributed Caching for Yourself
Set up a distributed cache cluster with InterSystems IRIS is easy. This simple procedure walks you through the basic steps of configuring ECP on several instances.
Before You Begin
In this example, you will set up one InterSystems IRIS instance as a data server and two more instances as application servers. This means you will need three instances altogether. Your choices for InterSystems IRIS include several types of licensed instances; the instances need not be hosted by the system you are working on (although they must have network access to each other). For information on how to deploy each type of instance if you do not already have three to work with, see Deploying Licensed Instances in InterSystems IRIS Basics: Connecting an IDE.
Enabling the ECP Service
First, enable the ECP service on each of the three instances as follows:
- Open the Management Portal for the instance in your browser, using the URL described for your instance in InterSystems IRIS Basics: Connecting an IDE.
- Go to the Services page (System Administration > Security > Services).
- Select %Service_ECP. On the Edit Service page, select the Service Enabled check box, and then select Save.
You have now enabled ECP on your system. There are just a few more steps to finish the setup for the data server and the two application servers.
Configuring the Data Server
On the system that will be your data server, there are just two more quick steps to finish the setup. First, you need to increase the number of allowed application servers from the default of one. Then, you will create a new database for your application servers to connect to. Of course, in a production environment, you would already have a database in use.
To finish the data server configuration:
- In the Management Portal, go to the ECP Settings page (System Administration > Configuration > Connectivity > ECP Settings).
- In the section labeled This System as an ECP Data Server, set the Maximum number of application servers to 2. Select Save.
- Restart the instance.
For more details about creating a data server and setting the available options, see Preparing the Data Server in the “Horizontally Scaling Systems for User Volume with InterSystems Distributed Caching” chapter of the Scalability Guide.
To create a new database for this exercise:
- In the Management Portal, go to the Local Databases page (System Administration > Configuration > System Configuration > Local Databases).
- Select Create New Database.
- Enter a name for the new database. For this exercise, call it ECP.
- Select Next and then Finish.
You have created your new database, and your data server is ready to go.
Configuring the Application Servers
Next, you will set up your other two instances as application servers. You will configure each application server to point to the data server, and create a new namespace on each, mapped to the database you created on the data server.
Setting Up the Application Servers
- Log in to the Management Portal and go to the ECP Settings page (System Administration > Configuration > Connectivity > ECP Settings).
- Select Data Servers and then select Add Server.
- Fill in the required information:
- Server Name — Enter a name or label to identify this server. It does not need to be the same as the instance name or the name of the instance’s host.
- Host DNS Name or IP Address — Enter a host identifier for the system hosting the data server instance you configured in the previous section.
- IP Port — Enter the superserver port number of the data server instance.
- Select Save. Your data server now appears in the list. It may take a few moments for the application server to connect to the data server and verify the connection.
Creating the Namespace and the Remote Database
Now that you have connected your application servers to your data server, you need to create a namespace on each application server. This namespace will be local to the application server, but instead of containing a local database, it will be mapped to a remote database — that is, the ECP database on the data server, which you created in the previous section.
- In the Management Portal, go to the Namespaces page (System Administration > Configuration > System Configuration > Namespaces).
- Select Create New Namespace.
- In the Name of the namespace field, enter
- For The default database for Globals in this namespace is a, select Remote Database. Then select the Create New Database… button. This opens the Create Remote Database window.
- Fill in the required information:
- Remote Server — Use the drop-down menu to select the Server Name you gave to the data server in the previous procedure.
- Remote Directory — Select the directory containing the ECP database on the data server.
- Database Name — Enter a name for the database. This can be the same as its name on the data server, which is ECP in this example, or different.
- Select Finish. The window closes, and you are returned to the New Namespace page. You should see that the database you just created is now shown in the Select an existing database for Globals field.
- For The default database for Routines in this namespace is a, select Remote Database. You should now be able to select the new database you just created from the drop-down menu.
- Clear the Enable namespace for interoperability productions check box.
- Select Save. The new namespace now appears on the list.
For more details about creating a namespace and its associated database, see “Create/Modify a Namespace” in the “Configuring InterSystems IRIS” chapter of the System Administration Guide. For background information, see “Namespaces and Databases” in the Orientation Guide for Server-Side Programming.
You are done! Once you have performed both procedures on each application server instance, you have successfully created a cluster that has one data server and two application servers. In the next section, you will test the connections to make sure that all three instances are communicating with each other correctly.
Testing the Setup
Now that you have enabled the ECP service and set up two application servers with namespaces pointing to the database on the data server, it is time to do a quick test to make sure that the three systems are communicating with each other. To accomplish this, you will set a simple global on one application server, then read and change it on the second application server.
To learn more about globals, see Using Globals.
- On one application server, open the InterSystems IRIS Terminal using the procedure described for your instance in InterSystems IRIS Basics: Connecting an IDE and change to the namespace that you created in the previous section. For this example, the namespace is called
ECPNS, so you would do:
USER>zn "ECPNS" ECPNS>
- Create a global simply by giving it a value:
ECPNS> set ^MyGlobal = "My Value"
- On the other application server, log in to the Terminal and change to the
ECPNSnamespace as described above.
- Write the value of the global:
ECPNS> write ^MyGlobal My Value
- If you like, you can view the global on the data server instance as a final check. In the Management Portal, go to the Local Databases page (System Administration > Configuration > System Configuration > Local Databases). Locate the database that your application servers are pointing to, and select Globals for that database. You should see
MyGlobalon the list.
Learn More About Distributed Caching and ECP
To learn more about using distributed caching and ECP with InterSystems IRIS, see the following resources:
- “Horizontally Scaling Systems for User Volume with InterSystems Distributed Caching” chapter of the Scalability Guide
- Sample Mirroring Architecture and Network Configurations, Redirecting Application Connections Following Failover or Disaster Recovery, Configuring Application Server Connections to a Mirror, and other distributed caching and ECP-related sections in the “Mirroring” chapter of the High Availability Guide