Рубрика «системное администрирование» - 21

Постоянно мы чистим IP-адреса, разбираемся с поставками оборудования, управляем командой, ставим приоритеты разработки и делаем ещё кучу вещей внутри хостинга. Я хочу рассказать про то, как это выглядит с позиции операционного директора.

Есть три уровня управления VDS-хостингом: стратегический, когда вы выбираете, что за продукт вы делаете, какое железо и у кого покупаете и в какие ЦОДы и на каких условиях встаёте, — по сути, это формирование ДНК хостинга. Есть операционный — это рутина вроде «отбить диапазон IP-адресов, который попыталась заблокировать Сони», «опять железо застряло на границе» или «админ заболел, кого поставить в смену», «сложный тикет третьей линии». Например, на уровне ДНК мы решаем, что нужно заменить поддержку на разработку (чтобы клиент мог сам всё решать из личного кабинета), а на уровне тактики уже определяем, как именно это сделать.

Управление хостингом: вид из головы тактика - 1

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

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

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

Так что добро пожаловать в рубрику «Хостер наконец-то пишет про хостинг в своём корпоративном блоге»… Читать полностью »

Сегодня, в третьей части серии материалов, посвящённых разработке серверов на Go, мы займёмся реализацией нашего REST-сервера с использованием Gin — одного из самых популярных веб-фреймворков для Go. Вот код, который мы будем тут обсуждать.

Перевод предыдущих частей:
Разработка REST-серверов на Go. Часть 1: стандартная библиотека.
Разработка REST-серверов на Go. Часть 2: применение маршрутизатора gorilla/mux

Разработка REST-серверов на Go. Часть 3: использование веб-фреймворка Gin - 1
Читать полностью »

Практические истории из наших SRE-будней. Часть 4 - 1

Это уже четвёртая в общей сложности, но первая в 2021-м году подборка занятных случаев из нашей практики эксплуатации разнообразной инфраструктуры. Она затронет такие технологии, как ClickHouse вместе с ZooKeeper (в их контексте также напомню про недавно описанную нами аварию), MySQL (да, снова будем обновлять эту СУБД), DNS в Kubernetes (любимая многими тема, но здесь всё дело в сторонней утилите…). Поехали!

Читать полностью »

Есть такой сабреддит — /r/nononoyes, где публикуют видео, в которых происходит что-то такое, что, на первый взгляд, кажется ужасно неправильным, идущим к катастрофе. Но в конце всё, чудесным образом, заканчивается хорошо.

В том сабреддите хорошо смотрелась бы команда [ -z $var ].

О неоправданно хорошей работе [ -z $var ] - 1
Читать полностью »

Если вы когда-нибудь пробовали воспользоваться в цикле чтения while командой ssh, или, точно так же, командами ffmpeg или mplayer, это значит, что вы сталкивались с неожиданным поведением такого цикла: он, после первой итерации, таинственным образом прекращал работать!

Буферы и окна: подробности о тайне ssh и цикла чтения while - 1

Решение этой проблемы, в случае с ssh, заключается в использовании конструкций ssh -n или ssh < /dev/null, на которые мгновенно «ругается» ShellCheck (тут можно посмотреть на результаты анализа кода с этими конструкциями). На этом можно было бы и остановиться, ведь проблема решена, но мы этого делать не будем. Лучше — детально разберём причины этой проблемы.
Читать полностью »

Мессенджер в «почтовой корове»? Дайте — два - 1


Рано или поздно очередной «исследователь» бюджетных альтернатив MS Exchange сталкивается с почтовым сервером из Германии – mailcow. Кто-то, не замечая, «проносится» мимо, кто-то, «притормаживая», знакомится ближе. Находятся и те, кто идёт дальше и разворачивает данное почтовое решение в своей ИТ-инфраструктуре. Например – я, который в середине 2020 года мигрируя с сервисов Google, внедрил «почтовую корову» у себя, разместив основную и резервную площадки на виртуальных вычислительных ресурсах географически разнесённых дата-центров RUVDS.
Читать полностью »

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

Shell-скрипт, который удалил базу данных, и история о том, как ShellCheck мог бы помочь это предотвратить - 1
Читать полностью »

Знали ли вы о том, что следующий bash-скрипт способен выполнять произвольный код, который предоставит ему пользователь в ответ на запрос скрипта о вводе данных?

В bash безобидная с виду конструкция [[ $var -eq 42 ]] умеет выполнять и произвольный код - 1
Читать полностью »

Бэкдор в Win 10 Tweaker, или современные методы борьбы с пиратством - 1

Читать полностью »

Недавно я мимоходом отметил, что errno был, в целом, хорошим интерфейсом в Unix-системах до появления в них многопоточности. Кого-то подобное высказывание может удивить, поэтому сегодня предлагаю поговорить о сильных и слабых сторонах errno в традиционных Unix-окружениях, таких, как V7 Unix.

Заметки о Unix: сильные и слабые стороны errno в традиционных Unix-окружениях - 1

Сильной стороной errno является тот факт, что этот интерфейс представляет собой простейший механизм, способный возвращать несколько значений из системных вызовов C, в которых нет непосредственной поддержки возврата нескольких значений (особенно — в ранних вариантах C). Использование глобальной переменной для «возврата» второго значения — это практически идеал того, что можно сделать в обычном C, если только не планировать передачу из C-библиотеки указателя на каждый системный вызов и функцию, которые собираются возвращать значение errno (при таком подходе придётся, например, интенсивно пользоваться stdio). Постоянная передача подобного указателя приводит не только к ухудшению внешнего вида кода. Такой подход увеличивает объём кода, и, из-за использования дополнительного параметра, приводит к повышению нагрузки на стек (или на регистры).
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js