statpan

История разработки проекта LegiNote 2 - стек технологий и воркеры

  • Язык написания: Корейский
  • Страна: Все страныcountry-flag
  • ИТ

Создано: 2024-08-20

Создано: 2024-08-20 00:04

Здравствуйте, это StatPan.

Я пишу о разработке сайд-проекта LegiNote.

Предыдущую часть можно найти по следующей ссылке.



Базовая архитектура

История разработки проекта LegiNote 2 - стек технологий и воркеры

Дизайн Leginote, предоставленный 태양토끼


Leginote разрабатывается как веб-сервис, и планируется использовать следующий стек технологий.

Фронтенд: Svelte

Бэкенд: Rust (серьёзно рассматривается rupring, но может измениться)

Воркер: Go (стремление к использованию только стандартной библиотеки, за исключением необходимых зависимостей)

Анализ данных: Python (от предварительной обработки до последующей интеграции искусственного интеллекта)

Из этого стека, я планирую сосредоточиться на разработке воркера и анализа данных, которые являются моими основными областями вклада, и публиковать записи о разработке.

Начнем с обсуждения воркера.


Воркер

Выбор языка


История разработки проекта LegiNote 2 - стек технологий и воркеры

логотип golang

Я начал программировать на Python, и поскольку моя текущая основная работа связана с областью Data Science, язык Python мне наиболее знаком. Однако, зная только скриптовые языки, у меня появилось желание освоить надёжные компилируемые языки, поэтому я заинтересовался Go и Rust.

В последнее время язык, за которым я особенно следил, был Rust. Когда Rust упоминается, обычно рядом с ним стоят C++ и Golang. (Конечно, C++ — отличный язык, но в разработке подобных сетевых сервисов я его не рассматривал. В будущем, если дело не дойдет до работы с внутренностями фреймворков глубокого обучения, я не уверен, буду ли я его использовать напрямую.)

Изучив Rust и Golang, а также попробовав их в действии для простых сетевых запросов, я кратко определил их сильные и слабые стороны. Подробно разбирать их плюсы и минусы в этой статье не буду, так как это растянет текст. Лучше будет посвятить этому отдельную статью. Если коротко, то…

В области сетевых технологий, для конфигурации без дополнительных зависимостей и для проекта с неопределённым будущим, в котором неясно, будет ли он приносить прибыль,Golangбыл выбран в качестве языка разработки.


Роль воркера

История разработки проекта LegiNote 2 - стек технологий и воркеры

Экран OpenAPI

Роль воркера заключается в периодическом сборе и обновлении данных через сайт OpenAPI. Его работу можно разделить на три части:

1. Настройка логики сбора для конкретной информации

2. Настройка запускающего механизма для выполнения логики сбора

3. Загрузка собранных данных в базу данных

Цель — расширять этот процесс, применяя эти три шага к различным данным API.



Схема организации проекта

Существует множество архитектурных подходов к организации проекта. В частности, использование фреймворков позволяет начать проект с уже готовой структуры. Однако, как уже упоминалось, в этом проекте целью является минимизация зависимостей, поэтому я решил структурировать проект, разбив его на папки по функциональности, максимально приближенно к описанной выше логике.

Проект будет организован следующим образом:

leginote-worker-bill/
├── main.go
├── api/
│ └── client.go
├── db/
│ ├── connection.go
│ └── repository.go
├── util/
│ ├── error.go
│ └── runner.go

│ └── config.go
├── worker/
│ └── worker.go
├── go.mod
└── go.sum


api — логика взаимодействия с OpenAPI для сбора данных. Так как в данный момент используется только один основной API, папка содержит только один файл клиента.

db — определена логика взаимодействия с базой данных. Внутри connection реализовано только подключение, а в repository — логика выполнения различных запросов upsert. Сами SQL-запросы пока находятся в коде, но в будущем я планирую вынести их в отдельные файлы.

util — здесь определена различная вспомогательная логика. error — это временный скрипт для удобной обработки результатов ошибок Go. Как будет видно из последующих статей, он станет причиной значительного количества побочных эффектов (?).

Файл config предназначен для чтения файла .env без использования сторонних пакетов, поэтому в нём реализована функция чтения файла .env.

worker — здесь находится основная логика, которая использует логику api и db для выполнения нужных действий. В будущем, при увеличении количества воркеров, нужно будет увеличивать и количество файлов в этой папке, но пока здесь реализован только один основной воркер.


В дальнейшем планируется развивать код, придерживаясь принципов многоуровневой архитектуры.


Зависимости проекта

pq для работы с PostgreSQL

sqlx для выполнения запросов



Завершение работы над воркером

Кажется, что просто перечислять теорию без кода может быть скучно, и я сам начинаю немного уставать. Поэтому, пожалуй, закончим на этом.

Вот и завершается вторая часть. Надеюсь, в третьей части мы сможем добавить хотя бы строчку кода и обсудить её.




В процессе разработки LegiNote, если вам нужны какие-либо функции или у вас есть вопросы о разработке, пожалуйста, оставляйте комментарии!

Комментарии0

Опыт участия в проектах с открытым исходным кодомЭта статья делится опытом участия в проектах с открытым исходным кодом и вдохновляет на преодоление страха и совершение первого шага. Она рассказывает о процессе обретения уверенности и роста, начиная с небольших улучшений.
seungwon
seungwon
seungwon
seungwon

May 3, 2025

[Для неспециалистов, выживание разработчика] 14. Краткое изложение часто задаваемых вопросов на техническом собеседовании для начинающих разработчиковМы обобщили и систематизировали часто задаваемые технические вопросы на собеседовании для начинающих разработчиков (области памяти, структуры данных, базы данных и т. д.). Надеемся, что это поможет вам подготовиться к собеседованию по разработке.
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

April 3, 2024

LLM для младших школьниковПонятное объяснение концепции LLM даже для младших школьников! LLM — это ИИ, который отвечает текстом на текстовые вопросы, выполняя различные задачи, такие как кодирование и анализ изображений. Сегодня разработчики используют ИИ как инструмент.
Sunrabbit
Sunrabbit
Sunrabbit
Sunrabbit

March 4, 2025

[1 день] Веселое создание игры с помощью ИИПредставляем дневник разработки 100-этажной подземельной игры, создаваемой с помощью ИИ на Javascript, HTML и CSS. В настоящее время реализуются система города, подземелий и сражений; на данный момент завершены создание события генерации персонажа и функ
꼬반
꼬반
꼬반
꼬반

November 8, 2024

29.11.2024 Поздние новости: платная подписка на Replit / Хорошие привычки в разработке ПОВ записи блога от 29 ноября 2024 года мы делимся опытом использования платной подписки на Replit и представляем 10 хороших привычек в разработке программного обеспечения. Обсуждаются стратегии эффективного кодирования и рефакторинга, а также важность тес
Charles Lee
Charles Lee
Charles Lee
Charles Lee

November 29, 2024

[Не из IT, но разработчик] 16. Полезные советы по составлению портфолио для начинающих разработчиковМы поделимся советами по составлению портфолио для начинающих разработчиков. Важно подробно описать опыт работы над проектами и свои навыки разработки, а также четко указать, какие сервисы были разработаны.
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

April 3, 2024