Giter Site home page Giter Site logo

message-broker's Introduction

Message Broker

As the final project in Bale Camp, We were asked to implement a fast and simple gRPC based broker. the main purpose of this project was to gain hands-on experience with golang and some common tools such as :

  • Kubernetes:
    • Gained practical experience in utilizing Kubernetes for orchestrating workflows, ensuring smooth deployment, scaling, and management of containerized applications. -Docker: -Acquired hands-on knowledge of Docker for streamlined containerization, facilitating consistent deployment across diverse environments.
  • Envoy:
    • Worked extensively with Envoy as a proxy server for load balancing and rate limiting, elevating the reliability and performance of applications.
  • Prometheus:
    • Utilized Prometheus for in-depth monitoring, enabling real-time tracking of system metrics and proactive identification of potential issues.
  • Grafana:
    • Developed proficiency in Grafana to craft insightful dashboards, visually representing system performance for effective decision-making.
  • Jaeger:
    • Gained valuable experience with Jaeger for distributed tracing, offering insights into request flow across the system and aiding in debugging and optimization.
  • gRPC:
    • Implemented gRPC for seamless communication between components, leveraging its high-performance RPC capabilities to amplify system speed and responsiveness.
  • k6:
    • Applied k6 for rigorous performance testi
  • Concurrency in golang:
    • Gained practical experience with concurrency features in golang, such as goroutines and channels.
  • Data Storages:
    • Used different datasources like Postgres (SQL), Cassandra/Scylla (noSQL) to persist the messages. We compared the performance of each and decided the best use case for each one.
  • Caching and Batching:
    • In order to overcome the performance bottlenecks, we took advantage of different methods such as caching and batching.

RPCs Interface

  • Publish Requst
message PublishRequest {
  string subject = 1;
  bytes body = 2;
  int32 expirationSeconds = 3;
}
  • Fetch Request
message FetchRequest {
  string subject = 1;
  int32 id = 2;
}
  • Subscribe Request
message SubscribeRequest {
  string subject = 1;
}
  • RPC Service
service Broker {
  rpc Publish (PublishRequest) returns (PublishResponse);
  rpc Subscribe(SubscribeRequest) returns (stream MessageResponse);
  rpc Fetch(FetchRequest) returns (MessageResponse);
}

Performance Report

In order to test our performance, We had several load testing phases on broker's publish service using K6 and custom-built golang clients.

RAM

RAM

Postgres

Postgres_2

Cassandra

Cassandra

message-broker's People

Contributors

aref81 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.