Writing Better Apps: Implementing Configuration
"Configuration" is the settings your application uses to change its behavior at runtime. Configuration might include simple values that adjust timeouts on requests to more complicated settings that swap out database or cloud service providers.
The process of collecting and validating configuration is critical to a stable . . .
Posted in: craftsmanshipnodejstypescript
Writing Better Apps: Initialization
Whether you are writing a script, a multicommand CLI utility, or a networked server, applications should follow the same initialization pattern:
- Get configuration
- Build dependencies
- Resolve and execute the entry-point function
Get configuration
Using the environment, and possibly command line . . .
Posted in: nodejstypescript
Thoughts on using Kafka with Node.js (node-rdkafka)
Let me start by saying, node-rdkafka is a godsend. When we first started using it, the library was the only one fully compatible with the latest version of Kafka and the SSL and SASL features. I owe webmakersteve and other contributors all a six-pack of beer for making this possible (thank you!!!!).
With that said, I guarantee you . . .
Posted in: kafkamicroservicesnodejs
Avoid Synchronous Functions in Node.js
Sync Functions can dramatically slow down your app and they are almost never necessary.
tl;dr
Most synchronous methods in Node.js (statSync
, readFileSync
, etc.) have asynchronous alternatives (via callback). Using util.promisify
can easily make these methods async/await
compatible. Using the Promise
-based equivalents can greatly speed up your application. In fact, I'd argue there's never a need for the . . .
Posted in: nodejstypescript
Distributed Locking with Postgres Advisory Locks
TL;DR
Postgres Advisory Locks are a great solution for arbitrary application locks, particularly in scenarios where you are already using Postgres and have a need to block concurrent mutations to a resource (that resource DOES NOT have to be data in Postgres).
Concurrency is hard
We ran into a problem . . .
Posted in: microservicesnodejspostgres
WebSequenceDiagrams.com TypeScript Client
https://gist.github.com/rclayton-the-terrible/493cd0811542ff9693ac02746517ba71
TL;DR - TypeScript Client Gist: https://gist.github.com/rclayton-the-terrible/493cd0811542ff9693ac02746517ba71
If you are not familiar with WebSequenceDiagrams, it's an excellent tool for creating sequence diagrams for planning software flows. If you are not familiar with sequence diagrams, a quick Google search will . . .
Posted in: architecturenodejstypescript
Node.js and Kafka in 2018
Yes, Node.js has support for all of the Kafka features you need.
If you want to use Node and Kafka together and are struggling to find straightforward answers to some basic questions, I hope this helps you out. We've been building out an event system at Peachjar using Node and Kafka and some of this knowledge is the fruit of our research.
What are the popular Kafka clients in Node?
- . . .