<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Блоги: заметки с тегом cloud</title>
<link>https://blogengine.me/blogs/tags/cloud/</link>
<description>Автоматически собираемая лента заметок, написанных в блогах на Эгее</description>
<author></author>
<language>ru</language>
<generator>Aegea 11.0 (v4079e)</generator>

<itunes:subtitle>Автоматически собираемая лента заметок, написанных в блогах на Эгее</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit>no</itunes:explicit>

<item>
<title>Веб аналитика на коленке с помощью AWS</title>
<guid isPermaLink="false">119839</guid>
<link>https://stefaniuk.website/all/web-analytics-with-aws-lambda/</link>
<pubDate>Wed, 04 Aug 2021 12:58:43 +0500</pubDate>
<author>Bohdan Stefaniuk</author>
<comments>https://stefaniuk.website/all/web-analytics-with-aws-lambda/</comments>
<description>
&lt;p&gt;&lt;a href="https://stefaniuk.website/"&gt;Bohdan Stefaniuk&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;Время от времени нам с друзьями приходят идеи различных проектов, которые было бы круто запустить. Но чтобы убедиться в жизнеспособности идеи нужно ее как-то проверить. Обычно для этого создаётся лендинг, на который нагоняется трафик и потом в аналитике смотрим, как ведут себя пользователи.&lt;/p&gt;
&lt;p&gt;В один из таких дней мы решили проверить очередную идею. Но в этот раз пользователь мог сделать много разных действий на сайте и их нужно было как-то отследить и проанализировать.&lt;/p&gt;
&lt;p&gt;Это не какая-то уникальная проблема, обычно для таких задач берут Google Tag Manager. Но никто из нас не умел им пользоваться да и желания изучать особо не было.&lt;/p&gt;
&lt;p&gt;И тут внезапно пришла идея как это сделать. Можно взять AWS Lambda, набросать на коленке пару строк кода, которые будут получать событие и куда-то их складывать  для дальнейшего анализа. Для места хранения метрик выбрал CloudWatch. Он как раз умеет анализировать разные метрики/логи и строить красивые дашборды.&lt;/p&gt;
&lt;p&gt;Также хотелось получать письма на почту с информацией про самые важные события. Для этого взяли SNS.&lt;/p&gt;
&lt;p&gt;В итоге пользователь заходит на сайт, делает какое-то действие, оно летит в лямбду, которая просто кладет информацию в логи и отправляет сообщение в SNS. Дальше идем в CloudWatch и смотрим на дашборды и анализируем полученную информацию.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://stefaniuk.website/pictures/New-screenshot.png" width="2268" height="1488" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Актуальная аналитика&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;В итоге получилась относительно простая и даже гибкая аналитика, которую можно использовать сразу на нескольких проектах. Сейчас она обходиться в 0$, нам хватает одного миллиона бесплатных вызовов лямбды в месяц.&lt;/p&gt;
&lt;p&gt;Но я все же советую изучить и использовать готовые инструменты вместо того чтобы сидеть и делать свои велосипеды. Ведь это очень скользкий путь, в какой-то момент можно забыть для чего это делалось и бесконечно улучшать и допиливать, вместо того чтобы решать задачу.&lt;/p&gt;
</description>
</item>

<item>
<title>Настройка новой виртуальной машины</title>
<guid isPermaLink="false">119842</guid>
<link>https://stefaniuk.website/all/setup-new-ubuntu-vps/</link>
<pubDate>Sat, 26 Dec 2020 23:54:46 +0500</pubDate>
<author>Bohdan Stefaniuk</author>
<comments>https://stefaniuk.website/all/setup-new-ubuntu-vps/</comments>
<description>
&lt;p&gt;&lt;a href="https://stefaniuk.website/"&gt;Bohdan Stefaniuk&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;Время от времени поднимаю виртуальные машины на убунту для своих проектов или экспериментов. Первое что я настраиваю — безопасность. Раньше у меня не было единого чек-листа и приходилось каждый раз гуглить. Поэтому решил сделать такой список и оставить у себя в блоге, чтобы обращаться к нему по мере необходимости.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Чеклист&lt;/b&gt;&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Создать нового пользователя вместо root.&lt;/li&gt;
&lt;li&gt;Настроить доступ по ssh ключам.&lt;/li&gt;
&lt;li&gt;Отключить доступ по паролю для ssh.&lt;/li&gt;
&lt;li&gt;Отключить доступ для root через ssh.&lt;/li&gt;
&lt;li&gt;Заблокировать все порты в ufw, кроме 80, 22 и 443.&lt;/li&gt;
&lt;li&gt;(необязательно) Поменять ssh порт с 22 любой другой&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;b&gt;Terminal&lt;/b&gt;&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;# Создаем нового пользователя и добавляем в группу sudo.
adduser bstefaniuk
usermod -aG sudo bstefaniuk

# Копируем свой публичный ключ для нового пользователя.
ssh-copy-id bstefaniuk@vps-ip

# Отключаем доступ по паролю и root для ssh.
nano /etc/ssh/sshd_config
## Установить значения:
PasswordAuthentication no
PermitRootLogin no
## Перезапустить службу
systemctl restart ssh

# Настройка ufw
ufw default deny incoming
ufw default allow outgoing
ufw allow ssh
ufw allow 80
ufw allow 433
ufw enable
## Проверяем что все ОК
ufw status&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;В будущем хочу написать ansible-playbook скрипт, который будет все настраивать сам.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.webservertalk.com/ubuntu-firewall-how-to-configure-ufw"&gt;Хороший мануал по ufw&lt;/a&gt;&lt;br /&gt;
&lt;a href="https://www.digitalocean.com/community/tools/nginx"&gt;Генератор конфигураций nginx&lt;/a&gt;&lt;br /&gt;
&lt;a href="https://maxkuznetsov.ru/all/deployment-users/"&gt;Deployment: настраиваем пользователей&lt;/a&gt;&lt;/p&gt;
</description>
</item>

<item>
<title>GCP: Databases</title>
<guid isPermaLink="false">119852</guid>
<link>https://stefaniuk.website/all/gcp-databases/</link>
<pubDate>Thu, 15 Oct 2020 01:24:00 +0500</pubDate>
<author>Bohdan Stefaniuk</author>
<comments>https://stefaniuk.website/all/gcp-databases/</comments>
<description>
&lt;p&gt;&lt;a href="https://stefaniuk.website/"&gt;Bohdan Stefaniuk&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;Google Cloud Platform предоставляет большой выбор разных способов хранить данные. Некоторые из них построены на базе существующих продуктов, другие — собственная разработка гугла.&lt;/p&gt;
&lt;p&gt;Для начала нужно понять, что такое managed databases. Это услуга по настройке и администрированию баз данных. Облачный провайдер сам отвечает за работу сервера, установку патчей безопасности, доступность сервиса. Для того чтобы достичь такого же результата с помощью self hosted, нужно иметь в штате специалиста, который умеет администрировать сервера, закупить железо и подготовить инфраструктуру. В случае с managed databases платишь только за то количество ресурсов, которое используешь.&lt;/p&gt;
&lt;h2&gt;Cloud SQL&lt;/h2&gt;
&lt;p&gt;Cloud SQL это классический managed database сервис. Он позволяет развернуть 3 самые популярные базы данных. Такие как:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MySQL (5.6, 5.7 и 8.0)&lt;/li&gt;
&lt;li&gt;PostgreSQL (9.6, 10, 11, 12)&lt;/li&gt;
&lt;li&gt;MS SQL Server 2017&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Также гугл гарантирует доступность базы данных на уровне 99,95%. Дополнительно получаем автоматическую репликацию и бекапы.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Ограничения&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;30 Tb хранилища&lt;/li&gt;
&lt;li&gt;60,000 IOPS&lt;/li&gt;
&lt;li&gt;624 Gb RAM&lt;/li&gt;
&lt;li&gt;Реплики БД только для чтения&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Cloud Spanner&lt;/h2&gt;
&lt;p&gt;Spanner — реляционная база данных, разработка Google. Spanner позиционирует себя как горизонтально масштабируемая база данных, способна хранить петабайты информации, гарантирует строгую согласованность данных. А также доступность 99.999%.&lt;/p&gt;
&lt;p&gt;По своей природе Cloud Spanner это распределённая база данных с автоматическим шардированием и репликацией, которые скрыты под капотом. Чтобы создать БД, нужно выбрать локацию (region или multi-region) и количество нод. Количество нод влияет на размер данных, которые кластер способен хранить и его доступность. Каждая нода может обслуживать до 2 Тб данных.&lt;/p&gt;
&lt;p&gt;Пример кластера, который состоит из 4 нод. Каждая зона содержит полную копию базы данных и 4 процесса, которые обслуживают эти данные.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://stefaniuk.website/pictures/gcp-db-regional-instance-config.png" width="734" height="365" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Гугл советует иметь минимум 3 ноды для прода. Но есть один нюанс — цена. Cloud Spanner очень дорогое решение, созданное для работы с огромным количеством данных. За 1 петабайт данных прийдется отдать ......... 1 645 568 $ ......... в месяц.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://stefaniuk.website/pictures/gcp-db-spanner-price.png" width="420" height="327" alt="" /&gt;
&lt;/div&gt;
&lt;h2&gt;Cloud Big Table&lt;/h2&gt;
&lt;p&gt;Столбцовая NoSQL база данных, которая масштабируется до миллиарда строк и тысяч колонок. Способна хранить петабайты информации.&lt;/p&gt;
&lt;p&gt;Основная фича — наличие интерфейса HBase и нативная поддержка Hadoop. Это позволяет перенести данные с собственного кластера в Big Table без каких либо изменений. Big Table идеально подойдёт для очень быстрой записи и чтения, а также хранения данных типа ключ/значения, размер которых не превышает 10 Мб.&lt;/p&gt;
&lt;p&gt;Данные внутри базы данных лежат в огромных таблицах. Грубо говоря, таблица в HBase представлена в виде огромного словаря словарей. Таблица состоит из строк, каждая из которых обычно описывает одну сущность, и столбцов, которые содержат отдельные значения для каждой строки. Каждая строка индексируется одним ключом, а столбцы, которые связаны друг с другом, обычно группируются в семейство столбцов.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://stefaniuk.website/pictures/gcp-db-big-table.png" width="658" height="372" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Для более глубокого ознакомления советую прочитать главу «HBase» из книги «7 баз данных за 7 недель». Также советую ознакомится с &lt;a href="https://cloud.google.com/bigtable/docs/overview"&gt;официальной документацией&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Cloud Firestore&lt;/h2&gt;
&lt;p&gt;Cloud Firestore — это полностью управляемая,документоориентированная serverless база данных, предназначена для разработки serverless приложений. Структура данных сильно напоминает такую в MongoDB.&lt;/p&gt;
&lt;p&gt;Firestore поддерживает офлайн режим и живую синхронизацию. С помощью этих фич удобно строить приложения, которые предназначены для совместного использования, например, Google Docs или другие похожие варианты.&lt;/p&gt;
&lt;p&gt;А также она пришла на замену предыдущего сервиса — Cloud Datastore. В 2021 году гугл обещает автоматически всех мигрировать с Datastore на Firestore. Это возможно благодаря обратной совместировать с Datastore API.&lt;/p&gt;
&lt;p&gt;Firestore имеет два режива работы:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt; Datastore mode&lt;/b&gt;, создан для серверных приложений, совместим с Cloud Datastore. Поддерживает согласованность в конечном счёте.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Native mode&lt;/b&gt;, создан для веб и мобильных платформ. Поддерживает строгую согласованость и все основные фичи Firestore.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Детальнее с режимами можно ознакомится в &lt;a href="https://cloud.google.com/firestore/docs/firestore-or-datastore"&gt;официальной документации&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Cloud Memorystore&lt;/h2&gt;
&lt;p&gt;Управляемый in-memory сервис, построенный на базе Redis и memcached.&lt;/p&gt;
&lt;h2&gt;Сравнение&lt;/h2&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://stefaniuk.website/pictures/gcp-db-compare.png" width="961" height="495" alt="" /&gt;
&lt;/div&gt;
</description>
</item>


</channel>
</rss>