Documentation
¶
Overview ¶
Package bench provides shared types and helper functions for benchmarking the mono-framework. Inspired by nats.go/bench/bench.go patterns.
Package bench provides multi-module benchmark infrastructure for measuring inter-module communication performance in the mono-framework.
This file contains simplified benchmark module implementations that simulate a realistic order workflow with 4 modules:
- BenchInventoryModule: Provides stock checking service (RequestReply)
- BenchPaymentModule: Provides payment processing service (RequestReply)
- BenchNotificationModule: Provides notification service (QueueGroup + EventConsumer)
- BenchOrderModule: Orchestrates the order workflow (DependentModule + EventEmitter)
Index ¶
- Constants
- Variables
- func GeneratePayload(size int) []byte
- func NewBenchApp() (mono.MonoApplication, error)
- func NewBenchAppWithJetStream(storageDir string) (mono.MonoApplication, error)
- func NewBenchAppWithOptions(opts BenchAppOptions) (mono.MonoApplication, error)
- type BenchAppOptions
- type BenchCheckStockRequest
- type BenchCheckStockResponse
- type BenchConsumerModule
- func (m *BenchConsumerModule) DepContainer() mono.ServiceContainer
- func (m *BenchConsumerModule) Dependencies() []string
- func (m *BenchConsumerModule) Name() string
- func (m *BenchConsumerModule) SetDependencyServiceContainer(_ string, container mono.ServiceContainer)
- func (m *BenchConsumerModule) Start(_ context.Context) error
- func (m *BenchConsumerModule) Stop(_ context.Context) error
- type BenchEventConsumerModule
- type BenchEventEmitterModule
- func (m *BenchEventEmitterModule) EmitEvents() []mono.BaseEventDefinition
- func (m *BenchEventEmitterModule) EventBus() mono.EventBus
- func (m *BenchEventEmitterModule) Name() string
- func (m *BenchEventEmitterModule) SetEventBus(bus mono.EventBus)
- func (m *BenchEventEmitterModule) Start(_ context.Context) error
- func (m *BenchEventEmitterModule) Stop(_ context.Context) error
- type BenchEventStreamConsumerModule
- type BenchInventoryModule
- type BenchNotificationModule
- func (m *BenchNotificationModule) Name() string
- func (m *BenchNotificationModule) RegisterEventConsumers(registry mono.EventRegistry) error
- func (m *BenchNotificationModule) RegisterServices(container mono.ServiceContainer) error
- func (m *BenchNotificationModule) Start(_ context.Context) error
- func (m *BenchNotificationModule) Stop(_ context.Context) error
- type BenchNotificationRequest
- type BenchOrderCreatedEvent
- type BenchOrderModule
- func (m *BenchOrderModule) Container() mono.ServiceContainer
- func (m *BenchOrderModule) Dependencies() []string
- func (m *BenchOrderModule) EmitEvents() []mono.BaseEventDefinition
- func (m *BenchOrderModule) Name() string
- func (m *BenchOrderModule) RegisterServices(container mono.ServiceContainer) error
- func (m *BenchOrderModule) SetDependencyServiceContainer(dep string, container mono.ServiceContainer)
- func (m *BenchOrderModule) SetEventBus(bus mono.EventBus)
- func (m *BenchOrderModule) Start(_ context.Context) error
- func (m *BenchOrderModule) Stop(_ context.Context) error
- type BenchOrderRequest
- type BenchOrderResponse
- type BenchPaymentModule
- type BenchPaymentRequest
- type BenchPaymentResponse
- type BenchProviderModule
- func (m *BenchProviderModule) Container() mono.ServiceContainer
- func (m *BenchProviderModule) Name() string
- func (m *BenchProviderModule) RegisterServices(container mono.ServiceContainer) error
- func (m *BenchProviderModule) Start(_ context.Context) error
- func (m *BenchProviderModule) Stop(_ context.Context) error
- type MultiModuleBenchSetup
- type RealisticBenchModule
- func (m *RealisticBenchModule) Container() mono.ServiceContainer
- func (m *RealisticBenchModule) Name() string
- func (m *RealisticBenchModule) RegisterServices(container mono.ServiceContainer) error
- func (m *RealisticBenchModule) Start(_ context.Context) error
- func (m *RealisticBenchModule) Stop(_ context.Context) error
Constants ¶
const DefaultPayloadSize = 256
DefaultPayloadSize is the standard payload size for benchmarks (256 bytes).
Variables ¶
var BenchOrderCreatedV1 = helper.EventDefinition[BenchOrderCreatedEvent](
"bench-order", "BenchOrderCreated", "v1",
)
BenchOrderCreatedV1 is the event definition for benchmark order events.
var MultiModuleResult any
MultiModuleResult is a sink variable to prevent compiler optimizations in multi-module benchmarks. Exported to satisfy the unused linter.
var PayloadSizes = []int{256, 1024, 5120}
PayloadSizes defines payload sizes for sub-benchmarks (256B, 1KB, 5KB).
Functions ¶
func GeneratePayload ¶
GeneratePayload creates a byte slice of the given size with non-zero data. This prevents compiler optimization and simulates real message payloads.
func NewBenchApp ¶
func NewBenchApp() (mono.MonoApplication, error)
NewBenchApp creates a MonoApplication configured for minimal overhead benchmarks. It uses in-process connections with TCP listening disabled.
func NewBenchAppWithJetStream ¶
func NewBenchAppWithJetStream(storageDir string) (mono.MonoApplication, error)
NewBenchAppWithJetStream creates a MonoApplication with JetStream enabled. Uses in-process connections for minimal overhead.
func NewBenchAppWithOptions ¶
func NewBenchAppWithOptions(opts BenchAppOptions) (mono.MonoApplication, error)
NewBenchAppWithOptions creates a MonoApplication with configurable options.
- InProcess=true: Uses in-process connections (no TCP listening)
- InProcess=false: Uses TCP socket connections (listens on auto-assigned port)
- JetStreamDir non-empty: Enables JetStream with the specified storage directory
Types ¶
type BenchAppOptions ¶
type BenchAppOptions struct {
InProcess bool // Use in-process connections (no TCP socket)
JetStreamDir string // Enable JetStream with this storage directory (empty = disabled)
}
BenchAppOptions configures benchmark application creation.
type BenchCheckStockRequest ¶
type BenchCheckStockRequest struct {
ProductID string `json:"product_id"`
Quantity int `json:"quantity"`
}
BenchCheckStockRequest is a simplified stock check request.
type BenchCheckStockResponse ¶
BenchCheckStockResponse is a simplified stock check response.
type BenchConsumerModule ¶
type BenchConsumerModule struct {
// contains filtered or unexported fields
}
BenchConsumerModule is a minimal consumer module for benchmarks. It implements Module and DependentModule interfaces. Note: This module only stores a single dependency container for simplicity. If multiple dependencies are needed, use a map[string]mono.ServiceContainer instead.
func NewBenchConsumerModule ¶
func NewBenchConsumerModule(name string, deps []string) *BenchConsumerModule
NewBenchConsumerModule creates a new consumer module with the given name and dependencies.
func (*BenchConsumerModule) DepContainer ¶
func (m *BenchConsumerModule) DepContainer() mono.ServiceContainer
DepContainer returns the stored dependency container.
func (*BenchConsumerModule) Dependencies ¶
func (m *BenchConsumerModule) Dependencies() []string
Dependencies returns the list of module dependencies.
func (*BenchConsumerModule) Name ¶
func (m *BenchConsumerModule) Name() string
Name returns the module name.
func (*BenchConsumerModule) SetDependencyServiceContainer ¶
func (m *BenchConsumerModule) SetDependencyServiceContainer(_ string, container mono.ServiceContainer)
SetDependencyServiceContainer stores the dependency's service container.
type BenchEventConsumerModule ¶
type BenchEventConsumerModule struct {
// contains filtered or unexported fields
}
BenchEventConsumerModule is a minimal event consumer module for benchmarks. It implements Module and EventConsumerModule interfaces.
func NewBenchEventConsumerModule ¶
func NewBenchEventConsumerModule(name string, eventDef mono.BaseEventDefinition, handler mono.EventConsumerHandler) *BenchEventConsumerModule
NewBenchEventConsumerModule creates a new event consumer module.
func (*BenchEventConsumerModule) Name ¶
func (m *BenchEventConsumerModule) Name() string
Name returns the module name.
func (*BenchEventConsumerModule) RegisterEventConsumers ¶
func (m *BenchEventConsumerModule) RegisterEventConsumers(registry mono.EventRegistry) error
RegisterEventConsumers registers the event consumer handler.
type BenchEventEmitterModule ¶
type BenchEventEmitterModule struct {
// contains filtered or unexported fields
}
BenchEventEmitterModule is a minimal event emitter module for benchmarks. It implements Module, EventBusAwareModule, and EventEmitterModule interfaces.
func NewBenchEventEmitterModule ¶
func NewBenchEventEmitterModule(name string, eventDef mono.BaseEventDefinition) *BenchEventEmitterModule
NewBenchEventEmitterModule creates a new event emitter module.
func (*BenchEventEmitterModule) EmitEvents ¶
func (m *BenchEventEmitterModule) EmitEvents() []mono.BaseEventDefinition
EmitEvents returns the list of event definitions this module emits.
func (*BenchEventEmitterModule) EventBus ¶
func (m *BenchEventEmitterModule) EventBus() mono.EventBus
EventBus returns the stored event bus.
func (*BenchEventEmitterModule) Name ¶
func (m *BenchEventEmitterModule) Name() string
Name returns the module name.
func (*BenchEventEmitterModule) SetEventBus ¶
func (m *BenchEventEmitterModule) SetEventBus(bus mono.EventBus)
SetEventBus stores the event bus for publishing events.
type BenchEventStreamConsumerModule ¶
type BenchEventStreamConsumerModule struct {
// contains filtered or unexported fields
}
BenchEventStreamConsumerModule is a minimal event stream consumer module for benchmarks. It implements Module and EventConsumerModule interfaces with JetStream support.
func NewBenchEventStreamConsumerModule ¶
func NewBenchEventStreamConsumerModule( name string, eventDef mono.BaseEventDefinition, config mono.StreamConsumerConfig, handler mono.EventStreamConsumerHandler, ) *BenchEventStreamConsumerModule
NewBenchEventStreamConsumerModule creates a new event stream consumer module with JetStream config.
func (*BenchEventStreamConsumerModule) Name ¶
func (m *BenchEventStreamConsumerModule) Name() string
Name returns the module name.
func (*BenchEventStreamConsumerModule) RegisterEventConsumers ¶
func (m *BenchEventStreamConsumerModule) RegisterEventConsumers(registry mono.EventRegistry) error
RegisterEventConsumers registers the event stream consumer with JetStream config.
type BenchInventoryModule ¶
type BenchInventoryModule struct {
// contains filtered or unexported fields
}
BenchInventoryModule is a simplified inventory module for benchmarks. It implements Module and ServiceProviderModule interfaces.
func NewBenchInventoryModule ¶
func NewBenchInventoryModule() *BenchInventoryModule
NewBenchInventoryModule creates a new benchmark inventory module.
func (*BenchInventoryModule) Name ¶
func (m *BenchInventoryModule) Name() string
Name returns the module name.
func (*BenchInventoryModule) RegisterServices ¶
func (m *BenchInventoryModule) RegisterServices(container mono.ServiceContainer) error
RegisterServices registers the check-stock RequestReply service.
type BenchNotificationModule ¶
type BenchNotificationModule struct {
NotifCount atomic.Int64 // Counter for queue group notifications
EventCount atomic.Int64 // Counter for event notifications
// contains filtered or unexported fields
}
BenchNotificationModule is a simplified notification module for benchmarks. It implements ServiceProviderModule (QueueGroup) and EventConsumerModule interfaces.
func NewBenchNotificationModule ¶
func NewBenchNotificationModule() *BenchNotificationModule
NewBenchNotificationModule creates a new benchmark notification module.
func (*BenchNotificationModule) Name ¶
func (m *BenchNotificationModule) Name() string
Name returns the module name.
func (*BenchNotificationModule) RegisterEventConsumers ¶
func (m *BenchNotificationModule) RegisterEventConsumers(registry mono.EventRegistry) error
RegisterEventConsumers registers the event consumer for BenchOrderCreatedV1.
func (*BenchNotificationModule) RegisterServices ¶
func (m *BenchNotificationModule) RegisterServices(container mono.ServiceContainer) error
RegisterServices registers the on-order-created QueueGroup service.
type BenchNotificationRequest ¶
type BenchNotificationRequest struct {
OrderID string `json:"order_id"`
ProductID string `json:"product_id"`
Amount float64 `json:"amount"`
}
BenchNotificationRequest is a simplified notification request.
type BenchOrderCreatedEvent ¶
type BenchOrderCreatedEvent struct {
OrderID string `json:"order_id"`
ProductID string `json:"product_id"`
Amount float64 `json:"amount"`
Timestamp time.Time `json:"timestamp"`
}
BenchOrderCreatedEvent represents the order created event for benchmarks.
type BenchOrderModule ¶
type BenchOrderModule struct {
// contains filtered or unexported fields
}
BenchOrderModule is a simplified order module that orchestrates the workflow. It implements DependentModule, ServiceProviderModule, and EventEmitterModule interfaces.
func NewBenchOrderModule ¶
func NewBenchOrderModule() *BenchOrderModule
NewBenchOrderModule creates a new benchmark order module.
func (*BenchOrderModule) Container ¶
func (m *BenchOrderModule) Container() mono.ServiceContainer
Container returns the module's service container for external access.
func (*BenchOrderModule) Dependencies ¶
func (m *BenchOrderModule) Dependencies() []string
Dependencies returns the list of module dependencies.
func (*BenchOrderModule) EmitEvents ¶
func (m *BenchOrderModule) EmitEvents() []mono.BaseEventDefinition
EmitEvents returns the list of event definitions this module emits.
func (*BenchOrderModule) Name ¶
func (m *BenchOrderModule) Name() string
Name returns the module name.
func (*BenchOrderModule) RegisterServices ¶
func (m *BenchOrderModule) RegisterServices(container mono.ServiceContainer) error
RegisterServices registers the place-order RequestReply service.
func (*BenchOrderModule) SetDependencyServiceContainer ¶
func (m *BenchOrderModule) SetDependencyServiceContainer(dep string, container mono.ServiceContainer)
SetDependencyServiceContainer stores the dependency's service container.
func (*BenchOrderModule) SetEventBus ¶
func (m *BenchOrderModule) SetEventBus(bus mono.EventBus)
SetEventBus stores the event bus for publishing events.
type BenchOrderRequest ¶
type BenchOrderRequest struct {
ProductID string `json:"product_id"`
Quantity int `json:"quantity"`
Amount float64 `json:"amount"`
Currency string `json:"currency"`
}
BenchOrderRequest is a simplified order request.
type BenchOrderResponse ¶
BenchOrderResponse is a simplified order response.
type BenchPaymentModule ¶
type BenchPaymentModule struct {
// contains filtered or unexported fields
}
BenchPaymentModule is a simplified payment module for benchmarks. It implements Module and ServiceProviderModule interfaces.
func NewBenchPaymentModule ¶
func NewBenchPaymentModule() *BenchPaymentModule
NewBenchPaymentModule creates a new benchmark payment module.
func (*BenchPaymentModule) Name ¶
func (m *BenchPaymentModule) Name() string
Name returns the module name.
func (*BenchPaymentModule) RegisterServices ¶
func (m *BenchPaymentModule) RegisterServices(container mono.ServiceContainer) error
RegisterServices registers the process RequestReply service.
type BenchPaymentRequest ¶
type BenchPaymentRequest struct {
OrderID string `json:"order_id"`
Amount float64 `json:"amount"`
Currency string `json:"currency"`
}
BenchPaymentRequest is a simplified payment request.
type BenchPaymentResponse ¶
type BenchPaymentResponse struct {
Success bool `json:"success"`
TransactionID string `json:"transaction_id"`
}
BenchPaymentResponse is a simplified payment response.
type BenchProviderModule ¶
type BenchProviderModule struct {
// SetupFunc is called during RegisterServices - set by benchmark to configure services
SetupFunc func(container mono.ServiceContainer) error
// contains filtered or unexported fields
}
BenchProviderModule is a minimal provider module for benchmarks. It implements Module and ServiceProviderModule interfaces.
func NewBenchProviderModule ¶
func NewBenchProviderModule(name string) *BenchProviderModule
NewBenchProviderModule creates a new provider module with the given name.
func (*BenchProviderModule) Container ¶
func (m *BenchProviderModule) Container() mono.ServiceContainer
Container returns the module's service container.
func (*BenchProviderModule) Name ¶
func (m *BenchProviderModule) Name() string
Name returns the module name.
func (*BenchProviderModule) RegisterServices ¶
func (m *BenchProviderModule) RegisterServices(container mono.ServiceContainer) error
RegisterServices registers services using the SetupFunc if provided.
type MultiModuleBenchSetup ¶
type MultiModuleBenchSetup struct {
App mono.MonoApplication
Inventory *BenchInventoryModule
Payment *BenchPaymentModule
Notification *BenchNotificationModule
Order *BenchOrderModule
}
MultiModuleBenchSetup contains all components for multi-module benchmarks.
func NewMultiModuleBenchSetup ¶
func NewMultiModuleBenchSetup() (*MultiModuleBenchSetup, error)
NewMultiModuleBenchSetup creates a complete multi-module benchmark environment.
type RealisticBenchModule ¶
type RealisticBenchModule struct {
// contains filtered or unexported fields
}
RealisticBenchModule is a more realistic module for memory/startup benchmarks. It includes internal data structures, proper lifecycle, and a registered service. Use this for benchmarks that need to simulate real-world module behavior with internal state and service registration overhead.
For minimal overhead benchmarks focusing on framework-level operations, use BenchProviderModule instead.
func NewRealisticBenchModule ¶
func NewRealisticBenchModule(name string) *RealisticBenchModule
NewRealisticBenchModule creates a new realistic module with the given name.
func (*RealisticBenchModule) Container ¶
func (m *RealisticBenchModule) Container() mono.ServiceContainer
Container returns the module's service container.
func (*RealisticBenchModule) Name ¶
func (m *RealisticBenchModule) Name() string
Name returns the module name.
func (*RealisticBenchModule) RegisterServices ¶
func (m *RealisticBenchModule) RegisterServices(container mono.ServiceContainer) error
RegisterServices registers a simple echo service.
Directories
¶
| Path | Synopsis |
|---|---|
|
cmd
|
|
|
benchparse
command
Package main provides a tool to parse Go benchmark JSON output and convert it to a structured JSON format for benchmark result reporting.
|
Package main provides a tool to parse Go benchmark JSON output and convert it to a structured JSON format for benchmark result reporting. |