{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "Yuriy Gavrilov: posts tagged Open Source",
    "_rss_description": "Welcome to my personal place for love, peace and happiness 🤖 Yuiry Gavrilov",
    "_rss_language": "en",
    "_itunes_email": "yvgavrilov@gmail.com",
    "_itunes_categories_xml": "",
    "_itunes_image": "https:\/\/gavrilov.info\/pictures\/userpic\/userpic-square@2x.jpg?1643451008",
    "_itunes_explicit": "no",
    "home_page_url": "https:\/\/gavrilov.info\/tags\/open-source\/",
    "feed_url": "https:\/\/gavrilov.info\/tags\/open-source\/json\/",
    "icon": "https:\/\/gavrilov.info\/pictures\/userpic\/userpic@2x.jpg?1643451008",
    "authors": [
        {
            "name": "Yuriy Gavrilov - B[u]g - for charity.gavrilov.eth",
            "url": "https:\/\/gavrilov.info\/",
            "avatar": "https:\/\/gavrilov.info\/pictures\/userpic\/userpic@2x.jpg?1643451008"
        }
    ],
    "items": [
        {
            "id": "218",
            "url": "https:\/\/gavrilov.info\/all\/raspredelyonnoe-hranilische-dannyh-s-bacalhau-i-duckdb\/",
            "title": "Распределённое хранилище данных с Bacalhau и DuckDB",
            "content_html": "<p>Оригинал тут: <a href=\"https:\/\/blog.bacalhau.org\/p\/distributed-data-warehouse-with-bacalhau\">https:\/\/blog.bacalhau.org\/p\/distributed-data-warehouse-with-bacalhau<\/a><\/p>\n<p>Это часть 5-дневной серии о Bacalhau 1.7<\/p>\n<p><a href=\"https:\/\/blog.bacalhau.org\/p\/announcing-bacalhau-17-empowering\">День 1: Анонс Bacalhau 1.7.0: Расширение возможностей предприятий за счет улучшенной масштабируемости, управления заданиями и поддержки<\/a><br \/>\n<a href=\"https:\/\/blog.bacalhau.org\/p\/bacalhau-v170-day-2-scaling-your\">День 2: Масштабирование вычислительных задач с помощью разделенных заданий Bacalhau<\/a><br \/>\n<a href=\"https:\/\/blog.bacalhau.org\/p\/bacalhau-v170-day-3-streamlining\">День 3: Упрощение безопасности: Облегчение модели аутентификации Bacalhau<\/a><br \/>\n<a href=\"https:\/\/blog.bacalhau.org\/p\/bacalhau-v170-day-4-using-aws-s3\">День 4: Использование разделения AWS S3 с Bacalhau<\/a><\/p>\n<p>Это пятая часть – Распределенное хранилище данных с Bacalhau и DuckDB<\/p>\n<p>Во многих приложениях, полагающихся на хранилища данных, необходимо хранить источники данных в разных местах. Это может быть связано с соображениями конфиденциальности, нормативными требованиями или желанием обрабатывать данные ближе к источнику. Однако бывают случаи, когда необходимо проводить анализ этих источников данных из одного места, не перемещая данные.<\/p>\n<p>В этой статье Bacalhau используется для организации распределенной обработки, а DuckDB предоставляет возможности SQL-хранения и запросов для некоторой фиктивной информации о продажах, расположенной в ЕС и США.<\/p>\n<p>Предварительные требования<\/p>\n<p>Для воспроизведения этого руководства вам понадобятся следующие компоненты:<\/p>\n<ul>\n<li>Bacalhau CLI<\/li>\n<li>Docker и Docker Compose<\/li>\n<li>Пример многорегиональной настройки:<\/li>\n<\/ul>\n<pre class=\"e2-text-code\"><code class=\"\">git clone https:\/\/github.com\/bacalhau-project\/examples.git<\/code><\/pre><p>Архитектура<\/p>\n<p>Пример файла Docker Compose и определения заданий Bacalhau в репозитории примеров имитируют следующую архитектуру:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-169.png\" width=\"1456\" height=\"537\" alt=\"\" \/>\n<\/div>\n<ul>\n<li>Оркестратор Bacalhau:** Центральная панель управления для распределения заданий<\/li>\n<li>Вычислительные узлы:** Распределены по регионам, работают близко к данным<\/li>\n<li>Региональное хранилище:** Региональные хранилища данных, использующие MinIO в этой настройке<\/li>\n<li>DuckDB:** Механизм SQL-запросов, работающий на каждом вычислительном узле. Bacalhau использует пользовательский образ, который добавляет несколько определяемых пользователем функций для помощи в разделении больших наборов данных между узлами на основе следующих методов:\n<ul>\n  <li>`partition_by_hash`: Равномерное распределение файлов по разделам<\/li>\n  <li>`partition_by_regex`: Разделение на основе шаблонов<\/li>\n  <li>`partition_by_date`: Разделение на основе времени<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Вы можете найти более подробную информацию о том, как работают эти функции, в документации по пользовательскому образу.<br \/>\nВы можете увидеть настройку каждого компонента в файле Docker Compose. Создайте архитектуру, выполнив следующую команду:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">docker compose up -d<\/code><\/pre><p>Файл Docker Compose использует несколько файлов конфигурации Bacalhau, которые вы можете увидеть в папке configuration, где вычислительные узлы помечены как узлы US и EU соответственно.<\/p>\n<p>Они также настраивают узлы оркестратора для записи данных в региональные бакеты MinIO.<\/p>\n<p>Создание образцов данных<\/p>\n<p>После того, как вы создали имитацию инфраструктуры, вы можете создать образцы данных, используя задание генератора данных, чтобы записать 3000 записей в каждый регион в формате JSON в соответствующий бакет MinIO.<\/p>\n<h2>Перейдите в каталог заданий<\/h2>\n<pre class=\"e2-text-code\"><code class=\"\">cd ..\/jobs<\/code><\/pre><p>Сгенерируйте данные для США:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">bacalhau job run -V Region=us -V Events=3000 \\\n-V StartDate=2024-01-01 -V EndDate=2024-12-31 \\\n-V RotateInterval=month data-generator.yaml<\/code><\/pre><p>Сгенерируйте данные для ЕС:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">bacalhau job run -V Region=eu -V Events=3000 \\\n-V StartDate=2024-01-01 -V EndDate=2024-12-31 \\\n-V RotateInterval=month data-generator.yaml<\/code><\/pre><p>Доступ к данным для анализа<\/p>\n<p>Bacalhau поддерживает два способа доступа к региональным данным:<\/p>\n<ul>\n<li>Источники ввода Bacalhau**<\/li>\n<\/ul>\n<pre class=\"e2-text-code\"><code class=\"\">InputSources:\n    - Type: s3\n      Source:\n        Bucket: local-bucket\n        Key: &quot;data\/*&quot;<\/code><\/pre><p>Этот метод предоставляет больше контроля, параметров предварительной обработки и поддерживает другие типы источников, помимо S3.<\/p>\n<ul>\n<li>Прямой доступ DuckDB**<\/li>\n<\/ul>\n<pre class=\"e2-text-code\"><code class=\"\">SET VARIABLE files = (\n    SELECT LIST(file)\n    FROM partition_by_hash('s3:\/\/local-bucket\/**\/*.jsonl')\n    );\n    SELECT * FROM read_json_auto(getvariable('files'));<\/code><\/pre><p>Этот метод проще и привычнее для заданий, использующих только SQL. Определения заданий также используют SQL-запросы для обработки данных из источника ввода.<\/p>\n<p>Выполнение анализа<\/p>\n<p>После размещения данных вы можете отправлять задачи анализа в виде заданий Bacalhau. В каждом случае, после запуска задания используйте `<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">bacalhau job describe &lt;job_id&gt;<\/code><\/pre><p>`, чтобы увидеть результаты задания, передав идентификатор задания из вывода команды `<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">bacalhau job run<\/code><\/pre><p>`. Во всех примерах показано использование данных из США. Вы также можете изменить `Region` на `eu`, чтобы увидеть результаты из региона ЕС.<\/p>\n<ul>\n<li>Анализ месячных трендов**<\/li>\n<\/ul>\n<pre class=\"e2-text-code\"><code class=\"\">bacalhau job run -V Region=us monthly-trends.yaml<\/code><\/pre><p>Определение задания.<\/p>\n<p>Пример вывода:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">month      | total_txns | revenue | unique_customers | avg_txn_value\n------------|------------|----------|------------------|---------------\n2024-03-01 | 3,421      | 178,932  | 1,245            | 52.30\n2024-02-01 | 3,156      | 165,789  | 1,189            | 52.53\n2024-01-01 | 2,987      | 152,456  | 1,023            | 51.04<\/code><\/pre><ul>\n<li>Оперативный мониторинг**<\/li>\n<\/ul>\n<ul>\n<li>Hourly Operations (Почасовые операции)\n<ul>\n  <li>Отслеживает метрики работоспособности<\/li>\n  <li>Контролирует процент успешных транзакций<\/li>\n  <li>Показывает почасовые закономерности<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<pre class=\"e2-text-code\"><code class=\"\">bacalhau job run -V Region=us hourly-operations.yaml<\/code><\/pre><ul>\n<li>Anomaly Detection (Обнаружение аномалий)\n<ul>\n  <li>Идентифицирует необычные паттерны<\/li>\n  <li>Использует статистический анализ<\/li>\n  <li>Отмечает значительные отклонения<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<pre class=\"e2-text-code\"><code class=\"\">bacalhau job run -V Region=us anomaly-detection.yaml<\/code><\/pre><ul>\n<li>Бизнес-аналитика**<\/li>\n<\/ul>\n<ul>\n<li>Product Performance (Эффективность продукта)\n<ul>\n  <li>Анализирует эффективность категорий<\/li>\n  <li>Отслеживает долю рынка<\/li>\n  <li>Показывает паттерны продаж<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<pre class=\"e2-text-code\"><code class=\"\">bacalhau job run -V Region=us product-performance.yaml<\/code><\/pre><ul>\n<li>Monthly Trends (Месячные тренды)\n<ul>\n  <li>Долгосрочный анализ трендов<\/li>\n  <li>Месячные агрегации<\/li>\n  <li>Ключевые бизнес-показатели<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<pre class=\"e2-text-code\"><code class=\"\">bacalhau job run -V Region=us monthly-trends.yaml<\/code><\/pre><ul>\n<li>Анализ клиентов**<\/li>\n<\/ul>\n<ul>\n<li>Customer Segmentation (Two-Phase) (Сегментация клиентов (Двухфазная))\n<ul>\n  <li>Фаза 1: Вычисление локальных метрик<\/li>\n  <li>Фаза 2: Объединение и сегментация<\/li>\n  <li>Запустите Фазу 1<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<pre class=\"e2-text-code\"><code class=\"\">bacalhau job run -V Region=us customer-segments-phase1.yaml<\/code><\/pre><ul>\n<li>Запомните ID задания и запустите Фазу 2<\/li>\n<\/ul>\n<pre class=\"e2-text-code\"><code class=\"\">bacalhau job run -V Region=us -V JobID=&lt;phase1-job-id&gt; customer-segments-phase2.yaml<\/code><\/pre><p>Итог<\/p>\n<p>В этой статье объединены распределенные вычислительные мощности Bacalhau с гибкими возможностями SQL DuckDB для создания распределенного хранилища данных, разнесенного по регионам. Примеры заданий Bacalhau предоставляют ряд аналитических задач, от оперативного мониторинга до сегментации клиентов, при этом данные остаются в исходном месте и используются запросы SQL к данным, хранящимся в S3-совместимых бакетах.<\/p>\n",
            "date_published": "2025-03-30T21:35:04+03:00",
            "date_modified": "2025-03-30T21:35:00+03:00",
            "tags": [
                "bacalhau",
                "Data",
                "Open Source"
            ],
            "image": "https:\/\/gavrilov.info\/pictures\/image-169.png",
            "_date_published_rfc2822": "Sun, 30 Mar 2025 21:35:04 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "218",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/gavrilov.info\/pictures\/image-169.png"
                ]
            }
        },
        {
            "id": "217",
            "url": "https:\/\/gavrilov.info\/all\/vnedrenie-i-optimizaciya-apache-dolphinscheduler-v-netease-mail\/",
            "title": "Внедрение и оптимизация Apache DolphinScheduler в NetEase Mail",
            "content_html": "<h3>Перевод: Внедрение и оптимизация Apache DolphinScheduler в NetEase Mail<\/h3>\n<p>Оригинал: <a href=\"https:\/\/apachedolphinscheduler.substack.com\/p\/netease-mails-migration-journey-to\">https:\/\/apachedolphinscheduler.substack.com\/p\/netease-mails-migration-journey-to<\/a><\/p>\n<p>В связи с бурным развитием Интернета, электронная почта — один из важнейших инструментов обмена информацией — испытывает постоянно растущий спрос на обработку данных и планирование задач. NetEase Mail, ведущий поставщик услуг электронной почты в Китае, внедрил платформу DolphinScheduler, чтобы лучше справляться с задачами обработки огромных объемов данных и планирования задач. Компания провела углубленное внедрение и оптимизацию платформы в реальных условиях эксплуатации.<\/p>\n<p>Докладчик:<\/p>\n<p>Лэй Баосинь, инженер больших данных NetEase Mail<\/p>\n<h3>Предпосылки проекта и выбор платформы<\/h3>\n<p>NetEase Mail – это <b>ведущий китайский поставщик услуг электронной почты,<\/b> являющийся частью крупной интернет-компании NetEase.  Вот основные характеристики и информация о компании:<\/p>\n<p>* <b>Широкая линейка продуктов:<\/b>  NetEase Mail предлагает разнообразные почтовые услуги, включая:<br \/>\n* <b>Бесплатная почта:<\/b>  Наиболее известные сервисы 126.com и 163.com, хорошо известные в Китае.<br \/>\n* <b>Корпоративная почта:<\/b>  Предназначена для бизнеса, предлагая более надежные и профессиональные решения.<br \/>\n* <b>VIP-почта:<\/b>  Почтовые сервисы премиум-класса с расширенными функциями и поддержкой.<br \/>\n* <b>Долгая история:<\/b> Существует с 1997 года, что говорит о стабильности и накопленном опыте.<br \/>\n* <b>Огромная база пользователей:<\/b>  Благодаря популярности сервиса в Китае, NetEase Mail обслуживает миллионы пользователей.<br \/>\n* <b>Технологическая зрелость:<\/b> NetEase Mail активно использует современные технологии (например, Kubernetes, Apache DolphinScheduler и Streampark) для обработки больших объемов данных, планирования задач и улучшения общей эффективности.<br \/>\n* <b>Ориентация на стабильность и безопасность:<\/b>  Компания уделяет большое внимание предоставлению стабильных, безопасных и эффективных почтовых услуг.<br \/>\n* <b>Инновационное развитие:<\/b> NetEase Mail постоянно совершенствует свои сервисы, внедряя новые функции, интегрируя искусственный интеллект и оптимизируя инфраструктуру.<br \/>\n* <b>Вклад в opensource:<\/b> NetEase Mail активно контрибьютит в open-source проекты, например, SeaTunnel, что говорит об их технической экспертизе и желании делиться разработками с сообществом.<\/p>\n<p>В целом, <b>NetEase Mail – это авторитетный и инновационный поставщик услуг электронной почты в Китае, отличающийся широким спектром услуг, ориентацией на стабильность и безопасность, а также активным применением передовых технологий.<\/b><\/p>\n<h4>История развития NetEase Mail<\/h4>\n<p>С момента запуска в 1997 году, NetEase Mail прошла несколько важных этапов развития, эволюционировав от 126 Mail, 163 Mail до Mail Master, постоянно расширяя линейку продуктов и спектр услуг. Сегодня NetEase Mail создала диверсифицированную бизнес-систему, включающую бесплатную почту, корпоративную почту, VIP-почту и многое другое, предоставляя стабильные, безопасные и эффективные услуги электронной почты огромному количеству пользователей.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-154.png\" width=\"800\" height=\"450\" alt=\"\" \/>\n<div class=\"e2-text-caption\">*Из рисунка выше видно, что NetEase Mail внедрила Apache DolphinScheduler в 2023 году.*<\/div>\n<\/div>\n<h4>Сценарии применения данных<\/h4>\n<p>В ежедневной работе NetEase Mail необходимо обрабатывать огромные объемы данных журналов бизнес-операций. Эти данные требуют постоянного холодного и горячего резервного копирования в течение более полугода, а журналы бизнес-операций обрабатываются и хранятся отдельно как в автономном режиме (HDFS), так и в режиме реального времени (ClickHouse). В то же время, для обеспечения доступности бизнеса, критически важные звенья, такие как основные механизмы отправки\/получения электронной почты и аутентификации пользователей, требуют эффективной обработки данных и поддержки планирования задач.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-155.png\" width=\"800\" height=\"450\" alt=\"\" \/>\n<\/div>\n<h4>Предпосылки выбора и преимущества DolphinScheduler<\/h4>\n<p>Столкнувшись с постоянно растущими потребностями в обработке данных, команда NetEase Mail сравнила несколько платформ планирования задач с открытым исходным кодом. DolphinScheduler выделился благодаря поддержке различных механизмов планирования, высокой стабильности, простоте использования и богатой функциональности. Он способен поддерживать различные сценарии работы с данными, отвечая сложным и разнообразным требованиям NetEase Mail к планированию задач.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-156.png\" width=\"800\" height=\"450\" alt=\"\" \/>\n<\/div>\n<h4>Развертывание платформы и текущее использование<\/h4>\n<h4>Путь обновления и преобразования на основе DS<\/h4>\n<p>После внедрения платформы DolphinScheduler, команда NetEase Mail встала на путь непрерывной оптимизации и обновления. Начиная с предварительных исследований и сравнений при выборе платформы, затем решая проблемы, возникающие в процессе использования, и, наконец, выполняя вторичную разработку для постоянного улучшения простоты использования и пользовательского опыта, команда неустанно двигалась к совершенствованию платформы. После подтверждения выбора в марте 2023 года, первоначальная трансформация на основе функциональности оповещения была завершена в декабре 2023 года, а к марту 2024 года была достигнута стабильная работа и продолжающиеся исследования.<\/p>\n<h4>Архитектура данных и текущее использование<\/h4>\n<p>В настоящее время в отделе NetEase Mail платформа DolphinScheduler развернута в архитектуре 3 Master, 5 Worker и работает на Kubernetes (k8s). Платформа поддерживает более 1200 автономных задач планирования для таких сервисов, как защита от спама, контроль рисков, AI и многого другого, с ежедневным количеством запусков, превышающим 50 000.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-157.png\" width=\"800\" height=\"792\" alt=\"\" \/>\n<div class=\"e2-text-caption\">*На уровне архитектуры данных, благодаря интеграции DolphinScheduler с Streampark, было достигнуто сочетание автономного планирования и обработки задач Flink в режиме реального времени. Между тем, самостоятельно разработанные компоненты, такие как центр метаданных и портал данных, формируют уровень обслуживания данных, обеспечивая поддержку управления данными и сервисов.*<\/div>\n<\/div>\n<p>Внедрение платформы значительно повысило эффективность разработки данных, снизило затраты на эксплуатацию и обслуживание и обеспечило стабильный вывод бизнес-данных, тем самым оказывая сильную поддержку быстрой итерации и инновациям в бизнесе.<\/p>\n<h4>Типы задач и поддержка приложений<\/h4>\n<p>Платформа DolphinScheduler стала основной платформой планирования задач внутри отдела, предлагая широкий спектр типов задач, включая Spark, Shell, SQL, SeaTunnel, Python и многое другое. Эти задачи обеспечивают надежную поддержку данных для нисходящих приложений, таких как управление метаданными, отчеты BI и исследования и разработки данных, удовлетворяя потребности в обработке данных в различных бизнес-сценариях.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-158.png\" width=\"800\" height=\"295\" alt=\"\" \/>\n<\/div>\n<h3>Интеграция функциональности распространения данных и методы оптимизации<\/h3>\n<h4>Интеграция функциональности распространения данных<\/h4>\n<p>Что касается планирования и распространения данных, команда NetEase Mail выявила несколько проблем, которые необходимо было решить для повышения эффективности и возможностей обработки данных, в том числе:<\/p>\n<ul>\n<li>Частые запросы на обработку данных:** Частые запросы на обработку данных от персонала, не занимающегося исследованиями и разработками, требуют поддержки разработчиков данных.<\/li>\n<li>Низкая готовность к созданию промежуточных таблиц:** Команды разработчиков продуктов и контроля качества демонстрируют небольшую готовность к созданию промежуточных таблиц, поскольку это занимает много времени.<\/li>\n<li>Существуют пороги в конфигурации синхронизации данных:** Конфигурация задач синхронизации данных между гетерогенными источниками данных представляет определенные пороги, требующие специализированной поддержки разработки данных.<\/li>\n<li>Процесс разработки задач синхронизации относительно длинный:** Полный процесс разработки задач синхронизации данных является длительным, включая такие шаги, как создание таблиц, создание конфигурации синхронизации и создание задач планирования.<\/li>\n<\/ul>\n<p>Чтобы решить эти проблемы, команда NetEase Mail интегрировала функциональность распространения данных в платформу DolphinScheduler.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-159.png\" width=\"800\" height=\"457\" alt=\"\" \/>\n<\/div>\n<p>*Общий подход – это создание промежуточных таблиц + генерация конфигурации задач синхронизации + создание задач планирования, что повышает эффективность обработки промежуточных данных и обеспечивает комплексный процесс для построения задач обработки данных.*<\/p>\n<p>Эта функциональность предлагает два режима — быструю конфигурацию и пользовательскую конфигурацию. Она может автоматически генерировать операторы DDL таблицы на основе параметров формы и выполнять логику создания таблицы, одновременно генерируя SQL для промежуточной обработки и конфигурации задач синхронизации данных, и, наконец, вызывать внутренние методы Dolphin для создания рабочих процессов и задач планирования.<\/p>\n<p>В результате внедрения этой функциональности среднее время обработки промежуточных данных сократилось с 1 часа до 20 минут, что увеличило эффективность разработки на 67%, и она уже поддерживает более 40 онлайн-задач обработки данных, при этом количество пользователей постоянно растет.<\/p>\n<h4>Оптимизация методов автономного планирования для повышения отказоустойчивости<\/h4>\n<p>Исходный механизм планирования, при обработке сбоев зависимых задач, приводил к непосредственному сбою зависимых узлов, делая невозможным повторный запуск незавершенной цепочки данных одним щелчком мыши. Это увеличивало операционную нагрузку на разработчиков данных и увеличивало время восстановления после сбоев.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-160.png\" width=\"800\" height=\"236\" alt=\"\" \/>\n<\/div>\n<p>Чтобы решить эту проблему, команда переработала логику обработки сигналов ожидания и сбоев в методе getModelDependResult класса DependentExecute в модуле dolphinscheduler-master. Когда статус зависимой задачи — FAILED, статус в dependResultList изменяется на WAITING, чтобы нижестоящие задачи получали статус WAITING, а не FAILED.<\/p>\n<p>Эта оптимизация позволяет восстанавливать и повторно запускать цепочку данных одним щелчком мыши, снижая затраты на ручное вмешательство, повышая эффективность и интеллектуальность восстановления цепочки задач, ускоряя скорость восстановления цепочки данных после сбоев и обеспечивая своевременное восстановление и вывод бизнес-данных.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-161.png\" width=\"800\" height=\"118\" alt=\"\" \/>\n<\/div>\n<h4>Интеграция и оптимизация компонентов SeaTunnel, повышение эффективности синхронизации данных<\/h4>\n<p>Чтобы удовлетворить потребности в крупномасштабной синхронизации данных для нового бизнеса, команда внедрила инструмент интеграции данных SeaTunnel и развернула его в кластере Kubernets (k8s) в режиме разделенного кластера.<\/p>\n<p>За счет оптимизации плагинов SeaTunnel NetEase Mail предлагает как пользовательские, так и быстрые режимы конфигурации, тем самым снижая порог использования.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-162.png\" width=\"482\" height=\"502\" alt=\"\" \/>\n<\/div>\n<h5>Принцип реализации<\/h5>\n<p>С точки зрения реализации, решение поддерживает как конфигурацию на основе форм, так и пользовательскую конфигурацию. Режим конфигурации на основе форм генерирует логику взаимодействия для конфигурации SeaTunnel (ST) через параметры формы и поддерживает конфигурацию дополнительных пользовательских параметров, а также конфигураций JVM на уровне задач.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-163.png\" width=\"601\" height=\"491\" alt=\"\" \/>\n<\/div>\n<p>Бэкэнд получает параметры формы для генерации необходимой конфигурации для контекста выполнения задачи. Он разрабатывает интерфейс IConfigGenerator для реализации логики генерации Source и Sink для каждого источника данных, и, наконец, класс SeatunnelConfigGenerator используется для генерации окончательной конфигурации ST.<\/p>\n<h5>Развертывание и настройка<\/h5>\n<p>Что касается развертывания и настройки, то кластер SeaTunnel использует архитектуру 2 Master, 5 Worker для обеспечения высокой доступности и производительности синхронизации.<\/p>\n<p>За счет оптимизации логики сегментирования для HDFS, HIVE и MultiTable Source, считыватель получает более сбалансированные сегменты, что повышает производительность синхронизации данных. Соответствующие оптимизации были отправлены в виде PR в сообщество.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-164.png\" width=\"515\" height=\"264\" alt=\"\" \/>\n<\/div>\n<p>С точки зрения настройки параметров, в ответ на требование крупномасштабной синхронизации данных из HDFS в Doris, после исследования и настройки параметров кода DorisSink была достигнута скорость передачи данных в 2 миллиона записей в секунду, что значительно повысило производительность синхронизации данных.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-165.png\" width=\"452\" height=\"206\" alt=\"\" \/>\n<\/div>\n<h3>Практический пример проекта: перенос задач и практика изоляции ресурсов<\/h3>\n<h4>Эффективная миграция задач с платформы Mammoth на DolphinScheduler<\/h4>\n<p>Платформа Mammoth – это программное обеспечение платформы больших данных, разработанное для внутреннего использования в NetEase Group, и некоторые зависимости между задачами Mammoth очень сложны, требуя анализа и организации. Если это делать вручную, эффективность будет низкой, и, вероятно, возникнут пропуски или ошибки.<\/p>\n<p>В конце концов, после изучения представления зависимостей задач на платформе DolphinScheduler, было решено перейти на DolphinScheduler.<\/p>\n<p>Что касается выбора метода миграции, то если бы был принят ручной подход к миграции, он был бы не только трудоемким и отнимающим много времени, но и подвержен ошибкам миграции из-за сложности зависимостей задач, что повлияло бы на общую стабильность задач.<\/p>\n<p>Исходя из различных соображений, после обсуждения и исследований NetEase Mail решила принять решение об автоматизированном решении синхронизации. Это решение автоматически собирает метаданные задач и lineage задач со старой платформы, преобразует их в формат конфигурации задач платформы Dolphin и одновременно добавляет зависимости задач. Наконец, рабочие процессы быстро создаются через интерфейс Dolphin. Для достижения этого процесса NetEase Mail использовала инструмент синхронизации PyDolphinScheduler, официально предоставляемый DolphinScheduler — Python API, который позволяет определять рабочие процессы с использованием кода Python, а именно, “workflow as code”.<\/p>\n<p>Кроме того, NetEase Mail также собирала метаданные и lineage задач Mammoth через систему метаданных, пакетно переписывала задачи Mammoth в задачи DolphinScheduler и автоматически добавляла узлы зависимостей в соответствии с lineage.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-166.png\" width=\"800\" height=\"430\" alt=\"\" \/>\n<\/div>\n<p>Эта практика эффективно завершила перенос более 300 задач Mammoth, обеспечив плавный бизнес-переход, достигнув массовой миграции одним щелчком мыши, значительно сэкономив затраты на рабочую силу и предоставив ценный опыт для аналогичных сценариев миграции задач в будущем.<\/p>\n<h4>Практика изоляции групп Worker<\/h4>\n<p>Следующая практика проекта — это практика изоляции ресурсов на основе группировки Worker в DolphinScheduler.<\/p>\n<p>В повседневном использовании платформы NetEase Mail DolphinScheduler ключевым бизнес-сценарием является поддержка задач планирования онлайн-мониторинга QA. Эти задачи характеризуются высокой частотой планирования, в основном на уровне минут; существует большое количество задач, при этом количество задач, связанных с мониторингом, в настоящее время достигает 120+.<\/p>\n<p>Выполнение этих задач планирования мониторинга в настоящее время в основном достигается с помощью типа задачи SHELL путем вызова самостоятельно разработанного jar-пакета инструмента обработки задач ETL. Этот jar-пакет предоставляет дополнительные функциональные возможности во время выполнения задачи, такие как проверки идемпотентности, повторные попытки по таймауту и т.д.<\/p>\n<p>Однако этот вид вызова запустит множество процессов JVM на рабочих узлах (worker nodes). В это время, если некоторые критически важные задачи планирования также запланированы на тот же рабочий узел, и OOM killer запускается из-за нехватки памяти, эти критически важные задачи, как правило, имеющие более высокое использование памяти, могут получить более высокий балл OOM и с большей вероятностью будут завершены, что приведет к нестабильному выполнению критически важных задач.<\/p>\n<p>Кроме того, для выполнения некоторые задания синхронизации Т+1 на следующее утро требуют большого количества ресурсов и не подходят для планирования на том же узле, что и другие задания, что может повлиять на производительность и стабильность выполнения других заданий на том же работнике.<\/p>\n<p>Поэтому команда NetEase Mail рассматривала возможность использования решения для изоляции Worker group для решения вышеуказанных проблем.<\/p>\n<p>Благодаря изоляции групп Worker команда отделила высокочастотные задачи планирования, такие как мониторинг в режиме реального времени, от других задач, обеспечив стабильное выполнение основных графиков, связанных с OKR, и повысив общую стабильность и надежность выполнения задач.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-167.png\" width=\"800\" height=\"189\" alt=\"\" \/>\n<\/div>\n<p>На практике NetEase Mail создала на платформе различные группы Worker, содержащие различные узлы Worker, включая такие группы, как Default, AI, Monitoring, Hadoop и группы задач с большими ресурсами, чтобы избежать проблем блокировки задач и состязания за ресурсы, оптимизировать распределение ресурсов и повысить общую утилизацию ресурсов и производительность платформы.<\/p>\n<p>Эта практика эффективно решила такие проблемы, как блокировка задач, вызванная высокой частотой планирования задач мониторинга QA, и проблемы OOM узла worker, вызванные высоким запросом ресурсов задачами Т+1 рано утром, тем самым снизив операционные риски.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-168.png\" width=\"591\" height=\"397\" alt=\"\" \/>\n<\/div>\n<h3>Итоги и перспективы<\/h3>\n<h4>Резюме практики<\/h4>\n<p>Внедрив платформу DolphinScheduler и проведя серию мероприятий по развертыванию и оптимизации, команда NetEase Mail достигла значительных результатов в повышении эффективности разработки данных, снижении эксплуатационных затрат и обеспечении стабильного вывода бизнес-данных. Вторичная разработка платформы тесно связана с бизнес-потребностями, подчеркивая повышенное удобство для пользователя и эффективность разработки, в то время как команда постоянно сосредотачивается на оптимизации и улучшении платформы и активно вносит вклад в сообщество, стимулируя постоянное развитие платформы.<\/p>\n<h4>Значение и преимущества платформы<\/h4>\n<p>Платформа DolphinScheduler играет важную роль в бизнесе NetEase Mail. Она не только повышает эффективность и стабильность разработки данных, но и удовлетворяет разнообразные потребности бизнеса за счет оптимизированных процессов планирования задач, обеспечивая своевременный вывод данных и активно способствуя устойчивому развитию почтового бизнеса.<\/p>\n<h4>Обмен опытом и идеями<\/h4>\n<p>В процессе развертывания и оптимизации платформы команда NetEase Mail накопила богатый практический опыт. Этот опыт представляет собой важную справочную ценность для других предприятий при выборе и использовании платформ планирования задач. Команда подчеркивает, что вторичная разработка должна быть тесно интегрирована с фактическими бизнес-потребностями, всегда уделяя первоочередное внимание пользовательскому опыту и эффективности разработки. В то же время постоянная ориентация на оптимизацию и улучшение платформы и активное участие в построении сообщества с открытым исходным кодом может стимулировать постоянное совершенствование и развитие платформы.<\/p>\n<h4>Перспективы на будущее<\/h4>\n<p>Заглядывая в будущее, команда NetEase Mail планирует продолжить изучение и продвижение в следующих направлениях:<\/p>\n<ul>\n<li>Внедрение ИИ:** Интеграция возможностей ИИ и LLM для достижения более интеллектуальных и удобных для пользователя процессов ETL обработки данных, повышая уровень автоматизации и интеллектуализации обработки данных.<\/li>\n<li>Управление данными:** Интеграция данных планирования DolphinScheduler с внутренним центром метаданных для достижения интеллектуального сбора и анализа lineage данных\/задач и карт данных, обеспечивая сильную поддержку управления данными.<\/li>\n<li>Оптимизация платформы:** Дальнейшая оптимизация производительности и функциональности платформы DolphinScheduler для повышения ее стабильности и надежности, что позволит лучше удовлетворять растущие потребности в обработке данных.<\/li>\n<li>Внедрение DATA OPS:** Достижение интеграции и консолидации между платформой DolphinScheduler и другими системами платформ данных, содействие автоматизации интеграции и передачи данных, а также построение более эффективной экосистемы данных.<\/li>\n<\/ul>\n<h4>В заключение<\/h4>\n<p>Практика развертывания и оптимизации NetEase Mail на основе платформы DolphinScheduler не только решила существующие проблемы планирования задач и обработки данных, но и заложила прочный фундамент для будущего развития. Благодаря постоянным технологическим инновациям и практическим исследованиям NetEase Mail продолжит предоставлять пользователям более качественные и эффективные услуги электронной почты, а также вносить больший вклад в развитие сообщества с открытым исходным кодом.<\/p>\n",
            "date_published": "2025-03-30T21:21:55+03:00",
            "date_modified": "2025-03-30T21:23:42+03:00",
            "tags": [
                "big data",
                "Data",
                "LLM",
                "Open Source"
            ],
            "image": "https:\/\/gavrilov.info\/pictures\/image-154.png",
            "_date_published_rfc2822": "Sun, 30 Mar 2025 21:21:55 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "217",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/gavrilov.info\/pictures\/image-154.png",
                    "https:\/\/gavrilov.info\/pictures\/image-155.png",
                    "https:\/\/gavrilov.info\/pictures\/image-156.png",
                    "https:\/\/gavrilov.info\/pictures\/image-157.png",
                    "https:\/\/gavrilov.info\/pictures\/image-158.png",
                    "https:\/\/gavrilov.info\/pictures\/image-159.png",
                    "https:\/\/gavrilov.info\/pictures\/image-160.png",
                    "https:\/\/gavrilov.info\/pictures\/image-161.png",
                    "https:\/\/gavrilov.info\/pictures\/image-162.png",
                    "https:\/\/gavrilov.info\/pictures\/image-163.png",
                    "https:\/\/gavrilov.info\/pictures\/image-164.png",
                    "https:\/\/gavrilov.info\/pictures\/image-165.png",
                    "https:\/\/gavrilov.info\/pictures\/image-166.png",
                    "https:\/\/gavrilov.info\/pictures\/image-167.png",
                    "https:\/\/gavrilov.info\/pictures\/image-168.png"
                ]
            }
        },
        {
            "id": "216",
            "url": "https:\/\/gavrilov.info\/all\/datahub-1-0\/",
            "title": "DataHub 1.0",
            "content_html": "<p>DataHub 1.0 уже здесь! Получите максимальную отдачу от нового UX<\/p>\n<p><video width=\"740\" controls><br \/>\n<source src=\"http:\/\/a.gavrilov.info\/data\/posts\/DataHub-1-0-is-Here-Get-the-Most-from-the-New-UX.mp4\" type=\"video\/mp4\"><br \/>\n<\/video><\/p>\n<p>00:00:00 Введение и анонсы<\/p>\n<p>• Приветствие участников и анонс гостей.<br \/>\n• Мэгги расскажет об обновлении дорожной карты DataHub.<br \/>\n• Паулина и Анна представят новый UX DataHub 10.<br \/>\n• Харшел из команды DataHub поделится новостями от Block.<br \/>\n• Шершанка, технический директор и соучредитель, подведет итоги.<\/p>\n<p>00:01:01 Анонс DataHub 10<\/p>\n<p>• Анонс DataHub 10 и ссылки на блог и видеоролики.<br \/>\n• Видео о начале проекта DataHub.<\/p>\n<p>00:02:33 Важность DataHub<\/p>\n<p>• DataHub как важный компонент инфраструктуры.<br \/>\n• Переход на DataHub и отключение собственного инструмента lineage.<br \/>\n• Расширение модели DataHub для поддержки элементов данных.<\/p>\n<p>00:04:11 Обновления дорожной карты DataHub<\/p>\n<p>• Мэгги рассказывает о последних обновлениях DataHub.<br \/>\n• Четыре столпа: открытие, управление, метаданные и наблюдаемость.<br \/>\n• Фокус на открытии данных и интеграции с новыми инструментами.<\/p>\n<p>00:05:09 Открытие данных<\/p>\n<p>• Фокус на человеко-ориентированном понимании данных.<br \/>\n• Интеграция с новыми инструментами, такими как MLflow и Cockroach DB.<br \/>\n• Разработка новых интеграций, включая Hex и Vertex AI.<\/p>\n<p>00:07:32 Управление данными<\/p>\n<p>• Введение иерархической родословной для упрощения графиков.<br \/>\n• Расширение поддержки терминов в глоссарии.<br \/>\n• Обеспечение всеобщего доступа к данным и централизованного соответствия требованиям.<\/p>\n<p>00:10:52 Наблюдаемость данных<\/p>\n<p>• Обеспечение доступности и демократизация качества данных.<br \/>\n• Централизованное отслеживание и разрешение инцидентов.<br \/>\n• Улучшения в утверждениях и расширенный поток инцидентов.<\/p>\n<p>00:12:53 Основные направления проекта<\/p>\n<p>• Фокус на API и SDK для автоматизации регистрации, обогащения и поиска данных.<br \/>\n• Важность качества обслуживания и аудита ведения журнала.<br \/>\n• Улучшение отслеживаемости событий в центре обработки данных.<\/p>\n<p>00:13:40 Пакет SDK для Python<\/p>\n<p>• Работа над улучшением пакета SDK для Python версии 2.<br \/>\n• API для регистрации, обогащения и извлечения данных.<br \/>\n• Вклад в документацию для улучшения понимания улучшений.<\/p>\n<p>00:14:42 Учетные записи служб<\/p>\n<p>• Внедрение учетных записей служб для команд.<br \/>\n• Управление автоматизацией и рабочими процессами.<br \/>\n• Призыв к обратной связи и сотрудничеству.<\/p>\n<p>00:15:41 Будущие обновления и DataHub Cloud<\/p>\n<p>• Опрос о будущих обновлениях DataHub и DataHub Cloud.<br \/>\n• DataHub Cloud как управляемый сервис с дополнительными возможностями.<br \/>\n• Переход к повестке дня и представлению UX-дизайнеров.<\/p>\n<p>00:16:47 Дизайн продуктов в DataHub<\/p>\n<p>• Инвестиции в дизайн продуктов в DataHub.<br \/>\n• Важность дизайна для инноваций и постоянного совершенствования.<br \/>\n• Использование данных и отзывов пользователей для улучшения продукта.<\/p>\n<p>00:18:44 Принципы дизайна<\/p>\n<p>• Философия дизайна: простота, обратная связь, последовательность.<br \/>\n• Создание системы проектирования в Figma и Storybook.<br \/>\n• Внедрение токенов и принципов для компонентов.<\/p>\n<p>00:19:43 Примеры изменений<\/p>\n<p>• Изменения в цветах и стилях кнопок и диаграмм.<br \/>\n• Введение специальных дизайнерских жетонов.<br \/>\n• Постепенные обновления пользовательского интерфейса.<\/p>\n<p>00:20:54 Панель навигации и структурированные свойства<\/p>\n<p>• Улучшение панели навигации для удобства пользователей.<br \/>\n• Гибкость отображения структурированных свойств.<br \/>\n• Постоянное совершенствование продукта на основе отзывов пользователей.<\/p>\n<p>00:23:37 Введение и принципы последовательности<\/p>\n<p>• Обсуждение предварительных просмотров вкладки “Стоп”.<br \/>\n• Введение в принципы согласованности и последовательности.<br \/>\n• Создание графической библиотеки для визуализации данных.<\/p>\n<p>00:24:02 Итеративность и визуализация данных<\/p>\n<p>• Итеративный процесс создания графических элементов.<br \/>\n• Примеры различных диаграмм и их эволюция.<br \/>\n• Переход от высокой плотности данных к более сжатым диаграммам.<\/p>\n<p>00:25:46 Новые функции и панель вкладок<\/p>\n<p>• Введение новой панели вкладок “Статистика”.<br \/>\n• Улучшение представления данных для пользователей.<br \/>\n• Демонстрация новых функций и взаимодействий.<\/p>\n<p>00:28:27 Взаимодействие с пользователями<\/p>\n<p>• Призыв к участию в исследовании пользователей.<br \/>\n• Важность обратной связи для улучшения продукта.<br \/>\n• Возможности участия в опросах и тестировании юзабилити.<\/p>\n<p>00:31:19 Обнаружение данных с агентами ИИ<\/p>\n<p>• Введение в тему обнаружения данных с агентами ИИ.<br \/>\n• Представление Сэма Осборна и его роли в компании Block.<br \/>\n• Обзор управления данными и блокчейна в компании.<\/p>\n<p>00:32:39 Проблемы и перспективы управления данными<\/p>\n<p>• Переход на облачный сервис Data Hub.<br \/>\n• Проблемы и возможности каталогизации данных.<br \/>\n• Введение агентов ИИ для улучшения управления данными.<\/p>\n<p>00:34:33 Демонстрация работы с Cloud Desktop<\/p>\n<p>• Cloud Desktop настроен для взаимодействия с LLM.<br \/>\n• Возможность задавать вопросы о данных, связанных с домашними животными.<br \/>\n• Программа ищет данные на сервере Data Hub и предоставляет резюме.<\/p>\n<p>00:35:23 Анализ данных и ключевые показатели<\/p>\n<p>• Программа ищет данные и предоставляет информацию о ключевых показателях.<br \/>\n• Возможность задавать дополнительные вопросы о профилях домашних животных.<br \/>\n• Программа показывает количество строк и активные инциденты.<\/p>\n<p>00:37:05 Использование Slack и Data Hub<\/p>\n<p>• Возможность использовать Slack для планирования изменений в Data Hub.<br \/>\n• Программа помогает определить, на какие данные повлияет изменение.<br \/>\n• Возможность узнать, кому нужно сообщить об изменениях.<\/p>\n<p>00:38:38 Демонстрация работы с Goose<\/p>\n<p>• Goose – агент искусственного интеллекта с открытым исходным кодом.<br \/>\n• Интеграция с локальной и удаленной системами через расширения.<br \/>\n• Пример использования для поиска данных и владельцев данных.<\/p>\n<p>00:43:39 Демонстрация работы в среде IDE<\/p>\n<p>• Проект DBT с использованием идентификатора на базе искусственного интеллекта.<br \/>\n• Возможность проверять изменения в Data Hub и их влияние.<br \/>\n• Программа помогает избежать проблем и обеспечивает безопасность.<\/p>\n<p>00:45:59 Введение в агентов искусственного интеллекта<\/p>\n<p>• Агенты организуют контекстное управление разговорами с LLM.<br \/>\n• Интеграция с системами через протокол MCP.<br \/>\n• Агенты взаимодействуют с LLM и внешними службами данных.<\/p>\n<p>00:47:50 Модель контекстного протокола MCP<\/p>\n<p>• MCP – открытый стандарт для использования данных и инструментов в контексте взаимодействия с ИИ.<br \/>\n• Охватывает аспекты запроса данных, вызова служб и чтения\/записи информации.<br \/>\n• Может использоваться для конкретных случаев использования и внешних серверов.<\/p>\n<p>00:48:41 Агенты и спецификация MCP<\/p>\n<p>• Представлен агент искусственного интеллекта с открытым исходным кодом codename goose.<br \/>\n• Спецификация MCP выпущена компанией Anthropic и является стандартным протоколом для ИИ.<br \/>\n• Обсуждается сотрудничество с ACRIL и улучшения Python SDK для приложений ИИ.<\/p>\n<p>00:49:45 Демонстрация и использование codename goose<\/p>\n<p>• Codename goose поддерживает стандарт MCP и позволяет подключаться к различным моделям и поставщикам.<br \/>\n• Демонстрационное видео показывает, как codename goose помогает в выполнении различных задач и упрощении рабочих процессов.<\/p>\n<p>00:50:12 Интеграция и улучшения<\/p>\n<p>• Агенты, стандарты MCP и центр обработки данных помогают быстрее подключать пользователей и интегрироваться с внутренними службами.<br \/>\n• Обсуждаются улучшения Python SDK для поиска сущностей и lineage, оптимизированных для интеграции с ИИ.<\/p>\n<p>00:51:16 Будущее MCP<\/p>\n<p>• В спецификацию MCP добавлены элементы авторизации с помощью OAuth и элементы для выборки и потоковой передачи.<br \/>\n• Ожидается появление множества официальных и неофициальных серверов MCP для различных приложений и сервисов.<\/p>\n<p>00:51:50 Философия Data Hub<\/p>\n<p>• Спецификация MCP вписывается в философию Data Hub, подчеркивающую важность стандартов и переносимости.<br \/>\n• Внедряются стандарты Open Lineage, Iceberg REST Catalog и MCP Model для более эффективного взаимодействия с метаданными.<\/p>\n<p>00:53:02 Рекомендации и советы<\/p>\n<p>• Видео на YouTube и ресурсы на GitHub подробно рассказывают о стандарте MCP.<br \/>\n• Профессиональный совет: делайте сеансы короткими, обобщайте данные и записывайте их в текст для предотвращения разрыва контекстного окна.<\/p>\n<p>00:53:57 Заключение<\/p>\n<p>• Агенты искусственного интеллекта и центр обработки данных помогают в обнаружении данных.<br \/>\n• Проект codename goose и его интеграция с Data Hub являются важными шагами в развитии ИИ.<\/p>\n<p>00:54:38 Введение и прогресс проекта<\/p>\n<p>• Проект быстро развивается, появляются интересные функции.<br \/>\n• Все продемонстрированные элементы, кроме Slack, имеют открытый исходный код.<br \/>\n• Пользовательский интерфейс улучшается, версии 1 и 2 уже доступны.<\/p>\n<p>00:55:50 Проблемы и решения центра обработки данных<\/p>\n<p>• Центр обработки данных решает сложные проблемы в цепочке поставок данных.<br \/>\n• Включает производственные системы, системы преобразования данных и системы искусственного интеллекта.<br \/>\n• Цель – связать всю цепочку поставок данных и обеспечить недостающий контекст.<\/p>\n<p>00:56:32 Важность контекста для различных ролей<\/p>\n<p>• Потребители данных ищут доверие и доступность данных.<br \/>\n• Специалисты по обработке данных беспокоятся о своевременности и изменениях.<br \/>\n• Руководители команд следят за доступом и использованием данных.<\/p>\n<p>00:57:25 Управление искусственным интеллектом<\/p>\n<p>• Важно отслеживать данные, используемые моделями искусственного интеллекта.<br \/>\n• Управление искусственным интеллектом должно быть машинно-ориентированным.<br \/>\n• Понимание доступа моделей к персональным данным и автономных агентов.<\/p>\n<p>00:59:16 Переход к машинно-ориентированному управлению<\/p>\n<p>• Агенты будут действовать автономно, преобразовывать и создавать данные.<br \/>\n• Важно отслеживать действия агентов и гарантировать их правильность.<br \/>\n• Центр обработки данных помогает создавать контекст для машин и агентов.<\/p>\n<p>01:00:53 Заключение и благодарности<\/p>\n<p>• Благодарность участникам за участие и вопросы.<br \/>\n• Обещание предоставить запись и более подробную информацию.<br \/>\n• Призыв обращаться через Slack для дальнейших вопросов и обсуждений.<\/p>\n",
            "date_published": "2025-03-30T21:05:32+03:00",
            "date_modified": "2025-03-30T21:05:18+03:00",
            "tags": [
                "Data Governance",
                "Open Source"
            ],
            "_date_published_rfc2822": "Sun, 30 Mar 2025 21:05:32 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "216",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "215",
            "url": "https:\/\/gavrilov.info\/all\/nastroyka-ldap-v-querybook\/",
            "title": "Настройка ldap в Querybook",
            "content_html": "<p>Казалось не очевидная задача, но победа случилась на второй день.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-03-27-v-23.39.30.png\" width=\"1384\" height=\"308\" alt=\"\" \/>\n<\/div>\n<pre class=\"e2-text-code\"><code class=\"\">querybook_web            | 127.0.0.1 - - [2025-03-27 20:36:47] &quot;GET \/ds\/user\/me\/ HTTP\/1.1&quot; 401 285 0.000000\nquerybook_web            | 127.0.0.1 - - [2025-03-27 20:36:47] &quot;GET \/ds\/user\/login_method\/ HTTP\/1.1&quot; 200 273 0.000000\nquerybook_web            | [2025-03-27 Thu 20:36:56] - \/opt\/querybook\/querybook\/server\/app\/auth\/ldap_auth.py - DEBUG   &quot;LDAP bind TRY with username: 'uid=jduke,ou=Users,dc=ldap,dc=example'&quot;\nquerybook_web            | [2025-03-27 Thu 20:36:56] - \/opt\/querybook\/querybook\/server\/app\/auth\/ldap_auth.py - DEBUG   &quot;LDAP bind SUCCESS with username: 'uid=jduke,ou=Users,dc=ldap,dc=example'&quot;\nquerybook_worker         | [2025-03-27 20:36:56,786: INFO\/MainProcess] Task celery.local.sync_elasticsearch__debouncer[f407a87d-ae47-450b-95b1-c44df07eb1e7] received\nquerybook_worker         | [2025-03-27 20:36:56,787: DEBUG\/MainProcess] TaskPool: Apply &lt;function fast_trace_task at 0x7fb3791b0d30&gt; (args:('celery.local.sync_elasticsearch__debouncer', 'f407a87d-ae47-450b-95b1-c44df07eb1e7', {'lang': 'py', 'task': 'celery.local.sync_elasticsearch__debouncer', 'id': 'f407a87d-ae47-450b-95b1-c44df07eb1e7', 'shadow': None, 'eta': None, 'expires': None, 'group': None, 'group_index': None, 'retries': 0, 'timelimit': [None, None], 'root_id': 'f407a87d-ae47-450b-95b1-c44df07eb1e7', 'parent_id': None, 'argsrepr': &quot;['users', 1]&quot;, 'kwargsrepr': '{}', 'origin': 'gen100@6ede59afb0cf', 'ignore_result': False, 'properties': {'correlation_id': 'f407a87d-ae47-450b-95b1-c44df07eb1e7', 'reply_to': '70ed7e91-4699-31e4-8f50-86d1a850d89a', 'delivery_mode': 2, 'delivery_info': {'exchange': '', 'routing_key': 'celery'}, 'priority': 0, 'body_encoding': 'base64', 'delivery_tag': '2d6aecef-9aea-4564-9bd0-994731c8eba5'}, 'reply_to': '70ed7e91-4699-31e4-8f50-86d1a850d89a', 'correlation_id': 'f407a87d-ae47-450b-95b1-c44df07eb1e7', 'hostname': 'celery@05a545667216', 'delivery_info': {'exchange': '', 'routing_key': 'celery', 'priority': 0,... kwargs:{})\nquerybook_web            | 127.0.0.1 - - [2025-03-27 20:36:56] &quot;POST \/ds\/login\/ HTTP\/1.1&quot; 200 655 0.282608\nquerybook_web            | 127.0.0.1 - - [2025-03-27 20:36:56] &quot;GET \/ds\/user\/me\/ HTTP\/1.1&quot; 200 490 0.011824\nquerybook_web            | 127.0.0.1 - - [2025-03-27 20:36:56] &quot;GET \/ds\/user\/setting\/ HTTP\/1.1&quot; 200 215 0.020317\nquerybook_web            | 127.0.0.1 - - [2025-03-27 20:36:56] &quot;GET \/ds\/announcement\/ HTTP\/1.1&quot; 200 215 0.011983\nquerybook_web            | 127.0.0.1 - - [2025-03-27 20:36:57] &quot;GET \/ds\/query\/transpile\/ HTTP\/1.1&quot; 200 419 0.017954\nquerybook_web            | 127.0.0.1 - - [2025-03-27 20:36:57] &quot;GET \/ds\/user\/notifiers\/ HTTP\/1.1&quot; 200 348 0.018368\nquerybook_web            | 127.0.0.1 - - [2025-03-27 20:36:57] &quot;GET \/ds\/query_execution_exporter\/ HTTP\/1.1&quot; 200 215 0.023621\nquerybook_web            | 127.0.0.1 - - [2025-03-27 20:37:02] &quot;GET \/ds\/user\/environment\/ HTTP\/1.1&quot; 200 233 5.029392\nquerybook_web            | 127.0.0.1 - - [2025-03-27 20:37:05] &quot;GET \/static\/favicon\/querybook.svg HTTP\/1.1&quot; 200 5544 0.017975\nquerybook_web            | 127.0.0.1 - - [2025-03-27 20:37:05] &quot;GET \/ds\/admin\/query_metastore\/ HTTP\/1.1&quot; 200 215 0.010979\nquerybook_web            | 127.0.0.1 - - [2025-03-27 20:37:05] &quot;GET \/ds\/admin\/environment\/ HTTP\/1.1&quot; 200 215 0.029958\nquerybook_web            | 127.0.0.1 - - [2025-03-27 20:37:05] &quot;GET \/ds\/admin\/query_engine\/ HTTP\/1.1&quot; 200 215 0.017463\nquerybook_worker         | [2025-03-27 20:37:06,821: INFO\/MainProcess] Task celery.local.sync_elasticsearch[185cb78a-0b66-47de-a3db-71e6bea1e53c] received\nquerybook_worker         | [2025-03-27 20:37:06,821: DEBUG\/MainProcess] basic.qos: prefetch_count-&gt;6\nquerybook_worker         | [2025-03-27 20:37:06,823: INFO\/ForkPoolWorker-3] Task celery.local.sync_elasticsearch__debouncer[f407a87d-ae47-450b-95b1-c44df07eb1e7] succeeded in 5.021026143018389s: None\nquerybook_elasticsearch  | [2025-03-27T20:37:19,071][INFO ][o.o.i.i.ManagedIndexCoordinator] [d8d3bb7a5243] Cancel background move metadata process.\nquerybook_elasticsearch  | [2025-03-27T20:37:19,073][INFO ][o.o.i.i.ManagedIndexCoordinator] [d8d3bb7a5243] Performing move cluster state metadata.\nquerybook_elasticsearch  | [2025-03-27T20:37:19,074][INFO ][o.o.i.i.MetadataService  ] [d8d3bb7a5243] Move metadata has finished.<\/code><\/pre><p>Мистер Дюк теперь может заходить в Querybook<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-03-27-v-23.40.48.png.jpg\" width=\"2560\" height=\"619\" alt=\"\" \/>\n<\/div>\n<p>Тот кто первый входит будет являться админом<\/p>\n<p>Далее сделал конвектор к Trino и один eviroment, и добавил конектор в него и юзера<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-03-27-v-23.45.19.png\" width=\"1322\" height=\"1470\" alt=\"\" \/>\n<\/div>\n<p>Можно писать запросики<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-03-27-v-23.47.03.png\" width=\"1744\" height=\"522\" alt=\"\" \/>\n<\/div>\n<p>Красивый прогресс<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-03-27-v-23.47.44.png\" width=\"2260\" height=\"498\" alt=\"\" \/>\n<\/div>\n<p>Тоже красиво<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-03-27-v-23.51.53.png\" width=\"1218\" height=\"1522\" alt=\"\" \/>\n<\/div>\n<p>Работает и даже на русском.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-03-27-v-23.54.19.png\" width=\"640\" height=\"1064\" alt=\"\" \/>\n<\/div>\n<p>PS: Откуда взялся Ldap?<\/p>\n<p>Вот этот под руку попался <a href=\"https:\/\/github.com\/intoolswetrust\/ldap-server\">https:\/\/github.com\/intoolswetrust\/ldap-server<\/a><\/p>\n<p>Он на базе Apache Directory <a href=\"https:\/\/directory.apache.org\/apacheds\/downloads.html\">https:\/\/directory.apache.org\/apacheds\/downloads.html<\/a><br \/>\nСделан как раз для тестов, то что нужно.<\/p>\n<p>Вот так делаем:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">docker pull kwart\/ldap-server\ndocker run -it --rm kwart\/ldap-server<\/code><\/pre><p>Потом так:<\/p>\n<p>..\/containers\/bundled_querybook_config.yaml<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">AUTH_BACKEND: 'app.auth.ldap_auth' # Same as import path when running Python\nLDAP_CONN: 'ldap:\/\/192.168.215.2:389'\nLDAP_USER_DN: 'uid={},ou=Users,dc=ldap,dc=example'<\/code><\/pre><p>И так<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">LDAP_CONN: &quot;ldap:\/\/192.168.215.2:389&quot;   #  без сертификатов, и так сойдет,  но они нужны и корневые особенно для ldaps. \nLDAP_USER_DN: &quot;uid={},ou=Users,dc=ldap,dc=example&quot;\nLDAP_UID_FIELD: &quot;uid&quot;\nLDAP_EMAIL_FIELD: &quot;uid&quot;  # У меня нет почты в ldap поэтому схитрил, но надо бы добавить атрибут mail в схему LDAP\nLDAP_LASTNAME_FIELD: &quot;sn&quot;\nLDAP_FIRSTNAME_FIELD: &quot;cn&quot;  # Используйте cn, если givenName отсутствует\nLDAP_FULLNAME_FIELD: &quot;cn&quot;\nLDAP_BIND_DN: &quot;uid=admin,ou=system&quot;\nLDAP_BIND_PASSWORD: &quot;secret&quot;\nLDAP_SEARCH_BASE: &quot;dc=ldap,dc=example&quot;<\/code><\/pre><p>Теперь осталось придумать как всунуть туда hive matastore – это будет чуть сложнее, чем казалось.<br \/>\nОдин всунуть можно, но одного мало, а много лень. Может сделать еще один как все и уже его одного добавлять? пока не знаю 🧐<\/p>\n",
            "date_published": "2025-03-28T00:09:54+03:00",
            "date_modified": "2025-03-28T00:13:04+03:00",
            "tags": [
                "big data",
                "Data",
                "Open Source",
                "SQL"
            ],
            "image": "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-03-27-v-23.39.30.png",
            "_date_published_rfc2822": "Fri, 28 Mar 2025 00:09:54 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "215",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-03-27-v-23.39.30.png",
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-03-27-v-23.40.48.png.jpg",
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-03-27-v-23.45.19.png",
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-03-27-v-23.47.03.png",
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-03-27-v-23.47.44.png",
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-03-27-v-23.51.53.png",
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-03-27-v-23.54.19.png"
                ]
            }
        },
        {
            "id": "203",
            "url": "https:\/\/gavrilov.info\/all\/trebovaniya-k-apparatnomu-obespecheniyu-dlya-deepseek-r1-70b\/",
            "title": "Требования к аппаратному обеспечению для DeepSeek-R1 70B",
            "content_html": "<p>Для желающих поиграть с deepseek<\/p>\n<p>Жирная конечно моделька. Оригинал тут: <a href=\"https:\/\/dev.to\/askyt\/deepseek-r1-70b-hardware-requirements-1kd0\">https:\/\/dev.to\/askyt\/deepseek-r1-70b-hardware-requirements-1kd0<\/a><\/p>\n<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\" class=\"e2-text-table\">\n<tr>\n<td style=\"text-align: left\">Компонент<\/td>\n<td>Требование<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left\">GPU<\/td>\n<td>Система с несколькими GPU, где каждая GPU имеет не менее 32 ГБ видеопамяти (VRAM) (например, NVIDIA A100 80GB x16)<\/td>\n<\/tr>\n<tr>\n<td>ОЗУ<\/td>\n<td>Минимум 64 ГБ системной памяти<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left\">ЦП<\/td>\n<td>Высокопроизводительный многоядерный процессор (например, AMD EPYC или Intel Xeon)<\/td>\n<\/tr>\n<\/table>\n<p><b>Как установить DeepSeek-R1 70B локально на Windows<\/b><\/p>\n<p><b>0. Берем две ипотеки, страхуем жизни, умираем, родственник получает страховку, покупает 16 карт a100 и следует инструкции далее:<\/b><\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-03-13-v-20.16.38.png\" width=\"1178\" height=\"1096\" alt=\"\" \/>\n<\/div>\n<p><b>1. Установка Подсистемы Windows для Linux (WSL):<\/b><\/p>\n<ul>\n<li>Убедитесь, что WSL включена в вашей системе Windows.<\/li>\n<li>Установите дистрибутив Linux из Microsoft Store (например, Ubuntu).<\/li>\n<\/ul>\n<p><b>2. Настройка окружения:<\/b><\/p>\n<ul>\n<li>Откройте терминал WSL.<\/li>\n<li>Обновите списки пакетов:<\/li>\n<\/ul>\n<pre class=\"e2-text-code\"><code class=\"\">sudo apt-get update<\/code><\/pre><ul>\n<li>Установите необходимые зависимости:<\/li>\n<\/ul>\n<pre class=\"e2-text-code\"><code class=\"\">sudo apt-get install -y git-lfs python3-pip<\/code><\/pre><p><b>3. Клонирование репозитория DeepSeek-R1:<\/b><\/p>\n<ul>\n<li>Установите Git Large File Storage (Git LFS):<\/li>\n<\/ul>\n<pre class=\"e2-text-code\"><code class=\"\">git lfs install<\/code><\/pre><ul>\n<li>Клонируйте репозиторий:<\/li>\n<\/ul>\n<pre class=\"e2-text-code\"><code class=\"\">git clone https:\/\/huggingface.co\/deepseek-ai\/DeepSeek-R1\n    cd DeepSeek-R1<\/code><\/pre><p><b>4. Настройка виртуального окружения Python:<\/b><\/p>\n<ul>\n<li>Установите virtualenv:<\/li>\n<\/ul>\n<pre class=\"e2-text-code\"><code class=\"\">pip3 install virtualenv<\/code><\/pre><ul>\n<li>Создайте и активируйте виртуальное окружение:<\/li>\n<\/ul>\n<pre class=\"e2-text-code\"><code class=\"\">virtualenv venv\n    source venv\/bin\/activate<\/code><\/pre><p><b>5. Установка зависимостей Python:<\/b><\/p>\n<ul>\n<li>Внутри виртуального окружения установите необходимые пакеты:<\/li>\n<\/ul>\n<pre class=\"e2-text-code\"><code class=\"\">pip install -r requirements.txt<\/code><\/pre><p><b>6. Настройка поддержки GPU:<\/b><\/p>\n<ul>\n<li>Убедитесь, что драйверы вашей GPU обновлены в Windows.<\/li>\n<li>Установите CUDA и cuDNN, совместимые с вашей GPU.<\/li>\n<li>Убедитесь, что GPU доступна в WSL.<\/li>\n<\/ul>\n<p><b>7. Запуск модели:<\/b><\/p>\n<ul>\n<li>Выполните скрипт вывода модели:<\/li>\n<\/ul>\n<pre class=\"e2-text-code\"><code class=\"\">python run_inference.py --model_path .\/DeepSeek-R1<\/code><\/pre><p>Оригинал: <a href=\"https:\/\/apxml.com\/posts\/gpu-requirements-deepseek-r1\">https:\/\/apxml.com\/posts\/gpu-requirements-deepseek-r1<\/a><\/p>\n<p>DeepSeek-R1 и связанные с ним модели представляют собой новый эталон в машинном мышлении и производительности искусственного интеллекта в больших масштабах. Эти модели, особенно DeepSeek-R1-Zero и DeepSeek-R1, установили новые стандарты в рассуждениях и решении задач. Благодаря открытому доступу к этим передовым инструментам разработчики и исследователи могут использовать их мощь, только если их оборудование соответствует требованиям.<\/p>\n<p>Это руководство предоставляет подробный анализ GPU-ресурсов, необходимых для эффективной работы DeepSeek-R1 и его различных вариаций.<\/p>\n<p><b>Обзор DeepSeek-R1<\/b><\/p>\n<p>DeepSeek-R1-Zero был обучен с использованием масштабного обучения с подкреплением (RL) без контролируемой тонкой настройки, демонстрируя исключительную производительность в рассуждениях. Будучи мощным, он сталкивался с проблемами, такими как повторы и читаемость. DeepSeek-R1 решил эти проблемы, включив данные “холодного старта” перед RL, улучшив производительность в задачах математики, кодирования и рассуждений.<\/p>\n<p>И DeepSeek-R1-Zero, и DeepSeek-R1 демонстрируют передовые возможности, но требуют значительного аппаратного обеспечения. Квантование и распределенные GPU-конфигурации позволяют им обрабатывать огромное количество параметров.<\/p>\n<p><b>Требования к VRAM для DeepSeek-R1<\/b><\/p>\n<p>Размер модели, количество ее параметров и методы квантования напрямую влияют на требования к VRAM. Вот подробная разбивка потребностей в VRAM для DeepSeek-R1 и его дистиллированных моделей, а также рекомендуемые GPU:<\/p>\n<p><b>Полная модель<\/b><\/p>\n<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\" class=\"e2-text-table\">\n<tr>\n<td style=\"text-align: left\">Модель<\/td>\n<td style=\"text-align: left\">Параметры (B)<\/td>\n<td style=\"text-align: left\">Требования к VRAM (ГБ)<\/td>\n<td>Рекомендуемый GPU<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left\">DeepSeek-R1-Zero<\/td>\n<td style=\"text-align: left\">671B<\/td>\n<td style=\"text-align: left\">~1,543 ГБ<\/td>\n<td>Система с несколькими GPU (например, NVIDIA A100 80GB x16)<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left\">DeepSeek-R1<\/td>\n<td style=\"text-align: left\">671B<\/td>\n<td style=\"text-align: left\">~1,543 ГБ<\/td>\n<td>Система с несколькими GPU (например, NVIDIA A100 80GB x16)<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left\">DeepSeek-R1-Distill-Qwen-1.5B<\/td>\n<td style=\"text-align: left\">1.5B<\/td>\n<td style=\"text-align: left\">~3.9 ГБ<\/td>\n<td>NVIDIA RTX 3060 12GB или выше<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left\">DeepSeek-R1-Distill-Qwen-7B<\/td>\n<td style=\"text-align: left\">7B<\/td>\n<td style=\"text-align: left\">~18 ГБ<\/td>\n<td>NVIDIA RTX 4090 24GB или выше<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left\">DeepSeek-R1-Distill-Llama-8B<\/td>\n<td style=\"text-align: left\">8B<\/td>\n<td style=\"text-align: left\">~21 ГБ<\/td>\n<td>NVIDIA RTX 4090 24GB или выше<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left\">DeepSeek-R1-Distill-Qwen-14B<\/td>\n<td style=\"text-align: left\">14B<\/td>\n<td style=\"text-align: left\">~36 ГБ<\/td>\n<td>Система с несколькими GPU (например, NVIDIA RTX 4090 x2)<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left\">DeepSeek-R1-Distill-Qwen-32B<\/td>\n<td style=\"text-align: left\">32B<\/td>\n<td style=\"text-align: left\">~82 ГБ<\/td>\n<td>Система с несколькими GPU (например, NVIDIA RTX 4090 x4)<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left\">DeepSeek-R1-Distill-Llama-70B<\/td>\n<td style=\"text-align: left\">70B<\/td>\n<td style=\"text-align: left\">~181 ГБ<\/td>\n<td>Система с несколькими GPU (например, NVIDIA A100 80GB x3)<\/td>\n<\/tr>\n<\/table>\n<p><b>Квантованные модели<\/b><\/p>\n<p>Ниже приведена разбивка требований к VRAM для 4-битного квантования моделей DeepSeek-R1:<\/p>\n<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\" class=\"e2-text-table\">\n<tr>\n<td style=\"text-align: left\">Модель<\/td>\n<td style=\"text-align: left\">Параметры (B)<\/td>\n<td style=\"text-align: left\">Требования к VRAM (ГБ) (4-бит)<\/td>\n<td style=\"text-align: right\">Рекомендуемый GPU<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left\">DeepSeek-R1-Zero<\/td>\n<td style=\"text-align: left\">671B<\/td>\n<td style=\"text-align: left\">~436 ГБ<\/td>\n<td>Система с несколькими GPU (например, NVIDIA A100 80GB x6)<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left\">DeepSeek-R1<\/td>\n<td style=\"text-align: center\">671B<\/td>\n<td style=\"text-align: left\">~436 ГБ<\/td>\n<td>Система с несколькими GPU (например, NVIDIA A100 80GB x6)<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left\">DeepSeek-R1-Distill-Qwen-1.5B<\/td>\n<td style=\"text-align: left\">1.5B<\/td>\n<td style=\"text-align: center\">~1 ГБ<\/td>\n<td>NVIDIA RTX 3050 8GB или выше<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left\">DeepSeek-R1-Distill-Qwen-7B<\/td>\n<td style=\"text-align: left\">7B<\/td>\n<td style=\"text-align: left\">~4.5 ГБ<\/td>\n<td>NVIDIA RTX 3060 12GB или выше<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left\">DeepSeek-R1-Distill-Llama-8B<\/td>\n<td style=\"text-align: left\">8B<\/td>\n<td style=\"text-align: left\">~5 ГБ<\/td>\n<td>NVIDIA RTX 3060 12GB или выше<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left\">DeepSeek-R1-Distill-Qwen-14B<\/td>\n<td style=\"text-align: left\">14B<\/td>\n<td style=\"text-align: left\">~9 ГБ<\/td>\n<td>NVIDIA RTX 4080 16GB или выше<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left\">DeepSeek-R1-Distill-Qwen-32B<\/td>\n<td style=\"text-align: left\">32B<\/td>\n<td style=\"text-align: left\">~21 ГБ<\/td>\n<td>NVIDIA RTX 4090 24GB или выше<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left\">DeepSeek-R1-Distill-Llama-70B<\/td>\n<td style=\"text-align: left\">70B<\/td>\n<td style=\"text-align: left\">~46 ГБ<\/td>\n<td>Система с несколькими GPU (например, NVIDIA RTX 4090 24GB x2)<\/td>\n<\/tr>\n<\/table>\n<p><b>Примечания по использованию VRAM<\/b><\/p>\n<ul>\n<li>Для больших моделей требуется распределенная GPU-конфигурация:** DeepSeek-R1-Zero и DeepSeek-R1 требуют значительного объема VRAM, что делает обязательным использование распределенных GPU-конфигураций (например, NVIDIA A100 или H100 в конфигурациях с несколькими GPU) для эффективной работы.<\/li>\n<li>GPU с более низкими спецификациями:** Модели все еще могут работать на GPU с более низкими спецификациями, чем указано выше, при условии, что GPU соответствует или превышает требования к VRAM. Однако такая конфигурация не будет оптимальной и, вероятно, потребует некоторой настройки, такой как регулировка размеров пакетов и настроек обработки.<\/li>\n<\/ul>\n<p><b>Когда выбирать дистиллированные модели<\/b><\/p>\n<p>Для разработчиков и исследователей, не имеющих доступа к высокопроизводительным GPU, отличной альтернативой являются дистиллированные модели DeepSeek-R1-Distill. Эти дистиллированные версии DeepSeek-R1 разработаны для сохранения значительных возможностей рассуждения и решения задач, при этом уменьшая размеры параметров и вычислительные требования.<\/p>\n<p><b>Преимущества дистиллированных моделей<\/b><\/p>\n<ul>\n<li>Сниженные аппаратные требования:** Благодаря требованиям к VRAM, начиная с 3.5 ГБ, дистиллированные модели, такие как DeepSeek-R1-Distill-Qwen-1.5B, могут работать на более доступных GPU.<\/li>\n<li>Эффективные, но мощные:** Дистиллированные модели сохраняют надежные возможности рассуждения, несмотря на меньший размер, часто превосходя модели аналогичного размера из других архитектур.<\/li>\n<li>Экономичное развертывание:** Дистиллированные модели позволяют экспериментировать и развертывать на менее мощном оборудовании, экономя затраты на дорогие много-GPU системы.<\/li>\n<\/ul>\n<p><b>Рекомендации<\/b><\/p>\n<ul>\n<li>Для High-End GPU:**  <br \/>\nЕсли у вас есть доступ к распределенным много-GPU конфигурациям со значительным объемом VRAM (например, NVIDIA A100 80GB x16), вы можете запускать полномасштабные модели DeepSeek-R1 для достижения наивысшей производительности.<\/li>\n<\/ul>\n<ul>\n<li>Для смешанных рабочих нагрузок:**  <br \/>\nРассмотрите возможность использования дистиллированных моделей для начальных экспериментов и приложений меньшего масштаба, оставляя полномасштабные модели DeepSeek-R1 для производственных задач или когда критична высокая точность.<\/li>\n<\/ul>\n<ul>\n<li>Для ограниченных ресурсов:**  <br \/>\nИспользуйте дистиллированные модели, такие как 14B или 32B (4-битные). Эти модели оптимизированы для конфигураций с одним GPU и могут обеспечить приличную производительность по сравнению с полной моделью при гораздо меньших требованиях к ресурсам.<\/li>\n<\/ul>\n<ul>\n<li>Для очень ограниченных ресурсов:**  <br \/>\nИспользуйте 7B, если они хорошо справляются с вашей задачей. Они могут работать быстро, но их ответы часто оказываются некачественными или неверными. Однако это может зависеть от вашего сценария использования, поскольку они могут хорошо работать для конкретных задач классификации.<\/li>\n<\/ul>\n<p><b>Заключение<\/b><\/p>\n<p>DeepSeek-R1 представляет собой значительный скачок вперед в производительности моделей ИИ, предназначенных для рассуждений, но эта мощь предъявляет и высокие требования к аппаратным ресурсам. Распределенные GPU-системы необходимы для запуска таких моделей, как DeepSeek-R1-Zero, в то время как дистиллированные модели предлагают доступную и эффективную альтернативу для тех, у кого ограничены вычислительные ресурсы.<\/p>\n<p>Понимая и согласуя свою GPU-конфигурацию с требованиями модели, вы сможете полностью использовать потенциал DeepSeek-R1 для исследований, продвинутых рассуждений или задач решения проблем.<\/p>\n<p>Эхх 😩<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-03-14-v-19.57.08.png\" width=\"1442\" height=\"1922\" alt=\"\" \/>\n<\/div>\n<p>и зерно<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-03-13-v-20.46.35.png\" width=\"876\" height=\"822\" alt=\"\" \/>\n<\/div>\n<p>но<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-03-13-v-20.55.48.png\" width=\"470\" height=\"98\" alt=\"\" \/>\n<\/div>\n",
            "date_published": "2025-03-13T20:15:21+03:00",
            "date_modified": "2025-03-14T19:59:14+03:00",
            "tags": [
                "AI",
                "DeepSeek",
                "Open Source"
            ],
            "image": "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-03-13-v-20.16.38.png",
            "_date_published_rfc2822": "Thu, 13 Mar 2025 20:15:21 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "203",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-03-13-v-20.16.38.png",
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-03-14-v-19.57.08.png",
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-03-13-v-20.46.35.png",
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-03-13-v-20.55.48.png"
                ]
            }
        },
        {
            "id": "196",
            "url": "https:\/\/gavrilov.info\/all\/openeuler-eto-ne-prosto-os-eto-platforma-dlya-sozdaniya-razlichn\/",
            "title": "openEuler — это не просто ОС, это платформа для создания различных ОС",
            "content_html": "<p>Перевод:  <a href=\"https:\/\/news.itsfoss.com\/keith-chan-openeuler-summit\/\">https:\/\/news.itsfoss.com\/keith-chan-openeuler-summit\/<\/a><\/p>\n<p>openEuler — это не просто ОС, это платформа для создания различных ОС<br \/>\nДиректор CNCF в Китае, Кит Чан, делится своим мнением о росте openEuler в области Cloud Native.<br \/>\nАбхишек<\/p>\n<p>Подробнее тут: <a href=\"https:\/\/www.openeuler.org\/en\/\">https:\/\/www.openeuler.org\/en\/<\/a><br \/>\nеще больше тут: <a href=\"https:\/\/www.openeuler.org\/whitepaper\/en\/openEuler%20OS%20Technical%20Whitepaper_Innovation%20Projects_EN.pdf\">https:\/\/www.openeuler.org\/whitepaper\/en\/openEuler%20OS%20Technical%20Whitepaper_Innovation%20Projects_EN.pdf<\/a><\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-147.png\" width=\"1662\" height=\"996\" alt=\"\" \/>\n<\/div>\n<p>Поскольку It’s FOSS внимательно следил за недавно завершившимся саммитом openEuler, мы представляем несколько бесед, которые проливают свет на openEuler и его вклад в open source.<\/p>\n<p>Это третье из четырех интервью, подготовленных при поддержке openEuler. Четвертое интервью только в видео формате.<\/p>\n<p>Кит Чан — директор по стратегическому планированию Linux Foundation APAC, директор CNCF в Китае и директор Hyperledger в Китае. Он делится своим мнением на недавно завершившемся саммите openEuler 2024.<\/p>\n<p>В: В чем уникальная ценность openEuler в Cloud Native?<\/p>\n<p>Прежде всего, поздравляю openEuler с тем, что экосистема становится все больше и больше. Мы говорим о Cloud Native уже около трех лет. Сочетание CNCF, Kubernetes и openEuler расширит возможности в различных областях благодаря встроенной поддержке openEuler в Kubernetes. Кроме того, он интегрируется со многими различными сценариями, такими как AI, Edge, Cloud, IoT. Они расширяют целую экосистему для Cloud Native разработчиков, поэтому, представьте, например, в AI, если я Cloud Native разработчик, я фактически развертываю PyTorch в различных сценариях. Встроенная поддержка PyTorch меня очень радует. В противном случае, если бы я настраивал PyTorch или Tensorflow, мне пришлось бы делать это самостоятельно. Поэтому использование openEuler и Kubernetes вместе намного лучше и проще для меня.<\/p>\n<p>Q. openEuler интегрировался с CI\/CD от CNCF, чтобы предложить встроенную верификацию, и уже подключены два проекта. Есть ли дальнейшие планы по этому сотрудничеству?<\/p>\n<p>Это действительно очень интересно, потому что, когда мы говорим о CI\/CD openEuler и проектах CNCF, это действительно хорошо. Это выдающаяся новость для Cloud Native разработчиков, потому что это предоставит им множество различных вариантов ОС. Кроме того, необходимость поддержки openEuler на различных архитектурах упрощает Cloud Native разработчикам использование различных вычислительных ресурсов. Это действительно важно для Cloud Native разработчиков. Это расширяет возможности, потому что сейчас (openEuler) доступен от различных поставщиков облачных услуг, поэтому вам очень легко загрузить эти (архитектурные) версии. Я думаю, что это действительно здорово, и мы очень рады видеть, что это происходит.<\/p>\n<p>Q. По сравнению с прошлым годом, openEuler в этом году выпустила две версии, 24.03 и 24.09. Что вы считаете самым большим достижением и инновацией в openEuler в этом году?<\/p>\n<p>В последней версии много хороших разработок. Например, улучшение производительности, масштабируемости, но самое главное — это AI Native OS. Это то, что ищет рынок, то, что ищет разработчик. Как я уже упоминал выше в примере, если я хочу развернуть PyTorch, потому что сейчас более 80% LLM используют PyTorch, в этом случае встроенная поддержка PyTorch в openEuler делает задачу намного проще. Таким образом, 8 AI Native OS — это действительно здорово, и я думаю, что это поможет многим компаниям, даже в разных отраслях, и облегчит им развертывание AI.<\/p>\n<p>Q. Каков ваш взгляд на перспективы глобального развития openEuler? Каковы его основные конкурентные преимущества и ценность в его глобализации?<\/p>\n<p>Мы много сотрудничаем в различных сценариях. Например, openEuler выступила с основным докладом на Open Source Summit Europe и рассказала об AI Cloud Native OS. Я думаю, что нам следует расширять сотрудничество и говорить о том, как дать возможность Cloud Native разработчикам и разработчикам по всему миру понять, что такое openEuler. Потому что openEuler — это не просто ОС, это платформа ОС для создания различных ОС. Я только что упомянул, что вы можете создать ОС для таких областей, как Cloud, AI, Edge, IoT и т. д. Я думаю, что openEuler готов к сотрудничеству с глобальными разработчиками, чтобы иметь больше участников по всему миру. Мы действительно ожидаем большего сотрудничества с openEuler. Таким образом, openEuler – это новая опция ОС для мира. Очень рад видеть 5-летний юбилей openEuler. Поздравляем!<\/p>\n<p>ПС:<br \/>\nЕго российская локализация: <a href=\"https:\/\/openscaler.ru\">https:\/\/openscaler.ru<\/a><br \/>\nа тут подробно есть: <a href=\"https:\/\/openscaler.ru\/wp-content\/uploads\/2023\/06\/Lichi_A4_44.pdf\">https:\/\/openscaler.ru\/wp-content\/uploads\/2023\/06\/Lichi_A4_44.pdf<\/a><\/p>\n<p>Сбер, Личи-тех и Скала-Р активно участвуют в его развитии в России<\/p>\n<p>А тут можно еще глубже поизучать как в целом жить с open source: <a href=\"https:\/\/stepik.org\/course\/212389\/promo\">https:\/\/stepik.org\/course\/212389\/promo<\/a><\/p>\n",
            "date_published": "2025-02-23T22:53:41+03:00",
            "date_modified": "2025-02-23T22:54:45+03:00",
            "tags": [
                "Linux",
                "Open Source"
            ],
            "image": "https:\/\/gavrilov.info\/pictures\/image-147.png",
            "_date_published_rfc2822": "Sun, 23 Feb 2025 22:53:41 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "196",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/gavrilov.info\/pictures\/image-147.png"
                ]
            }
        },
        {
            "id": "181",
            "url": "https:\/\/gavrilov.info\/all\/kak-apache-dolphinscheduler-reshaet-problemy-obrabotki-dannyh-dl\/",
            "title": "Как Apache DolphinScheduler решает проблемы обработки данных для Bosch Smart Driving",
            "content_html": "<p>Оригинал:  <a href=\"https:\/\/apachedolphinscheduler.substack.com\/p\/how-apache-dolphinscheduler-conquers\">https:\/\/apachedolphinscheduler.substack.com\/p\/how-apache-dolphinscheduler-conquers<\/a><\/p>\n<h3>Введение докладчика<\/h3>\n<p>Тао Чаоцюань, бэкенд-разработчик в Bosch Smart Driving (Китай), отвечает за обработку и планирование данных. Он имеет обширный практический опыт в области обработки данных для умного вождения. В декабре 2024 года на онлайн-встрече сообщества Apache DolphinScheduler он поделился примерами применения Apache DolphinScheduler в обработке данных для умного вождения и планами развития на будущее.<\/p>\n<p>Спасибо за чтение Substack Apache DolphinScheduler! Этот пост публичный, так что не стесняйтесь делиться им.<\/p>\n<h3>Предпосылки бизнеса<\/h3>\n<p>Bosch Smart Driving (Китай) является частью Bosch Group, полное название Robert Bosch GmbH, основанной в 1886 году, с глобальной штаб-квартирой в Германии. В компании работает более 420 000 сотрудников, и она представлена более чем в 50 странах. Ее бизнес охватывает четыре основные области: автомобильные и интеллектуальные транспортные технологии, промышленные технологии, потребительские товары, а также энергетические и строительные технологии.<\/p>\n<p>Сегодняшняя тема будет посвящена технической трансформации и бизнес-применению Bosch в области технологий умного вождения на основе Apache DolphinScheduler.<\/p>\n<p>Развитие технологий умного вождения сильно зависит от данных. Данные являются не только краеугольным камнем обучения моделей, но и ключом к функциональной верификации. Модели умного вождения требуют большого количества высококачественных данных для обучения, чтобы повысить точность восприятия, принятия решений и управления. В то же время, чтобы обеспечить надежность и безопасность системы, функциональная верификация транспортных средств в реальных условиях также требует разнообразных тестовых данных.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-100.png\" width=\"800\" height=\"346\" alt=\"\" \/>\n<\/div>\n<h3>Трансформация доступа<\/h3>\n<p><b>До:<\/b><\/p>\n<p>До использования Apache DolphinScheduler Bosch Smart Driving полагался на Jenkins для реализации оркестрации и планирования рабочих процессов внутри бизнес-кода. Преимуществом этого метода является высокая гибкость, позволяющая определять любую форму оркестрации рабочего процесса. Однако недостаток также очевиден – высокая степень связанности с бизнес-кодом. Любое изменение в рабочем процессе требует модификации бизнес-кода, что увеличивает сложность и риски обслуживания.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-101.png\" width=\"800\" height=\"351\" alt=\"\" \/>\n<\/div>\n<p><b>После:<\/b><\/p>\n<p>После выбора планировщика Bosch Smart Driving решил использовать Apache DolphinScheduler и провел серию преобразований доступа на основе версии 3.2.0 для повышения эффективности и гибкости обработки данных.<\/p>\n<p>Ниже приведены конкретные планы реализации серии преобразований, проведенных Bosch Smart Driving.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-102.png\" width=\"800\" height=\"354\" alt=\"\" \/>\n<\/div>\n<h3>MQ Триггер<\/h3>\n<p>На основе источника данных Bosch Smart Driving увеличил создание источников сообщений и связал источники сообщений с рабочим процессом, добившись автоматического запуска рабочего процесса. Это улучшение позволяет рабочему процессу более гибко реагировать на изменения в источнике данных.<\/p>\n<h3>Улучшение узлов<\/h3>\n<p>Bosch Smart Driving в значительной степени полагается на задачи K8S и динамические задачи для оркестрации и провел некоторые ключевые преобразования на основе DolphinScheduler в этом отношении, включая:<\/p>\n<p>* <b>Основной процесс и подпроцессы:<\/b> Оптимизировано управление основным процессом и подпроцессами.<br \/>\n* <b>Пользовательский плагин:<\/b> Разрешено использование пользовательских плагинов для удовлетворения специфических бизнес-потребностей.<br \/>\n* <b>Изменение правил генерации подпроцессов динамических узлов:<\/b> Скорректированы правила генерации подпроцессов динамических узлов для лучшего контроля вывода параметров.<br \/>\n* <b>Асинхронный триггер и опрос:<\/b> Реализованы механизмы асинхронного запуска и опроса для повышения скорости отклика задач.<br \/>\n* <b>Условный HTTP:<\/b> Введены условные HTTP-запросы для реализации более сложной логики рабочего процесса.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-103.png\" width=\"771\" height=\"831\" alt=\"\" \/>\n<\/div>\n<h3>Динамический приоритет<\/h3>\n<p>Bosch Smart Driving также реализовал функциональность динамического приоритета на основе Apache DolphinScheduler для удовлетворения потребностей различных бизнес-сценариев и обеспечения того, чтобы ключевые задачи могли выполняться с приоритетом.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-104.png\" width=\"800\" height=\"444\" alt=\"\" \/>\n<\/div>\n<h3>Рекомендации<\/h3>\n<p><b>Архитектура развертывания:<\/b><\/p>\n<p>Bosch Smart Driving принял развертывание K8S для достижения изоляции между управляющими кластерами и вычислительными кластерами. Эта стратегия изоляции включает:<\/p>\n<p>* <b>Изоляция пространства имен:<\/b> Благодаря изоляции на уровне пространства имен достигается логическое разделение между различными задачами.<br \/>\n* <b>Изоляция узлов:<\/b> Благодаря изоляции на уровне узлов гарантируется, что вычислительные задачи не приведут к вытеснению управляющих узлов из-за конкуренции за ресурсы или нагрузки.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-105.png\" width=\"800\" height=\"238\" alt=\"\" \/>\n<\/div>\n<p><b>Версия кластера:<\/b><\/p>\n<p>Bosch Smart Driving внедрил TTL Controller, механизм, который контролирует, как долго после завершения задания оно будет удалено. Эта функция официально вступила в силу с версии Kubernetes v1.23. Следует отметить, что использование более старых версий может привести к повышенной нагрузке на кластер Kubernetes и даже вызвать Ds worker OOM (Out of Memory), поэтому следует соблюдать осторожность при его использовании.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-106.png\" width=\"579\" height=\"291\" alt=\"\" \/>\n<\/div>\n<p><b>Настройка задачи K8S:<\/b><\/p>\n<p>В отношении настройки задачи K8S Bosch Smart Driving предлагает следующие рекомендации:<\/p>\n<p>* <b>Передача параметров задачи:<\/b> Избегайте использования большого JSON для передачи параметров и старайтесь использовать файловое взаимодействие, используя адреса файлов в качестве параметров, чтобы уменьшить нагрузку на передачу по сети.<br \/>\n* <b>Квота ресурсов:<\/b> Для долгосрочных задач k8s постарайтесь настроить одинаковый запрос и ограничение, чтобы избежать перепродажи ресурсов, ведущей к OOM.<br \/>\n* <b>Управление вводом\/выводом:<\/b> Для задач с интенсивным вводом\/выводом старайтесь избегать большого количества операций чтения и записи на локальный диск и используйте CFS (Comprehensive File System), чтобы уменьшить влияние на другие задачи на текущем узле.<\/p>\n<p><b>Изоляция задач K8S и динамический приоритет:<\/b><\/p>\n<p>Столкнувшись с проблемой планирования различных типов задач k8s в одном кластере k8s для выполнения, Bosch Smart Driving предлагает следующие решения:<\/p>\n<p>* <b>Поддержка динамического изменения приоритета задач на главном узле:<\/b> Позволяет динамически регулировать приоритет задач для удовлетворения различных бизнес-потребностей.<br \/>\n* <b>Распределение различных типов задач по разным узлам с помощью меток узлов и допусков:<\/b> Таким образом, можно гарантировать, что различные типы задач изолированы с точки зрения использования ресурсов, сохраняя при этом свои соответствующие приоритеты.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-107.png\" width=\"800\" height=\"336\" alt=\"\" \/>\n<\/div>\n<h3>Планы на будущее<\/h3>\n<p>Наконец, Bosch Smart Driving выразил планы по реализации новых функций и дальнейших улучшений в будущем, включая реализацию изоляции ресурсов задач и интеграцию с CICD, чтобы еще больше повысить эффективность и стабильность обработки данных для умного вождения. Эти планы помогут технологическому прогрессу и развитию бизнеса Bosch Smart Driving в области умного вождения.<\/p>\n<h3>Заключение<\/h3>\n<p>Этот доклад не только демонстрирует практическое применение Apache DolphinScheduler в умной обработке данных в Bosch, компании со столетней историей, но также предоставляет ценный практический опыт и направления развития на будущее. Приглашаем вас узнать больше и присоединиться к сообществу Apache DolphinScheduler, чтобы получить больше информации и ресурсов, а также совместно продвигать развитие технологий умного вождения.<\/p>\n<p>От себя добавлю:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Bosch-2024-12-19-v-00.01.33.png\" width=\"458\" height=\"1630\" alt=\"\" \/>\n<\/div>\n<p>При таких показателях и возрасте компании удается быть немногим прибыльной ( не жадной ) имея 400 тысяч сотрудников. Вопрос один: как? Подумайте)<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Bosch-fin-2024-12-19-v-00.09.09.png\" width=\"1496\" height=\"396\" alt=\"\" \/>\n<\/div>\n<p>и вот еще любопытные факты: RISC-V и BCAI<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Bosch-hist-2024-12-19-v-00.48.59.png\" width=\"1306\" height=\"1564\" alt=\"\" \/>\n<\/div>\n<p>Вот например инвестиции в BCAI  были около 300млн. Если посчитать на 1 сотрудника это 750 евро. вы тратили в 2017 году на ИИ 750 евро, а они да)<\/p>\n",
            "date_published": "2024-12-18T23:51:53+03:00",
            "date_modified": "2024-12-19T00:53:50+03:00",
            "tags": [
                "big data",
                "Data",
                "Open Source"
            ],
            "image": "https:\/\/gavrilov.info\/pictures\/image-100.png",
            "_date_published_rfc2822": "Wed, 18 Dec 2024 23:51:53 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "181",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/gavrilov.info\/pictures\/image-100.png",
                    "https:\/\/gavrilov.info\/pictures\/image-101.png",
                    "https:\/\/gavrilov.info\/pictures\/image-102.png",
                    "https:\/\/gavrilov.info\/pictures\/image-103.png",
                    "https:\/\/gavrilov.info\/pictures\/image-104.png",
                    "https:\/\/gavrilov.info\/pictures\/image-105.png",
                    "https:\/\/gavrilov.info\/pictures\/image-106.png",
                    "https:\/\/gavrilov.info\/pictures\/image-107.png",
                    "https:\/\/gavrilov.info\/pictures\/Bosch-2024-12-19-v-00.01.33.png",
                    "https:\/\/gavrilov.info\/pictures\/Bosch-fin-2024-12-19-v-00.09.09.png",
                    "https:\/\/gavrilov.info\/pictures\/Bosch-hist-2024-12-19-v-00.48.59.png"
                ]
            }
        },
        {
            "id": "175",
            "url": "https:\/\/gavrilov.info\/all\/integraciya-dannyh-na-baze-seatunnel-kak-58-com-obrabatyvaet-bol\/",
            "title": "Интеграция данных на базе SeaTunnel: Как 58.com обрабатывает более 500 млрд датасетов ежедневно",
            "content_html": "<p>Перевод: <a href=\"https:\/\/dev.to\/seatunnel\/seatunnel-powered-data-integration-how-58-group-handles-over-500-billion-data-points-daily-3d1m\">https:\/\/dev.to\/seatunnel\/seatunnel-powered-data-integration-how-58-group-handles-over-500-billion-data-points-daily-3d1m<\/a><\/p>\n<h3>Введение<\/h3>\n<p>В эпоху цифровизации данные стали одним из самых ценных активов для бизнеса. Как ведущая платформа услуг повседневной жизни в Китае, 58 Group постоянно исследует и внедряет инновации в построении своей платформы интеграции данных. В этой статье будут подробно рассмотрены эволюция архитектуры, стратегии оптимизации и планы будущего развития платформы интеграции данных 58 Group на основе Apache SeaTunnel.<\/p>\n<h3>Вызовы платформы интеграции данных<\/h3>\n<h4>Бизнес-контекст<\/h4>\n<p>58 Group имеет широкий спектр бизнесов, и с быстрым развитием этих направлений объем данных из различных бизнес-областей, таких как найм, недвижимость, вторичный рынок жилья, вторичный рынок товаров, местные услуги и информационная безопасность, значительно увеличился. 58 Group должна обеспечить свободное перемещение и конвергенцию данных между различными источниками данных для достижения единого управления, циркуляции и обмена данными. Это включает не только сбор, распределение и хранение данных, но и приложения, такие как офлайн-вычисления, синхронизация между кластерами и профилирование пользователей.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/integraciya-dannyh-na-baze-seatunnel-kak-58-com-obrabatyvaet-bol.png\" width=\"800\" height=\"291\" alt=\"\" \/>\n<\/div>\n<p>В настоящее время 58 Group обрабатывает более 500 миллиардов сообщений ежедневно, с пиковым объемом обработки сообщений, превышающим 20 миллионов, и количеством задач, превышающим 1600. Обработка такого огромного объема данных представляет значительные вызовы.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/integraciya-dannyh-na-baze-seatunnel-kak-58-com-obrabatyvaet-bol-1.png\" width=\"800\" height=\"242\" alt=\"\" \/>\n<\/div>\n<h4>Вызовы<\/h4>\n<p>В обеспечении свободного перемещения и конвергенции данных между различными источниками и достижении единого управления, циркуляции и обмена данными 58 Group сталкивается с вызовами, включая:<\/p>\n<ul>\n<li><b>Высокая надежность<\/b>: Обеспечение отсутствия потерь данных при различных условиях сбоя, обеспечение согласованности данных и стабильной работы задач.<\/li>\n<li><b>Высокая пропускная способность<\/b>: Обработка больших потоков данных для достижения высокой параллельности и массового переноса данных.<\/li>\n<li><b>Низкая задержка<\/b>: Соответствие бизнес-потребностям в обработке данных в реальном времени и быстром отклике.<\/li>\n<li><b>Простота обслуживания<\/b>: Упрощение конфигурации и автоматизация мониторинга для снижения нагрузки на обслуживание, упрощения быстрого обнаружения и устранения неисправностей, а также обеспечения долгосрочной доступности системы.<\/li>\n<\/ul>\n<h3>Эволюция архитектуры<\/h3>\n<p>Архитектура платформы интеграции данных 58 Group прошла через несколько этапов эволюции, чтобы адаптироваться к меняющимся бизнес-потребностям и технологическим разработкам.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/integraciya-dannyh-na-baze-seatunnel-kak-58-com-obrabatyvaet-bol-2.png\" width=\"800\" height=\"380\" alt=\"\" \/>\n<\/div>\n<h4>Ранняя архитектура<\/h4>\n<ul>\n<li><b>2017<\/b>: Использовался Flume для интеграции платформы.<\/li>\n<li><b>2018<\/b>: Внедрен Kafka Connect 1.0.<\/li>\n<li><b>2020<\/b>: Использовалась версия Kafka Connect 2.4, достигнута инкрементальная балансировка нагрузки и CDC (Change Data Capture).<\/li>\n<li><b>2023<\/b>: Внедрен Apache SeaTunnel, интегрированный в платформу реального времени вычислений, и расширены различные Source\/Sink.<\/li>\n<\/ul>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/integraciya-dannyh-na-baze-seatunnel-kak-58-com-obrabatyvaet-bol-3.png\" width=\"800\" height=\"336\" alt=\"\" \/>\n<\/div>\n<p>С 2017 по 2018 год платформа интеграции данных 58 Group использовала архитектуру Kafka Connect, основанную на интеграции данных с Kafka, с горизонтальным масштабированием и распределенной обработкой, поддерживающей работу Workers и Tasks на нескольких узлах; Workers автоматически перераспределяют задачи на другие Workers при сбое, обеспечивая высокую доступность; также поддерживается автоматическое управление смещением и управление задачами и конфигурацией через Rest API.<\/p>\n<p>Однако с расширением объема бизнеса и разнообразием сценариев эта архитектура столкнулась с ограничениями:<\/p>\n<h4>Ограничения архитектуры<\/h4>\n<ul>\n<li>Невозможность достижения полной интеграции данных.<\/li>\n<li>Проблемы с Coordinator Bottleneck\n<ul>\n  <li><b>Heartbeat Timeout<\/b>: Тайм-ауты сердцебиения Worker-to-coordinator вызывают перебалансировку задач, вызывая временные прерывания задач.<\/li>\n  <li><b>Heartbeat Pressure<\/b>: Workers синхронизируются с координаторами, отслеживая состояния Workers и управляя большим объемом метаданных задач.<\/li>\n  <li><b>Coordinator Failure<\/b>: Простой координатора влияет на распределение и перераспределение задач, вызывая сбои задач и снижение эффективности обработки.<\/li>\n<\/ul>\n<\/li>\n<li><b>Влияние Task Rebalance<\/b>\n<ul>\n  <li><b>Task Pause and Resume<\/b>: Каждая перебалансировка приостанавливает задачи, затем перераспределяет их, что приводит к кратковременным прерываниям задач.<\/li>\n  <li><b>Rebalance Storms<\/b>: Если несколько узлов Workers часто присоединяются или покидают кластер, или если сетевая дрожь вызывает тайм-ауты сердцебиения, частые Rebalance могут значительно повлиять на эффективность обработки задач, вызывая задержки.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Учитывая эти недостатки, 58 Group в 2023 году внедрила Apache SeaTunnel, интегрировав его в платформу реального времени вычислений для свободного расширения различных Source\/Sink.<\/p>\n<h4>Текущая архитектура<\/h4>\n<p>В настоящее время платформа интеграции данных 58 Group, основанная на движке Apache SeaTunnel, интегрирует источники данных (Kafka, Pulsar, WMB, Hive и т.д.), обрабатывает их через встроенные функции Transform SeaTunnel и отправляет их в целевые базы данных (Hive, HDFS, Kafka, Pulsar, WMB, MySQL, SR, Redis, HBASE, Wtable, MongoDB и т.д.), достигая эффективного управления задачами, управления статусом, мониторинга задач, интеллектуальной диагностики и многого другого.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/integraciya-dannyh-na-baze-seatunnel-kak-58-com-obrabatyvaet-bol-4.png\" width=\"800\" height=\"462\" alt=\"\" \/>\n<\/div>\n<h3>Плавная миграция и настройка производительности<\/h3>\n<h4>Плавная миграция<\/h4>\n<p>При внедрении Apache SeaTunnel 58 Group должна была выполнить плавную миграцию платформы интеграции данных, чтобы минимизировать влияние на пользователей или бизнес и обеспечить согласованность данных, сохраняя согласованность формата, пути и отсутствие потерь данных.<\/p>\n<p>Эта цель представляла вызовы, включая затраты и риски миграции, такие как понимание и подтверждение формата данных каждой задачи, и миграция включала несколько этапов, что было сложно и требовало времени.<\/p>\n<p>Для решения этой проблемы 58 Group предприняла следующие меры:<\/p>\n<ul>\n<li>Для источников добавлен RawDeserializationSchema для совместимости с неструктурированными данными.<\/li>\n<li>Для целей, таких как использование hdfs sink для hive, для совместимости с загрузкой партиций и путями.<\/li>\n<li>Разработка автоматических инструментов миграции:\n<ul>\n  <li>Автоматическое генерирование конфигураций задач, генерирование соответствующих конфигураций задач SeaTunnel на основе конфигураций Kafka Connect.<\/li>\n  <li>Отключение исходных задач, сброс смещений и запуск новых задач.<\/li>\n  <li>Проверка и проверка.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h4>Настройка производительности<\/h4>\n<p>58 Group также провела несколько оптимизаций производительности на платформе интеграции данных, включая:<\/p>\n<ul>\n<li>Добавление Pulsar Sink Connector: Для увеличения пропускной способности.<\/li>\n<li>Поддержка Array Data: Улучшение совместимости HbaseSink.<\/li>\n<li>Поддержка установки времени истечения срока действия: Оптимизация RedisSink.<\/li>\n<li>Увеличение пропускной способности PulsarSource: Оптимизация метода сжатия файловых коннекторов.<\/li>\n<li>Исправление проблем с парсингом KafkaSource: Улучшение гибкости конфигурации клиентов Kafka.<\/li>\n<\/ul>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/integraciya-dannyh-na-baze-seatunnel-kak-58-com-obrabatyvaet-bol-5.png\" width=\"800\" height=\"391\" alt=\"\" \/>\n<\/div>\n<h3>Мониторинг и автоматизация операций<\/h3>\n<p>Кроме того, 58 Group улучшила стабильность и эффективность платформы интеграции данных через мониторинг и автоматизацию операций:<\/p>\n<ul>\n<li><b>Мониторинг задач<\/b>: Реальный мониторинг статуса задач для быстрого обнаружения и устранения сбоев.<\/li>\n<li><b>Автоматизация операций<\/b>: Сокращение ручного вмешательства через автоматизированные инструменты для увеличения операционной эффективности.<\/li>\n<\/ul>\n<h3>Планы будущего развития<\/h3>\n<p>58 Group имеет четкие планы на будущее развития платформы интеграции данных:<\/p>\n<ul>\n<li><b>Постоянное улучшение интеллектуальной диагностики<\/b>: Повышение точности и эффективности диагностики неисправностей через технологии машинного обучения и искусственного интеллекта.<\/li>\n<li><b>Обновление на облачную и контейнеризованную инфраструктуру<\/b>: Перенос платформы интеграции данных в облачную среду и реализация контейнеризованного развертывания для улучшения использования ресурсов и гибкости.<\/li>\n<\/ul>\n<h3>Заключение<\/h3>\n<p>Эволюция и оптимизация архитектуры платформы интеграции данных 58 Group — это непрерывный процесс итерации и инноваций. Через постоянные технологические исследования и практику 58 Group успешно построила эффективную, стабильную и масштабируемую платформу интеграции данных на основе Apache SeaTunnel, обеспечивая сильную поддержку данных для развития бизнеса. В будущем 58 Group продолжит углубляться в область интеграции данных, чтобы предоставлять лучшие услуги для пользователей.<\/p>\n<h3>Для справки<\/h3>\n<h3>Что такое Apache SeaTunnel и для чего он нужен?<\/h3>\n<p><b>Apache SeaTunnel<\/b> — это открытая платформа для интеграции данных, разработанная на основе Apache Spark и Apache Flink. Она предназначена для обеспечения высокопроизводительной, надежной и масштабируемой обработки потоковых и пакетных данных. SeaTunnel предоставляет удобный интерфейс для разработчиков, позволяющий легко интегрировать различные источники данных (такие как Kafka, Pulsar, Hive и другие) и отправлять их в различные хранилища данных (такие как HDFS, Kafka, MySQL, Redis и т.д.).<\/p>\n<p><b>Основные функции и преимущества Apache SeaTunnel:<\/b><\/p>\n<ol start=\"1\">\n<li><b>Высокая производительность<\/b>: SeaTunnel использует мощные движки Apache Spark и Apache Flink для обеспечения высокой скорости обработки данных.<\/li>\n<li><b>Надежность<\/b>: Платформа обеспечивает гарантию доставки данных, чтобы избежать потерь данных при сбоях.<\/li>\n<li><b>Масштабируемость<\/b>: SeaTunnel может легко масштабироваться для обработки больших объемов данных.<\/li>\n<li><b>Гибкость<\/b>: Поддерживает множество источников и приемников данных, что делает его универсальным инструментом для интеграции данных.<\/li>\n<li><b>Простота использования<\/b>: Предоставляет удобный интерфейс для разработчиков, упрощая настройку и управление задачами интеграции данных.<\/li>\n<\/ol>\n<p><b>Для чего нужен Apache SeaTunnel?<\/b><\/p>\n<p>Apache SeaTunnel используется для решения задач интеграции данных в различных сценариях, таких как:<\/p>\n<ul>\n<li><b>Обработка потоковых данных<\/b>: SeaTunnel может использоваться для обработки данных в реальном времени, например, для анализа данных сенсоров, мониторинга активности пользователей и т.д.<\/li>\n<li><b>Интеграция данных из различных источников<\/b>: SeaTunnel позволяет объединять данные из разных источников, таких как базы данных, хранилища объектов, системы логгирования и т.д.<\/li>\n<li><b>Перенос данных<\/b>: SeaTunnel может использоваться для переноса данных между различными хранилищами данных, например, из MySQL в HDFS или из Kafka в Elasticsearch.<\/li>\n<li><b>Агрегация и трансформация данных<\/b>: SeaTunnel предоставляет мощные инструменты для агрегации и трансформации данных, что позволяет создавать сложные аналитические модели.<\/li>\n<\/ul>\n<h3>Что за компания 58 Group в Китае?<\/h3>\n<p><b>58 Group<\/b> — это ведущая китайская платформа услуг повседневной жизни, предоставляющая широкий спектр онлайн-сервисов, включая поиск работы, недвижимость, вторичный рынок товаров, местные услуги и многое другое. Компания была основана в 2005 году и с тех пор стала одним из крупнейших игроков на рынке онлайн-услуг в Китае.<\/p>\n<p><b>Основные направления деятельности 58 Group:<\/b><\/p>\n<ol start=\"1\">\n<li><b>Поиск работы<\/b>: Платформа предоставляет услуги по поиску работы для соискателей и размещению вакансий для работодателей.<\/li>\n<li><b>Недвижимость<\/b>: 58 Group предлагает услуги по аренде и продаже недвижимости, включая жилую и коммерческую недвижимость.<\/li>\n<li><b>Вторичный рынок товаров<\/b>: Платформа позволяет пользователям покупать и продавать б\/у товары, такие как электроника, мебель, одежда и т.д.<\/li>\n<li><b>Местные услуги<\/b>: 58 Group предоставляет широкий спектр местных услуг, включая ремонт, уборку, перевозки и многое другое.<\/li>\n<li><b>Информационная безопасность<\/b>: Компания также занимается обеспечением информационной безопасности для своих пользователей.<\/li>\n<\/ol>\n<p><b>Значение 58 Group в китайской экономике:<\/b><\/p>\n<p>58 Group играет важную роль в китайской экономике, предоставляя удобные и доступные услуги для миллионов пользователей. Благодаря широкому спектру услуг и постоянному внедрению инноваций, 58 Group помогает упростить повседневную жизнь китайцев и стимулировать развитие местного бизнеса.<\/p>\n<p><b>Проще говоря<\/b>: 58 Group — это как китайский аналог Craigslist или Avito, но гораздо большего масштаба, предлагающий множество различных услуг в одном месте.<\/p>\n<p>Презентация старая: <a href=\"http:\/\/filecache.investorroom.com\/mr5ir_58\/144\/download\/58.com%20Presentation-Q2%2719_0919_Management%20update.pdf\">http:\/\/filecache.investorroom.com\/mr5ir_58\/144\/download\/58.com%20Presentation-Q2%2719_0919_Management%20update.pdf<\/a><\/p>\n",
            "date_published": "2024-11-25T00:14:56+03:00",
            "date_modified": "2024-11-25T00:27:25+03:00",
            "tags": [
                "big data",
                "Data",
                "Data Engineer",
                "Open Source"
            ],
            "image": "https:\/\/gavrilov.info\/pictures\/integraciya-dannyh-na-baze-seatunnel-kak-58-com-obrabatyvaet-bol.png",
            "_date_published_rfc2822": "Mon, 25 Nov 2024 00:14:56 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "175",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/gavrilov.info\/pictures\/integraciya-dannyh-na-baze-seatunnel-kak-58-com-obrabatyvaet-bol.png",
                    "https:\/\/gavrilov.info\/pictures\/integraciya-dannyh-na-baze-seatunnel-kak-58-com-obrabatyvaet-bol-1.png",
                    "https:\/\/gavrilov.info\/pictures\/integraciya-dannyh-na-baze-seatunnel-kak-58-com-obrabatyvaet-bol-2.png",
                    "https:\/\/gavrilov.info\/pictures\/integraciya-dannyh-na-baze-seatunnel-kak-58-com-obrabatyvaet-bol-3.png",
                    "https:\/\/gavrilov.info\/pictures\/integraciya-dannyh-na-baze-seatunnel-kak-58-com-obrabatyvaet-bol-4.png",
                    "https:\/\/gavrilov.info\/pictures\/integraciya-dannyh-na-baze-seatunnel-kak-58-com-obrabatyvaet-bol-5.png"
                ]
            }
        },
        {
            "id": "170",
            "url": "https:\/\/gavrilov.info\/all\/alchemesh-konsol-osnovnye-koncepcii\/",
            "title": "Alchemesh консоль: Основные концепции",
            "content_html": "<p>Оригинал: <a href=\"https:\/\/medium.com\/alchemesh\/alchemesh-console-the-core-concepts-160511dee3b0\">https:\/\/medium.com\/alchemesh\/alchemesh-console-the-core-concepts-160511dee3b0<\/a><br \/>\nИли тут: <a href=\"https:\/\/a.gavrilov.info\/data\/posts\/Alchemesh%20console%20The%20core%20concepts%20|%20by%20Alexandre%20Guitton%20|%20Alchemesh%20|%20Medium.pdf\">alchemesh console the core concepts<\/a><\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-90.png\" width=\"232\" height=\"539\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Alchemesh core concepts<\/div>\n<\/div>\n<p>Объявление о запуске нашего фреймворка для поддержки Data Mesh было сделано, и теперь мы можем начать наше новое приключение вместе!<br \/>\nИдея заключается в том, чтобы делиться с вами нашими размышлениями и техническими решениями по мере их разработки.<\/p>\n<p>Цель состоит в том, чтобы через эти статьи поделиться нашей интерпретацией Data Mesh, представить наш подход к разработке, получить обратную связь по нашим выборам и, самое главное, попытаться вместе подумать о вызовах, связанных с реализацией Data Mesh.<br \/>\nКонсоль Alchemesh: Стандартизация интерфейсов для облегчения ассимиляции и понимания<br \/>\nКак мы уже говорили, одна из целей фреймворка, и особенно консоли, — это предоставить поддержку и структуру, чтобы помочь различным стейкхолдерам понять, взаимодействовать и принять Data Mesh.<br \/>\nНаше решение должно быть средством для передачи концепций Data Mesh! Это для нас серьезный вызов, особенно с таким широким подходом, как у Data Mesh.<\/p>\n<p>Множество концепций вступают в игру: data product, data domain, data contract, полисемия, адресация, достоверность, владение, автономия и т.д.<br \/>\nВозникает множество вопросов: какие взаимодействия между различными концепциями? Какой компонент должен нести какую информацию? И так далее.<br \/>\nВ такой ситуации сложно гарантировать, что у всех есть общее минимальное понимание, и минимизировать риск чрезмерной интерпретации или несогласованности среди стейкхолдеров. Кроме того, важно определить четкие и хорошо определенные пространства, чтобы команды могли понять концепции и делать сильные предложения через запросы функций.<br \/>\nДля нас было естественным выбором решить эти вопросы через консоль, стандартизируя определение основных концепций Data Mesh и их взаимодействий, все это переведенное в интерфейс.<br \/>\nAlchemesh: Моделирование основных концепций<br \/>\n⚠️ Версия, которую мы представляем здесь, соответствует тому, что мы определили на этапе проектирования MVP; она, естественно, подлежит изменению по мере разработки и реализации новых функций. ⚠️<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-91.png\" width=\"1400\" height=\"674\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Консоль Alchemesh: Моделирование основных концепций<\/div>\n<\/div>\n<p>Пользователи<br \/>\nПользователи являются центральными игроками, которые будут взаимодействовать в сетке. В нашем фреймворке мы различаем несколько персонажей:<\/p>\n<ul>\n<li>Разработчик data product: Учитывая широкий спектр навыков — от универсальных разработчиков с общими навыками программирования до специализированных инженеров данных.<\/li>\n<li>Потребители data product: Охватывает множество ролей, у которых есть одно общее, они нуждаются в доступе и использовании данных для выполнения своей работы (например, дата-сайентисты, дата-аналитики, разработчики приложений).<\/li>\n<li>Владелец data product: Отвечает за доставку и продвижение успешных data product для своих конкретных доменов.<\/li>\n<li>Разработчик data platform: Отвечает за доставку сервисов платформы как продукта с лучшим пользовательским опытом.<\/li>\n<li>Владелец data platform: Создает и управляет data platform, а также использует ее. Разработчики data platform, которые работают над сервисами плоскости опыта data product.<\/li>\n<\/ul>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-92.png\" width=\"1400\" height=\"993\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Alchemesh: Пользователи<\/div>\n<\/div>\n<p>Data domains<\/p>\n<p>Владение данными домена является основой масштабирования в сложной системе, такой как современные предприятия. Стратегическое проектирование в DDD (Domain Driven Design) принимает моделирование на основе нескольких моделей, каждая из которых контекстуализирована для конкретного домена, называемого<br \/>\nbounded context.<\/p>\n<ul>\n<li>Bounded context — это “ограниченная применимость конкретной модели [которая] дает членам команды четкое и общее понимание того, что должно быть согласовано, а что может развиваться независимо”.<br \/>\nМы поддерживаем 3 типа data domains:<br \/>\nSource aligned domain: Аналитические данные, отражающие бизнес-факты, генерируемые операционными системами, ответственными за предоставление правды своих бизнес-доменов как данных source-aligned domain.<\/li>\n<\/ul>\n<ul>\n<li>Aggragated domain: Аналитические данные, являющиеся агрегатом нескольких upstream domains.<\/li>\n<\/ul>\n<ul>\n<li>Consumer aligned domain: Аналитические данные, трансформированные для удовлетворения потребностей одного или нескольких конкретных use cases. Это также называется fit-for-purpose domain data.<\/li>\n<\/ul>\n<p>Помимо уточнения роли домена в отношении data product, которые он производит, это также позволит федеративному data governance определить вычислительные политики для надлежащего управления сеткой (например, установление правила, что data product из source-aligned domain, не опирающиеся на какую-либо систему источника, теряют ценность) или помочь в определении приоритетов реорганизации доменов.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-93.png\" width=\"1218\" height=\"869\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Вид data domain<\/div>\n<\/div>\n<p>Технические команды<br \/>\nВ зависимости от размера определенных data domains, организация может решить определить несколько кросс-функциональных команд для управления наборами data product. Чтобы удовлетворить эту потребность, мы решили ввести концепцию технической команды, объединяющей людей, вносящих вклад в один и тот же scope в рамках домена.<br \/>\nМы различаем несколько видов команд:<\/p>\n<ul>\n<li>Data product team: Stream aligned team, отвечает за полноценную доставку сервисов (инжекция, потребление, обнаружение и т.д.), требуемых data product.<\/li>\n<li>Platform team: Ее цель — обеспечить возможность stream-aligned доставлять свою работу с существенной автономностью.<\/li>\n<li>Governance group: Enabling team, ее ключевая роль — облегчить принятие решений вокруг глобальных политик. Эти политики затем реализуются вычислительно и принимаются командами data product.<\/li>\n<\/ul>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-94.png\" width=\"1091\" height=\"781\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Технические команды<\/div>\n<\/div>\n<p>Система источника<br \/>\nВ случае source-aligned data domains, операционный и аналитический миры объединены в одном домене, и это отражено в кросс-функциональных командах. Важно, чтобы консоль материализовала эту связь.<br \/>\nНамерение явно не в том, чтобы управлять операционными задачами в рамках платформы data mesh, но важно материализовать эту связь, чтобы преодолеть разрыв между двумя мирами, не ограничиваясь организационно.<\/p>\n<p>Data product<br \/>\nС владельцем домена (поддерживаемым технической командой), данные, ориентированные на домен, делятся как продукт напрямую с пользователями данных.<br \/>\nData as a product вводит новую единицу логической архитектуры, называемую data quantum, контролирующую и инкапсулирующую все структурные компоненты, необходимые для обмена данными как продуктом.<br \/>\nПриняв продуктовый подход, мы будем сообщать о состоянии нашего предложения:<\/p>\n<ul>\n<li>Lifecycle state: На каком этапе жизненного цикла находится data product — находится ли он в разработке, в обнаружении, стабилен или находится в процессе вывода из эксплуатации.<\/li>\n<li>Maturity level: Продукт, считающийся стабильным, но с небольшим историческим использованием, не имеет такого же уровня зрелости, как стабильный data product, который использовался многими потребителями в течение нескольких лет.<\/li>\n<\/ul>\n<p>Входные порты<br \/>\nВ контексте source-aligned data product, данные будут нуждаться в потреблении из операционной системы, чтобы сделать их доступными как входные данные для внутреннего обработчика data product. Эта интеграция будет выполнена через входной порт (платформенный компонент, предназначенный для этой интеграции, предоставленный платформой или реализованный командами домена).<br \/>\nЧтобы дать конкретный пример, предположим, что операционные данные доступны в топике Kafka и должны быть доступны на проекте GCP. Входной порт может включать предоставление бакета GCS и NiFi dataflow, который потребляет данные из топика Kafka.<br \/>\nСемантическая модель<br \/>\nОписываем семантические модели, которые data product будет предлагать.<br \/>\nОпределение модели, читаемое машинами и людьми, которое захватывает модель домена данных: как data product моделирует домен, какие типы сущностей включает данные, свойства сущностей и т.д.<br \/>\nВыходные порты<br \/>\nЭти модели будут представлены как активы через выходной порт. Проще говоря, выходной порт — это пара, состоящая из системы хранения (объектное хранилище, колоночная таблица, топик потоковой передачи и т.д.) и прокси, который позволяет получить доступ через различные протоколы и языки (SQL, REST API, GraphQL и т.д.).<br \/>\nОдно из наших позиций по этому вопросу заключается в том, что выходной порт не обязательно будет представлять все модели, управляемые data product.<br \/>\nКод<br \/>\nЭто основная работа разработчика data product, который часто слишком отдален от данных, которые он производит в устаревших инструментах и архитектурах данных. Data mesh ставит код, который создает ценность data product, в центр, и это естественно то, что мы делаем. Эта логика позволяет начать с входных данных для генерации выходных активов.<br \/>\nВ data product ответственность за правильное определение data product, потребление и представление данных через стандартные порты, а также поддержание связанных метаданных лежит на разработчиках data product.<br \/>\nВ свою очередь, все, что происходит внутри (код), полностью оставлено на усмотрение команды: Dagster Blog job, Airflow DAG, Kestra DAG, простой Python job в Lambda… Выбор и ответственность лежат на владельце (это то, что мы называем автономией).<\/p>\n<p>Инфраструктура<br \/>\nData product может зависеть от инфраструктуры, которая должна быть предоставлена для выполнения его обработки, такой как объектное хранилище, промежуточный набор данных и т.д., которые не связаны с тем, как выполняется код, данные потребляются или данные представляются. Этот интерфейс позволяет указать платформе, что data product нуждается в этом.<br \/>\nМетаданные<\/p>\n<p>Актив<br \/>\nМы считаем активом инстанцирование модели data product через выходной порт.<br \/>\nПосле того как data product развернут и функционирует, код должен поддерживать определенную информацию о состоянии, чтобы информировать своих потребителей о его состоянии:<\/p>\n<ul>\n<li>Общее состояние: операционное, в инциденте, выключено<\/li>\n<li>Состояние активов: их техническое качество данных (точность, полнота, своевременность, достоверность) и их свежесть.<\/li>\n<\/ul>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-95.png\" width=\"1337\" height=\"950\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Data product<\/div>\n<\/div>\n<p>Data contract<br \/>\nУ нас есть data product в нашем data domain, принадлежащий технической команде, с данными, потребляемыми из операционной системы через входной порт и представляющими ценность data product, сгенерированную кодом, через выходные порты. Отлично!<br \/>\nНо прежде чем потреблять этот data product, я, как потребитель, хочу знать, на что я соглашаюсь, и как производитель, кто соглашается потреблять от меня! Вот где вступают в игру data contracts.<br \/>\nВыходной порт<br \/>\nData contract применяется к выходному порту data product, а не ко всему data product. Есть несколько причин для этого:<\/p>\n<ul>\n<li>Ожидания различаются между потоком потоковой передачи и объектом, хранящимся в data lake (в терминах времени отклика, частоты обновления, точности и т.д.).<\/li>\n<li>Не все выходные порты несут одни и те же модели, поэтому обязательство к потреблению не одно и то же.<\/li>\n<\/ul>\n<p>Тип доступа<br \/>\nВ зависимости от природы data product, доступ к нему не будет разрешен одинаково. Мы поддерживаем три типа:<\/p>\n<ul>\n<li>Ограниченный доступ: Это означает, что владелец data product должен рассмотреть и одобрить любые запросы на доступ.<\/li>\n<li>Внутренний доступ: Это означает, что все запросы из одного и того же домена автоматически одобряются; в противном случае они требуют одобрения владельца.<\/li>\n<li>Публичный доступ: Это означает, что все запросы автоматически одобряются без рассмотрения или одобрения владельца.<\/li>\n<\/ul>\n<p>Версионирование и жизненный цикл состояния<br \/>\nКонтракты данных версионируются и имеют состояние жизненного цикла, чтобы информировать о их статусе и предоставлять предупреждения в случае устаревания или изменений.<br \/>\nСоглашения об уровне обслуживания (SLA)<br \/>\nКонтракт данных — это обязательство по предоставлению услуги, а точнее, о том, как мы будем ее предоставлять. В настоящее время мы определяем следующие обязательства:<\/p>\n<ul>\n<li>Время безотказной работы<\/li>\n<li>Частота обновлений<\/li>\n<li>Время отклика<\/li>\n<\/ul>\n<p>Условия<br \/>\nЭто также обязательство по тому, как будет потребляться продукт данных с точки зрения:<\/p>\n<ul>\n<li>Использования<\/li>\n<li>Выставления счетов<\/li>\n<li>Период уведомления для адаптации потребления<\/li>\n<\/ul>\n<p>Тест качества данных<\/p>\n<p>Как вы могли заметить в активах внутри продукта данных, мы различаем тесты качества данных, которые называем техническими, и те, которые называем бизнес-тестами. Первые имеют чисто техническое значение, независимо от ожиданий потребителей, и определяются техническими командами.<\/p>\n<p>Вторые, определенные в рамках контракта данных, направлены на то, чтобы иметь бизнес-значение, которое подтверждает ценность, которую мы вводим и обязуемся предоставлять потребителям (дублирование строк может иметь технический эффект на стоимость хранения и время вычислений, не обязательно влияя на ценность, которую мы доставляем).<\/p>\n<p>Состояние<br \/>\nКонтракт данных отвечает за проверку своего собственного состояния, чтобы система могла сравнить его с обязательствами. Он поддерживает состояние:<\/p>\n<ul>\n<li>SLA<\/li>\n<li>Использование<\/li>\n<li>Выставление счетов<\/li>\n<li>Результаты тестов качества данных<\/li>\n<\/ul>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-96.png\" width=\"1338\" height=\"942\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Контракт данных<\/div>\n<\/div>\n<p>Запрос на доступ к контракту данных<br \/>\nКонтракт данных готов; теперь пришло время запросить доступ, чтобы подписаться на него! Это роль запроса на доступ, который будет включать:<\/p>\n<ul>\n<li>Кто хочет потреблять?: Продукт данных, Техническая команда, Одиночный пользователь или Домен данных<\/li>\n<li>В чем цель?<\/li>\n<\/ul>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-97.png\" width=\"1334\" height=\"933\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Запрос на доступ<\/div>\n<\/div>\n<p>Компоненты платформы<br \/>\nЯ не буду вдаваться в подробности этой части, не потому что она неинтересна, а потому что, по моему мнению, она заслуживает отдельной статьи.<br \/>\nВажно то, что мы хотим использовать эти ресурсы для предоставления интерфейсов между разработчиками продуктов данных и командами платформы (Data Product Experience Plane и Infrastructure Utils Plane) для поддержки предоставления платформы самообслуживания, обеспечивая автономию разработчиков, предлагая децентрализацию через компоненты платформы, реализованные и предоставленные платформой (наши знаменитые LEGO).<\/p>\n<p>Заключение<br \/>\nВот и все — мы рассмотрели основные концепции, которые консоль будет поддерживать, чтобы позволить командам реализовать свою data mesh. Давайте не забудем одно: мы все еще на самом начальном этапе разработки, стремясь к MVP с базовыми концепциями, чтобы начать вводить data mesh! Многие концепции, необходимые для масштабирования data mesh и в долгосрочной перспективе, такие как полисемии, петли обратной связи, вычислительные политики и т.д., все еще отсутствуют. Мы доберемся до этого!<br \/>\nКонцепции на месте; следующим шагом является северная звезда архитектуры Alchemesh!<\/p>\n",
            "date_published": "2024-10-05T22:10:17+03:00",
            "date_modified": "2024-10-05T22:11:15+03:00",
            "tags": [
                "Data",
                "Data Governance",
                "Data Mesh",
                "Open Source"
            ],
            "image": "https:\/\/gavrilov.info\/pictures\/image-90.png",
            "_date_published_rfc2822": "Sat, 05 Oct 2024 22:10:17 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "170",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/gavrilov.info\/pictures\/image-90.png",
                    "https:\/\/gavrilov.info\/pictures\/image-91.png",
                    "https:\/\/gavrilov.info\/pictures\/image-92.png",
                    "https:\/\/gavrilov.info\/pictures\/image-93.png",
                    "https:\/\/gavrilov.info\/pictures\/image-94.png",
                    "https:\/\/gavrilov.info\/pictures\/image-95.png",
                    "https:\/\/gavrilov.info\/pictures\/image-96.png",
                    "https:\/\/gavrilov.info\/pictures\/image-97.png"
                ]
            }
        },
        {
            "id": "169",
            "url": "https:\/\/gavrilov.info\/all\/alchemesh-freymvork-data-mesh-proishozhdenie\/",
            "title": "Alchemesh: Фреймворк Data Mesh — Происхождение",
            "content_html": "<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-89.png\" width=\"500\" height=\"500\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Alchemesh<\/div>\n<\/div>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-88.png\" width=\"1400\" height=\"1002\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Data product view<\/div>\n<\/div>\n<p>Оригинал: <a href=\"https:\/\/medium.com\/alchemesh\/alchemesh-data-mesh-framework-the-genesis-aaa9aba2f7bd\">https:\/\/medium.com\/alchemesh\/alchemesh-data-mesh-framework-the-genesis-aaa9aba2f7bd<\/a><br \/>\nИли тут: <a href=\"https:\/\/a.gavrilov.info\/data\/posts\/Alchemesh%20Data%20mesh%20framework%20—%20The%20genesis%20|%20by%20Alexandre%20Guitton%20|%20Alchemesh%20|%20Medium.pdf\">alchemesh data mesh framework the genesis<\/a><\/p>\n<p>Очень ждем эту любопытную балалайку 🔥 и надеемся, что ребята ее выложат в Open Source в скором времени и не сделают её сильно или неудобно платной.<\/p>\n<p>По мере того как данные становятся всё более важными в процессах принятия решений, многие компании пересматривают свою организацию, чтобы принять данные. В серии постов я обсуждал, как я перешёл от мышления о современном стеке данных к принципам Data Mesh, что в конечном итоге привело меня сюда, к началу нового пути: созданию фреймворка Data Mesh.<\/p>\n<p>Data Mesh — это децентрализованный социально-технический подход к совместному использованию, доступу и управлению аналитическими данными в сложных и крупномасштабных средах — внутри или между организациями, способствующий децентрализованному управлению данными при обеспечении надёжной системы управления и продуктового подхода.<\/p>\n<p>Однако реализация Data Mesh представляет собой множество вызовов и требует поддержки платформы.<\/p>\n<p><b>Data Mesh: За пределами технологии<\/b><\/p>\n<p>Вопреки распространённому мнению, Data Mesh — это не просто о перестройке команд. Это не просто о формировании кросс-функциональных команд, работающих на централизованной и монолитной платформе. Data Mesh представляет собой глубокое преобразование взаимодействий между людьми, технической архитектурой и решениями в организации, основанное на 4 принципах:<\/p>\n<ol start=\"1\">\n<li><b>Владение доменом<\/b>: Децентрализация владения аналитическими данными к бизнес-доменам, ближайшим к источнику данных или основным потребителям, и независимое управление жизненным циклом данных на основе этих доменов. Этот подход согласовывает бизнес, технологии и данные, обеспечивая масштабируемость, гибкость, точность и устойчивость за счёт сокращения узких мест и обеспечения локализованного управления изменениями.<\/li>\n<\/ol>\n<ol start=\"2\">\n<li><b>Данные как продукт<\/b>: Доменно-ориентированные данные делятся как продукт напрямую с пользователями данных, придерживаясь таких характеристик, как обнаруживаемость, адресуемость, понятность, достоверность, нативный доступ, взаимодействие, композиционность, внутренняя ценность и безопасность. Каждый автономный продукт данных предоставляет явные, простые в использовании контракты на обмен данными и управляется независимо, вводя концепцию “кванта данных”, которая инкапсулирует все необходимые компоненты для обмена данными, направленную на предотвращение информационных завалов, развитие культуры, ориентированной на данные, и повышение устойчивости к изменениям.<\/li>\n<\/ol>\n<ol start=\"3\">\n<li><b>Платформа самообслуживания данных<\/b>: Обеспечение возможности кросс-функциональным командам делиться данными за счёт управления полным жизненным циклом продуктов данных и создания надёжной сети взаимосвязанных продуктов, упрощая обнаружение, доступ и использование данных. Она направлена на снижение стоимости децентрализованного владения данными, абстрагирование сложности управления данными, привлечение более широкого круга разработчиков и автоматизацию управления для обеспечения безопасности и соответствия.<\/li>\n<\/ol>\n<ol start=\"4\">\n<li><b>Федеративное вычислительное управление<\/b>: Федеративная модель управления с представителями доменов, членами платформы данных и экспертами для балансировки автономии доменов и глобальной совместимости, полагаясь на автоматическое обеспечение политики. Она направлена на извлечение ценности из совместимых продуктов данных, смягчение рисков децентрализации, интеграцию требований управления и сокращение ручного синхронизационного накладных расходов.<\/li>\n<\/ol>\n<p><b>Поддержка перехода к Data Mesh<\/b><\/p>\n<p>Реализация Data Mesh — это сложный и развивающийся процесс. Компании должны не только инициировать этот переход, но и обеспечить его устойчивость. По мере появления новых технологий и созревания организаций в реализации Data Mesh, концепции и практики должны развиваться.<\/p>\n<p>Data Mesh далеко не статичное решение. Оно должно постоянно адаптироваться к новым размышлениям и технологическим достижениям. Компании, принимающие этот подход, должны быть готовы постоянно пересматривать и корректировать свои практики и инструменты.<\/p>\n<p><b>Множество вызовов<\/b><\/p>\n<p>Когда вы начинаете углубляться в реализацию Data Mesh, вы начинаете понимать, что перед вами стоит множество вызовов, таких как:<\/p>\n<ul>\n<li><b>Контракты данных<\/b>: Они становятся важными для формализации зависимостей между командами и их продуктами. Контракты данных проясняют ожидания и обязанности, обеспечивая эффективную коммуникацию и сотрудничество.<\/li>\n<\/ul>\n<ul>\n<li><b>Полисеми<\/b>: Эти элементы позволяют различным продуктам данных общаться с использованием общих сущностей, облегчая взаимодействие и согласованность данных в организации.<\/li>\n<\/ul>\n<ul>\n<li><b>Продукты данных<\/b>: В основе Data Mesh лежат продукты данных, которые должны быть надлежащим образом документированы, поддерживаемы и принадлежать командам. Это включает определение метаданных, стандартов качества и механизмов обновления и версионирования.<\/li>\n<\/ul>\n<p><b>Вызовы автономии<\/b><\/p>\n<p>Хотя автономия команд важна, она неизбежно приводит к расхождениям в используемых технологиях и принятых лучших практиках. Некоторые могут быть склонны к рецентрализации решений через единую платформу \/ технический стек (например, проект DBT с экземпляром Airflow). Однако это может просто перенести проблему на уровень платформы. Важно принимать и поддерживать эту автономию, определяя чёткие интерфейсы для продуктов данных и предоставляя платформу, которая способствует этой динамике.<\/p>\n<p>Эта технологическая разнородность может рассматриваться как актив, если она хорошо управляется. Позволяя каждой команде выбирать инструменты, которые лучше всего соответствуют их конкретным потребностям, это поощряет инновации и адаптивность. Однако важно установить стандарты и лучшие практики, чтобы обеспечить согласованность и взаимодействие реализованных решений.<\/p>\n<p><b>Наша видение: Фреймворк для Data Mesh<\/b><\/p>\n<p>Учитывая эти идеи и основываясь на моих предыдущих обсуждениях о переходе от современного стека данных к принципам Data Mesh, я решил разработать фреймворк для управления Data Mesh. Цель не в том, чтобы предложить универсальный продукт, а в том, чтобы предоставить гибкий и модульный инструмент. Фреймворк направлен на:<\/p>\n<ul>\n<li><b>Стандартизация интерфейсов<\/b>: Предоставление общей рабочей рамки для доменов данных, продуктов данных, выходных портов, контрактов данных и т.д., тем самым облегчая ассимиляцию и понимание.<\/li>\n<\/ul>\n<ul>\n<li><b>Поддержка команд платформы<\/b>: Помощь в создании платформ самообслуживания данных через стандартизацию компонентов, оставаясь при этом независимым от реализации.<\/li>\n<\/ul>\n<ul>\n<li><b>Предоставление модульных компонентов<\/b>: Поставка “конструкторских” компонентов платформы, позволяющих пользователям выбирать, как они хотят переводить ресурсы Data Mesh на платформу.<\/li>\n<\/ul>\n<p>Этот фреймворк разработан как модульный и адаптируемый, позволяя компаниям использовать его в соответствии с их конкретными потребностями. Будь то стандартизация процессов, поддержка команд или предложение модульных решений, фреймворк направлен на предоставление прочной основы для реализации и управления Data Mesh.<\/p>\n<p><b>Alchemesh: Слои<\/b><\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-87.png\" width=\"422\" height=\"616\" alt=\"\" \/>\n<\/div>\n<p>Фреймворк Alchemesh будет состоять из трёх слоёв:<\/p>\n<ol start=\"1\">\n<li><b>Alchemesh Console<\/b>: Отвечает за предоставление интерфейсов (UI, Rest API и т.д.) для управления метаданными Data Mesh:\n<ul>\n  <li>Позволяет пользователям перемещаться по Data Mesh,<\/li>\n  <li>Позволяет командам платформы переводить всё это в предоставление платформы.<\/li>\n  <li>Это будет порталом для действий с продуктом данных:\n<ul>\n    <li>Действует как реестр продуктов данных,<\/li>\n    <li>Интерфейс для разработчиков продуктов данных,<\/li>\n    <li>Интерфейс для команд платформы для активации платформы самообслуживания данных.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<ol start=\"2\">\n<li><b>Alchemesh Controller<\/b>: Это будет плоскость управления Data Mesh, которая будет управлять платформой Data Mesh. Она создаёт связь между метаданными Data Mesh, управляемыми консолью, и компонентами платформы в автоматизированном и самообслуживающемся режиме.<\/li>\n<\/ol>\n<ol start=\"3\">\n<li><b>Alchemesh Platform Components<\/b>: Набор “конструкторских” компонентов платформы для самообслуживания. Компоненты платформы разделены на несколько категорий:\n<ul>\n  <li><b>Infrastructure Platform Component<\/b>: Определяет основу платформы для поддержки Data Mesh (например, проект\/аккаунт облачного провайдера, VPC, реестры, кластер Kubernetes и т.д.).<\/li>\n  <li><b>Output Port Platform Component<\/b>: Создаёт компоненты хранения на инфраструктуре для предоставления данных, созданных продуктами данных, обеспечивая взаимодействие и управление доступом.<\/li>\n  <li><b>Input Port Platform Component<\/b>: Создаёт компоненты для потребления данных из операционных систем и делает их доступными для инфраструктуры продуктов данных, позволяя связанному коду форматировать их и создавать ценность продукта данных.<\/li>\n  <li><b>Code Platform Component<\/b>: Создаёт бизнес-логику на инфраструктуре, позволяя использовать входящие данные для получения желаемого результата.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p><b>Открытый исходный код<\/b><\/p>\n<p>Пока не ясно, какую стратегию мы будем применять в этом проекте в отношении открытого исходного кода, потому что далеко не ясно, куда пойдёт этот проект, это всё ещё сторонний проект, который близок нашим сердцам. Но мы так много обязаны открытому исходному коду, который помог нам расти, и мы счастливы работать с таким количеством разных людей, как мы делали это в NiFiKop, что некоторые из наших работ будут открыты, безусловно!<\/p>\n<p><b>Модульность<\/b><\/p>\n<p>Каждый из этих трёх слоёв может использоваться независимо и частично!<\/p>\n<p>С возможностью замены каждого из решений на пользовательские, в зависимости от того, как каждый будет использоваться:<\/p>\n<ul>\n<li>Часть консоли может использоваться как слой метаданных для Data Mesh, затем потребляемый и контролируемый через интерфейсы (Rest, GraphQL, Events)\n<ul>\n  <li>командами платформы компании для интеграции с их системами автоматизации (CI\/CD, контроллер GitOps, контроллер Kubernetes и т.д.)<\/li>\n  <li>для создания связи между метаданными сетки и платформой.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Контроллер должен иметь возможность управлять компонентами платформы, предлагаемыми Alchemesh, а также теми, которые производятся организацией, использующей решение.<\/li>\n<\/ul>\n<ul>\n<li>Компоненты платформы не должны быть специализированы для удовлетворения требований Alchemesh или даже просто Data Mesh.\n<ul>\n  <li>Они могут использоваться вне этого фреймворка, как и любой другой модуль. Например, если у меня есть компонент инфраструктуры, который позволяет мне создать кластер GKE через Terraform, он должен быть пригодным для создания кластера GKE в традиционной среде предприятия Terraform без необходимости использования консоли или контроллера, и то же самое касается выходного порта для управления хранилищем и правами доступа на BigQuery.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><b>Заключение<\/b><\/p>\n<p>Data Mesh представляет собой глубокое преобразование в управлении данными, требующее коллективного обязательства и децентрализованной организации. С этим фреймворком, который мы хотим построить, мы стремимся поддержать компании в этом переходе, предлагая стандартизированные инструменты и интерфейсы, поддерживая автономию команд. Мы хотим на нашем уровне участвовать в эмпатии и размышлениях о Data Mesh, чтобы попытаться продвинуть мышление, чтобы полностью воспользоваться преимуществами Data Mesh, успешно преодолевая вызовы его реализации.<\/p>\n<p>Мы все ещё находимся на ранней стадии разработки этого фреймворка на основе нашего понимания Data Mesh. Реализация продукта также даёт нам рамки для развития нашего размышления, начиная с основных концепций (например, доменов данных, продуктов данных, контрактов данных и т.д.) до обогащения их функциями, продвигаемыми Data Mesh для обеспечения его масштабирования (например, вычислительных политик, контуров обратной связи и т.д.). Эта серия статей позволит нам делиться нашими размышлениями и решениями, которые мы принимали параллельно с разработкой!<\/p>\n<p>В следующей статье мы сосредоточимся на архитектуре “северной звезды”, которую мы в настоящее время используем для разработки этого фреймворка, а затем представим вам моделирование ресурсов (продукты данных, технические команды и т.д.), которые у нас есть для нашего MVP!<\/p>\n<p>Чтобы немного заинтриговать наш продукт, вот несколько набросков консоли AlchmeshIo. 😇<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-83.png\" width=\"1400\" height=\"1010\" alt=\"\" \/>\n<\/div>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-84.png\" width=\"1400\" height=\"992\" alt=\"\" \/>\n<\/div>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-85.png\" width=\"1400\" height=\"1002\" alt=\"\" \/>\n<\/div>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-86.png\" width=\"1400\" height=\"993\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Data product’s output port view<\/div>\n<\/div>\n",
            "date_published": "2024-10-05T21:29:56+03:00",
            "date_modified": "2024-10-05T21:29:50+03:00",
            "tags": [
                "Data Governance",
                "Data Mesh",
                "Open Source"
            ],
            "image": "https:\/\/gavrilov.info\/pictures\/image-89.png",
            "_date_published_rfc2822": "Sat, 05 Oct 2024 21:29:56 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "169",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/gavrilov.info\/pictures\/image-89.png",
                    "https:\/\/gavrilov.info\/pictures\/image-88.png",
                    "https:\/\/gavrilov.info\/pictures\/image-87.png",
                    "https:\/\/gavrilov.info\/pictures\/image-83.png",
                    "https:\/\/gavrilov.info\/pictures\/image-84.png",
                    "https:\/\/gavrilov.info\/pictures\/image-85.png",
                    "https:\/\/gavrilov.info\/pictures\/image-86.png"
                ]
            }
        },
        {
            "id": "159",
            "url": "https:\/\/gavrilov.info\/all\/airflow-2-10\/",
            "title": "Airflow 2.10",
            "content_html": "<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-61.png\" width=\"1400\" height=\"788\" alt=\"\" \/>\n<\/div>\n<p>Введение<\/p>\n<p>Саммит Airflow не за горами (10–12 сентября), и поэтому время было идеальным для нового важного релиза Airflow. Этот минорный релиз, “2.10”, не разочаровывает, и эта короткая статья расскажет о основных функциях и исправлениях, представленных в этом релизе. Если вы хотите изучить все, что предлагает Airflow 2.10, эта статья для вас.<\/p>\n<p>Датасеты в Airflow<\/p>\n<p>Напоминаем, что датасет в Airflow — это логическая группировка данных. Задачи-производители на верхних уровнях могут обновлять датасеты, и обновления в датасетах способствуют планированию DAG’ов на нижних уровнях потребления. В этом релизе добавлено несколько новых функций для датасетов Airflow.<\/p>\n<p>Динамическое определение датасета<\/p>\n<p>Алиасы датасетов могут использоваться для генерации событий датасета с ассоциацией с алиасами. DAG’и на нижних уровнях могут зависеть от разрешённых датасетов. Эта функция позволяет определять сложные зависимости для выполнения DAG’ов на основе обновлений датасетов.<\/p>\n<p>Представьте, что у вас есть задача, которая генерирует выходные файлы в S3-хранилище, причём расположение этих файлов зависит от даты выполнения (ds). Ранее вам необходимо было определять датасет статически, но с новым DatasetAlias вы можете динамически создавать путь к датасету на основе контекста выполнения:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">@task(outlets=[DatasetAlias(&quot;my-task-outputs&quot;)])\ndef my_task_with_outlet_events(*, ds, outlet_events):\n    outlet_events[&quot;my-task-outputs&quot;].add(Dataset(f&quot;s3:\/\/bucket\/my-task\/{ds}&quot;))\n\n@task(outlets=[DatasetAlias(&quot;my-task-outputs&quot;)])\ndef my_task_with_metadata(*, ds):\n    s3_dataset = Dataset(f&quot;s3:\/\/bucket\/my-task\/{ds}&quot;)\n    yield Metadata(s3_dataset, extra={&quot;k&quot;: &quot;v&quot;}, alias=&quot;my-task-outputs&quot;)<\/code><\/pre><p>Датасеты больше не активируют неактивные DAG’и<\/p>\n<p>Ранее, когда DAG был приостановлен или удалён, входящие события датасета всё равно активировали его, и DAG запускался, когда он был возвращён из паузы или добавлен обратно в файл DAG’а. Это было изменено; теперь расписание датасета DAG’а может быть выполнено только событию, которое произошло во время активного состояния DAG’а.<\/p>\n<p>Рассмотрите сценарий, когда у вас есть несколько DAG’ов, потребляющих один и тот же датасет, но некоторые из этих DAG’ов приостановлены на техническое обслуживание или больше не активны. С помощью этого обновления вы можете гарантировать, что события датасета запускают только активные, не приостановленные DAG’и, предотвращая ненужные выполнения и снижая риск ошибок.<\/p>\n<p>Обновление в представлении датасетов<\/p>\n<p>Представление датасетов в Airflow было значительно обновлено, чтобы обеспечить более интуитивный и детальный обзор событий датасетов и их влияния на рабочие процессы. Это обновление особенно важно для пользователей, управляющих сложными конвейерами данных, где важно понимать поток данных и его эффекты на запуск.<\/p>\n<p>Ключевые улучшения:<\/p>\n<ol start=\"1\">\n<li>Список событий датасетов: новое представление включает список всех событий датасетов, что позволяет пользователям быстро видеть последние активности по всем датасетам. Это особенно полезно для мониторинга потоков данных и диагностики проблем.<\/li>\n<\/ol>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-62.png\" width=\"1400\" height=\"963\" alt=\"\" \/>\n<\/div>\n<ol start=\"2\">\n<li>Карточки с информацией о событиях: вместо простой таблицы, события датасетов теперь отображаются в виде карточек с подробной информацией об источнике события, запусках на нижних уровнях и связанными метаданными. Этот более богатый дисплей предоставляет лучшее представление с первого взгляда.<\/li>\n<li>Вкладочный интерфейс: новый интерфейс организует информацию по вкладкам, включая события датасетов, детали, список датасетов и графическое представление. Это разделение позволяет пользователям сосредоточиться на определённом аспекте интересующих их датасетов, без излишней информации.<\/li>\n<li>Навигация с помощью “хлебных крошек”: внедрение навигации с помощью “хлебных крошек” улучшает пользовательский опыт, ясно показывая выбранный датасет или событие, что упрощает перемещение вперёд и назад между представлениями.<\/li>\n<li>Более насыщенные детали датасета: вкладка с деталями датасета теперь включает более полную информацию, такую как дополнительные метаданные, DAG’и-потребители и задачи-производители.Этот уровень детализации помогает пользователям понять полный жизненный цикл своих датасетов.<\/li>\n<\/ol>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-63.png\" width=\"1400\" height=\"800\" alt=\"\" \/>\n<\/div>\n<p>Гибридные экзекьюторы<\/p>\n<p>Эта функция экспериментальная. Ранее известные как гибридные экзекьюторы, эта новая функция позволяет Airflow использовать несколько экзекьюторов одновременно. DAG’и, или даже отдельные задачи, могут быть настроены для использования конкретного экзекьютора, который лучше всего отвечает их потребностям. Один DAG может содержать задачи, все они используют разные экзекьюторы.<\/p>\n<p>Запуск нескольких экзекьюторов позволяет лучше использовать сильные стороны всех доступных экзекьюторов и избегать их слабостей. Другими словами, вы можете использовать определённый экзекьютор для определённого набора задач, где его особенные достоинства и преимущества наиболее уместны для данного случая использования.<\/p>\n<p>Чтобы определить экзекьютор для задачи, используйте параметр “executor” в операторах Airflow:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">BashOperator(\n    task_id=&quot;hello_world&quot;,\n    executor=&quot;LocalExecutor&quot;,\n    bash_command=&quot;echo 'hello world!'&quot;,\n)<\/code><\/pre><p>Тёмный режим<\/p>\n<p>Мы ждали до версии 2.10, чтобы в Airflow появился тёмный режим. “Всё приходит к тем, кто умеет ждать”, как говорится в пословице. Ну, не о чем больше говорить о этой очевидной функции, и далее приведён скриншот этого тёмного режима:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-64.png\" width=\"1400\" height=\"1029\" alt=\"\" \/>\n<\/div>\n<p>Вы можете переключать тёмный\/светлый режим, нажав на значок полумесяца справа от панели навигации.<\/p>\n<p>Новый метод “concat()”<\/p>\n<p>Значительное дополнение — введение метода concat() для объектов XComArg. Эта новая функция улучшает способ манипуляции и объединения данных, передаваемых между задачами в DAG, делая процесс более эффективным и менее ресурсоёмким.<\/p>\n<p>Метод concat() позволяет пользователям объединять несколько ссылок XComArg в один объект XComArg. Этот метод особенно полезен, когда нужно выполнить операцию на нескольких списках или последовательностях элементов, не создавая дополнительных задач в вашем DAG. По сути, concat() работает как itertools.chain в Python, но с дополнительным преимуществом поддержки доступа по индексу к объединённым результатам.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-65.png\" width=\"1400\" height=\"725\" alt=\"\" \/>\n<\/div>\n<p>Когда вы вызываете concat() на объекте XComArg, он объединяет его с одним или несколькими другими объектами XComArg, создавая новый объект ConcatXComArg. Этот объект ведёт себя как последовательность, к которой можно получить доступ, используя индексы, что упрощает работу с объединёнными данными, как если бы это был один список или словарь.<\/p>\n<p>Например, если у вас есть два или более XComArg, представляющие списки файлов, вы теперь можете объединить их и затем обработать объединённый список в задаче нижнего уровня, без необходимости вручную объединять списки в отдельной задаче. Это не только упрощает DAG, но также экономит ресурсы, уменьшая количество данных, хранимых в XCom, и объём памяти, необходимый для выполнения задач.<\/p>\n<p>Новые разрешения на уровне DAG<\/p>\n<p>Airflow 2.10 вводит расширенный контроль над разрешениями на уровне DAG, предоставляя более подробный подход к управлению доступом в ваших рабочих процессах. Это обновление расширяет существующую функцию access_control, чтобы охватывать ресурсы DAG Run, позволяя администраторам определять специфические разрешения для запуска и удаления DAG’ов на уровне каждого отдельного DAG.<\/p>\n<p>В предыдущих версиях Airflow, access_control позволял role-based access management (RBAC) на уровне DAG, но детализация разрешений была ограничена. С новыми обновлениями в версии 2.10, разрешения теперь могут быть назначены не только для DAG’ов в целом, но также для конкретных действий внутри этих DAGов, таких как создание и удаление DAG посещений.<\/p>\n<p>С этой новой возможностью администраторы могут указать, какие роли имеют разрешение выполнять определённые действия на конкретных DAG’ах. Например, вы можете разрешить роли пользователя запускать DAG, но запретить им его удалять. Это особенно полезно в средах, где определённые операции должны быть ограничены для определённых пользователей или команд.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">with DAG(\n    'tutorial',\n    ...\n    access_control={\n        'User': {\n            'DAG Runs': {'can_create'}\n        }\n    }\n) as dag:<\/code><\/pre><p>В этом случае пользователям с ролью “User” предоставляется разрешение создаватирибовать выполнения DAG для DAG tutorial, но не обязательно удалять сам DAG.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">with DAG(\n    'tutorial2',\n    ...\n    access_control={\n        'User': {'can_delete'}  # Старый стиль: {'DAGs': {'can_delete'}}\n) as dag:<\/code><\/pre><p>Здесь пользователи с ролью “User” могут удалить DAG tutorial2, демонстрируя возможность применения разрешений как на уровне DAG, так и на уровне DAG Run.<\/p>\n<p>UI с выключением кнопок с работающими функциями delete и trigger, когда это разрешено:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-66.png\" width=\"1400\" height=\"335\" alt=\"\" \/>\n<\/div>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-67.png\" width=\"1400\" height=\"200\" alt=\"\" \/>\n<\/div>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-68.png\" width=\"1400\" height=\"200\" alt=\"\" \/>\n<\/div>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-69.png\" width=\"1400\" height=\"200\" alt=\"\" \/>\n<\/div>\n<p>Jinja-шаблонизация с ObjectStoragePath<\/p>\n<p>Теперь Jinja-шаблонизация поддерживается для ObjectStoragePath, используемого в качестве аргумента оператора. Это улучшение позволяет пользователям динамически рендерить пути на основе переменных, таких как дата выполнения, идентификаторы задач или пользовательские параметры, предоставляя большую гибкость и адаптивность в определении путей хранения в их DAGах.<\/p>\n<p>Например, теперь вы можете определить ObjectStoragePath следующим образом:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">path = ObjectStoragePath(&quot;s3:\/\/my-bucket\/data\/{{ ds }}\/{{ task_id }}.csv&quot;)<\/code><\/pre><p>В этом примере путь будет динамически отображаться с конкретной датой (ds) и идентификатором задачи, что облегчает организацию и доступ к файлам в системах объектного хранения. Эта функция упрощает интеграцию Airflow с облачными сервисами хранения, улучшая общую эффективность ваших рабочих процессов.<\/p>\n<p>Цвета для строк логов в UI для ошибок и предупреждений<\/p>\n<p>Чтение и поиск ошибок\/предупреждений в логах станет намного проще. Ошибки и предупреждения теперь будут выделены разными цветами (красным и синим соответственно) и жирным шрифтом.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-70.png\" width=\"1400\" height=\"712\" alt=\"\" \/>\n<\/div>\n<p>Новые декораторы run_if и skip_if<\/p>\n<p>Airflow 2.10 вводит декораторы run_if и skip_if, предоставляя более краткий и читаемый способ коэффического выполнения или пропуска задач в DAG. Эти декораторы работают как синтаксический сахар, упрощая логику задания выполнения задач на основе конкретных условий.<\/p>\n<p>Декоратор run_if позволяет определить условие, при котором задача должна быть выполнена. Если условие не выполняется, задача автоматически пропускается. Это особенно полезно для сценариев, в которых выполнение задачи зависит от динамических условий, оцененных во время выполнения.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-71.png\" width=\"1400\" height=\"879\" alt=\"\" \/>\n<\/div>\n<p>Вот пример, как использовать декоратор run_if:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">from __future__ import annotations\n\nfrom pendulum import datetime\n\nfrom airflow.decorators import dag, task\n\n\n@dag(start_date=datetime(2022, 1, 1), schedule=None, catchup=False)\ndef condition_sample():\n    @task.run_if(lambda context: context[&quot;task_instance&quot;].task_id.endswith(&quot;_do_run&quot;))\n    @task.bash()\n    def echo() -&gt; str:\n        return &quot;echo 'run'&quot;\n\n    echo.override(task_id=&quot;echo_do_run&quot;)()\n    echo.override(task_id=&quot;echo_do_not_run&quot;)()\n\n\ncondition_sample()<\/code><\/pre><p>В этом примере DAG задача echo выполнится только если её task_id оканчивается на _do_run. Декоратор run_if оценивает условие, и если оно True, задача выполняется; в противном случае она пропускается.<\/p>\n<p>Заключение<\/p>\n<p>Каждые 4-5 месяцев Airflow выпускает новую минорную версию, и это действительно захватывающее нововведение, чтобы увидеть, как много усилий прикладывается для постоянного улучшения этого отличного инструмента оркестрации с открытым исходным кодом. Сила Airflow заключается в его сильном сообществе и стремлении сделать продукт всегда лучше. Этот релиз пошёл в этом направлении, и компаниям не стоит ждать, чтобы мигрировать на эту новую версию, поскольку новые функции могут значительно упростить\/улучшить ваши текущие\/новые DAGи и общее управление Airflow.<\/p>\n<p>Благодарность<\/p>\n<p>Если вы с удовольствием прочли эту статью, следите за обновлениями, поскольку мы регулярно публикуем технические статьи об Airflow и Data Stack в целом. Подписывайтесь на Astrafy в LinkedIn, Medium и Youtube, чтобы быть в курсе выхода следующей статьи.<\/p>\n<p>Если вам нужна поддержка по Airflow или вашему Data Stack в целом, не стесняйтесь обращаться к нам по адресу sales@astrafy.io.<\/p>\n<p>перевод: <a href=\"https:\/\/medium.astrafy.io\/airflow-2-10-is-just-wow-cde50c20553e\">https:\/\/medium.astrafy.io\/airflow-2-10-is-just-wow-cde50c20553e<\/a><\/p>\n",
            "date_published": "2024-09-04T20:46:34+03:00",
            "date_modified": "2024-09-04T20:46:23+03:00",
            "tags": [
                "big data",
                "Data",
                "Data Engineer",
                "Open Source"
            ],
            "image": "https:\/\/gavrilov.info\/pictures\/image-61.png",
            "_date_published_rfc2822": "Wed, 04 Sep 2024 20:46:34 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "159",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/gavrilov.info\/pictures\/image-61.png",
                    "https:\/\/gavrilov.info\/pictures\/image-62.png",
                    "https:\/\/gavrilov.info\/pictures\/image-63.png",
                    "https:\/\/gavrilov.info\/pictures\/image-64.png",
                    "https:\/\/gavrilov.info\/pictures\/image-65.png",
                    "https:\/\/gavrilov.info\/pictures\/image-66.png",
                    "https:\/\/gavrilov.info\/pictures\/image-67.png",
                    "https:\/\/gavrilov.info\/pictures\/image-68.png",
                    "https:\/\/gavrilov.info\/pictures\/image-69.png",
                    "https:\/\/gavrilov.info\/pictures\/image-70.png",
                    "https:\/\/gavrilov.info\/pictures\/image-71.png"
                ]
            }
        },
        {
            "id": "91",
            "url": "https:\/\/gavrilov.info\/all\/zapuskaem-garage-s3-v-docker\/",
            "title": "Запускаем Garage S3 в Docker",
            "content_html": "<p>Создаем проект, просто папку, где все будем хранить:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">mkdir garage\ncd garage<\/code><\/pre><p>Создаем файл настроек томл:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">nano  garage.toml<\/code><\/pre><p>Пишем туда этот текст:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">metadata_dir = &quot;\/var\/lib\/garage\/meta&quot;\ndata_dir = &quot;\/var\/lib\/garage\/data&quot;\ndb_engine = &quot;lmdb&quot;\n\nreplication_mode = &quot;none&quot;\n\nrpc_bind_addr = &quot;[::]:3901&quot;\nrpc_public_addr = &quot;127.0.0.1:3901&quot;\nrpc_secret = &quot;3e59650cc67421460a80eafc4d45611ebb63a214296d8f32f51135041ff514f5&quot;\n\n[s3_api]\ns3_region = &quot;garage&quot;\napi_bind_addr = &quot;[::]:3900&quot;\nroot_domain = &quot;localhost&quot;\n\n[s3_web]\nbind_addr = &quot;[::]:3902&quot;\nroot_domain = &quot;localhost&quot;\nindex = &quot;index.html&quot;\n\n[k2v_api]\napi_bind_addr = &quot;[::]:3904&quot;\n\n[admin]\napi_bind_addr = &quot;0.0.0.0:3903&quot;\nadmin_token = &quot;472070e320469b2f048f77dcad4149e0c608ef01ecf0ac863c416287a1127a9e&quot;<\/code><\/pre><p>Далее создаем папку для хранения метаданных и самих данных:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">mkdir meta\nmkdir data<\/code><\/pre><p>Теперь запускаем docker:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">docker run \\\n  -d \\\n  --name garaged \\\n  --restart always \\\n  -p 3900:3900 -p 3901:3901 -p 3902:3902 -p 3903:3903 -p 3904:3904 \\\n  -v .\/garage.toml:\/etc\/garage.toml \\\n  -v .\/meta:\/var\/lib\/garage\/meta \\\n  -v .\/data:\/var\/lib\/garage\/data \\\n  dxflrs\/garage:v0.9.0<\/code><\/pre><p>Проверяем, что все хорошо:<\/p>\n<p>Для удобства зарегистрируем alias так:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">alias garage=&quot;docker exec -ti garaged \/garage&quot;<\/code><\/pre><p>Теперь можно запускать команды быстрее.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">garage status\n==== HEALTHY NODES ====\nID                Hostname      Address         Tags              Zone  Capacity  DataAvail\n851017ec5989840f  e3428f26541f  127.0.0.1:3901  NO ROLE ASSIGNED<\/code><\/pre><p>Добавим роль:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">garage layout assign -z dc1 -c 1G 851017ec5989840f\nRole changes are staged but not yet commited.\nUse `garage layout show` to view staged role changes,\nand `garage layout apply` to enact staged changes.<\/code><\/pre><p>Применим роль:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">garage layout apply --version 1 \n\n==== COMPUTATION OF A NEW PARTITION ASSIGNATION ====\n\nPartitions are replicated 1 times on at least 1 distinct zones.\n\nOptimal partition size:                     3.9 MB\nUsable capacity \/ total cluster capacity:   1000.0 MB \/ 1000.0 MB (100.0 %)\nEffective capacity (replication factor 1):  1000.0 MB\n\ndc1                 Tags  Partitions        Capacity   Usable capacity\n  851017ec5989840f        256 (256 new)     1000.0 MB  1000.0 MB (100.0%)\n  TOTAL                   256 (256 unique)  1000.0 MB  1000.0 MB (100.0%)\n\n\nNew cluster layout with updated role assignment has been applied in cluster.\nData will now be moved around between nodes accordingly.<\/code><\/pre><p>Можно создавать бакет:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">garage bucket create gavrilov \n\nBucket gavrilov was created.<\/code><\/pre><p>Генерируем ключи:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">garage key create gavrilov-key\n\nKey name: gavrilov-key\nKey ID: GK6d2fd5f2bb22374c2b626fb2\nSecret key: 5118548e77dcd660705662f18742e4d9f0cd5d37409c2e3bfa53a50f00e33886\nCan create buckets: false\n\nKey-specific bucket aliases:\n\nAuthorized buckets:<\/code><\/pre><p>Добавляем доступ ключей в бакет:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">garage bucket allow \\                             \n  --read \\\n  --write \\\n  --owner \\\n  gavrilov \\\n  --key gavrilov-key\n\nNew permissions for GK6d2fd5f2bb22374c2b626fb2 on gavrilov: read true, write true, owner true.<\/code><\/pre><p>И последний штрих доступ через web:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">garage bucket website gavrilov --allow\n\nWebsite access allowed for gavrilov<\/code><\/pre><p>Теперь можно настроить доступ s3 клиента и что то положить в бакет:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">mc alias set garage http:\/\/localhost:3900 GK6d2fd5f2bb22374c2b626fb2 5118548e77dcd660705662f18742e4d9f0cd5d37409c2e3bfa53a50f00e33886\n\necho &quot;hello world from s3&quot; | mc pipe garage\/gavrilov\/index.html<\/code><\/pre><p>Открываем браузер и смотрим файлик: <a href=\"http:\/\/gavrilov.localhost:3902\/\">http:\/\/gavrilov.localhost:3902\/<\/a><\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2023-12-09-v-23.20.24.png\" width=\"1896\" height=\"416\" alt=\"\" \/>\n<\/div>\n<p>ps: На официальном сайте docker запускают с аргументом<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">--network host<\/code><\/pre><p>, но у меня почему-то  так не работало. Порты закрыты были все. Потом разберусь ¯\\_(ツ)_\/¯ .<\/p>\n<hr \/>\n<p>Кстати есть уже альфа rustfs <a href=\"https:\/\/github.com\/rustfs\/rustfs\">https:\/\/github.com\/rustfs\/rustfs<\/a><\/p>\n",
            "date_published": "2023-12-09T23:25:46+03:00",
            "date_modified": "2025-09-24T23:37:58+03:00",
            "tags": [
                "Open Source",
                "s3"
            ],
            "image": "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2023-12-09-v-23.20.24.png",
            "_date_published_rfc2822": "Sat, 09 Dec 2023 23:25:46 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "91",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2023-12-09-v-23.20.24.png"
                ]
            }
        },
        {
            "id": "90",
            "url": "https:\/\/gavrilov.info\/all\/s3-storage\/",
            "title": "S3 Storage",
            "content_html": "<ol start=\"1\">\n<li>Garage – Французский опенсорс для домашнего использования и небольшой нагрузки. Но написан на Rust<\/li>\n<\/ol>\n<p><a href=\"https:\/\/garagehq.deuxfleurs.fr\">garagehq.deuxfleurs<\/a> Тут можно почитать, как утверждают разраотчики, то это можно напускать даже на тостере :), в прочем они скорее всего правы, учитывая язык разработки.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2023-12-09-v-18.17.11.png\" width=\"1934\" height=\"1496\" alt=\"\" \/>\n<div class=\"e2-text-caption\"><a href=\"https:\/\/crates.io\/crates\/garage\">https:\/\/crates.io\/crates\/garage<\/a><\/div>\n<\/div>\n<ol start=\"2\">\n<li>SeaweedFS – А этот написан на Go. Вот, что они про себя пишут: быстрая распределенная система хранения больших двоичных объектов, файлов и озер данных для миллиардов файлов! Хранилище BLOB-объектов имеет поиск на диске O(1) и многоуровневое облако. Filer поддерживает Cloud Drive, активно-активную репликацию между DC, Kubernetes, монтирование POSIX FUSE, S3 API, S3 Gateway, Hadoop, WebDAV, шифрование, Erasure Coding. Есть хорошее сравнение с другими решениями тут: <a href=\"https:\/\/github.com\/seaweedfs\/seaweedfs#compared-to-other-file-systems.\">https:\/\/github.com\/seaweedfs\/seaweedfs#compared-to-other-file-systems.<\/a> И есть статья на Медиуме<\/li>\n<\/ol>\n<p><a href=\"https:\/\/a.gavrilov.info\/data\/posts\/Seaweedfs%20Distributed%20Storage%20Part%201:%20Introduction.%20%7C%20by%20Ali%20Hussein%20Safar%20%7C%20Medium.pdf\">Seaweedfs – part1<\/a><br \/>\n<a href=\"https:\/\/a.gavrilov.info\/data\/posts\/Seaweedfs%20Distributed%20Storage%20Part%202:%20Reading%20and%20Writing%20Files’%20Process.%20%7C%20by%20Ali%20Hussein%20Safar%20%7C%20M.pdf\">Seaweedfs – part2<\/a><br \/>\n<a href=\"https:\/\/a.gavrilov.info\/data\/posts\/Seaweedfs%20Distributed%20Storage%20Part%203:%20Features.%20%7C%20by%20Ali%20Hussein%20Safar%20%7C%20Medium.pdf\">Seaweedfs – part3<\/a><\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2023-12-09-v-18.27.52.png\" width=\"2484\" height=\"1382\" alt=\"\" \/>\n<div class=\"e2-text-caption\"><a href=\"https:\/\/github.com\/seaweedfs\/seaweedfs\">https:\/\/github.com\/seaweedfs\/seaweedfs<\/a><\/div>\n<\/div>\n<ol start=\"3\">\n<li>JuiceFS – Кажется китайский софт, написан на GO, есть комьюнити версия и платная для высоконагруженных решений. Подходит для big data.<\/li>\n<\/ol>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2023-12-09-v-18.28.25.png\" width=\"2550\" height=\"1350\" alt=\"\" \/>\n<div class=\"e2-text-caption\"><a href=\"https:\/\/github.com\/juicedata\/juicefs\">https:\/\/github.com\/juicedata\/juicefs<\/a><\/div>\n<\/div>\n",
            "date_published": "2023-12-09T19:08:32+03:00",
            "date_modified": "2023-12-09T19:11:31+03:00",
            "tags": [
                "big data",
                "Open Source",
                "s3"
            ],
            "image": "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2023-12-09-v-18.17.11.png",
            "_date_published_rfc2822": "Sat, 09 Dec 2023 19:08:32 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "90",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2023-12-09-v-18.17.11.png",
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2023-12-09-v-18.27.52.png",
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2023-12-09-v-18.28.25.png"
                ]
            }
        },
        {
            "id": "89",
            "url": "https:\/\/gavrilov.info\/all\/grist-eto-sovremennaya-relyacionnye-tablicy-kak-excel-no-besplat\/",
            "title": "Grist – это современная реляционные таблицы как Excel но бесплатные",
            "content_html": "<p><a href=\"https:\/\/github.com\/gristlabs\/grist-core\">https:\/\/github.com\/gristlabs\/grist-core<\/a><\/p>\n<p>Grist — это современная реляционная таблица Excel. Она сочетает гибкость таблиц Excel с надежностью базы данных для организации ваших данных и повышения вашей продуктивности.<br \/>\nЭтот репозиторий, grist-core, является сердцем Grist и содержит все необходимое для запуска мощного сервера таблиц как Excel. Если вы хотите просматривать и редактировать таблицы Excel, хранящиеся локально, вы можете использовать приложение grist-electron для Linux, Mac и Windows. А для отображения таблиц Grist на веб-сайте без какой-либо специальной поддержки можно использовать grist-static, полностью настраиваемую версию Grist, работающую в браузере.<br \/>\nРепозиторий grist-core является основой для всех этих вариантов, а также для хостинг-сервисов таблиц Excel, предлагаемых Grist Labs, компанией в Нью-Йорке (🇺🇸), которая является основным разработчиком Grist, и ANCT Données et Territoires, французским правительственным агентством 🇫🇷, чьи разработчики внесли значительный вклад в исходный код.<br \/>\nРепозитории grist-core, grist-electron и grist-static являются открытыми (Apache License, версия 2.0).<\/p>\n<p>Попробовал. Норм. Простенько и со вкусом. Выглядит качественно.<\/p>\n<div class=\"e2-text-picture\">\n<div class=\"fotorama\" data-width=\"2560\" data-ratio=\"1.6161616161616\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2023-12-03-v-23.15.25.png.jpg\" width=\"2560\" height=\"1584\" alt=\"\" \/>\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2023-12-03-v-23.16.30.png.jpg\" width=\"2560\" height=\"1593\" alt=\"\" \/>\n<\/div>\n<\/div>\n",
            "date_published": "2023-12-03T23:21:24+03:00",
            "date_modified": "2023-12-03T23:21:16+03:00",
            "tags": [
                "Excel",
                "Open Source"
            ],
            "image": "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2023-12-03-v-23.15.25.png.jpg",
            "_date_published_rfc2822": "Sun, 03 Dec 2023 23:21:24 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "89",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "jquery\/jquery.js",
                    "fotorama\/fotorama.css",
                    "fotorama\/fotorama.js"
                ],
                "og_images": [
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2023-12-03-v-23.15.25.png.jpg",
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2023-12-03-v-23.16.30.png.jpg"
                ]
            }
        },
        {
            "id": "88",
            "url": "https:\/\/gavrilov.info\/all\/bacalhau-platforma-dlya-bystroy-nedorogoy-i-bezopasnoy-vychislit\/",
            "title": "Bacalhau – платформа для быстрой, недорогой и безопасной вычислительной технологии",
            "content_html": "<p>Частичный перевод <a href=\"https:\/\/www.bacalhau.org\">https:\/\/www.bacalhau.org<\/a> <a href=\"https:\/\/github.com\/bacalhau-project\/bacalhau\">https:\/\/github.com\/bacalhau-project\/bacalhau<\/a> и <a href=\"http:\/\/expanso.io\">http:\/\/expanso.io<\/a><\/p>\n<p><a href=\"https:\/\/www.bacalhau.org\">https:\/\/www.bacalhau.org<\/a> — это платформа для быстрой, недорогой и безопасной вычислительной технологии, которая позволяет пользователям запускать вычислительные задания там, где данные создаются и хранятся.<br \/>\nС открытым исходным кодом программного обеспечения bacalhau вы можете оптимизировать свои существующие рабочие процессы без необходимости переписывать код, выполняя задачи Docker и веб-ассемблера (WASM) в виде заданий. Эта архитектура также известна как вычисление над данными (CoD).<br \/>\nНазвание “bacalhau” происходит от португальского слова для треска.<\/p>\n<p>bacalhau стремится преобразовать обработку данных для больших наборов данных, улучшить эффективность и снизить стоимость, а также открыть обработку данных для более широкой аудитории. Наша цель — создать открытую, совместную вычислительную экосистему, которая позволит совершить несравненную коллаборацию. Мы (Expanso.io) предлагаем демонстрационную сеть, чтобы вы могли попробовать работу без установки. Попробуйте!<\/p>\n<p>Почему Бакальхау?<br \/>\n⚡️ Бакальхау упрощает процесс управления вычислительными заданиями, предоставляя единую платформу для управления заданиями в разных регионах, облаках и устройствах на границе сети.<br \/>\n🤝 Бакальхау обеспечивает надежную и устойчивую к сетевым сбоям оркестрацию, гарантируя, что ваши задания будут выполнены даже при сетевых сбоях.<br \/>\n🚨 Бакальхау предоставляет полную и постоянную аудиторскую запись того, что произошло, поэтому вы можете быть уверены, что ваши задания выполняются безопасно.<br \/>\n🔐 Вы можете запускать частные рабочие процессы для снижения вероятности утечки конфиденциальной информации или случайной передачи ваших данных за пределы вашей организации.<br \/>\n💸 Бакальхау снижает затраты на вход и выход, поскольку задания обрабатываются ближе к источнику.<br \/>\n🤗 Вы можете прикрепить свои данные к любой машине, и Бакальхау сможет выполнять задания с этими данными.<br \/>\n💥 Вы можете интегрироваться с сервисами, работающими на узлах, для выполнения заданий, например на DuckDB.<br \/>\n📚 Бакальхау масштабируется для обработки параллельных заданий. Вы можете обрабатывать петабайты (квадриллионы байт) данных.<\/p>\n<p>А вот еще одна статья из рассылки:<\/p>\n<p>В проекте lighthouse, который принимает новые технологии, ВМС США выбрали открытое программное обеспечение Bacalhau, поддерживаемое Expanso, в качестве решения для оркестрации. Программное обеспечение Bacalhau помогает ВМС США достичь своей цели развертывания возможностей искусственного интеллекта в подводных операциях. Совместно с нашим партнером Mycelial, Expanso преодолел несколько препятствий, чтобы позволить использование аналитики с использованием искусственного интеллекта в сложных и суровых условиях глубоководных сред. Bacalhau также соответствовал строгим стандартам безопасности ВМС США, одновременно позволяя доступ к данным и вычислениям по неустойчивым сетям.<\/p>\n<p>Роль Bacalhau в беспилотных морских операциях<br \/>\nСовременные военно-морские суда оснащены сложными датчиками и системами, которые повышают их боевую эффективность. Среди них, беспилотные подводные аппараты (UUV) и беспилотные поверхностные аппараты (USV) ВМС США генерируют значительное количество ценных данных, которые необходимы для принятия решений. Bacalhau улучшает возможности вычисления на устройстве этих беспилотных систем (так называемая Compute-over-Data), используя свой инновационный подход к бесшовной развертываемости на краю и предоставляя возможность планировать и контролировать задания из любой точки мира.<\/p>\n<p>Вклад Bacalhau в программу JADC2<br \/>\nПрограмма Joint All Domain Command and Control (JADC2) Департамента обороны ознаменовала важный шаг в направлении искусственного интеллекта\/машинного обучения (AI\/ML)-ориентированной боевой готовности. Bacalhau сыграл ключевую роль в этом сдвиге. Bacalhau облегчает развертывание сложных моделей, обслуживание и наблюдаемость развернутых решений и обеспечивает надежное обновление новых версий по мере обучения и доработки. Предоставление глобального обзора и надежной вычислительной мощности может быть особенно сложным при работе с сетями, которые могут отключиться в любое время; Bacalhau platform эффективно решает эти проблемы как часть своего дизайна.<br \/>\nБезупречная интеграция данных<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-1.png\" width=\"342\" height=\"342\" alt=\"\" \/>\n<\/div>\n<p>Успех этого проекта зависел от обмена данными по всему флоту беспилотных судов, как управляемых, так и беспилотных, а также в облачных средах. Bacalhau platform, в сочетании с коннектором Kafka Mycelial, обеспечил синхронизацию реального времени и вычисление на устройстве по сетям различного качества и пропускной способности.<\/p>\n<p>Минимальная инфраструктура, максимальная защита<\/p>\n<p>Конвенциональные решения требуют значительных инвестиций в аппаратное обеспечение, тогда как Bacalhau спроектирован на максимизацию эффективности с минимальной инфраструктурой и передачей данных. Если имеется доступная емкость, платформа Bacalhau может работать на существующих устройствах и системах, избегая необходимости новых аппаратных установок. Повторное использование существующих систем в организации также предлагает преимущества, поскольку они были проверены и заданы требования безопасности. Кроме того, в области, где пространство, вес и энергия (SWaP) являются критическими, Bacalhau демонстрирует, что эффективная обработка данных и защита могут быть достигнуты с минимальным использованием ресурсов. Bacalhau работает в гармонии с существующими технологиями, предлагая удобное решение для удовлетворения интенсивных потребностей морских операций.<\/p>\n<p>Bacalhau доступен как открытое программное обеспечение.<br \/>\n<a href=\"https:\/\/github.com\/bacalhau-project\/bacalhau\">https:\/\/github.com\/bacalhau-project\/bacalhau<\/a><\/p>\n<p>А вот еще кусочек как можно все проверить и ознакомиться с архитектурой:<\/p>\n<p>Архитектура<br \/>\nBacalhau — это пиринговая сеть узлов, которая позволяет осуществлять децентрализованное общение между компьютерами. В сети существуют два типа узлов:<br \/>\nУзел-запросчик: отвечает за обработку запросов пользователей, обнаружение и ранжирование вычислительных узлов, пересылку заданий на вычисление узлам вычисления и мониторинг жизненного цикла задания.<br \/>\nУзел вычисления: отвечает за выполнение заданий и получение результатов. Различные узлы вычисления могут использоваться для разных типов заданий, в зависимости от их возможностей и ресурсов.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/image-2.png\" width=\"814\" height=\"610\" alt=\"\" \/>\n<\/div>\n<p>Узел-запросчик и узлы вычисления вместе образуют пиринговую сеть и используют госспинг для обнаружения друг друга, обмена информацией о возможностях узла, доступных ресурсах и состоянии здоровья.<br \/>\nЧтобы взаимодействовать с сетью Bacalhau, пользователи могут использовать интерфейс командной строки Bacalhau (Bacalhau CLI) для отправки запросов узлу-запросчику в сети. Эти запросы отправляются в формате JSON по протоколу HTTP, широко используемому для передачи данных в интернете.<\/p>\n<p>Установка:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">curl -sL https:\/\/get.bacalhau.org\/install.sh | bash<\/code><\/pre><p>Этот пример демонстрирует, как использовать stable diffusion на графическом процессоре и запускать его в сети Bacalhau. stable diffusion — это передовое текстовый модельер, который генерирует изображения из текста и был разработан как открытая альтернатива DALL·E 2. Он основан на модели смешения вероятностного типа и использует трансформер для генерации изображений из текста.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">bacalhau docker run --gpu 1 ghcr.io\/bacalhau-project\/examples\/stable-diffusion-gpu:0.0.1 -- python main.py --o .\/outputs --p &quot;cod swimming through data&quot;<\/code><\/pre><p>После чего нужно скачать результаты командой<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">bacalhau get &lt;id&gt;<\/code><\/pre><p>подробнее тут: <a href=\"https:\/\/docs.bacalhau.org\/examples\/model-inference\/stable-diffusion-gpu\/\">https:\/\/docs.bacalhau.org\/examples\/model-inference\/stable-diffusion-gpu\/<\/a><\/p>\n<p>Сам проект: <a href=\"https:\/\/github.com\/bacalhau-project\/bacalhau\">https:\/\/github.com\/bacalhau-project\/bacalhau<\/a><br \/>\nРазные примеры: <a href=\"https:\/\/docs.bacalhau.org\/examples\">https:\/\/docs.bacalhau.org\/examples<\/a><\/p>\n<p>Сам проверял некоторые, отлично работают и дока хорошая.<br \/>\nЕще хорошо, что такую сеть можно запустить у себя в приватном режиме.<\/p>\n",
            "date_published": "2023-12-03T22:42:01+03:00",
            "date_modified": "2024-02-22T21:00:27+03:00",
            "tags": [
                "bacalhau",
                "big data",
                "CoD",
                "Open Source"
            ],
            "image": "https:\/\/gavrilov.info\/pictures\/image-1.png",
            "_date_published_rfc2822": "Sun, 03 Dec 2023 22:42:01 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "88",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/gavrilov.info\/pictures\/image-1.png",
                    "https:\/\/gavrilov.info\/pictures\/image-2.png"
                ]
            }
        }
    ],
    "_e2_version": 4171,
    "_e2_ua_string": "Aegea 11.4 (v4171e)"
}