Thin Clients Overview
Overview
A thin client is a lightweight Ignite client that connects to the cluster via a standard socket connection. It does not become a part of the cluster topology, never holds any data, and is not used as a destination for compute grid calculations. What it does is simply establish a socket connection to a standard Ignite node and perform all operations through that node.
Thin clients are based on the binary client protocol, which makes it possible to support Ignite connectivity from any programming language.
Ignite provides the following thin clients:
Thin Client Features
The following table outlines features supported by each client.
Thin Client Feature | Java | .NET | C++ | Python | Node.js | PHP |
---|---|---|---|---|---|---|
Scan Query |
yes |
yes |
No |
yes |
yes |
yes |
Scan Query with a filter |
yes |
yes |
No |
No |
No |
No |
SqlFieldsQuery |
yes |
yes |
No |
yes |
yes |
yes |
Binary Object API |
yes |
yes |
No |
No |
yes |
yes |
Failover |
yes |
yes |
yes |
yes |
yes |
yes |
Async Operations |
yes |
yes |
No |
yes |
yes |
yes |
SSL/TLS |
yes |
yes |
yes |
yes |
yes |
yes |
Authentication |
yes |
yes |
yes |
yes |
yes |
yes |
Partition Awareness |
yes |
yes |
yes |
yes |
yes |
No |
Transactions |
yes |
yes |
yes |
No |
No |
No |
Cluster API |
yes |
yes |
No |
No |
No |
No |
Compute API |
yes |
yes |
yes |
No |
No |
No |
Continuous queries |
yes |
yes |
yes |
No |
No |
No |
Service invocation |
yes |
yes |
No |
No |
No |
No |
Server Discovery |
yes |
yes |
No |
No |
No |
No |
Server Discovery in Kubernetes |
yes |
No |
No |
No |
No |
No |
Data Streamer |
No |
yes |
No |
No |
No |
No |
Retry Policy |
yes |
yes |
No |
No |
No |
No |
Client Connection Failover
All thin clients support a connection failover mechanism, whereby the client automatically switches to an available node in case of the current node or connection failure. For this mechanism to work, you need to provide a list of node addresses you want to use for failover purposes in the client configuration. Refer to the specific client documentation for more details.
Partition Awareness
As explained in the Data Partitioning section, data in the cluster is distributed between the nodes in a balanced manner for scalability and performance reasons. Each cluster node maintains a subset of the data and the partition distribution map, which is used to determine the node that keeps the primary/backup copy of requested entries.
Partition awareness allows the thin client to send query requests directly to the node that owns the queried data.
Without partition awareness, an application that is connected to the cluster via a thin client executes all queries and operations via a single server node that acts as a proxy for the incoming requests. These operations are then re-routed to the node that stores the data that is being requested. This results in a bottleneck that could prevent the application from scaling linearly.
Notice how queries must pass through the proxy server node, where they are routed to the correct node.
With partition awareness in place, the thin client can directly route queries and operations to the primary nodes that own the data required for the queries. This eliminates the bottleneck, allowing the application to scale more easily.
Partition Awareness is available for the Java, .NET, C++, Python, and Node.js thin clients. Refer to the documentation of the specific client for more information.
Authentication
All thin clients support authentication in the cluster side. Authentication is configured in the cluster configuration, and the client simply provide user credentials. Refer to the documentation of the specific client for more information.
Cluster Configuration
Thin client connection parameters are controlled by the client connector configuration. By default, Ignite accepts client connections on port 10800. You can change the port, connection buffer size and timeout, enable SSL/TLS, etc.
Configuring Thin Client Connector
The following example shows how to configure thin client connection parameters:
<bean class="org.apache.ignite.configuration.IgniteConfiguration" id="ignite.cfg">
<property name="clientConnectorConfiguration">
<bean class="org.apache.ignite.configuration.ClientConnectorConfiguration">
<property name="port" value="10000"/>
</bean>
</property>
</bean>
ClientConnectorConfiguration clientConnectorCfg = new ClientConnectorConfiguration();
// Set a port range from 10000 to 10005
clientConnectorCfg.setPort(10000);
clientConnectorCfg.setPortRange(5);
IgniteConfiguration cfg = new IgniteConfiguration().setClientConnectorConfiguration(clientConnectorCfg);
// Start a node
Ignite ignite = Ignition.start(cfg);
var cfg = new IgniteConfiguration
{
ClientConnectorConfiguration = new ClientConnectorConfiguration
{
// Set a port range from 10000 to 10005
Port = 10000,
PortRange = 5
}
};
var ignite = Ignition.Start(cfg);
This API is not presently available for C++. You can use XML configuration.
The following table describes some parameters that you may want to change.
Parameter | Description | Default Value |
---|---|---|
|
Enables or disables thin client connectivity. |
|
|
The port for thin client connections. |
10800 |
|
This parameters sets a range of ports for thin client connections. For example, if |
100 |
|
Set this property to |
|
See the complete list of parameters in the ClientConnectorConfiguration javadoc.
Enabling SSL/TLS for Thin Clients
Refer to the SSL for Thin Clients and JDBC/ODBC section.
Apache, Apache Ignite, the Apache feather and the Apache Ignite logo are either registered trademarks or trademarks of The Apache Software Foundation.