Sign inSign up

fnalabs/hive-stream-processor-js

By fnalabs

•Updated almost 6 years ago

The Hive^io framework Stream Processor microservice leveraging Node.js with Fastify in Docker.

Image
0

2.5K

fnalabs/hive-stream-processor-js repository overview

Docker Image License Code Coverage JavaScript Style Guide

This is the Hiveio⁠ framework Stream Processor microservice leveraging Node.js with Fastify in Docker. This is the base image⁠ to support most use cases.

⁠Getting Started

Stream Processors are multi-faceted in their responsibilities. By default, they handle the Command responsibilities in the CQRS pattern. Therefore, they are integrated with the domain layer to take commands and get existing aggregate data to pass to the domain layer for domain logic and validation. Once validated, it passes the returned event to the log and stores the updated snapshot of the aggregate to the caching layer. Depending on the needs of the domain model, the Stream Processor allows for transactional consistency if required. Essentially this makes it a Stream Producer as it is performing more than the Producer⁠, but for similar tasks.

The second role of the Stream Processor is to rebuild the caching layer from the transactional log. This is valuable when standing up new environments for various reasons like A/B testing, debugging, and deploying geolocated instances of the application stack. Essentially this makes it a Stream Consumer as it is performing the specific task of rebuilding the cache as opposed to the translations and queries of the Consumer⁠. Typically these would be a short-lived implementation and not used nearly as often as the default Stream Processor definition above.

The third role of the Stream Processor is the most complex. For more complex domain models, sometimes the need for a saga (or process manager) is required. A saga's job is to manage the complexities of inter-aggregate communication should the need arise. Since a Stream Processor is able to read events from the logs and also write to the logs (defined separately above), it is able to issue commands to the domain layer based on the events from one aggregate to another.

The Hiveio framework leverages Redis for a caching layer due to its high availability, distribution, and performance capabilities. Also, it employs the Redlock algorithm to provide transactional consistency and manage concurrency.

⁠Prerequisites

To use, you'll need:

⁠Installing

To start using in your own infrastructure, pull the base image:

docker pull fnalabs/hive-stream-processor-js:<[release]|latest>
⁠Examples

To use, write your own Dockerfile and add any additional dependencies, including the package with your domain Actors.

FROM fnalabs/hive-stream-processor-js:latest
RUN npm install hive-io-domain-example
⁠Environment variables

Below is a table describing the possible environment variables to run the Hiveio framework Stream Processor microservice. You can override these settings if/when required. This option works great if using the standard setup within a Docker container.

NameTypeDefaultDescription
NODE_ENVString'production'microservice runtime environment
DEPLOY_ENVStringNODE_ENVmicroservice deployment environment (QA, Stage, etc)
HOSTNAMEStringmicroservice hostname
PORTNumber3000microservice port to listen on
CLUSTER_SIZENumber[total CPUs available]defaults to the total available CPUs allocated to the container or to the size you specify here
HTTP_VERSIONNumber2HTTP version for backward compatibility
SECUREString'false'whether to run microservice secure or not. defaults to 'false' since we cannot provide certificates
SSL_CERTString'/opt/app/cert/ssl-cert.pem'default path for SSL certificate file or the full certificate
SSL_KEYString'/opt/app/cert/ssl-key.pem'default path for SSL key file or the full key
PING_URLString'/ping'URL to use for shallow health checks for the microservice
PROCESSOR_TYPEString'producer'type of Stream Processor microservice you wish to run (can also be 'consumer' or 'stream_processor')
ACTORStringActor (Model) the microservice is responsible for
ACTOR_LIBStringmodule where the ACTOR resides
ACTOR_URLSStringcomma-separated URLs associated with the Actor
TELEMETRYString'false'whether to run OpenTelemetry integration
TELEMETRY_PLUGINSStringJSON string of OpenTelemetry plugins to enable
TELEMETRY_SERVICE_NAMEStringhive-stream-processor-jsservice name for OpenTelemetry
TELEMETRY_URL_METRICSStringOpenTelemetry Collector URL for metrics
TELEMETRY_URL_TRACESStringOpenTelemetry Collector URL for traces
EVENT_STORE_PRODUCER_TOPICStringKafka topic the events will be stored under
EVENT_STORE_CONSUMER_TOPICStringKafka topic the events will be consumed from
EVENT_STORE_IDStringunique identifier for Kafka client connection
EVENT_STORE_GROUP_IDStringdefines Kafka Stream Processor group id
EVENT_STORE_BROKERSStringcomma separated URLs where Kafka is hosted
EVENT_STORE_FROM_STARTString'false'tells Stream Processor whether or not to start at the beginning of the topic
EVENT_STORE_PARTITIONSNumber1tells Stream Processor how many partitions to consume
EVENT_STORE_BUFFERNumber100maximum number of incoming messages to batch
EVENT_STORE_TIMEOUTNumber2000time (in ms) to poll Kafka for delivery reports
CACHE_URLStringURL where Redis is hosted
LOCK_TTLNumber2000Redlock time to live before lock is released
LOCK_DRIFT_FACTORNumber0.01Redlock drift factor setting
LOCK_RETRY_COUNTNumber0Redlock retry count setting, should be set to zero for concurrency
LOCK_RETRY_DELAYNumber400Redlock retry delay in milliseconds
LOCK_RETRY_JITTERNumber400Redlock random retry jitter in milliseconds to randomize retries

⁠Future

Tag summary

Content type

Image

Digest

Size

41.4 MB

Last updated

almost 6 years ago

docker pull fnalabs/hive-stream-processor-js