Что такое Микро Сервисы
Доброго времени суток всем форумчанам, сегодня наконец дошли руки до того, чтобы поведать вам всем о микросервисах.
Итак, что это такое? Для начала нужно уяснить, что есть 2 основные архитектуры постройки web приложений: монолитная и микросервисная. При монолитной архитектуре ты собираете какое-то N-ое число своих функций и классов в одно приложение, подключëнное к единой базе данных. Это прекрасное решение, если у тебя лëгкий небольшой проект, в котором не предполагается длительная поддержка кодовой базы. Данный подход поможет максимально быстро собрать MVP (минимально жизнеспособный продукт), но при длительной поддержки становится крайне трудно вносить изменения и нововведения (твои прошлые костыли ломаются, а багов становится всё больше и больше).
- А что там с микросервисами? https://www.docker.com/get-started/7. Благодаря нему ты сможешь создать минимальную среду для работы твоей программы, именуемый контейнером. Как же собрать своë приложение в docker? Делается это достаточно просто, есть много шаблонов под разные ЯП, в этой статье я буду показать на примере python с фреймворком flask. Для начала разберëмся, как этот контейнер устроен. А на самом деле его структура, как Ханойская башня. По сути своей есть первый слой - ОС, с минимальным количеством софта, служб и прочего шлака. Дальше идëт какая-нибудь абстракция например ЯП, БД или какая другая утилита, например Nginx. А уже третим слоем мы переносим в эту среду все файлы нашего приложения-сервиса и устанавливаем нужные зависимости. Ты можешь взять чистый контейнер с Ubuntu и накидать в него хоть впн, хоть react app, хоть среду для обучения пентесту. Всё ограничивается только твоими знаниями, что впрочем можно сказать про любое направление программирования.
Итак, практика, соберëм наш "Hello, World!" на Flask в Docker контейнер
from flask import Flask
from flask import request, jsonify
app = Flask(__name__)
@app.route('/', methods=['POST','GET'])
def home():
return b"Hello, World!"
if __name__ == '__main__':
from waitress import serve
serve(app, port=9753)
blinker==1.6.2
click==8.1.6
colorama==0.4.6
Flask==2.3.2
itsdangerous==2.1.2
Jinja2==3.1.2
MarkupSafe==2.1.3
waitress==2.1.2
Werkzeug==2.3.6
# Выбираем образ от которого наследоваться
FROM python:3.10
# Устанавливаем переменную среды для предотвращения вывода буфера при стандартных операциях ввода/вывода
ENV PYTHONUNBUFFERED 1
# Создаем и переходим в рабочую директорию
RUN mkdir /app
WORKDIR /app
# Копируем все файлы приложения
COPY . /app/
# Устанавливаем зависимости с помощью pip
RUN pip install --no-cache-dir -r requirements.txt
# Команда для запуска приложения
CMD [ "python", "main.py" ]
Итак, в принципе я комментариями к коду всë расписал, но сделаю акцент на ключевых словах
- FROM- импорт образа, на базе которого ты будешь деплоить своë приложение
- RUN- выполнение команды в bash
- WORKDIR- выбор рабочей директории
- COPY- копирование (почему не через bash, потому что она не имеет доступ к памяти вне контейнера)
- CMD - что-то типо финальной команды для запуска всего приложения
- Хм, а как это запустить?
docker build
docker run -p 9753:9753 my-first-image
- А если несколько контейнеров и их нужно вместе запускать?
- В таком случае поможет docker-compose, конечно, есть ещё Kubernetes. Но это уже для продвинутых и нереальное сложных систем, где может быть несколько одинаковых микросервисов запущенных на разных серверах, нагрузка между которыми балансирует Nginx, а запускается этим самым Kubernetes. https://vipadmin.club/bot-redirect?https://endway.org/lanutrix/
ТОП Записей
Также смотрите
Компиляции на python, как и зачемКонсольное приложение для безлимитного и бесплатного общения с CHATGPT 4.0Формула стабильных денег (2023)💸 Актуальные абузы Тинькоff банкаГайд по бруту. База для новичка.[Алексей Голобурдин] [stepik] Основы компьютерных и веб-технологий с Python от Диджитализируй (2021)