<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<body link="#355491" alink="#4262a1" vlink="#355491" style="background: #e2e2e2; margin: 0; padding: 20px;">

<div>
        <table cellpadding="0" bgcolor="#FFFFFF" border="0" cellspacing="0" style="border: 1px solid #dadada; margin-bottom: 30px; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                <tbody>
                        <tr>

                                <td>

                                        <table border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" style="border: solid 2px #ccc; background: #dadada; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                                                <tbody>
                                                        <tr>
                                                                <td bgcolor="#000000" valign="middle" height="58px" style="border-bottom: 1px solid #ccc; padding: 20px; -moz-border-radius-topleft: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 5px; -webkit-border-top-left-radius: 5px;">
                                                                        <h1 style="color: #333333; font: bold 22px Arial, Helvetica, sans-serif; margin: 0; display: block !important;">
                                                                        <!-- To have a header image/logo replace the name below with your img tag -->
                                                                        <!-- Email clients will render the images when the message is read so any image -->
                                                                        <!-- must be made available on a public server, so that all recipients can load the image. -->
                                                                        <a href="https://community.jboss.org/index.jspa" style="text-decoration: none; color: #E1E1E1">JBoss Community</a></h1>
                                                                </td>

                                                        </tr>
                                                        <tr>
                                                                <td bgcolor="#FFFFFF" style="font: normal 12px Arial, Helvetica, sans-serif; color:#333333; padding: 20px;  -moz-border-radius-bottomleft: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 5px; -webkit-border-bottom-left-radius: 5px;"><h3 style="margin: 10px 0 5px; font-size: 17px; font-weight: normal;">
    jbpm5 scale out reference architecture..
</h3>
<span style="margin-bottom: 10px;">
    created by <a href="https://community.jboss.org/people/affandar">Affan Dar</a> in <i>jBPM</i> - <a href="https://community.jboss.org/message/717611#717611">View the full discussion</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">

<div class="jive-rendered-content"><p>After scavenging the forums and docs for jbpm 5 over the last week, I have drafted up the attached 'reference architecture' for a scalable jBPM 5 deployment. Would love to get feedback (aka ripped apart <span> :) </span>).</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Here are the key pieces:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>1. A shared KnowlegeBase which acts as a repository of processes across the whole deployment (master-slave replicated with writes-to-master and reads-from-slaves etc etc)</p><p>2. There are a fixed number of KnowledgeSessions spread across DBs in a DB farm (DB1, DB2)</p><p>3. A table contains the mapping between these sessions, the database that they are stored in and the node that is assigned to these sessions. Management of the data in this table is an admin config operation (either automatic or manual).</p><p>4. A number of worker nodes which load the KnowledgeSessions that belong to them (as per the table above)</p><p>5. Another table that has mapping of processes-to-sessions. This table is updated by the worker nodes when a new process is created.</p><p>6. A router or client proxy that routes process instance managment requests as per the following rules:</p><p>&#160;&#160;&#160;&#160; - For process instance creation requests, round robin to any node</p><p>&#160;&#160;&#160;&#160; - For requests pertaining to a specific process instance, consult the table in (5) &amp; (6) and route to appropriate node</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Now how to scale out:</p><p>- If the bottleneck is the CPU/memory of the worker nodes then add more nodes and rebalance the session distribution in table (3)</p><p>- If the bottleneck is the DB capacity or disk then add a database, migrate processes/session data to the new database and update table (3)</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Of course the resharding above is crude and manual and can probably be more sophisticated but would love to hear thoughts/comments on the basic idea. </p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Also practically speaking, I hope it is&#160; possible to migrate a session and processes to a different DB at all?</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Thanks</p></div>

<div style="background-color: #f4f4f4; padding: 10px; margin-top: 20px;">
    <p style="margin: 0;">Reply to this message by <a href="https://community.jboss.org/message/717611#717611">going to Community</a></p>
        <p style="margin: 0;">Start a new discussion in jBPM at <a href="https://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2034">Community</a></p>
</div></td>
                        </tr>
                    </tbody>
                </table>


                </td>
            </tr>
        </tbody>
    </table>

</div>

</body>
</html>