{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "Блоги: заметки с тегом cloud",
    "_rss_description": "Автоматически собираемая лента заметок, написанных в блогах на Эгее",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": false,
    "_itunes_explicit": "no",
    "home_page_url": "https:\/\/blogengine.me\/blogs\/tags\/cloud\/",
    "feed_url": "https:\/\/blogengine.me\/blogs\/tags\/cloud\/json\/",
    "icon": false,
    "authors": [
        {
            "name": "Илья Бирман",
            "url": "https:\/\/blogengine.me\/blogs\/",
            "avatar": false
        }
    ],
    "items": [
        {
            "id": "119839",
            "url": "https:\/\/stefaniuk.website\/all\/web-analytics-with-aws-lambda\/",
            "title": "Веб аналитика на коленке с помощью AWS",
            "content_html": "<p>Время от времени нам с друзьями приходят идеи различных проектов, которые было бы круто запустить. Но чтобы убедиться в жизнеспособности идеи нужно ее как-то проверить. Обычно для этого создаётся лендинг, на который нагоняется трафик и потом в аналитике смотрим, как ведут себя пользователи.<\/p>\n<p>В один из таких дней мы решили проверить очередную идею. Но в этот раз пользователь мог сделать много разных действий на сайте и их нужно было как-то отследить и проанализировать.<\/p>\n<p>Это не какая-то уникальная проблема, обычно для таких задач берут Google Tag Manager. Но никто из нас не умел им пользоваться да и желания изучать особо не было.<\/p>\n<p>И тут внезапно пришла идея как это сделать. Можно взять AWS Lambda, набросать на коленке пару строк кода, которые будут получать событие и куда-то их складывать  для дальнейшего анализа. Для места хранения метрик выбрал CloudWatch. Он как раз умеет анализировать разные метрики\/логи и строить красивые дашборды.<\/p>\n<p>Также хотелось получать письма на почту с информацией про самые важные события. Для этого взяли SNS.<\/p>\n<p>В итоге пользователь заходит на сайт, делает какое-то действие, оно летит в лямбду, которая просто кладет информацию в логи и отправляет сообщение в SNS. Дальше идем в CloudWatch и смотрим на дашборды и анализируем полученную информацию.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/stefaniuk.website\/pictures\/New-screenshot.png\" width=\"2268\" height=\"1488\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Актуальная аналитика<\/div>\n<\/div>\n<p>В итоге получилась относительно простая и даже гибкая аналитика, которую можно использовать сразу на нескольких проектах. Сейчас она обходиться в 0$, нам хватает одного миллиона бесплатных вызовов лямбды в месяц.<\/p>\n<p>Но я все же советую изучить и использовать готовые инструменты вместо того чтобы сидеть и делать свои велосипеды. Ведь это очень скользкий путь, в какой-то момент можно забыть для чего это делалось и бесконечно улучшать и допиливать, вместо того чтобы решать задачу.<\/p>\n",
            "date_published": "2021-08-04T12:58:43+05:00",
            "date_modified": "2023-06-03T05:07:04+05:00",
            "tags": [
                "cloud",
                "інструменти",
                "дешево і сердито"
            ],
            "author": {
                "name": "Bohdan Stefaniuk",
                "url": "https:\/\/stefaniuk.website\/",
                "avatar": "https:\/\/stefaniuk.website\/pictures\/userpic\/userpic@2x.jpg?1565716580"
            },
            "_date_published_rfc2822": "Wed, 04 Aug 2021 12:58:43 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "119839",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": null,
                "og_images": []
            }
        },
        {
            "id": "119842",
            "url": "https:\/\/stefaniuk.website\/all\/setup-new-ubuntu-vps\/",
            "title": "Настройка новой виртуальной машины",
            "content_html": "<p>Время от времени поднимаю виртуальные машины на убунту для своих проектов или экспериментов. Первое что я настраиваю — безопасность. Раньше у меня не было единого чек-листа и приходилось каждый раз гуглить. Поэтому решил сделать такой список и оставить у себя в блоге, чтобы обращаться к нему по мере необходимости.<\/p>\n<p><b>Чеклист<\/b><\/p>\n<ol start=\"1\">\n<li>Создать нового пользователя вместо root.<\/li>\n<li>Настроить доступ по ssh ключам.<\/li>\n<li>Отключить доступ по паролю для ssh.<\/li>\n<li>Отключить доступ для root через ssh.<\/li>\n<li>Заблокировать все порты в ufw, кроме 80, 22 и 443.<\/li>\n<li>(необязательно) Поменять ssh порт с 22 любой другой<\/li>\n<\/ol>\n<p><b>Terminal<\/b><\/p>\n<pre class=\"e2-text-code\"><code class=\"\"># Создаем нового пользователя и добавляем в группу sudo.\r\nadduser bstefaniuk\r\nusermod -aG sudo bstefaniuk\r\n\r\n# Копируем свой публичный ключ для нового пользователя.\r\nssh-copy-id bstefaniuk@vps-ip\r\n\r\n# Отключаем доступ по паролю и root для ssh.\r\nnano \/etc\/ssh\/sshd_config\r\n## Установить значения:\r\nPasswordAuthentication no\r\nPermitRootLogin no\r\n## Перезапустить службу\r\nsystemctl restart ssh\r\n\r\n# Настройка ufw\r\nufw default deny incoming\r\nufw default allow outgoing\r\nufw allow ssh\r\nufw allow 80\r\nufw allow 433\r\nufw enable\r\n## Проверяем что все ОК\r\nufw status<\/code><\/pre><p>В будущем хочу написать ansible-playbook скрипт, который будет все настраивать сам.<\/p>\n<p><a href=\"https:\/\/www.webservertalk.com\/ubuntu-firewall-how-to-configure-ufw\">Хороший мануал по ufw<\/a><br \/>\n<a href=\"https:\/\/www.digitalocean.com\/community\/tools\/nginx\">Генератор конфигураций nginx<\/a><br \/>\n<a href=\"https:\/\/maxkuznetsov.ru\/all\/deployment-users\/\">Deployment: настраиваем пользователей<\/a><\/p>\n",
            "date_published": "2020-12-26T23:54:46+05:00",
            "date_modified": "2023-06-03T05:08:48+05:00",
            "tags": [
                "cloud",
                "linux"
            ],
            "author": {
                "name": "Bohdan Stefaniuk",
                "url": "https:\/\/stefaniuk.website\/",
                "avatar": "https:\/\/stefaniuk.website\/pictures\/userpic\/userpic@2x.jpg?1565716580"
            },
            "_date_published_rfc2822": "Sat, 26 Dec 2020 23:54:46 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "119842",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": null,
                "og_images": []
            }
        },
        {
            "id": "119852",
            "url": "https:\/\/stefaniuk.website\/all\/gcp-databases\/",
            "title": "GCP: Databases",
            "content_html": "<p>Google Cloud Platform предоставляет большой выбор разных способов хранить данные. Некоторые из них построены на базе существующих продуктов, другие — собственная разработка гугла.<\/p>\n<p>Для начала нужно понять, что такое managed databases. Это услуга по настройке и администрированию баз данных. Облачный провайдер сам отвечает за работу сервера, установку патчей безопасности, доступность сервиса. Для того чтобы достичь такого же результата с помощью self hosted, нужно иметь в штате специалиста, который умеет администрировать сервера, закупить железо и подготовить инфраструктуру. В случае с managed databases платишь только за то количество ресурсов, которое используешь.<\/p>\n<h2>Cloud SQL<\/h2>\n<p>Cloud SQL это классический managed database сервис. Он позволяет развернуть 3 самые популярные базы данных. Такие как:<\/p>\n<ul>\n<li>MySQL (5.6, 5.7 и 8.0)<\/li>\n<li>PostgreSQL (9.6, 10, 11, 12)<\/li>\n<li>MS SQL Server 2017<\/li>\n<\/ul>\n<p>Также гугл гарантирует доступность базы данных на уровне 99,95%. Дополнительно получаем автоматическую репликацию и бекапы.<\/p>\n<p><b>Ограничения<\/b><\/p>\n<ul>\n<li>30 Tb хранилища<\/li>\n<li>60,000 IOPS<\/li>\n<li>624 Gb RAM<\/li>\n<li>Реплики БД только для чтения<\/li>\n<\/ul>\n<h2>Cloud Spanner<\/h2>\n<p>Spanner — реляционная база данных, разработка Google. Spanner позиционирует себя как горизонтально масштабируемая база данных, способна хранить петабайты информации, гарантирует строгую согласованность данных. А также доступность 99.999%.<\/p>\n<p>По своей природе Cloud Spanner это распределённая база данных с автоматическим шардированием и репликацией, которые скрыты под капотом. Чтобы создать БД, нужно выбрать локацию (region или multi-region) и количество нод. Количество нод влияет на размер данных, которые кластер способен хранить и его доступность. Каждая нода может обслуживать до 2 Тб данных.<\/p>\n<p>Пример кластера, который состоит из 4 нод. Каждая зона содержит полную копию базы данных и 4 процесса, которые обслуживают эти данные.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/stefaniuk.website\/pictures\/gcp-db-regional-instance-config.png\" width=\"734\" height=\"365\" alt=\"\" \/>\n<\/div>\n<p>Гугл советует иметь минимум 3 ноды для прода. Но есть один нюанс — цена. Cloud Spanner очень дорогое решение, созданное для работы с огромным количеством данных. За 1 петабайт данных прийдется отдать ......... 1 645 568 $ ......... в месяц.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/stefaniuk.website\/pictures\/gcp-db-spanner-price.png\" width=\"420\" height=\"327\" alt=\"\" \/>\n<\/div>\n<h2>Cloud Big Table<\/h2>\n<p>Столбцовая NoSQL база данных, которая масштабируется до миллиарда строк и тысяч колонок. Способна хранить петабайты информации.<\/p>\n<p>Основная фича — наличие интерфейса HBase и нативная поддержка Hadoop. Это позволяет перенести данные с собственного кластера в Big Table без каких либо изменений. Big Table идеально подойдёт для очень быстрой записи и чтения, а также хранения данных типа ключ\/значения, размер которых не превышает 10 Мб.<\/p>\n<p>Данные внутри базы данных лежат в огромных таблицах. Грубо говоря, таблица в HBase представлена в виде огромного словаря словарей. Таблица состоит из строк, каждая из которых обычно описывает одну сущность, и столбцов, которые содержат отдельные значения для каждой строки. Каждая строка индексируется одним ключом, а столбцы, которые связаны друг с другом, обычно группируются в семейство столбцов.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/stefaniuk.website\/pictures\/gcp-db-big-table.png\" width=\"658\" height=\"372\" alt=\"\" \/>\n<\/div>\n<p>Для более глубокого ознакомления советую прочитать главу «HBase» из книги «7 баз данных за 7 недель». Также советую ознакомится с <a href=\"https:\/\/cloud.google.com\/bigtable\/docs\/overview\">официальной документацией<\/a>.<\/p>\n<h2>Cloud Firestore<\/h2>\n<p>Cloud Firestore — это полностью управляемая,документоориентированная serverless база данных, предназначена для разработки serverless приложений. Структура данных сильно напоминает такую в MongoDB.<\/p>\n<p>Firestore поддерживает офлайн режим и живую синхронизацию. С помощью этих фич удобно строить приложения, которые предназначены для совместного использования, например, Google Docs или другие похожие варианты.<\/p>\n<p>А также она пришла на замену предыдущего сервиса — Cloud Datastore. В 2021 году гугл обещает автоматически всех мигрировать с Datastore на Firestore. Это возможно благодаря обратной совместировать с Datastore API.<\/p>\n<p>Firestore имеет два режива работы:<\/p>\n<ul>\n<li><b> Datastore mode<\/b>, создан для серверных приложений, совместим с Cloud Datastore. Поддерживает согласованность в конечном счёте.<\/li>\n<li><b>Native mode<\/b>, создан для веб и мобильных платформ. Поддерживает строгую согласованость и все основные фичи Firestore.<\/li>\n<\/ul>\n<p>Детальнее с режимами можно ознакомится в <a href=\"https:\/\/cloud.google.com\/firestore\/docs\/firestore-or-datastore\">официальной документации<\/a>.<\/p>\n<h2>Cloud Memorystore<\/h2>\n<p>Управляемый in-memory сервис, построенный на базе Redis и memcached.<\/p>\n<h2>Сравнение<\/h2>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/stefaniuk.website\/pictures\/gcp-db-compare.png\" width=\"961\" height=\"495\" alt=\"\" \/>\n<\/div>\n",
            "date_published": "2020-10-15T01:24:00+05:00",
            "date_modified": "2023-06-03T05:29:41+05:00",
            "tags": [
                "cloud",
                "google cloud platform",
                "бази даних"
            ],
            "author": {
                "name": "Bohdan Stefaniuk",
                "url": "https:\/\/stefaniuk.website\/",
                "avatar": "https:\/\/stefaniuk.website\/pictures\/userpic\/userpic@2x.jpg?1565716580"
            },
            "_date_published_rfc2822": "Thu, 15 Oct 2020 01:24:00 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "119852",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": null,
                "og_images": []
            }
        }
    ],
    "_e2_version": 4079,
    "_e2_ua_string": "Aegea 11.0 (v4079e)"
}