blob: 8ccd11b500f2d997de89c98e2933ba12861c9060 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<META NAME="ROBOTS" CONTENT="NOINDEX">
<link rel="canonical" href="https://ignite.apache.org/releases/1.7.0/javadoc/org/apache/ignite/spi/loadbalancing/LoadBalancingSpi.html" />
<!-- Generated by javadoc (version 1.7.0_80) on Mon Aug 01 20:32:32 MSK 2016 -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LoadBalancingSpi (Ignite 1.7.0)</title>
<meta name="date" content="2016-08-01">
<link rel="stylesheet" type="text/css" href="../../../../../javadoc.css" title="Style">
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-61232409-1', 'auto');
ga('send', 'pageview');
</script></head>
<body>
<script type="text/javascript"><!--
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="LoadBalancingSpi (Ignite 1.7.0)";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar_top">
<!-- -->
</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/LoadBalancingSpi.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
<div class="aboutLanguage"><em>Ignite - In-Memory Data Fabric</em></div>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev Class</li>
<li>Next Class</li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/ignite/spi/loadbalancing/LoadBalancingSpi.html" target="_top">Frames</a></li>
<li><a href="LoadBalancingSpi.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method_detail">Method</a></li>
</ul>
</div>
<a name="skip-navbar_top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.apache.ignite.spi.loadbalancing</div>
<h2 title="Interface LoadBalancingSpi" class="title">Interface LoadBalancingSpi</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Superinterfaces:</dt>
<dd><a href="../../../../../org/apache/ignite/spi/IgniteSpi.html" title="interface in org.apache.ignite.spi">IgniteSpi</a></dd>
</dl>
<dl>
<dt>All Known Implementing Classes:</dt>
<dd><a href="../../../../../org/apache/ignite/spi/loadbalancing/adaptive/AdaptiveLoadBalancingSpi.html" title="class in org.apache.ignite.spi.loadbalancing.adaptive">AdaptiveLoadBalancingSpi</a>, <a href="../../../../../org/apache/ignite/spi/loadbalancing/roundrobin/RoundRobinLoadBalancingSpi.html" title="class in org.apache.ignite.spi.loadbalancing.roundrobin">RoundRobinLoadBalancingSpi</a>, <a href="../../../../../org/apache/ignite/spi/loadbalancing/weightedrandom/WeightedRandomLoadBalancingSpi.html" title="class in org.apache.ignite.spi.loadbalancing.weightedrandom">WeightedRandomLoadBalancingSpi</a></dd>
</dl>
<hr>
<br>
<pre>public interface <span class="strong">LoadBalancingSpi</span>
extends <a href="../../../../../org/apache/ignite/spi/IgniteSpi.html" title="interface in org.apache.ignite.spi">IgniteSpi</a></pre>
<div class="block">Load balancing SPI provides the next best balanced node for job
execution. This SPI is used either implicitly or explicitly whenever
a job gets mapped to a node during <a href="../../../../../org/apache/ignite/compute/ComputeTask.html#map(java.util.List,%20T)"><code>ComputeTask.map(List, Object)</code></a>
invocation.
<h1 class="header">Coding Examples</h1>
If you are using <a href="../../../../../org/apache/ignite/compute/ComputeTaskSplitAdapter.html" title="class in org.apache.ignite.compute"><code>ComputeTaskSplitAdapter</code></a> then load balancing logic
is transparent to your code and is handled automatically by the adapter.
Here is an example of how your task could look:
<pre name="code" class="java">
public class MyFooBarTask extends ComputeTaskSplitAdapter&lt;Object,Object&gt; {
&#64;Override
protected Collection&lt;? extends ComputeJob&gt; split(int gridSize, Object arg) throws IgniteCheckedException {
List&lt;MyFooBarJob&gt; jobs = new ArrayList&lt;MyFooBarJob&gt;(gridSize);
for (int i = 0; i &lt; gridSize; i++) {
jobs.add(new MyFooBarJob(arg));
}
// Node assignment via load balancer
// happens automatically.
return jobs;
}
...
}
</pre>
If you need more fine-grained control over how some jobs within task get mapped to a node
<i>and</i> use, for example, affinity load balancing for some other jobs within task, then you should use
<a href="../../../../../org/apache/ignite/compute/ComputeTaskAdapter.html" title="class in org.apache.ignite.compute"><code>ComputeTaskAdapter</code></a>. Here is an example of how your task could look. Note that in this
case we manually inject load balancer and use it to pick the best node. Doing it in
such way would allow user to map some jobs manually and for others use load balancer.
<pre name="code" class="java">
public class MyFooBarTask extends ComputeTaskAdapter&lt;String,String&gt; {
// Inject load balancer.
&#64;LoadBalancerResource
ComputeLoadBalancer balancer;
// Map jobs to grid nodes.
public Map&lt;? extends ComputeJob, ClusterNode&gt; map(List&lt;ClusterNode&gt; subgrid, String arg) throws IgniteCheckedException {
Map&lt;MyFooBarJob, ClusterNode&gt; jobs = new HashMap&lt;MyFooBarJob, ClusterNode&gt;(subgrid.size());
// In more complex cases, you can actually do
// more complicated assignments of jobs to nodes.
for (int i = 0; i &lt; subgrid.size(); i++) {
// Pick the next best balanced node for the job.
ComputeJob myJob = new MyFooBarJob(arg);
jobs.put(myJob, balancer.getBalancedNode(myJob, null));
}
return jobs;
}
// Aggregate results into one compound result.
public String reduce(List&lt;ComputeJobResult&gt; results) throws IgniteCheckedException {
// For the purpose of this example we simply
// concatenate string representation of every
// job result
StringBuilder buf = new StringBuilder();
for (ComputeJobResult res : results) {
// Append string representation of result
// returned by every job.
buf.append(res.getData().toString());
}
return buf.toString();
}
}
</pre>
<p>
Ignite comes with the following load balancing SPI implementations out of the box:
<ul>
<li><a href="../../../../../org/apache/ignite/spi/loadbalancing/roundrobin/RoundRobinLoadBalancingSpi.html" title="class in org.apache.ignite.spi.loadbalancing.roundrobin"><code>RoundRobinLoadBalancingSpi</code></a> - default</li>
<li><a href="../../../../../org/apache/ignite/spi/loadbalancing/adaptive/AdaptiveLoadBalancingSpi.html" title="class in org.apache.ignite.spi.loadbalancing.adaptive"><code>AdaptiveLoadBalancingSpi</code></a></li>
<li><a href="../../../../../org/apache/ignite/spi/loadbalancing/weightedrandom/WeightedRandomLoadBalancingSpi.html" title="class in org.apache.ignite.spi.loadbalancing.weightedrandom"><code>WeightedRandomLoadBalancingSpi</code></a></li>
</ul>
<b>NOTE:</b> this SPI (i.e. methods in this interface) should never be used directly. SPIs provide
internal view on the subsystem and is used internally by Ignite kernal. In rare use cases when
access to a specific implementation of this SPI is required - an instance of this SPI can be obtained
via <a href="../../../../../org/apache/ignite/Ignite.html#configuration()"><code>Ignite.configuration()</code></a> method to check its configuration properties or call other non-SPI
methods. Note again that calling methods from this interface on the obtained instance can lead
to undefined behavior and explicitly not supported.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method_summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code><a href="../../../../../org/apache/ignite/cluster/ClusterNode.html" title="interface in org.apache.ignite.cluster">ClusterNode</a></code></td>
<td class="colLast"><code><strong><a href="../../../../../org/apache/ignite/spi/loadbalancing/LoadBalancingSpi.html#getBalancedNode(org.apache.ignite.compute.ComputeTaskSession,%20java.util.List,%20org.apache.ignite.compute.ComputeJob)">getBalancedNode</a></strong>(<a href="../../../../../org/apache/ignite/compute/ComputeTaskSession.html" title="interface in org.apache.ignite.compute">ComputeTaskSession</a>&nbsp;ses,
<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/ignite/cluster/ClusterNode.html" title="interface in org.apache.ignite.cluster">ClusterNode</a>&gt;&nbsp;top,
<a href="../../../../../org/apache/ignite/compute/ComputeJob.html" title="interface in org.apache.ignite.compute">ComputeJob</a>&nbsp;job)</code>
<div class="block">Gets balanced node for specified job within given task session.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods_inherited_from_class_org.apache.ignite.spi.IgniteSpi">
<!-- -->
</a>
<h3>Methods inherited from interface&nbsp;org.apache.ignite.spi.<a href="../../../../../org/apache/ignite/spi/IgniteSpi.html" title="interface in org.apache.ignite.spi">IgniteSpi</a></h3>
<code><a href="../../../../../org/apache/ignite/spi/IgniteSpi.html#getName()">getName</a>, <a href="../../../../../org/apache/ignite/spi/IgniteSpi.html#getNodeAttributes()">getNodeAttributes</a>, <a href="../../../../../org/apache/ignite/spi/IgniteSpi.html#onClientDisconnected(org.apache.ignite.lang.IgniteFuture)">onClientDisconnected</a>, <a href="../../../../../org/apache/ignite/spi/IgniteSpi.html#onClientReconnected(boolean)">onClientReconnected</a>, <a href="../../../../../org/apache/ignite/spi/IgniteSpi.html#onContextDestroyed()">onContextDestroyed</a>, <a href="../../../../../org/apache/ignite/spi/IgniteSpi.html#onContextInitialized(org.apache.ignite.spi.IgniteSpiContext)">onContextInitialized</a>, <a href="../../../../../org/apache/ignite/spi/IgniteSpi.html#spiStart(java.lang.String)">spiStart</a>, <a href="../../../../../org/apache/ignite/spi/IgniteSpi.html#spiStop()">spiStop</a></code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method_detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="getBalancedNode(org.apache.ignite.compute.ComputeTaskSession, java.util.List, org.apache.ignite.compute.ComputeJob)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>getBalancedNode</h4>
<pre><a href="../../../../../org/apache/ignite/cluster/ClusterNode.html" title="interface in org.apache.ignite.cluster">ClusterNode</a>&nbsp;getBalancedNode(<a href="../../../../../org/apache/ignite/compute/ComputeTaskSession.html" title="interface in org.apache.ignite.compute">ComputeTaskSession</a>&nbsp;ses,
<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/ignite/cluster/ClusterNode.html" title="interface in org.apache.ignite.cluster">ClusterNode</a>&gt;&nbsp;top,
<a href="../../../../../org/apache/ignite/compute/ComputeJob.html" title="interface in org.apache.ignite.compute">ComputeJob</a>&nbsp;job)
throws <a href="../../../../../org/apache/ignite/IgniteException.html" title="class in org.apache.ignite">IgniteException</a></pre>
<div class="block">Gets balanced node for specified job within given task session.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>ses</code> - Grid task session for currently executing task.</dd><dd><code>top</code> - Topology of task nodes from which to pick the best balanced node for given job.</dd><dd><code>job</code> - Job for which to pick the best balanced node.</dd>
<dt><span class="strong">Returns:</span></dt><dd>Best balanced node for the given job within given task session.</dd>
<dt><span class="strong">Throws:</span></dt>
<dd><code><a href="../../../../../org/apache/ignite/IgniteException.html" title="class in org.apache.ignite">IgniteException</a></code> - If failed to get next balanced node.</dd></dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar_bottom">
<!-- -->
</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/LoadBalancingSpi.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
<div class="aboutLanguage"><em>Ignite - In-Memory Data Fabric</em></div>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev Class</li>
<li>Next Class</li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/ignite/spi/loadbalancing/LoadBalancingSpi.html" target="_top">Frames</a></li>
<li><a href="LoadBalancingSpi.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method_detail">Method</a></li>
</ul>
</div>
<a name="skip-navbar_bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small><table width="100%" border="0" cellspacing=0 cellpadding=0 style="padding: 5px"> <tr> <td> <table style="padding-left: 0; margin: 0"> <tbody style="padding: 0; margin: 0"> <tr style="padding: 0; margin: 0"> <td> <a target=_blank href="https://ignite.apache.org"><nobr>2015 Copyright &#169; Apache Software Foundation</nobr></a> </td> </tr> </tbody> </table> </td> <td width="100%" align="right" valign="center"> <a href="https://twitter.com/ApacheIgnite" class="twitter-follow-button" data-show-count="false" data-size="large">Follow @ApacheIgnite</a> <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script> </td> </tr> <tr> <td colspan="2" valign="top" align="left"> <table style="padding-left: 0; margin: 0"> <tbody style="padding: 0; margin: 0"> <tr style="padding: 0; margin: 0"> <td> <b>Ignite Fabric</b> </td> <td>:&nbsp;&nbsp; ver. <strong>1.7.0</strong> </td> </tr> <tr style="padding: 0; margin: 0"> <td> <b>Release Date</b> </td> <td>:&nbsp;&nbsp; August 1 2016 </td> </tr> </tbody> </table> </td> </tr> </table></small></p>
</body>
</html>