Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и фармацевтические компании для принятия решений и поиска заменителей. Как раз в это время я обновлял свои знания о Google Cloud Platform (GCP), и мне показалось, что Вселенная хочет, чтобы я создал этот инструмент с помощью сервисов GCP!
Эта приборная панель уже работает, и вы можете посмотреть ее по адресу: www.medalarm.info.
Как и к другим проектам в моем стартапе, к этому я подошел с точки зрения итерационного подхода к управлению продуктом и подумал о различных версиях, которые могут достичь минимальных требований проекта, и постепенно наращивал их. Я документировал весь этот процесс с точки зрения управления продуктом и технической сборки, что и стало этой серией практических уроков по GCP. Эта серия не предполагает каких-либо предварительных знаний об облаке или GCP и ориентирована на конкретную цель, то есть если что-то не имеет отношения к цели проекта, то это, как правило, только вскользь или вообще не упоминается.
В первой части я расскажу о бизнес-проблеме, которую мы решаем, и о том, как выглядит первая версия. С точки зрения сборки, я представляю учебник по: Google Cloud Storage, Big Query и Data Studio, как я создаю статическую версию решения.
Во второй части я автоматизирую все шаги в решении версии 1 и сделаю так, чтобы приборная панель обновлялась автоматически. Для этого я подробнее расскажу о Google Cloud Functions, Big Query Python APIs и Cloud Scheduler.
В части 3 я улучшу архитектуру, добавив DataFlow и Cloud Composer, и переделаю панель визуализации на Python.
Проблема бизнеса
Перебои в глобальной цепи поставок COVID имеют тяжелые последствия для нехватки лекарств. Врачам и фармацевтическим компаниям необходимо знать, какие лекарства и как долго находятся в дефиците, чтобы принимать решения, например, о назначении альтернативных препаратов или изменении параметров клинических исследований.
Австралийская администрация терапевтических товаров (TGA) публикует список дефицита лекарств в Австралии на своем сайте, но информация представлена в виде длинной таблицы без визуализации. Мы хотим создать интерактивную приборную панель BI, которая будет получать данные TGA, но позволит пользователям увидеть проблемы цепочки поставок в более красивой графике.
Решения
Основным требованием бизнеса является визуализация данных в интерактивной приборной панели, поэтому каждая версия нашего продукта будет отвечать этой бизнес-цели. Каждая версия также полностью функциональна и пригодна для отправки.
MVP Версия 1 - автономная приборная панель
V1.0: Одноразовая статическая версия приборной панели, которая получает данные из TGA один раз и представляет их в виде приборной панели.
Компоненты:
Эта архитектура не соответствует лучшей практике... пока. Это будет исправлено по мере добавления новых компонентов в следующих частях.
Шаг 1 - Создание RSS-фидера с помощью Python
Приведенный ниже код Python извлекает необходимую нам информацию с сайта TGA. Сначала мы обратимся к RSS-каналу, который возвращает XML-файл. XML включает название лекарства, причину нарушения цепи поставок и ссылку на то, где мы можем найти даты нарушения. Нам нужно найти даты в коде, лежащем в основе ссылки на лекарство. Код на языке Python использует эти библиотеки:
Шаг 2 - Введите большой запрос!
Big Query - это жемчужина GCP. Это решение для корпоративного хранилища данных, позволяющее анализировать петабайты данных. Однако мы используем его для очень маленького набора данных, который мы создали на предыдущем шаге.
BigQ - это типичное OLAP-хранилище данных, предназначенное для быстрой аналитики огромных объемов данных. Оно может получать данные из различных источников, хранить их в колоночной и распределенной системе хранения и выполнять SQL-запросы. Все это управляется GCP, то есть нет необходимости предоставлять хранилище или вычисления.
В этой версии продукта мы будем вручную загружать CSV-файл. В следующей версии мы автоматизируем этот шаг с помощью API Big Query Python. Также в этой версии мы не будем следовать лучшей практике хранения копии необработанных данных в хранилище и загрузки оттуда. Мы отправляемся прямо в BigQ. Мы будем совершенствовать эту архитектуру по мере создания решения в следующей части.
Чтобы загрузить файл, сначала создайте новый набор данных, затем добавьте таблицу. Это можно сделать в графическом интерфейсе или с помощью Cloud Shell. Cloud Shell - это удивительный инструмент, который дает вам очень быстрый доступ к виртуальной машине для быстрого запуска интерфейса командной строки. Это эквивалентно запуску виртуальной машины (Compute Engine) и последующему выводу ее из эксплуатации после завершения работы.
bq mk TGA_medalert_dataset
Вы также можете сделать это с помощью графического интерфейса пользователя:
Затем создайте таблицу в наборе данных.
Используя графический интерфейс пользователя: щелкните на меню опций набора данных и выберите создать таблицу.
Схема указывает нашей реляционной базе данных (BigQuery), какие колонки данных являются ее столбцами. Задать схему вручную часто лучше, чем позволить BigQuery автоматически определить ее, но это тоже вариант. Кроме того, формат даты должен быть YYYY-MM-DD, чтобы BigQuery разобрал вводимые данные как DATE.
Поскольку наш CSV имеет строку заголовка, в опции Advanced мы установим для строк заголовка значение 1. Вообще говоря, разделение и кластеризация таблицы базы данных очень важны для получения хорошей производительности при работе с большими данными. Вы можете узнать об этом здесь. Однако для нашего небольшого набора данных это не критично.
Вы можете просматривать таблицу и выполнять запросы после ее создания
Давайте выполним очень простой запрос, чтобы увидеть различные описания и количество каждого из них. Обратите внимание, что BigQuery будет взимать плату в зависимости от объема обрабатываемых данных, о чем вы получите предварительный просмотр в правом верхнем углу перед выполнением запроса.
Теперь давайте выделим все данные и перейдем в Data Studio для визуализации.
Шаг 3 - Приборная панель с помощью Data Studio
Итак, мы собрали данные с сайта TGA, поместили их в структурированный формат CSV и загрузили в таблицу Big Query SQL. Теперь мы хотим визуализировать эти данные. Для этой версии продукта я сделаю очень простую визуализацию, а не окончательный отполированный продукт. Но помните, что каждая версия должна быть пригодна для отправки, поэтому нам нужно построить временную шкалу, пусть и не очень красивую.
На рынке существует множество хороших информационных панелей для бизнес-аналитики (BI). Возможно, вы работали с Tableau, который является наиболее развитым по функциональности (и самым дорогим). Data Studio от GCP бесплатна, и ее очень легко освоить. В опциях легко разобраться, а также имеется растущий каталог визуализаций, созданных сообществом, из которого можно выбирать. Однако она не предлагает такого уровня сложности, как Tableau. Поэтому мое эмпирическое правило - начать с бесплатного инструмента Data Studio, а если вы столкнетесь с препятствиями при визуализации, тогда ищите альтернативы. В последующих частях этого руководства мы рассмотрим визуализацию с помощью Dash, чтобы получить очень индивидуальный вид.
Хотя это очень базовая визуализация, для первой версии она подойдет. Нажмите "сохранить", а затем "поделиться".
Это переводит нас из "вида проводника" в "вид отчета". Здесь я могу добавить больше элементов, чтобы отчет выглядел лучше. Здесь я добавил несколько текстовых полей, ссылки, а также еще одну диаграмму.
Нажмите на выпадающее меню "поделиться" и выберите "Вставить отчет", поскольку мы хотим вставить его в веб-страницу HTML. В качестве альтернативы мы можем просто поделиться ссылкой на отчет, но это будет выглядеть не так красиво (особенно в будущих версиях).
Вы получите iframe для встраивания в ваш веб-сайт
Также убедитесь, что ссылка общедоступна. Снова нажмите на "поделиться" и перейдите на вкладку "Управление доступом", затем выберите опцию "Любой человек в Интернете может найти и просмотреть".
Шаг 4- Статическая веб-страница с облачным хранилищем Google
В завершение давайте создадим HTML-страницу и разместим ее на GCP. Поскольку эта версия продукта представляет собой только статический веб-сайт, мы можем использовать ведра Google Cloud Storage для быстрого развертывания. Для этого шага мы в основном следуем приведенному здесь руководству.
Наш файл "index.html" будет содержать только ссылку на отчет (здесь я изменил размеры:
<!DOCTYPE html>
<html>
<body>
<iframe width="1200" height="900" src="https://datastudio.google.com/embed/reporting/cbd5b1ef-c0e5-4786-aa6b-2c26dd6b4853/page/XRHoC" frameborder="0" style="border:0" allowfullscreen></iframe>
</body>
</html>
Давайте разместим это на GCS. Сначала выберите домен, на котором вы будете размещать это. Для нас это www.medalarm.info. Я использовал Google Domains, чтобы купить его, но любой менеджер доменов будет работать так же.
Создайте ведро GCS с именем вашего домена верхнего уровня, поэтому для нас это должно быть "medalarm.info" (не "www.medalarm.info"). Перейдите в Cloud Storage и создайте ведро. Вы также можете использовать CLI. Что касается опций:
Загрузите файл index.html в ведро
Поскольку нам нужен интернет для доступа к этому ведру, нам нужно добавить для него новое разрешение. Добавьте для "allUsers" новое разрешение "Storage Object Viewer". Это сделает ведро общедоступным для всего интернета.
Теперь давайте направим сюда трафик для нашего домена. Для этого нам нужно добавить DNS-запись CNAME в нашем доменном менеджере. Я добавил ее в Google Domains. Используйте приведенные ниже параметры для добавления записи. Как и при любом изменении DNS-записи, дайте час или около того, чтобы запись распространилась по интернету. Вы всегда можете проверить свои маршруты здесь
Последний шаг - добавить указатели главной страницы и страницы 404 в ведро, чтобы при обращении пользователя к этим адресам GCS знал, куда направить трафик. Мы не разрабатывали 404 для нашего сайта, но мы можем указать главную страницу на index.html.
Устранение неполадок на этом шаге может быть сложным, вы можете обратиться к этому списку для устранения неполадок.
Мы закончили работу над первой версией нашего продукта! Он удовлетворяет все основные потребности клиентов, но есть много улучшений, которые мы можем применить к нему. Процесс все еще очень ручной, приборная панель не обновляется автоматически, а наши сроки... ну, это не совсем сроки. Я исправлю все эти проблемы в следующих версиях.
Вы можете продолжить во второй части, где мы добавим динамические обновления и сделаем весь процесс автоматическим.
20.08.2023 18:21
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в 2023-2024 годах? Или это полная лажа?".
20.08.2023 17:46
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
19.08.2023 18:39
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в частности, магию поплавков и гибкость flexbox.
19.08.2023 17:22
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для чтения благодаря своей простоте. Кроме того, мы всегда хотим проверить самые последние возможности в наших проектах!
18.08.2023 20:33
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий их языку и культуре.
14.08.2023 14:49
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип предназначен для представления неделимого значения.