Extract product-agnostic workflow engine from Ablera.Serdica.Workflow into standalone StellaOps.Workflow.* libraries targeting net10.0. Libraries (14): - Contracts, Abstractions (compiler, decompiler, expression runtime) - Engine (execution, signaling, scheduling, projections, hosted services) - ElkSharp (generic graph layout algorithm) - Renderer.ElkSharp, Renderer.ElkJs, Renderer.Msagl, Renderer.Svg - Signaling.Redis, Signaling.OracleAq - DataStore.MongoDB, DataStore.PostgreSQL, DataStore.Oracle WebService: ASP.NET Core Minimal API with 22 endpoints Tests (8 projects, 109 tests pass): - Engine.Tests (105 pass), WebService.Tests (4 E2E pass) - Renderer.Tests, DataStore.MongoDB/Oracle/PostgreSQL.Tests - Signaling.Redis.Tests, IntegrationTests.Shared Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
212 lines
7.1 KiB
JSON
212 lines
7.1 KiB
JSON
{
|
|
"Date": "2026-03-17",
|
|
"Workspace": "C:\\dev\\serdica-backend4",
|
|
"TestCommand": "dotnet test src/Serdica/Ablera.Serdica.Workflow/__Tests/Ablera.Serdica.Workflow.IntegrationTests/Ablera.Serdica.Workflow.IntegrationTests.csproj -c Release --no-build --filter \"FullyQualifiedName~MongoPerformance\"",
|
|
"SuiteResult": {
|
|
"Passed": 14,
|
|
"Total": 14,
|
|
"Duration": "48 s"
|
|
},
|
|
"RawArtifactDirectory": "src/Serdica/Ablera.Serdica.Workflow/__Tests/Ablera.Serdica.Workflow.IntegrationTests/bin/Release/net9.0/TestResults/workflow-performance/",
|
|
"MongoEnvironment": {
|
|
"DockerImage": "mongo:7.0",
|
|
"Topology": "single-node replica set",
|
|
"Version": "7.0.30",
|
|
"Backend": "Durable collections plus change-stream wake hints"
|
|
},
|
|
"MeasurementViews": {
|
|
"SerialLatencyScenario": "mongo-signal-roundtrip-latency-serial",
|
|
"SteadyThroughputScenario": "mongo-signal-roundtrip-throughput-parallel",
|
|
"CapacityScenarioPrefix": "mongo-signal-roundtrip-capacity-"
|
|
},
|
|
"Notes": {
|
|
"TopWaitCounts": [
|
|
{
|
|
"Name": "(none)",
|
|
"Count": 14
|
|
}
|
|
],
|
|
"Interpretation": [
|
|
"Serial latency baseline and steady throughput baseline are separated from the capacity ladder.",
|
|
"Mongo exposed two backend-correctness issues during the first performance pass: bounded idle receive and explicit collection bootstrap.",
|
|
"Mongo scales very strongly through c8 on this local replica-set baseline.",
|
|
"c16 is the first visible pressure rung because latency rises materially even though throughput still improves."
|
|
]
|
|
},
|
|
"Scenarios": [
|
|
{
|
|
"ScenarioName": "mongo-signal-roundtrip-capacity-c1",
|
|
"Tier": "WorkflowPerfCapacity",
|
|
"OperationCount": 16,
|
|
"Concurrency": 1,
|
|
"DurationMilliseconds": 2259.99,
|
|
"ThroughputPerSecond": 7.08,
|
|
"AverageLatencyMilliseconds": 1394.99,
|
|
"P95LatencyMilliseconds": 1576.55,
|
|
"MaxLatencyMilliseconds": 2063.72,
|
|
"CounterDeltas": {
|
|
"opcounters.command": 183,
|
|
"opcounters.insert": 48,
|
|
"opcounters.update": 48,
|
|
"opcounters.delete": 16,
|
|
"metrics.document.returned": 80,
|
|
"metrics.document.inserted": 48,
|
|
"metrics.document.updated": 48,
|
|
"metrics.document.deleted": 16
|
|
}
|
|
},
|
|
{
|
|
"ScenarioName": "mongo-signal-roundtrip-capacity-c4",
|
|
"Tier": "WorkflowPerfCapacity",
|
|
"OperationCount": 64,
|
|
"Concurrency": 4,
|
|
"DurationMilliseconds": 1668.99,
|
|
"ThroughputPerSecond": 38.35,
|
|
"AverageLatencyMilliseconds": 1244.81,
|
|
"P95LatencyMilliseconds": 1472.61,
|
|
"MaxLatencyMilliseconds": 1527.26,
|
|
"CounterDeltas": {
|
|
"opcounters.command": 684,
|
|
"opcounters.insert": 192,
|
|
"opcounters.update": 192,
|
|
"opcounters.delete": 64,
|
|
"metrics.document.returned": 320,
|
|
"metrics.document.inserted": 192,
|
|
"metrics.document.updated": 192,
|
|
"metrics.document.deleted": 64
|
|
}
|
|
},
|
|
{
|
|
"ScenarioName": "mongo-signal-roundtrip-capacity-c8",
|
|
"Tier": "WorkflowPerfCapacity",
|
|
"OperationCount": 128,
|
|
"Concurrency": 8,
|
|
"DurationMilliseconds": 1938.12,
|
|
"ThroughputPerSecond": 66.04,
|
|
"AverageLatencyMilliseconds": 1477.49,
|
|
"P95LatencyMilliseconds": 1743.52,
|
|
"MaxLatencyMilliseconds": 1757.88,
|
|
"CounterDeltas": {
|
|
"opcounters.command": 1349,
|
|
"opcounters.insert": 384,
|
|
"opcounters.update": 384,
|
|
"opcounters.delete": 128,
|
|
"metrics.document.returned": 640,
|
|
"metrics.document.inserted": 384,
|
|
"metrics.document.updated": 384,
|
|
"metrics.document.deleted": 128
|
|
}
|
|
},
|
|
{
|
|
"ScenarioName": "mongo-signal-roundtrip-capacity-c16",
|
|
"Tier": "WorkflowPerfCapacity",
|
|
"OperationCount": 256,
|
|
"Concurrency": 16,
|
|
"DurationMilliseconds": 3728.88,
|
|
"ThroughputPerSecond": 68.65,
|
|
"AverageLatencyMilliseconds": 3203.94,
|
|
"P95LatencyMilliseconds": 3507.95,
|
|
"MaxLatencyMilliseconds": 3527.96,
|
|
"CounterDeltas": {
|
|
"opcounters.command": 2515,
|
|
"opcounters.insert": 768,
|
|
"opcounters.update": 768,
|
|
"opcounters.delete": 256,
|
|
"metrics.document.returned": 1280,
|
|
"metrics.document.inserted": 768,
|
|
"metrics.document.updated": 768,
|
|
"metrics.document.deleted": 256
|
|
}
|
|
},
|
|
{
|
|
"ScenarioName": "mongo-signal-roundtrip-latency-serial",
|
|
"Tier": "WorkflowPerfLatency",
|
|
"OperationCount": 16,
|
|
"Concurrency": 1,
|
|
"DurationMilliseconds": 1675.77,
|
|
"ThroughputPerSecond": 9.55,
|
|
"AverageLatencyMilliseconds": 97.88,
|
|
"P95LatencyMilliseconds": 149.20,
|
|
"MaxLatencyMilliseconds": 324.02,
|
|
"PhaseLatencySummaries": {
|
|
"start": {
|
|
"AverageMilliseconds": 26.34,
|
|
"P95Milliseconds": 79.35,
|
|
"MaxMilliseconds": 251.36
|
|
},
|
|
"signalPublish": {
|
|
"AverageMilliseconds": 8.17,
|
|
"P95Milliseconds": 10.75,
|
|
"MaxMilliseconds": 12.17
|
|
},
|
|
"signalToCompletion": {
|
|
"AverageMilliseconds": 71.54,
|
|
"P95Milliseconds": 77.94,
|
|
"MaxMilliseconds": 79.48
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"ScenarioName": "mongo-signal-roundtrip-throughput-parallel",
|
|
"Tier": "WorkflowPerfThroughput",
|
|
"OperationCount": 96,
|
|
"Concurrency": 16,
|
|
"DurationMilliseconds": 1258.48,
|
|
"ThroughputPerSecond": 76.28,
|
|
"AverageLatencyMilliseconds": 1110.94,
|
|
"P95LatencyMilliseconds": 1121.22,
|
|
"MaxLatencyMilliseconds": 1127.11,
|
|
"PhaseLatencySummaries": {
|
|
"start": {
|
|
"AverageMilliseconds": 20.88,
|
|
"P95Milliseconds": 28.64,
|
|
"MaxMilliseconds": 33.67
|
|
},
|
|
"signalPublish": {
|
|
"AverageMilliseconds": 16.01,
|
|
"P95Milliseconds": 20.90,
|
|
"MaxMilliseconds": 22.71
|
|
},
|
|
"signalToCompletion": {
|
|
"AverageMilliseconds": 988.88,
|
|
"P95Milliseconds": 1000.12,
|
|
"MaxMilliseconds": 1004.92
|
|
}
|
|
},
|
|
"CounterDeltas": {
|
|
"opcounters.command": 1049,
|
|
"opcounters.insert": 288,
|
|
"opcounters.update": 288,
|
|
"opcounters.delete": 96,
|
|
"metrics.document.returned": 480,
|
|
"metrics.document.inserted": 288,
|
|
"metrics.document.updated": 288,
|
|
"metrics.document.deleted": 96
|
|
}
|
|
},
|
|
{
|
|
"ScenarioName": "mongo-signal-roundtrip-soak",
|
|
"Tier": "WorkflowPerfSoak",
|
|
"OperationCount": 108,
|
|
"Concurrency": 8,
|
|
"DurationMilliseconds": 2267.91,
|
|
"ThroughputPerSecond": 47.62,
|
|
"AverageLatencyMilliseconds": 322.40,
|
|
"P95LatencyMilliseconds": 550.50,
|
|
"MaxLatencyMilliseconds": 572.73,
|
|
"CounterDeltas": {
|
|
"opcounters.command": 2264,
|
|
"opcounters.insert": 324,
|
|
"opcounters.update": 324,
|
|
"opcounters.delete": 108,
|
|
"metrics.document.returned": 540,
|
|
"metrics.document.inserted": 324,
|
|
"metrics.document.updated": 324,
|
|
"metrics.document.deleted": 108,
|
|
"transactions.totalStarted": 216,
|
|
"transactions.totalCommitted": 216
|
|
}
|
|
}
|
|
]
|
|
}
|