Skip to content

Commit 58b2ba3

Browse files
committed
merge with master branch
2 parents 2189612 + 4196c8f commit 58b2ba3

29 files changed

+7046
-110
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1515
- Added possibility to set response code for `response_from` messages in reverse proxy (`kafka` and `http_async`). [#321](https://github.com/Accenture/reactive-interaction-gateway/pull/321)
1616
- Added new version - `v3` - for internal endpoints to support response code in the `/responses` endpoint
1717
- Added Helm v3 template to the `deployment` folder [#288](https://github.com/Accenture/reactive-interaction-gateway/issues/288)
18+
- Added detailed features summary on the website with architecture diagrams. [#284](https://github.com/Accenture/reactive-interaction-gateway/issues/284)
1819
- Added [documentation section](https://accenture.github.io/reactive-interaction-gateway/docs/jwt-blacklisting.html) for the JWT Blacklist feature. [#156](https://github.com/Accenture/reactive-interaction-gateway/issues/156)
1920

2021
### Changed
@@ -32,6 +33,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
3233
```
3334

3435
More information, follow the [deployment Readme](./deployment/README.md). [#319](https://github.com/Accenture/reactive-interaction-gateway/issues/319)
36+
- make README smaller, easier to read and highlight features. [#284](https://github.com/Accenture/reactive-interaction-gateway/issues/284)
3537

3638
### Fixed
3739

CONTRIBUTING.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,20 @@ in the [Accenture Organization](https://github.com/accenture) on GitHub. These a
77
guidelines, not rules. Use your best judgment, and feel free to propose changes to this document
88
in a pull request.
99

10+
## TL;DR
11+
12+
- **Use issues for everything.**
13+
- For a small change, just send a PR.
14+
- For bigger changes open an issue for discussion before sending a PR.
15+
- PR should have:
16+
- Test case
17+
- Documentation (e.g., moduledoc, developer's guide, operator's guide)
18+
- Changelog entry
19+
- You can also contribute by:
20+
- Reporting issues
21+
- Suggesting new features or enhancements
22+
- Improve/fix documentation
23+
1024
## Code of Conduct
1125

1226
This project and everyone participating in it is governed by our

README.md

Lines changed: 20 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -2,92 +2,39 @@
22

33
# RIG - Reactive Interaction Gateway
44

5-
Create low-latency, interactive user experiences for stateless microservices.
5+
Makes frontend<->backend communication reactive and event-driven.
66

77
[![Build Status](https://travis-ci.org/Accenture/reactive-interaction-gateway.svg?branch=master)](https://travis-ci.org/Accenture/reactive-interaction-gateway)
88
[![DockerHub](https://img.shields.io/docker/pulls/accenture/reactive-interaction-gateway)](https://hub.docker.com/r/accenture/reactive-interaction-gateway)
9-
[![Slack](https://rig-slackin.herokuapp.com/badge.svg)](https://rig-slackin.herokuapp.com)
10-
11-
Take a look at the [documentation](https://accenture.github.io/reactive-interaction-gateway/docs/intro.html) and get in touch with us on [Slack](https://rig-slackin.herokuapp.com)!
12-
13-
- [About](#about)
14-
- [Getting Started](#getting-started)
15-
- [API Documentation](#api-documentation)
16-
- [Metrics](#metrics)
17-
- [Contribute](#contribute)
18-
- [License](#license)
19-
- [Acknowledgments](#acknowledgments)
209

2110
## About
2211

23-
How RIG makes asynchronous backend<->frontend communication easier:
24-
25-
- RIG takes care of client connection state so you don't have to.
26-
- RIG picks up back-end events and forwards them to clients based on subscriptions.
27-
- RIG forwards client requests to backend services either synchronously or asynchronously.
28-
29-
Built on open standards, RIG is very easy to integrate – and easy to _replace_ – which means low-cost, low-risk adoption. Unlike other solutions, RIG does not leak into your application – no libraries or SDKs required.
30-
31-
Features:
32-
33-
- Easy to use and scalable by design:
34-
- Supports tens of thousands stable connections per node even on low-end machines.
35-
- Easy to add additional nodes.
36-
- Built on the battle-proven [Erlang/OTP](http://www.erlang.org/) distribution model.
37-
- Only uses in-memory data structures - no external dependencies to configure or scale.
38-
- Connect using standard protocols:
39-
- Firewall friendly and future proof using Server-Sent Events (SSE)
40-
- [HTML5 standard](https://html.spec.whatwg.org/multipage/server-sent-events.html#server-sent-events).
41-
- Regular HTTP requests, so no issues with proxy servers or firewalls.
42-
- Connection multiplexing with HTTP/2 out of the box.
43-
- SSE implementation (browser) keeps track of connection drops and restores the connection automatically.
44-
- Polyfills available for older browsers.
45-
- WebSocket connections are supported, too.
46-
- HTTP long polling for situations where SSE and WS are not supported.
47-
- Publish events from various sources:
48-
- Kafka
49-
- NATS
50-
- Amazon Kinesis
51-
- or publish via HTTP
52-
- Convert a HTTP request to a message for asynchronous processing:
53-
- produce to Kafka topic, optionally wait for the result on another Kafka topic
54-
- produce to a NATS topic, optionally using NATS request-response to wait for the result
55-
- produce to Amazon Kinesis
56-
- Uses the CNCF [CloudEvents specification](https://cloudevents.io/).
57-
- Flexible event subscription model based on event types.
58-
- Use existing services for authentication and authorization of users and subscriptions.
59-
- JWT signature verification for APIs as a simple authentication check.
60-
- Session blacklist with immediate session invalidation.
61-
62-
For more details take a look at the [documentation](https://accenture.github.io/reactive-interaction-gateway/docs/intro.html).
63-
64-
## Getting Started
12+
The Reactive Interaction Gateway (RIG) is the glue between your client (frontend) and your backend. It makes communication between them easier by (click the links to learn more)
6513

66-
Take a look at the [getting-started tutorial](https://accenture.github.io/reactive-interaction-gateway/docs/tutorial.html).
14+
- picking up backend events and forwarding them to clients based on subscriptions: this makes your frontend apps **reactive and eliminates the need for polling**. You can do this
15+
- [asynchronously](https://accenture.github.io/reactive-interaction-gateway/docs/features.html#picking-up-backend-events-and-forwarding-them-to-clients-based-on-subscriptions#asynchronously) - using Kafka, Nats or Kinesis.
16+
- [synchronously](https://accenture.github.io/reactive-interaction-gateway/docs/features.html#picking-up-backend-events-and-forwarding-them-to-clients-based-on-subscriptions#synchronously) - if you don't want to manage a (potentially complex) message broker system like Kafka.
17+
- forwarding client requests to backend services either synchronously, asynchronously or a mix of both:
18+
- [synchronously](https://accenture.github.io/reactive-interaction-gateway/docs/features.html#synchronously) - if requests are being sent synchronously, RIG acts as a reverse proxy: RIG forwards the request to an HTTP endpoint of a backend service, waits for the response and sends it to the client.
19+
- [asynchronously - fire&forget](https://accenture.github.io/reactive-interaction-gateway/docs/features.html#asynchronously---fireforget) - RIG transforms a HTTP request to a message for asynchronous processing and forwards it to the backend asynchronously using either Kafka, NATS or Amazon Kinesis.
20+
- [synchronously with asynchronous response](https://accenture.github.io/reactive-interaction-gateway/docs/features.html#synchronously---asnychronous-response) - a pseudo-synchronous request: RIG forwards the client request to the backend synchronously via HTTP and waits for the backend response by listening to Kafka/NATS and forwarding it to the still open HTTP connection to the frontend.
21+
- [asynchronously with asynchronous response](https://accenture.github.io/reactive-interaction-gateway/docs/features.html#asynchronously---asnychronous-response) - a pseudo-synchronous request: RIG forwards the client request to the backend asynchronously via Kafka or NATS and waits for the backend response by listening to Kafka/NATS and forwarding it to the still open HTTP connection to the frontend.
6722

68-
### API Documentation
23+
Built on open standards, RIG is very easy to integrate – and easy to replace – which means low-cost, low-risk adoption. Unlike other solutions, RIG does not leak into your application – no libraries or SDKs required. Along with handling client requests and publishing events from backend to the frontend, RIG provides [many out-of-the-box features](https://accenture.github.io/reactive-interaction-gateway/docs/features.html#out-of-the-box-features).
6924

70-
RIG exposes its API documentation on its API endpoint under [/swagger-ui](http://localhost:4010/swagger-ui). For integration into an existing swagger UI, the related JSON document can either be [retrieved at runtime](http://localhost:4010/swagger-ui/rig_api_swagger.json) or [found on disk](./priv/static/rig_api_swagger.json) after compiling RIG at least once.
25+
This is just a basic summary of what RIG can do. There is a comprehensive documentation available on our [website](https://accenture.github.io/reactive-interaction-gateway/docs/intro.html). If you have any unanswered question, check out the [FAQ](https://accenture.github.io/reactive-interaction-gateway/docs/faq.html) section to get them answered.
7126

72-
### Metrics
73-
74-
RIG exposes Metrics in [Prometheus](https://prometheus.io/) format on its API endpoint under [/metrics](http:localhost:4010/metrics)
27+
## Getting Started
7528

76-
## Contribute
29+
- Take a look at the [getting-started tutorial](https://accenture.github.io/reactive-interaction-gateway/docs/tutorial.html) for a simple walkthrough using docker
30+
- For deploying RIG on Kubernetes, check out the [Kubernetes deployment instructions](https://github.com/Accenture/reactive-interaction-gateway/tree/284-document-sync-async-http-to-kafka/deployment)
7731

78-
- **Use issues for everything.**
79-
- For a small change, just send a PR.
80-
- For bigger changes open an issue for discussion before sending a PR.
81-
- PR should have:
82-
- Test case
83-
- Documentation (e.g., moduledoc, developer's guide, operator's guide)
84-
- Changelog entry
85-
- You can also contribute by:
86-
- Reporting issues
87-
- Suggesting new features or enhancements
88-
- Improve/fix documentation
32+
## Get Involved
8933

90-
See the [developer's guide](https://accenture.github.io/reactive-interaction-gateway/docs/rig-dev-guide.html) and [CONTRIBUTING.md](./CONTRIBUTING.md) for details.
34+
- discuss RIG on [Slack](https://rig-slackin.herokuapp.com)
35+
- Follow us on [Twitter](https://twitter.com/reactivegateway)
36+
- Start contributing: refer to our [contributing guide](./CONTRIBUTING.md)
37+
- Develop RIG: refer to our [developer's guide](https://accenture.github.io/reactive-interaction-gateway/docs/rig-dev-guide.html)
9138

9239
## License
9340

@@ -105,5 +52,3 @@ Kudos to these awesome projects:
10552
- Phoenix Framework
10653
- Brod
10754
- Distillery
108-
109-
.

ct.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,3 @@
22
remote: origin
33
chart-dirs:
44
- deployment
5-
debug: true

deployment/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,11 @@ Check out the [Helm v2 README](./reactive-interaction-gateway-helm-v2/README.md)
2020
kubectl apply -f kubectl/rig.yaml
2121
```
2222

23+
2324
## Some Additional information
2425

26+
Check out the [getting-started tutorial](https://accenture.github.io/reactive-interaction-gateway/docs/tutorial.html), the [examples](https://accenture.github.io/reactive-interaction-gateway/docs/examples.html) and the [features](https://accenture.github.io/reactive-interaction-gateway/docs/features.html) for more information what you can do with RIG.
27+
2528
### Communication
2629

2730
Both `kubectl` and `helm` deploy bunch of Kubernetes resources:

docs/api-documentation.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
id: api-documentation
3+
title: API Documentation
4+
sidebar_label: API Documentation
5+
---
6+
7+
RIG exposes its API documentation on its API endpoint under [/swagger-ui](http://localhost:4010/swagger-ui). For integration into an existing swagger UI, the related JSON document can either be [retrieved at runtime](http://localhost:4010/swagger-ui/rig_api_swagger.json) or found on disk at `priv/static/rig_api_swagger.json` after compiling RIG at least once.

docs/api-gateway.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ The endpoint expects the following request format:
180180
### Wait for response
181181
182182
Sometimes it makes sense to provide a simple request-response API to something that runs asynchronously on the backend. For example, let's say there's a ticket reservation process that takes 10 seconds in total and involves three different services that communicate via message passing. For an external client, it may be simpler to wait 10 seconds for the response instead of polling for a response every other second.
183-
A behavior like this can be configured using an endpoints' `response_from` property. When set to `kafka`, the response to the request is not taken from the `target` (e.g., for `target` = `http` this means the backend's HTTP response is ignored), but instead it's read from a Kafka topic. In order to enable RIG to correlate the response from the topic with the original request, RIG adds a correlation ID to the request (using a query parameter in case of `target` = `http`, or backed into the produced CloudEvent otherwise). **Backend services that work with the request need to include that correlation ID in their response; otherwise, RIG won't be able to forward it to the client (and times out).**
183+
A behavior like this can be configured using an endpoints' `response_from` property. When set to `kafka`, the response to the request is not necessarily taken from the `target`, e.g., for `target` = `http` this means the backend's HTTP response might be ignored - it's the responsibility of the backend service where to read the response from: If the backend returns with the HTTP code `202 Accepted`, the response will be read from a Kafka topic. If the backend returns a different HTTP code (can be `200` or `400` or whatever makes sense), only then the response will be read synchronously from the http target directly (this allows the backend to return cached responses). In order to enable RIG to correlate the response from the kafka topic with the original request, RIG adds a correlation ID to the request (using a query parameter in case of `target` = `http`, or baked into the produced CloudEvent otherwise). Backend services that work with the request need to include that correlation ID in their response; otherwise, RIG won't be able to forward it to the client (and times out).
184184
185185
Configuration of such API endpoint might look like this:
186186

docs/architecture.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ Why not introduce (connection) state for microservices? Two reasons. First, it m
2121

2222
## Event-Driven Architecture and the UI
2323

24-
Forwarding events to frontends enables and event-driven UX design, effectively extending the idea of [event-driven architecture](https://en.wikipedia.org/wiki/Event-driven_architecture) to the UI.
24+
Forwarding events to frontends enables an event-driven UX design, effectively extending the idea of [event-driven architecture](https://en.wikipedia.org/wiki/Event-driven_architecture) to the UI.
2525

2626
We believe that hiding asynchronism by turning it into a fake synchronous process is an anti-pattern. For example, sending money from one bank account to another doesn't happen instantaneously, but with at least two events: "transfer requested" and "transfer completed" (or "transfer failed"). Acknowledging this when designing the UI leads to a more natural user experience and less loading indicators.
2727

docs/assets/drawio/features-client-to-backend-asynchronously-asynchronous-response.drawio

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.

docs/assets/drawio/features-client-to-backend-asynchronously-fireandforget.drawio

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)