Дапр! Нет, не даппер , ДАПР Отказ
Если вы еще не читали мои прошлые статьи о DAPR, это нормально. Позвольте мне попробовать варить этот большой проект до предложения:
👋 DAPR — это процесс, который вы выполняете, что делает все жесткие вещи для вашего приложения Вы бы предпочли не делать
Если вы хотите прочитать больше об этом, см. Intro Blog Post Отказ
И с этим давайте поговорим о (и демо!) Вероятно, самое трудное, что большинство (любые?) приложения должны иметь дело с: хранение данных.
🙋♀️ DAPR делает Другие вещи Помимо хранения тоже
Работа с магазинами данных сложно. Вы должны получить правильный SDK, издевайтесь на ваш хранилище данных для модульных тестов, писать тесты в области интеграции для данных раунда, убедитесь, что вы имеете дело с миграцией, отказа от переработки и более …
DAPR помогает со всем этим, но он также приходит с некоторыми ограничениями. Прежде чем мы пойдем за то, что делают вещи, некоторые плюсы и минусы для хранения:
- ➕ Вы читаете/пишу данные с довольно простым отдыхом API (или GRPC!)
- ➕ Вы получаете много полезных функций (кто-нибудь повторюсь?)
- ➕ Вы можете поменять реализации (DAPR поставляется с кучей различных реализаций данные API по облакам и открытому/закрытому источнику.)
- ➖ Вы должны поместить вашу модель данных в ключ/значение. Не все приложения вписываются в эту модель
- ➕ И ➖ Вы должны сделать немного читать, чтобы воспользоваться некоторыми полезными функциями хранения:
- Сильная последовательность
- Оптимистичный параллелизм
- Политики повторных попыток
ℹ В земле DAPR API хранилища данных не называется базой данных, поскольку он дает вам ключ/значение хранения данных. Это не SQL или какой-либо другой вид богатого языка запроса, поэтому удерживайте это в виду, если решить, что использовать.
Если вы хотите, вы можете проверить более подробную информацию о хранении здесь Отказ
ДАПР поставляется с кучей Различные реализации данных API по облакам и открытому/закрытому источнику. Мы будем использовать реализацию Redis здесь.
ℹ Вам нужно иметь Докер установлен и работает для этой демонстрации для работы
1️⃣ — Установка 🛠
Я следовал за Установка Инструкции, используя сценарий Linux (так как я Использование WSL2 ):
$ wget -q https://raw.githubusercontent.com/dapr/cli/master/install/install.sh -O - | /bin/bash
Я должен был предоставить свой пароль, потому что скрипт Sudo
S Вещи, так что, если вы не в том, чтобы вы могли получить случайный скрипт из GitHub, получите суперпользователь на вашем компьютере, вы можете Скачать бинары вместо.
Он был установлен, и я мог испытать вещи:
$ dapr --help __ ____/ /___ _____ _____ / __ / __ '/ __ \/ ___/ / /_/ / /_/ / /_/ / / \__,_/\__,_/ .___/_/ /_/ ====================================================== A serverless runtime for hyperscale, distributed systems Usage: dapr [command] Available Commands: components List all Dapr components configurations List all Dapr configurations help Help about any command init Setup dapr in Kubernetes or Standalone modes invoke Invokes a Dapr app with an optional payload (deprecated, use invokePost) invokeGet Issue HTTP GET to Dapr app invokePost Issue HTTP POST to Dapr app with an optional payload list List all Dapr instances logs Gets Dapr sidecar logs for an app in Kubernetes mtls Check if mTLS is enabled in a Kubernetes cluster publish Publish an event to multiple consumers run Launches Dapr and (optionally) your app side by side status Shows the Dapr system services (control plane) health status. stop Stops a running Dapr instance and its associated app uninstall Removes a Dapr installation Flags: -h, --help help for dapr --version version for dapr Use "dapr [command] --help" for more information about a command.
У него даже есть Ascii Art 🤡!
2️⃣. Здравствуйте, мир 👋
Давайте получим что-то бегущее. Hello World Tutorial на самом деле идет гораздо дальше, чем я ожидал.
Вы получаете приложение вверх и разговариваете с API хранилища (поддерживаемый Redis), но затем вы получите второе приложение вверх и запустите и вызовут API на первом. Это на самом деле хвастается Вызов услуг тоже 🎉.
Сначала я получил код образца Hello World:
$ git clone https://github.com/dapr/samples.git && cd samples/1.hello-world
Образец Code имеет приложение Python и приложение узла. У обоих есть API для отдыха в них.
Приложение узла 🗼
Во-первых, приложение узла. Demo Readme Сначала проходит через код узла немного.
Действительно интересно, я видел, что мы делаем Пост
Запрос с извлекать
API к локальному API DAPR для хранения некоторых данных. Что было круто, ты также можешь просто вернуть немного JSON И это будет автоматически сохранено.
{ "state": [{ "key": "nomnomnom", "value": "pizza" }] }
Мне очень нравится эта часть, потому что вам не нужно вручную делать что-либо, чтобы получить данные в базу данных. Это просто происходит.
На запуск вещи. Вы делаете стандартную вещь для установки зависимостей JS:
$ npm install npm WARN node_server@1.0.0 No repository field. added 55 packages from 41 contributors and audited 55 packages in 0.626s found 0 vulnerabilities ╭────────────────────────────────────────────────────────────────╮ │ │ │ New patch version of npm available! 6.14.4 → 6.14.5 │ │ Changelog: https://github.com/npm/cli/releases/tag/v6.14.5 │ │ Run npm install -g npm to update! │ │ │ ╰────────────────────────────────────────────────────────────────╯
Но вы тогда бегу с ДАПР
CLI, не NPM
или узел
. Это выплесет много линий журнала, и это нормально. Вот примерно что похоже:
$ dapr run --app-id nodeapp --app-port 3000 --port 3500 node app.js ℹ️ Starting Dapr with id nodeapp. HTTP Port: 3500. gRPC Port: 42491 == DAPR == time="2020-05-18T16:26:52.702694-07:00" level=info msg="starting Dapr Runtime -- version 0.6.0 -- commit e99f712-dirty" app_id=nodeapp instance=DESKTOP-DQP07VM scope=dapr.runtime type=log ver=0.6.0== APP == Node App listening on port 3000! == DAPR == time="2020-05-18T16:26:52.7568756-07:00" level=info msg="application discovered on port 3000" app_id=nodeapp instance=DESKTOP-DQP07VM scope=dapr.runtime type=log ver=0.6.0 ℹ️ Updating metadata for app command: node app.js ✅ You're up and running! Both Dapr and your app logs will appear here.
Хорошо, теперь он работает. Вы используете ДАПР
CLI до Также Сделайте звонки на веб-сервис. Мне нравится простота одного CLI.
$ dapr invoke --app-id nodeapp --method neworder --payload '{"data": { "orderId": "41" } }' ✅ App invoked successfully
Вы также можете использовать Curl
Для этого, если вы хотите
И проверка того, что запрос фактически прошел, и данные были сохранены У нас есть журналы:
== APP == Got a new order! Order ID: 41 == APP == Successfully persisted state.
И мы также можем позвонить API приложения узла, чтобы получить новые данные из хранилище данных
$ curl http://localhost:3500/v1.0/invoke/nodeapp/method/order {"orderId":"41"}
Это и вышеизложенное DAPR ссылается на
Вызов использует одну из функций в блоке Discovery Discovery Discovery Discovery
Приложение Python 🐍
Теперь для Grande Finale! Код Python вызывает приложение узла в бесконечной петле, поэтому мы сможем увидеть приложение узла, отвечаю на запросы, а также видят файл dataStore в то же время.
Во-первых, мы настроили зависимость Python:
$ pip3 install requestsSuccessfully installed certifi-2020.4.5.1 chardet-3.0.4 idna-2.9 requests-2.23.0 urllib3-1.25.9
И тогда я пробежал это с той же DAPR Run
Команда мы использовали для приложения узла, кроме на вкладке «Новый терминал». На этот раз я вырезал все многословные линии журнала!
$ dapr run --app-id pythonapp python3 app.py ℹ️ Starting Dapr with id pythonapp. HTTP Port: 43891. gRPC Port: 42163 ℹ️ Updating metadata for app command: python3 app.py ✅ You're up and running! Both Dapr and your app logs will appear here.
Теперь, обратно в журналы приложений узла, хранение начинает заполнять!
== APP == Got a new order! Order ID: 1 == APP == Successfully persisted state. == APP == Got a new order! Order ID: 2 == APP == Successfully persisted state.
Это оно!
От опыта, получение хранения и микросервис-к-микросимвичам, работающих с нуля, требуется время, тщательно продуманный код и усилия.
Я хотел сравнить этот узел/Python CodeBase для сравнения моего опыта и был приятно удивлен. Давайте сломаемся:
- 87 строк узла-кода, включая комментарии
- Мы могли бы сэкономить много строк, если мы вернули
«Данные»
JSON словарь вместо использованияизвлекать
вызовы
- Мы могли бы сэкономить много строк, если мы вернули
- 23 строки кода узла, включая комментарии
От опыта с поезда, я могу сказать, что битранский слой хранения для такого рода существует около 50 строк. Это яблоки для сравнения апельсинов, но я точно знаю, что все тестируемые битве биты теперь за этим API Strick Storage API узла использует приложение узла. И достаточно забавно, эта часть написана в Go 💪.
Слияние Не забудьте очистить: DAPR STOP - APP-ID NODEAPP && DAPR STOP --APP-ID Pythonapp.
Бонус: За кулисами
Я упомянул выше, что вам нужно установить Docker, чтобы получить эту работу. Это все, потому что DAPR нужна изображение, работающее на заднем плане для этой демонстрации.
cb722412a5d3 redis "docker-entrypoint.s…" 4 weeks ago Up 6 hours 0.0.0.0:6379->6379/tcp dapr_redis
Важный это … РЕДИС! По умолчанию все вызовы API хранилища приложения узла создают маршрут в Redis.
Заворачивать
Итак, мы видели хранилище API и Немного API вызова сервиса. Честно говоря, эти два часта только могут дать вам далький путь только на базовом использовании в одиночку.
Как вы становитесь более продвинутым, вы, вероятно, захотите узнать больше и использовать такие вещи, как Управление параллелизмом и Потилирование повторных попыток Отказ
Любые, как вы идете, Документы репозитория И особенно Раздел государственного управления отличные ссылки.
Это все на сегодня. Я надеюсь, что вы пойдете и наслаждаетесь Dapr-ing!
🤘🚀.
Оригинал: «https://dev.to/azure/storing-data-with-dapr-cd8»