-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
#3 Refactor: resolve review comments
- Loading branch information
1 parent
a392469
commit e9cf1f8
Showing
9 changed files
with
113 additions
and
68 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,10 +1,11 @@ | ||
GLS_CONNECTOR_HOST=127.0.0.1 | ||
GLS_CONNECTOR_HOST=0.0.0.0 | ||
GLS_CONNECTOR_PORT=3000 | ||
GLS_METRICS_HOST= | ||
GLS_METRICS_PORT= | ||
GLS_MONGO_CONNECT=mongodb://localhost:27017/admin | ||
GLS_MONGO_CONNECT=mongodb://bandwidth_mongo:27017/admin | ||
CMN_CYBERWAY_HTTP_URL= | ||
CMN_PROVIDER_PUBLIC_KEY= | ||
CMN_PROVIDER_WIF= | ||
CMN_PROVIDER_USERNAME= | ||
GLS_CHANNEL_TTL= | ||
CMN_REGISTRATION_CONNECT= | ||
CMN_CHANNEL_TTL= |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
FROM node:10-alpine | ||
WORKDIR /usr/src/app | ||
COPY ./package*.json ./ | ||
COPY ./.npmrc ./ | ||
RUN npm install --only=production | ||
COPY ./src/ ./src | ||
CMD [ "node", "./src/index.js" ] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,34 +1,67 @@ | ||
# Bandwidth service | ||
|
||
**Bandwidth service** является сервисом для предоставления необходимых мощностей пользователям [golos.io](https://golos.io) (например, для публикации постов). | ||
**Bandwidth service** является сервисом для предоставления необходимых мощностей (бендвича) пользователям [golos.io](https://golos.io) (например, для публикации постов). | ||
Сервис подписывает транзакции вместо пользователя, сохраняя его авторство. | ||
|
||
### Основное | ||
|
||
Микросервис реализует один метод: | ||
Микросервис содержит 2 контроллера и 1 сервис, помимо служебных: | ||
|
||
- 'bandwidth.provide': будет добавлено позже | ||
#### Сервисы: | ||
|
||
- `Storage`: сервис, который является, по сути, базой данных в оперативной памяти. Его задачей является хранение имен пользователей и идентификаторов каналов, а также самоочищаться раз в один час. Предоставляет публичные методы для добавления/удаления пользователей в базу, для проверки, есть ли пользователь в базе и для удаления канала соединения при его разрыве. | ||
|
||
#### Контроллеры: | ||
|
||
- `Whitelist`: контроллер, задачей которого является управление списком пользователей, которым разрешен доступ к запросу бендвича. Данный контроллер предоставляет два публичных метода класса: на бан пользователя и на проверку доступа по его имени и его идентификатору канала (`channelId`, `cid`). Когда запрашивается проверка доступа, сначала контроллер ищет пользователя в базе данных в памяти (storage service), и если он там не найден, то в базе данных монго, а если и там пользователь не найден, то контроллер делает запрос в сервис регистрации. Если пользователь найден в сервисе регистрации, то он добавляется и в монго и в базу данных в памяти, если нет, то доступ запрещается. Если пользователь забанен (что выясняется на этапе запроса к монго), то доступ запрещается. Когда запрашивается бан пользователя, то в базе данных пользователю присваивается флаг "забанен" и он удаляется из базы данных в памяти. | ||
|
||
- `Bandwidth Provider`: контроллер, который предоставляет один публичный метод: предоставления бендвича. Этот метод принимает транзакцию и проверяет, есть ли в ней запрос на предоставление бендвича и совпадает ли имя пользователя, который должен предоставить бендвич с пользователем, от имени которого запущен микросервис, а также, разрешено ли пользователю запрашивать бендвич. Если транзакцию не требуется подписывать, то она передается в блокчейн. Если требуется, и у пользователя есть право это запросить, то транзакция подписывается и передается в блокчейн. | ||
|
||
Микросервис реализует 3 метода: | ||
|
||
- 'bandwidth.provide': метод, который принимает транзакцию, для которой требуется предоставить бендвич, подписывает и отправляет ее в блокчейн. Метод возвращает ответ от блокчейна. | ||
- 'bandwidth.banUser': метод, который принимает имя пользователя, которого требуется исключить пользователя из списка пользователей, которым разрешено получение бендвича (вайтлист). Возвращает статус исполнения запроса. | ||
- 'bandwidth.notifyOffline': метод, который принимает имя пользователя, статус которого поменялся на "оффлайн", а также его `channelId` и исключает его из вайтлиста, который хранится в оперативной памяти (но не из базы данных). | ||
|
||
##### API JSON-RPC | ||
|
||
Будет добавлено позже | ||
- `bandwidth.provide`: принимает параметры вида `{transaction, chainId}`, возвращает ответ от блокчейна либо ошибку | ||
- `bandwidth.banUser`: принимает параметры вида `{user, channelId}`, возвращает статус либо ошибку | ||
- `bandwidth.notifyOffline`: принимает параметры вида `{user, channelId}`, возвращает статус либо ошибку | ||
|
||
### Переменные окружения | ||
|
||
Возможные переменные окружения `ENV`: | ||
|
||
- `GLS_CONNECTOR_HOST` _(обязательно)_ - адрес, который будет использован для входящих подключений связи микросервисов. | ||
- `GLS_CONNECTOR_HOST` _(обязательно)_ - адрес, который будет использован для входящих подключений связи микросервисов. | ||
Дефолтное значение при запуске без докера - `127.0.0.1` | ||
|
||
- `GLS_CONNECTOR_PORT` _(обязательно)_ - адрес порта, который будет использован для входящих подключений связи микросервисов. | ||
- `GLS_CONNECTOR_PORT` _(обязательно)_ - адрес порта, который будет использован для входящих подключений связи микросервисов. | ||
Дефолтное значение при запуске без докера - `3000`, пересекается с `GLS_FRONTEND_GATE_PORT` | ||
|
||
- `GLS_METRICS_HOST` _(обязательно)_ - адрес хоста для метрик StatsD. | ||
- `GLS_METRICS_HOST` _(обязательно)_ - адрес хоста для метрик StatsD. | ||
Дефолтное значение при запуске без докера - `127.0.0.1` | ||
|
||
- `GLS_METRICS_PORT` _(обязательно)_ - адрес порта для метрик StatsD. | ||
Дефолтное значение при запуске без докера - `8125` | ||
- `GLS_METRICS_PORT` _(обязательно)_ - адрес порта для метрик StatsD. Дефолтное значение при запуске без докера - `8125` | ||
|
||
- `GLS_MONGO_CONNECT` _(обязательно)_ - ссылка на подключение к MongoDB | ||
|
||
- `CMN_CYBERWAY_HTTP_URL` _(обязательно)_ - ссылка на подключение к блокчейну Cyberway | ||
|
||
- `CMN_PROVIDER_PUBLIC_KEY` _(обязательно)_ - публичный ключ провайдера бендвича | ||
|
||
- `CMN_PROVIDER_WIF` _(обязательно)_ - приватный ключ провайдера бендвича | ||
|
||
- `CMN_PROVIDER_USERNAME` _(обязательно)_ - имя пользователя провайдера бендвича | ||
|
||
- `CMN_REGISTRATION_CONNECT` _(обязательно)_ - ссылка на подключение к сервису регистрации | ||
|
||
- `CMN_CHANNEL_TTL` _(обязательно)_ - время жизни канала (время, которое будет хранится channelId в базе данных в памяти). **Важно:** _storage проверяет, не превышено ли это значение лишь раз в час, поэтому между тем, как данный лимит будет превышен, и тем, как канал будет фактически удален из памяти, может пройти существенное количество времени_ | ||
|
||
### Запуск | ||
|
||
Для запуска достаточно вызвать команду `docker-compose up` в корне проекта, предварительно указав необходимые `ENV` переменные. | ||
|
||
``` | ||
``` |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
version: '3.6' | ||
services: | ||
node: | ||
container_name: bandwidth-provider-node | ||
restart: always | ||
build: | ||
context: . | ||
dockerfile: Dockerfile | ||
networks: | ||
- services-tier | ||
ports: | ||
- $GLS_CONNECTOR_HOST:$GLS_CONNECTOR_PORT:$GLS_CONNECTOR_PORT | ||
env_file: | ||
- .env | ||
depends_on: | ||
- mongo | ||
|
||
mongo: | ||
container_name: bandwidth_mongo | ||
image: mongo | ||
restart: always | ||
volumes: | ||
- badwidth_mongodb_vol:/data/db | ||
ports: | ||
- 127.0.0.1:27017:27017 | ||
networks: | ||
- services-tier | ||
|
||
networks: | ||
services-tier: | ||
|
||
volumes: | ||
badwidth_mongodb_vol: |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters