Advanced Configuration Guide
This guide covers advanced configuration topics for FIX-FastTrade, including performance tuning, security settings, and production deployment configurations.
Performance Tuning
CPU Affinity Configuration
For optimal performance, bind different components to specific CPU cores:
<performance>
<cpuAffinity>true</cpuAffinity>
<cpuMain>0</cpuMain> <!-- Main application thread -->
<cpuFix>1</cpuFix> <!-- FIX protocol processing -->
<cpuOrder>2</cpuOrder> <!-- Order processing -->
<cpuMarket>3</cpuMarket> <!-- Market data processing -->
</performance>
Command line equivalent:
./bin/fix-fasttrade \
--config config/fix-config.xml \
--cpu-main 0 --cpu-fix 1 --cpu-order 2 --cpu-market 3
Memory Optimization
Configure memory settings for low-latency operation:
<performance>
<!-- Lock memory pages to prevent swapping -->
<memoryLock>true</memoryLock>
<!-- Pre-allocate memory pools -->
<memoryPoolSize>1048576</memoryPoolSize>
<preallocateMemory>true</preallocateMemory>
<!-- Message buffer settings -->
<messageBufferSize>8192</messageBufferSize>
<maxConcurrentMessages>10000</maxConcurrentMessages>
</performance>
Thread Priority Settings
Set real-time thread priorities for critical components:
<performance>
<!-- Set thread priority (-20 to 20, lower is higher priority) -->
<threadPriority>-10</threadPriority>
<!-- Use real-time scheduling (requires root privileges) -->
<useRealTimeScheduling>true</useRealTimeScheduling>
<!-- Thread stack size in bytes -->
<threadStackSize>8388608</threadStackSize>
</performance>
Network Configuration
Connection Settings
Configure network parameters for optimal connectivity:
<session>
<!-- Connection timeouts -->
<connectTimeout>30</connectTimeout>
<reconnectInterval>5</reconnectInterval>
<maxReconnectAttempts>10</maxReconnectAttempts>
<!-- TCP settings -->
<tcpNoDelay>true</tcpNoDelay>
<socketBufferSize>65536</socketBufferSize>
<!-- Keep-alive settings -->
<keepAlive>true</keepAlive>
<keepAliveInterval>60</keepAliveInterval>
</session>
SSL/TLS Configuration
For secure connections:
<session>
<useSSL>true</useSSL>
<sslCertFile>/path/to/cert.pem</sslCertFile>
<sslKeyFile>/path/to/key.pem</sslKeyFile>
<sslCAFile>/path/to/ca.pem</sslCAFile>
<sslVerifyPeer>true</sslVerifyPeer>
</session>
Message Processing Configuration
Message Validation
Configure message validation settings:
<session>
<!-- Enable/disable message validation -->
<validateMessages>true</validateMessages>
<!-- Strict field validation -->
<strictFieldValidation>true</strictFieldValidation>
<!-- Maximum message size -->
<maxMessageSize>8192</maxMessageSize>
<!-- Message timeout settings -->
<messageTimeout>30</messageTimeout>
</session>
Sequence Number Management
Configure sequence number handling:
<session>
<!-- Reset sequence numbers on startup -->
<resetSeqNumFlag>false</resetSeqNumFlag>
<!-- Starting sequence numbers -->
<nextSenderMsgSeqNum>1</nextSenderMsgSeqNum>
<nextTargetMsgSeqNum>1</nextTargetMsgSeqNum>
<!-- Sequence number persistence -->
<persistSequenceNumbers>true</persistSequenceNumbers>
<sequenceNumberFile>data/seqnums.dat</sequenceNumberFile>
</session>
Advanced Logging Configuration
Structured Logging
Configure detailed logging for different components:
<logging>
<!-- Global log level -->
<level>INFO</level>
<!-- Component-specific logging -->
<components>
<fix>DEBUG</fix>
<trading>INFO</trading>
<network>WARN</network>
<performance>INFO</performance>
</components>
<!-- Log formatting -->
<timestampFormat>%Y-%m-%d %H:%M:%S.%f</timestampFormat>
<includeThreadId>true</includeThreadId>
<includeLocation>false</includeLocation>
</logging>
Log Rotation and Archival
Configure log file management:
<logging>
<file>logs/fix-fasttrade.log</file>
<!-- Rotation settings -->
<rotateDaily>true</rotateDaily>
<maxFileSize>100MB</maxFileSize>
<maxFiles>30</maxFiles>
<!-- Compression -->
<compressRotatedFiles>true</compressRotatedFiles>
<!-- Archive settings -->
<archiveOldLogs>true</archiveOldLogs>
<archiveDirectory>logs/archive</archiveDirectory>
</logging>
Security Configuration
Authentication Settings
Configure FIX session authentication:
<session>
<!-- Basic authentication -->
<username>trader_001</username>
<password>secure_password</password>
<!-- Certificate-based authentication -->
<useCertificateAuth>true</useCertificateAuth>
<clientCertFile>/path/to/client.crt</clientCertFile>
<clientKeyFile>/path/to/client.key</clientKeyFile>
</session>
Access Control
Configure access restrictions:
<security>
<!-- IP address restrictions -->
<allowedIPs>
<ip>192.168.1.0/24</ip>
<ip>10.0.0.100</ip>
</allowedIPs>
<!-- Rate limiting -->
<maxMessagesPerSecond>1000</maxMessagesPerSecond>
<maxOrdersPerSecond>100</maxOrdersPerSecond>
<!-- Session limits -->
<maxConcurrentSessions>10</maxConcurrentSessions>
</security>
Environment-Specific Configurations
Development Environment
Configuration optimized for development:
<?xml version="1.0" encoding="UTF-8"?>
<fix>
<session>
<senderCompID>DEV_TRADER</senderCompID>
<targetCompID>DEV_EXCHANGE</targetCompID>
<host>localhost</host>
<port>9878</port>
<heartBtInt>60</heartBtInt>
<validateMessages>false</validateMessages>
<resetSeqNumFlag>true</resetSeqNumFlag>
</session>
<logging>
<level>DEBUG</level>
<console>true</console>
<file>logs/dev-fix-fasttrade.log</file>
<components>
<fix>DEBUG</fix>
<trading>DEBUG</trading>
</components>
</logging>
<performance>
<cpuAffinity>false</cpuAffinity>
<memoryLock>false</memoryLock>
<threadPriority>0</threadPriority>
</performance>
</fix>
Staging Environment
Configuration for staging/testing:
<?xml version="1.0" encoding="UTF-8"?>
<fix>
<session>
<senderCompID>STAGE_TRADER_001</senderCompID>
<targetCompID>STAGE_EXCHANGE</targetCompID>
<host>staging.exchange.com</host>
<port>9878</port>
<heartBtInt>30</heartBtInt>
<validateMessages>true</validateMessages>
<useSSL>true</useSSL>
</session>
<logging>
<level>INFO</level>
<file>logs/stage-fix-fasttrade.log</file>
<rotateDaily>true</rotateDaily>
<maxFiles>7</maxFiles>
</logging>
<performance>
<cpuAffinity>true</cpuAffinity>
<cpuMain>0</cpuMain>
<cpuFix>1</cpuFix>
<memoryLock>true</memoryLock>
<threadPriority>-5</threadPriority>
</performance>
</fix>
Production Environment
High-performance production configuration:
<?xml version="1.0" encoding="UTF-8"?>
<fix>
<session>
<senderCompID>PROD_TRADER_001</senderCompID>
<targetCompID>EXCHANGE_PROD</targetCompID>
<host>fix.exchange.com</host>
<port>9878</port>
<heartBtInt>30</heartBtInt>
<validateMessages>true</validateMessages>
<strictFieldValidation>true</strictFieldValidation>
<useSSL>true</useSSL>
<persistSequenceNumbers>true</persistSequenceNumbers>
</session>
<logging>
<level>WARN</level>
<file>/var/log/fix-fasttrade/fix-fasttrade.log</file>
<rotateDaily>true</rotateDaily>
<maxFiles>30</maxFiles>
<compressRotatedFiles>true</compressRotatedFiles>
</logging>
<performance>
<cpuAffinity>true</cpuAffinity>
<cpuMain>0</cpuMain>
<cpuFix>1</cpuFix>
<cpuOrder>2</cpuOrder>
<cpuMarket>3</cpuMarket>
<memoryLock>true</memoryLock>
<threadPriority>-15</threadPriority>
<useRealTimeScheduling>true</useRealTimeScheduling>
</performance>
<security>
<allowedIPs>
<ip>10.0.1.0/24</ip>
</allowedIPs>
<maxMessagesPerSecond>10000</maxMessagesPerSecond>
<maxOrdersPerSecond>1000</maxOrdersPerSecond>
</security>
</fix>
Configuration Management
Configuration Validation
Always validate configurations before deployment:
# XML syntax validation
xmllint --noout config/fix-config.xml
# Application configuration validation
./bin/fix-fasttrade --config config/fix-config.xml --validate
# Dry run test
./bin/fix-fasttrade --config config/fix-config.xml --dry-run
Configuration Templates
Use configuration templates for consistency:
# Copy template
cp config/templates/production-template.xml config/prod-config.xml
# Customize for your environment
sed -i 's/TEMPLATE_SENDER_ID/ACTUAL_SENDER_ID/g' config/prod-config.xml
Version Control
Keep configurations in version control:
# Track configuration changes
git add config/
git commit -m "Update production configuration for new exchange"
# Use environment-specific branches
git checkout production
git merge staging
Monitoring Configuration Changes
Monitor configuration file changes:
# File integrity monitoring
sha256sum config/fix-config.xml > config/fix-config.xml.sha256
# Automated validation on changes
inotifywait -m config/ -e modify --format '%w%f' | while read file; do
xmllint --noout "$file" && echo "Configuration valid"
done