Рубрики
Без рубрики

Как начать свой блог на 20 центов

Для очень загруженных систем Serverless – это простой способ бесконечного масштабирования, а для боковых проектов это отличная возможность для бесплатного хостинга .. Tagged с AWS, Serverless, Python.

Деятельность веб-приложений неопределенна, иногда они обслуживают огромное количество рабочих нагрузок, но иногда они простаивают без большого количества запросов. Хостинг приложений на виртуальных машинах в облаке заставляет нас платить за простые времена. Чтобы решить такую проблему, мы должны смотреть на балансировку нагрузки, поиск DNS и автоматическое масштабирование. Трудно управлять всем этим и на Pet Projects оно делает нулевой смысл.

Безвесовые технологии находятся в несколько лет, и его популярность увеличивается каждый год. Для очень загруженных систем это простой способ бесконечного масштабирования, а для простых Pet Projects это отличная возможность для бесплатного хостинга. Это то, о чем это Longread все о.

Я никогда не был блоггером – на самом деле слово «блоггер» сам был своего рода клятвому слову для меня. Теперь у меня есть блог, который я пишу.

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

Блог как личный бренд

Личный бренд признан в определенных кругах. Информируемость сама по себе является скорее побочным эффектом и недостатком среды. Но вместе с этим приходит доверие аудитории – ресурс, который затем может быть преобразован во что-либо, в распространение и продвижение ваших идей в сеть, монетизация и т. Д.

Блог как витрина знаний

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

Увеличение вашей экспертизы

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

Блог увлекается

Блог – это мундштук, через который вы можете общаться с большой аудиторией по интересам для вас темы. Это способ помочь другим и сделать вашу жизнь более значимой. Это способ общаться с идеями, которые вы считаете важными.

Смертный (основанный FAAS)

Что это такое?

Это способ развертывать код без развертывания сервера. Мы возьмем нашу предопределенную функцию на Python (да, мы поговорим только о Python здесь), мы отправляем его в облако, и он работает там в песочнице, что сам облако предоставляет нам. Как эта функция работает, как контейнеры могут быть повторно использованы и т. Д., Зависит от поставщика и может быть изменен.

Несмотря на то, что этот метод называется Serverless, на самом деле не хватает сервера, у нас просто нет централизованного сервера. Но вместо того, чтобы куча децентрализованных услуг, опубликованных в облаке, и автоматически развернута, когда происходит желаемое событие.

Некоторые люди сравнивают серверу без сервиса, но это несколько разные концепции, хотя они близки в природе. Как правило, микросервис больше с точки зрения функциональных возможностей, так и ресурсов – в идеале каждое микросервис должно иметь собственную базу данных, центральную систему обмена сообщениями, и все, что ему необходимо работать независимо. Функция – это относительно небольшой кусок кода, который выполняет только одно действие в ответ на событие. В зависимости от того, как разработчики разделили нанесение, микросервис может быть эквивалентен функции (I.E. выполнять только одно действие) или может состоять из нескольких функций.

Мы Не пишите код Flask, любой код Django , ничего подобного. Время выполнения предоставляется облачной платформой, и она принимает решения для нас, платформа может повторно использовать предыдущие среды для ускорения ответа, балансировки нагрузки и т. Д.

Мы не платите за аренду сервера , но в то время, когда наш код выполнен, для миллисекунды, для которых обрабатывается наш запрос. Как Pay-As-You-Go. Это означает, что платеж за использование производится в зависимости от времени выполнения определенной функции. Вместо того, чтобы запустить сервер 24/7, вы можете размещать функции лямбда, и сервер будет работать только во время жизненного цикла запроса. Это отлично подходит для прототипов, поскольку вы платите за количество конкретных запросов, и если вы используете AWS Lambda, у вас есть 1 миллион абсолютно бесплатных (!) Запросов в месяц.

Мы Не храните состояние в функциях , мы не можем использовать глобальные переменные, мы не можем хранить что-то на жестком диске (технически это возможно, но это не имеет смысла и идет против самой концепции), мы можем использовать только внешние вещи – внешняя база данных, внешний кэш, внешнее хранение и т. Д. Благодаря этому, проблем с горизонтальным масштабированием, когда есть нагрузка и количество запросов. И все это позволяет нам прекратить обращать внимание на инфраструктуру и участвовать в реальной записи кода и деловой логики приложения.

Наш код вторично для инфраструктуры. Любое приложение по сути, по сути способ принимать пользовательские данные, делать что-то с ним, и поместите его где-то в той или иной форме. А в случае неверной инфраструктуры мы принимаем эту инфраструктуру, которая предлагает нам поставщики облачных услуг, и подключите эти услуги, которые уже имеют какую-то логику. Мы пишем функцию, которая берет, что пришло на веб-сервер и помещает его где-то в базе данных, и мы строим множество этих маленьких мостов. Наше приложение сейчас – это сетка небольших функций. Таким образом, код не является основой приложения, но является Клей, который связывает различные компоненты инфраструктуры Отказ При создании таких приложений разработка обычно начинается с инфраструктуры.

Конечно, есть недостатки.

Очевидно, что здесь мы становимся еще более зависимыми от продавцов, которые обеспечивают нам свою инфраструктуру. Так называемый Замок поставщика Отказ Функции, предназначенные для AWS, будут очень сложными для передачи, например, для Google Cloud. И не из-за самих функций, Python – это питон даже в Google, а скорее, потому что вы редко используете функции без сервеса в изоляции. Кроме того, вы будете использовать базу данных, очереди сообщений, системы регистрации и т. Д., которые полностью отличаются от одного производителя к другому. Однако даже эта функциональность может быть сделана независимой от поставщика облака, если вы хотите.

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

Другим недостатком является то, что цена превосходной масштабируемости заключается в том, что пока ваша функция не будет вызвана, она не запускается. И когда вам нужно запустить его, он может занять до нескольких секунд (холодный старт), который может быть критичным для вашего бизнеса/приложения.

Что может быть реализовано в такой инфраструктуре?

Не каждое приложение подходит для этого. Эта вещь не станет стандартом, это не следующий шаг в технологии Это не святой Грааль, но у него все еще очень, очень хорошая ниша, которую он заполняет.

Вы не можете делать длинные задачи, потому что поставщик ограничивает время, необходимое для выполнения функций (Amazon допускает до 15 минут). Таким образом, мы не можем взять и запустить веб-скребок и ждать его разбора сайтов в течение часа.

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

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

AWS LAMBDA

Один из руководителей рынка услуг FAAS сегодня AWS с его AWS LAMBDA SERVICE. Он поддерживает большое количество языков программирования (включая Ruby, Python, Go, Nodejs, C # и Java) и огромное количество услуг, которые позволяют нам решать довольно сложные многоуровневые задачи. AWS Lambda автоматически масштабируется по мере необходимости, в зависимости от запросов, полученных приложением. Таким образом, позволяя нам заплатить только тогда, когда мы будем потреблять его. Если наш код не работает, плата не взимается. Есть также свободный уровень ресурсов, которые могут быть использованы бесплатно, с ограничениями, конечно.

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

Для меня недостаток этой платформы цена, это какая-то случайная монета. Хотя они дают вам подробное описание того, что было взимается и их калькулятор цен, я часто удивлен цен. Различные внутренние передачи данных, использование ведра S3, лямбда вызовы, передачи данных между различными зонами доступности, даже если у вас есть все в одной зоне. Amazon обвиняет плату за все это, небольшую плату, но вы никогда не должны забывать.

Среди аналогов есть Функции Azure , Функции GCP , Яндекс Функции Отказ

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

Реализация функций Отказ Функция должна получить событие, содержащее информацию о запросе и контексте, содержащем некоторую информацию о времени выполнения. Здесь нет абстракций, Amazon не поддерживает, используя еще один бессмысленный DSL, вы можете использовать здесь родной Python.

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

Это удобно?

Не совсем. Даже для простых вещей, похоже, есть много, чтобы сделать и имею в виду.

Нам нужны рамки!

Существует несколько рамки, которые автоматизируют этот процесс и позволяют не прикоснуться к администратору Amazon и не делать ничего с ZIP-архивами.

Один из самых старых – это, вероятно, безмерная структура.

Смертные рамки

Для работы с Serverless Framework, нам нужно предоставить файл YML с конфигурацией Amazon. И файл Python с функцией для запуска. В файле Python мы пишаем функцию, которая фактически запускается в одном синтаксисе событий, статус контекста, который мы должны пройти. Мы должны описать триггеры, которые называют эту функцию.

Далее мы называем команду терминала, а магия фреймворка происходит – все упаковано, все загружено – развернуто одной командой. Результатом является конечная точка, которую мы можем позвонить и посмотреть, как работает наша функция.

Какие бессвесовые рамки делают:

  1. Управляет развертыванием и создает необходимые ресурсы (конечная точка Gateway API, IAM)
  2. Расширяемый через плагины
  3. Управляет требованиями упаковки

Но…

Написано в Node.js:( Это означает, что нам нужно установить его через NPM со всеми такими проблемами Node.js и огромным папкой Node_Modules.

Zappa

Zappa – это оригинальная неверная библиотека Python Python. Первоначально он был предназначен как Django-Zappa, библиотека, которая позволяет развертывать веб-приложения Django на AWS Lambda. С тех пор он вырос много раз и теперь поддерживает любую WSGI-совместимую веб-каркас Python. Он также расширил набор функций и в значительной степени включен в комплект батареи для создания, развертывания и управления веб-приложениями без сервеса, написанных на Python.

Zappa разработан как безвесочная рамка. Существует файл конфигурации под названием zappa_settings.json который описывает конфигурацию для развертывания. Существует файл Python, в котором вы записываете всю колбу приложения. И тогда Zappa позволяет нам принимать это приложение для колба и загружать его на облако AWS без малейшего изменения. С помощью одной команды вы можете отправить приложение Flask в облако, и он начнет работать там. Вы можете перенести свои текущие проекты без каких-либо модификаций (ну почти).

Это то, что я сделал.

Мой блог имеет древнюю историю, первоначально у меня было размещено на цифровой камене, которую они в какой-то момент просто трахались после регулярного обслуживания. Несмотря на резервные копии, я не восстановил его и оставил его некоторое время. Затем я вернулся к проекту и переместил его в AWS EC2 в той же форме без каких-либо изменений. Весь проект начался с Docker Rharm с развертыванием контейнера приложения с колбой и MongoDB. После получения первого счета я думал о стоимости вещей в этом мире. Поэтому я решил переехать с моим очень простой приложением на платформу без сервеса.

И переехал в aws lambda с Zappa Framework.

Первый вопрос, который должен был ответить, был …

Где хранить состояние?

Самый простой вариант – использовать Dynamodb в том же AWS – это управляемая база данных NoSQL с настраиваемой производительностью. Вы будете взиматься по количеству ударов к нему, и у них есть довольно своеобразный синтаксис.

Это то, что я сделал изначально. Чтобы помнить план B и не переходить на новое решение, я внедрил некоторый аналог DAO Pattern для инкапсуляции логики доступа к базам данных. Счет-фактура стала приятнее, но для моего дела с использованием распределенной базы данных для хранения пары постов звучит как очень глупое представление. И это все еще стоит мне много денег.

В конце концов, я пришел к взлому хранения штата на AWS S3. Я не изобрел это, я посмотрел это. Есть разные способы хранения штата:

A. Самый простой способ – использовать SQLite и хранить базу данных SQLite на S3

Это работает так:

  1. Входящий запрос на балансировщик AWS вызывает функциональный триггер в это время на ведре S3 – ваша база данных в файле.
  2. Lambda начинает загрузку базы данных из пакета S3, сохраняет его в памяти. Это делает некоторые запросы.
  3. Лямбда заставляет его обратно на ведро, а затем возвращает запрос.

Вот довольно популярный пакет для этого sqlalchemy-s3sqlite Отказ

Работает в миллисекундах. Это действительно делает.

B. Другой вариант – использовать так называемые реализации S3FS. Таким образом, мы получаем интерфейс файловой системы для нашего ковша S3. Вот пример библиотеки, которую вы можете использовать S3FS. .

C. Пользовательское глупое решение. Вы догадались правильно – это мой выбор. Еще не думаю, что это была хорошая идея, но я слишком ленив, чтобы что-то с этим делать.

Вот как выглядит моя архитектура в конце концов.

И структура кода. Вы, вероятно, будете иметь свой собственный, поэтому я не буду подробно рассказывать. Это просто простое приложение для колба с шаблоном шаблона Jinja2 и автозапись администратора. Там вы можете увидеть Дао Модуль здесь, который выдержал все издевательства в течение некоторого времени.

blog
├── admin.py
├── app.py
├── consts.py
├── server.py
├── static
│ ├── admin.bundle.js
│ ├── client.bundle.js
│ ├── css
│ ├── img
│ └── js
├── templates
├── utils
│ ├── dao
│ │ ├── dynamo.py
│ │ ├── mongo.py
│ │ └── s3.py
│ ├── __init__.py
│ └── utils.py
└── zappa_settings.json

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

Ценообразование

Возможно, этот момент имеет наибольший интерес для многих.

Итак, вы получаете 1 миллион запросов AWS Lambda в месяц бесплатно, в ближайшие миллион обойдется вам 20 центов/мс. Вы также получаете 1 миллион запросов на Gateway API бесплатно. То есть при низком трафике вы не можете платить вообще или оплачивать только трафик (а AWS планирует так же). За всю жизнь моего блога на AWS Lambda я заплатил от 0 до 1 доллара в месяц, в зависимости от фазы Луны. Моя ситуация на сто процентов может быть оптимизирована количеством запросов и инфраструктуры, которую я использую, но ваша ситуация, вероятно, будет отличаться.

Спасибо за чтение!

Любые вопросы? Оставьте свой комментарий ниже, чтобы начать фантастические обсуждения!

Проверить мой блог или прийти, чтобы сказать привет 👋 на Twitter или подписаться на Мой телеграмма канал . Спланируйте свой лучший!

Оригинал: “https://dev.to/luminousmen/how-to-start-your-blog-for-20-cents-3j48”