TradersPost • Married to Megan Wage • Living in Grand Rapids, Michigan • Using PHP 20+ years • Doctrine and Symfony contributor from time to time • Now I am building trading automation software at TradersPost Baby Weavers and Wages
for our most important queues should be less than 100ms Adds queueWaitTime value to every message that is handled and is sent to logs and NewRelic for monitoring.
to 1 second. Set it to something lower to keep the queueWaitTime as low as possible when load is low and workers are waiting for new messages to handle
always running! Live trade execution workers: - 3 servers - 50 worker processes per server - This means 150 queue connections required for live execution
messages concurrently #53964 https://github.com/symfony/symfony/pull/53964 2. RabbitMQ implementation that doesn’t use polling…get queueWaitTime closer to 0ms. Hiring Robin and baksla.sh to help with this!
want runtime bugs caused by invalid types, unknown method names, etc. Eliminates entire categories of bugs from being possible. Refactor and ship with high confidence.
lifecycle callbacks to stimulus controllers whenever a live component or turbo morphs the element a stimulus controller is attached to so you can manage state.
PostgresSQL. Using PGBouncer with PgSQL can significantly increase the number of clients that can connect to your database Session Pooling: Assigns a server connection to a client for the entire session. Supports all PostgreSQL features.
PostgresSQL. Using PGBouncer with PgSQL can significantly increase the number of clients that can connect to your database Transaction Pooling: Assigns a server connection only for the duration of a transaction. Some session-based features won’t work.
PostgresSQL. Using PGBouncer with PgSQL can significantly increase the number of clients that can connect to your database Statement Pooling: Most aggressive method. This is transaction pooling with a twist: Multi-statement transactions are disallowed.
stored in PostgreSQL, encrypted at rest. • Each customer's tokens are encrypted using derived per-customer keys. • Keys are derived from a master key and customer-specific UUIDs. • Keys are automatically rotated — re-encryption happens seamlessly. • Encryption and decryption are fully automated via Doctrine custom types. • Sensitive fields are transparently encrypted/decrypted on persist and hydrate. • No plaintext tokens are ever written to disk or logs.