Бледная печать |
| ||||||||||||
Серый фон |
| ||||||||||||
Фантомное изображение |
| ||||||||||||
Точки тонера |
| ||||||||||||
Печать с пробелами |
| ||||||||||||
Печать всей страницы черным цветом |
| ||||||||||||
Белые линии поперек страницы |
| ||||||||||||
Линии поперек страницы |
| ||||||||||||
Вертикальные белые полосы на странице |
| ||||||||||||
Белые пятна на черном тексте и графике с интервалами 75 мм Черные пятна с интервалами 75 мм |
| ||||||||||||
Черные мазки тонера поперек страницы |
| ||||||||||||
Черные линии вдоль страницы Вдоль распечатанных страниц остаются пятна тонера. |
| ||||||||||||
Скошенная печать |
| ||||||||||||
Скрученная или волнистая страница |
| ||||||||||||
Бумага смята или со складками |
| ||||||||||||
Ненадежное закрепление |
| ||||||||||||
Скрученная |
|
Узел-шнурок Лента, Метка, угол, лента, 3D компьютерная графика png
Узел-шнурок Лента, Метка, угол, лента, 3D компьютерная графика pngтеги
- угол,
- лента,
- 3D компьютерная графика,
- продажа тег,
- текст,
- прямоугольник,
- лук,
- ценник,
- интернет,
- золотой лук,
- шнурок Узел,
- деревянный тег,
- тег,
- красная лента,
- красный,
- теги,
- ценники,
- точка,
- рождественская бирка,
- творчество,
- дизайнер,
- скачать,
- подарок тег,
- золотой,
- графический дизайн,
- информация,
- линия,
- желтый,
- png,
- прозрачный,
- бесплатная загрузка
Об этом PNG
- Размер изображения
- 650x669px
- Размер файла
- 84.6KB
- MIME тип
- Image/png
изменить размер PNG
ширина(px)
высота(px)
Лицензия
Некоммерческое использование, DMCA Contact Us
- желтая бирка цена, бумажная шелковая лента, бантик этикетка, Разное, этикетка, прямоугольник png 1806x1925px 1.46MB
- Сбытовая сеть D Ценник, бирка, Продажа тег, текст, этикетка png 2246x2945px 100.14KB
- Редактирование рождественских подарков, тег, Продажа тегов, прямоугольник, ценник png 650x650px 69.94KB
- Значок ярлыка цены, иллюстрация 3D красной ленты, красная иллюстрация, Продажа тегов, интернет, клип-арт png 1048x1296px 53. 94KB
- Синий, лента, синяя иллюстрация, плавающий, угол, лента png 945x591px 125.73KB
- красная ленточка, красный ленточный компьютер, красный бант, разное, лента, текст png 524x535px 59.9KB
- Бумага дерево, бирка, угол, коричневый, продажа тег png 1391x728px 3.87MB
- красная иллюстрация ценника, бирка сбывания икон компьютера красная, ценник красного цвета, ярлык, прямоугольник, логотип png 512x512px 14.34KB
- коричневые деревянные качели, деревянная бирка, деревянная бирка, бирка продажи, прямоугольник, деревянная доска png 3402x3402px 2. 88MB
- желтая лента, золото евклидово, золотой лук, разное, угол, золотая рамка png 800x800px 133KB
- коричневая и серая деревянная доска, висящая иллюстрация, доска бирки, угол, продажа тег, фотография png 1744x1349px 2.18MB
- Дизайн иконок Значок взрыва, Ценник, иллюстрация мультфильма взрыва, бирка, лист, этикетка png 3496x2544px 1.96MB
- серебряная пластина, евклидова металлическая заклепка, бирка, угол, продажа тег, прямоугольник png 1600x1600px 197.31KB
- wow super sale читать дальше текст, рекламный баннер, промо-магазин, ярлык магазина, бирка, ярлык, текст png 1000x1000px 137. 82KB
- Значок ценника, Лучший ценник, Лучший логотип, любовь, текст, клипарт png 5860x5502px 453.85KB
- коричневая иллюстрация бирки картона, веревочная креативность, коричневая бирка веревки, бирка продажи, прямоугольник, техника png 1157x850px 950.54KB
- красное кружево и белая коробка, бирка творческая, бирка, продажа Тег, рука, логотип png 631x1406px 787.41KB
- коричневая деревянная доска, Продажа тегов, этикетка, фотография png 1200x911px 962.85KB
- желтые и синие баннеры иллюстрация, бумажная лента оригами, лента оригами, синий, угол, метка png 1300x1062px 939. 73KB
- Золотой, Золотой фон текстура волнистые линии материала, угол, коричневый, золотой Рама png 800x800px 102.28KB
- белая лента иллюстрация, лента, лента, угол, с днем рождения векторные изображения png 1092x2480px 237.55KB
- текстильная иллюстрация пяти разных цветов, угол бумаги, опрессовка, бирка, ярлык, прямоугольник png 1300x1239px 1.11MB
- Бумажная лента для баннеров, 4 бумажных ленты для баннеров, четыре ленты разных цветов, синий, угол, этикетка png 577x684px 28.52KB
- Красная лента, ленты для галстуков, любовь, плавающая, лента png 1172x1107px 187. 24KB
- красная и белая лента, красное знамя, красная простая метка, бирка продажи, ярлык, простой png 2501x1733px 107.96KB
- Значок ярлыка, тег, продажа тег, ценник, красная веревка png 924x1989px 1.35MB
- желтый и зеленый шаблон границы листа, золотой рис, бирка уха блеска, ботаника, продажа тег, этикетка png 2000x1866px 533.23KB
- розовый и желтый фон с оверлеем для текста специального предложения, ярлыком, красным ярлыком предложения, текст, фотография, логотип png 3001x3745px 256.96KB
- Петля-бабочка Узел-шнурок, узел Золотая бабочка, текстура, угол, лента png 1500x5207px 878. 68KB
- коричневый щит деревянный подвесной декор, компьютерный файл, бирка, бирка продажи, прямоугольник, фотография png 800x785px 2.4MB
- Подарочная коробка Лента, Подарок, Разное, лента, плакат png 800x800px 318.91KB
- четыре треугольных кубика разных цветов, графический дизайн Infographic Diagram, тэг PPT Business, шаблон, угол, деловая женщина png 650x650px 71.21KB
- Иконка Диаграмма инфографики, элемент Creative PPT, иллюстрация пяти разных цветов, угол, компьютерная графика 3D, текст png 1318x1439px 19.9KB
- Красная лента Скотч, Лента, лента, текст, сердце png 1552x1146px 591. 68KB
- красно-белая иллюстрация, цена стимулирование продаж бесплатно, красный шок ценник, белый, продажа тег, текст png 1500x1500px 109.6KB
- черная велосипедная иллюстрация, Евклидовый цветок Adobe Illustrator, цветочная лента, граница, акварель Живопись, лента png 1758x2271px 406.56KB
- рекламные объявления о продаже спецпредложений, рекламные баннеры, текстиль, желтая бирка, Бирка продажи, ярлык, текст png 3001x3289px 207.26KB
- красный логотип, Желтое Дерево Pattern, Red Madden Рекламные Теги, Продажа тегов, текст, оранжевый png 1500x1500px 72.72KB org/ImageObject»> Линия Кривая Евклидова, ленты, синие и черные линии иллюстрации, синий, угол, лента png 945x591px 171.4KB
- Большая распродажа иллюстрация, этикетка, ценник, Продажа тегов, текст, логотип png 800x800px 204.72KB
- желтая лента, шнурок узел подарочной ленты золотой, золотой лук, разное, золотая рамка, воздушный шар png 3746x3066px 9.59MB
- розовый крестик, чернильная ручка, красная тушь, чернила, оставить Материал, текст png 2360x2308px 277.72KB
- приветственное обозначение, компьютерный файл, приветственный тег, английский, продажа тег, текст png 626x626px 181.92KB org/ImageObject»> Компьютерные иконки Ценник, бирка, ярлык, прямоугольник, черный png 981x903px 41.64KB
- желтая волна, кривая, лента, лента, угол, оранжевый png 1217x1051px 204.08KB
- разноцветная доска, креативная инфографика, креативный элемент PPT, угол, 3D компьютерная графика, текст png 2100x1274px 28.4KB
- золотая лента иллюстрация, лента, золотая лента, Золотая рамка, компьютерные обои, золото png 910x654px 222.03KB
- Веб-баннер Евклидова Лента Иконка, модный дизайн материал ленты тег, баннер иллюстрации много, Девушка моды, оранжевый, логотип png 3750x2500px 273.74KB org/ImageObject»> Новогодний рождественский подарок, фиолетовая лента, разное, фиолетовый, лента png 1500x476px 380.19KB
- билет игрового автомата, шаблон структуры структуры бумаги, бирка желтого знамени, граница, текстура, угол png 2500x1045px 134.65KB
Issues · graphprotocol/graph-node · GitHub
Новый выпускЕсть вопрос по этому проекту? Зарегистрируйте бесплатную учетную запись GitHub, чтобы открыть задачу и связаться с ее сопровождающими и сообществом.
Зарегистрируйтесь на GitHub
Нажимая «Зарегистрироваться на GitHub», вы соглашаетесь с нашими условиями обслуживания и Заявление о конфиденциальности. Время от времени мы будем отправлять вам электронные письма, связанные с учетной записью.
Уже на GitHub? Войти на ваш счет
Индексатор не работает с IPFS CIDv1
#4373 открыт 15 февраля 2023 г. автором ротарур
Несколько провайдеров Firehose для метрик firehose, если в качестве конфигурации указан только один провайдер Firehose
#4372 открыт 15 февраля 2023 г. автором paymog
Добавить способ перемещения всех подграфов из шарда
#4371 открыт 15 февраля 2023 г. автором лоттер
1Планируется поддержка SQLite?
#4370 открыт 15 февраля 2023 г. автором computeronix
POI генерируется для неверного номера блока и хэша
#4369 открыт 14 февраля 2023 г. автором Hopeyen
Невозможно нежно индексировать вилку
#4356 открыт 12 февраля 2023 г. автором skyao2002
Невозможно развернуть любой новый подграф
#4355 открыт 11 февраля 2023 г. автором aayush5vedi
Запуск узла с параметром —subgraphs завершается ошибкой, если блок еще не загружен
#4352 открыт 8 февраля 2023 г. автором манга
Какие вызовы RPC заменяет firehose?
#4346 открыт 7 февраля 2023 г. автором paymog
Заставить управление нагрузкой провайдера работать для Firehose
#4338 открыт 6 февраля 2023 г. автором манга
граф-узел не будет работать с переменной среды PGPASSFILE
#4336 открыт 3 февраля 2023 г. автором эндерсонмайя
Использует ли graphman check-blocks
провайдеров Firehose?
#4335 открыт 2 февраля 2023 г. автором paymog
Тесты на прививку файловых источников данных тестирование
#4334 открыт 1 февраля 2023 г. автором leoyvens
Разрешить предложение where в запросах подграфа ссылаться на другое поле в типе площадь/график область/подграфы Новая функция
#4332 открыт 31 января 2023 г. автором смбеленый
Нефатальная ошибка не отображается в API статуса индексации ошибка
Что-то не работает#4329 открыт 30 января 2023 г. автором leoyvens
Избегайте «отмены заявления из-за конфликта с восстановлением»
#4327 открыт 27 января 2023 г. автором lutter
Сделать запросы детерминированными при использовании реплик чтения
#4326 открыт 27 января 2023 г. автором lutter
Система на основе правил для управления созданием индексов и аналогичными атрибутами
#4325 открыт 27 января 2023 г. автором lutter
Дублированный провайдер без каких-либо настроек пожарный шланг
#4323 открыт 27 января 2023 г. автором maoueh
Напишите файл схемы JSON для subgraph.yaml
документация
#4322 открыт 25 января 2023 г. автором neysofu
выход за пределы доступа к памяти wasm backtrace ошибка
Что-то не работает#4317 открыт 24 января 2023 г. автором Леон-до
Как загрузить состояние приложения Genesis в хранилище графиков
#4316 открыт 24 января 2023 г. автором faza
неизвестный импорт: ethereum::ethereum.call
не определен
оффчейн
#4309 открыт 23 января 2023 г. автором leoyvens
добавить экспортер прометея дрейфа времени блока для каждого подграфа
#4307 открыт 22 января 2023 г. автором matthewdarwin
Остановить создание привязок Protobuf Rust на build.rs
область/подпотоки
пожарный шланг
#4305 открыт 20 января 2023 г. автором maoueh
ProTip! Смешивайте и подбирайте фильтры, чтобы сузить поиск.
Рабочий узел графа — документация по графу
Узел графа — это компонент, который индексирует подграфы и делает полученные данные доступными для запроса через API GraphQL. Таким образом, он занимает центральное место в стеке индексатора, и правильная работа узла графа имеет решающее значение для успешного запуска индексатора.
Предоставляет контекстуальный обзор Graph Node и некоторые из более продвинутых параметров, доступных индексаторам. Подробную документацию и инструкции можно найти в репозитории Graph Node.
Graph Node — это эталонная реализация для индексации подграфов в сети Graph, подключения к клиентам блокчейна, индексации подграфов и предоставления индексированных данных для запроса.
Graph Node (и весь стек индексатора) можно запускать на «голом железе» или в облачной среде. Эта гибкость центрального компонента индексации имеет решающее значение для надежности The Graph Protocol. Точно так же Graph Node может быть создан из исходного кода, или индексаторы могут использовать один из предоставленных образов Docker.
База данных PostgreSQL#Ссылка на этот раздел
Основное хранилище для узла графа, здесь хранятся данные подграфа, а также метаданные о подграфах и сетевые данные, не зависящие от подграфа, такие как кэш блоков и кэш eth_call.
Сетевые клиенты#Ссылка на этот раздел
Чтобы проиндексировать сеть, Graph Node требуется доступ к сетевому клиенту через Ethereum-совместимый JSON-RPC. Этот RPC может подключаться к одному клиенту Ethereum или может быть более сложной настройкой, которая распределяет нагрузку между несколькими.
Хотя для некоторых подграфов может потребоваться полный узел Ethereum, некоторые могут иметь функции индексирования, требующие дополнительных функций RPC. В частности, для подграфов, создающих eth_calls
в рамках индексации, потребуется архивный узел, поддерживающий EIP-1898, а для подграфов с callHandlers
или blockHandlers
с фильтром call
, требуется поддержка trace_filter
(см. документацию по модулю трассировки). здесь).
Предстоящие: Сетевые пожарные шланги — Firehose — это служба gRPC, предоставляющая упорядоченный, но поддерживающий разветвление поток блоков, разработанный основными разработчиками The Graph для лучшей поддержки производительного индексирования в масштабе. В настоящее время это не является обязательным требованием для индексатора, но индексаторам рекомендуется ознакомиться с технологией до полной сетевой поддержки. Узнайте больше о Firehose здесь.
Узлы IPFS#Ссылка на этот раздел
Метаданные развертывания подграфа хранятся в сети IPFS. Узел графа в первую очередь обращается к узлу IPFS во время развертывания подграфа, чтобы получить манифест подграфа и все связанные файлы. Сетевым индексаторам не нужно размещать собственный узел IPFS. Узел IPFS для сети размещен по адресу https://ipfs.network.thegraph.com.
Сервер метрик Prometheus#Ссылка на этот раздел
Чтобы включить мониторинг и отчетность, Graph Node может дополнительно регистрировать метрики на сервере метрик Prometheus.
Начало работы из исходников#Ссылка на этот раздел
Установите необходимые компоненты#Ссылка на этот раздел
sudo apt-get install -y clang libpg-dev libssl-dev pkg-config
Настройка#Ссылка на этот раздел
- Запустить сервер базы данных PostgreSQL
initdb -D . postgres
pg_ctl -D .postgres -l запуск файла журнала
createdb graph-node
Клонировать репозиторий Graph Node и построить исходный код, запустив
cargo build
Теперь, когда все зависимости настроены, запустите узел графика:
cargo run -p graph-node --release -- \
--postgres-url postgresql://[ИМЯ ПОЛЬЗОВАТЕЛЯ]:[ПАРОЛЬ]@localhost:5432/graph-node \
--ethereum-rpc [ИМЯ_СЕТИ]:[URL] \
--ipfs https://ipfs.network.thegraph.com
Начало работы с Docker#Ссылка на этот раздел
Предварительные условия#Ссылка на этот раздел
- Узел Ethereum . По умолчанию настройка создания докеров будет использовать основную сеть: http://host.docker.internal:8545 для подключения к узлу Ethereum на вашем хост-компьютере. Вы можете заменить это имя сети и URL-адрес, обновив
docker-compose.yml
.
Настройка#Ссылка на этот раздел
- Clone Graph Node и перейдите в каталог Docker:
git clone http://github. com/graphprotocol/graph-node
cd graph-node/docker
- Только для пользователей Linux. Используйте IP-адрес хоста вместо
host.docker.internal
вdocker-compose.yml
с помощью прилагаемого сценария:
./setup.sh
- Запустите локальный узел Graph, который будет подключаться к вашей конечной точке Ethereum:
создание докеров
Начало работы с Kubernetes#Ссылка на этот раздел
Полный пример конфигурации Kubernetes можно найти в репозитории индексатора.
Порты#Ссылка на этот раздел
Во время работы Graph Node предоставляет следующие порты:
Порт | Назначение | Маршруты | Аргумент CLI | Переменная среды | ||||||
---|---|---|---|---|---|---|---|---|---|---|
8000 | HTTP-сервер GraphQL (для запросов подграфов) | /subgraphs/id/… /subgraphs/name/. ../… | —http-port | — | 83 | 83 | ||||
8001 | GraphQL WS (для подписки на подграфы) | /subgraphs/id/… /subgraphs/name/…/… | —ws-port | — | 78 | 8 8020 | JSON-RPC (для управления развертываниями) | / | —admin-port | — |
8030 | Subgraph indexing status API | /graphql | —index-node-port | — | ||||||
8040 | Prometheus metrics | /metrics | —metrics-port | — |
Важно : Будьте осторожны с общедоступными портами — административные порты должны быть заблокированы. Сюда входит конечная точка JSON-RPC узла графа.
В простейшем случае Graph Node может работать с одним экземпляром Graph Node, одной базой данных PostgreSQL, узлом IPFS и сетевыми клиентами в соответствии с требованиями индексируемых подграфов.
Эту настройку можно масштабировать горизонтально, добавляя несколько узлов графа и несколько баз данных для поддержки этих узлов графа. Опытные пользователи могут захотеть воспользоваться некоторыми возможностями горизонтального масштабирования Graph Node, а также некоторыми более продвинутыми параметрами конфигурации через config.toml
и переменные окружения Graph Node.
Файл конфигурации TOML можно использовать для задания более сложных конфигураций, чем представленные в интерфейсе командной строки. Местоположение файла передается с помощью параметра командной строки —config.
При использовании файла конфигурации невозможно использовать параметры —postgres-url, —postgres-secondary-hosts и —postgres-host-weights.
Можно предоставить минимальный файл config.toml
; следующий файл эквивалентен использованию параметра командной строки —postgres-url:
[store]
[store.primary]
connection="<. . аргумент postgres-url ..>"
[deployment]
[[deployment.rule]]
indexers = [ "<. . список всех узлов индексации ..>" ]
Полную документацию по config.toml
можно найти в документах Graph Node.
Несколько узлов графа#Ссылка на этот раздел
Индексация узла графа может масштабироваться по горизонтали, запуская несколько экземпляров узла графа для разделения индексации и запросов между разными узлами. Это можно сделать, просто запустив узлы графа, сконфигурированные с другим node_id
при запуске (например, в файле Docker Compose), который затем можно использовать в файле config.toml
для указания выделенных узлов запросов, захватчиков блоков и разделения подграфов по узлам с правилами развертывания.
Обратите внимание, что несколько узлов Graph можно настроить для использования одной и той же базы данных, которая сама может масштабироваться по горизонтали с помощью сегментирования.
Правила развертывания#Ссылка на этот раздел
При наличии нескольких узлов графа необходимо управлять развертыванием новых подграфов, чтобы один и тот же подграф не индексировался двумя разными узлами, что может привести к конфликтам. Это можно сделать с помощью правил развертывания, которые также могут указывать, какие shard
в котором должны храниться данные подграфа, если используется сегментирование базы данных. Правила развертывания могут совпадать по имени подграфа и сети, которую индексирует развертывание, чтобы принять решение.
Пример конфигурации правила развертывания:
[deployment]
[[deployment.rule]]
match = { name = "(vip|важно)/.*" }
shard = "vip"
indexers = [ "index_node_vip_0", "index_1node_vip_0", "index_1node_vip_0" " ]
[[deployment.rule]]
match = { network = "kovan" }
# Нет сегмента, поэтому мы используем сегмент по умолчанию, который называется 'primary' network = [ "xdai", "poa-core" ] }
indexers = [ "index_node_other_0" ]
[[deployment. rule]]
# "совпадения" нет, поэтому любой подграф соответствует
shards = [ "sharda", "shardb" ]
индексаторов = [
"index_node_community_0",
"index_node_community_1",
"index_node_community_2",
"index_node_community_3",
"Index_node_community_4",
"Index_node_commun_5"
9559555955595010292955929292
".
Подробнее о правилах развертывания читайте здесь.
Выделенные узлы запросов#Ссылка на этот раздел
Узлы можно явно настроить как узлы запроса, включив в файл конфигурации следующее:
[общие]
запрос = "<регулярное выражение>"
Любой узел, чей --node-id соответствует регулярному выражению, будет настроен так, чтобы отвечать только на запросы.
Масштабирование базы данных с помощью сегментирования#Ссылка на этот раздел
В большинстве случаев одной базы данных Postgres достаточно для поддержки экземпляра узла графа. Когда экземпляр узла графа перерастает одну базу данных Postgres, можно разделить хранилище данных узла графа между несколькими базами данных Postgres. Все базы данных вместе образуют хранилище экземпляра узла графа. Каждая отдельная база данных называется шардом.
Шарды можно использовать для разделения развертываний подграфов между несколькими базами данных, а также для использования реплик для распределения нагрузки запросов между базами данных. Это включает в себя настройку количества доступных подключений к базе данных, которые каждый узел графа
должен хранить в своем пуле подключений для каждой базы данных, что становится все более важным по мере индексации большего количества подграфов.
Шардинг становится полезным, когда ваша существующая база данных не справляется с нагрузкой, которую возлагает на нее узел графа, и когда больше невозможно увеличить размер базы данных.
Обычно лучше сделать одну базу данных максимально возможной, прежде чем начинать с осколков. Единственным исключением является случай, когда трафик запросов очень неравномерно распределяется между подграфами; в таких ситуациях может значительно помочь, если подграфы большого объема хранятся в одном сегменте, а все остальное — в другом, потому что такая настройка повышает вероятность того, что данные для подграфов большого объема останутся во внутреннем кеше базы данных и не будут заменяются данными, которые не так нужны из подграфов с небольшим объемом.
Что касается настройки подключений, начните с max_connections в postgresql.conf, установленного на 400 (или даже 200), и посмотрите на метрики store_connection_wait_time_ms и store_connection_checkout_count Prometheus. Заметное время ожидания (больше 5 мс) указывает на то, что доступных подключений слишком мало; большое время ожидания также будет вызвано тем, что база данных очень загружена (например, высокая загрузка ЦП). Однако, если в остальном база данных кажется стабильной, большое время ожидания указывает на необходимость увеличения количества подключений. В конфигурации количество подключений, которое может использовать каждый экземпляр узла графа, является верхним пределом, и узел графа не будет держать соединения открытыми, если они ему не нужны.
Подробнее о настройке магазина читайте здесь.
Загрузка выделенного блока#Ссылка на этот раздел
Если настроено несколько узлов, необходимо будет указать один узел, отвечающий за прием новых блоков, чтобы все сконфигурированные узлы индекса не опрашивали начало цепочки. Это делается как часть пространства имен
chains
, указывающегоnode_id
, который будет использоваться для приема блоков:[цепи]
ingestor = "block_ingestor_node"
Поддержка нескольких сетей#Ссылка на этот раздел
Протокол Graph увеличивает количество сетей, поддерживаемых для индексации наград, и существует множество подграфов, индексирующих неподдерживаемые сети, которые индексатор хотел бы обработать. Файл
config. toml
обеспечивает выразительную и гибкую настройку:
- Несколько сетей
- Несколько провайдеров на сеть (это может позволить разделить нагрузку между провайдерами, а также может позволить настроить полные узлы, а также архивные узлы, при этом узел Graph предпочитает более дешевых поставщиков, если позволяет данная рабочая нагрузка).
- Дополнительные сведения о поставщике, такие как функции, аутентификация и тип поставщика (для экспериментальной поддержки Firehose)
Раздел [chains]
управляет провайдерами Ethereum, к которым подключается граф-узел, и где хранятся блоки и другие метаданные для каждой цепочки. В следующем примере настраиваются две цепочки, mainnet и kovan, где блоки для mainnet хранятся в сегменте vip, а блоки для kovan — в основном сегменте. Сеть основной сети может использовать двух разных провайдеров, тогда как у kovan есть только один провайдер.
[цепочки]
ingestor = "block_ingestor_node"
[chains. mainnet]
shard = "vip"
provider = [
{ label = "mainnet1", url = "http://.." , features = [], headers = { Authorization = "Bearer foo" } },
{ label = "mainnet2", url = "http://..", features = ["archive", "traces" ] }
]
[chains.kovan]
shard = "основной"
provider = [ { label = "kovan", url = "http://..", features = [] } ]
Подробнее о настройке провайдера читайте здесь.
Graph Node поддерживает ряд переменных среды, которые могут включать функции или изменять поведение узла Graph. Они задокументированы здесь.
Пользователи, использующие масштабируемую настройку индексирования с расширенной конфигурацией, могут извлечь выгоду из управления своими узлами Graph с помощью Kubernetes.
- В репозитории индексатора есть пример ссылки Kubernetes
- Launchpad — это набор инструментов для запуска индексатора протокола Graph в Kubernetes, поддерживаемый GraphOps. Он предоставляет набор диаграмм Helm и интерфейс командной строки для управления развертыванием узла Graph.
При наличии работающего узла графа (или узлов графа!), задача состоит в том, чтобы управлять развернутыми подграфами на этих узлах. Graph Node предоставляет ряд инструментов, помогающих управлять подграфами.
Ведение журнала#Ссылка на этот раздел
Журналы узла графа могут предоставить полезную информацию для отладки и оптимизации узла графа и определенных подграфов. Узел Graph поддерживает различные уровни журналов через переменную среды GRAPH_LOG
со следующими уровнями: ошибка, предупреждение, информация, отладка или трассировка.
Кроме того, параметр GRAPH_LOG_QUERY_TIMING
to gql
предоставляет более подробную информацию о том, как выполняются запросы GraphQL (хотя это приведет к созданию большого объема журналов).
Мониторинг и оповещения#Ссылка на этот раздел
Graph Node по умолчанию предоставляет метрики через конечную точку Prometheus на порту 8040. Затем Grafana можно использовать для визуализации этих показателей.
Репозиторий индексатора содержит пример конфигурации Grafana.
Graphman#Ссылка на этот раздел
graphman
— это инструмент для обслуживания Graph Node, помогающий в диагностике и решении различных повседневных и исключительных задач.
Команда graphman включена в официальные контейнеры, и вы можете выполнить команду docker exec в своем контейнере графического узла, чтобы запустить ее. Для этого требуется файл config.toml
.
Полная документация по командам graphman
доступна в репозитории Graph Node. См. [/docs/graphman.md] (https://github.com/graphprotocol/graph-node/blob/master/docs/graphman.md) в узле Graph Node 9.0057 /документы
Статус индексирования API#Ссылка на этот раздел
Доступный по умолчанию на порту 8030/graphql API статуса индексирования предоставляет ряд методов для проверки статуса индексирования для различных подграфов, проверки доказательств индексирования, проверки функций подграфов и т. д.
Полная схема доступна здесь.
Производительность индексирования#Ссылка на этот раздел
Процесс индексации состоит из трех отдельных частей:
- Получение интересующих событий от провайдера
- Обработка событий по порядку с соответствующими обработчиками (это может включать вызов цепочки для состояния и выборку данных из хранилища)
- Запись полученных данных в хранилище
Эти этапы являются конвейерными (т. е. могут выполняться параллельно), но они зависят друг от друга. Если подграфы медленно индексируются, основная причина будет зависеть от конкретного подграфа.
Распространенные причины замедления индексации:
- Время, затрачиваемое на поиск релевантных событий в цепочке (в частности, обработчики вызовов могут быть медленными, учитывая зависимость от
trace_filter
) - Создание большого количества
eth_call
в составе обработчиков - Большое количество операций с хранилищем во время выполнения
- Большой объем данных для сохранения в хранилище
- Большое количество событий для обработки
- Медленное время подключения к базе данных для переполненных узлов
- Сам провайдер отстает от цепочки головы
- Медленное получение новых чеков в головке сети от провайдера
Метрики индексации подграфов могут помочь диагностировать основную причину замедления индексации. В некоторых случаях проблема связана с самим подграфом, но в других случаях улучшенные сетевые провайдеры, снижение конкуренции за базу данных и другие улучшения конфигурации могут заметно повысить производительность индексирования.
Неудачные подграфы#Ссылка на этот раздел
Во время индексации подграфов может произойти сбой, если они обнаружат неожиданные данные, какой-либо компонент не работает должным образом или если в обработчиках событий или конфигурации есть ошибка. Существует два основных типа отказов:
- Детерминированные сбои: это сбои, которые не будут устранены повторными попытками
- Недетерминированные сбои: это могут быть проблемы с провайдером или непредвиденная ошибка узла графа. Когда происходит недетерминированный сбой, Graph Node повторяет попытки сбойных обработчиков, со временем отступая.
В некоторых случаях сбой может быть устранен индексатором (например, если ошибка вызвана отсутствием нужного поставщика, добавление требуемого поставщика позволит продолжить индексирование). Однако в других требуется изменение кода подграфа.
Детерминированные сбои считаются «окончательными», при этом для сбойного блока генерируется доказательство индексирования, а недетерминированные сбои — нет, поскольку подграфу может удаться «отменить сбой» и продолжить индексирование. В некоторых случаях недетерминированная метка неверна, и подграф никогда не преодолеет ошибку; о таких сбоях следует сообщать как о проблемах в репозитории Graph Node.
Кэш блокировок и вызовов#Ссылка на этот раздел
Graph Node кэширует определенные данные в хранилище, чтобы избежать повторной загрузки от провайдера. Блоки кэшируются, как и результаты eth_calls
(последний кэшируется для определенного блока). Это кэширование может значительно увеличить скорость индексации во время «повторной синхронизации» слегка измененного подграфа.
Однако в некоторых случаях, если узел Ethereum предоставил неверные данные за какой-то период, они могут попасть в кеш, что приведет к неправильным данным или ошибочным подграфам. В этом случае индексаторы могут использовать graphman
для очистки отравленного кеша, а затем перематывать затронутые подграфы, которые затем будут получать свежие данные от (надеюсь) исправного провайдера.
Если подозревается несогласованность блочного кэша, например, событие отсутствия получения tx:
-
список цепочек graphman
, чтобы найти название цепочки. -
graphman chain check-blocks
проверит, соответствует ли кэшированный блок поставщику, и удалит блок из кэша, если это не так.по номеру - Если есть разница, может быть безопаснее усечь весь кеш с помощью
graphman chain truncate
. - Если блок соответствует поставщику, то проблема может быть отлажена непосредственно против поставщика.
- Если есть разница, может быть безопаснее усечь весь кеш с помощью
Запрос проблем и ошибок#Ссылка на этот раздел
После индексации подграфа индексаторы могут рассчитывать на обслуживание запросов через выделенную конечную точку запроса подграфа. Если индексатор надеется обслуживать значительный объем запросов, рекомендуется выделенный узел запросов, а в случае очень больших объемов запросов индексаторы могут настроить сегменты реплик так, чтобы запросы не влияли на процесс индексирования.
Однако даже с выделенным узлом запросов и репликами выполнение некоторых запросов может занимать много времени, а в некоторых случаях увеличивать использование памяти и отрицательно влиять на время выполнения запросов другими пользователями.
Существует не одна «серебряная пуля», а набор инструментов для предотвращения, диагностики и обработки медленных запросов.
Кэширование запросов#Ссылка на этот раздел
Graph Node по умолчанию кэширует запросы GraphQL, что может значительно снизить нагрузку на базу данных. Это можно дополнительно настроить с помощью GRAPH_QUERY_CACHE_BLOCKS
и GRAPH_QUERY_CACHE_MAX_MEM
настройки — подробнее здесь.
Анализ запросов#Ссылка на этот раздел
Проблемные запросы чаще всего возникают одним из двух способов. В некоторых случаях сами пользователи сообщают, что данный запрос выполняется медленно. В этом случае задача состоит в том, чтобы диагностировать причину медлительности — является ли это общей проблемой или специфичной для этого подграфа или запроса. И потом, конечно, решить это, если это возможно.
В других случаях триггером может быть высокий уровень использования памяти на узле запроса, и в этом случае сначала нужно определить запрос, вызвавший проблему.
Индексаторы могут использовать qlog для обработки и суммирования журналов запросов Graph Node. GRAPH_LOG_QUERY_TIMING
также можно включить для выявления и отладки медленных запросов.
При медленном запросе у индексаторов есть несколько вариантов. Конечно, они могут изменить свою модель затрат, чтобы значительно увеличить стоимость отправки проблемного запроса. Это может привести к снижению частоты этого запроса. Однако это часто не устраняет основную причину проблемы.
Оптимизация по типу учетной записи#Ссылка на этот раздел
Таблицы базы данных, в которых хранятся сущности, как правило, бывают двух видов: «подобные транзакциям», когда сущности, однажды созданные, никогда не обновляются, т. сущности обновляются очень часто, то есть они хранят что-то вроде финансовых счетов, которые изменяются каждый раз, когда записывается транзакция. Таблицы, подобные учетным записям, характеризуются тем, что они содержат большое количество версий сущностей, но относительно мало отдельных сущностей. Часто в таких таблицах количество отдельных сущностей составляет 1% от общего количества строк (версий сущностей)
Для таблиц, подобных учетным записям, узел графа
может генерировать запросы, в которых используются детали того, как Postgres в конечном итоге хранит данные с такой высокой скоростью изменения, а именно, что все версии для последних блоков находятся в небольшом подразделе общее хранилище для такой таблицы.
Команда graphman stats show
-1
в столбце объектов
означает, что Postgres считает, что все строки содержат отдельный объект.
Как правило, таблицы, в которых количество отдельных сущностей составляет менее 1 % от общего числа строк/версий сущностей, являются хорошими кандидатами на оптимизацию, аналогичную учетным записям. Когда выходные данные После того, как таблица будет определена как учетная, запуск graphman stats show
указывают на то, что таблица может выиграть от этой оптимизации, запуск graphman stats show
выполнит полный подсчет таблицы — это может быть медленно, но дает точную меру. отношения отдельных сущностей к общим версиям сущностей.
graphman stats, подобной учетной записи,
, включит оптимизацию, подобную учетной записи, для запросов к этой таблице. Оптимизацию можно снова отключить с помощью
graphman stats as account-like --clear
Узлам запроса требуется до 5 минут, чтобы заметить, включена или выключена оптимизация.