Sie sind auf Seite 1von 17

Confidential 2009 RedPrairie Corporation. All rights reserved.

September 28, 2009


Introduction to MOCAng
Archtecture
Friday, September 25, 2009
Confidential 2009 RedPrairie Corporation. All rights reserved.
The Basics -- How We Got Here
Legacy MOCA has a scalability problem
> MOCA is Centered around MOCA Server Processes
> We spawn mocasrvprc, as needed, to support load
> Each mocasrvprc contains
Single DB connection (traditionally)
The MOCA engine
Command configuration (via memory file)
Loaded libraries for commands
JVM (since 2005.2)
Loaded Java classes and libraries
Various ad-hoc caches, depending on what commands have been run
> Policies
> Integrator metadata
> Process startup time has become a problem
Weve implemented changes to the connection manager process limits to
avoid spawning too often.
2
Friday, September 25, 2009
Confidential 2009 RedPrairie Corporation. All rights reserved. 3
Classic MOCA Structure
Images should align with the
top of the red vertical bar.
Friday, September 25, 2009
Confidential 2009 RedPrairie Corporation. All rights reserved.
Classic MOCA Structure -- mocasrvprc
4
Friday, September 25, 2009
Confidential 2009 RedPrairie Corporation. All rights reserved. 5
C
o
m
m
a
n
d
s
J
V
M
D
B

C
o
n
n
e
c
t
i
o
n
C
o
m
p
o
n
e
n
t

L
i
b
r
a
r
i
e
s
C
a
c
h
e
s
M
O
C
A

E
n
g
i
n
e
Clients
Connection
Manager
Server Processes
C
o
m
m
a
n
d
s
J
V
M
D
B

C
o
n
n
e
c
t
i
o
n
C
o
m
p
o
n
e
n
t

L
i
b
r
a
r
i
e
s
C
a
c
h
e
s
M
O
C
A

E
n
g
i
n
e
C
o
m
m
a
n
d
s
J
V
M
D
B

C
o
n
n
e
c
t
i
o
n
C
o
m
p
o
n
e
n
t

L
i
b
r
a
r
i
e
s
C
a
c
h
e
s
M
O
C
A

E
n
g
i
n
e
Friday, September 25, 2009
Confidential 2009 RedPrairie Corporation. All rights reserved.
Classic MOCA Structure -- Problems
Implemented in C
Encourages C components
Proprietary Middleware
32-bit Limitation
Bloat Multiplier
6
Friday, September 25, 2009
Confidential 2009 RedPrairie Corporation. All rights reserved.
Bloat Multiplier?
7
Friday, September 25, 2009
Confidential 2009 RedPrairie Corporation. All rights reserved.
MOCAng Architecture
8
Friday, September 25, 2009
Confidential 2009 RedPrairie Corporation. All rights reserved.
MOCAng Architecture
9
Commands
JVM
DB Connections
Java Libraries
Java-Based
Caches
MOCA Engine
Clients MOCA Server
Native Processes
J
V
M
C

L
i
b
r
a
r
i
e
s
C
-
B
a
s
e
d
C
a
c
h
e
s
J
V
M
C

L
i
b
r
a
r
i
e
s
C
-
B
a
s
e
d
C
a
c
h
e
s
J
V
M
C

L
i
b
r
a
r
i
e
s
C
-
B
a
s
e
d
C
a
c
h
e
s
Friday, September 25, 2009
Confidential 2009 RedPrairie Corporation. All rights reserved.
Core Architecture -- what was changed
MOCA Parser and Execution Engine (srvlib)
> Completely Rewritten in Java
Command file reader (mbuild)
> Completely rewritten in Java
Network Communication Layer (mocaconmgr)
> Delegated to HTTP and Jetty
Database Translation Layer (sqllib/dblib)
> Has been Java-based for several releases
> All db connections are pooled in the main server process
Logging and Tracing
> Now using log4j

10
Friday, September 25, 2009
Confidential 2009 RedPrairie Corporation. All rights reserved.
Implications
Some things that used to be fast in C are slower, due to
interprocess communication
> Tracing
> Initiating commands
> Executing SQL
Groovy and Java code is much faster
> Method call vs JNI
> Multithreaded vs Single
Local syntax commands are executed directly in Java
> C libraries are only used to execute C commands
11
Friday, September 25, 2009
Confidential 2009 RedPrairie Corporation. All rights reserved.
Side Effects
64/32-bit capability
> C code can still be 32-bit, to avoid risk.
> Java VM can run 64-bit, to increase scalability
> JVM heap size can be quite large (many GB on server-class
hardware)
12
Friday, September 25, 2009
Confidential 2009 RedPrairie Corporation. All rights reserved.
Performance Overhead - How Slow is Slow?
Two types of overhead should be considered
> Calling SQL from C
> Calling C components from C
Generally, SQL overhead is less than initiating C
components
> SQL execution involves an additional copy of the result data
over the native socket.
> C component involves potentially many additional copies
13
Friday, September 25, 2009
Confidential 2009 RedPrairie Corporation. All rights reserved.
SQL Performance Overhead
When calling SQL from C, one extra data copy must be
made
Overhead varies with amount of data sent
> Note: this test data was from a local database using a very fast
single-table SELECT statement.
14
Size
(rows)
Overhead
(ms)
Overhead
(%)
0 0.646 265.82%
10 0.679 119.35%
100 1.039 32.78%
1000 1.57 5.64%
0 250 500 750 1000
Overhead (ms) Overhead (%)
Friday, September 25, 2009
Confidential 2009 RedPrairie Corporation. All rights reserved.
C Performance Overhead Explained
When a C component initiates another command, it talks
to the MOCA server to do it
If that command invocation needs to execute C, it comes
back around to the C process
15
MOCA Server Native Process
Call C Function A
srvInitiate(...)
Call C Function B
sqlExec*
sqlExec Results
C Function B Results
srvInitiate(...) Results
C Function A Results
Friday, September 25, 2009
Confidential 2009 RedPrairie Corporation. All rights reserved.
C Performance Overhead
Overhead varies with amount of data sent and depth of
call stack
Test Case illustrates worst-case situation, but indicates a
problem area
16
Overhead/10 (ms) Overhead/10 (%)
Overhead/100 (ms) Overhead/100 (%)
Call Depth Rows Overhead
(ms)
Overhead
(%)
1 10 1.23 196.45%
2 10 1.969 295.39%
3 10 2.448 336.46%
1 100 4.184 134.06%
2 100 6.605 202.7%
3 100 9.418 299.24%
Friday, September 25, 2009
Confidential 2009 RedPrairie Corporation. All rights reserved.
So What?
Despite appearances, those are not disastrous
overheads
If a component is called only few times per day, a few
milliseconds of overhead is not a huge problem.
However, when a component gets called several
thousand times per hour, it becomes an issue.
Look For
> Commands that get run a lot in day-to-day operations
> Commands that expect to operate on larger data sets
> Commands that initiate a lot of other commands
17
Friday, September 25, 2009

Das könnte Ihnen auch gefallen