Как стать автором
Обновить
-23
0

Пользователь

Отправить сообщение

Лучшие практики для деплоя высокодоступных приложений в Kubernetes. Часть 1

Время на прочтение13 мин
Количество просмотров28K

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

Функциональность, которая не доступна в Kubernetes «из коробки», здесь почти не будет затрагиваться. Также мы не будем привязываться к конкретным CD-решениям и опустим вопросы шаблонизации/генерации Kubernetes-манифестов. Рассмотрены только общие правила, касающиеся того, как Kubernetes-манифесты могут выглядеть в конечном итоге при деплое в кластер.

Читать далее
Всего голосов 57: ↑56 и ↓1+66
Комментарии19

Синхронизация баз данных между монолитом и микросервисами с помощью Kafka. Наше решение

Время на прочтение4 мин
Количество просмотров8K
В этой статье я расскажу про готовое решение для поддержки консистентности данных между растущей микросервисной и унаследованной архитектурой. Под катом код для репликации двух баз данных с проверкой синхронизации, который может пригодиться для решения аналогичных задач.


Читать дальше →
Всего голосов 10: ↑10 и ↓0+10
Комментарии9

Скринкаст терминала с помощью asciinema

Время на прочтение4 мин
Количество просмотров5.1K


Вы наверняка знакомы с asciinema (github), это удобный опенсорсный инструмент для записи действий в терминале. Записи сохраняются в простом для чтения текстовом формате, поэтому весят совсем немного, а веб-плеер по сути воспроизводит текст из терминала вместо видео, так что любой кусок можно скопировать и использовать. Готовый материал можно загрузить в одно нажатие на asciinema.org или сначала отредактировать локально. Плеер можно встроить на сайт буквально в три строки, бонусом прилагаются всякие плюшки с оформлением и совместимостью, и вообще по совокупности всех фич (и отсутствия головной боли) asciinema давно перерос все аналоги. Вот только есть несостыковка: записи в проекте называют asciicasts, по аналогии со скринкастами — но возможности стримить сессию в реальном времени не было несколько лет, пока не вышел релиз 2.0, в котором с помощью нового формата файлов удалось реализовать на удивление стабильную и удобную раздачу на любой терминал в реал-тайме. О том, как это работает, о подводных камнях и перспективах — под катом.
Читать дальше →
Всего голосов 16: ↑15 и ↓1+24
Комментарии4

Запускаем Rust-приложение на мобильной ОС Аврора

Время на прочтение15 мин
Количество просмотров11K

Всем привет! Меня зовут Шамиль, я ведущий инженер-разработчик в КРОК. Помимо всего прочего мы в компании занимаемся ещё и разработкой мобильных приложений для операционной системы Аврора, есть даже центр компетенций по ней.

Для промышленной разработки мы, конечно же, пока используем связку C++ и QML, но однажды подсев на "ржавую" иглу Rust, я не мог не попробовать применить свой любимый язык программирования для написания мобильных приложений. В этой статье я опишу эксперимент по написанию простейшего приложения на Rust, предназначенного для запуска на мобильном устройстве под управлением вышеупомянутой ОС. Сразу оговорюсь, что легких путей я не искал – эксперименты проводил на сертифицированной версии Авроры, которая добавила огонька в этот процесс. Но, как говорится, только защищённая ОС, только хардкор.

Пара выходных у меня ушла только на то, чтобы запустить минимальное консольное приложение (речь о нём пойдёт в первой части), ещё пара дней – на эксперименты с графическим интерфейсом, выбор оптимального подхода и запуск приложения с GUI (этому посвящена вторая часть повествования). В итоге получился минимальный “скелет” мобильного приложения, готового к сборке и запуску, на который при желании уже можно наращивать “мясо”.

Читать далее
Всего голосов 35: ↑35 и ↓0+35
Комментарии9

Логическая репликация в PostgreSQL. Репликационные идентификаторы и популярные ошибки

Время на прочтение42 мин
Количество просмотров53K
image

Начиная с 10 версии, перенести данные с одной базы PostgreSQL на другую несложно, с обновлением, без обновления — неважно. Об этом немало сказано и сказанное сводится к следующему: на мастере, 10 версии и выше, устанавливаем параметр конфигурации wal_level="logical". В pg_hba.conf добавляем такую строку:

host    db_name    postgres    192.168.1.3/32     trust

Затем рестартуем на мастере postgres и выполняем на реплике из-под пользователя postgres:

pg_dumpall --database=postgres --host=192.168.1.2 --no-password --globals-only --no-privileges | psql
pg_dump --dbname db_name --host=192.168.1.2 --no-password --create --schema-only | psql

Теперь подключаемся на мастере пользователем postgres к базе db_name и создаём публикацию:

CREATE PUBLICATION db_pub FOR ALL TABLES;

а на реплике создаём подписку:

CREATE SUBSCRIPTION db_sub CONNECTION 'host=192.168.1.2 dbname=db_name' PUBLICATION db_pub;

По завершении репликации переключаем приложение или балансировщик на новую базу.

Теперь вы знаете постгрес (и с какой стороны доить слонеску) и можете идти устраиваться ДБА.
Для любознательных есть пара небольших деталей под катом.
Читать дальше →
Всего голосов 8: ↑7 и ↓1+9
Комментарии4

Наследование компонентов в Angular: простой способ решить проблему с Dependency Injection

Время на прочтение2 мин
Количество просмотров8K

Итак, собственно проблема: порой у нас в проекте есть много похожих компонентов, с одинаковой логикой, одинаковыми DI, свойствами итд и возникает мысль: а почему бы не вынести все это дело в базовый компонент (точнее директиву) абстрактным классом, а остальные компоненты уже наследовать? На самом деле мысль хорошая, принцип DRY соблюдается, имеем один источник истины, при изменении той самой общей логики не придется прыгать по всем компонентам итд.

Но есть один нюанс: эти злосчастные конструкторы. Нужно в каждом наследуемом компоненте передавать все DI в конструктор родителя.

Читать далее
Всего голосов 6: ↑6 и ↓0+6
Комментарии7

Вам (вероятно) нужны liveness и readiness probes

Время на прочтение13 мин
Количество просмотров52K

Один из самых частых вопросов, которые мне задают как консультанту это: “В чем разница между liveness и readiness пробами?”. Следующий самый частый вопрос: “Какие из них нужны моему приложению?”.

Любой, кто пробовал за Duck Duck Go-ить этот вопрос знает, что на него непросто найти ответ в интернете. В этой статье, надеюсь, я смогу помочь вам ответить на эти вопросы самостоятельно. Я поделюсь своим мнением о том, каким образом лучше использовать liveness и readiness пробы в приложениях развернутых в Red Hat OpenShift. И я предлагаю не строгий алгоритм, а, скорее, общую схему, которую вы можете использовать для принятия своих собственных архитектурных решений.

Read more
Всего голосов 8: ↑7 и ↓1+8
Комментарии4

Снова про мониторинг продуктов: как Postman избавляет поддержку от написания кода

Время на прочтение3 мин
Количество просмотров3.7K

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

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

Читать далее
Всего голосов 4: ↑4 и ↓0+4
Комментарии0

Load Average в Linux: разгадка тайны

Время на прочтение18 мин
Количество просмотров227K


Средние значения нагрузки (Load averages) — это критически важная для индустрии метрика. Многие компании тратят миллионы долларов, автоматически масштабируя облачные инстансы на основании этой и ряда других метрик. Но на Linux она окутана некой тайной. Отслеживание средней нагрузки на Linux — это задача, работающая в непрерываемом состоянии сна (uninterruptible sleep state). Почему? Я никогда не встречал объяснений. В этой статье я хочу разгадать эту тайну, и создать референс по средним значениям нагрузки для всех, кто пытается их интерпретировать.

Читать дальше →
Всего голосов 127: ↑125 и ↓2+123
Комментарии25

Что такое Жизнь во Вселенной: четыре базовых принципа вместо трёх характерных функций

Время на прочтение29 мин
Количество просмотров20K

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

(Является переводом довольно любопытной научной статьи от 16 апреля 2020 года).

Читать далее
Всего голосов 18: ↑18 и ↓0+18
Комментарии19

Графика в терминале

Время на прочтение3 мин
Количество просмотров31K
Эта история началась, когда я узнал о существовании bpytop. Меня поразила детализация графиков и я начал разбираться как это сделано. Оказалось, что для вывода графиков использовались символы алфавита Брайля, представляющие из себя комбинацию из 8 точек: 2 точки в ширину и 4 точки в высоту. Поискав готовые решения, использующие этот подход, я нашел на реддите анонс такого проекта. В первом же комментарии анонса я прочитал:
Это конечно круто, но почему люди просто не переоткроют для себя ReGIS (векторную графику в терминале) и sixel (пиксельную графику в терминале).
До этого момента я ничего не знал про sixel. Копнув глубже я выяснил, что в теории sixel должен поддерживаться xterm-ом. Я запустил xterm на своей ubuntu 20.04 в режиме эмуляции vt340

xterm -xrm "XTerm*decTerminalID: vt340" -xrm "XTerm*numColorRegisters: 256"

выполнил вот такую команду (convert это команда из пакета imagemagick)

clear && convert <(curl -s https://upload.wikimedia.org/wikipedia/en/7/7d/Lenna_%28test_image%29.png) sixel:-

и увидел вот это:

image
Вау, работает!
Читать дальше →
Всего голосов 115: ↑115 и ↓0+115
Комментарии51

Линукс-порт Far Manager: прогресс за 4 года

Время на прочтение5 мин
Количество просмотров69K
Первая публикация исходников far2l, порта Far Manager под Линукс — штуки, которая когда-то считалась принципиально невозможной — состоялась 10 августа 2016го. Поскольку главный разработчик поговаривает о переходе проекта в статус беты, решил написать обзорный пост, как там идут дела и чего удалось добиться за прошедшие четыре года.

Консольная версия


Первый же вопрос, который все задавали и здесь, и на опеннете, и на лоре — а чего не в консоли? Изначально far2l действительно работал только в графическом режиме, через wxWidgets. Это оказалось самым простым способом быстро получить работающий порт со всеми пользовательскими удобствами: иксовым буфером обмена и всеми сочетаниями клавиш, причем с поддержкой событий не только KeyDown, но и KeyUp.

Сейчас это ограничение в прошлом: far2l прекрасно себя чувствует в консоли. Более того, там появились так называемые расширения терминала far2l, поэтому если запускать консольный far2l внутри графического (например, зайдя куда-нибудь по ssh), они «сконнектятся» между собой, и внутренний far2l тоже будет видеть и буфер обмена (с разрешения пользователя, конечно), и все возможные горячие клавиши. Более того, сделана даже специальная сборка putty, позволяющая наслаждаться всеми этими фишками из Windows.

Вот, смотрите, это far2l в GNOME Terminal


Читать дальше →
Всего голосов 178: ↑177 и ↓1+234
Комментарии585

Резервное копирование конфигурации ресурсов в Kubernetes

Время на прочтение3 мин
Количество просмотров4.5K

Администраторы кластеров kubernetes сталкиваются с задачей сохранить конфигурацию ресурсов из пространства имен и перенести в другой кластер, или же сделать резервную копию нестабильной тестовой площадки. С этой задачей без проблем справляется бегло написанный в терминале односторчный скрипт с утилитой kubectl, но что если надоело каждый раз тратить пару минут времени на очередное написание скрипта. Так и появилась утилита kube-dump, по сути это утилита которая умеет только одно - дампить ресурсы кластера.

Читать далее
Всего голосов 7: ↑7 и ↓0+7
Комментарии6

Как мы сэкономили 2000 USD на трафике из Amazon S3 с помощью nginx-кэша

Время на прочтение6 мин
Количество просмотров18K

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

Читать далее
Всего голосов 45: ↑43 и ↓2+53
Комментарии27

Создание минимального Docker-контейнера для Go-приложений

Время на прочтение4 мин
Количество просмотров49K
Привет, Хабр! Предлагаю вашему вниманию перевод статьи основателя сервиса Meetspaceapp Nick Gauthier «Building Minimal Docker Containers for Go Applications».

Время чтения: 6 минут

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

Часть 1: Наше «приложение»


Для тестирования нам потребуется какое-нибудь маленькое приложение. Давайте будем фетчить google.com и выводить размер HTML.

package main

import (
    "fmt"
    "io/ioutil"
    "net/http"
    "os"
)

func main() {
    resp, err := http.Get("https://google.com")
    check(err)
    body, err := ioutil.ReadAll(resp.Body)
    check(err)
    fmt.Println(len(body))
}

func check(err error) {
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }
}

Если мы запустимся, то получим только какое-то число. У меня вышло около 17К. Я целенаправленно решил использовать SSL, но причину объясню позднее.
Читать дальше →
Всего голосов 23: ↑20 и ↓3+17
Комментарии10

Как тебе такое, Джефф Безос?

Время на прочтение10 мин
Количество просмотров50K

Большинство читателей Хабра наверняка слышали о магазине Amazon Go, где нет кассиров, а покупателей обслуживает автоматика. О китайских магазинах Bingo Box, быть может, вы тоже слышали и даже делали там покупки. Теперь магазин с полностью автоматизированной системой покупок заработал и в России. Технологическую начинку разработала команда инноваций X5 Retail Group (#x5lab), а  запуск реализовали специалисты торговой сети «Пятёрочки», которые открывают новые магазины каждый день по всей России. Но этот случай оказался особенным – открытие первой полностью автоматизированной «Пятёрочки» происходит не каждый день.

Кстати, статья ни разу не маркетинговая - обеим командам было просто интересно рассказать о том, почему, когда и как проект был реализован. Под катом - история "Пятерочки #налету" от А до Я, включая фотографии и информацию, которых нет в общем доступе. Ну и поговорим о планах, как же без этого. 

Читать далее
Всего голосов 80: ↑68 и ↓12+80
Комментарии354

Морская губка как вдохновение для будущих небоскребов, мостов и космических кораблей

Время на прочтение9 мин
Количество просмотров9.6K


При упоминании словосочетания «морская губка» у кого-то в голове может возникнуть образ крайне популярного мультипликационного персонажа. Однако у лучшего работника Красти Краб нет ничего общего с его реальным прототипом. Визуально разные виды морских губок выглядят по-разному: древнегреческие амфоры, замысловатые духовые инструменты, высохшие ветки деревьев, причудливые цветы и т.д. Но за внешним обликом скрывается невероятно сложная клеточная структура, которая привлекает внимание научного сообщества уже не первый год. Исследователи из Гарвардского университета в своем недавнем труде выяснили, что структурные особенности строения морских губок могут послужить вдохновением для более прочных и высоких небоскребов, более длинных мостов и сверхлегких космических кораблей. Почему структура морской губки уникальная, каковы ее механические характеристики, и какие результаты показали прототипы, созданные на базе полученных данных? Ответы на эти вопросы мы найдем в докладе ученых. Поехали.
Всего голосов 38: ↑38 и ↓0+38
Комментарии15

Загадочная прочность стеклянного скелета морской губки

Время на прочтение4 мин
Количество просмотров13K

Живущая в глубинах Тихого океана стеклянная губка обладает поразительной способностью противостоять сжатию и сгибанию, не говоря уже о других её необычных свойствах



Морская губка «Венерина цветочная корзина»

В 1841 английский биолог Ричард Оуэн с изумлением изучал замысловатый скелет недавно открытой морской губки, обитающей вблизи Филиппин. Он писал, что её скелет «напоминает изысканный рог изобилия», сотканный из «жёстких, блестящих эластичных нитей, чего-то вроде тончайших волосков кручёного стекла». Скелет и правда был стеклянным – это животное, Euplectella aspergillum, прозванное «венериной цветочной корзинкой», изготавливает его при помощи кислоты, извлекаемой из морской воды.
Читать дальше →
Всего голосов 28: ↑26 и ↓2+35
Комментарии12

Как установить Kubernetes на сервер Ubuntu без Docker

Время на прочтение3 мин
Количество просмотров13K
image

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

Я говорю о самой установке инструмента управления контейнерами. Вы, конечно, не можете развернуть Kubernetes так же, как когда-то — установив Docker в качестве среды выполнения.

Вместе мы сейчас попробуем установить  Kubernetes на Ubuntu Server 20.04 без Docker-а.
Читать дальше →
Всего голосов 8: ↑4 и ↓4+3
Комментарии8

Хостим Bitwarden — open-source менеджер паролей

Время на прочтение5 мин
Количество просмотров83K


Менеджеры паролей действительно полезны и важны как для отдельных пользователей, так и для организаций, и они пригодятся, когда у вас много разных учетных записей и паролей. Обычно люди не любят пользоваться сторонними менеджерами паролей с сервисной архитектурой — неизвестно, что происходит с данными на чужом сервере, и не будет ли он скомпрометирован. Самое безопасное решение это разместить менеджер на своём собственном (как следует защищенном) сервере. Разумеется, к такому self-hosted варианту возникает много требований, и большой список решений с открытым исходным кодом довольно быстро сужается до нескольких известных, проверенных продуктов. Среди них мне больше всего нравится Bitwarden, и сейчас я объясню почему.
Читать дальше →
Всего голосов 35: ↑35 и ↓0+35
Комментарии42
1
23 ...

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность