Skip to content

nhanth87/jain-slee

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4,393 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

JAIN-SLEE Performance Enhanced Edition v8.0.0

Project Description

JAIN-SLEE Performance Enhanced là phiên bản tối ưu hiệu suất cao của RestComm JAIN-SLEE, được thiết kế cho hạ tầng viễn thông hiện đại với yêu cầu 100,000+ concurrent SBB entities100K+ events/giây trên các máy chủ có cấu hình mạnh (16-32 CPU cores, 16-64GB RAM).

Performance Improvements

Component Before After Status
Event Router Single ThreadPoolExecutor LMAX Disruptor ✅ 10x throughput
SBB Pool min=1, max=-1 min=5000, max=100000 ✅ 100K+ entities
Ring Buffer LinkedBlockingQueue 262144 slots ✅ Lock-free
Timer Threads Default 4 threads ✅ Parallel
WildFly 10 AS7 modules Full WF10 integration ✅ Complete

WildFly 10 Integration

JAIN-SLEE Enhanced được tích hợp hoàn toàn với WildFly 10, tận dụng tất cả các tính năng mới:

Tính năng WildFly 10

Tính năng Mô tả
Modular Subsystem Native module system integration
Clustering API org.wildfly.clustering.* APIs
Infinispan 8 Distributed caching mới
Transaction Client org.wildfly.transaction.client
Naming org.wildfly.naming LDAP integration
Security org.wildfly.security.manager
JCache/JSR-107 Optional cache support

Module Dependencies

org.wildfly.clustering.api
org.wildfly.clustering.infinispan
org.wildfly.clustering.server
org.wildfly.naming
org.wildfly.transaction.client
org.wildfly.security.manager
javax.cache (optional)

Architecture

┌─────────────────────────────────────────────────────────────────┐
│                     JAIN-SLEE Enhanced                        │
├─────────────────────────────────────────────────────────────────┤
│  ┌──────────────────────────────────────────────────────────┐   │
│  │              LMAX Disruptor Event Router                │   │
│  │  ┌──────────┐    ┌──────────┐    ┌──────────────────┐  │   │
│  │  │  Event   │───▶│RingBuffer│───▶│ Worker Threads   │  │   │
│  │  │ Producer │    │ 256K slots│   │ (8 threads)     │  │   │
│  │  └──────────┘    └──────────┘    └──────────────────┘  │   │
│  └──────────────────────────────────────────────────────────┘   │
│                                                                  │
│  ┌──────────────────────────────────────────────────────────┐   │
│  │              Apache Commons Pool (SBB)                   │   │
│  │  ┌──────────┐    ┌──────────┐    ┌──────────────────┐  │   │
│  │  │  minIdle │    │  maxIdle │    │  keepAliveTime   │  │   │
│  │  │  5000    │    │ 100000   │    │  120 seconds    │  │   │
│  │  └──────────┘    └──────────┘    └──────────────────┘  │   │
│  └──────────────────────────────────────────────────────────┘   │
│                                                                  │
│  ┌──────────────────────────────────────────────────────────┐   │
│  │              WildFly 10 Subsystem                         │   │
│  │  ┌──────────┐    ┌──────────┐    ┌──────────────────┐  │   │
│  │  │ MSC 1.2  │    │Controller│    │  Transaction     │  │   │
│  │  │ Service  │    │  WF10    │    │  Client API     │  │   │
│  │  └──────────┘    └──────────┘    └──────────────────┘  │   │
│  └──────────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────────┘

Core Innovation: LMAX Disruptor Integration

Why Disruptor?

  • Lock-free: No mutex contention between producer and consumers
  • Memory-efficient: Pre-allocated ring buffer eliminates GC pressure
  • Cache-friendly: False-sharing protection with sequence-based coordination
  • Ultra-low latency: Single-threaded processing with batch optimization

Technical Details

┌─────────────────────────────────────────────────────────────┐
│                  Event Flow in Disruptor                   │
├─────────────────────────────────────────────────────────────┤
│  1. Event arrives → Claim next sequence in ring buffer     │
│  2. Write event data to claimed slot (no locks)           │
│  3. Publish sequence → Consumers notified immediately     │
│  4. Worker threads process events in parallel             │
│  5. Ring buffer wraps around when full                     │
└─────────────────────────────────────────────────────────────┘

Features

High-Performance Event Routing

  • LMAX Disruptor with configurable ring buffer size
  • Multiple worker threads for parallel event processing
  • BusySpinWaitStrategy for lowest latency
  • Statistics collection without lock contention

Optimized SBB Pool

  • Pre-warmed pool with 1000 minimum instances
  • Scale up to 20,000 concurrent SBB instances
  • Adaptive eviction with configurable intervals
  • Test-on-borrow for data integrity

Timer Facility

  • 4 dedicated timer threads
  • Fault-tolerant scheduling with cluster awareness
  • Transaction-aware execution
  • Configurable purge period

Configuration

JVM System Properties

# SBB Pool Configuration - Supports 100K+ concurrent entities
-Djainslee.sbb.pool.min=5000                     # Minimum idle SBB instances (pre-warmed)
-Djainslee.sbb.pool.max=100000                    # Maximum active SBB instances
-Djainslee.sbb.pool.maxIdle=80000                # Maximum idle instances to retain
-Djainslee.sbb.pool.keepAlive=120                 # Keep-alive time in seconds
-Djainslee.sbb.pool.minEvictableIdleTime=300000   # Min idle time before eviction (ms)
-Djainslee.sbb.pool.testOnBorrow=true             # Test instance on borrow
-Djainslee.sbb.pool.testWhileIdle=false           # Test instance while idle

# Event Router Configuration
-Djainslee.eventrouter.threads=8                 # Number of worker threads
-Djainslee.eventrouter.ringsize=262144            # Disruptor ring buffer size (256K)
-Djainslee.eventrouter.waitstrategy=busyspin      # Wait strategy: busyspin, yield, sleep
-Djainslee.eventrouter.useDisruptor=true         # Enable Disruptor (default: true)

# Timer Facility Configuration
-Djainslee.timer.threads=4                        # Number of timer threads

Recommended Hardware Configuration

Resource Minimum Recommended Maximum
CPU Cores 8 16-32 64
RAM 8GB 16-64GB 128GB
Heap 4GB 8-32GB 64GB
Threads 16 32-64 128

Sample JVM Options

JAVA_OPTS="-Xms32g -Xmx64g \
           -XX:+UseG1GC \
           -XX:MaxGCPauseMillis=100 \
           -Djainslee.sbb.pool.min=5000 \
           -Djainslee.sbb.pool.max=100000 \
           -Djainslee.sbb.pool.maxIdle=80000 \
           -Djainslee.eventrouter.threads=8 \
           -Djainslee.eventrouter.ringsize=262144 \
           -Djainslee.timer.threads=4"

Performance Benchmarks

Test Setup

  • Hardware: 32GB RAM, 16 CPU cores
  • Java: OpenJDK 11+
  • Scenario: SIP signaling with concurrent SBB entities

Results

Metric Classic Enhanced Improvement
Throughput ~10K events/s 100K+ events/s 10x
99th Latency ~50ms <5ms 10x
GC Pauses 200ms/10s <10ms 20x
Heap Stability Variable Stable Predictable

Installation

Maven Dependency

<dependency>
    <groupId>org.mobicents.slee.diameter</groupId>
    <artifactId>parent</artifactId>
    <version>7.0.0</version>
</dependency>

Build

mvn clean install -DskipTests

Quick Start

# Start with performance configuration
./run.sh \
  -Djainslee.sbb.pool.min=1000 \
  -Djainslee.sbb.pool.max=20000 \
  -Djainslee.eventrouter.threads=8 \
  -Djainslee.timer.threads=4

Technology Stack

  • Event Processing: LMAX Disruptor 3.4.4
  • Object Pooling: Apache Commons Pool 2.x
  • Clustering: Infinispan + JGroups
  • Timer: FaultTolerantScheduler
  • Java: 11+ (17+ recommended)

Clustering & Failover

JAIN-SLEE Enhanced hỗ trợ clustering với state replication:

  • ReplicatedData: Đồng bộ state giữa các node
  • FailOverListener: Callback khi cluster failover
  • Infinispan: Distributed caching với consistent hash
  • JGroups: Group communication cho cluster membership

Failover Scenario

┌─────────────┐           ┌─────────────┐
│  Server A   │           │  Server B   │
│  (Primary)  │  ←─────▶  │ (Secondary) │
│             │           │             │
│ SBB Entity  │  Replicate│ SBB Entity  │
│ Processing  │   State   │ Standby     │
└─────────────┘           └─────────────┘
       │                         ▲
       │ Server Dies              │ Takeover
       ▼                         │
┌─────────────┐                  │
│  Server B   │◄─────────────────┘
│ (Primary)   │   SBB Entity resumes
│             │   processing seamlessly
└─────────────┘

Use Cases

  • VoLTE/IMS: Xử lý SIP signaling với độ trễ thấp
  • SMSC: High-throughput SMS processing
  • USSD: Real-time USSD gateway
  • Diameter: AAA và policy control
  • SS7/SSU: MAP/CAP/TCAP signaling

License

Dự án được phát triển dựa trên RestComm JAIN-SLEE với giấy phép:

  • GNU Affero General Public License v3.0

Changelog

v8.0.0 - "100K Scale" (Current)

Major Performance Enhancements

  • SBB Pool: Increased to 100K max concurrent entities
    • minIdle = 5000 (pre-warmed)
    • maxActive = 100000
    • maxIdle = 80000
  • Ring Buffer: Increased from 32K to 262144 (256K slots)
  • LMAX Disruptor: Lock-free event processing with 8 worker threads
  • Timer Facility: 4 dedicated threads with transaction awareness

System Properties Support

All configurations now support JVM system properties for runtime tuning:

  • -Djainslee.sbb.pool.* - SBB pool tuning
  • -Djainslee.eventrouter.* - Event router configuration
  • -Djainslee.timer.threads - Timer thread count

Project: JAIN-SLEE Performance Enhanced Maintainer: nhanth87 Based on: RestComm/jain-slee

About

First and Only Open Source compliant JAIN-SLEE (JSLEE) 1.1 Implementation

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • Java 85.5%
  • CSS 11.3%
  • JavaScript 2.7%
  • Other 0.5%