Skip to content

Commit 0603642

Browse files
authored
Merge pull request #330 from Accenture/284-document-sync-async-http-to-kafka
Improve README and feature docs
2 parents d7c30ae + 4e6ed6d commit 0603642

26 files changed

+6883
-98
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

1920
### Changed
2021

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

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

3537
### Fixed
3638

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/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.

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

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

0 commit comments

Comments
 (0)