close

Вход

Забыли?

вход по аккаунту

?

Системный администратор №12 декабрь 2015

код для вставки
Разработчик для Windows Phone
№12(157) декабрь 2015
Платформа RabbitMQ
Используем сервер очередей
#Здоровье online
Угрозы трекинга
показателей здоровья
VPN. IPSec. Linux
Построение
корпоративных VPN
Клиент-серверное
приложение для Android
Первые шаги в тестировании
Установка и настройка JMeter
Промышленная виртуализация
с помощью Virtuozzo 7
Электронная почта
ИТ-инфраструктура
Мониторинг
Windows Exchange 2013
ManageEngine ServiceDesk Plus
Мониторинг блокировок в Oracle
Используем встроенные
средства резервного копирования
для обеспечения сохранности данных
Как с помощью ManageEngine
ServiceDesk Plus можно решить задачи,
стоящие перед ИТ-подразделением
Практический опыт диагностики
DML-блокировок, которые наиболее
характерны в базе данных
а
х
е
п
с
у
я
Добейс
#10(53) декабрь
2015
вместе с нами!
Подвод им ит оги
2015 год. Покой
всем нам
только снился...
Антикризисные
технологии
Современная вер
сия
сказки про стр
ойк у
Редакция журналов «Системный
администратор» и «БИТ.
Бизнес&Информационные технологии»
приглашает к сотрудничеству агентов
по продаже подписок на «Системный
администратор»
и «БИТ».
БИТ. Персона
Илья Массух,
президент Фонда
информационн
ой
демократии
Бор
Б
ори
о
рис
ис Шар
Ша
Ш
аров,
ов
в,
ггене
ене
е
нер
не
нер
ер
рал
аль
ьны
ный
ны
й дир
ди е
ект
кто
ор
р
к мпа
ком
па
пан
ан
нии
ни
ии
и
и«
«До
Доккто
тор Веб
тор
Ве »
ISSN
ISSN
S
23
2 13
231313-87
8718
18
18
Мы ждем инициативных,
коммуникабельных, нацеленных
на результат людей. Возраст,
образование, пол, рост, вес
и местожительство значения не имеют.
http
ht
h
tt
ttp:/
t
t ://bi
/bi
bit
it.
i
it
t.sa
t
t.
. m
mag.r
ag.r
.ru
u
Зарегистрироваться на программу можно
по ссылке: https://goo.gl/Ag9JV0
Подробности акции смотрите на сайте
http://samag.ru
Разработчик для
Win
nd
do
dow
ow
ws
w
s Pho
Ph ne
ne
№12(157) декабрь 2015
или по телефону: +7 (499) 277-12-41
(Олег Иванов) с 11-00 до 18-00
Платформа RabbitM
Q
Используем серв
ер очередей
#Здоровье online
Угрозы трекинга
показателей здоровь
я
VPN. IPSec. Linux
Построение
корпоративных VPN
График работы свободный.
Товар – достойный!
Доход – 20% от суммы продаж.
Клиент-серверное
приложение для And
roid
Первые шаги в тес
тировании
Установка и настрой
ка JMeter
Промышленн
с помощью Vir
ая виртуализа
ция
tuozzo 7
Электронная почта
Windows Exchange
ИТ-инфраструктура
2013
ManageEngine Servi
Используем встроенные
средства резервного
копирования
для обеспечения сохра
нности данны
ceDe
х
sk Plus
Как с помощью Manag
eEngine
ServiceDesk Plus можно
решить задачи,
стоящие перед ИТ-по
дразделением
Мониторинг
Мониторинг блокиров
ок в Oracle
Практический опыт
диагностики
DML-блокировок, которы
е наиболее
характерны в базе
данных
В номере
22
24
58
22
АДМИНИСТРИРОВАНИЕ
Виртуализация
04
внешней SD-карты было поддержано большинством производителей устройств.
Промышленная виртуализация с помощью
Virtuozzo 7. Наработки компании Parallels, давно доступные
Александр Свириденко
Инструменты
в рамках открытого проекта OpenVZ, находят свой путь в основной
код ядра Linux к общей выгоде сообщества и разработчиков.
Денис Силаков
24
Облачные технологии
07
Особенности удаления файлов с внешней SDкарты в Android. В Android 4.4 ограничение на использование
Построение корпоративных VPN. Часть 9. VPN,
IPSec и Linux. Рассмотрим вопросы по организации IPSec VPN
на Linux – прохождение трафика через iptables, команды управления, статистику работы IPSec.
Основы облачного хранилища данных Ceph.
Часть 2. Установка кластера. Продолжаем разбираться
с программно-определяемым хранилищем данных Ceph. Теперь
установим простейший кластер Ceph.
Рашид Ачилов
29
Инструменты для SCCM 2012 R2. Благодаря им недостатки устраняются, создавая комфортные условия централизованного
управления конфигурациями ИТ-инфраструктуры предприятия.
Андрей Маркелов
Сергей Болдин
Продукты и решения
Электронная почта
12
Обзор NAKIVO Backup & Replication. Резервное
копирование и репликация для VMware. Рассмотрим
32
продукт NAKIVO Backup & Replication – решение для резервного
копирования, репликации и восстановления виртуальных машин
VMware.
Управление почтовыми ящиками Exchange 2013.
Бюджетные внедрения Exchange подразумевают отказ от дополнительных средств резервного копирования, однако и встроенные
средства обеспечивают достаточную сохранность данных.
Александр Пичкасов
ИТ-инфраструктура
БЕЗОПАСНОСТЬ
14
ManageEngine ServiceDesk Plus. Часть 2. Обзор
возможностей. Как с помощью ManageEngine ServiceDesk Plus
Событие
можно решить задачи, стоящие перед ИТ-подразделением.
Дмитрий Голосов
37
ZeroNights 2015 в Москве. В конце ноября в столице состоялась конференция ZeroNights 2015.
How to
21
Андрей Бирюков
Удаленный мониторинг Linux-серверов с GKrellM.
Рассмотрим пример использования утилиты GKrellM для удаленного мониторинга серверов Linux из среды Windows.
Даниил Прахин
2
Угрозы
38
#Здоровье online. Угрозы трекинга показателей
здоровья. Информационная безопасность – это процесс обе-
декабрь 2015 системный администратор
В номере
спечения целостности, конфиденциальности и доступности информации. В наше время автомобилей, «напичканных» электроникой,
систем «умных домов» и всевозможных IoT-девайсов обеспечение
информационной безопасности становится делом обеспечения безопасности жизнедеятельности.
КАРЬЕРА/ОБРАЗОВАНИЕ
Аlma mater российских ИТ
64
Денис Макрушин
Механизмы защиты
40
щая кафедрой «Бизнес-информатика» Финансового университета
при Правительстве Российской Федерации.
Шифраторы, они же криптовирусы, они же вымогатели. В фильме «Кто я» с Томом Шиллингом в главной роли есть
Рынок труда
эпизод, когда герои взламывают правительственную организацию
с помощью письма с вредоносным вложением.
Виталий Земских
Наталья Алтухова: «Я верю в своих студентов,
и, судя по результатам их обучения и последующего трудоустройства, они не обманывают моих
надежд!» В гостях у «Системного администратора» – заведую-
69
БАЗЫ ДАННЫХ
Вакансия: разработчик мобильных приложений
для Windows Phone. Корпорация Microsoft серьезно нацелена
на мобильный рынок.
Игорь Штомпель
Мониторинг
Особое мнение
41
Мониторинг блокировок в Oracle. Часть 2. Практический опыт диагностики блокировок. DML-блокировки
72
составляют наибольшие проблемы в работе всех баз данных Oracle
нашей организации. Расскажу, как мы их решаем.
Социальная инженерия под прикрытием трудоустройства. В публикации рассмотрим уловки злоумышленников, использующих социальную инженерию.
Валерий Михеичев
Владимир Иванов
РАЗРАБОТКА
Рейтинг
78
Мобильные приложения
44
Образование в сети: операционные системы. В информационных технологиях есть две важные составляющие –
Hardware и Software.
Современное
клиент-серверное
приложение
для Android. Разбираем современные подходы к разработке
Игорь Штомпель
мобильных приложений.
Пятая пара
Андрей Пахомов
84
Инструменты
48
Трудный путь наверх. Вам нравится решать задачи? Вероятный ответ: «смотря какие». А ведь работа программиста – это как
раз решение задач.
RabbitMQ. Вырастаем из штанишек. В статье рассмотрим основные паттерны использования сервера очередей RabbitMQ
применительно к веб-проектам.
Алексей Вторников
Ретроспектива
Александр Календарев
54
Разрабатываем биржевого робота. Часть 2. Использование пакета MATLAB. Каковы основные возможности паке-
88
Россия-ТВ. Made in USA. Часть 2. Как «техническая
игрушка» превратилась в большой бизнес и большую политику.
та MATLAB с точки зрения финансовых функций и прогнозирования?
Владимир Гаков
Олег Филиппов
НАУКА И ТЕХНОЛОГИИ
Тестирование
92
58
Первые шаги в тестировании. Инсталлируем и конфигурируем JMeter. Небольшое руководство по JMeter помо-
смотрена методика прогнозирования показателей долговечности вычислительной техники с использованием компьютера. Представлены
основные методики прогнозирования долговечности. Создан алгоритм
работы средств автоматизации расчета показателей долговечности.
А также разработана база данных по характеристикам долговечности.
жет быстро приступить к работе и созданию собственных первых
тестов производительности.
Анна Сергеева
Событие
61
Компьютерное
прогнозирование
показателей
долговечности вычислительной техники. В работе рас-
Жаднов В.В., Полесский С.Н., Кулыгин В.Н., Лушпа И.Л.
Конференция Infostart Event 2015. Отныне Инфостарт –
ЗАЛ СЛАВЫ «СА»
это информационно-аналитический центр по автоматизации учета
и управления.
96
Игорь Чуфаров
системный администратор декабрь 2015
Эфир – в «КВН»
Владимир Гаков
3
Администрирование
виртуализация
Визитка
ДЕНИС СИЛАКОВ, к.ф.-м.н., старший системный архитектор Odin (подразделение компании Parallels,
объединяющее решения для оказания облачных и хостинговых сервисов), dsilakov@odin.com
Промышленная виртуализация
с помощью Virtuozzo 7
Наработки компании Parallels, уже давно доступные в рамках открытого проекта
OpenVZ, наконец-то находят свой путь в основной код ядра Linux к общей выгоде
сообщества и разработчиков
В последние годы контейнерная виртуализация в Linux переживает настоящий бум, открывая миру все новые технологии и продукты – LXC, Docker, Rocket и прочие. Создание
всех этих продуктов стало возможным благодаря новой
функциональности, появившейся в основной ветке ядра
Linux. Многие из этих новшеств – это результат труда отечественных разработчиков, уже долгие годы предоставляющих средства виртуализации на основе Linux под брендами
OpenVZ и Virtuozzo.
В статье двухлетней давности [1] мы рассмотрели некоторые теоретические основы создания виртуальных окружений и принципиальные сложности, с которыми столкнулись разработчики средств виртуализации для платформ
x86. Один из способов борьбы с этими сложностями – использование виртуализации на уровне ОС, когда одно
и то же ядро используется несколькими виртуальными
окружениями.
Именно этим путем пошла в начале текущего века компания Odin (тогда еще под названием SWsoft и позже Parallels),
предложившая миру Virtuozzo – средство виртуализации
на основе ядра Linux, позволявшее запускать множество
экземпляров этой ОС на одной физической машине и предоставившее набор инструментов для удобного управления
такими виртуальными средами.
За прошедшие полтора десятка лет как сама компания, так и ее продукты претерпели череду реорганизаций,
переименований и прочих трансформаций, неизбежно сопутствующих многим активно развивающимся проектам.
Портфолио продуктов и их возможности со временем только расширялись, и сегодня Virtuozzo – это уже не только
легковесная виртуализация на уровне ОС, но и полноценные виртуальные машины, а также различные сопутствующие продукты и сервисы. Кроме того, наработки компании,
уже давно доступные в рамках открытого проекта OpenVZ,
наконец-то находят свой путь в основной код ядра Linux
к общей выгоде сообщества и разработчиков. Очередная
версия продукта, находящаяся сейчас в стадии разработки, – Virtuozzo 7 – во многом основывается на открытых технологиях, которые в сочетании с уникальными технологиями
4
компании призваны предоставить пользователям многофункциональную, но в то же время надежную платформу
виртуализации.
Впрочем, обо всем по порядку.
Немного истории
История нынешнего проекта Virtuozzo началась более 15 лет
назад, когда компания занялась разработкой инструментария контейнерной виртуализации для Linux. В 2001 году
был представлен промышленный продукт Virtuozzo, быстро
завоевавший популярность у хостинг-провайдеров благодаря высокой плотности виртуальных окружений и низким
накладным расходам, сочетавшимся с хорошей изоляцией
окружений друг от друга.
Virtuozzo изначально был проприетарным продуктом, однако с 2005 года многие наработки компании стали доступны всем желающим в рамках Open Source проекта OpenVZ.
Проект предоставлял сборки Linux-ядра с наложенными патчами для контейнерной виртуализации и утилиту
для управления контейнерами. На ранних этапах развития
эти патчи в основную ветку Linux-ядра интегрировалиcь.
Как следствие, размер патчей со временем только увеличивался, а затраты на портирование на новые версии ядер
возрастали.
Способ борьбы с этой проблемой был достаточно очевиден – необходимо переносить нужные патчи в основную ветку разработки ядра. Поэтому в 2007 году компания приняла
стратегическое решение по интеграции наработок в «ванильное» ядро, и первые успехи не заставили себя ждать:
совместно с разработчиками из IBM в основную ветку была
добавлена реализация пространства имен PID, и в том же
году разработчик OpenVZ добавил поддержку пространства
имен для сети [2].
Интеграция крупных изменений в ядро Linux не всегда проходит гладко, ведь необходимо выработать решение, устраивающее всех участников разработки. А многие
из этих участников не всегда соглашаются с востребованностью той или иной функциональности либо имеют свое
видение, как решать определенную проблему. Поэтому этот
декабрь 2015 системный администратор
виртуализация
процесс сопровождается длительными обсуждениями и переработкой патчей [3].
Но и реальные плоды этого взаимодействия сообщество
пожинает уже несколько лет – во многом благодаря усилиям
разработчиков OpenVZ стало возможным появление в ядре
механизмов виртуализации, используемых ныне в LXC (Linux
Containers) и других инструментах. При этом весомый вклад
в развитие LXC внесли и другие разработчики и компании
(в частности, Google), так что в итоге получилась взаимовыгодная кооперация.
Между тем сообщество – сообществом, а бизнес – бизнесом. С течением времени проект OpenVZ несколько отдалился от коммерческого Virtuozzo (например, для одних
и тех же действий в этих продуктах использовались команды с разными именами и опциями – мелочь, а неудобно). В 2007 году SWsoft сначала слилась со своей дочерней компанией Parallels, а затем взяла ее имя, и, наконец,
спектр предлагаемых компанией продуктов сильно расширился. В частности, в сфере серверной виртуализации
в 2013-м был представлен продукт Paralles Cloud Server
(PCS), объединивший в себе контейнерную и гипервизорную виртуализацию, который дополнялся распределенной
системой хранения данных для облаков – Parallels Cloud
Storage.
Следующим шагом стало решение объединить в 2015 году
кодовые базы открытого OpenVZ и коммерческого Parallels
Cloud Server в рамках проекта с хорошо знакомым именем –
Virtuozzo. Именно в рамках этого проекта и ведется сейчас
разработка следующей версии продукта, в основе которой
лежит ядро из Red Hat Enterprise Linux 7. Летом 2015-го был
выпущен Technical Preview для Virtuozzo 7, выложенный в публичный доступ на сайте OpenVZ [4].
Именно обзору этого продукта мы посвятим оставшуюся
часть этой статьи и, надеемся, еще ряд статей в будущем.
Помните, что дистрибутив Virtuozzo 7 на данный момент находится в стадии разработки, и использовать его рекомендуется только для знакомства и экспериментов. Если вам
необходим продукт для промышленного использования,
стоит обратиться к предыдущей версии [5].
Разработчики придерживаются принципов обратной совместимости, и практически все описанные в данной статье
команды будут работать как в новой, так и в старой версии
Virtuozzo.
Администрирование
Установка займет совсем немного времени, и по ее завершении можете перезагрузить машину и оказаться внутри
дистрибутива, основанного на RHEL 7, но использующего
специализированное ядро и сопутствующий инструментарий
для управления контейнерами. Экспериментировать с контейнерами можно сразу после входа в систему, никаких
дополнительных действий не требуется. Однако помните,
что для работы с контейнерами необходимы права суперпользователя.
Управление контейнерами осуществляется из командной
строки с помощью утилиты prlctl. Для начала создадим контейнер CentOS 7, используя соответствующий шаблон:
# prlctl create СentOS --vmtype ct --ostemplate ↵
centos-7-x86_64
Опция --vmtype указывает, какого типа виртуальное
окружение следует создать. В этой статье мы ограничимся
контейнерами (ct) – легковесными окружениями, использующими виртуализацию на уровне ОС. Контейнеры Virtuozzo
могут использоваться только для запуска дистрибутивов
Linux, поскольку в каждой гостевой системе используется
то же ядро, что и в основной. Инструментарий позволяет
создавать и полноценные виртуальные машины, в которых
можно запускать произвольные ОС; для этого необходимо
выставить опцию --vmtype в значение vm. Многое из того,
что мы расскажем ниже об управлении контейнерами, справедливо и для виртуальных машин.
Сразу отметим, что для prlctl хорошо настроено автодополнение оболочки bash, затрагивающее как сами команды
и опции, так и их аргументы – имена шаблонов, контейнеров и прочих сущностей. Так что, если возникают сомнения
в том, как называется та или иная опция, либо просто хочется побыстрее набрать команду, смело жмите клавишу
<Tab>.
Скачивание и развертывание шаблона – дело не быстрое, и для ускорения процесса нужные шаблоны можно
предварительно закэшировать. Например, вот так можно
скачать шаблон Ubuntu 14.04, закэшировать его и затем
развернуть из него контейнер:
Рисунок 1. Установщик Virtuozzo – адаптированная Anaconda от Red Hat
Первое знакомство с Virtuozzo 7
В данной статье мы ограничимся обзором контейнеров, реализация которых не опирается на возможности аппаратуры,
поэтому для использования контейнеров Virtuozzo можно
развернуть как на реальной, так и в виртуальной машине.
Минимальная конфигурация, достаточная для знакомства
с продуктом, – 1 ядро процессора, 1 Гб оперативной памяти
и 10 Гб свободного места на диске.
Для развертывания Virtuozzo 7 предоставляются ISO-образы с установщиком, основанным на программе установки
Red Hat Enterprise Linux. Процесс установки не отличается от Red Hat за тем исключением, что единственным вариантом набора ПО (Software Selection) является Virtuozzo,
а источником пакетов – локальный носитель. Во время установки пакетов необходимо задать пароль root и при необходимости создать локального пользователя.
системный администратор декабрь 2015
5
Администрирование
# yum install -y ubuntu-14.04-x86_64-ez
# vzpkg create cache ubuntu-14.04-x86_64
# prlctl create Ubuntu --vmtype ct --ostemplate ↵
ubuntu-14.04-x86_64
На данный момент в репозиториях Virtuozzo доступны шаблоны для 64-битных CentOS 6 и 7, Ubuntu 14.04, 14.10 и 15.04,
Debian 8.0, Fedora 22, а также 32-битный CentOS 5. Загруженные шаблоны помещаются в директорию /vz/template/cache.
После создания контейнер не активен; запустить его можно с помощью команды start:
# prlctl start Ubuntu
Обращаться к контейнеру можно как по имени,
так и по его уникальному идентификатору (UUID). Идентификатор не так удобен, но иногда без него не обойтись – например, служебные данные контейнера с идентификатором
ID размещаются в директории /vz/private/ID, основные настройки – в файле /etc/vz/conf/ID.conf, а файловая система
контейнера монтируется в директорию /vz/root/ID.
виртуализация
> mount/umount – смонтировать/отмонтировать файловую
систему неактивного контейнера в соответствующую
поддиректорию /vz/root;
> clone – создать клон контейнера, отличающийся от оригинала только MAC-адресом; эта же команда может быть
использована для создания шаблона на основе существующего контейнера.
Отдельного внимания заслуживает команда set, с помощью которой можно управлять всевозможными аспектами
конфигурации ваших виртуальных окружений. Посредством
этой команды задаются аппаратные параметры и ограничения (количество ядер процессора и оперативной памяти,
лимиты на их использование и тому подобное), пароли пользователей внутри контейнера (в том числе root), сетевые
настройки (IP-адрес, DNS, имя машины), параметры VNC
для доступа к контейнеру и многое другое.
Например, можно ограничить контейнер CentOS размером памяти в 1 Гб и одним ядром процессора:
# prlctl set CentOS --memsize 1G --cpus 1
Сегодня Virtuozzo –
это уже не только легковесная
виртуализация на уровне
ОС, но и полноценные
виртуальные машины
Контейнеры запускаются в неинтерактивном режиме,
не предоставляя вам управляющий терминал. Запустить сеанс оболочки внутри контейнера с помощью команды:
А вот так – ограничить размер его жесткого диска:
# prlctl set UbuntuVz7 --device-set hdd0 --size 100G
Полезна возможность добавлять контейнерам произвольные описания – ведь по короткому названию не всегда
можно вспомнить, для чего контейнер предназначен. Описание задается с помощью все той же команды set:
# prlctl set CentOS --description «My first CentOS container»
А получить описание можно с помощью команды list, явно
затребовав нужное нам свойство:
# prlctl enter
# prlctl list CentOS -o description
>
>
>
>
>
>
Другие базовые команды prlctl:
list – получить перечень всех активных контейнеров
и сведений об их состоянии (а с опцией «-a» будут показаны как активные, так и неактивные контейнеры);
status – получить информацию о конкретном контейнере;
stop – остановить контейнер;
restart – перезапустить контейнер; если контейнер
не был активен, то он будет запущен;
delete – удалить контейнер (обратите внимание, что удалить можно только неактивный контейнер, то есть перед
удалением его необходимо остановить);
exec – выполнить произвольную команду внутри контейнера; вывод команды будет перенаправлен в ваш терминал;
Рисунок 2. Вызов lsb_release внутри контейнера Ubuntu подтвердит, что мы находимся
в Ubuntu 14.04
Приведенные примеры – это лишь небольшая часть возможностей инструментов управления контейнерами. Полный перечень доступных команд и их подробное описание
доступны в man-страничке утилиты prlctl. За некоторыми
из них скрываются возможности, заслуживающие отдельного внимания, однако мы надеемся, что и изложенного выше
материала хватит, чтобы приступить к изучению одного
из лидеров на рынке серверной виртуализации. EOF
[1] Силаков Д. Виртуализация на платформе x86. // «Системный администратор», №10, 2013 г. – С. 80-84 (http://samag.ru/
archive/article/2547).
[2] OpenVZ vs LXC – http://ru-openvz.livejournal.com/1970.html.
[3] Штомпель И. Павел Емельянов: «Разработка ядра Linux – это общение в «клубе по интересам». // «Системный администратор»,
№7-8, 2013 г. – С. 62-66 (http://samag.ru/archive/article/2487).
[4] Virtuozzo 7 Technical Preview – Containers – https://openvz.org/
Virtuozzo_7_Technical_Preview_-_Containers.
[5] Официальный сайт Virtuozzo – http://www.odin.com/ru/products/
virtuozzo.
Ключевые слова: виртуализация, OpenVZ, контейнеры, Virtuozzo.
6
декабрь 2015 системный администратор
облачные технологии
Администрирование
Визитка
АНДРЕЙ МАРКЕЛОВ, RHCA, старший менеджер архитектурных решений компании Ericsson.
Автор первой книги на русском языке, рассказывающей о работе с OpenStack, andrey.markelov@ericsson.com
Основы облачного хранилища данных Ceph
Часть 2. Установка кластера
Продолжаем разбираться с программно-определяемым хранилищем данных Ceph.
В прошлом номере мы познакомились с обзором продукта и его архитектурой.
Теперь установим простейший кластер Ceph
Начнем с установки и подготовки операционной системы
для узлов кластера. Как и в предыдущих статьях, посвященных облачной инфраструктуре, воспользуемся дистрибутивом CentOS 7 [1-5].
Нам необходимы минимум три виртуальные машины,
каждая должна иметь два сетевых адаптера, минимум 1 Гб
оперативной памяти и по четыре виртуальных диска. Один
будет использоваться под операционную систему и три –
под хранение данных кластером Ceph.
Подготовка операционной системы
к установке Ceph
Первое, что необходимо, – установить саму операционную
систему. В качестве варианта установки можно выбрать
Minimal или Server with GUI. После установки ОС обновите
все установленные пакеты командой:
# yum -y update
Следующее – добавление репозиториев с пакетами
OpenStack и дополнительных пакетов. Начнем с необходимого репозитория Extra Packages for Enterprise Linux (EPEL).
Данный репозиторий содержит пакеты, предназначенные для RHEL и его производных, коим является CentOS.
Как правило, там содержатся пакеты, присутствующие
в Fedora, но которые компания Red Hat не включила в свой
промышленный дистрибутив. В частности, пакеты Ceph
мы будем ставить именно оттуда:
# yum -y install epel-release
Также убедитесь, что все взаимодействующие виртуальные машины могут разрешать имена друг друга. Можно
поднять локальный DNS-сервер или, что намного проще,
прописать на всех узлах имена взаимодействующих с ними
лабораторных машин в файл /etc/hosts.
Для установки кластера применим стандартную для Ceph
утилиту ceph-install. Безусловно, это только один из возможных методов. Зачастую кластер Ceph устанавливается
теми же инструментами, что и компоненты OpenStack.
Одну из виртуальных машин мы будем использовать в качестве узла, с которого произведем установку с помощью
утилиты ceph-install.
В качестве предварительного требования для ceph-install
необходимо на всех трех машинах создать учетную запись,
от имени которой будет осуществляться установка. Пользователь на всех узлах должен иметь право выполнять команды без ввода пароля с помощью sudo с привилегиями
администратора и подключаться по ssh с узла, где выполняется ceph-install на все остальные узлы. В качестве имени
пользователя нельзя использовать «ceph», поскольку оно
зарезервировано для демонов.
Заводим на всех трех виртуальных машинах пользователя cephinstall и настраиваем sudo:
[root@ceph1 ~]# useradd cephinstall
[root@ceph1 ~]# passwd cephinstall
[root@ceph1 ~]# cat << EOF >/etc/sudoers.d/cephinstall
> cephinstall ALL = (root) NOPASSWD:ALL
> Defaults:cephinstall !requiretty
> EOF
[root@ceph1 ~]# chmod 0440 /etc/sudoers.d/cephinstall
Далее, для упрощения отладки, мы отключим сервис
брандмауэра:
# systemctl stop firewalld.service
# systemctl disable firewalld.service
Обратите внимание, что также необходимо отключить
в sudo параметр requiretty.
Теперь разрешаем с узла ceph1 подключаться на все три
виртуальные машины по ssh без пароля:
Для версий Ceph до Infernalis необходимо SELinux отключить или перевести в режим permissive.
[root@ceph1 ~]# su - cephinstall
[cephinstall@ceph1 ~]$ ssh-keygen
системный администратор декабрь 2015
7
Администрирование
облачные технологии
[cephinstall@ceph1 ~]$ ssh-copy-id cephinstall@ceph1
[cephinstall@ceph1 ~]$ ssh-copy-id cephinstall@ceph2
[cephinstall@ceph1 ~]$ ssh-copy-id cephinstall@ceph3
osd_pool_default_size = 2
osd_pool_default_min_size = 1
Рекомендуется создать конфигурационный файл ~/.ssh/
config, указав, каким пользователем мы подключаемся к каждому из узлов:
Установим на все три узла пакеты. Можно открыть на узле
ceph2 или ceph3 файл системного журнала для мониторинга происходящего:
Host ceph1
Hostname ceph1
User cephinstall
[root@ceph2 ~]# tail -f /var/log/messages
[cephinstall@ceph1 test-cluster]$ ceph-deploy install ↵
ceph1 ceph2 ceph3
Host ceph2
Hostname ceph2
User cephinstall
...
[ceph3][DEBUG ] Complete!
[ceph3][INFO ] Running command: sudo ceph --version
[ceph3][DEBUG ] ceph version 0.94.5
(9764da52395923e0b32908d83a9f7304401fee43)
Host ceph3
Hostname ceph3
User cephinstall
Не забудьте о разрешениях:
[cephinstall@ceph1 test-cluster]$ chmod 600 ↵
/home/cephinstall/.ssh/config
Быстрая установка кластера Ceph
с помощью ceph-deploy
Покажем два варианта установки кластера. С помощью утилиты ceph-deploy и вручную. Для первого варианта нам нужна «машина администратора», где запускается ceph-deploy.
Мы используем для этих целей узел ceph1 для экономии
ресурсов. На практике, как правило, это отдельный узел,
не входящий в кластер.
Утилита ceph-deploy сохраняет конфигурационные файлы и ключи в текущей рабочей директории. Создадим каталоги для файлов тестового кластера:
[cephinstall@ceph1 ~]$ mkdir test-cluster
[cephinstall@ceph1 ~]$ cd test-cluster
Первым шагом создадим новый кластер. По окончании
выполнения команды убедимся, что в рабочем каталоге появились три файла: конфигурационный файл, файл журнала и связка ключей:
[cephinstall@ceph1 test-cluster]$ ceph-deploy new ceph1
[cephinstall@ceph1 test-cluster]$ ls
ceph.conf
ceph.log
ceph.mon.keyring
Внесем исправления в конфигурационный файл.
Мы создавали виртуальные машины с двумя сетевыми интерфейсами. Один из них предназначен для клиентов, другой – для внутренней сети кластера. Добавим в ceph.conf
соответствующие опции:
public_network = 192.168.122.11/24
cluster_network = 192.168.222.11/24
Вывод говорит о том, что пакеты версии Hammer (0.94)
установлены. Если по каким-то причинам необходимо будет
начать все заново, то это можно сделать, отдав команды:
[cephinstall@ceph1 test-cluster]$ ceph-deploy purgedata ↵
ceph1 ceph2 ceph3
[cephinstall@ceph1 test-cluster]$ ceph-deploy forgetkeys
Создадим первый монитор на узле ceph1:
[cephinstall@ceph1 test-cluster]$ ceph-deploy mon ↵
create-initial
После добавим OSD, сначала на узле ceph2. На каждом
из узлов ceph2 и ceph3 у нас по четыре диска. Первый занят операционной системой. Три оставшихся мы используем под данные кластера. Первым делом рекомендуется дать
команду zap, которая удалит разделы с дисков. Перед запуском команды уточните имена дисков. Далее приведен пример для VirtIO-дисков в KVM/QEMU:
[cephinstall@ceph1 test-cluster]$ ceph-deploy disk zap ↵
ceph2:vdb ceph2:vdc ceph2:vdd
Теперь подготовим диски на узле ceph2. На каждом из них
будет создано по два раздела, второй из них будет использован под журнал. Мы также могли бы задать конкретное
расположение журнала, указав имя раздела после каждого
диска через двоеточие. Зачастую несколько журналов помещают на выделенный ssd-диск.
[cephinstall@ceph1 test-cluster]$ ceph-deploy osd prepare ↵
ceph2:vdb ceph2:vdc ceph2:vdd
...
[ceph_deploy.osd][DEBUG ] Host ceph2 is now ready for osd use.
Можно проверить для одного из дисков непосредственно
на узле ceph2:
[root@ceph2 ~]# fdisk -l /dev/vdb
По умолчанию число реплик равняется трем и минимальное число реплик для того, чтобы кластер оставался
в работоспособном состоянии, – две. Для нашего тестового
окружения уменьшим эти числа до двух и одного соответственно:
8
...
Disk label type: gpt
#
Start
End
1
10487808
104857566
2
2048
10485760
Size
45G
5G
Type
unknown
unknown
Name
ceph data
ceph journal
декабрь 2015 системный администратор
облачные технологии
Администрирование
Активация OSD, как это описано в документации, на момент создания статьи не требуется.
Теперь те же действия можно повторить для узла ceph3.
Способ с использованием ceph-deploy подходит, когда нужно быстро развернуть кластер ceph. Для того чтобы лучше
разобраться с настройками, давайте установим кластер
вручную.
Установка кластера ceph вручную
Установим на всех узлах пакеты ceph:
# yum -y install ceph ceph-radosgw
Теперь начнем на узле ceph1, который играет роль монитора, создавать конфигурационный файл /etc/ceph/
ceph.conf.
Во-первых, нам с вами понадобится уникальный идентификатор кластера UUID. Его проще и быстрее всего сгенерировать с помощью стандартной утилиты из пакета util-linux:
$ uuidgen
1d618cdf-c648-4e9c-8aed-c170577a5d83
И начнем создавать /etc/ceph/ceph.conf, добавив первую
строчку:
fsid = 1d618cdf-c648-4e9c-8aed-c170577a5d83
Дальше добавим имя первого MON-узла и его IP-адрес.
Можно указать сразу несколько, но в нашем случае это узел
ceph1:
mon initial members = ceph1
mon host = 192.168.122.11
Нам нужно создать два набора ключей: monitor keyring
и administrator keyring, которые будут использоваться
в качестве общего секрета для взаимодействия мониторов
и для доступа администратора к управлению кластером
с помощью утилиты ceph:
[root@ceph1 ~]# ceph-authtool --create-keyring ↵
/tmp/ceph.mon.keyring --gen-key -n mon. ↵
--cap mon 'allow *'
creating /tmp/ceph.mon.keyring
[root@ceph1 ~]# ceph-authtool --create-keyring ↵
/etc/ceph/ceph.client.admin.keyring --gen-key ↵
-n client.admin --set-uid=0 --cap mon 'allow *' ↵
--cap osd 'allow *' --cap mds 'allow'
creating /etc/ceph/ceph.client.admin.keyring
Добавляем ключ client.admin в связку ключей ceph.mon.
keyring:
[root@ceph1 ~]# ceph-authtool /tmp/ceph.mon.keyring ↵
--import-keyring /etc/ceph/ceph.client.admin.keyring
importing contents of /etc/ceph/ceph.client.admin.keyring
into /tmp/ceph.mon.keyring
системный администратор декабрь 2015
9
Администрирование
облачные технологии
Сгенерируем карту монитора:
В конце добавим в конфигурационный файл секцию, описывающую наш единственный монитор:
[root@ceph1 ~]# monmaptool --create --add ceph1 192.168.122.11 ↵
--fsid 1d618cdf-c648-4e9c-8aed-c170577a5d83 ↵
/tmp/monmap
monmaptool: monmap file /tmp/monmap
monmaptool: set fsid to 1d618cdf-c648-4e9c-8aed-c170577a5d83
monmaptool: writing epoch 0 to /tmp/monmap (1 monitors)
Сразк после создания можно просмотреть содержимое
карты монитора, которая задает фиксированные адреса
узлов:
[root@ceph1 ~]# monmaptool --print /tmp/monmap
monmaptool: monmap file /tmp/monmap
epoch 0
fsid 1d618cdf-c648-4e9c-8aed-c170577a5d83
last_changed 2015-11-13 07:15:04.636212
created 2015-11-13 07:15:04.636212
0: 192.168.122.11:6789/0 mon.ceph1
Создадим каталог для хранения данных монитора вида
/var/lib/ceph/mon/имя_кластера-имя_монитора:
[mon.ceph1]
host = ceph1
mon addr = 192.168.122.11:6789
Создадим файл, указывающий, что настройка монитора
закончена:
[root@ceph1 ~]# touch /var/lib/ceph/mon/ceph-ceph1/done
Теперь можно попытаться запустить на старт наш с вами
монитор:
[root@ceph1 ~]# /etc/init.d/ceph start mon.ceph1
=== mon.ceph1 ===
Starting Ceph mon.ceph1 on ceph1...
Running as unit run-1045.service.
Starting ceph-create-keys on ceph1...
Проверим, что создан пул по умолчанию rbd:
[root@ceph1 ~]# mkdir /var/lib/ceph/mon/ceph-ceph1/
[root@ceph1 ~]# ceph osd lspools
Заполним каталог данными демона монитора (карта
и связка ключей):
0 data,1 metadata,2 rbd,
[root@ceph1 ~]# ceph-mon --mkfs -i ceph1 --monmap ↵
/tmp/monmap --keyring /tmp/ceph.mon.keyring
и что монитор запущен:
ceph-mon: set fsid to 1d618cdf-c648-4e9c-8aed-c170577a5d83
ceph-mon: created monfs at /var/lib/ceph/mon/ceph-ceph1 for
mon.ceph1
[root@ceph1 ~]# ceph -s | grep mon
monmap e1: 1 mons at {ceph1=192.168.122.11:6789/0},
election epoch 1, quorum 0 ceph1
[root@ceph1 ~]# ls /var/lib/ceph/mon/ceph-ceph1/
keyring
store.db
Добавим общие настройки в файл конфигурации /etc/
ceph/ceph.conf:
1
2
3
4
5
6
7
8
9
10
11
12
13
[global]
fsid = 1d618cdf-c648-4e9c-8aed-c170577a5d83
mon initial members = ceph1
mon host = 192.168.122.11
public network = 192.168.122.0/24
auth cluster required = cephx
auth service required = cephx
auth client required = cephx
osd journal size = 1024
osd pool default size = 2
osd pool default min size = 1
osd pool default pg num = 128
osd pool default pgp num = 128
Прокомментирую настройки. Строки с шестой по восьмую указывают на механизм аутентификации. Далее – размер журнала в килобайтах. В двенадцатой и тринадцатой
строках задано число групп (placement groups, PG) для пула
по умолчанию.
Как обсуждалось ранее, PG – это набор объектов, которые реплицируются OSD для обеспечения сохранности данных. Pg_num и pgp_num должны совпадать. PGP (placment
group for placment) влияет на ребалансировку кластера
при увеличении числа PG.
10
Перейдем к установке OSD на узлы ceph2 и ceph3.
На дисках, которые предполагается использовать под данные, создайте по разделу и файловую систему XFS на каждом. Также добавьте все три диска для данных в /etc/fstab.
По умолчанию предполагается, что раздел монтируется
в /var/lib/ceph/osd/имя_кластера-идентификатор_OSD. Продемонстрируем на примере одного из разделов:
[root@ceph2 ~]# mkfs.xfs /dev/vdb1
[root@ceph2 ~]# mkdir /var/lib/ceph/osd/ceph-0
[root@ceph2 ~]# echo "/dev/vdb1 /var/lib/ceph/osd/ceph-0 ↵
xfs defaults 0 1" >> /etc/fstab
[root@ceph2 ~]# mount –a
Добавим в конфигурационный файл на узле ceph1 описание шести OSD, по три на узел. OSD с номерами от нуля
до двух будут на узле ceph2, а с трех по пять – на узле
ceph3:
[osd.0]
host = ceph2
...
[osd.5]
host = ceph3
Скопируем отредактированный конфигурационный файл
с первого узла на оба оставшихся. То же самое проделаем
с файлом /etc/ceph/ceph.client.admin.keyring.
декабрь 2015 системный администратор
облачные технологии
Администрирование
По числу OSD на каждом из наших узлов запускаем команду:
После этого можно запустить скрипт /etc/init.d/ceph start
и проверить состояние нашего кластера:
[root@ceph3 ~]# ceph osd create
[root@ceph1 ~]# ceph -s
5
При этом будет выдаваться номер идентификатора OSD.
Поскольку у нас по три диска и соответственно три OSD
на каждом узле, то всего мы выдаем эту команду шесть
раз, по три раза на каждом из двух узлов. В примере выше
это вывод последнего выполнения команды из шести (OSD
нумеруются начиная с нуля).
Для каждого из дисков/OSD выполняем следующие команды вида:
[root@ceph3 ~]# ceph-osd -i 5 --mkfs --mkkey
[root@ceph3 ~]# ceph auth add osd.5 osd 'allow *' ↵
mon 'allow profile osd' ↵
-i /var/lib/ceph/osd/ceph-5/keyring
Первой командой инициализируем каталог, в который
смонтирована каждая из файловых систем. Второй – регистрируем ключ аутентификации этого конкретного OSD.
Ключ создавался во время инициализации предыдущей
командой. Просмотреть список ключей можно, введя
команду:
ceph auth list
Выполняем для каждого из двух хостов:
cluster 1d618cdf-c648-4e9c-8aed-c170577a5d83
health HEALTH_OK
monmap e1: 1 mons at {ceph1=192.168.122.11:6789/0},
election epoch 1, quorum 0 ceph1
osdmap e38: 6 osds: 6 up, 6 in
pgmap v94: 192 pgs, 3 pools, 0 bytes data, 0 objects
3275 MB used, 593 GB / 596 GB avail
192 active+clean
Также можно использовать команду ceph -w, которая аналогична предыдущей, но позволяет отслеживать состояние
кластера в реальном времени.
Есть еще несколько полезных команд. Например, сeph
df покажет свободное место в кластере и распределение
его по пулам:
[root@ceph1 ~]# ceph df
GLOBAL:
SIZE
AVAIL
596G
593G
POOLS:
NAME
ID
data
0
metadata
1
rbd
2
RAW USED
3275M
USED
0
0
0
%RAW USED
0.54
%USED
0
0
0
MAX AVAIL
296G
296G
296G
OBJECTS
0
0
0
Естественно, что у нас доступно все пространство на дисках кластера.
[root@ceph2 ~]# ceph --cluster ceph osd crush ↵
add-bucket ceph2 host
added bucket ceph3 type host to crush map
[root@ceph2 ~]#
ceph osd crush move ceph2 root=default
moved item id -2 name 'ceph2' to location {root=default} in
crush map
Тем самым мы добавили узел в карту алгоритма CRUSH
и поместили его в корень default.
По окончании настройки просмотреть карту и веса OSD
можно будет командой:
[root@ceph1 ~]# ceph osd tree
# id
-1
-2
0
1
2
-3
3
4
5
weight
6
3
1
1
1
3
1
1
1
type name
root default
host ceph2
up/down
reweight
osd.0
osd.1
osd.2
up
up
up
1
1
1
osd.3
osd.4
osd.5
up
up
up
1
1
1
host ceph3
Для каждого из шести OSD выполняем следующую команду, добавляя их в CRUSH карту:
[root@ceph3 ~]# ceph osd crush add osd.5 1.0 host=ceph3
add item id 5 name 'osd.5' weight 1 at location {host=ceph3}
to crush map
системный администратор декабрь 2015
На этом мы закончим установку и настройку тестового кластера Ceph. В следующий раз изучим блочный доступ, осуществляемый с помощью RBD (RADOS block device), и интеграцию Ceph с ранее рассмотренными в нашем журнале
службами OpenStack. EOF
[1] Маркелов А. Основы облачного хранилища данных Ceph.
Часть 1. Архитектура. // «Системный администратор»,
№11, 2015 г. – С. 4-6 (http://samag.ru/archive/article/3061).
[2] Маркелов А. Облачная операционная система OpenStack.
Часть 1. Введение. // «Системный администратор», №4, 2015 г. –
С. 10-15 (http://samag.ru/archive/article/2922).
[3] Маркелов А. OpenStack Keystone. Знакомство с сервисом
идентификации. // «Системный администратор», №5, 2015 г. –
С. 6-10 (http://samag.ru/archive/article/2936).
[4] Маркелов А. Облачная операционная система OpenStack.
Часть 3. Сервис хранения образов OpenStack Image Service
// «Системный администратор», №6, 2015 г. – С. 12-14 (http://
samag.ru/archive/article/2958).
[5] Маркелов А. Облачная операционная система OpenStack.
Часть 4. Сервис блочного хранилища OpenStack. Cinder. //
«Системный администратор», №7-8, 2015 г. – С. 14-17 (http://
samag.ru/archive/article/2982).
[6] Bug #10922: ceph-deploy prepare activates the OSD automatically –
http://tracker.ceph.com/issues/10922.
Ключевые слова: Open Source, OpenStack, Ceph, системы хранения данных.
11
Администрирование
продукты и решения
Обзор NAKIVO Backup & Replication
Резервное копирование и репликация для VMware
Один из главных приоритетов для каждой компании – сохранение данных. Сегодня
мы рассмотрим продукт NAKIVO Backup & Replication – решение для резервного
копирования, репликации и восстановления виртуальных машин VMware
NAKIVO Backup & Replication появился относительно недавно – в 2012 году, при этом разработчики смогли создать
конкурентоспособное решение с богатым функционалом
и по лучшей цене на рынке. В настоящее время продукт
сертифицирован компанией VМware, имеет статус VМware
Ready и поддерживает все издания vSphere. NAKIVO Backup
& Replication ориентирован как на малый и средний бизнес,
так и на крупные корпорации и провайдеры.
до 1000 точек восстановления для каждой резервной копии
ВМ. Схема ротации «дед-отец-сын» (GFS) позволяет планировать хранение точек восстановления по любому временному периоду.
Резервное копирование может производиться как в локальное, так и удаленное хранилище (через WAN). Также реализовано резервное копирование непосредственно в облако Amazon.
Установка
Хранение данных
NAKIVO Backup & Replication предоставляет несколько вариантов установки. Самый простой способ – развернуть
продукт из преднастроенного образа Virtual Appliance. Также можно произвести установку на Windows, Linux, Synology
NAS, и Western Digital NAS. Для полноценной работы продукту требуется всего 2хCPU и 4 GB RAM (или минимум 1 GB
RAM при установке на NAS). Процесс развертывания прост
и интуитивен: NAKIVO Backup & Replication не использует
агентов, все компоненты продукта устанавливаются автоматически, весь функционал доступен сразу после установки,
которая занимает менее 10 минут.
Данные в хранилище автоматически сжимаются и дедуплицируются на уровне блоков. Это позволяет значительно
уменьшить количество пространства, которое занимают
резервные копии ВМ. Функция самовосстановления автоматически запускает периодические проверки, подтверждающие целостность хранилища, и в случае появления ошибок
продукт автоматически восстанавливает данные.
Резервное копирование
Создание заданий производится при помощи простого четырехшагового мастера. При первом прогоне задания создается
полная копия виртуальной машины (ВМ), в дальнейшем в хранилище отправляются только измененные данные, что значительно ускоряет работу продукта. Для определения измененных блоков используется технология VMware Changed Block
Tracking. Для обеспечения целостности данных приложений
используется режим Application Awareness, поддерживаются
такие приложения и бызы данных, как MS Exchange Server,
Active Directory, MS SQL, SharePoint, Oracle и другие. Также
предусмотрена возможность удаления лог-файлов транзакций Exchange Server, которые со временем могут занимать
значительное место на диске.
После каждого прогона задания создаются точки восстановления. NAKIVO Backup & Replication позволяет хранить
12
Репликация
Репликация позволяет создавать и поддерживать полные
копии ВМ (реплики) на удаленном сервере. В случае, если
исходная ВМ становится недоступной (например, в результате сбоя оборудования), реплику можно просто запустить
для мгновенного востановления сервисов.
Процесс создания и выполнения заданий репликации такой же, как и для создания резервных копий. Репликация
в NAKIVO Backup & Replication создает обыкновенные ВМ,
которые доступны в клиенте vSphere, так что запуск реплики
можно произвести даже без использоваия продукта. Также,
для каждой реплики можно сохранить до 30 точек восстановления.
Проверка данных
NAKIVO Backup & Replication позволяет практически мгновенно выполнять проверку созданных резервных копий и реплик. После выполнения задания продукт может мгновенно
запустить ВМ прямо из только что созданной резервной
копии, дождаться запуска ОС, сделать скриншот, сбросить
декабрь 2015 системный администратор
Администрирование
продукты и решения
временно восстановленную ВМ и прислать скриншот вместе с отчетом об успешно выполненном задании.
Восстановление данных
NAKIVO Backup & Replication позволяет практически мгновенно восстаналивать ВМ из резервных копий. Функция Flash
VM Boot дает возможность запускать ВМ непосредственно
из сжатого и дедупицированного хранилища. Весь процесс
восстановления – от запуска задания до начала загрузки операционной системы ВМ – занимает всего несколько секунд.
Помимо полного восстановления ВМ, продукт также позволяет мгновенно восстанавливать объекты приложений
Microsoft Exchange и Active Directory (например, отдельные
письма Exchange или группы Active Directory), а также отдельные файлы и каталоги ОС Windows
и Linux. Восстановление производится непосредственно из сжатого и дедупицированного хранилища без запуска ВМ.
Удобство использования
Управление NAKIVO Backup & Replication
производится через веб-интерфейс, все
задачи можно автоматизировать через CLI
или API. Реализованы отчеты по расписанию, рассылаемые по e-mail, о состоянии
ВМ, модулей NAKIVO Backup & Replication
и заданиях резервного копирования и репликации. Также можно создать подробный отчет по любому запросу, генерируемый в PDF.
Состав NAKIVO Backup & Replication
NAKIVO Backup & Replication состоит из трех программных модулей – Director (управление и веб-интерфейс),
Transporter (выполнение заданий) и Backup Repository (хранилище).
Модуль Director предоставляет веб-интерфейс, проводит
инвентаризацию виртуальной инфраструктуры, управляет
модулями Transporter и Backup Repository. При развертывании решения необходимо установить только один модуль
Director.
Модуль Transporter используется для непосредственного
выполнения работ по резервному копированию, репликации
и восстановлению данных. Он также выполняет функции
сжатия, дедупликации и шифрования. Использование дополнительных модулей Transporter в распределенных сетях
позволяет распределить нагрузку и оптимизировать сетевой
трафик. При этом данные, передаваемые между двумя модулями Transporter, можно сжимать и шифровать (используется
AES 256).
системный администратор декабрь 2015
Модуль Backup Repository может содержать до 128 ТБ
сжатых и дедуплицированных данных. В качестве хранилища
может использоваться папка CIFS, локальная папка в системе, где установлен Transporter, или удаленный каталог,
смонтированный непосредственно на Transporter (NFS, NAS
или SAN). Предусмотрено использование Disk-to-Disk-toTape (D2D2T) для архивного хранения информации на ленту.
Лицензирование
Продукт лицензируется на физический сокет процессора
сервера, для которого планируется осуществлять резервное
копирование или репликацию. Целевой сервер, на который
производится восстановление или репликация, лицензировать не нужно. В настоящее время существует 6 уровней лицензии – Pro Essentials, Enterprise
Essentials, Pro, Enterprise, Cloud Provider
и Free Edition. При этом Essentials рассчитаны на небольшие организации и ограничивают количество лицензий на организацию
(максимально 6). Версии Enterprise дополнительно поддерживают multi-tenancy,
сервис самообслуживания, возможность
делегирования лицензии, локальное администрирование для удаленных офисов и HTTP API для автоматизации. Cloud
Provider имеет максимальные возможности
Enterprise и ориентирован на поставщиков
услуг, позволяя реализовать для их клиентов схемы Backup-as-a-Service и DisasterRecovery-as-a-Service. Кроме бессрочной
лицензии, возможна годовая подписка.
Версия Free предоставляется бесплатно и сама по себе
интересна тем, что в отличие от аналогов, которые либо неудобны в обращении, либо не имеют части полезных функций, предоставляет все возможности Pro Esentials и очень
проста в использовании. Ограничение только в поддержке
максимально двух виртуальных машин.
Выводы
Проведенное тестирование NAKIVO Backup & Replication показало, что продукт представляет собой простое в развертывании и использовании, высокопроизводительное и надежное решение для резервного копирования, репликации
и восстановления данных ВМ VMware. ADV
[1] Сайт NAKIVO Backup & Replication – www.nakivo.com/ru.
Ключевые слова: бэкап, репликация, виртуализация, VMware,
NAKIVO.
13
Администрирование
ИТ-инфраструктура
Визитка
ДМИТРИЙ ГОЛОСОВ, заместитель начальника
Департамента информационных технологий ОАО «ТД РЖД», golosovd@mail.ru
ManageEngine ServiceDesk Plus
Часть 2. Обзор возможностей
Как с помощью ManageEngine ServiceDesk Plus можно решить задачи, стоящие перед
ИТ-подразделением
Задачи для системы
В статье [1], выбирая ITSM-систему, я привел в качестве критериев перечень задач, которые необходимо было решить
ее внедрением. Напомню их:
> организация каталога услуг и реализация SLA (соглашений об уровне обслуживания) для некоторых из них;
> регистрация запросов на обслуживание от пользователей бизнес-подразделений и реализация механизма
их краткого согласования;
> регистрация инцидентов, их эскалация в проблему
с разделением уровней поддержки;
> функционал управления изменениями для упорядочивания доработок информационных систем;
> систематизация программно-аппаратных средств, использующихся в компании;
> ведение базы знаний для эффективного обмена опытом между администраторами и, в определенных случаях, снижения нагрузки на службу поддержки путем
публикации некоторых статей для пользователей;
> генерация различных отчетов – начиная от инвентаризации оборудования и заканчивая отчетами о деятельности ИТ-подразделения. Наличие функционала создания собственных отчетов.
Давайте посмотрим, как эти задачи можно решить с помощью системы ManageEngine ServiceDesk Plus, с которой
мы познакомились в статье [2]. Кроме того, постараюсь кратко рассказать об остальном функционале системы.
Задача 1. Каталог услуг и SLA
Настройка каталога услуг производится в пункте «Каталог
услуг» раздела «Служба техподдержки» меню «Параметры». Он является двухуровневым, все услуги разбиваются
на категории. К сожалению, добавить дополнительные подкатегории и таким образом в большей степени структурировать его нельзя.
При создании категории услуги необходимо заполнить
ряд информационных полей: критичность и степень влияния
на бизнес, обслуживающее подразделение службы поддержки, период ее работы. Однако данные поля являются
именно информационными, хотя некоторые из них логично
было бы связать с SLA.
Созданные категории услуг становятся конфигурационными единицами CMDB, и их можно в дальнейшем использовать для организации связей, например, с активами, пользователями и прочими ее элементами. Возможности CMDB
мы рассмотрим далее в статье.
Рисунок 1. Жизненный цикл изменения
14
декабрь 2015 системный администратор
ИТ-инфраструктура
После создания необходимого набора категорий в каталог добавляются сами услуги, при этом для каждой из них
сопоставляется собственный шаблон формы заявки, который в дальнейшем может использоваться специалистами
и пользователями при регистрации соответствующих запросов на обслуживание.
При настройке шаблона можно отдельно отредактировать набор полей, видимых для специалиста и пользователя.
По умолчанию шаблон уже содержит поля, которые определяют правила дальнейшей обработки заявок, например,
приоритет, срочность, категорию, сведения об авторе заявки
и прочие. Многие их этих полей можно удалить, но я бы не рекомендовал это делать, поскольку при необходимости восстановить их можно, только полностью пересоздав шаблон.
Это, кстати, является одним из самых больших недостатков
данного функционала. Если не хотите, чтобы пользователь
видел какие-либо служебные поля, их лучше скрыть. Для некоторых полей можно дополнительно установить обязательность заполнения.
Ряд полей заполняется автоматически при создании заявки. Например, при получении заявки по электронной почте поля со сведениями об инициаторе заполняются в соответствии с информацией пользователя ServiceDesk Plus,
а поле «Режим», описывающее канал приема заявки, принимает значение E-Mail.
При разработке шаблона можно создать дополнительные поля различных типов. Однако здесь кроется другой
существенный недостаток. Например, необходимо поле
со списком ПО используемого в компании, при этом каталог
ПО у вас сформирован в конфигурационной БД ServiceDesk
Plus. Однако связать поле с конфигурационной БД нельзя!
В итоге такой список придется набирать вручную, поскольку
возможность импорта также отсутствует.
Администрирование
Что такое CMDB
Согласно словарю терминов и определений ITIL [3] CMDB (Configuration
Management Database) – база данных управления конфигурациями, используемая для хранения конфигурационных записей на всем протяжении
их жизненного цикла.
Система управления конфигурациями поддерживает одну или несколько баз данных управления конфигурациями, каждая база данных хранит
атрибуты конфигурационных единиц и взаимоотношения с другими конфигурационными единицами. CMDB, являющаяся реализацией процесса
управления конфигурациями ITIL, обеспечивает формирование и поддержание в актуальном состоянии логической модели ИТ-инфраструктуры
и ИТ-услуг, а также предоставление данной информации другим процессам.
В последних версиях ServiceDesk Plus появилась возможность динамического управления полями в зависимости
от их содержимого. Например, если инцидент имеет категорию «Программное обеспечение», можно сделать обязательным для заполнения поле с выбором соответствующего
ПО и в то же время скрыть другое – с выбором оборудования. По сути, теперь есть возможность создания достаточно
универсальных шаблонов вместо того, чтобы разрабатывать их для каждого конкретного случая.
Очень удобным функционалом, на мой взгляд, является возможность создания для шаблона преднастроенного
перечня задач, которые можно организовывать в виде иерархии. При создании заявки с использованием такого шаблона автоматически станут формироваться соответствующие задачи, которые будут назначены либо конкретным
специалистам, либо выбранной группе. Далее, при необходимости, в настройках системы (меню «Параметры», раздел
«Служба техподдержки», пункт «Правила закрытия заявки»)
можно включить опцию «Назначенные задачи должны быть
Рисунок 2. Интерфейс работы с изменением
системный администратор декабрь 2015
15
Администрирование
выполнены», что предотвратит закрытие заявки специалистами без завершения всех связанных с ней задач. Задачи
для шаблонов заявок можно задать вручную, а можно из ранее настроенных шаблонов задач. Делается это в пункте
«Шаблон задачи» раздела «Служба техподдержки» меню
«Параметры».
Механизмы создания SLA для запросов на обслуживание
и инцидентов в ServiceDesk Plus реализованы по-разному.
SLA для запросов на обслуживание настраиваются вместе с каталогом услуг и не применяются для инцидентов.
При этом указывается время исполнения запроса на обслуживание, а также, при необходимости, порядок эскалации
в случае приближения к отведенному сроку выполнения
либо в случае его нарушения. Эскалация осуществляется
на выбранных специалистов, всего может быть настроено
до четырех последовательных уровней эскалации. При наступлении настроенного события эскалации соответствующим специалистам направляется уведомление по электронной почте. Настроенные SLA для запросов на обслуживание
привязываются к соответствующим шаблонам заявок, создание которых мы рассмотрели ранее.
SLA для инцидентов создаются в пункте «Соглашения
об уровне обслуживания» раздела «Сведения об организации» меню «Параметры». Они настраиваются более гибко,
в отличие от соглашений для запросов на обслуживание.
Во-первых, можно сформировать набор критериев, в соответствии с которыми тот или иной инцидент будет обрабатываться с соответствующим SLA: приоритет, срочность,
категория инцидента, автор и его подразделение, группа
и даже актив, связанный с инициатором. Например, можно
сформировать соглашение, по которому инциденты, созданные руководителями компании, будут решаться быстрее, чем
созданные бухгалтерией. Во-вторых, в SLA можно отдельно
указать сроки реакции и разрешения инцидентов. В-третьих,
можно отдельно настроить эскалацию для реакции на инцидент и его разрешение. В первом случае эскалация имеет
один уровень, во втором – до четырех. Как и для запросов
на обслуживание, эскалация инцидентов производится
ИТ-инфраструктура
на выбранных специалистов, уведомление которых осуществляется по электронной почте. В отличие от SLA для запросов на обслуживание соглашения для инцидентов не привязываются к шаблонам, а применяются, как это было сказано
ранее, в соответствии с настроенными в них правилами.
Задача 2. Регистрация запросов на обслуживание
и их согласование
Регистрация запросов на обслуживание может производиться как самими пользователями, так и специалистами службы
поддержки. Самым удобным способом является создание
заявки через веб-интерфейс путем выбора соответствующей услуги в каталоге. В таком случае задействуется ранее
созданный шаблон заявки, о котором мы говорили в предыдущей главе, в соответствии с ним будет применен определенный SLA и будут созданы необходимые задачи. Помимо
этого, пользователь должен будет заполнить все обязательные поля заявки, что при грамотном проектировании шаблона сможет существенно облегчить задачу специалисту.
Другой способ регистрации заявки (самый любимый
пользователями) – отправка письма на электронный адрес
ServiceDesk Plus. Этот вариант, безусловно, намного быстрее и проще, однако чаще всего в таком случае пользователи не указывают всей необходимой информации
для исполнения заявки, поэтому специалистам приходится
дополнительно уточнять детали такого запроса на обслуживание. Такие заявки создаются с использованием шаблона по умолчанию. В дальнейшем при обработке запроса
на обслуживание специалист может выполнить конвертацию, выбрав необходимый шаблон заявки. При этом к заявке автоматически применится SLA, а также будет создан
соответствующий набор задач.
В шаблонах заявок можно реализовать процесс согласования. При этом имеется возможность создания нескольких
этапов с выбором согласующих специалистов. Таким образом, например, можно реализовать электронное согласование заявок на предоставление доступа к информационным
системам или приобретение оборудования.
Рисунок 3. Пример связей между элементами конфигурации в модуле CMDB
16
декабрь 2015 системный администратор
ИТ-инфраструктура
Для изучения степени удовлетворенности пользователей
работой службы поддержки можно периодически устраивать опросы. В разделе «Опрос пользователей» меню
«Настройки» вы можете составить перечень вопросов, вариантов ответов и определить событие, по которому пользователю будет предлагаться участие в опросе. По настроенным событиям, после закрытия пользователем заявки, ему
приходит письмо, содержащее ссылку на опрос. Результаты опроса можно посмотреть в описанном выше разделе,
а можно сформировать ряд стандартных отчетов, которые
будут полезны для получения статистической информации.
Например, можно посмотреть статистику по авторам заявок,
специалистам службы поддержки, приоритетам заявок и т.д.
Подробнее об отчетах мы поговорим дальше.
Задача 3. Регистрация инцидентов и проблем
Регистрация инцидентов производится идентично запросам
на обслуживание – либо через веб-интерфейс, либо по электронной почте. Так же как и для запросов на обслуживание,
есть возможность создать набор шаблонов для инцидентов.
Для этого используется пункт «Шаблон инцидента» раздела «Служба техподдержки» меню «Параметры». В отличие
от шаблонов запросов на обслуживание для инцидентов
нельзя отдельно указывать SLA.
На основании одной или нескольких заявок специалист
может создавать проблемы. Возможно и наоборот – создать
проблему в соответствующем модуле системы, а затем ассоциировать с ней необходимые инциденты.
По аналогии с шаблонами запросов на обслуживание
и инцидентов возможно расширить набор стандартных полей проблемы. Это выполняется в пункте «Проблема – Дополнительные поля» раздела «Управление проблемой/изменением» меню «Параметры». Однако для проблем нельзя
создать разные шаблоны, поэтому создание новых полей
распространяется на все записи, в том числе ранее созданные.
В пункте «Правила закрытия проблемы» раздела «Управление проблемой/изменением» меню «Параметры» можно
Администрирование
настроить различные критерии, необходимые для закрытия
проблемы, а также разрешить автоматически закрывать
связанные с проблемой инциденты.
Задача 4. Управление изменениями
Процессу управления изменениями в ServiceDesk Plus уделено очень большое внимание. В последних версиях системы данный модуль был полностью переработан и теперь
реализован в соответствии с моделью ITSM. Кроме того,
компания – разработчик ManageEngine выпустила отдельное руководство [4], в котором подробно, на примерах, описывается функционал модуля управления изменениями. Согласно ему в ServiceDesk Plus реализован жизненный цикл
изменения, состоящий из шести фаз (см. рис. 1).
Фазы жизненного цикла жестко зафиксированы в системе – удалить или создать новые нельзя, однако можно
их комбинировать по своему усмотрению. Можно также
отредактировать настроенные в системе правила. Делается это в пункте «Рабочий процесс изменения» раздела
«Управление проблемой/изменением» меню «Параметры».
В этом же разделе настраивается множество других параметров модуля управления изменениями, в том числе шаблоны форм изменений, которые будут использоваться вместе с настроенными жизненными циклами, а также права
и роли участников изменения.
Сам интерфейс работы с изменением несколько отличается от ранее рассмотренных модулей (см. рис. 2). В нем
перечислены фазы жизненного цикла изменения, можно посмотреть результаты и выполнения.
Результатами выполнения той или иной фазы изменения
могут быть различные события. Например, для фазы планирования это будут документы «План реализации изменения», «Контрольный список», для фазы утверждения – получение статусов «Согласовано» от комиссии по изменениям,
для фазы реализации – выполнение назначенных задач.
Изменение можно связать с другими объектами системы – инцидентами или запросами на обслуживание, проблемами и проектами.
Рисунок 4. Виджеты информационного модуля «Обзор»
системный администратор декабрь 2015
17
Администрирование
К основным неудобствам работы с изменениями я бы
отнес отсутствие возможности настройки задач в шаблоне или жизненном цикле изменения. Задачи, к сожалению,
приходится каждый раз добавлять вручную на этапе реализации, однако если изменения носят регулярный характер,
например, при доработке какой-либо производственной
системы, это увеличивает трудозатраты менеджера изменений и повышает риски, связанные с человеческим фактором.
Задача 5. Систематизация программно-аппаратных
средств
Для решения этой задачи в ServiceDesk Plus используется
два модуля – «Активы» и CMDB. В первом отображается перечень материальных активов и программного обеспечения,
сгруппированных на основании типов продуктов, использующихся в системе, в CMDB эта информация группируется
по типам элементов конфигурации. Здесь можно делать
более сложную многоуровневую иерархическую структуру,
которая формируется в пункте «Типы элементов конфигурации» раздела «Управление активами» меню «Параметры». Помимо этого, в модуле CMDB в качестве элементов
конфигурации представляются все пользователи системы,
организационная структура компании, группы поддержки
и категории услуг.
Для логического соединения элементов конфигурации используется механизм связей (см. рис. 3). В системе
создано больше двух десятков различных типов связей,
при необходимости вы можете создать собственные в пункте «Типы связи» раздела «Управление активами» меню
«Параметры». В итоге, если потратить достаточно много
времени и проделать скрупулезную работу, можно детально
отразить в CMDB ИТ-инфраструктуру компании.
В разделе «Управление активами» меню «Параметры»
вы можете также создать дополнительные поля для ваших
ИТ-инфраструктура
активов, а также настроить различные типы продуктов, которые используются в вашей ИТ-инфраструктуре.
Задача 6. База знаний
Модуль «Решения» в ServiceDesk Plus является реализацией
базы знаний (Knowledge Base) методологии ITSM. Решения
группируются в многоуровневую иерархическую структуру
каталогов, которые в системе называются темами. Каждое
решение привязывается к одной теме. При создании новой
записи можно прикрепить файлы и указать ключевые слова,
по которым будет производиться поиск. Для каждого решения можно указать, будет ли оно доступно пользователям,
а также указать соответствующие группы.
По умолчанию все создаваемые решения являются неутвержденными. Даже если такое решение будет помечено
для публикации пользователям, они его не смогут увидеть.
Создающий решение может представить его к утверждению
специалисту, обладающему соответствующими правами.
Задача 7. Генерация отчетов
В ServiceDesk Plus имеется масса преднастроенных отчетов, с помощью которых можно получить статистическую
информацию по результатам работы всех модулей системы.
Собственные отчеты можно создать с использованием мастера, выбрав тип отчета и функциональный модуль. Однако, если необходим какой-то специфический отчет, можете
написать его самостоятельно на SQL либо отредактировать
запрос существующего отчета. Делается это непосредственно в интерфейсе ServiceDesk Plus, в редакторе запросов. Все отчеты экспортируются в PDF, CSV, HTML, а также
Microsoft Excel, и по расписанию отправляются по электронной почте.
Некоторые отчеты, выводимые в виде графиков или диаграмм либо матричные, можно размещать в качестве виджетов в информационном модуле системы «Обзор» (см. рис. 4).
Рисунок 5. Интерфейс портала самообслуживания
18
декабрь 2015 системный администратор
ИТ-инфраструктура
Портал самообслуживания пользователей
Каждый пользователь, зарегистрированный в ServiceDesk
Plus, если ему присвоены регистрационное имя и пароль,
имеет возможность зайти на портал самообслуживания
(см. рис. 5).
Портал напоминает интерфейс специалистов. На главной странице выведена статистическая информация о заявках, зарегистрированных данным пользователем, размещена ссылка для быстрого создания заявки на обслуживание,
приведены наиболее популярные по статистике системы
решения. В верхнем меню расположены закладки для перехода к перечню заявок и базе знаний. С помощью кнопки
с выпадающим списком «Каталог заявок» можно перейти
к просмотру каталога услуг или создать новый инцидент.
Прочие возможности
В предыдущих главах статьи я рассказал о том,
как ServiceDesk Plus позволяет реализовать мои задачи.
Однако стоит рассказать и о другом функционале данной
системы, который по разным причинам мне не подошел,
но наверняка будет многим интересен. Речь пойдет о модулях управления проектами, закупками и контрактами.
Управление проектами
Наверняка многие со мной согласятся, если я скажу,
что Microsoft Project является одним из самых популярных
и удобных средств управления проектами. И вполне естественно, что, изучая функционал данного модуля, я постоянно сравнивал его с этим замечательным инструментом.
Не думаю, что разработчики ServiceDesk Plus пытались сделать реального конкурента продукту Microsoft – уж слишком
упрощенный и ограниченный инструмент у них получился,
что не позволяет использовать его для больших проектов.
Я бы позиционировал его как некую надстройку для управления несколькими связанными изменениями или контролем
выполнения небольших внутренних проектов. Давайте теперь
разберемся, из-за чего мне так не понравился этот модуль.
Каждый проект разбивается на ключевые этапы,
при этом дополнительные уровни в этапах отсутствуют.
Администрирование
Далее для каждого этапа создаются задачи, для которых
планируется расписание, и ответственные за их выполнение специалисты. Задачи можно связать логически друг
с другом, однако эта связь ни на что, кроме визуализации,
не влияет. Например, если попытаться увеличить срок выполнения родительской задачи, то система даже не выдаст
предупреждения о том, что связанная с ней задача будет
начинаться раньше! Кроме того, сроки выполнения этапа
задаются вручную и никак не увязываются с запланированными задачами. Все это нужно контролировать вручную. Если же вам необходимо изменить сроки выполнения
какого-то этапа, то всю цепочку остальных следующих
за ним этапов, включая задачи, необходимо также менять
вручную. Для каждого проекта отдельно создается команда специалистов, которым назначаются различные роли,
в соответствии с которыми они наделяются необходимыми
правами. Этапы и задачи проекта можно посмотреть на диаграмме Ганта (см. рис. 6).
К сожалению, диаграмма также дает весьма ограниченный набор информации. Например, здесь нельзя увидеть
степень выполнения задач и этапов, увидеть связи между задачами. Правда, при наведении на задачу выводится более
подробная информация, но целостная картина отсутствует.
Настройки модуля расположены в разделе «Управление
проектами» меню «Параметры». Именно здесь, в пункте
«Роли в проекте», настраиваются права участников проекта.
Собственно говоря, совокупность указанных замечаний
не позволила мне на практике использовать данный модуль.
Для меня оказалось удобнее «по старинке» вести проекты
в старом добром Microsoft Project.
Закупка и Контракты
Данные модули тесно связаны друг с другом и предназначены для реализации процесса управления финансами.
На рис. 7 приведена схема документооборота ServiceDesk Plus. На первый взгляд в системе реализована только постоплатная схема, то есть «утром стулья – вечером
деньги». Однако на деле обязательным шагом является утверждение заказа. После этого изменение статусов заказа
Рисунок 6. Диаграмма Ганта
системный администратор декабрь 2015
19
Администрирование
можно производить в произвольном порядке. Например,
можно сначала завести счет и оформить его оплату, а потом
осуществлять приемку позиций заказа.
Прежде чем начинать использовать данный модуль, необходимо ввести в систему контрагентов и действующие
с ними договоры. Для заведения поставщиков необходимо
перейти в пункт «Поставщик» раздела «Управление активами» меню «Параметры». Договоры с поставщиками
регистрируются в модуле «Контракты». Здесь есть полезный функционал, который можно успешно использовать:
для контактов можно указывать срок действия и включить
оповещение об их окончании. Например, если у вас есть годовой контракт на поддержку сервера, можете подстраховаться и установить напоминание за 20 дней до его окончания. К контракту можно прикреплять файлы, например,
сканы реальных договоров с контрагентами.
После этого мы можем в модуле «Закупка» заводить заказы, что, по сути, является отражением спецификации
договора. При этом продукты выбираются из перечня существующих в системе либо добавляется новый. В заказе предусмотрено указание индивидуальной ставки НДС
для каждой позиции, использование двух дополнительных
видов налогов, а также ручная корректировка итоговой суммы, за счет чего можно добиться совпадения первичных документов и заказа.
После заведения заказ отправляется на утверждение
специалисту, наделенному соответствующими полномочиями. Это регулируется установкой признака «Подтвердивший заказ» в свойствах учетной записи.
Далее ответственный за ведение заказа специалист
по мере наступления тех или иных событий выполняет
те или иные действия, за счет чего изменяется статус заказа.
На этапах «Частично получен» и «Полученные» в системе
автоматически создаются активы в соответствии с продуктами и их количеством, указанными в заказе. Это очень удобно, например, если вы получаете 100 телефонных аппаратов
и их необходимо зарегистрировать в качестве активов.
При заведении заказа можно также задействовать еще
два интересных параметра – «Центр учета затрат» и «Код
ГК». Первый параметр предназначен для отнесения затрат,
например, на различные структурные подразделения компании. Если у вас, к примеру, при планировании бюджета ИТ
в качестве центров финансовой ответственности (ЦФО) выступают структурные подразделения, которые потребляют
те или иные материалы и услуги, то при оформлении заказов можно указывать их для получения в дальнейшем соответствующей отчетности. Другой параметр, «Код ГК» (код
ИТ-инфраструктура
главной книги), предполагается использовать для консолидации заказов в сделки. Таким заказам присваиваются одинаковые коды ГК. Справочник обоих параметров ведется в разделе «Закупка/управление контрактами» меню «Параметры».
Заказы можно связывать с зарегистрированными заявками на обслуживание, в рамках которых пользователи
направляют запросы на приобретение оборудования, расходных материалов и ПО.
В целом функционал модуля «Контракты» вполне можно использоваться для ведения учета затрат небольшого
ИТ-подразделения. При большом объеме документов функционал данного модуля не сможет заменить учетной системы, хотя все равно может стать хорошим подспорьем, хотя
бы даже для массовой регистрации активов.
На этом я заканчиваю обзор основных возможностей
ServiceDesk Plus. За рамками статей остались механизмы
расширения функциональности системы с использованием API и различных скриптов, а также средства интеграции
с другими программными продуктами ManageEngine. Однако, на мой взгляд, ServiceDesk Plus, являясь «коробочным»
решением, обладает достаточно развитой функциональностью для решения большого спектра задач при автоматизации деятельности ИТ-подразделения и в большой степени
соответствует практикам методологии ITSM. При самостоятельном изучении возможностей ServiceDesk Plus, настройки этой системы вам наверняка пригодятся различные статьи и руководства [5], а также будет полезным форум [6]. EOF
[1] Голосов Д. Автоматизация деятельности ИТ-подразделения
с помощью ITSM-системы. // «Системный администратор», №78, 2015 г. – С. 9-13 (http://samag.ru/archive/article/2981).
[2] Голосов Д. Автоматизация деятельности ИТ-подразделения
с помощью ITSM-системы. // «Системный администратор»,
№10, 2015 г. – С. 16-23 (http://samag.ru/archive/article/3041).
[3] Словарь терминов и определений ITIL – http://itsmforum.ru/ZAMtest/Russian_2011_Glossary_v2.0.pdf.
[4] Change management process flow guide – https://www.
manageengine.com/products/service-desk/change-managementprocess-flow-guide.pdf.
[5] Ресурсы – https://www.manageengine.com/products/servicedesk/resources.html.
[6] Форум – https://forums.manageengine.com/servicedesk-plus.
Ключевые слова: ITSM, ServiceDesk Plus, администрирование,
управление.
Рисунок 7. Схема процесса управления закупкой
20
декабрь 2015 системный администратор
Администрирование
how to
Удаленный мониторинг
Linux-серверов с GKrellM
Рассмотрим пример использования утилиты GKrellM
для удаленного мониторинга серверов Linux из среды Windows
Ключевое место в ИТ-инфраструктуре любого предприятия
занимают серверы. Постоянный мониторинг их состояния
(загрузка CPU и RAM, активность и температура HDD и т.д.)
является важной повседневной задачей системного администратора. Рассмотрим, как ее решить с помощью бесплатной утилиты GKrellM (GNU Krell Monitors) [1].
Описание GKrellM
GKrellM – утилита, которая может контролировать: уровень
загрузки CPU, RAM и SWAP; температуру, скорость вращения вентиляторов и напряжения питания; количество
запущенных процессов; активность, температуру и объем
свободного места HDD; активность сетевых интерфейсов
и объем сетевого трафика; состояние почтовых ящиков;
состояние батареи (для ноутбука или при наличии ИБП);
uptime-системы.
Также GKrellM позволяет: создавать триггеры (Warning/
Alarm) для контролируемых параметров; задавать команды,
выполняющиеся при активации мониторов (CPU, RAM, Proc
и т.д.); осуществлять удаленный мониторинг систем на базе
ОС Linux/Windows/FreeBSD/Mac OS.
Ключевая особенность GKrellM – использование одного процесса для мониторинга всех требуемых параметров
(single process stack of system monitors), что минимизирует
использование системных ресурсов.
GKrellM состоит из:
> GKrellM Сервер (gkrellmd). Ожидает подключения от клиентов и сообщает им с заданным интервалом (update-hz)
значения контролируемых параметров.
> GKrellM клиент (gkrellm). Собирает и отображает значения контролируемых параметров. При запуске без указания сервера отображает параметры для локального ПК.
Удаленный мониторинг серверов с GKrellM
Рассмотрим решение задачи удаленного мониторинга серверов на примере мониторинга сервера на базе
ОС RedHat Enterprise Linux 6.4 (RHEL 6) из среды Windows
(ОС Windows 7 x64).
Для успешной работы сервера GKrellM в среде Linux необходимо наличие следующих пакетов:
> Glib2 v.2.22 и выше;
> lm_sensors – для контроля температуры CPU, скорости
вращения вентиляторов и напряжения питания;
> hddtemp – для контроля температуры HDD.
Для установки и настройки gkrellmd в RHEL6 необходимо
подключить EPEL-репозиторий:
$ wget https://dl.fedoraproject.org/pub/epel/ ↵
epel-release-latest-6.noarch.rpm
$ sudo rpm –i epel-release-latest-6.noarch.rpm
системный администратор декабрь 2015
Ставим:
$ sudo yum install gkrellm-daemon
Для начала мониторинга необходимо отредактировать
конфигурационный файл /etc/gkrellmd.conf, указав значения:
> address, port – IP-адрес и порт сетевого интерфейса,
на котором сервер ожидает соединения (по умолчанию
порт 19150 на всех доступных интерфейсах);
> update-hz – частота обновления контролируемых параметров;
> pidfile – каталог размещения pid-файла;
> logfile – каталог размещения log-файла.
Запускаем службу с помощью команды:
$ sudo service gkrellmd start
Для установки Windows-версии клиента GKrellM достаточно скачать и запустить файл gkrellm-2.3.6-rc1-17-g32133e6win64-setup.exe [2].
Чтобы подключиться к требуемому серверу, необходимо
указать его имя/IP-адрес и порт:
C:\Program Files\GKrellM\bin\gkrellm.exe ↵
--server server-name --port port-number
Мониторинг нескольких серверов осуществляется одновременным запуском соответствующего числа копий gkrellm.
В рабочем окне программы отображаются актуальные значения контролируемых параметров (мониторы), детальная
настройка которых осуществляется из меню Configuration.
Кроме включения/выключения отдельных мониторов, можно настроить формат отображения информации (вкладка
Setup), а также триггеры Warning/Alarm (меню Alerts).
Все настройки сохраняются в конфигурационных файлах user-config_S-server-name, расположенных в каталоге
%USERPROFILE% \.gkrellm2\.
GKrellM зарекомендовала себя с положительной стороны,
предоставляя актуальную информацию о текущем состоянии серверов. Минимальные системные требования, простота установки и настройки, количество доступных для мониторинга параметров позволяют рекомендовать GKrellM
для организации наблюдения за состоянием парка серверов.
[1] Официальный сайт проекта GKrellM – http://gkrellm.srcbox.net.
[2] Дистрибутив GKrellM для ОС Windows – http://www.srcbox.net/
projects/gkrellm.
Советует Даниил Прахин
21
Администрирование
how to
Визитка
АЛЕКСАНДР СВИРИДЕНКО, ООО «Доктор Веб», инженер-программист
Особенности удаления файлов
с внешней SD-карты в Android
В Android 4.4 ограничение на использование внешней SD-карты было поддержано
большинством производителей устройств. Это вылилось в то, что программы
не могли создавать или удалять файлы на внешней SD-карте привычным способом
До Android 3.0 не существовало никаких ограничений
для программ на использование внешней SD-карты. Они
могли создавать, удалять, редактировать все находящиеся
там файлы. Например, программа фотокамеры создавала папку и сохраняла там снимки. Фоторедактор другого
производителя мог открыть эти снимки и изменить. А третья программа, например, резервного копирования, могла
эти снимки стереть с карточки. Начиная с Android 3.0 Google
начал вводить ограничение на совместное использование
файлов. Большинство производителей проигнорировало
эти изменения, так как до Android 4.4 они были не обязательны. Тем не менее существовали модели устройства,
которые выполняли эти требования. Например, у Motorola
Xoom (Android 3.0) и некоторых устройств Sony Xperia
(Android 4.0/4.1) уже возникали проблемы.
В Android 4.4 ограничение на использование внешней
SD-карты было поддержано большинством производителей
устройств. Это вылилось в то, что программы не могли создавать или удалять файлы на внешней SD-карте привычным
способом, при этом работа со встроенной памятью не изменилась. Это стало головной болью для производителей
программ, которые активно работали с файлами. Идеология Google, видимо, подразумевала, что внешняя SD-карта –
это хранилище файлов пользователя, которые он заливает туда с помощью компьютера, в основном используемое
как хранилище музыки. И изменять, и удалять свои файлы
пользователь мог, только подключив свой телефон к PC.
Когда телефон с помощью шнура подключается к компьютеру, в большинстве случаев используется протокол
MTP. Прямо через проводник Windows можно зайти на карточки телефона и получить управление файлами. Сам протокол MTP в Android реализован невероятно криво. Если
у вас на внутренней карте создался какой-то файл,
он не будет виден в Windows до тех пор, пока вы не перезагрузите устройство, или же программист сам должен
сделать ряд недокументированных действий, чтобы файл
оказался виден.
К счастью, эти косяки можно использовать и себе
на пользу. Вот способ, который позволяет удалять файлы
22
с внешней SD-карты в обход ограничений Google. Этот способ не гарантирует работу на всех устройствах, возможно,
в будущем Google закроет эту лазейку. Но тем не менее
это работает на большинстве устройств.
Листинг 1. Код класса FileMediaUtils.java
import
import
import
import
import
import
android.content.ContentResolver;
android.content.ContentValues;
android.content.Context;
android.database.Cursor;
android.net.Uri;
android.provider.MediaStore;
public class FileMediaUtils {
private static Uri getFileUri(Context context, ↵
final String fullname)
{
Uri uri = null;
Cursor cursor = null;
ContentResolver contentResolver = null;
try
{
contentResolver=context.getContentResolver();
if (contentResolver == null)
return null;
uri= MediaStore.Files.getContentUri("external");
String[] projection = new String[2];
projection[0] = "_id";
projection[1] = "_data";
String selection = "_data = ? ";
String[] selectionParams = new String[1];
selectionParams[0] = fullname;
String sortOrder = "_id";
cursor=contentResolver.query(uri, projection, ↵
selection, selectionParams, sortOrder);
if (cursor!=null)
{
try
{
if (cursor.getCount() > 0)
{
cursor.moveToFirst();
int dataColumn = ↵
cursor.getColumnIndex("_data");
String s = cursor.↵
декабрь 2015 системный администратор
Администрирование
how to
Этот способ не гарантирует
работу на всех устройствах,
возможно, в будущем Google
закроет эту лазейку
getString(dataColumn);
if (!s.equals(fullname))
return null;
int idColumn = ↵
cursor.getColumnIndex("_id");
long id = cursor.getLong(idColumn);
uri= MediaStore.Files. ↵
getContentUri("external",id);
}
else
{
ContentValues contentValues=new ↵
ContentValues();
contentValues.put("_data",fullname);
uri = MediaStore.Files. ↵
getContentUri("external");
uri = contentResolver. ↵
insert(uri,contentValues);
}
}
catch (Throwable e)
{
uri = null;
}
finally
{
cursor.close();
}
}
}
catch (Throwable e)
{
uri=null;
}
return uri;
}
public static boolean deleteMTPFile(Context context, ↵
final String fullname)
{
Uri uri=getFileUri(context,fullname);
if (uri==null)
{
return false;
}
try
{
ContentResolver resolver=context. ↵
getContentResolver();
ContentValues contentValues = new ↵
ContentValues();
системный администратор декабрь 2015
int media_type = 4;
contentValues.put("media_type", media_type);
resolver.update(uri, contentValues, null, null);
return resolver.delete(uri, null, null) > 0;
}
catch (Throwable e)
{
}
return false;
}
}
Вот пример использования:
boolean res = true;
res=file.delete();
if (!res)
{
FileMediaUtils.deleteMTPFile(context, ↵
file.getAbsolutePath());
}
Как мы видим, сначала делается попытка удалить обычным способом, и если она не сработала, то уже используется вот этот обходной.
Хочу обратить ваше внимание, что MTP-протокол появился в Android начиная с версии 3.0. Если ваша программа рассчитана на работу в более старых версиях, то обязательно проверьте текущую версию ОС перед вызовом
deleteMTPFile.
И уже в заключение можно еще раз проверить, удалился ли файл:
if(file.exists())
{
...
}
Если он остался на месте, то уже можно переходить
к способу, использующему DocumentFile, но это уже тема
для другой статьи. EOF
Ключевые слова: Android, JavaScript, разработка приложений.
23
Администрирование
инструменты
Визитка
РАШИД АЧИЛОВ, главный специалист по защите информации в компании, занимающейся автоматизацией горнодобывающей
промышленности, shelton@sheltonsoft.ru
Построение корпоративных VPN
Часть 9. VPN, IPSec и Linux
В продолжении цикла по построению корпоративных VPN рассмотрим различные
вопросы по организации IPSec VPN на Linux – прохождение трафика через iptables,
команды управления, статистику работы IPSec
VPN. IPSec. Linux
С момента публикации предыдущих частей цикла прошло
ни много ни мало три года [1]. С тех пор утекло много воды,
сменилось много задач, но одно оставалось неизменным –
IPSec VPN, это ipsec-tools (racoon2 оказался крайне сырым
и практически не использовался), а ipsec-tools – это racoon.
Со всеми его плюсами и минусами.
Но время шло, демон постепенно перебрался на Остров
Пингвинов, и, когда в очередной раз встал вопрос об организации VPN между подразделениями, решено было не воссоздавать старую инфраструктуру, а построить ее с нуля
на том, что может нам предложить пингвинье семейство.
Забегая вперед, скажу, что предложить оно смогло немного – все тот же ipsec-tools, strongsSwan да openswan,
из которых внимания заслуживает только strongSwan, потому что развитие проекта отнюдь не заброшено, как у прочих
двух.
Примеры конфигурационных файлов и команд мы будем
пояснять на примере сети, изображенной на рис. 1. Разумеется, ею послужит наша любимая LLC DeltaHardware.
На всех серверах CentOS используется ядро версии 2.6.32. Версии других ОС обозначены на рис. 1. Все примеры конфигурации в данной статье будут относиться к центральному серверу.
И хотя использовать мы будем strongSwan, о его настройке будет написана следующая статья. Сейчас мы рассмотрим вопросы, ответы на которые разбросаны по нескольким
файлам документации – ну, как обычно, а именно:
> как проходят зашифрованные пакеты через iptables
и в каком месте они расшифровываются, а также в каком месте они шифруются;
> почему для работы IPSec больше не нужны туннельные
интерфейсы;
> как посмотреть настройки работающих VPN и статистику IPSec.
Порядок прохождения зашифрованных пакетов
Схем прохождения пакетов через iptables, он же netfilter,
создано много. Запрос netfilter packet flow дает 15 тысяч
24
результатов. Только пригодится далеко не каждый результат, потому что как минимум половина их них не объясняет,
куда деваются пакеты IPSec – ESP и AH, где и кем производятся их шифрование и расшифровка и как можно ими
управлять. Полную схему, где достаточно подробно расписано, как пакет проходит через цепочки и таблицы, можно
скачать с [2]. Опубликовать ее в журнале невозможно, потому что схема очень мелкая, на ней достаточно много информации. Тем не менее перед тем, как читать статью дальше,
рекомендую ее открыть, потому что к ней постоянно будут
отсылки.
Допустим, IPSec-туннель установлен, Phase1 и Phase2
прошли, все хорошо. Почему же не ходят пакеты, где они
шифруются, и нужны все же или нет туннельные интерфейсы?
Вопрос с туннельными интерфейсами, как правило,
возникает при чтении старых мануалов из интернета,
в которых прямо указывалась необходимость их создания – что для Linux, что для FreeBSD. Не знаю, может быть,
для связи FreeBSD<–>FreeBSD с использованием IKE-демона
racoon они еще нужны, но что для связи FreeBSD<–>Linux
и FreeBSD<–>MikroTik они не нужны абсолютно, это я могу
заявить со всей ответственностью – было проведено множество экспериментов. Не нужно больше создавать и настраивать интерфейсы gif во FreeBSD, ipip в Linux или IP-IP
туннели в MikroTik. Точнее, создать-то их никто не помешает,
они даже работать будут, только смысла в них не будет никакого.
Естественно, сразу возникает вопрос: почему?
Для ответа на него берем и рассматриваем схему [2]. Когда на сервер поступает пакет протокола ESP или NAT-T (протокол UDP, передаваемый по порту 4500, декапсуляция
из него выполняется автоматически), он на общих основаниях проходит таблицы mangle prerouting, nat prerouting, mangle
input, filter input и попадает на блок, который как раз и занимается тем, что просматривает, а не является ли данный
пакет пакетом ESP. Если он таковым является, то из пакета
извлекается SPI (Security Parameter Index), который стороны заранее согласовали, по этому индексу находится ключ
декабрь 2015 системный администратор
инструменты
Администрирование
Понимание того, как пакеты
обрабатываются системой,
значительно облегчит
построение туннелей
расшифровки, пакет расшифровывается и снова направляется на вход таблицы mangle prerouting – проходить весь
файрвол заново, но уже в расшифрованном виде.
При отправке пакета процедура, понятное дело, зеркально обратная – пакет проходит mangle output, nat output, filter
output, mangle postrouting, nat postrouting и, уже будучи готов
к отправке, проходит блок, который проверяет, а не нужно
ли данный пакет обработать политикой IPSec. Если ответ
положительный, то выполняется шифрование пакета – SPI
в этом случае берется через политику, – и зашифрованный
пакет заново проходит файрвол, но уже в зашифрованном
виде.
В каком месте из перечисленных операций требуется
наличие отдельного туннельного интерфейса? Правильно,
ни в каком. Поэтому и не нужно его создавать. Понятно,
что мы говорим сейчас о чистом туннеле IPSec, не рассматривая различную экзотику типа GRE over IPSec или наоборот.
Итак, с необходимостью туннельных интерфейсов разобрались. Теперь давайте закончим с порядком прохождения
iptables.
Как уже было сказано выше, пакет ESP проходит файрвол дважды – один раз будучи зашифрованным, второй раз
будучи расшифрованным. Пройдя стандартную последовательность в зашифрованном виде, он попадает на блок xfrm
lookup, который определяет, во-первых, ESP это или нет,
а во-вторых, ищет указанный в пакете SPI среди всех известных ему в данный момент SA (Security Association). SA
хранится в специальной структуре ядра, называемой SAD
(Security Associations Database), и создается при завершении процесса установления соединения. В SA нет понятия,
какой пакет шифровать – он отвечает за более низкоуровневые параметры: какой алгоритм аутентификации сторон, какой алгоритм и ключ шифрования, какой алгоритм
подписи пакета и т.д. SA существует только пока активно
Рисунок 1. Схема сети демонстрационной модели
системный администратор декабрь 2015
25
Администрирование
соединение, при переустановке соединения SA уничтожается и создается заново. Понятие о том, какие пакеты шифровать, записано в Secuirty Policy (SP), для хранения которой
тоже есть специальная структура ядра – SPD (Security Policy
Database). Между собой они увязываются по идентификатору, тому самому, который в ipsec-tools и на MikroTik задается
параметром level, а в strongSwan – параметром uniqueids.
Итак, xfrm lookup просмотрел SAD, сравнивая SPI пакета
с SPI всех имеющихся в ней записей. Если таковой не нашлось, то пакет будет просто отброшен, если же нашлось,
то он будет расшифрован, и этот расшифрованный пакет,
который теперь вернулся в первоначальное состояние, заново поступает на вход таблицы mangle prerouting, чтобы быть
направленным либо в локальные процессы, либо на маршрутизацию. И, если в процессе его повторного прохождения
он будет по тем или иным причинам отброшен, это и будет
выглядеть как «пакеты пропадают неизвестно куда».
Об этом, как правило, и забывают. В многочисленных руководствах подробно расписывается, что делать
для того, чтобы точки увязались, чтобы успешно прошли
Phase1 и Phase2. Спору нет, информация нужная. Но вот
что делать дальше, после того, как точки увязаны, обычно
не пишут...
Рассмотрим набор правил iptables, который описывает
данную ситуацию, применительно к схеме на рис. 1. Предполагаем, что правило по умолчанию DROP.
-A INPUT -p esp -j ACCEPT
-A OUTPUT -p esp -j ACCEPT
-A INPUT -p udp -m multiport --source-ports 500,4500 ↵
-j ACCEPT
-A OUTPUT -p udp -m multiport --destination-ports 500,4500 ↵
-j ACCEPT
Эти правила обеспечивают работу IKE – части IPSec, отвечающей за согласование параметров туннелей. Блокировать порт 500 нельзя, начальное установление соединения
идет именно по нему. После добавления этих правил туннель должен быть установлен.
Но работать он начнет только после того, как мы создадим список vpnsubnets для ipset:
create vpnsubnets hash:net family inet hashsize 1024 ↵
maxelem 65536
add vpnsubnets 10.87.1.0/24
add vpnsubnets 10.42.1.0/24
add vpnsubnets 10.14.1.0/24
add vpnsubnets 10.54.1.0/24
и добавим следующие правила iptables:
-A INPUT -m set --match-set vpnsubnets src -j ACCEPT
-A OUTPUT -m set --match-set vpnsubnets dst -j ACCEPT
-A FORWARD -m set --match-set vpnsubnets src -j ACCEPT
потому что когда, например, машина 10.42.1.2 отправляет
ping на 10.14.1.2, то расшифрованный пакет, пройдя стандартные таблицы, попадает на правило по умолчанию, которым, как я уже сказал, является DROP.
Еще такой момент: казалось бы, при расшифровке к SPD
не обращаются – SPI есть в пакете. Но это не так. Ведь
в политике могут быть задан не только encrypt, но и drop,
26
инструменты
поэтому ядро проверяет, а нужно ли вообще расшифровывать пакет.
А вот шифрование пакета начинается с просмотра SPD,
во время которого решается, нужно ли шифровать. Если
шифровать нужно, то по индексу находится SA, пакет шифруется, и формируется пакет протокола ESP, который будет
направлен на IP, указанный в политике. На блок xfrm lookup
пакет попадает уже после того, как он один раз прошел
все таблицы файрвола. Сформированный пакет ESP проходит файрвол еще раз.
Почему мы не записали разрешение на протокол ESP
в таблицу filter forward? А в нем для нас нет никакого смысла. ESP форвардится тогда, когда за маршрутизатором
есть другой сервер с действительным IP, который принимает соединения, причем «наш» маршрутизатор не использует NAT (чем опасен NAT для IPSec, мы еще расскажем).
Это характерно для DMZ, но в нашей схеме DMZ нет.
Где-то ходит мой пакет по сетям вдали
Теория – конечно, штука замечательная, но, как правило,
расходящаяся с тем, что реально происходит. Поэтому вряд
ли у вас все заработает с первого раза, и нужно сразу быть
во всеоружии – что делать в том случае, если что-нибудь
не так.
Проблем здесь на самом деле всего две – пакет либо
не попал на блок xfrm lookup, либо попал, но в таком искаженном виде, что был отброшен.
Первым делом надо убедиться, что пакет вообще попадает на сервер. Это проще всего делается командой tcpdump:
# tcpdump -i eth0 -n esp or port 4500 or port 500
Если tcpdump показывает наличие пакетов, то, чтобы
убедиться, что пакет таки добирается до блока xfrm lookup,
нужно перед самым разрешающим правилом для пакетов
ESP поставить правило логирования:
-A INPUT -m policy --dir in --pol ipsec --mode tunnel ↵
--proto esp -j LOG --log-prefix "IPSec dir in ↵
input packet "
-A OUTPUT -m policy --dir out --pol ipsec --mode tunnel ↵
--proto esp -j LOG --log-prefix "IPSec dir out ↵
output packet"
Если в лог не выводятся записи с таким префиксом, значит, необходимо разобраться с правилами файрвола, которые где-то не пропускают пакеты ESP. Еще возможен вариант, когда используется NAT-T, но порт 4500 не разрешен
в конфигурации файрвола.
Вместо действия LOG можно включить специальный режим трассировки правил файрвола. Для этого предварительно нужно добавить в файл /etc/sysconfig/iptables-config,
в строку IPTABLES_MODULES имя модуля лога ipt_LOG, а потом создать в таблице raw prerouting (если трассируется
входящий пакет) или raw output (если трассируется исходящий пакет) правила с действием TRACE:
-A OUTPUT -p udp -m multiport --destination-port 500,4500 ↵
-j TRACE
-A PREROUTING -p udp -m multiport --destination-port 500,4500 ↵
-j TRACE
декабрь 2015 системный администратор
инструменты
-A OUTPUT -p esp -j TRACE
-A PREROUTING -p esp -j TRACE
Если записи с указанным префиксом в лог выводятся,
то нужно убедиться в том, что расшифрованный пакет поступает на повторную обработку:
-A INPUT -m set --match-set vpnsubnets src -j LOG ↵
--log-prefix "VPN subnets input "
-A OUTPUT -m set --match-set vpnsubnets dst -j LOG ↵
--log-prefix "VPN subnets output "
Если с этим префиксом записи в логе не появляются,
то вот тут и начинается самое интересное.
Средства для контроля, как блок xfrm lookup прочитал
пакет ESP, и информация, какие при этом возникли ошибки, имеются только в Linux, причем они не документированы
ни в каких манах. Для отображения статистики следует использовать команду:
# cat /proc/net/xfrm_stat
В ответ будут выведены статистика работы модуля xfrm
lookup и количество ошибок по категориям. О том, что означает каждая категория, тоже можно прочитать исключительно в исходных текстах ядра Linux, например [3], причем фактическая причина может значительно отличаться
от той написанной. Например, счетчик XfrmInStateProtoError
растет в том случае, если для подписи пакетов используется
алгоритм хеша, который не может быть корректно распознан ядром сервера.
Такая ситуация возникает, когда пытаешься соединить
strongSwan и MikroTik и используешь для подписи пакетов
хеш SHA256 – все как будто работает, а данные не ходят.
Откатываешь хеш до SHA1 – все начинает работать. Но проверять это приходится чисто экспериментальными методами – что-то изменил, попробовал – если счетчики не увеличиваются, ну, значит, попал... Проблема вышеописанной
конкретной ситуации может быть еще и в том, что, например, связь микротика с микротиком с использованием хеша
SHA256 происходит без проблем.
К сожалению, в других ОС – Mikrotik, FreeBSD – такой инструмент отсутствует, и поэтому там приходится полагаться
только на косвенные признаки – например, в MikroTik существует очень удобный счетчик пакетов, прошедших через
данную SA, – он постоянно обновляется и сразу видно, используется данная SA или нет.
Если же записи с последним префиксом в логе появляются, стоит убедиться в том, что расшифрованный пакет
отправился в ту подсеть, для которой он предназначался.
Ошибка и в случае, когда пакет уходит в подсеть назначения
и когда не уходит, одна и та же – проблемы с маршрутизацией: просто место ее локализации разное.
И есть еще одна проблема, о которой уже упоминалось
ранее. Это вопросы взаимодействия с NAT.
Как известно, формат пакета ESP (описан в RFC 4303, [4])
предполагает наличие контрольной суммы, которая считается по всему пакету целиком, вместе с IP-заголовком.
Называется она ICV – Integrity Check Value. В то же время
NAT должен поменять IP-адрес в заголовке пакета перед
его отправкой, иначе просто не придет ответный пакет.
системный администратор декабрь 2015
Администрирование
Данная проблема возникает на любом маршрутизаторе,
который одновременно выполняет функции сервера VPN
и NAT-сервера – самым последним действием в таблице nat
postrouting сервер должен выполнить SNAT. Но пакет ESP
уже сформирован, ICV рассчитано, и если сейчас его изменить, то контрольная сумма не сойдется. Для этого обычно IPSec-пакеты пропускают непосредственно перед тем,
как выполняется SNAT:
-A POSTROUTING -o eth0 -m policy --dir out --pol ipsec ↵
-j ACCEPT
-A POSTROUTING -o eth0 -j SNAT --to-source 212.20.5.9
Есть еще один момент, связанный исключительно с ситуацией, когда сервер игнорирует пакеты c адресами Интранет, то есть соответствующими RFC1918 [5]. Как правило,
игнорирование делается в два этапа – в таблице mangle
prerouting на пакет устанавливается метка, а в таблице
filter input все промаркированные таким образом пакеты отбрасываются. Поскольку каждый пакет, переданный через
VPN, проходит файрвол дважды, то, как только в таблицу
mangle prerouting будет передан расшифрованный пакет,
он тут же будет отмечен и отброшен. Чтобы это не происходило, обычно пакеты, относящиеся к подсетям VPN, не проверяют на принадлежность к RFC1918:
-A PREROUTING -i eth0 -m set --match-set vpnsubnets src ↵
-j ACCEPT
-A PREROUTING -i eth0 -m set --match-set rfc1918 src ↵
-j MARK --set-mark 1
Здесь мы предполагаем, что в списке rfc1918 перечислены все относящиеся к RFC 1918 подсети и отбрасываем
такие пакеты в таблице filter input:
-A INPUT -m mark --mark 1 -j DROP
Как посмотреть данные работы
Последнее, что осталось упомянуть в статье, – это способы,
которыми можно посмотреть содержимое SAD, SPD и прочих объектов. Особенно когда уже возникает необходимость
не использовать ничего от программ типа strongSwan.
Для просмотра SPD в Linux можно использовать команду
ip с параметром xfrm:
# ip xfrm policy list
src 10.54.1.0/24 dst 10.87.1.0/24
dir fwd priority 2883 ptype main
tmpl src 212.20.5.9 dst 170.70.70.1
proto esp reqid 1 mode tunnel
Подобным же образом можно просмотреть SAD:
# ip xfrm state list
src 170.70.70.1 dst 212.20.5.9
proto esp spi 0xc3c69501 reqid 1 mode tunnel
replay-window 32 flag 20
auth hmac(SHA1)
0x4f3d1312185feb4f631e25aa5160737f9e8f6bcc
enc cbc(aes) 0x27d9ae03ffe71ff51d2179a741f103ed
encap type espinudp sport 500 dport 500 addr 0.0.0.0
27
Администрирование
При использовании стандартных команд отображается не вся информация, но самое главное – SPI и индекс
(requid) – отображается.
При использовании strongSwan и поставляемой в комплекте программы для его управления swanctl отображается гораздо больше информации, причем она организована
в два блока, первый из которых появляется при установлении Phase1, а второй – при установлении Phase2:
# swanctl –l
windycat: #3, ESTABLISHED, IKEv2, 8286ee83d0ce3521:c8dd8ea3e
341d472
local '170.70.70.1' @ 170.70.70.1
remote '212.20.5.9' @ 212.20.5.9
AES_CBC-128/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_2048
established 1069s ago, reauth in 5303s
windycat: #9, reqid 1, INSTALLED, TUNNEL-in-UDP, ESP:AES_
CBC-128/HMAC_SHA1_96
installed 1069s ago, rekeying in 1627s, expires in 2531s
in ce28e539,
0 bytes,
0 packets
out c9b609ec,
0 bytes,
0 packets
local 10.87.1.0/24
remote 10.54.1.0/24
Блоки начинаются именем конфигурации соединения,
в данном случае это windycat. Первый блок, который относится к Phase1, описывает реальные IP серверов VPN,
задействованных для построения туннеля, и его параметры – шифрование, алгоритм аутентификации и хеша,
размер блока Диффи-Хеллмана. Второй блок – к Phase2,
и он описывает, когда туннель был установлен, когда следующий обмен ключами, какие SPI и сколько байт прошло
через данные SA.
В MikroTik все достаточно удобно отображается в winbox,
хотя статистику работы IPSec можно получить и просто
в консоли:
[achilov@Kaktus] /ip ipsec installed-sa print
Flags: A - AH, E - ESP
0 E spi=0x8615525 src-address=170.70.70.1 dstaddress=212.20.5.9 state=mature auth-algorithm=SHA256 encalgorithm=aes-cbc auth-key="7a8680087dc947d6ee7db3057fbf728f6
98f2b0fa805c0fcbfcf32dd1ea31c17"
enc-key="382f242fc770f3f93200ddc87c5a7825"
addtime=oct/02/2015 19:57:52 expires-in=29m13s addlifetime=24m/30m current-bytes=224 replay=128
Во FreeBSD в зависимости от того, какой IKE-демон используется, можно для отображения SAD использовать либо
старый привычный setkey:
# setkey –D
180.80.80.1[500] 212.20.5.9[500]
esp-udp mode=tunnel spi=97004941(0x05c82d8d)
reqid=16385(0x00004001)
E: aes-cbc 321148c7 8cd25c66 ecc0698f d8c5d6cf
A: hmac-SHA256 d061efe1 cdb9be6e 3ba70f3d a4d7079f
b741b25a 6e5e7d72 a400f7a7 79be6991
seq=0x00000000 replay=32 flags=0x00000000 state=mature
created: Oct 7 19:27:40 2015
current: Oct 7 19:38:13
2015
diff: 633(s)
hard: 0(s)
soft: 0(s)
last:
hard: 0(s)
soft: 0(s)
current: 0(bytes)
hard: 0(bytes)
soft: 0(bytes)
allocated: 0
hard: 0
soft: 0
sadb_seq=1 pid=10458 refcnt=0
инструменты
либо, если установлен strongSwan, программу ipsec, которая является некоторым вариантом swanctl, несмотря
на то что собственно swanctl на FreeBSD не собирается:
# ipsec status
Security Associations (1 up, 0 connecting):
mikrotik-rb1100ahx2-rsa[2]: ESTABLISHED 9 minutes ago, 180.80
.80.1[180.80.80.1]...212.20.5.9[212.20.5.9]
mikrotik-rb1100ahx2-rsa{1}: REKEYED, TUNNEL, reqid 1,
expires in 55 minutes
mikrotik-rb1100ahx2-rsa{1}:
10.54.1.0/24 === 10.87.1.0/24
mikrotik-rb1100ahx2-rsa{2}: REKEYED, TUNNEL, reqid 1,
expires in 13 minutes
mikrotik-rb1100ahx2-rsa{2}:
10.54.1.0/24 === 10.87.1.0/24
mikrotik-rb1100ahx2-rsa{3}: INSTALLED, TUNNEL, reqid 1, ESP
SPIs: cea6aa5e_i 0a3d12f9_o
mikrotik-rb1100ahx2-rsa{3}:
10.54.1.0/24 === 10.87.1.0/24
IPSec – тема отнюдь не простая. Поэтому понимание того,
как пакеты обрабатываются системой, как они проходят
через iptables, каким образом можно отследить их прохождение и какие при этом могут быть наиболее общие ошибки, значительно облегчит в будущем построение туннелей
между Linux и Linux, Linux и микротиком, между двумя микротиками и даже между микротиком и FreeBSD. EOF
[1] Ачилов Р. Построение корпоративных VPN. Использование
vtund. Часть 1. // «Системный администратор», №10, 2010 г. –
С. 40-45 (http://samag.ru/archive/article/1130).
Ачилов Р. Построение корпоративных VPN. Использование
IPSec. Часть 2. // «Системный администратор», №12, 2010 г. –
С. 13-19 (http://samag.ru/archive/article/1097).
Ачилов Р. Построение корпоративных VPN. Использование
IPSec для связи с аппаратным роутером. // «Системный администратор», №3, 2011 г. – С. 28-32 (http://samag.ru/archive/
article/1195).
Ачилов Р. Построение корпоративных VPN. Использование
IPSec для связи с программным роутером. // «Системный администратор», №4, 2011 г. – С. 26-29 (http://samag.ru/archive/
article/1228).
Ачилов Р. Построение корпоративных VPN. Использование
IPSec для подключения с Windows. // «Системный администратор», №7-8, 2011 г. – С. 18-23 (http://samag.ru/archive/
article/1365).
Ачилов Р. Построение корпоративных VPN. IKED – альтернатива ipsec-tools. // «Системный администратор», №9, 2012 г. –
С. 46-51 (http://samag.ru/archive/article/2271).
Ачилов Р. Построение корпоративных VPN. Программа
IKED в качестве сервера. // «Системный администратор»,
№10, 2012 г. – С. 14-17 (http://samag.ru/archive/article/2290).
Ачилов Р. Построение корпоративных VPN. Опыт использования IPSec-клиентов под Windows. // «Системный администратор», №11, 2012 г. – С. 30-34 (http://samag.ru/archive/article/2313).
[2] Полная схема прохождения пакетов через iptables, включающая xfrm (обработку IPSec-пакетов) – https://commons.
wikimedia.org/wiki/File:Netfilter-packet-flow.svg.
[3] Краткое описание счетчиков работы модуля xfrm – https://www.
kernel.org/doc/Documentation/networking/xfrm_proc.txt.
[4] RFC 4303 – https://tools.ietf.org/html/rfc4303.
[5] RFC 1918 – https://tools.ietf.org/html/rfc1918.
Ключевые слова: iptables, IPSec, VPN, Linux, безопасность, сети.
28
декабрь 2015 системный администратор
инструменты
Администрирование
Визитка
СЕРГЕЙ БОЛДИН, системный администратор НЭК Укрэнерго,
bsergey2@gmail.com
Инструменты для SCCM 2012 R2
Благодаря им многие недостатки устраняются, создавая более комфортные условия
централизованного управления конфигурациями ИТ-инфраструктуры предприятия
В компаниях с большой численностью ПК Configuration
Manager является одним из самых незаменимых продуктов
для ИТ-специалистов. Большое количество функций [1]
помогает автоматизировать многие процессы и управлять
из одной консоли конфигурациями различных устройств
на основе ОС Windows, Windows Phone, OS Х, iOS и Android.
Чтобы идти в ногу со временем, для SCCM регулярно появляются накопительные обновления и сервис-паки, выходят
новые версии, улучшающие его функционал. Также его возможности можно расширить за счет использования дополнительных инструментов.
Right Click Tools
Бесплатная утилита, разработанная фирмой Now Micro.
Проста в установке, интегрируется в консоль SCCM. Основное направление Right Click Tools [2] – работа с пользовательскими машинами и клиентской частью самого SCCM,
для которой раньше приходилось использовать несколько
оснасток из «Панели управления → Администрирование»,
но теперь есть возможность выполнять те же действия в одной консоли Configuration Manager.
Чтобы ощутить все удобства данной утилиты, нужно
в консоли SCCM зайти в раздел Assets and Compliance →
Devices, на выделенном компьютере нажать правой кнопкой
мыши и в контекстном меню в пункте Now Micro Right Click
Tools выбрать нужный подпункт (см. рис. 1):
> Client Action – включает в себя все действия клиента
по выявлению установленного оборудования и программ,
ПО и обновлений для распространения и другое. Ранее они
были доступны только на клиенте («Пуск → Панель управления → Configuration Manager Client → вкладка Actions»),
то есть нужно было удаленно подключаться к компьютеру
пользователя или работать непосредственно на нем;
> Client Tools – позволяет восстановить или удалить
SCCM-клиента, изменить размер кэша или его очистить,
открыть папки с логами, считать информацию о клиенте
и другое;
> Console Tools – предоставляет возможность выполнять
определенные манипуляции с компьютером: подключиться к диску C:\ по «админской шаре» (C$), открыть оснастку Computer Management (Управление компьютером),
System Information (Информация о системе) и Registry
Рисунок 1. Состав утилиты Right Click tools относительно ПК
системный администратор декабрь 2015
29
Администрирование
Editor (Редактор реестра), список запущенных процессов, перегрузить, выключить, проверить связь с компьютером (с помощью команды Ping), отправить Wake-On-Lan
packet (Пакет пробуждения ПК) и другое.
Плюсы есть не только в управлении компьютерами,
но и учетными записями пользователей. В разделе Assets
and Compliance → Users в контекстном меню имеется пункт
Now Micro Right Click Tools, используя который системный
администратор может включить или отключить аккаунт, сменить пароль, просмотреть, в какие группы безопасности
он входит и к каким компьютерам пытался получить доступ.
Примеры регулярного использования утилиты
Отдел кадров предоставляет нам информацию об уволенных сотрудниках. Их учетные записи блокируются прямо
в консоли SCCM, не открывая оснастку Active Directory.
Некоторые работники периодически нуждаются в использовании дополнительного программного обеспечения,
которого нет в стандартном наборе Task Sequence (Последовательности задач) при установке ОС Windows. Для этого происходит создание пакетов и их распространение,
а чтобы не ожидать, пока SCCM-клиент о них узнает (опрос
по расписанию), мы опрос делаем вручную, выбрав в контекстном меню пункт Machine Policy Retrieval and Evaluation
Cycle (Цикл оценки политик компьютера).
В случае, когда у пользователя не получается установить
программу из Software Center («Пуск → Все программы →
Microsoft System Center → Configuration Manager»), мы можем осуществить некоторые действия по выявлению проблемы прямо из консоли SCCM. Скорее всего переполнился кэш клиента, поэтому используем пункты меню Change
Cache Size, Clear Cache, а также изучаем лог-файлы, используя пункт Open Client File Folder.
Часто сотрудники обращаются с жалобой о медленной
работе компьютера или его зависании. «Осмотр» удаленной машины можно сделать из консоли SCCM, используя
пункты контекстного меню Ping System, Running Processes,
Connect to C$, Manage Computer.
Рисунок 2. Список инструментов в меню «Пуск»
инструменты
Достоинства: расширяет возможности Configuration
Manager при нажатии на правую кнопку мыши, удобная в работе. Получить информацию о состоянии и ошибках, распространении обновлений и ПО, инвентаризации, а также работоспособности SCCM-клиента и компьютера сотрудника теперь
гораздо проще. Использование данной утилиты ускоряет процесс работы с удаленной машиной от нескольких минут до нескольких секунд за счет работы только в одной консоли.
Недостатки: не обнаружено.
ConfigMgr 2012 R2 Toolkit
Разработчиком является Microsoft. Утилита бесплатная,
легка в установке, не интегрируется в консоль, не требовательна к дисковому пространству, операции выполняются
из меню Пуск (см. рис. 2).
ConfigMgr 2012 R2 Toolkit содержит ряд инструментов [3],
помогающих выявлять и устранять проблемы, возникшие
в работе SCCM 2012 R2. Все они делятся на две группы:
серверные и клиентские. Чтобы понимать необходимость
их применения, опишем назначение каждого из них.
Серверные инструменты
> DP Job Manager – отображает список задач, имеющихся
в очереди Distribution Point (Точки распространения). Задачу можно переместить наверх, отменить или запустить
вручную.
> Collection Evaluation Viewer – определяет проблемы,
связанные с построением содержимого коллекции. Показывает историческую и текущую информацию, а также
статус очереди.
> Content Library Explorer – позволяет просматривать содержимое точек распространения и устранять проблемы
с размещением их контента (см. рис. 3).
> Content Library Transfer – используется при полном заполнении диска или при необходимости переноса контента библиотек. Здесь можно использовать команду,
синтаксис которой выглядит так:
ContentLibraryTransfer.exe -SourceDrive <диск-источник> ↵
-TargetDrive <диск-получатель>
> Content Ownership Tool – позволяет переназначить владельца для пакетов, которые были потеряны при реорганизации.
> Role-based Administration Modeling and Auditing Tool –
помогает смоделировать действия пользователя в зависимости от прав его учетной записи, а также проверить
настройки безопасности SCCM.
Клиентские инструменты
> Client Spy – подключается к клиенту для поиска проблем
относительно распространения ПО, сбора данных об инвентаризации, а также определения использования программ пользователями.
> Configuration Manager Trace Log Viewer – удобный инструмент просмотра лог-файлов.
> Deployment Monitoring Tool – используется для обнаружения проблем, возникающих при развертывании
ПО и распространении системных обновлений. Не предусматривает какие-либо изменения.
30
декабрь 2015 системный администратор
инструменты
> Policy Spy – предназначен для просмотра имеющихся
политик на клиенте, а также внесения необходимых изменений для устранения неполадок.
> Power Viewer Tool – определяет настройки управления
питанием (ядер процессора, жесткого диска, монитора,
батареи) как на самом сервере, так и на клиентском компьютере. Имеет более 70 параметров.
> Tools Command Prompt – командная строка (cmd).
> Wakeup Spy – просматривает текущее состояние питания на клиентской части, а также определяет, какие операции возможно выполнить.
Пример использования утилиты
Мне неоднократно приходилось пользоваться инструментом
Client Spy для просмотра содержимого кэша SCCM-клиента
(см. рис. 4). Ведь, когда появляется ошибка при попытке
пользователем установить программу из Software Center,
сначала целесообразно определить наличие пакета в кэше
клиента, а уж потом воспользоваться набором инструментов Now Micro Right Tools для очистки кэша или его расширения.
Инструмент Configuration Manager Trace Log Viewer у меня
всегда под рукой, так как ежедневно приходится анализировать какие-либо лог-файлы. Для удобства в нем Warnings
(Предупреждения) и Errors (Ошибки) подсвечиваются желтым и красным цветом соответственно. Этот инструмент
по умолчанию располагается в директории Tools после
установки SCCM, а также он еще добавлен в состав утилиты
ConfigMgr 2012 R2 Toolkit.
Достоинства: устраняют недочеты функционала SCCM,
а также расширяют его возможности, являются бесплатными и удобными в работе.
Недостатки: не обнаружено.
Администрирование
Используя описанные утилиты, системный администратор
получает еще больше возможностей и удобств в работе
с Configuration Manager 2012 R2. Благодаря им многие недостатки устраняются, создавая более комфортные условия централизованного управления конфигурациями ИТинфраструктуры предприятия. EOF
[1] Болдин С. Microsoft SCCM 2012 SP1. Автоматическая установка
ОС Windows. // «Системный администратор», № 12, 2013 г. –
С. 12-16 (http://samag.ru/archive/article/2581).
[2] Описание ConfigMgr 2012 R2 Toolkit – http://prajwaldesai.com/
system-center-2012-r2-configuration-manager-toolkit/.
[3] Установка, настройка Parallels Management Tools for SCCM –
http://masyan.ru/2015/08/enroll-mac-os-x-10-yosemite-sccm-2012r2-sp1/.
[4] SССM-клиент для Мас ОС устройств – http://www.microsoft.com/
en-us/download/details.aspx?id=39360.
Ключевые слова: утилиты, дополнения, функционал, удобства, инструменты, клиент, конфигурации, управление, действия.
Рисунок 3. Просмотр содержимого точки распространения
Parallels Management Tools
Разработка от Parallels. Это скорее продукт, а не утилита
(хоть в названии имеется слово «инструменты»), интегрируется [3] с Configuration Manager и использует его функционал для более удобного администрирования большого количества компьютеров на основе Мас ОС. Parallels
Management Tools for SCCM не предусматривает дополнительных консолей управления. В ее арсенал входит следующее:
> развертывание установочной системы (образа);
> поддержка последовательности задач;
> распространение программ, скриптов и файлов
как в автоматическом режиме, так и с участием пользователей;
> программная и аппаратная инвентаризация;
> соответствие корпоративным требованиям и настройкам;
> установка приложений сотрудниками из портала самообслуживания;
> использование отчетов и другое.
Рисунок 4. Содержимое кэша SCCM-клиента
Для работы с Мас ОС компьютерами необходимо скачать
SCCM-клиента [4].
Достоинства: позволяет работать SCCM с устройствами
на основе Mac ОС, единая консоль управления.
Недостатки: платная.
системный администратор декабрь 2015
31
Администрирование
электронная почта
Визитка
АЛЕКСАНДР ПИЧКАСОВ, сертифицированный специалист
Microsoft, VMware, apichkasov@gmail.com
Управление почтовыми ящиками Exchange 2013
Бюджетные внедрения Exchange подразумевают отказ от дополнительных средств
резервного копирования, однако и встроенные средства обеспечивают достаточную
сохранность данных
Устранять в минимальные сроки неисправности почтовой системы возможно, если иметь четкое представление
об устройстве отдельных элементов, ее составляющих. Нелишним будет потратить некоторое время на исследование
жизненного цикла почтовых ящиков. Особенно это актуально для администраторов бюджетных решений, где почтовая
система представлена единственным сервером Exchange,
а доступные инструменты ограничены встроенным штатным
набором и отсутствуют средства обеспечения высокой доступности.
Выбор инструментов
$arr = "$s`r`n".ToCharArray()
$ns.Write($arr, 0, $arr.Length)
}
$client = New-Object System.Net.Sockets.TcpClient
$client.Connect($server,$port)
$stream = $client.GetStream()
$sreader = New-Object System.IO.StreamReader↵
($client.GetStream())
$rl = $sreader.ReadLine()
Write-Host "Connect to $server on port $port"
if ($rl -notlike "+OK*"){throw "Unable to connect: $rl"} ↵
else{$rl}
write-stream $stream "user $username"
$sreader.ReadLine()
Для исследования свойств почтовых ящиков логично
выбрать такой инструмент управления почтовой системой Exchange, который позволяет видеть и настраивать
все доступные свойства сервера – командную консоль. Чтобы при знакомстве с примерами полностью исключить обращения к графическим средствам, в дальнейшем используется скрипт доступа к содержимому почтового ящика,
представленный на листинге 1. Для простоты реализации
клиентского скрипта командной консоли выбран протокол
POP3, по умолчанию отключенный из соображений безопасности. Далее в листингах подразумевается, что командлеты
выполняются последовательно в одном сеансе командной
консоли Exchange, выполняемой на сервере с установленными ролями Mailbox и Client Access. Остальные листинги
ссылаются на скрипт листинга 1 по имени ViewPOP3Mailbox.
ps1. Описание используемых классов можно найти в [1, 2].
write-stream $stream "pass $password"
$rl = $sreader.ReadLine()
if ($rl -notlike "+OK*"){throw "Unable to login: $rl"} ↵
else{$rl}
write-stream $stream "stat"
$rl = $sreader.ReadLine()
if ($rl -match "^\+OK (\d+) (\d+)")
{
$rl
$msgs,$bytes = $matches[1],$matches[2]
Листинг 1
# Входные параметры для выполнения
param([string]$server="localhost", [int]$port=110, ↵
[string]$username, [string]$password)
Write-Host "Summary: $bytes bytes in $msgs messages" ↵
–foregrount yellow
}
write-stream $Stream "quit"
Write-Host
# Функция посимвольной передачи строки подготовленному
# объекту сетевого сокета
function write-stream([System.Net.Sockets.NetworkStream] ↵
$ns, [String]$s)
{
Write-Host
Write-Host "-> $s"
По умолчанию на сервере клиентского доступа не запускаются сервисы для доступа по протоколу POP3, поэтому
на время исследования необходимо их стартовать, например, из консоли с привилегиями локального администратора:
32
Write-Host "View top of each message." -foreground yellow
If ($msgs –ne 0) { foreach ($i in 1..$msgs) {
write-stream $stream "top $i 1"
do { $rl = $sreader.ReadLine()
if (($rl -like "subject:*") -or ($rl -like "from:*") ↵
-or ($rl -like "to:*")) {write-host $rl ↵
-foreground green} else {write-host $rl}
} while ($rl -ne "." )
}
}
декабрь 2015 системный администратор
Администрирование
электронная почта
PS> Start-Service msex*pop*
Отправку сообщений можно выполнять встроенным командлетом Send-MailMessage.
Исследуем свойства и поведение
почтового ящика
Перед разработкой сценариев резервирования необходимо подробно разобраться, что именно представляет собой почтовый ящик в системе Exchange. Знакомство с документацией и некоторый анализ позволяют сделать вывод,
что почтовый ящик можно рассматривать, с одной стороны,
как выделенную структуру хранения сообщений в почтовой
базе, так и, с другой стороны, как некоторый набор атрибутов, заданных для объекта учетной записи пользователя
в службе каталогов Active Directory. Убедиться в этом можно
с помощью командлетов Get-Mailbox и Get-MailboxStatistics.
Первый из них запрашивает информацию о почтовом ящике
из службы каталогов, второй – информацию о существующей структуре хранения в почтовой базе. В исследовании
жизненного цикла почтового ящика помогут графическая
иллюстрация на рис.1 и представленные фрагменты скриптов. В целях подготовки дальнейших демонстраций скрипт
(см. листинг 2) создает тестовые почтовые базы, почтовый
ящик и показывает содержимое почтовых баз:
Листинг 2
$setname = 'First','Second','Third'
foreach ($namedb in $setname) {New-MailboxDatabase ↵
-name "MDBTest_$namedb" ↵
-LogFolderPath "c:\$namedb\logfld\" ↵
-EdbFilePath "c:\$namedb\$namedb.edb" ↵
-Server (hostname)}
foreach ($namedb in $setname) {Mount-Database ↵
"MDBTest_$namedb"}
$pass = ConvertTo-SecureString 'Pa$$w0rd' -AsPlainText –Force
$ad0=(Get-AcceptedDomain)[0]
New-Mailbox -Name "Adriano" -LastName "Guerra" ↵
-Database "MDBTest_First" -Password $pass ↵
-ResetPasswordOnNextLogon $false ↵
-DisplayName "Adriano Guerra" -Alias adriano ↵
-UserPrincipalName "adriano@$ad0"
# Почтовый ящик в службе каталогов Active Directory:
Get-Mailbox "adriano@$ad0"
# Почтовый ящик в почтовой базе:
Get-MailboxDatabase | Get-MailboxStatistics | ↵
? {$_.displayname -like "adriano*"}
Get-MailboxDatabase | Get-MailboxStatistics | ↵
? {$_.displayname -like "adriano*"} | ↵
ft DisplayName,Database
Для понимания его жизненного цикла настало время
протестировать процесс перемещения почтового ящика
в другую почтовую базу, отключение, подключение и создание нового для той же учетной записи пользователя. Перемещение выполняется после создания запроса с помощью
командлета New-MoveRequest (см. листинг 4).
Листинг 4
Get-Mailbox adriano | New-MoveRequest ↵
–TargetDatabase "MDBTest_Second" ↵
–BatchName "Move_adriano" ↵
-CompletedRequestAgeLimit 0
Do {Start-Sleep 1} While (Get-MoveRequest ↵
-BatchName "Move_adriano")
# Почтовый ящик в службе каталогов Active Directory:
Get-Mailbox "adriano@$ad0" | ft DisplayName,Database
# Структуры почтового ящика в почтовых базах:
Get-MailboxDatabase | Get-MailboxStatistics | ↵
? {$_.displayname -like "adriano*"} | ↵
ft DisplayName,Database
Пример вывода этого фрагмента, представленный
на рис. 2, показывает, что структура почтовых ящиков теперь присутствует в двух почтовых базах MDBTest_First
и MDBTest_Second, активной при этом является структура
в базе, указанной в службе каталогов. Убедиться в этом
можно, отправив сообщение и сравнив содержимое почтовых ящиков после его доставки (см. листинг 5):
Рисунок 1. Жизненный цикл почтового ящика Exchange
Отсутствие вывода последнего командлета говорит о том,
что структура хранения данных в почтовых базах не создана, несмотря на наличие почтового ящика в службе каталогов. На рис.1 это состояние зафиксировано в интервале
между моментами 1 и 2. Разумеется, структура в почтовой
базе будет создана, как только в ней появится необходимость. Это происходит как при доставке почтового сообщения в данный почтовый ящик, так и при обращении к нему
пользователя или при его перемещении из другой почтовой
базы. Убедиться в этом позволит скрипт листинга 3.
Листинг 3
Рисунок 2. Структуры почтовых ящиков в базах
.\ViewPOP3Mailbox.ps1 –username adriano –password 'Pa$$w0rd'
# Почтовый ящик в службе каталогов Active Directory:
Get-Mailbox "adriano@$ad0" | ft DisplayName,Database
# Почтовый ящик в почтовой базе:
системный администратор декабрь 2015
33
Администрирование
Листинг 5
# Структуры почтового ящика в почтовых базах:
Get-MailboxDatabase | Get-MailboxStatistics | ↵
? {$_.displayname -like "adriano*"} | ↵
ft DisplayName,Database,ItemCount
Send-MailMessage -SmtpServer localhost ↵
-From "administrator@$ad0" -To "adriano@$ad0" ↵
-Subject "Test active mailbox"
.\ViewPOP3Mailbox.ps1 -username adriano -password 'Pa$$w0rd'
# Изменения в структурах почтового ящика:
Get-MailboxDatabase | Get-MailboxStatistics | ↵
? {$_.displayname -like "adriano*"} | ↵
ft DisplayName,Database,ItemCount
Другой вариант перемещения почтового ящика основан
на принудительном изменении его свойств с помощью командлета Set-Mailbox (см. листинг 6). Такой подход применяется в сценарии dial tone восстановления почтовой базы,
который будет рассмотрен в завершающей части данной
статьи.
Листинг 6
# Структуры почтового ящика в почтовых базах:
Get-MailboxDatabase | Get-MailboxStatistics | ↵
? {$_.displayname -like "adriano*"} | ↵
ft DisplayName,Database,ItemCount
Get-Mailbox "adriano@$ad0" | Set-Mailbox ↵
-Database MDBTest_Third –Force
.\ViewPOP3Mailbox.ps1 -username adriano -password 'Pa$$w0rd'
# Структуры почтового ящика в почтовых базах:
Get-MailboxDatabase | Get-MailboxStatistics | ↵
? {$_.displayname -like "adriano*"} | ↵
ft DisplayName,Database,ItemCount
# Почтовый ящик в службе каталогов Active Directory:
Get-Mailbox "adriano@$ad0" | ft DisplayName,Database
Вывод, представленный на рис. 3, показывает, что структуры почтового ящика присутствуют в трех почтовых базах, при этом реально будет использоваться почтовая база
MDBTest_Third, и почтовый ящик не содержит сообщений.
Число элементов в выводе командлета Get-MailboxStatistics
отличается от реального, поскольку, кроме почтовых сообщений, в почтовом ящике хранятся скрытые служебные
элементы.
Рисунок 3. Сопоставление информации в почтовых базах и службе каталогов
Рисунок 4. Состояние структур в почтовых базах после всех операций
34
электронная почта
Следующим шагом можно предпринять попытку принудительно переместить почтовый ящик (Set-Mailbox) в исходную почтовую базу. Однако такое перемещение приведет
к недоступности почтового ящика. Дело в том, что неактивным структурам почтовых ящиков присваиваются различные значения параметра DisconnectReason, в зависимости
от предшествующего способа обработки.
PS> Get-MailboxDatabase | Get-MailboxStatistics | ↵
? {$_.displayname -like "adriano*"} | ↵
ft DisplayName,Database,DisconnectReason
Краткий анализ позволяет выделить действия, приводящие к тому или иному значению параметра DisconnectReason:
> При отключении (Disable-Mailbox) или удалении
(Remove-Mailbox) почтового ящика, а также при принудительном изменении свойств (см. листинг 6) параметру DisconnectReason присваивается значение Disabled,
и структура в почтовой базе сохраняется в течение периода, определенного ее параметрами.
> При перемещении (New-MoveRequest) параметр
DisconnectReason получает значение SoftDeleted,
и структура в почтовой базе также сохраняется [3].
Состояние сохраняемых почтовых ящиков определяет
действия, доступные для выполнения. Так, состояние отключения (Disabled) позволяет выполнить повторное подключение (Connect-Mailbox) структуры почтового ящика
к исходной учетной записи, либо к другой учетной записи,
не имеющей поддержки электронной почты. Для структуры
в состоянии обратимого удаления (SoftDeleted) возможно
выполнить восстановление сообщений в активный почтовый
ящик с помощью командлета New-RestoreRequest, попытка же его подключения вызовет ошибку. Отмечу, что в документации Exchange [3] имеются неточности в описании
действий с отключенными почтовыми ящиками. Кроме того,
попытка включения поддержки электронной почты (EnableMailbox) для учетной записи пользователя создаст новый набор атрибутов в службе каталогов и новую структуру в почтовой базе. Такие действия иллюстрирует листинг 7.
Листинг 7
#Исходное состояние почтовых ящиков
Get-MailboxDatabase | Get-MailboxStatistics | ↵
? {$_.displayname -like "adriano*"} | ↵
ft DisplayName,Database,DisconnectReason
#Отключение почтового ящика
Get-Mailbox adriano | Disable-Mailbox -Confirm:$false
Get-MailboxDatabase | Get-MailboxStatistics | ↵
? {$_.displayname -like "adriano*"} | ↵
ft DisplayName,Database,DisconnectReason
#Попытка подключения ящика в состоянии SoftDeleted
Connect-Mailbox -Identity "Adriano Guerra" ↵
-User "adriano@$ad0" -Database MDBTest_First
#Подключение почтового ящика в состоянии Disabled
Connect-Mailbox -Identity "Adriano Guerra" ↵
-User "adriano@$ad0" -Database MDBTest_Second
Get-MailboxDatabase | Get-MailboxStatistics | ↵
? {$_.displayname -like "adriano*"} | ↵
ft DisplayName,Database,DisconnectReason
#Повторное отключение почтового ящика
Get-Mailbox adriano | Disable-Mailbox -Confirm:$false
#Включение поддержки почты для учетной записи
Enable-Mailbox -Identity "adriano@$ad0" -Alias adriano ↵
–Database MDBTest_Second
декабрь 2015 системный администратор
Администрирование
электронная почта
Get-MailboxDatabase | Get-MailboxStatistics | ↵
? {$_.displayname -like "adriano*"} | ↵
ft –a DisplayName,Database,DisconnectReason, ↵
MailboxGuid
#Восстановление сообщений в активный почтовый ящик:
#1.из почтового ящика в состоянии Disabled
New-MailboxRestoreRequest -SourceDatabase MDBTest_Third ↵
-SourceStoreMailbox "Adriano Guerra" ↵
-AllowLegacyDNMismatch -TargetMailbox "adriano@$ad0"
#2.из почтового ящика в состоянии SoftDeleted
New-MailboxRestoreRequest -SourceDatabase MDBTest_First ↵
-SourceStoreMailbox "Adriano Guerra" ↵
-AllowLegacyDNMismatch -TargetMailbox "adriano@$ad0"
#3.из почтового ящика в той же базе, с отличающимся Guid
# Опция –AllowLegacyDNMismatch требуется, поскольку ↵
mailbox создан вновь и ему присвоен новый Guid
$mbxguid = (Get-MailboxDatabase mdbtest_second | ↵
Get-MailboxStatistics | ? {$_.displayname -like ↵
"adriano*" -and $_.disconnectreason ↵
-eq "disabled"}).mailboxguid
New-MailboxRestoreRequest -SourceDatabase MDBTest_Second ↵
-SourceStoreMailbox $mbxguid ↵
–AllowLegacyDNMismatch -TargetMailbox "adriano@$ad0"
#Свойства структур почтового ящика в базах
Get-MailboxDatabase | Get-MailboxStatistics | ↵
? {$_.displayname -like "adriano*"} | ↵
ft –a DisplayName,Database,Itemcount, ↵
DisconnectReason,MailboxGuid
Пример вывода на рис. 4 говорит об успешном восстановлении сообщений из всех отключенных почтовых ящиков независимо от состояния и присвоенного MailboxGuid.
Методика восстановления почтовых ящиков
Разобравшись со свойствами почтового ящика, рассмотрим, как можно их использовать при разработке сценариев
восстановления. Далее подразумевается, ради простоты изложения, что программа резервного копирования работает
на файловом уровне и процесс восстановления уже выполнен за рамками представленных листингов.
Из практически используемых вариантов в первую очередь стоит остановиться на сценарии dial tone восстановления. Такой сценарий описан в онлайновой документации
Exchange [4], рассмотрим его применительно к тестовой
среде. Итак, напомню, что такой способ применяется
для быстрого восстановления работоспособности системы
с отложенным восстановлением резервированных данных
и включает следующие шаги:
1. Создание новой (аварийной) почтовой базы.
2. Перенастройка существующих почтовых ящиков на использование аварийной почтовой базы и предоставление доступа к системе пользователям.
3. Восстановление данных из резервной копии в альтернативное местоположение.
4. Копирование журналов транзакций поврежденной
базы в папку журналов восстановленной из резервной
копии.
5. Настройка поврежденной базы на использование восстановленных из резервной копии файлов.
6. Переключение почтовых ящиков на восстановленную
базу, монтирование базы.
7. Объединение аварийной почтовой базы с восстановленной.
Отмечу важность пунктов 4 и 5, поскольку в описаниях
настроечного восстановления часто упускают эти операции. Копирование недостающих журналов транзакций
системный администратор декабрь 2015
обеспечит восстановление состояния почтовой базы на момент сбоя в отличие от состояния на момент создания резервной копии. Изменение только конфигурации почтовой
базы гарантирует неизменность префикса журналов транзакций. Эти действия позволят системе при монтировании
базы автоматически обнаружить и применить недостающие
журналы транзакций к файлу почтовой базы.
Для приближения действий к реальным предварительно
заполним почтовую базу (см. листинг 8)
Листинг 8
fsutil file createnew c:\attach5mb.bin 5000000
foreach ($i in 1..10) {Send-MailMessage ↵
-SmtpServer localhost -From "administrator@$ad0" ↵
-To "adriano@$ad0" -Subject "Test message n.$i ↵
with 5mb attachment" –Attachments c:\attach5mb.bin}
Дальнейшие действия по настроечному восстановлению
поврежденной базы представлены в листинге 9. Отмечу,
что в реальной среде префикс журналов транзакций будет
отличным от указанного (E02), индивидуальным для каждой
базы.
Листинг 9
#*Имитация* резервного копирования и восстановления базы
Dismount-Database MDBTest_Second –Confirm:$false
Copy-Item C:\Second\* C:\second_restored -Recurse
Mount-Database MDBTest_Second
#Отправка сообщений после резервного копирования
foreach ($i in 11..15) {Send-MailMessage ↵
-SmtpServer localhost -From "administrator@$ad0" ↵
-To "adriano@$ad0" -Subject "Delta mail message ↵
n.$i with 5mb attachment" –Attachments ↵
c:\attach5mb.bin}
#*Имитация* повреждения почтовой базы MDBTest_Second
Dismount-Database MDBTest_Second –Confirm:$false
#Создание аварийной почтовой базы
New-MailboxDatabase –name "MDBTest_Second_Dialtone" ↵
-LogFolderPath "c:\Second_Dialtone\logfld\" ↵
-EdbFilePath "c:\Second_Dialtone\Second_Dialtone.edb" ↵
-Server (hostname)
#Переключение почтовых ящиков на аварийную базу
Get-Mailbox -Database MDBTest_Second | Set-Mailbox ↵
-Database MDBtest_Second_Dialtone –Force
#Монтирование аварийной почтовой базы и проверка доступа
Mount-Database MDBTest_Second_Dialtone
.\ViewPOP3Mailbox.ps1 -username adriano -password 'Pa$$w0rd'
#Отправка сообщений после переключения на аварийную базу
foreach ($i in 16..18) {Send-MailMessage -SmtpServer ↵
localhost -From "administrator@$ad0" ↵
-To "adriano@$ad0" -Subject "Dialtone database mail ↵
message n.$i with 5mb attachment" –Attachments ↵
c:\attach5mb.bin}
#Изменение конфигурации исходной базы
Move-DatabasePath “MDBTest_Second” –ConfigurationOnly ↵
-LogFolderPath "c:\Second_Restored\logfld\" ↵
-EdbFilePath "c:\Second_Restored\Second.edb" ↵
–Force –Confirm:$false
#Копирование журналов транзакций
Copy-Item c:\Second\logfld\E02*.log c:\Second_Restored\logfld
#Возвращение почтовых ящиков в исходную базу
Get-Mailbox –Database "MDBTest_Second_Dialtone" | ↵
Set-Mailbox -Database "MDBTest_Second" -Force
#Монтирование почтовой базы и проверка доступности
Mount-Database "MDBTest_Second"
.\ViewPOP3Mailbox.ps1 -username adriano -password 'Pa$$w0rd'
#Удаление аварийной базы
Remove-MailboxDatabase “MDBTest_Second_Dialtone”
#Создание почтовой базы восстановления на основе
#существующих файлов аварийной базы
New-MailboxDatabase -Recovery –name "MDBTest_Second_Recovery" ↵
35
Администрирование
-LogFolderPath "c:\Second_Dialtone\logfld_recovery\" ↵
-EdbFilePath "c:\Second_Dialtone\Second_Dialtone.edb" ↵
-Server (hostname)
#Восстановление почтового ящика с уникальным Guid
$mbxguid = (Get-Mailbox adriano).exchangeguid
New-MailboxRestoreRequest -SourceDatabase MDBTest_Second ↵
-SourceStoreMailbox $mbxguid ↵
-AllowLegacyDNMismatch -TargetMailbox "adriano@$ad0”
#Просмотр результата восстановлений
.\ViewPOP3Mailbox.ps1 -username adriano -password 'Pa$$w0rd'
К сожалению, в последних версиях Exchange отсутствует
механизм обеспечения высокой доступности, предложенный в Exchange 2007, и наиболее подходящий для бюджетных внедрений – механизм локальной непрерывной репликации (LCR).
Существующие в последних версиях средства высокой
доступности в виде группы доступности почтовых баз (DAG)
требуют наличия дополнительного сервера почтовых ящиков, следовательно, дополнительной лицензии, дополнительных затрат.
По этой причине небольшие предприятия часто отказываются от высокой доступности, ограничиваясь единственным сервером Exchange. Для них можно порекомендовать
внедрение некоторого подобия локальной репликации. Такая методика заключается в периодическом копировании
файлов отключенной почтовой базы.
Для исключения простоя базы копирование следует выполнять из создаваемой теневой копии тома. Это может
быть выполнено средствами WMI, соответствующий класс
описан в библиотеке MSDN [5], пример реализации приведен в листинге 10.
Для успешного выполнения операций с теневыми копиями требуются привилегии локального администратора системы. При этом кратковременное отключение (на момент
создания теневой копии) почтовой базы требуется для обеспечения ее согласованности. Такой подход позволит сохранять файлы базы в горячем резерве, и восстановление
после сбоя будет состоять в копировании недостающих
журналов транзакций, перенастройке базы на использование файлов в альтернативном местоположении и монтировании базы.
Эта схема не отменяет необходимость резервного копирования, которое в этом случае должно выполняться
на файловом уровне, а усечение журналов транзакций
можно выполнять с помощью утилиты eseutil. Естественно,
здесь имеются определенные недостатки, например, отсутствие в системе информации о выполненном резервном
копировании, требования к четкой организации работы администратора. Последовательность действий в такой схеме
представлена на листинге 10.
Листинг 10
#Отправка тестовых сообщений
foreach ($i in 21..25) {Send-MailMessage ↵
-SmtpServer localhost -From "administrator@$ad0" ↵
-To "adriano@$ad0" -Subject "Test mail message ↵
n.$i with 5mb attachment" –Attachments ↵
c:\attach5mb.bin}
#Создание реплики почтовой базы
#Временное отключение почтовой базы
Dismount-Database mdbtest_second –Confirm:$false
#Создание и подключение теневой копии
$sco1 = (gwmi -List Win32_ShadowCopy).Create( ↵
36
электронная почта
"C:\", "ClientAccessible")
$sco2 = gwmi Win32_ShadowCopy | ? {$_.ID -eq $sco1.ShadowID}
$scdevice = $sco2.DeviceObject + "\"
cmd /c mklink /d c:\shadow_copy $scdevice
#Усечение журналов транзакций исходной базы
eseutil.exe /r e02 /d C:\second_restored\second.edb ↵
-l C:\second_restored\logfld /t
#Подключение почтовой базы
Mount-Database mdbtest_second
New-Item c:\Second_Replica -Type directory
Copy-Item C:\shadow_copy\second_restored\* ↵
C:\Second_Replica -Recurse –Force
#Отключение теневой копии
cmd /c rmdir c:\shadow_copy
#Отправка порции сообщений
foreach ($i in 26..28) {Send-MailMessage ↵
-SmtpServer localhost -From "administrator@$ad0" ↵
-To "adriano@$ad0" -Subject "Delta mail message ↵
n.$i with 5mb attachment" –Attachments ↵
c:\attach5mb.bin}
#*Имитация* повреждения почтовой базы MDBTest_Second
Dismount-Database mdbtest_second –Confirm:$false
#Восстановление работоспособности:
#1. Копирование недостающих журналов транзакций
Copy-Item C:\second_restored\logfld\e02*.log ↵
C:\Second_Replica\logfld
#2. Перенастройка почтовой базы на использование
альтернативных файлов
Move-DatabasePath "mdbtest_second" -ConfigurationOnly ↵
-EdbFilePath C:\Second_Replica\second.edb ↵
-LogFolderPath C:\Second_Replica\logfld
#3. Монтирование базы и проверка доступности
Mount-Database mdbtest_second
.\ViewPOP3Mailbox.ps1 -username adriano -password 'Pa$$w0rd'
В реальной среде для обеспечения надежности необходимо размещать исходную базу, ее журналы транзакций,
реплику базы и журналы транзакций реплики на отдельных
физических дисках. Также в реальной среде требуется отдельно проработать схему действий в ситуациях, связанных
с перемещением почтовых ящиков в другие базы.
Каждый из описанных методов резервирования почтовых
ящиков имеет свои преимущества и недостатки, выбор
конкретного способа должен определяться требованиями
бизнес-процессов предприятия. Кроме того, проведенные
эксперименты и полученные представления позволяют
в практической работе избежать ошибочных, некорректных
для текущей ситуации действий, приводящих к недоступности почтового ящика. EOF
[1] Описание класса System.Net.Sockets.NetworkStream – https://
msdn.microsoft.com/library/system.net.sockets.networkstream%28v=
vs.100%29.aspx.
[2] Описание класса System.Net.Sockets.TcpClient – https://msdn.
microsoft.com/ru-ru/library/system.net.sockets.tcpclient%28v=
vs.110%29.aspx.
[3] Описание отключенных почтовых ящиков на сайте Technet –
https://technet.microsoft.com/ru-ru/library/bb232039%28v=
exchg.150%29.aspx.
[4] Dial tone восстановление почтовых баз – https://technet.
microsoft.com/ru-ru/library/dd979810%28v=exchg.150%29.aspx.
[5] Класс WMI Win32_ShadowCopy для управления теневыми копиями – https://msdn.microsoft.com/en-us/library/aa394428%28v=
vs.85%29.aspx.
Ключевые слова: Exchange, восстановление, почтовые ящики,
PowerShell.
декабрь 2015 системный администратор
событие
Безопасность
ZeroNights 2015 в Москве
В конце ноября в столице состоялась конференция ZeroNights 2015.
Стоит отметить, что данное мероприятие проходит уже в пятый раз,
и организаторам удалось сделать его по-настоящему интересным
Мероприятие было разделено на четыре потока, на каждом
из которых упор делался на определенные технологии и решения в области ИБ. Так, несколько докладов было посвящено взлому SCADA-систем. Несмотря на то что эта тема
уже несколько лет на слуху у специалистов по ИБ, в этой
области еще достаточно много проблем.
Традиционно для подобных мероприятий большое внимание уделялось обсуждению различных техник фаззинга,
то есть методики тестирования, при которой на вход программы подаются невалидные, непредусмотренные или случайные данные. В частности, на конференции был интересный доклад, посвященный Browser fuzzing.
Также на конференции прозвучали интересные доклады
как по объектно-ориентированному реверсивному инжинирингу, так и по инжинирингу различных систем.
На конференции было
представлено много
интересных решений,
связанных с практическими
аспектами ИБ
Отдельное внимание хотелось бы обратить на поток, посвященный практической эксплуатации устройств на базе
MK AVR. Этой теме было посвящено несколько докладов,
на которых авторы рассказали о микроконтроллерах, доступных для использования в любительских устройствах.
Кроме того, были продемонстрированы концепции различных устройств на базе микроконтроллеров AVR, таких
как макеты SCADA-систем для управления игрушечной железной дорогой. Помимо этого, были показаны устройства,
предназначенные для взлома SCADA-систем. Например,
устройство, которое посредством взлома беспроводного
протокола обмена в целевой системе могло нарушить функционирование игрушечной железной дороги.
системный администратор декабрь 2015
Однако тема устройств на микроконтроллерах AVR
не ограничилась докладами – в холле мероприятия был
развернут стенд, где на нескольких больших столах были
представлены сами устройства. Все желающие могли посмотреть и проверить на практике функционирование того
или иного решения. При этом авторы охотно отвечали на вопросы и рассказывали о своих решениях.
Вообще в холле мероприятия было представлено много
интересных решений, связанных с практическими аспектами информационной безопасности. В частности, полностью
работоспособные платежный терминал и банкомат. На них
демонстрировались методики обхода штатных средств защиты и взлома.
Еще одним традиционным элементом конференции
ZeroNights являются различные конкурсы, в которых необходимо выполнить разные задания, связанные со взломом. Так, перед началом конференции проводился конкурс
Hackquest. В нем все желающие могли попробовать свои
силы во взломе специально подготовленных узлов.
Кроме этого, на самой конференции можно было попробовать поискать уязвимости на платежном терминале Qiwi.
Правила позволяли использовать в том числе и отмычки
для физического доступа к оборудованию терминала и подключать к терминалу дополнительное оборудование.
Также в рамках конференции специалисты рассказали
о проводившейся игре RuCTFE 2015 и заложенных в сервисах уязвимостях. Организаторы объяснили, с помощью
каких технологий строится игровая инфраструктура, как работает проверяющая система соревнований. Кроме того,
на время проведения конференции всем желающим была
предоставлена возможность почувствовать себя на месте
участников, посмотреть и попробовать взломать предложенные сервисы.
В целом конференция получилась достаточно интересной. Особое внимание стоит обратить на практическую направленность и актуальность тем докладов. Будем надеяться, что следующее мероприятие ZeroNights будет не менее
интересным и актуальным.
Андрей Бирюков
37
Безопасность
угрозы
Визитка
ДЕНИС МАКРУШИН,
антивирусный эксперт «Лаборатории Касперского»
#Здоровье online
Угрозы трекинга показателей здоровья
Информационная безопасность – это процесс обеспечения целостности,
конфиденциальности и доступности информации. В наше время автомобилей,
«напичканных» электроникой, систем «умных домов» и всевозможных IoT-девайсов
обеспечение безопасности информационной становится делом обеспечения
безопасности жизнедеятельности
Новые угрозы, на которые, безусловно, нужно обратить
внимание, основаны на пока еще не ставшем достаточно популярным, но явно намечающемся тренде получения
в реальном времени параметров человеческого организма с помощью бытовых приборов, коими, безусловно, являются мобильные устройства. Наверняка вы знакомы
с исследованием безопасности фитнес-браслетов (https://
securelist.ru/blog/issledovaniya/25324/kak-ya-vzlomal-svojfitnes-braslet). Одна из ключевых мыслей в нем следующая:
«Просто представьте – если взломан браслет с датчиком
пульса, владелец магазина может следить за частотой пульса покупателя, пока тот смотрит на скидки в его магазине.
Так же можно узнавать реакцию людей на рекламу. Более
того, взломанный браслет с датчиком пульса можно использовать в качестве детектора лжи». С одной стороны,
данное утверждение может показаться слишком пафосным
заявлением, ведь кажется сомнительным тот факт, что ктото узнает о частоте твоего сердцебиения. Но есть и другая
сторона. Все эти носимые девайсы уступают по своему распространению мобильным телефонам, которые позволяют
проводить аналогичные измерения и которые в отличие
от упомянутых фитнес-браслетов есть почти у каждого.
#История болезни в твоем смартфоне
Информация, которая получается в результате трекинга
параметров здоровья, может по-разному использоваться как хозяином устройства, так и производителем инфраструктуры, на базе которой работает приложение
трекинга. Так, например, параметры сердцебиения могут
применяться пользователем устройства как индикатор
для снижения активности, приема каких-либо препаратов и в других медицинских целях. В свою очередь, вендор может использовать эти параметры для перепродажи
их страховым фирмам. Интересно, как будет зависеть цена
страховки от сердечного приступа, если страховая фирма
увидит «шумы» в параметрах потенциального клиента...
Сценарии подобного использования зависят от фантазии
и предприимчивости владельцев данной информации.
Еще одним более очевидным вариантом использования
собранных данных будут медицинские проекты. Компания
IBM уже объявила (http://www.ibm.com/smarterplanet/us/
en/ibmwatson/health) о запуске IBM Watson Health – проекта, который будет представлять собой специальную
экосистему обработки медицинских данных (также поступающих с мобильных устройств) для последующего
Рисунок 1. Уменьшить риск сердечных заболеваний посредством получения своевременной аналитики… Или поспособствовать их прогрессированию в случае утечки данных
38
декабрь 2015 системный администратор
Безопасность
угрозы
их предоставления в медицинские учреждения. Наша задача как исследователей – проверить, насколько можно
доверять health-данным, аккумулируемым в наших мобильных девайсах.
#Модель угроз
На основе анализа определенных параметров организма
(например, сердцебиения) человека внешний нарушитель
может определить те или иные симптомы, которые явно
демонстрирует организм жертвы. Имея на руках список
болезней, для которых характерны данные симптомы, злоумышленник может спровоцировать их прогрессирование,
которое приведет к летальному исходу. Соответственно,
задача, которую решает защита информации о параметрах
организма владельца телефона, должна заключаться в обеспечении конфиденциальности, целостности и доступности
(КЦД) собранных данных.
Для каждого из состояний защищенности можно описать
векторы атак. Причем один и тот же вектор атаки может принадлежать разным типам и, например, в одних случаях нарушать целостность, а в других – конфиденциальность.
Варианты атак на конфиденциальность:
> man-in-the-middle в каналы от сенсора к сервису, аккумулирующему данные, и наоборот;
> несанкционированный доступ к локальному и удаленному хранилищам данных.
Варианты атак на целостность:
> несанкционированный доступ к хранилищам данных;
> man-in-the-middle в каналы с возможностью подмены
передаваемых данных (спуфинг);
> генерация данных (спуфинг) и предоставление их потребителям (сервис-аккумулятор или приложение).
Атаки на доступность:
> ransomeware_атаки (шифрование/удаление).
Проведем анализ защищенности health-данных, которые
используются в популярных средствах (SDK) для разработчиков health-приложений под Android и iOS.
Методика
На операционном столе встречаются эмуляторы мобильных операционных систем и официальные SDK от разработчиков этих мобильных платформ.
Ок, Гугл, заходи. Согласно многочисленным исследованиям наиболее распространенной на текущий момент мобильной ОС является Android, поэтому начнем с анализа
SDK и health-приложений под данную операционную систему (https://developers.google.com/fit).
После установки мобильного приложения на эмулятор,
поддерживающий эмуляцию сенсора, получится накрутить
пару лишних километров для приложений, собирающих
статистику активности. Кроме того, используя все ту же
эмуляцию сенсоров, пользователь может «подкрутить»
те или иные показатели своей жизнедеятельности и отправить их в облако. Зачем? Хотя бы для того, чтобы в будущем
остаться «чистым» для страховых агентств.
А что же дальше?
В случае когда пользователь имитирует свою активность
в средствах эмуляции сенсоров, мы имеем дело с вопросом доверия к данным, поступающим от пользователя.
Совсем другой случай, когда уже имеющаяся статистика
о показателях здоровья подвергается атакам со стороны
третьих лиц. Например, все также вездесущая малварь
может, попав на мобильное устройство пользователя, осуществить перехват информации, поступающей от сенсоров, и передать ее третьим лицам. Или же зашифровать
хранилище со статистическими данными о показателях
здоровья – в данном случае пользователь может лишиться
источника аналитики для медицинских учреждений.
С другой стороны, медицинские учреждения консервативны в вопросах перехода на использование новых технологий в повседневных процессах, а это значит, что данные
о жизнедеятельности, собранные с мобильных устройств,
еще не скоро станут использоваться в серьезной амбулаторной практике. Тем не менее не стоит забывать о существовании недобросовестных лиц, которые могут воспользоваться данной информацией в других, зачастую трудно
предсказуемых, случаях. EOF
Рисунок 2. Главное окно приложения Google Fit
Для проведения анализа защищенности health-данных
в процессе их обработки внутри инфраструктуры можно
взять на вооружение следующий «рецепт приготовления».
Для каждой из платформ (Android, iOS, Windows Phone)
берем официальный SDK от разработчика платформы,
который предназначен для получения и обработки healthданных, и готовим на его основе демонстрационное приложение, которое осуществляет сбор и обработку этих
данных.
В процессе анализа защищенности следует обращать
внимание на каналы передачи health-данных и их хранилища, а точнее, на условия, при которых можно считать эти каналы и хранилища уязвимыми для перехвата и модификации информации:
> наличие шифрования соединения/хранилища (возможность осуществления MitM-атак);
> наличие возможности внедрения в данный канал/хранилище (возможность осуществления spoofing-атак).
системный администратор декабрь 2015
39
Безопасность
механизмы защиты
Шифраторы,
они же криптовирусы, они же вымогатели
В фильме «Кто я» с Томом Шиллингом в главной роли есть эпизод,
когда герои взламывают правительственную организацию
с помощью письма с вредоносным вложением
Так в кино был задокументирован очень «популярный»
способ распространения вредоносного ПО, в том числе
шифраторов, таких как Bat.encoder, FileCoder, Krjakl. Маскировка под оповещения из налоговой инспекции и судов
по-прежнему хорошо работает, и компании по-прежнему
теряют данные. Тем временем авторы шифраторов не останавливаются и даже увеличивают размеры выкупов.
Разберемся, как можно защититься от этой угрозы.
Правило №1 – никогда не платить выкупы. Правила
№2 и 3 носят профилактический характер.
Превентивные меры
Капитан Очевидность подсказывает два основных способа
защиты от шифраторов:
> Резервное копирование.
> Инструктирование пользователей.
О необходимости бэкапа знают даже начинающие администраторы, но именно при заражениях шифраторами обнаруживаются какие-то детали: то копии делали недостаточно часто, то резервное копирование зашифрованного вида
данных или носителей не производилось.
Теперь о менее очевидных способах защиты:
1. Настройка в локальных политиках безопасности
ограниченного использования программ. С помощью
правил можно заблокировать запуск троянов по относительным путям и маскам файлов. Пример: данное правило запрещает запуск всех программ с расширением *.exe
по указанному относительному пути:
%UserProfile%\Local Settings\*.exe
2. Отключение службы Windows Encrypting File System.
3. Запрет выполнения макросов в приложениях, входящих в состав Microsoft Office, и в аналогичном ПО.
Макросы могут содержать команду для загрузки и выполнения вредоносного кода шифратора. Например, если сотрудник откроет вредоносный файл с именем «Взыскание
задолженности.doc» в почте, это вызовет компрометацию
системы даже в том случае, если сервер не пропустил вредоносное выполнение макросов в настройках офисных приложений.
4. Активация настройки автоматических обновлений операционной системы и установка критических
40
обновлений. Злоумышленники могут использовать уязвимость в протоколе удаленного рабочего стола (RDP). Наиболее серьезная из этих уязвимостей делает возможным
удаленное выполнение кода, если злоумышленник отправляет уязвимой системе последовательность специально
созданных пакетов RDP. По умолчанию протокол удаленного рабочего стола отключен во всех операционных системах Windows. Закрывайте доступ по RDP извне и разрешите
подключения по RDP только в пределах локальной сети.
6. Запрет на почтовом сервере приема и передачи исполняемых файлов *.exe, а также *.js.
7. Активация расширенной эвристики в антивирусном
решении для запуска исполняемых файлов. Здесь комментарии излишни, я думаю. Правда, кое-кому и об этом,
и об обновлении баз антивируса нужно напоминать.
8. Создание правил на блокировку вложений в теле
письма по их типу и расширению. Расскажу об этой мере
на примере ESET NOD32 Mail Security для Microsoft Exchange.
В этом продукте правила можно настроить и на файлы
с определенными расширениями, и на заархивированные
вложения. Блокировка реализуется и на уровне расширения,
и на уровне типа файла. Например, системный администратор настроил правило на блокировку исполняемых файлов
типа .exe. Злоумышленник пишет письмо, берет .exe-файл,
меняет его расширение, архивирует и делает рассылку
по пользователям. EMS for Exchange определит, что данный
файл исполняемый, и не допустит открытия архива.
Пожарные меры
Если заражение уже произошло и зашифрованные данные
стоят того, чтобы их расшифровывать, а резервной копии
нет, то необходимо предпринять следующее:
> Обратиться в техподдержку поставщика антивируса
или изучить его форум. Надеюсь, ваши файлы могут
быть расшифрованы.
> Попробовать восстановить файлы с помощью теневого тома копий. «Попробовать» восстановить оригиналы файлов можно только в том случае, если эта функция
была активирована заранее и если зловред до них не добрался. Для лечения Windows Vista 7 и 8 популярностью
пользуется утилита Shadow Explorer. В Windows XP, увы,
восстановления теневых копий нет.
Советует Виталий Земских
декабрь 2015 системный администратор
Базы данных
мониторинг
Визитка
ВАЛЕРИЙ МИХЕИЧЕВ,
эксперт Oracle, СПАО «Ингосстрах», Valery.Mikheitchev@ingos.ru
Мониторинг блокировок в Oracle
Часть 2. Практический опыт диагностики блокировок
DML-блокировки составляют наибольшие проблемы в работе всех баз данных Oracle
нашей организации. Расскажу, как мы их решаем
Виды блокировок, причины возникновения блокировок,
а также методы их предупреждения изложены в статье [1].
сессиями, является нижеуказанный запрос (работает быстро и эффективно):
Блокировки DML-операций в сессиях
Select
--кого блокируют
s1.sid is_sid,s1.serial# is_serial#, s1.username ↵
is_username, s1.schemaname is_schemaname,
s1.osuser is_osuser, s1.program is_program,
s1.state is_state, s1.sql_exec_start is_sql_exec_start, ↵
s1.sql_id is_sid,
(select v.sql_text from v$sql v where v.sql_id=s1.sql_id ↵
and rownum=1) is_sql_text,
-- кто блокируют
s2.sid who_sid, s2.serial# who_serial#, s2.username ↵
who_usename, s2.schemaname who_schemaname,
s2.osuser who_osuaser, s2.program who_program,
s2.state who_state, s2.sql_exec_start who_sql_start, ↵
s2.sql_id who_sql_id,
(select v.sql_text from v$sql v where v.sql_id=s2.sql_id ↵
and rownum=1) who_sql_text
from v$session s1, v$session s2
↵
where s1.blocking_session=s2.sid;
DML-блокировки – это блокировки, которые защищают данные таблиц и проявляются при выполнении DML-операций
(Data Manipulation Language), таких как insert, update, delete
и select for update.
Блокировки DML устанавливают монопольную блокировку для строк, которые обрабатываются DML-операцией,
и всякий раз, когда DML-операция собирается модифицировать строки в таблице (например, по update или delete),
Oracle автоматически устанавливает монопольную блокировку уровня строки (тип TX) на каждую модифицированную строку таблицы. При этом блокировки DML удерживаются Oracle до тех пор, пока транзакция не завершится
явно или неявно (явно транзакция завершается операцией
commit или rollback, а неявно транзакция завершается после окончания сессии или в случае аварийного завершения
процесса).
Из множества причин возникновения DML-блокировок,
таких как:
> отсутствие завершения транзакций по окончании DMLоперации через commit (rollback);
> отложенные по времени завершения транзакции, состоящей из DML-операций;
> блокировки, обусловленные длительным временем выполнения DML-операции, и др.
Целесообразно обратить особое внимание на первые две
причины (как показала практика в нашей организации).
Первая причина – это отсутствие commit (rollback) после
выполнения DML-операции и вторая причина – это отложенное завершение транзакции.
Первая причина блокировок может быть обусловлена
тем, что «забыли» поставить commit после DML-операции.
Эта проблема может быть легко устранена на основании
анализа ряда диагностических запросов. Таким запросом,
позволяющим посмотреть наличие блокировок между двумя
системный администратор декабрь 2015
где столбцы:
> is_sid и who_sid – показывают уникальный идентификатор sid соответственно заблокированной и блокирующей
сессии;
> is_sql_text – показывает заблокированную DML-операцию.
Более полную информацию дает запрос, приведенный
в листинге 1. Он показывает имя таблицы (столбец is_table),
в которой идет блокировка, а также хранимую процедуру
(пакет, процедура, функция), где выполняется заблокированная DML-операция в заблокированной сессии. В отличие
от запроса, приведенного в первой части статьи [1], в данном запросе введены фильтры, позволяющие более определенно идентифицировать блокирующую и заблокированную сессии, а также заблокированную таблицу.
Листинг 1. Диагностический запрос блокировок двух сессий с определением
имени заблокированной таблицы и имени хранимой процедуры с заблокированной
DML-операцией
Select a.* from (select
41
Базы данных
--кого блокируют
s2.sid is_sid,s2.serial# is_serial#, ↵
s2.seconds_in_wait is_seconds_in_wait,
i2.type is_type, i2.lmode is_mode, i2.request ↵
is_request,s2.username,
(select o.owner||'.'||object_name from dba_objects ↵
o where o.object_id=v2.object_id) is_obj_lock,
trim(substr((select o.object_name from dba_objects ↵
o where o.object_id=v2.object_id),1,30)) is_table,
(select sql_text from v$sql v where v.sql_id=s2.sql_id ↵
and rownum=1) is_sql_text,
(select min(lower(p.object_type)||'=>↵
'||p.owner||'.'||p.object_name)
from dba_objects p where p.object_id=(select ↵
v.program_id from v$sql v where ↵
v.sql_id=s2.sql_id and rownum=1) and rownum=1) ↵
is_plsql_object,
(select v.program_line# from v$sql v where ↵
v.sql_id=s2.sql_id and rownum=1) is_program_line,
-- кто блокирует
s1.sid who_sid, s1.serial# who_serial,s1.seconds_in_wait ↵
who_seconds_in_wait,
i1.type who_type, i1.lmode who_lmode, ↵
i1.request who_request, s1.username who_username,
(select o.owner||'.'||object_name from dba_objects ↵
o where o.object_id=v1.object_id) who_obj_lock,
(select sql_text from v$sql v where v.sql_id=s1.sql_id ↵
and rownum=1) who_sql_text
from v$lock i2,v$session s2, v$lock i1,v$session s1, ↵
v$locked_object v1,v$locked_object v2
where i1.block = 1 and i2.request > 0 and i1.id1 ↵
=i2.id1 and i1.id2 = i2.id2
and s1.sid =i1.sid and s2.sid=i2.sid ↵
and s2.blocking_session=s1.sid and ↵
v1.session_id =s1.sid and v2.session_id =s2.sid) ↵
a where a.is_obj_lock=a.who_obj_lock
and instr(trim(upper(a.is_sql_text)),a.is_table)>0
and (upper(a.is_sql_text) like 'UPDATE%' ↵
or upper(a.is_sql_text) like 'DELETE%'
or upper(a.is_sql_text) like 'INSERT%' ↵
or upper(a.is_sql_text) like '%FOR UPDATE%'
or upper(is_sql_text) like 'MERGE%' ↵
or upper(who_sql_text) like 'CREATE_INDEX%')
Для нас это базовый запрос, на основе которого создана процедура, запускаемая Job Scheduler каждые пять
минут. Результаты работы процедуры записываются в соответствующую таблицу для дальнейшего анализа причин
блокировок. Наличие данных из таблицы позволяет проанализировать проблемы, обусловленные блокировками,
которые происходили, например, в ночное время или выходные дни.
Диагностика блокировок сессий с транзакциями,
отложенными по времени завершения
Сложнее обстоит дело с диагностикой и анализом результатов работы транзакций, отложенных по времени завершения. Под такими транзакциями (назовем их транзакциями
с отложенным commit) понимается DML-операция, завершение которой по commit (rollback) происходит в сессии после
выполнения ряда других операций, таких как select, циклы
loop, процедур и т.д. Завершение блокирующей DML-операции в этом случае будет происходить через какое-то время либо операциями commit (rollback), либо по завершении
сессии.
Чтобы понять, как анализировать блокировки, обусловленные отложенными по commit транзакциями, рассмотрим
процесс возникновения блокировок между двумя сессиями.
Пусть имеем первую сессию, которая выполнила операцию update над несколькими строками таблицы doc_t.
В силу ряда причин технологического характера первая
42
мониторинг
сессия не выполнила после update commit. В результате
чего модифицируемые строки оказались заблокированы
от изменения другими сессиями. При этом первая сессия
после выполнения update ряда строк продолжает работать,
выполняя далее десятки других запросов и циклов.
В этот период вторая сессия тоже решила провести
update некоторых строк, которые уже модифицировала и заблокировала от изменения первая сессия. В этом
случае вторая сессия окажется заблокированной и будет
ждать либо появления commit в первой сессии, либо завершения работы первой сессии (авто commit). При длительных блокировках отложенных по commit транзакций анализ
причин такой длительности следует рассматривать в виде
двух шагов.
На первом шаге, как и ранее, следует выявить, какая сессия кого блокирует и каковы причины блокировок, чтобы
в дальнейшем свести к минимуму вероятность их появления.
Эту информацию можно получить, используя указанные
выше запросы, в которых столбец is_sql_text позволяет
увидеть заблокированную DML-операцию в заблокированной второй сессии.
Вместе с тем в столбце who_sql_text блокирующей первой сессии, как правило, не увидим блокирующую DML-операцию (в данном случае не увидим update таблицы doc_t,
хотя с большой вероятностью имеет место блокирующий
update). Скорее всего увидим запрос, выполняемый на текущий момент времени в первой сессии, и он чаще всего будет
select, который вместе с тем не может заблокировать update
во второй сессии (за исключением конструкции select …
for update, в связи с чем следует посмотреть наличие такой
конструкции). При этом чем длительнее блокировка второй
сессии, тем больше вероятность, что в who_sql_text увидим
длительно выполняемый запрос, на что следует обратить
особое внимание.
Следует заметить, что, поскольку модификация по update
небольшого числа строк таблицы, выполняемой в первой
сессии, как правило, будет проходить довольно быстро, такие DML-операции при работе первой сессии редко фиксируются в диагностических представлениях Oracle, таких как:
> v$session,
> v$active_session_history,
> dba_hist_active_sess_history и др.
Исключение составляют представления v$open_cursor
и dba_lock_internal, в которых есть вероятность увидеть блокирующую операцию по who_sid (правда, эти представления
медленно работают по sid сессии).
Вторым шагом является выявление запросов, препятствующих быстрейшему завершению работы блокирующей
первой сессии. Поскольку в первой сессии после update
могут быть долго работающие запросы или циклы, их следует отловить для оптимизации планов их выполнения.
В проведении поиска долго работающих запросов в блокирующей сессии могут помочь Oracle-представления v$sql
и v$sql_monitor.
Последний полезен в виде запроса:
Select * from v$sql_monitor where sid=who_sid ↵
and session_serial#=who_serial# ↵
order by sql_exec_start, key.
декабрь 2015 системный администратор
мониторинг
В данном диагностическом запросе в условии where подставляется sid и serial# блокирующей сессии, т.е. who_sid
и who_serial#, полученные из вышеуказанных запросов.
В результате выполнения запроса получаем последовательность операций, выполненных в блокирующей первой
сессии.
В столбце sql_text представления v$sql_monitor содержится текст выполненной операции, а столбцах elapsed_
time и cpu_time дают полное время (в микросекундах) выполнения операции и процессорное время ее выполнения
соответственно. Разница между ними показывает время
ожидания, обусловленное проблемами в плане выполнения
операции (запроса).
Столбец key представления v$sql_monitor позволяет посмотреть и проанализировать план выполнения запроса,
используя представление v$sql_plan_monitor. Для этого используется запрос:
Select v.* v$sql_plan_monitor v where v.key=key.
Таким образом, основная идея диагностики и анализа
сессий с отложенной по commit транзакцией состоит, вопервых, в предупреждении и уменьшении вероятности блокировок DML-операции и, во-вторых, в выявлении долго работающих запросов и циклов, которые не позволяют быстро
завершить блокирующую сессию, чтобы разблокировать
заблокированные сессии.
Диагностика цепочки блокировок
и множественных блокировок
Помимо блокировок между двумя сессиями, другой группой
блокировок (более неприятных для работы базы данных
Oracle) являются цепочки блокировок. Цепочка блокировок
проявляется в том, что первая сессия блокирует вторую,
а та, в свою очередь, блокирует третью и т.д. Цепочку блокировок из трех сессий можно увидеть запросом:
Select s1.sid is_sid, s2.sid who_sid, s3.sid who_who_sid, ↵
s4.sid who_who_who_sid
from v$session s1,v$session s2,v$session s3,v$session s4 ↵
where s1.blocking_session=s2.sid
and s2.blocking_session=s3.sid ↵
and s3.blocking_session=s4.sid(+) order by 2,1
И, наконец, наибольшие проблемы создают множественные блокировки, когда одна сессия блокирует несколько
других сессий. Если при блокировке двух сессий проблемы
касаются этих двух сессий, то при множественных блокировках (особенно лавинообразных, когда одна сессия довольно быстро блокирует десятки и даже сотни сессий) проблема может создать угрозу работе базы данных.
Множественные блокировки позволяют увидеть первый
приведенный выше запрос (см. листинг 1), рассматривая
попарно блокировки с сортировкой запроса по who_sid блокирующей сессии. Созданная на основе запроса, приведенного в листинге, процедура не только пишет результаты блокировок в таблицу, но при превышениях числа блокируемых
сессий одной сессией принимает решение на ее удаление
по kill.
Следует заметить, что периодически появляются взаимоблокировки сессий deadlock. Однако эти взаимоблокировки
системный администратор декабрь 2015
Базы данных
снимаются Oracle автоматически в пределах трех секунд
откатом DML-операции в одной из сессий. Правда, откатившаяся DML-операция может попытаться повторно модифицировать строки, заблокированные не откатившейся
операцией.
Блокировки между сессиями
по DML-операции идут
за одни и те же строки одной
и той же таблицы
В силу малого времени блокировки отловить deadlock
блокировки Oracle-представлениями непросто. Их можно отследить в файле Alert.log, регистрирующем Oracleпроблемы, в виде ошибки:
ORA-00060: deadlock detected while waiting for resource
Одним из возможных средств мониторинга deadlock может быть также запрос Select * from dba_blockers, запущенный в момент выполнения блокировки.
Замечание. В практике блокировок встретились блокировки, накладываемые на ручную блокировку lock table ...
exclusive. Например, шли интенсивные insert вставки в таблицу lists. В этот период было решено провести эксклюзивную блокировку таблицы lists по lock table. Однако, поскольку над таблицей выполняется DML-операция, попытка
выполнить lock table привела к длительному ожиданию
окончания вставок в эту таблицу, после чего выполнилаcь
ручная блокировка lock table. Чтобы регулировать данный
процесс, можно ввести фразу nowait в lock table и далее
обрабатывать исключение exception, ожидая освобождения
ресурса.
Блокировки между сессиями по DML-операции идут за одни
и те же строки одной и той же таблицы. Увидеть блокирующую и заблокированные сессии и имя заблокированной
таблицы позволяют запросы, приведенные выше.
Имя хранимой процедуры и саму DML-операцию заблокированной сессии позволяют увидеть указанные выше запросы.
Отсутствие commit после DML-операции в блокирующей сессии требует анализа запросов, работающих далее
в этой сессии в целях уменьшения времени выполнения
этих запросов. Это позволит уменьшить время блокировки других сессий. Помочь в выявлении и диагностировании
неэффективных запросов позволяют представления v$sql,
v$sql_monitor и v$sql_plan_monitor.
[1] Михеичев В. Мониторинг блокировок в Oracle. Методы предупреждения и автоматического устранения. // «Системный администратор», №4, 2015 г. – С. 30-35 (http://samag.ru/archive/
article/2926).
Ключевые слова: СУБД, Oracle, блокировки.
43
Разработка
мобильные приложения
Визитка
АНДРЕЙ ПАХОМОВ,
программист-фрилансер, mailforpahomov@gmail.com
Современное клиент-серверное приложение
для платформы Android
Разбираем современные подходы к разработке мобильных приложений
При разработке мобильных приложений уделяется большое
внимание созданию эффективного сетевого функционала.
Современные мобильные устройства практически постоянно подключены к интернету, пользователь зачастую и не понимает, где именно обрабатываются его данные: непосредственно на устройстве или где-то на сторонних серверах.
Грамотная организация сетевого соединения – залог стабильной работы приложения, а значит, и его популярности
среди пользователей.
Используем Retrofit v.2
Разработчики приложений в своей работе часто сталкиваются с похожими задачами. Когда одна и та же задача возникает у широкого круга специалистов, появляются библиотеки, реализующие требуемый функционал. Сегодня
мы воспользуемся сторонними наработками для создания
стабильного сетевого соединения, а именно библиотекой
Retrofit. Это HTTP-клиент для Android, в котором уже реализовано все необходимое для организации эффективного обмена данными. Совсем недавно вышла его вторая, улучшенная, версия. Именно ее сегодня мы и будем использовать.
Retrofit реализует RESTful-архитектуру, упрощающую работу
по загрузке или отправлению структурированной информации на веб-сервер. В этой библиотеке есть встроенные конвертеры популярных форматов хранения данных (XML, JSON,
Protobuf и др.), в статье мы воспользуемся одним из них.
Библиотека выполнит все рутинные операции, нам
как разработчикам остается только указать самое важное –
параметры соединения и правила обработки ответа от сервера. Итак, приступим!
Создадим приложение, которое будет загружать недельный прогноз погоды и отображать его на экране. Для начала
подключим к проекту необходимые библиотеки.
compile 'com.squareup.retrofit:retrofit:2.0.0-SNAPSHOT'
compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2'
Начнем с получения данных. Прогноз погоды будем загружать с сайта OpenWeatherMap.org, он предоставляет
44
удобное и понятное API. Согласно документации с сайта
для получения прогноза достаточно всего лишь правильно
сформировать GET-запрос. Вот как он должен выглядеть:
http://api.openweathermap.org/data/2.5/forecast/↵
daily?q=Moscow,ru&units=metric&cnt=7&appid=uniq_id
В данном случае мы загружаем недельный (cnt=7) прогноз погоды для Москвы (q=Moscow,ru) в метрической системе измерения (units=metric) с указанием идентификатора
разработчика (appid=uniq_id, выдается при регистрации).
Для функционирования сетевой части зададим необходимые параметры, создав абстрактный класс RequestAPI.
public interface RequestAPI {
...
Тип запроса задается с помощью аннотации. Укажем,
что нам требуется отправить GET-запрос.
@GET("/data/2.5/forecast/daily")
Как я писал в статье [1], работу с сетевыми ресурсами
требуется организовать асинхронно, в отдельном потоке.
Используя Retrofit это сделать несложно. Параметры запроса будут заданы при окончательном формировании непосредственно в Activity.
Call<JsonParser> loadForecast(@Query("q") String city, ↵
@Query("units") String units, @Query("cnt") ↵
String cnt, @Query("appid") String appid);
Проект OpenWeatherMap предоставляет данные в нескольких форматах, по умолчанию это JSON, для разбора
воспользуемся встроенным в Retrofit инструментом.
JSON (JavaScript Object Annotation) – это относительно новый формат хранения данных, который «вырос» из JavaScript.
По сравнению с XML его гораздо легче внедрять в вебпроекты и в приложения, основанные на ООП-архитектуре.
декабрь 2015 системный администратор
Разработка
мобильные приложения
Для получения данных требуется создать класс, в объект которого Retrofit самостоятельно поместит полученную
с сервера информацию.
Разбираем формат JSON
Чтобы понять, как он должен выглядеть, разберем формат
данных, которые вернет нам сервер.
{"city":{"id":524901,"name":"Moscow","coord":{…}, ↵
"country":"RU",…},
…
list":[{"dt":1448182800,
"temp":{"day":5.58,"night":5.42,…},
"…
"weather":[{…"main":"Snow","icon":"13d"}],
"speed":2.06,…},
{"dt":1448269200,
…]}
В ответ на запрос сервер возвращает нам объект city
с географическими данными и список объектов list с температурной информацией. Объекты списка лист – это прогноз
погоды на каждый день, их будет ровно столько, сколько
дней мы запросили в параметре cnt. Погода будет храниться как отдельными переменными (speed), так и массивами
данных (weather).
Для корректной обработки полученных данных напишем
свой класс JsonParser, в объект которого Retrofit самостоятельно поместит данные, полученные в результате запроса.
Укажем с помощью аннотаций, в какой именно объект
следует поместить данные.
@SerializedName("city")
@Expose
private
CityData city = new CityData();
Класс СityData будет содержать несколько строковых
переменных, а также методы, через которые мы позднее
сможем получить разобранные данные.
public class CityData{
@SerializedName("name")
@Expose
public String cityName;...}
Теперь нужно сформировать запрос и передать его
на сервер.
При формировании укажем адрес ресурса, куда запрос
будет направлен, и тип парсера, который будет осуществлять разбор входных данных.
final Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://api.openweathermap.org")
.addConverterFactory(GsonConverterFactory.create())
.build();
Создаем список
С сетевой частью пока закончим, теперь создадим интерфейс для отображения полученных данных. Для этих целей создадим список с помощью нового в Android класса
CardView. Этот класс появился в Android сравнительно недавно, он помогает предоставить данные пользователю
ярче и притягательнее, чем раньше.
Нам потребуется еще одна библиотека, модифицируем
gradle-файл:
compile 'com.android.support:cardview-v7:23.0.+'
И сразу начнем формировать элемент будущего списка. В его основе будет лежать непосредственно объект
CardView.
Уделим внимание внешнему виду: элементы списка будут
отбрасывать тень (cardElevation) и иметь скругленные углы
(CornerRadius) (см. рис. 2).
<android.support.v7.widget.CardView
card_view:cardElevation="5dp"
card_view:cardCornerRadius="2dp"…>
Построим интерфейс приложения на основе класса
RelativeLayout. Он позволяет группировать визуальные элементы, указывая, как они должны быть расположены относительно друг друга.
Рисунок 1. Gradle-файл проекта нашего приложения
Теперь обработаем информацию о температуре.
Так как дней несколько, то информация будет помещена
в несколько объектов, сгруппированных в список.
@SerializedName("list")
@Expose
public List<DayData> dayData=new ArrayList<DayData>();
В класс DayData поместим строковые переменные, объекты и массивы объектов.
@SerializedName("temp")
@Expose
public Temp tempInfo = new Temp();
@SerializedName("weather")
@Expose
public List<Weather> weatherInfo = new ArrayList<Weather>();
…
системный администратор декабрь 2015
45
Разработка
мобильные приложения
<RelativeLayout
…
android:padding="5dp"
android:background="@drawable/item_background"...>
<ImageView
android:id="@+id/ndImg"
android:layout_centerHorizontal="true"
android:layout_below="@+id/date"…/>
В качестве фона ему задан элемент item_background.
Это элемент ShapeDrawble, который позволяет определить
некоторые визуальные параметры. В данном случае элемент RelativeLayout будет окаймлен узкой белой рамкой
и будет задан отступ от соседних элементов.
Теперь разместим два текстовых поля для указания температуры (дневной и ночной).
<stroke android:width="1dp" android:color="#FFFFFF"/>
<padding
android:left="5dp"
android:top="5dp" … />
Также «срежем» углы и зададим цветовой переход (градиент) в качестве фона.
<corners android:radius="8dp" />
<gradient
android:startColor="#8181F7"
android:endColor="#FFCCCCCC".../>
Теперь перейдем к группированию элементов на экране,
зададим параметры вида android_align... для каждого из объектов. Начнем с текстового поля, в котором будет указана
дата прогноза погоды.
<TextView…
android:id="@+id/date"
Он будет прикреплен к верхнему краю RelativeLayout
и по центру. Зададим ему также увеличенный кегль и отступ
от других элементов.
android:layout_alignParentTop="true"
android:textSize="20dp"
android:padding="2dp"
android:layout_centerHorizontal="true"/>
В нашем прогнозе погоды будет графическая иллюстрация, разместим ее по центру и ниже поля с датой.
Рисунок 2. Макет прогноза погоды на день
46
<TextView
android:id="@+id/ndF1"
android:layout_below="@+id/ndImg"
android:layout_centerHorizontal="true" …/>
Они будут расположены вертикально выравнено, один
над другим.
<TextView …
android:id="@+id/ndF2"
android:layout_below="@+id/ndF1"
android:layout_centerHorizontal="true".../>
Теперь организуем объект, в котором будет храниться
прогноз погоды на определенную дату. Для этого создадим
класс DayFrct со строковыми переменными, необходимыми
для сохранения данных.
public
String
String
String
…
class DayFrct {
dayTemp;
nightTemp;
image;
Как видно из примера, погодная иллюстрация хранится тоже в строковой переменной. Для экономии ресурсов
мы будем хранить только путь к изображению, сама картинка будет загружена позже с помощью другой сторонней
библиотеки.
Создадим конструктор, все необходимые для работы
данные будут заданы при создании объекта.
public DayFrct(String date, …)
{this.image=image;
this.dayTemp=dayTemp;…}
Рисунок 3. Схема работы приложения, использующего RecyclerView
декабрь 2015 системный администратор
Разработка
мобильные приложения
Элементы CardView будут позднее сгруппированы и отображены в объекте класса RecyclerView. Этот новый дочерний класс иерархии View, предоставляющий возможность
по-новому отображать списки. RecyclerView быстрее формирует отображаемый список и расходует меньше ресурсов устройства по сравнению с классом ListView, который
мы использовали раньше. Необходимо подгрузить новую
библиотеку, добавив соответствующую запись.
Для передачи этой информации потребуется переопределить несколько методов. Для начала зададим информацию
о том, как будут выглядеть элементы списка. Теперь нам необходимо создать объекты, которые впоследствии помогут
отобразить данные в RecyclerView. Начнем с определения
метода, в котором будет формироваться ViewHolder.
compile 'com.android.support:recyclerview-v7:23.0.+'
Все элементы списка будут в своей основе иметь layoutкомпоновку, заданную ранее с помощью CardView. Мы формируем элемент списка View, «надувая» (англ. Inflate) его тем,
что мы задали в XML-файле, а затем на основе получившегося объекта уже создаем сам ViewHolder.
Теперь мы можем разместить объект класса RecyclerView
в layout-файле.
<android.support.v7.widget.RecyclerView
android:id="@+id/forecastList"
android:padding="5dp"..>
public Frcst onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext()).↵
inflate(R.layout.next_day, viewGroup, false);
Frcst frcstViewHolder = new Frcst(v);
return frcstViewHolder;}
Теперь нам нужно задать связующее звено между
CardView, RecyclerView и данными – адаптер для отображаемых данных. У класса RecyclerView есть собственный адаптер, нам необходимо его расширить.
Также для корректной работы приложения необходимо
зафиксировать общее число элементов списка, переопределив метод getItemCount().
public class FrcstAdapter extends RecyclerView.↵
Adapter<FrcstAdapter.Frcst> {
public int getItemCount() {
return days.size();}
Теперь перейдем к конструктору, он будет заполнять список с данными, необходимыми для заполнения элементов,
отображаемых в RecyclerView.
Когда требуется обновить данные у какого-то элемента,
RecyclerView вызывает метод onBindViewHolder.
public void onBindViewHolder(final Frcst itemVH, int i) {
List<DayFrct> days;
FrcstAdapter(List<DayFrct> days)
{this.days = days;}
По сути дела, каждый элемент списка, отображаемый
в объекте RecyclerView, представляет собой отдельный объект-наследник класса View. Разработчики ОС Android не реализовали связь с этими объектами, нам самим нужно явно
задать эту связь, используя класс ViewHolder.
При вызове методу передается объект ViewHolder с указанием порядкового номера элемента View, содержимое
которого будет модифицировано. Благодаря ViewHolder
мы можем обратиться к элементам View напрямую, без вызова дополнительных методов.
itemVH.dayForecast.setText("Day: "+ days.get(i).↵
getDayTemp()+"C");...}
public class Frcst extends RecyclerView.ViewHolder {
ImageView NDImage;
TextView dayForecast;
...
Теперь нам осталось только загрузить данные в адаптер,
и сформированный список с прогнозом погоды отобразиться на дисплее.
При работе со списками ViewHolder использовался всегда, просто для класса ListView он был уже реализован заранее. К каждому элементу списка прикреплен свой объект
класса ViewHolder, именно он отвечает за заполнение списка данными. Исторически ViewHolder был создан для повышения плавности прокрутки списка: в его конструктор
помещаются выполнение ресурсоемких методов, работа которых может нарушить плавность работы приложения. В нашем случае таким методом является findViewById().
Сегодня нами была проделана большая работа: организовано сетевое соединение, разобраны полученные данные,
а также создан список с использованием классов CardView
и RecyclerView.
В следующей статье мы продолжим работу: нам нужно
связать созданные объекты и применить еще несколько
интересных новшеств Android. Если у вас появились какието вопросы, пишите мне на почту. Увидимся в новом году! EOF
Frcst(View itemView) {
super(itemView);
nightForecast = (TextView)itemView.findViewById(R.id.ndF2);
date = (TextView)itemView.findViewById(R.id.date);…}
При запуске приложения RecyclerView запросит
у адаптера информацию о внешнем виде элементов списка.
системный администратор декабрь 2015
[1] Сайт Retrofit – http://square.github.io/retrofit.
[2] Пахомов А. Отображение систематизированных данных
в Android. // «Системный администратор», №10, 2015 г. – С. 5861 (http://samag.ru/archive/article/3050).
Ключевые слова: Android, Retrofit, библиотека, программирование.
47
Разработка
инструменты
Визитка
АЛЕКСАНДР КАЛЕНДАРЕВ,
РБК Медиа, программист, akalend@mail.ru
RabbitMQ. Вырастаем из штанишек
В статье рассмотрим основные паттерны использования сервера очередей RabbitMQ
применительно к веб-проектам
В предыдущей статье [1] «Кролик в песочнице» мы знакомились с основами протокола AMQP и принципами работы
с очередями.
Введение в паттерны
О паттернах написано много книг, и повторяться – это тратить свое и ваше время. Если кто не в теме, то паттерны –
это такие обобщенные части, которые, как строительные
кубики, используются для построения архитектуры проекта.
Есть паттерны проектирования приложения, скорее всего вы уже читали бестселлер «банды четырех» [2]. Далее,
развивая эту тему, появились паттерны проектирования баз
данных. Есть специальный портал, посвященный разным
паттернам проектирования [3]. Ну и, конечно, там не обделены вниманием и паттерны использования обмена сообщений [4].
Отложенные действия
Паттерн «Отложенные действия» является основным в архитектуре нагруженных проектов. Его суть в том, что нет необходимости выполнять все действия сразу, особенно те,
которые требуют большого расхода ресурсов: памяти, процессорного времени. Некоторые действия можно выполнить
чуть позже, но уже другим процессом или даже на другом
сервере. Для координации действий используется очередь
Рисунок 1. Схема взаимодействия фронт-процесса и фоновых процессов
сообщений, по которой передаются действия (что нужно
сделать) и параметры действий.
На рис. 1 изображена схема взаимодействия фронтпроцесса (веб-скрипта) и фоновых процессов (background
task), которые принято называть worker (рабочий процесс).
Веб-скрипт принял запрос от клиента (браузера или мобильного приложения), сделал самые необходимые операции, не требующие ресурсов, подготовил данные для workerпроцесса, передал их в очередь, а далее вернул на клиент
ответ, что, мол, задача выполнена. А сама задача должна
гарантированно выполниться спустя какое-то время. Тем самым мы снимаем часть нагрузки с веб-сервера, перенеся
ее на другие серверы.
Приступим к реализации. Предварительно мы должны
создать постоянную очередь и постоянный обмен, задав
флаг AMQP_DURABLE. Постоянная очередь задается на тот
случай, если вдруг «упадет» сервер очередей или его просто по необходимости перегрузят, после его восстановления автоматически создадутся очередь и обмен, а данные
из очереди не должны пропасть. Данная операция делается
один раз.
Пример 1. Создание очереди, обмена и их привязки друг к другу
<?php
$rabbit = new AMQPConnection();
$res = $rabbit->connect();
$channel = new AMQPChannel($rabbit);
$exchange = new AMQPExchange($channel);
$exchange->setFlags(AMQP_DURABLE);
$exchange->setName('to_worker');
$exchange->setType(AMQP_EX_TYPE_DIRECT);
$exchange->declare();
$queue = new AMQPQueue($channel);
$queue->setFlags(AMQP_DURABLE);
$queue->setName('worker');
$queue->declare();
$queue->bind('to_worker', 'work');
Веб-скрипт должен принять и обработать пользовательские данные и поместить в обмен информацию, которую
должен передать в рабочий процесс. Также необходимо
задать параметр 'delivery_mode'=2(persistent message),
48
декабрь 2015 системный администратор
Разработка
инструменты
постоянные сообщения, которые в случае выключения сервера очередей сохранятся.
Пример 2. Отправка сообщения получателю
<?php
// обработка кода
$data = json_encode([…]);
// соединение с сервером очередей и подготовка
$rabbit = new AMQPConnection();
$res = $rabbit->connect();
$channel = new AMQPChannel($rabbit);
$exchange = new AMQPExchange($channel);
$exchange->setFlags(AMQP_DURABLE);
$exchange->setName('to_worker');
// отправка сообщения
$exchange->publish($data,'work',0,
['delivery_mode'=>2,
'content_type'=> 'application/json',
'content_encoding'=>'utf8']
);
При приеме сообщения необходимо организовать циклический опрос очереди, и, если в ней есть данные, взять
их и обработать:
Пример 3. Асинхронный прием сообщения методом GET
<?php
$rabbit = new AMQPConnection();
$res = $rabbit->connect();
$channel = new AMQPChannel($rabbit);
$queue = new AMQPQueue($channel);
$queue->setName('worker');
// организуем цикл работы задачи на 10 мин, чтобы избежать
// утечек памяти каждые 10 мин по крону запускаем новую задачу
$t = time() + 10 * 60;
$sleep = 100;
// задаем промежуток засыпания
while ( $t < time() ) {
$msg = $queue->get(AMQP_AUTOACK);
if ($msg != false) {
// тут происходит обработка сообщения
var_dump($msg->getBody());
}
usleep($sleep);
}
$rabbit->disconnect();
Недостатки такого построения системы в том, что мы должны с периодичностью, равной значению переменной $sleep,
опрашивать очередь. Тут требуется тонкая настройка переменной $sleep. Ее значение должно где-то соответствовать
периодичности поступления данных на один рабочий процесс. Если данные в очередь поступают редко, а значение
$sleep слишком мало, то рабочие процессы могут простаивать, тратя процессорное время на обслуживание цикла.
Если значение $sleep слишком велико, то, во-первых, обработка данных будет отставать, рабочие процессы могут
не успевать «разгребать» очередь, и придется добавлять
дополнительные процессы.
Другой способ – это применить синхронную обработку,
используя метод Сonsume, который является менее затратным с точки зрения занятия процессорного времени и более
оперативным:
Пример 4. Синхронный прием сообщения, метод CONSUME
//фyнкция обработки сообщения
function processMessage($envelope, $queue) {
echo 'Message: ',$envelope->getBody(),PHP_EOL;
системный администратор декабрь 2015
$queue->ack( $envelope->getDeliveryTag() );
}
//основной код
try {
$rabbit = new AMQPConnection();
} catch (AMEQConnectionException $e) {
die('Connection abort');
}
$res = $rabbit->connect();
$channel = new AMQPChannel($rabbit);
$queue = new AMQPQueue($channel);
$queue->setName('workers');
$queue->consume("processMessage");
Особенность данного кода в том, что на методе $queue->
consume код блокируется и далее срабатывает функцию
обратного вызова processMessage($envelope, $queue).
В данной функции необходимо вызвать метод $queue->
ack($deliveryTag), который сообщит брокеру, что сообщение
обработано. Если мы зададим несколько рабочих процессов, то сообщения из очереди будут равномерно распределены между ними.
При использовании паттерна «отложенные действия»
очень важно то, чтобы все поставленные в очередь задачи
были выполнены. Для этого необходимо организовать системный мониторинг очереди.
Для построения мониторинга можно использовать стандартные плагины Nagius, Zabbix Munin и др. подобных систем. Можно написать свой мониторящий скрипт, который
отдает в мониторинговую систему либо количество сообщений в очереди, либо сигналы 1 или 0, если количество элементов в очереди превысило установленный лимит или нет
соединения. Ниже в примере приведен кусок кода мониторинга, где возвращается количество элементов в очереди
или -1, если нет соединения с брокером очередей.
Пример 5. Мониторинг длины очереди
import pika
connection = None
try:
connection = pika.BlockingConnection()
except Exception as err:
print -1
quit()
channel = connection.channel()
msg = channel.basic_get(queue="worker", no_ack=False)
connection.close()
if msg[0] == None:
print 0
quit()
print msg[0].message_count
Что примечательно в данном коде? Во-первых, если нет
соединения с сервером очередей, то необходимо обработать исключение AMQPConnectionExeption, где в случае неудачи должно быть выдано число -1. Во-вторых, обязательно
должен быть установлен параметр метода channel.basic_get
в no_ack=False, который уведомляет сервер очередей о том,
что сообщение не обработано. Его должен будет обработать рабочий процесс (worker), иначе мы данные о сообщении потеряем. И последнее: когда сообщений в очереди нет,
то объект сообщения msg[0]: BasicOK == None. Это также
необходимо учитывать.
Может возникнуть вопрос не по существу: почему написано на Python? Ну, как правило, все системные административные скрипты принято писать на Python или Perl.
49
Разработка
Ну и интерфейс amqp_php не имеет возможности определить количество элементов в очереди.
Подписка/Потребитель
Иногда приходится информировать сразу несколько разных рабочих процессов о наступлении определенного события. Для этого используется шаблон Subscriber/Consume.
Каждый рабочий процесс «подписывается» на событие, и,
как только событие происходит, брокер сразу уведомляет
всех своих «подписчиков». Для реализации этого паттерна
используется тип обмена fanout. Подробнее о типах обмена
было рассказано в предыдущей статье [1]. Также можно использовать зарезервированный системой стандартный обмен amq.fanout.
Пример 6. Тип обмена fanout, объявление обмена
$rabbit = new AMQPConnection();
$res = $rabbit->connect();
$channel = new AMQPChannel($rabbit);
$exchange = new AMQPExchange($channel);
// задаем имя обмену
$exchange->setName('mfanout');
// задаем тип fanout
$exchange->setType(AMQP_EX_TYPE_FANOUT);
// объявляем обмен
$exchange->declare();
Как мы уже говорили, необходимо создать очередь и связать ее с обменом:
Пример 7. Связь очереди и обмена типа fanout
$res = $rabbit->connect();
$сhannel = new AMQPChannel($rabbit);
$queue = new AMQPQueue($сhannel);
// задаем имя очереди
$queue->setName('consume');
Рисунок 2. Связь обмена между очередями
Рисунок 3. Пример «тематического» обмена
инструменты
// объявляем очередь
$queue->declare();
// связываем очередь и обмен
$queue->bind('mfanout', '');
// значение поля ключ не используется
Сам код программы Подписчика соответствует коду примера 4, за исключением задания имени очереди. Нужно
задать:
$queue->setName('consume');
Эксклюзивный обмен
Обратная ситуация – должен быть подсоединен только
один Подписчик. Тогда очереди присваиваем эксклюзивный
режим:
Пример 8. Задание флага эксклюзивного режима для очереди
$queue->setName('consume');
$queue->setFlags(AMQP_EXCLUSIVE);
$queue->declare();
Если попытаться подсоединиться вторым клиентом,
то получим следующее исключение:
$php consume.php
PHP Fatal error: Uncaught exception 'AMQPQueueException'
with message 'Server channel error: 403, message:
ACCESS_REFUSED - queue 'consume' in vhost '/' in exclusive
use' in /home/akalend/projects/test/consume.php:24
Stack trace:
#0 /home/akalend/projects/test/consume.php(24):
AMQPQueue->consume('processMessage')
#1 {main} thrown in /home/akalend/projects/test/consume.php
on line 24
Фильтрация данных
Часто появляется необходимость принимать только определенные сообщения. В зависимости от архитектуры можно
использовать разные варианты:
> использовать тип обмена topic, фильтровать по маске;
> использовать тип обмена headers, фильтровать по заголовкам;
> использовать несколько разных очередей, фильтровать по определенному ключу.
Рассмотрим последний вариант (см. рис. 2).
На рис. 2 изображена связь обмена с очередью 1 по ключу oil и с очередью 2 по ключу metall.
Все данные, которые поступают с ключом metal, будут
направлены в очередь 2, а с ключом oil в очередь 1. Если
мы хотим создать очередь 3, которая будет принимать
и те, и другие сообщения, то к ней можно привязать обмен
по двум ключам: пример 9 показывает, как привязать к нашей очереди обмен по второму ключу.
Пример 9. Привязка обмена сразу к нескольким очередям
$queue = new AMQPQueue($сhannel);
$queue->setName('worker');
$queue->bind('to_worker', 'logs');
$queue->bind('to_worker', 'jobs');
50
декабрь 2015 системный администратор
Разработка
инструменты
Можно проверить данную привязку утилитой rabbitmqctl:
$sudo rabbitmqctl list_bindings
Listing bindings ...
exchange
exchange
to_worker
exchange
to_worker
exchange
...done.
consume
worker
worker
worker
queue
queue
queue
queue
consume
worker
logs
jobs
[]
[]
[]
[]
При объявлении связи очереди и обмена необходимо
указать, с каким заголовком должны пропускаться сообщения. Значение заголовка 'x-match' равное 'any' – говорит,
что достаточно одного соответствия, а 'x-match' равное
'all' – допускаются только все соответствия. К сожалению,
РНР-интерфейс не позволяет нам связать очередь и обмен
с параметрами. Будем использовать Python (bind.py):
Пример 12. Связь обмена типа headers и очереди
Теперь вернемся к первому варианту. Мы его рассматривали в предыдущей статье [1]. Объявим тип обмена topic.
Используя паттерны ключей обмена, можно фильтровать
и перенаправлять сообщения.
Пусть в наш обмен поступают данные о котировках
на разных биржах с разных источников (см. рис. 3). Объявим тип обмена topic.
import pika
connection = pika.BlockingConnection()
ch = connection.channel()
ch.queue_bind(exchange='tracer', queue='worker', ↵
arguments={'operation': 'log', 'x-match':'any'})
Проверим результат выполнения python bind.py утилитой
rabbitmqctl:
Пример 10. Реализация распределения сообщений для типа обмена topic
$exchange = new AMQPExchange($channel);
// задаем имя обмену
$exchange->setName('quotation');
// задаем тип topic
$exchange->setType(AMQP_EX_TYPE_TOPIC);
// объявляем обмен
$exchange->declare();
$ sudo rabbitmqctl list_bindings
Listing bindings ...
exchange worker
queue
to_worker
exchange worker
queue
to_worker
exchange worker
queue
tracer
exchange worker
queue
[{"operation","log"},{"x-match","any"}]
...done.
worker
logs
work
worker
[]
[]
[]
Объявляем очереди и привязываем их:
$queue = new AMQPQueue($сhannel);
$queue->setName('RTSB');
$queue->declare();
$queue->bind('quotation', 'RTSB.*');
$queue->setName('Gazprom');
$queue->declare();
$queue->bind('quotation', '*.gazprom');
$queue->setName('Oil');
$queue->declare();
$queue->bind('quotation', '*.oil.*');
Как видим, в примере 10 все котировки с РТСБ (Российская товарно-сырьевая биржа) поступают в очередь RTSB,
все котировки нефтяных акций поступают в очередь Oil,
а все котировки акций компании «Газпром» на всех биржах –
в очередь Gazprom. Пример ключей котировок сообщений:
RTSB.oil.Gazprom – котировка «Газпрома» на РТСБ
ChTB.oil.Gazprom – котировка «Газпрома» на Чикагской бирже
RTSB.met.NorilskNikel – котировка «Норильского никеля» на РТСБ
RTSB.oil.Transneft – котировка «ТрансНефти» на РТСБ
И последнее: фильтровать сообщения можно, используя заголовки. Каждое AMQP сообщение состоит из тела,
атрибутов и необязательных заголовков. В предыдущих
примерах заголовки не использовались, поэтому об их существовании тихо умалчивалось. Есть тип обмена headers,
введенный в AMQP 0.9.1 (см. рис. 4). Данный тип использует
перенаправления сообщения в соответствии с заголовками
сообщения, игнорируя ключ направления (routing-key).
Мы видим, что наш обмен tracer связан с очередью worker
через заголовки.
Отправим сообщение (см. пример 13):
Пример 13. Публикация сообщения с заданием заголовков
$exchange = new AMQPExchange($channel);
$exchange->setName('tracer');
$data = json_encode([1,2,3, rand(0, 1000)]);
// задаем необходимый заголовок
$headers = ['operation' => 'log'];
// задаем аргументы
$args = ['delivery_mode'=>2,
'content_type'=> 'text/json',
'headers' => $headers ];
// публикуем сообщение
$exchange->publish($data,'tracer',0,$args);
Если мы отправим сообщение без указания массива
headers или со значением, не равным 'operation' => 'log',
Рисунок 4. Распределение сообщений по значению в заголовках сообщения
Пример 11. Задание обмена типа headers
$ex = new AMQPExchange($channel);
$ex->setType(AMQP_EX_TYPE_HEADERS); // задаем тип headers
$ex->setName('tracer');
$ex->declare();
системный администратор декабрь 2015
51
Разработка
то отправленное нами сообщение отфильтруется, т.е. не достигнет указанной очереди.
Направление сообщений (routing)
Направление сообщений повторяет фильтрацию, только
происходит объявление нескольких очередей, куда направляются сообщения и объявляются связи с разными ключами
направлений. Самый яркий пример – это пример 10: объявление обмена типа topic с перенаправлением котировок
акций между очередями.
Возьмем последний пример, если мы, например, кроме
очереди worker, объявим очередь trace и привяжем ее через
заголовок «operation» => 'trace' (см. рис. 4), то все сообщения с заголовками «operation» => 'trace' будут направлены
в очередь trace, а «operation» => 'log' – в очередь worker:
Пример 14. Создание связи очереди с обменом типа headers
import pika
connection = None
try:
connection = pika.BlockingConnection()
Рисунок 5. Дублированный обмен. Создаем связь между очередями и обменом
по одному ключу
Рисунок 6. Внутренний обмен. Создание связи между двумя обменами
инструменты
except Exception as err:
print 'AMQP connection error'
quit()
ch = connection.channel()
ch.queue_declare(queue='traces')
ch.queue_bind(exchange='tracer', queue='tracer', ↵
arguments={'operation': 'trace', 'x-match':'any'})
Дублированный обмен
При организации Подписки/Потребитель брокер сообщений будет равномерно распределять сообщения между потребителями. Если необходимо, чтобы каждый потребитель
получал все исходящие сообщения, то для каждого потребителя организуется его личная очередь, которая связывается по одному и тому же ключу с обменом (см. рис. 5).
Пример 15. Дублированный обмен. Создаем связь между очередями и обменом
по одному ключу
$queue = new AMQPQueue($сhannel);
$queue->setName('Queue1');
$queue->declare();
$queue->bind('ex1', 'key');
$queue->setName('Queue2');
$queue->declare();
$queue->bind('ex1', 'key');
Внутреннее перенаправление сообщений
Обычно обмен связан с очередью через «ключ направления
» (routing key). В соответствии с этим ключом и происходит
направление сообщения в соответствующую очередь.
Однако мы можем связать два обмена через некоторый
ключ, а второй обмен уже будет «разруливать» сообщения
исходя из их заголовков (см. рис. 6).
Обычно это нужно, чтобы по одному ключу сообщение
достигало Получателя и параллельно попадало в лог-архив
(комбинация паттернов дублирование сообщений + направление сообщений).
Пример 16. Создание связи между двумя обменами
Рисунок 7. Организация перенаправления сообщений в корзину
$exchange = new AMQPExchange($channel);
$exchange->setName('to_worker');
$exchange->setType(AMQP_EX_TYPE_FANOUT);
// объявляем обмен to_worker
$exchange->declare();
// связываем его с очередью
$exchange->bind('worker', '' );
// объявляем обмен tracer
$exchange->setName('tracer');
$exchange->setType(AMQP_EX_TYPE_HEADERS);
$exchange->declare();
// возвращаемся к обмену to_worker
$exchange->setName('to_worker');
// связываем его с обменом tracer
$exchange->bind('tracer', '' );
// далее обмен tracer можно связать с «архивными» очередями
// и делать между ними перенаправления по заголовкам.
Очередь-корзина
Как правило, в RabbitMQ очередь по умолчанию имеет признак autodelete, а это значит, что если клиент по какойто причине «отвалился», то очередь самоуничтожится. И,
когда клиент вновь подсоединится, часть сообщений за этот
промежуток будет потеряна. Поэтому можно организовать очередь-корзину для «недоставленных» сообщений
(см. рис. 7).
52
декабрь 2015 системный администратор
инструменты
Пусть обмен и очередь связаны по некоторому ключу:
$channel = new AMQPChannel($rabbit);
$exchange = new AMQPExchange($channel);
$exchange->setFlags(AMQP_DURABLE);
$exchange->setName('to_worker');
$exchange->setType(AMQP_EX_TYPE_DIRECT);
$exchange->declare();
$queue = new AMQPQueue($channel);
$queue->setFlags(AMQP_AUTODELETE);
$queue->setName('worker');
$queue->declare();
$queue->bind('to_worker', 'work');
Далее объявим очередь-корзину и привяжем ее к обмену:
$queue->setFlags(AMQP_DURABLE);
$queue->setName('garbage');
$queue->declare();
$queue->bind('to_worker', 'work');
Переопределим очередь cо служебным заголовком
'x-dead-letter-exchange':'garbage', который укажет брокеру,
что в случае «смерти» очереди, пересылать все сообщения
в 'garbage':
Пример 17. Создание очереди-корзины
$queue->setName('worker');
$queue->delete();
$queue->setArgument('x-dead-letter-exchange','garbage');
$queue->declare();
$queue->bind('to_worker', 'work');
В очередь garbage будут поступать сообщения, которые
не достигли клиента очереди worker.
Если что-то не работает
Если программа заработала с первого раза, то вы счастливый человек. Но, как правило, где-то что-то не так указали,
что-то подзабыли. И вроде ошибок нет, а сообщения не доходят – в чем может быть причина? Чтоб понять, что и как происходит, в брокере есть замечательная утилита rabbitmqctl,
работу которой не раз демонстрировали в статье. Вы также можете посмотреть, что и как проходит на брокер через
WireShark. Но есть другой хороший отладочный инструмент –
это AMQP-прокси, или, как его назвали разработчики, Tracer.
Разработка
AMQP Tracer является частью пакета rabbitmq-javaclient [5]. Запуск:
$ java -cp rabbitmq-client.jar:commons-io-1.2.jar: ↵
commons-cli-1.1.jar com.rabbitmq.tools.Tracer677
На скриншоте (рис. 8) виден результат работы AMQPпрокси. Можно проследить, по какому каналу передавались
какие именно команды и с какими параметрами. Конечно,
для этого надо немного знать основы AMQP-протокола,
но на интуитивном уровне, плюс некоторые знания из этой
и вводной [1] статей дадут более-менее полное понимание
процесса. По крайней мере использование данной утилиты
покажет, чего может не хватать.
Для использования этой утилиты необходимо подключаться не на порт 5672 (по умолчанию), а на порт 5677:
$rabbit = new AMQPConnection(array('host' => '127.0.0.1', ↵
'port' => '5677'));
В заключение хочется отметить, что тема RabbitMQ обширна, и в данной статье приводились лишь паттерны использования. Также необходимо подчеркнуть, что для внедрения
в «продакшен», придется изучить администрирование, мониторинг и, возможно, масштабирование RabbitMQ. Надеюсь, статья будет полезной при внедрении ваших идей с использованием RabbitMQ. EOF
[1] Календарев А. Кролик в песочнице. // «Системный администратор», №10, 2015г. – С. 60-65 (http://samag.ru/archive/article/3074).
[2] Банда четырех – https://ru.wikipedia.org/wiki/Design_Patterns.
[3] Schmidt, Pattern-Oriented Software Architecture Vol.1-4,
Wiley, 2000 – http://www.cs.wustl.edu/~schmidt/POSA.
[4] Honre, Woolf. Enterprise Integration Pattrerns. A Wesley, 2010.
[5] Пакет rabbitmq-java-client – https://www.rabbitmq.com/java-client.
html.
[6] Официальный сайт RabbitMQ – https://www.rabbitmq.com.
[7] Серия статей, перевод с официального сайта – http://
habrahabr.ru/post/149694.
[8] Zabbix мониторинг плагин – https://github.com/jasonmcintosh/
rabbitmq-zabbix.
Ключевые слова: RabbitMQ, очереди, программирование, паттерны, AMPQ.
Рисунок 8. Пример работы AMQP-прокси (Tracer677)
системный администратор декабрь 2015
53
Разработка
инструменты
Визитка
ОЛЕГ ФИЛИППОВ,
АНТ-Информ, заместитель начальника отдела разработки, comol@mail.ru
Разрабатываем биржевого робота
Часть 2. Использование пакета MATLAB
Каковы основные возможности пакета MATLAB с точки зрения финансовых функций
и прогнозирования? Их знание пригодится при создании торговой системы
В предыдущей статье [1] мы познакомились с основными
инструментами, которые существуют для создания биржевого робота. Теперь хотелось бы остановиться на одном
из них. Но, прежде чем начать, нужно обратить ваше внимание на то, о каких роботах пойдет речь:
> В данном цикле статей речь не идет о роботах рынка
Forex. Для них, конечно, существует бессменный инструмент, встроенный в любимый Metatrader, называемый MQL. Но людям, торгующим на Forex, как правило,
роботы без надобности или служат скорее для упражнений в разработке или математике. В данном случае мы будем говорить о создании торговой системы для российской биржи (РТС/ММВБ) или западных
(NYSE, CME).
> Описываемый подход предполагает наличие у вас
времени, которое будет необходимо потратить на разработку, отладку, совершенствование торгового робота. «Быстрый старт» возможен, но в данной статье
мы о нем говорить не будем, потому как вслед за быстрым стартом возможен столь же быстрый убыток.
> Рассматривать будем роботов, в основе которых существует математическая модель. Для роботов, которые
разработаны и реализуют определенные эмпирические правила, никакой работы с математическими пакетами не нужно.
Таким образом, процесс разработки робота будет включать в себя следующие четыре этапа:
> Формирование стратегии трейдинга, основанной на математических алгоритмах. Конечно, самый сложный
этап. Для каждого должен быть индивидуален. В нем
вы ограничены только вашей фантазией и пониманием
рынка, ну или количеством книжек, которые вы прочитали, или классических стратегий, которые вы изучили.
> Формирование математической модели и/или математического аппарата для создания робота. Данный этап
мы рассмотрим в этой статье.
> Формирование итогового робота в одной из торговых
систем.
54
> Отладка и оптимизация робота на исторических данных.
Итак, приступим. Для описания математических инструментов торгового робота я лично использую пакет MATLAB.
Почему? Наверное, меня привлекает широкий перечень
функциональных возможностей пакета MATLAB.
Подробная информация о данном пакете представлена
на официальном сайте [2].
Для того чтобы судить о возможностях, достаточно только посмотреть на рис 1, на котором представлены основные
«пакеты» внутри MATLAB.
Также «пакеты» называют «toolbox» или «приложения».
Это определенного рода расширения базовой системы.
Но, как и для большинства подобных систем, большая
часть ее возможностей сосредоточена именно в расширениях. На рис. 1 представлен только базовый их набор.
Конечно, огромное количество toolbox продается отдельно
в MathWorks, и существует также определенное количество
расширений от сторонних разработчиков.
Наиболее интересным с точки зрения биржевых задач
может показаться расширение wfatoolbox [3]. Демоверсия
на сайте доступна бесплатно, но лично для меня его полезность ограничилась удобным инструментом загрузки данных биржи напрямую в MATLAB Workspace и удобным построением биржевых графиков.
MATLAB, конечно же, содержит в себе встроенный язык
разработки, на котором, собственно, и написаны в основном различные toolbox для него.
Относительно традиционных языков программирования
язык MATLAB отличается некоторыми своими особенностями:
> Удобство работы с массивами данных.
> Упрощенный синтаксис операций с данными.
> Удобство конструкций преобразования данных.
> Использование штатных возможностей MATLAB:
» Работа с Workscace.
» Удобство графического отображения информации.
» Использование параллельных вычислений.
декабрь 2015 системный администратор
Разработка
инструменты
» Использование возможностей расчетов с помощью
GPU.
Даже если исключить использование toolbox, то данных
возможностей уже достаточно для того, чтобы выбор пал
на MATLAB для решения многих задач.
В нашем случае мы имеем дело с достаточно популярной и часто решаемой математической задачей – с задачей
прогнозирования, или на западный манер forecasting.
Для обеспечения успешной торговли нужно уметь «угадывать», какая будет цена или скорее насколько цена изменится. Конечно, можно «угадывать» не только цену следующего часа/минуты/тика, а, к примеру, локальный максимум
и минимум за день.
При этом для «угадывания» цены нужно построить некоторую функцию вида Y = f (X1… Xn), где X1… Xn – различные
факторы, от которых может зависеть итоговый результат.
Условимся далее X1… Xn называть входами функции, а Y соответственно – выходом.
Итак, методы прогнозирования можно примерно разбить
на две большие категории. В первую входят статистические
методы:
> регрессионные модели (линейная регрессия, нелинейная регрессия);
> авторегрессионные модели (ARIMAX, GARCH, ARDLM);
> модель экспоненциального сглаживания;
> модель по выборке максимального подобия.
Практика
Для работы нам понадобятся первичные данные. Котировки можно взять, к примеру, с сайта finam, через который
они экспортируются в обычный текстовый файл (csv) [4].
Я взял для примера акции Сбербанка с 2010 года по текущий момент.
Далее эти данные загружаются в Excel путем выполнения простейшей операции «Данные → Из текста», разделитель – запятая. Сама процедура, думаю, не нуждается в детальном описании.
Далее из полученного файла удаляем все столбцы, кроме
CLOSE. Его оставляем и копируем шесть раз. Потом из пятой колонки удаляем пять строчек, из четвертой – четыре,
из третьей – три и т.д. В итоге получается, что по диагонали
должно находиться одно число. Так мы имитируем на входе
Рисунок 1. Основные «пакеты», встроенные в MATLAB
Итогом данных моделей будет некоторое уравнение, которое и представляет собой ту самую функцию f. Проблема
данных моделей лишь в том, что чем сложнее зависимость,
тем труднее ее описать этим самым уравнением, и тем хуже
получится в итоге модель.
В другую категорию методов входят:
> нейросетевые модели;
> модели на базе цепей Маркова;
> модели на базе классификационно-регрессионных деревьев.
В данном случае в формальном виде уже не будет функции, а будет некоторая структура, которая определенным
образом описывает зависимость входов от выходов.
Стоит ли говорить, что для построения всех этих моделей необходим достаточный объем исторических данных,
по которым будет производиться «моделирование» итоговой функции, описывающей взаимосвязь между входами
и выходами.
В MATLAB поддерживаются все вышеперечисленные
методы прогнозирования и многие другие. Но для решения
практической задачи мы выберем наиболее «продвинутый»
и «современный» вариант – нейронные сети. В последнее
время нейросетевые технологии активно развиваются, поэтому их качество, структура и алгоритмы обучения беспрерывно совершенствуются. На основе нейронных сетей построено большинство современных систем распознавания
голоса и изображений. В конце концов если Google разбирает всe, что я там ему говорю, то, наверное, уже разобрать
зависимость цены от прочих факторов – это достаточно
простая задача.
Итак, приступим к практической части.
системный администратор декабрь 2015
Рисунок 2. Подготовленные данные для импорта в MATLAB
55
Разработка
четыре предыдущих закрытия, а на выходе – текущее. Нужно еще не забыть сделать все ячейки числовыми, чтобы
MATLAB успешно мог импортировать их значения. В моем
случае для этого понадобилось во всем файле заменить «.»
на «,». Далее переименовываем первые пять колонок в IN,
шестую – в OUT. Должно получиться что-то вроде представленного на рис. 2.
Теперь можно сохранить данный файл и импортировать
его уже в саму среду MATLAB. Для этого нужно нажать
на панели «Import Data», выбрать нужный файл и не забыть указать, что импортировать данные надо в числовую
матрицу (numeric matrix) (как это выглядит визуально,
см. на рис. 3).
Теперь из полученных данных нам нужно получить входы
для нейросети и итоговые значения функции. Для этого выполним в командном окне MATLAB следующие командные
строчки:
инструменты
Income – это в моем случае название переменной, в которую произведен импорт из файла. Сами переменные вы можете видеть и редактировать в разделе Workspace в MATLAB
(см. рис. 4). К примеру, этим можно воспользоваться и удалить последние пять строчек из обеих переменных. Потому
как данные в них будут не полны.
Теперь можно наконец приступить непосредственно к обучению нейросети. Набираем в командном окне:
nnstart
Data = Income(:,1:5)
Targets=Income(:,6)
Этим мы вызовем стандартный мастер для создания нейронных сетей в MATLAB. Конечно, пользоваться мастером
для создания нейронных сетей в промышленных масштабах
не рекомендуется, но для тестового примера нас он вполне
устроит. Выглядит он следующим образом (см. рис. 5).
Выбираем в визарде Fitting App – самый простой и доступный для понимания вариант нейросети, нажимаем Next.
В следующем окне мастера (см. рис. 6) выбираем данные – переменную Data, результат – переменную Targets
Рисунок 3. Импорт данных в среду MATLAB
Рисунок 5. Визард для создания нейронной сети в MATLAB
Рисунок 6. Выбор данных для обучения нейросети
Рисунок 4. Раздел переменных среды MATLAB
56
декабрь 2015 системный администратор
Разработка
инструменты
и не забываем указать, что нас интересуют строчки матрицы, а не ее колонки.
Далее мастер предлагает распределить данные на три
группы: Training, Validation и Test. Соглашаемся с ним –
это необходимо для проверки обучения нейросети и построения функции ошибок.
В следующем окне предлагается выбрать число нейронов.
Стоит отметить, что чем больше их число, тем более сложные зависимости нейросеть может выявить (но есть и обратная сторона медали – может «запомнить» всю функцию),
но тем большее время потребуется на ее обучение. Для тестового примера вполне можно оставить 10 нейронов. В следующем окне жмем на кнопку «Train» и наблюдаем за процессом обучения нейросети (см. рис. 7).
В этом же окне нажимаем на кнопку «Plot Regression»
и получаем графики отклонений фактических данных
от данных прогнозных, полученных с помощью нейросети
(см. рис. 8).
Итак, судя по данной диаграмме, нейросеть предскажет цену закрытия следующего часа, основываясь на ценах закрытия предыдущих пяти часов с точностью 0,998 %
(ориентировочно). Результат впечатляет? Но не забывайте,
что в данном случае речь идет об абсолютных значениях
цены, а их колебания в пределах часа бывают очень незначительными. Поэтому польза от данной модели в реальной
торговле весьма сомнительна.
Возникает логичный вопрос: что же дальше с этим делать? Очень просто – в том же мастере нажимаем «next»
и появляется окно, в котором есть вариант «generate
MATLAB Matrix-only function». Нажав его, получаем функцию
MATLAB, у которой есть строка входов и, соответственно,
выход. В командном окне можно набрать deploytool, выбрать нужный язык программирования (C++, C, C#, Java)
и сгенерировать для него готовую библиотеку с данной
функцией. А дальше уже вас ограничивает только ваша
фантазия.
Рисунок 7. Обучение нейросети
Рисунок 8. Диаграммы регрессии для нейросети
В данной статье мы рассмотрели лишь тестовый пример
нейросети для прогнозирования данных. Тем не менее этого
вполне достаточно для того, чтобы начать самостоятельные
эксперименты с входными и выходными данными, и, кто знает, может, ваша модель окажется куда более успешной, чем
все ныне существующие. В любом случае, с использованием технологий прогнозирования качество биржевых роботов и стабильность их результатов существенно возрастают. EOF
[1] Филиппов О. Разрабатываем биржевого робота. // «Системный администратор», №11, 2015 г. – С. 66-69 (http://samag.ru/
archive/article/3075).
[2] Официальный сайт российского представительства компании
MathWorks, посвященный программному продукту MATLAB –
http://matlab.ru.
[3] Toolbox MATLAB для работы с финансовыми данными – http://
wfatoolbox.com.
[4] Экспорт котировок с сайта finam – http://www.finam.ru/profile/
moex-akcii/sberbank/export.
Ключевые слова: программирование, биржи, робот, TsLab.
системный администратор декабрь 2015
57
Разработка
тестирование
Визитка
АННА СЕРГЕЕВА, старший специалист службы обеспечения качества
Alloy Software Inc., annserge@rambler.ru
Первые шаги в тестировании
Инсталлируем и конфигурируем JMeter
При знакомстве с новыми инструментами у новичков всегда возникают трудности
и вопросы. Небольшое руководство по JMeter поможет быстро приступить к работе
и созданию собственных первых тестов производительности
В большинстве открытых на сегодняшний день вакансий
в сфере тестирования, от начинающих до ведущих специалистов, одним из обязательных требований является наличие опыта в проведении тестов производительности.
С одной стороны, это показывает, что такой вид тестирования имеет достаточно широкое применение среди
разработчиков ПО и уже доказал свою эффективность
в повышении качества готовых программных приложений,
выпускаемых на рынок.
С другой же стороны, такая тенденция означает, что специалист-тестировщик любого уровня, который заботится
о своей конкурентоспособности, должен уверенно владеть
навыками работы с какими-либо средствами тестирования
производительности ПО.
Сегодня автор предлагает уделить внимание одному
из таких инструментов – Apache JMeter, который может
применяться в целях симуляции нагрузки на сеть, сервер
или какой-либо другой объект. С его помощью могут выполняться проверки устойчивости стабильности системы,
а также анализ общей производительности с учетом разных
видов нагрузки [1].
За все время своего существования и развития Apache
JMeter завоевал достаточно широкую популярность, поскольку обладает открытым исходным кодом и часто является отправной точкой для новичков в тестировании производительности. Соответственно, умение работать с ним всегда
будет весомым плюсом в резюме соискателя на должность
тестера или специалиста по обеспечению качества ПО.
В помощь начинающим при знакомстве с JMeter в данной
статье приводится небольшое, но вместе с тем понятное
Термины
Слушатели (Listeners) реализованы в JMeter для визуализации и логирования результатов тестирования. Слушатели бывают различных типов: гра-
и удобное руководство, которое поможет в установке и первой настройке JMeter, чтобы можно было, не теряя сил
и времени, достаточно быстро перейти к созданию собственных первых тестов производительности. Итак, начнем.
Шаг 1. Инсталляция и проверка Java
Apache JMeter представляет собой программное приложение, код которого полностью написан на Java. Поэтому
для его корректной работы прежде всего нужно убедиться,
что на рабочей машине тестировщика правильно установлена и настроена Java.
Здесь нужно учитывать, что если на данной машине ранее уже использовались какие-либо java-приложения, то,
возможно, программное обеспечение Java уже установлено. Для того чтобы это проверить, нужно запустить в командной строке команду:
java –version
Если Java успешно установлена и сконфигурирована,
то команда вернет номер поддерживаемой версии языка
(java version “x.x.x.x”), как показано на рис. 1.
В противном случае выдается сообщение с указанием,
что Java не распознана (см. рис. 2). Для устранения этой
проблемы нужно загрузить инсталляционный пакет Java
с официального сайта Oracle разработчиков языка Java [2].
В зависимости от целей использования доступны разные
редакции:
> JRE (Java Runtime Environment) – поддерживает все необходимые возможности для запуска десктопных Javaприложений конечными пользователями.
> JDK (Java SE Development Kit) – кроме возможностей
JRE, поддерживает инструменты для разработки, отладки
и мониторинга Java-приложений для специалистов-разработчиков ПО.
фики, деревья, таблицы и могут содержать полные или частичные результаты измерений, отклонения, точные и средние величины и т.д.
JTL (Java Tools Language) – формат текстовых XML-файлов с результатами тестов, генерируемых инструментом JMeter.
58
Разработчики Oracle предлагают широкий выбор доступных версий и конфигураций, и для верного выбора стоит
внимательно изучить данный список.
декабрь 2015 системный администратор
тестирование
Разработка
Apache JMeter завоевал
широкую популярность
и является отправной точкой
для новичков в тестировании
Стоит сказать, что иметь корректную версию Java
для полноценной работы JMeter крайне важно. Так, например, использование 32-битной Java на 64-битной ОС может
привести к недостаточному использованию доступных ресурсов, не позволит добиться максимального быстродействия и может привести к системным сбоям. Итак, после
выбора, загрузки и установки пакета JRE/JDK для проверки
успеха выполнения нужно повторно запустить из командной строки команду java-version. Ожидается возврат только
что установленной версии Java.
Если же и после всех этих действий успеха достигнуть
не удалось, стоит проверить системные переменные среды
окружения и сконфигурировать их вручную.
Шаг 2. Загрузка и установка JMeter
Теперь можно перейти непосредственно к установке JMeter.
Для этого достаточно загрузить подходящий файл zip или tgz
с официального сайта разработчиков Apache JMeter [3]. После распаковки архива на жесткий диск JMeter готов к работе.
выделяемой памяти. Этим настройкам соответствуют значения параметров Xms и Xmx, задаваемые в файле Jmeter.bat.
Грамотная настройка этих величин позволяет гарантировать, что JMeter всегда будет правильно использовать имеющиеся ресурсы памяти. Также это снижает риски возникновения ошибок переполнения памяти.
Изначально файл jmeter.bat содержит следующие дефолтные настройки этих параметров:
set HEAP=-Xms512m -Xmx512m
set NEW=-XX:NewSize=128m -XX:MaxNewSize=128m
В зависимости от аппаратных и программных системных
характеристик конкретной рабочей машины нужно заменить эти строки на следующие или аналогичные:
set HEAP=-Xms512m -Xmx2048m
set NEW=-XX:NewSize=128m -XX:MaxNewSize=1024m
Для повышения производительности работы JMeter существует целый ряд способов, и их перечислению и изучению
можно посвятить отдельную статью.
Тем не менее на начальном этапе стоит по крайней мере
сконфигурировать изначальный и максимальный размер
Здесь нужно учитывать, что максимальное значение heap
не должно превышать 80% от общего объема системной
памяти.
Кроме этого, важно грамотно использовать слушателей
(listeners) при составлении плана тестирования. Дело в том,
что при запуске в GUI-режиме и активном использовании графических слушателей (таких, как таблицы, деревья, графики)
JMeter использует достаточно много системныхм ресурсов.
Рисунок 1. Java успешно установлена и сконфигурирована
Рисунок 2. Java не установлена или не сконфигурирована
Шаг 3. Настройка и оптимизация JMeter
системный администратор декабрь 2015
59
Разработка
Поэтому для получения действительных результатов измерений в ходе нагрузочного и стрессового тестирования
следует избегать таких слушателей, а лучше всего вообще
работать в режиме командной строки, генерируя наборы
JTL-файлов с результатами тестов, и уже позже на основании содержимого этих JTL-файлов составлять все необходимые отчеты о проделанной работе.
Шаг 4. Запуск JMeter и выполнение скриптов
Работа с JMeter возможна как через графический интерфейс, так и из командной строки.
Для начала работы JMeter в GUI-режиме необходимо запустить файлы ApacheJMeter.jar или jmeter.bat. После распаковки они размещены в директории apache-jmeter-2.13 →
bin.
Внешний вид графической оболочки JMeter показан
на рис. 3.
Как упоминалось ранее, при работе в таком режиме
JMeter потребляет большое количество системных ресурсов. Поэтому им рекомендуется пользоваться на этапе ознакомления и настройки.
На более продвинутом уровне для получения достоверных результатов проведения тестирования производительности рекомендуется работа с JMeter в режиме командной
строки, запуская из нее на исполнение требуемые тестовые
скрипты. Формат команды следующий:
jmeter -n -t myScript.jmx
Рисунок 3. Графический интерфейс инструмента JMeter
тестирование
Здесь применяются параметры:
> -n – для указания запуска JMeter из командной строки;
> -t myScript.jmx – для указания пути и имени файла исполняемого скрипта.
Разумеется, существует множество других полезных параметров командной строки, таких как путь к создаваемым
JTL-файлам с результатами тестов, IP-адрес и номер порта
исследуемого сервера и т.д. Полный перечень параметров
с кратким описанием доступен при запуске из командной
строки со стандартным ключом jmeter -?.
Для получения
достоверных результатов
проведения тестирования
производительности
рекомендуется работа с JMeter
в режиме командной строки
В ходе выполнения тестовых скриптов командная строка
отображает сообщения о прогрессе, а затем после успешного выполнения выдает итоговую информацию о полученных результатах.
В пакет поставки JMeter уже входит небольшой набор
шаблонов и примеров, которые можно сразу опробовать
на ознакомительном этапе. После распаковки они размещены в директории apache-jmeter-2.13 → bin → templates
и apache-jmeter-2.13 → bin → examples соответственно.
Пример запуска одного из таких скриптов в режиме командной строки показан на рис. 4.
Итак, один из наиболее популярных на сегодняшний день
инструментов нагрузочного тестирования JMeter установлен и сконфигурирован на рабочей машине. Запущены первые примеры, опробована работа в графическом режиме
и из командной строки.
Теперь время перейти к созданию собственных скриптов и проведению первых тестов производительности.
Много полезной информации по работе с JMeter можно
найти в различных профессиональных блогах и сообществах тестировщиков [4] и на официальной вики-странице
JMeter [5]. Удачи. EOF
Рисунок 4. Обработка тестовых скриптов в JMeter в режиме командной строки
[1] Сергеева А. Инструменты тестировщика, или С чего начать
новичку. // «Системный администратор», №7-8, 2014 г. –
С. 70-74 (http://samag.ru/archive/article/2743).
[2] Официальный сайт разработчиков Java – http://www.oracle.com/
technetwork/java/javase/downloads/index.html.
[3] Официальный сайт разработчиков Apache JMeter – jmeter.
apache.org/download_jmeter.cgi.
[4] Сообщество тестировщиков – testerlogic.com.
[5] Вики-страница по Apache JMeter – http://wiki.apache.org/jmeter.
Ключевые слова: Apache JMeter, Java, JTL, нагрузочное тестирование, тестирование производительности, стрессовое тестирование.
60
декабрь 2015 системный администратор
Разработка
событие
Визитка
ИГОРЬ ЧУФАРОВ, начальник отдела интегрированных
автоматизированных систем, ОАО «Радиозавод», igorchufarov@mail.ru
Конференция Infostart Event 2015
Отныне Инфостарт – это информационно-аналитический центр
по автоматизации учета и управления
С 15 по 17 октября 2015 года прошла очередная конференция
сообщества Инфостарт под названием «Infostart 2015 Event
Connection». Для тех, кто не в теме, infostart.ru – один
из крупнейших русскоязычных ресурсов, посвященных автоматизации учетных задач на базе программной платформы «1С:Предприятие».
Если вы не видели ресурс собственными глазами, стоит на него посмотреть. Как сказал в своем вступительном
слове сам основатель Инфостарта Доржи Цыденов, подчас объяснить, что такое Инфостарт, весьма сложно. В частности, он упомянул, что достаточно долго объяснял своей
маме, чем же именно он занимается и где работает. Ну, вот
есть сайт какой-то…
На самом деле, конечно, ценен не столько сам сайт,
сколько сформировавшееся вокруг него сообщество (разумеется, в этом заслуга ресурса).
По своему опыту скажу, что от приобретенных на Инфостарте решений у меня сложилось сугубо положительное
впечатление. Авторы охотно откликаются на просьбу о консультации, доработки делают либо бесплатно (если потенциально она может быть интересна не только нам, а значит,
выходит в тираж в следующих версиях), либо за разумную
с точки зрения человеко-часов плату.
И, на мой взгляд, в этом весьма значительная заслуга Инфостарта. Ключевой вопрос для посредника между
продавцом и покупателем – ответственность. И ресурс берет на себя ответственность, обещая урегулировать спор
или вернуть деньги.
Важной составляющей сообщества Инфостарт являются на постоянной основе проводимые конференции
INFOSTART EVENT, на которые приезжают участники сообщества со всей России и стран СНГ.
На конференции Infostart 2015 Event Connection был обозначен новый путь развития ресурса. Отныне Инфостарт –
это информационно-аналитический центр по автоматизации
учета и управления. Основное направление – привлечение
на ресурс топ-менеджмента среднего и крупного бизнеса: ИТ-директоров, сотрудников бухгалтерских служб,
HR-специалистов, маркетологов, различных уровней
системный администратор декабрь 2015
руководителей. Надо сказать, что это весьма существенное
изменение политики сообщества. Дело в том, что до настоящего времени ресурс был ориентирован в первую очередь
на технических специалистов. Основные потребители – программисты, как на стороне клиента, так и на стороне фирм
франчайзи «1С».
Очевидно, что движение в сторону информационно-аналитического направления, в том понимании, которое вкладывает в это понятие основатель сообщества, – это весьма
серьезная заявка на качественно новый уровень информационного ресурса.
События конференции
На конференцию Infostart 2015 Event Connection я ехал
без каких-то четко сформулированных конкретных проблем. Было интересно услышать, как на практике решают
на различных предприятиях проблемы, связанные с автоматизацией. Понять, насколько эти проблемы близки с теми,
с которыми сталкиваюсь я.
Это все, безусловно, от конференции получить удалось,
но и не только это, потому что жизнь вносит свои коррективы и как обычно оказывается гораздо интереснее, чем наши
первоначальные представления о ней.
Одним из самых интересных событий, преподнесших необычную пищу для ума, стал круглый стол «Импортозамещение на 1С и стандарты разработки на 1С для небольших
команд» с ведущим Алексеем Лустиным и докладчиками
Евгением Сосной, Леонидов Паутовым и Дмитрием Наумовым.
Самое забавное, что сфера деятельности, которая там
обсуждалась, не настолько близка к области моих интересов, чтобы до начала конференции, глядя в список докладов, я бы стал ее выделять как приоритетную для себя.
Вкратце, если я правильно понял (пусть специалисты в этой
области меня поправят), основным ноу-хау докладчиков является идея записывать техническое задание на разработку
в среде 1С посредством формализованного языка. Методика называется BDD. Еще раз, повторюсь, я могу быть неточен в терминах, но смысл примерно такой.
61
Разработка
событие
Что это нам дает?
> В первую очередь потенциальное отсутствие претензий
и споров по факту выполнения технического задания.
Очевидно, что часто камнем преткновения становятся
именно расплывчатые формулировки в техническом
задании, которые по-разному трактуются исполнителем и заказчиком. В случае строго формализованного
языка написания техзадания проблема «не так понял»
нивелируется (во всяком случае, в теории), и появляется объективный критерий выполнения поставленных
задач.
> Во-вторых, сформулированные посредством формализованного языка требования позволяют автоматизировать процесс преобразования этих самых требований
в программный код 1С. Это позволяет, поменяв формулировку требований, опробовать и протестировать
означенные соображения непосредственно в базе 1С.
В общем и целом идеи понятные, не сказать, что это нечто принципиально инновационное и доселе невиданное.
Ничего не напоминает? Мне показалось, что подобный ход общения типичен для обсуждения автоматизации
между теми, кому предстоит работать в программе, и автоматизаторами. То есть сами автоматизаторы (слушатели
конференции) встали на место тех, с кем они обычно работают (потребители). И, надо сказать, что поведение это,
с одной стороны, удивительно: казалось бы, такие продвинутые люди должны с открытым забралом встречать
все возможные новинки, а этого не происходит. С другой
стороны, если задуматься, ничего удивительного в этом
нет, ведь автоматизаторы – тоже люди, и ничто человеческое им не чуждо.
Не эта ли модель общения лежит в основе взаимодействия автоматизаторов и тех, кто будет работать в автоматизированном программном обеспечении? Ведь это самая типичная работа с конечными пользователями, под которыми
я понимаю не только конкретных людей, которые на местах
вносят документы и работают с системой, но и руководителей, принимающих решения о необходимости внедрения
того или иного программного продукта.
Автоматизация автоматизаторов
Знакомые штыки
Больше интересна реакция публики на данные идеи. Дело
в том, что Алексей Лустин был с ноутбуком и горел желанием продемонстрировать возможности непосредственно
на месте. Любые запинки, возникавшие при этом, вызывали
дружное «ага, не работает!», по аналогии с теми суровыми
мужиками из анекдота про лесопилку, когда станок сломали, попытавшись распилить металлический лом, и злорадствовали.
Были вопросы из серии: «Вот есть формализованное
техническое задание. Потом что-то в коде нужно поменять –
это значит, что надо менять и техзадание?» На что спикеры
отвечали: «А как же иначе? Конечно, так нужно делать, причем независимо от степени формализованности технического задания».
Это просто удивительно, насколько люди в определенном
смысле одинаковы и в штыки воспринимают попытки алгоритмизировать их деятельность и загнать в некоторые роботизированные рамки. Уж, казалось бы, такие прогрессивные люди, как автоматизаторы, которые пропитаны духом
движения вперед, алгоритмизации и автоматизации всего
и вся.
Но, когда дело доходит до автоматизации ИХ деятельности, вступают в игру те же аргументы, что и у обычных
пользователей, не желающих автоматизироваться и вносить данные в какую-то неведомую программу, обтачивая
для этого алгоритм собственных действий.
«Да нет, мы и так прекрасно справляемся, это только усложнит работу».
Об Инфостарте
решения для бизнеса, работы с сайтами и мно-
программистов 1С, которые имеют собствен-
ООО «Инфостарт» – стратегический партнер фир-
гое другое.
ные портфолио работ и социальный рейтинг
мы «1С», основным богатством его ресурса явля-
> Крупнейшее
ется огромный каталог разработок, размещенных
общество
учета
> Каталог компаний. В каталоге сайта собраны
с соблюдением всех авторских прав. На котором
и управления (на момент публикации ста-
компании, которые используют в своей работе
присутствуют как бесплатные, так и коммерческие
тьи 509 538 участников). Проект призван объ-
«1С:Предприятие». Каталог призван помочь
конфигурации программы, обработки и отчеты. Су-
единять всех, кто принимает непосредствен-
посетителю найти и выбрать себе партнера
ществует механизм публикации своих разработок
ное участие в проектах автоматизации учетных
или подрядчика, заказчика или работодателя.
самими авторами.
задач на базе платформы «1С:Предприятие».
Присутствует фильтрация по городам и отрас-
Принцип подобен социальной сети, но с воз-
лям. Добавление страницы компании на данный
Инфостарт это:
> Каталог
№1
отчетов
и
обработок
для «1С:Предприятия». Более 30 000 отчетов,
62
профессиональное
по
автоматизации
со-
можностью живого общения.
сообщества Инфостарта.
момент бесплатное.
> Первый AppStore авторских программ на 1С
> Тендеры проектов автоматизации учета.
обработок и компонент на одном сайте. Как го-
с техподдержкой. Техническая поддержка
Актуально в случае, если нужна какая-либо
ворится на самом Инфостарте, «на нашем сай-
(по телефону, e-mail, Skype и т.д.) помогает за-
помощь по 1С. Например, консультации, дора-
те лучшие программисты 1С делятся своим
пустить купленную программу или Инфостарт
ботка или внедрение конфигурации. Если не-
опытом
возвращает деньги.
обходимо найти исполнителя для реализации
и
разработками».
Действительно,
на сайте находятся обработки как для самых со-
> Бесплатный сервис поиска работы и спе-
конкретного проекта или отдать часть работ
временных версий платформы, использующие
циалистов в области автоматизации учета.
на аутсорсинг. Размещенный на тендер про-
все преимущества версии 8.3, так и всех пре-
На сайте есть специализированный сервис
ект, как говорят на сайте, «увидят тысячи про-
дыдущих редакций, вплоть до 1С 7.1 или 1С 7.7.
размещения вакансий, который учитывает,
фессионалов». Можно сказать: «Сообщество
Это, пожалуй, самое исчерпывающее храни-
для какой конфигурации и платформы 1С не-
в помощь». Учитывая его масштаб, очевидно,
лище разработок для 1С: обработки, отчеты,
обходимо найти сотрудников. Актуальная база
что выбрать будет из кого.
декабрь 2015 системный администратор
событие
Разработка
Вечерние прогулки по Питеру
после насыщенной программы
конференции настраивали
на философский лад
Фото: Игорь Чуфаров
«Упрощения не будет, так как в формализованную форму
будет техническое задание переводить аналитик, а он может ошибиться».
«Ну, это же творческий процесс, как его можно загнать
в рамки какой-то там формализации».
Вспомните об этом, когда будете свысока смотреть
на заказчиков (не важно, внутренних в компании, в которой вы работаете, или внешних в фирме клиента), которые
не понимают всей гениальности программного обеспечения, предлагаемого вами. Какие у них основания верить
в то, что будет лучше с этой программой, чем без нее?
Вера в лучшее
Поверить в перемены к лучшему сложно. Сомнений у потенциальных пользователей бывает очень много. Действующие
принципы могут быть неоптимальны, но они понятны, приняты людьми и исполняются.
Это еще раз демонстрирует тот же пример с автоматизацией автоматизаторов. Никто не хочет перемен. Мало
кто соглашается алгоритмизировать свои действия. Какова
коренная причина подобной сложившейся ситуации? Очевидно, она в том, что человек не есть робот.
Есть интересная статья об особенностях работы человеческого головного мозга [1]. В частности, в ней говорится
следующее:
«У нашего мозга иначе организована память, нежели
у компьютера, – она организована семантически. То есть,
скажем, информация о собаке вовсе не лежит в том месте, где собрана наша память о животных. Например,
вчера пес опрокинул чашку кофе на мою желтую юбку,
и навсегда у меня собака этой породы будет ассоциироваться с желтой юбкой. Если я в каком-нибудь простом тексте напишу, что такая собака у меня ассоциируется с желтой юбкой, мне поставят диагноз слабоумие.
Потому что по земным правилам собака должна находиться
среди других собак, а юбка – рядом с кофточкой. А по правилам божественным, то есть мозговым, воспоминания в мозгу
лежат, где хотят. Для того чтобы вы в компьютере что-нибудь
системный администратор декабрь 2015
нашли, вы должны указать адрес: папка такая-то, файл
такой-то, а в файле набрать ключевые слова. Мозгу тоже
нужен адрес, но он указывается совсем другим способом».
Статья достаточно подробная, очень рекомендую ее прочитать как внедренцам программного обеспечения для того,
чтобы посмотреть на проблемы своих проектов под другим
углом, так и всем остальным для общего развития.
Во многом, думаю, именно особенностями, описанными
в статье, объясняются сложности, возникающие при внедрении программных продуктов. Человек думает так, а машина иначе. Начинаешь разбирать ситуацию, задаешь вопросы: почему вы объединяете одно с другим, ведь логичнее
(с точки зрения компьютерной логики) другая группировка
сущностей? А потому что логика у людей отличная от логики
роботов.
Вот и получается, что внедрение – как спрямление круга
в математической задаче. Отрезками, количество которых
стремится к бесконечности, приближаем либо программную логику к тому, что хотят люди, либо «обтачиваем»
логику работы людей, отсекая лишние с точки зрения
программы «хотелки», спрямляя (в терминах внедрения
производя реинжиниринг) выстроенные когда-то бизнеспроцессы.
В заключение хочу сказать: любите пользователей, почаще представляйте себя на их месте. Объясняйте беспочвенность страхов, ведите просветительскую деятельность,
агитируйте за свой продукт. Но не смотрите свысока, не забывайте, что в своей области вы такие же люди и также
в штыки воспринимаете многие вещи, которые вам предлагают. Ведь в конечном счете мы люди, а не роботы.
И это не недостаток, а особенность, преимущество, которое
во взаимодействии с компьютерными технологиями способно свернуть горы. Главное, это взаимодействие точно отъюстировать. EOF
[1] Гусарова Ю. «Татьяна Черниговская: За существование гениев
человечество платит огромную цену» – http://snob.ru/selected/
entry/99460. – М., 14.10.15.
63
Карьера/Образование
alma mater российских ИТ
Наталья Алтухова:
«Я верю в своих студентов, и, судя по результатам
их обучения и последующего трудоустройства,
они не обманывают моих надежд!»
В гостях у «Системного администратора» – Наталья Алтухова, заведующая кафедрой
«Бизнес-информатика» Финансового университета при Правительстве Российской
Федерации
– Вчерашний школьник решил пойти учиться на айтишника. Чем отличается преподавание ИТ в Финансовом
университете? Его плюсы? Особенности? Насколько
тяжело учиться?
– Образовательные программы высшего образования, ориентированные на подготовку специалистов, работающих
в сфере ИТ, весьма разнообразны и формируются в рамках таких направлений подготовки, как «Информационные
системы и технологии», «Прикладная информатика», «Информационная безопасность», «Программная инженерия»,
«Бизнес-информатика» и другие. Такой широкий спектр
направлений подготовки не случаен. Посмотрите, как зависимы сегодня стали компании от информационных технологий! На недавней конференции, посвященной вопросам
управления информацией, прозвучала интересная фраза:
«Банк – это ИТ-компания с банковской лицензией». Понимание бизнесом роли и места информационных технологий
в достижении бизнес-целей требует соответствующей инфраструктуры и ее сопровождения и развития, реализации
проектов по внедрению ИТ-решений для поддержки бизнеспроцессов, управления всеми ИТ-активами, развитие ИТ
в рамках стратегии компании. Это объясняет и целый набор
профессий в нашей области, и их очевидную востребованность рынком труда.
Если говорить о подготовке ИТ-специалистов в Финуниверситете, то здесь мы обучаем ребят по трем направлениям: «Прикладная математика и информатика», «Прикладная
информатика» и «Бизнес-информатика», области которых
четко определены образовательными стандартами.
Поскольку я являюсь заведующей кафедрой «Бизнесинформатика» (http://fa.ru/chair/bi/Pages/default.aspx), то,
конечно, хочу более подробно рассказать об образовательных программах именно этого направления. Информационные системы и технологии являются высокотехнологичными и сложными информационными продуктами,
значит, осуществление задачи их интеграции в современный бизнес-контур организации должен взять на себя специалист, имеющий соответствующий набор профессиональных знаний. Сегодня необходимым условием
64
Наталья Фаридовна Алтухова – кандидат экономических наук, доцент, заведующая кафедрой «Бизнес-информатика» Финансового университета
при Правительстве Российской Федерации. Закончила Государственную
академию управления имени Серго Орджоникидзе по специальности экономическая кибернетика. Имеет более 85 научных и учебных публикаций. Сферой
научных интересов являются вопросы управления корпоративными знаниями
и управление ИТ.
применения информационных систем и технологий являются знания разработки архитектуры компании, управления
ИТ-проектом, оценки стоимости ИТ-решений и их эффективности, бизнес-аналитики, выбора адекватной потребностям организации информационной технологии, интеграции
декабрь 2015 системный администратор
alma mater российских ИТ
ИТ в бизнес-стратегию компании, управления ИТ-сервисами
и корпоративным контентом, анализа и управления бизнес-процессами. (Вот примерный перечень того, что знают
и умеют наши выпускники!) Такая задача находится на стыке информатики, экономики и управления, что и определяет
специфику направления «Бизнес-информатика». Вечный
вопрос о взаимодействии ИТ и бизнеса находится в сфере
компетенций выпускника этого направления.
Багаж знаний выпускника определяет и особенность образовательной программы: мы попытались акцентировать
наше внимание в учебных дисциплинах на формирование
классических ИТ-компетенций (программирование, проектирование ИС), экономических и управленческих (менеджмент, экономика фирмы, финансы организации), а также
интеграционных (управление ИТ-проектом, управление ИТ,
инжиниринг бизнеса, архитектура предприятия, модели бизнеса на цифровых рынках и др.). Конечно, огромный опыт
Финуниверситета в преподавании специализированных
дисциплин финансового блока – составная часть нашего
конкурентного преимущества!
Формируя образовательные программы, мы основывались прежде всего на содержании стандартов, определяющих требования к профессиям в нашей области: «Менеджер
по информационным технологиям», «Специалист по информационным ресурсами», «Менеджер продуктов в области
информационных технологий», «Руководитель проектов
в сфере информационных технологий». Именно требования
работодателей положены в основу образовательных программ подготовки бакалавров и магистров, а это залог востребованности их выпускников!
Образовательные программы по направлению «Бизнесинформатика» делают известными и востребованными
не только удачный набор дисциплин, формирующих требуемые рынком труда профессиональные знания, но прежде
всего наши преподаватели, пришедшие к нам из вузов, ИТкомпаний – ее главная ценность! Благодаря этим людям нам
удается сочетать фундаментальность образования и новые
практики и технологии, используемые в реальных компаниях, науку, практику и стремление к познанию новых методологий и ИТ-решений.
Конечно, наши программы очень насыщены: аудиторные
занятия, мастер-классы, проектный практикум, практики,
обучение у вендоров – все это требует сил, но в первую очередь желания учиться, выстраивания коммуникаций с коллегами и преподавателями и все время повышения личной
планки! Не зря говорят, что «дорогу осилит идущий», я верю
в своих студентов, и, судя по результатам их обучения
и последующего трудоустройства, они пока не обманывают
моих надежд!
Карьера/Образование
Финансовый университет
Федеральное государственное образовательное бюджетное учреждение высшего образования «Финансовый университет при Правительстве Российской Федерации» – один из старейших российских вузов,
готовящих экономистов, финансистов, юристов по финансовому праву,
математиков, ИТ-специалистов, социологов и политологов. Сайт университета: http://www.fa.ru.
«ИТ-менеджмент в бизнесе») и подготовки магистров (магистерская программа «Стратегическое управление информационными технологиями в бизнесе»). Очная и заочная
формы обучения (в том числе предусмотрена программа
дистанционного обучения студентов) реализуются по программе подготовки бакалавров, программа подготовки магистров представлена очной формой обучения.
В 2016 году утверждены следующие контрольные цифры
приема: программа подготовки бакалавров – 50 бюджетных
мест по очной и 25 бюджетных мест по заочной формам обучения; 13 бюджетных мест на программу подготовки магистров (www.fa.ru/priemka).
– Насколько реально поступить на бюджетные места?
Каков конкурс?
– В престижный вуз всегда поступить непросто: амбициозные, талантливые выпускники устремляются в приемные комиссии именно таких университетов. Финуниверситет в данном случае не является исключением: по всем направлениям
– Сколько студентов вы готовите по ИТ-специальностям?
Какие это специальности?
– Сегодня по направлению подготовки «Бизнес-информатика» обучаются более 400 студентов, в том числе на первом курсе программы подготовки бакалавров – 121 человек, 17 человек учатся на первом курсе нашей магистерской
программы.
В 2016 году Финуниверситет планирует прием абитуриентов по направлению «Бизнес-информатика» по образовательным программам подготовки бакалавров (профиль
системный администратор декабрь 2015
65
Карьера/Образование
подготовки летом 2015 года, в период приемной кампании,
мы видели высокие показатели конкурса (по программе
подготовки бакалавров направления «Бизнес-информатика» конкурс был более семи человек на место). «Бизнесинформатика» как образовательное направление входит
в укрупненную группу «Экономика и управление», поэтому
к обязательным образовательным предметам, ЕГЭ по которым принимаются, относятся математика, русский язык,
обществознание.
Если речь идет о поступлении на магистерские программы, то к вступительным испытаниям в письменной форме относятся экономическая теория и иностранный язык
или/и портфолио. Вся подробная информация размещена
также на сайте (www.fa.ru/priemka).
– Сейчас многие ИТ-вузы приглашают преподавать специалистов из крупных ИТ-компаний, есть у вас такая
практика?
– Действительно, Федеральный государственный образовательный стандарт по направлению «Бизнес-информатика» включает такую составляющую как обязательную
в программах подготовки магистров и бакалавров. Это объясняется прежде всего тем, что, во-первых, отрасль ИТ
динамична: появляются не просто обновленные ИТ-решения, на рынок выводятся принципиально новые технологии! Во-вторых, существующие методологии, «лучшие
практики», библиотеки знаний по ИТ – это, конечно, накопленный опыт всей отрасли. Однако на практике нашим
alma mater российских ИТ
знаниям и навыкам требуются трансформация, адаптация
под реального клиента, его проекты. И мы хотим, чтобы
студенты из первых рук, от практиков, узнали, где возникают эти изменения, что критично при изучении дисциплин
учебного плана, что нужно знать, выходя на рынок труда.
Практика привлечения ИТ-специалистов распространяется как на преподавание отдельных учебных дисциплин,
так и на участие в научно-исследовательских семинарах
магистерской программы, руководство выпускными квалификационными работами.
16% выпускников
2015 года работают
в финансовом секторе,
26% – в ИТ-компаниях,
37% – в консалтинге
и 21% – в организациях
госсектора
Более того, мы привлекаем ведущие ИТ-компании, ассоциации ИТ-рынка для оценки качества наших образовательных программ: сегодня положительную оценку нам дали
Союз директоров ИТ России (СоДИТ), Ассоциация предприятий компьютерных и информационных технологий (АПКИТ).
– Как трудоустраиваются ваши выпускники?
– Очень важный и обоснованный, особенно в кризисный период, вопрос: насколько востребованы наши выпускники?
Так вот: наши ребята получают профессию не только интересную, но и востребованную и достойно оплачиваемую.
Статистика показывает, что 16% выпускников, закончивших
университет в 2015 году по направлению «Бизнес-информатика», работают в финансовом секторе (как правило, в ИТдепартаментах банков), 26% – в ИТ-компаниях, 37% – в консалтинге и 21% – в организациях госсектора. Это говорит
о многополярности профессиональных приложений наших
студентов и, надеюсь, хорошем качестве наших выпускников как специалистов. Не говоря уже о том, что они имеют
в качестве одного из очевидных конкурентных преимуществ
бренд Финуниверситета.
– Расскажите о самых знаковых проектах, мероприятиях, в которых принимают участие ваши студенты.
– Направление «Бизнес-информатика» в Финансовом университете является достаточно юным. Но, несмотря на это,
мы уже немалого добились, мы активно развиваемся и вовлекаем студентов и преподавателей в мероприятия, которые проводятся как в Университете, так и вне его. Студенты
участвуют (и получают призы!) в олимпиадах, проводимых
сообществом практиков по ИТ сервис-менеджменту, наши
партнеры из компании SAP проводят для студентов обучение ИТ-решениям компании, мастер-классы и участвуют
в наших конференциях; такие ведущие вендоры, как IBM,
SAP, SAS, 1C, Директум, ЭОС, обеспечили учебный процесс
лицензионным ПО. EOF
66
декабрь 2015 системный администратор
alma mater российских ИТ
Карьера/Образование
«Наши студенты разрабатывают
научно-практические модели
ИТ для наступающей эпохи управления знаниями»
Борис Славин, научный руководитель факультета
прикладной математики и информационных технологий
и профессор кафедры бизнес-информатики Финансового
университета при Правительстве РФ:
«Наш университет всегда славился
прочными дружескими контактами
с крупнейшими финансовыми учреждениями. И большинство научных исследований, которые ведутся
по направлениям обучения на нашем
факультете, имеют прикладной характер и в основном направлены на развитие ИТ-технологий в корпоративном
финансовом секторе, в экономике
в целом.
На нашем факультете, к примеру, создан центр компетенций, занимающийся системами управления
знаниями, это то, что будет очень
востребовано в недалеком будущем.
Создается лаборатория, специализирующаяся га технологиях Больших
Данных, одной из задач которой будет
являться анализ данных информационного агентства Bloomberg— одного
из ведущих поставщиков финансовой
информации для профессиональных участников мировых финансовых
рынков. Масштаб и значимость проектов, в которых мы принимаем участие – грандиозен. Мы проводим исследования для Пенсионного Фонда
России, разработали экономико-математическую модель централизации
его ИТ-инфраструктуры.. Для крупных компаний мы осуществляем анализ совокупной стоимости владения
ИТ-активами предприятий, даем рекомендации по снижению этой стоимости. Проводим финансово-экономический аудит ИКТ инфраструктуры.
То есть наши научные исследования
имеют самую что ни на есть прикладную практическую пользу, и, кстати
сказать, многие ребята потом плавно
оказываются в числе сотрудников тех
корпораций, с которыми имели дело.
Студенты, которые выбирают для себя
научную карьеру, имеют все возможности пройти ступень бакалавриата,
далее магистратуру, по окончании
которой пишут магистерскую диссертацию, поступить в аспирантуру.
И, при желании, пополнить ряды наших преподавателей – только у нас
на факультете более 300 кандидатов
и докторов наук!» EOF
«Я выбрала направление «Бизнес-информатика»
осознанно»
Гогева Анна, студентка первого курса магистерской
программы «Стратегическое управление информационными
технологиями в бизнесе»:
«Я выбрала направление «Бизнесинформатика» осознанно, поскольку
меня всегда привлекали информационные технологии. Бизнес-информатика – это одно из перспективных
направлений на стыке двух профессиональных областей: экономики и информационных технологий. Это означает, что, помимо знаний в области
ИТ, навыков программирования и проектирования информационных систем, бизнес-информатика дает знания
в области экономики, менеджмента
и маркетинга.
системный администратор декабрь 2015
Знания и навыки, полученные в бакалавриате, позволяют мне ориентироваться среди многообразия информационных технологий (ERP, CRM, BI,
Big Data и т.д.), свободно говорить
на одном языке как с представителями бизнеса, так и с ИТ-специалистами
в области программирования или архитектуры информационных систем,
а также позволяют внедрять ИТ-решения и адаптировать их под конкретные
нужды бизнеса.
Бизнес-информатика в Финуниверситете – это не только качественное
образование и высококвалифицированные преподаватели, но еще и дружный коллектив студентов, увлекательные лекции и семинары, огромное
число мастер-классов и выступлений
профессионалов в области ИТ и, конечно же, незабываемая студенческая
жизнь!» EOF
67
Карьера/Образование
alma mater российских ИТ
«Моя специальность – это сочетание сразу трех брендов:
бизнес, информатика и Финуниверситет»
Гурин Арсений, студент второго курса программы подготовки
бакалавров направления «Бизнес-информатика»:
«Во-первых, мы живем в информационном обществе, умение работать
с информацией, достигать с ее помощью преимущества, извлекать из нее
пользу – важнейший навык. Во-вторых,
в направлении «Бизнес-информатика»
меня привлекла сбалансированность
программы: здесь нет крена в сторону программирования или, с экономическими дисциплинами. В-третьих,
«Бизнес-информатика» в Финуниверситете – это сочетание сразу трех
брендов: бизнес, информатика и Финуниверситет. И при моем трудоустройстве у работодателя будут возникать
четкие ассоциации, что я предприимчив (бизнес), современен (информатика) и мои знания глубоки, актуальны
и основательны (авторитет Финансового университета)!» EOF
«Я ни разу не усомнилась в правильности своего выбора»
Михайлова Полина, студентка третьего курса программы
подготовки бакалавров направления «Бизнес-информатика»:
«Поступив в 2013 году на эту программу, я ни разу не усомнилась
в правильности своего выбора. Высокая квалификация преподавателей
и нестандартный подход к обучению
(возможность выбора некоторых профильных дисциплин, работа над различными проектами в рамках курса,
конференции и другие научные мероприятия, а также факультативы,
встречи с представителями крупных
ИT-компаний) в Финуниверситете
на кафедре «Бизнес-информатика» –
очевидные плюсы этой образовательной программы. Также хочется отметить, что с полученными знаниями
и дипломом одного из самых престижных вузов страны для меня открываются большие перспективы трудоустройства и развития в ИT-сфере». EOF
«Я точно могу сказать, что не прогадал»
Солянов Кирилл, студент первого курса магистерской программы
«Стратегическое управление информационными технологиями в бизнесе»:
«Перед поступлением в Университет действительно сложным был выбор направления, по которому буду
учиться. В результате была выбрана
бизнес-информатика. Основным мотивом, определившим выбор, стала
уверенность в перспективности данного направления и востребованность такого рода специалистов в будущем. Сейчас я точно могу сказать,
что не прогадал. Только благодаря
знаниям, полученным в Университете, я смог устроиться на работу, еще
не окончив бакалаврскую программу.
Востребованность в специалистах
68
в области «Бизнес-информатика»
ощутил на собственном примере.
Меньше месяца назад принял решение сменить место работы и вышел
на рынок; реакция работодателей
не заставила себя долго ждать, и в течение двух недель я тщательно отбирал предложения от различных компаний финансовой и консалтинговой
сферы. Резюмируя, могу сказать,
что доволен выбранным направлением обучения и подтверждаю это, продолжая образование в магистратуре
в Финуниверситете по направлению
«Бизнес-информатика». EOF
декабрь 2015 системный администратор
Карьера/Образование
рынок труда
Вакансия: разработчик
мобильных приложений для Windows Phone
Корпорация Microsoft серьезно нацелена на мобильный рынок. Создаваемые
ею средства разработки приобретают все более универсальный характер и позволяют
разрабатывать не только настольные приложения, но и мобильные. Хотя доля Windows
Phone на рынке невелика, но в корпорации ее развитию придают огромное значение
1. Какими знаниями и навыками должен обладать разработчик мобильных приложений для Windows Phone?
2. Каков инструментарий разработчика мобильных приложений для Windows Phone?
3. Каковы требования компании к уровню образования потенциальных сотрудников?
4. Какие требования предъявляются к опыту работы?
5. Есть ли особые требования, которые обусловлены спецификой деятельности компании?
Вадим Балашов,
разработчик мобильных приложений, Почта Mail.Ru
1
Если мы говорим о мобильных приложениях
(не об играх), то чаще всего речь идет о каком-нибудь
сервисе, имеющем бэкенд. Основная обработка данных
осуществляется на сервере, а приложение предоставляет
удобный для пользователя интерфейс с поддержкой аппаратных особенностей. Примеров множество: клиенты
социальных сетей (ВКонтакте, Одноклассники, Facebook,
Instagram), почтовые, новостные и навигационные приложения (включая приложения с офлайн-навигацией).
Из этого следует, что, пожалуй, одно из главных качеств разработчика мобильных приложений – понимание
устройства сетевого взаимодействия. Понимание работы
протокола HTTP, особенностей отладки HTTPS, способов
экономии трафика конечного пользователя с помощью
алгоритмов сжатия deflate и gzip, формирования и разбора XML и JSON, отличия стратегии поведения приложения
при работе в мобильной сети и через Wi-Fi. Конечно, для решения большинства этих задач написаны готовые компоненты и библиотеки, что позволяет набросать прототип приложения буквально за несколько часов, но, как известно,
дьявол кроется в деталях: когда дело доходит до мелочей,
тонкостей и производительности, тут и приходят на помощь
глубокие знания предметной области.
Любой разработчик приложений в нашей компании также
должен обладать опытом и навыками разработки интерфейса. Нужно продумывать, как реализовать в коде все идеи
дизайнера. А разработчики знают, что чаще всего дизайнерские макеты существуют в идеальном мире: все надписи
системный администратор декабрь 2015
умещаются на экран, все кнопочки сразу видны, подписи
на картинках всегда контрастны и отчетливы. В реальности все гораздо сложнее: в большинстве случаев заголовок не влезает в оставленное для него место, абзац текста
сдвигает остальные элементы интерфейса вниз, за границы
экрана, а изображения настолько яркие или разноцветные,
что наложенная надпись абсолютно не читается. Разработчику необходимо плотно взаимодействовать с дизайнером,
предлагать варианты решения проблем, расположения элементов и поведения приложения в краевых условиях.
Особенность работы с Windows Phone заключается
в том, что в основном дизайнеры мыслят гайдлайнами iOS
и Android, а Windows Phone достаточно сильно от них отличается. Поэтому грамотный разработчик должен отлично
знать гайдлайны этой платформы и направлять дизайнера
в нужное русло. Отдельная история – динамика интерфейса: то, как элементы должны реагировать на действия пользователя (потянуться, наклониться, раствориться). Обычно
этого тоже нет в макетах, и динамику и анимации нужно
обсуждать устно, чтобы совместно прийти к красивому,
но при этом отзывчивому интерфейсу.
Инструментарий максимально прост – все задачи,
с которыми сталкиваются разработчики при работе над приложениями для Windows Phone, можно решить
в Visual Studio. А то немногое, что не решает VS, можно решить расширениями и плагинами. Безусловно, в категорию
must have входит ReSharper от наших соотечественников –
компании JetBrains (если кто-то поработал с ним хотя бы месяц, он уже не сможет работать без него). Раньше к этому
списку можно было добавить плагин для системы контроля
версий, но с тех пор как Visual Studio начала поддерживать
2
69
Карьера/Образование
git, необходимость в этом отпала – свежая версия даже выводит над функциями информацию о том, кто и когда последний раз вносил в них правки.
На примере подразделения Почта и портал, в котором
я работаю, могу сказать, что как таковых требований
к уровню образования сотрудников у нас нет. В принципе
стать частью команды Почты Mail.Ru можно и не имея высшего образования: для нас главное – что человек умеет,
а не что написано в его дипломе и есть ли он вообще. Скажем, среди стажеров, которые пока не имеют оконченной
«вышки», много очень толковых и технически грамотных
ребят, и часто еще до получения диплома им предлагают позицию в компании.
Жестких требований к опыту работы кандидатов у нас
также не существует. Если человек понимает принципы построения ПО и обладает достаточной базой знаний
для решения наших задач, абсолютно неважно, как он получил эти знания: работая в другой компании или занимаясь
самообразованием «в свободное от учебы время».
Будущий сотрудник должен осознавать масштаб задач, которые ему придется решать и, как следствие,
уровень ответственности, которая ляжет на его плечи. Ведь
нашими продуктами пользуются миллионы людей, они привыкли к высокому качеству, и мы не можем позволить себе
снижать планку. Так что большое значение имеют такие личные качества, как самоорганизованность и умение расставлять приоритеты.
3
4
5
Михаил Галушко, сооснователь DevRain Solutions
1
Технологии и навыки: .NET Framework, Windows Phone
SDK, как минимум базовые знания других мобильных платформ, английский язык, опционально HTML/CSS/
JS. Здесь и в дальнейшем я говорю только о бизнес-приложениях, а не играх. Также надо заметить, что недавно
выпущенная универсальная платформа Windows позволяет одновременно разрабатывать приложение на несколько платформ: десктопы, планшеты, мобильные устройства
и многие другие.
Windows 8/10, Visual Studio 2013/2015, Windows Phone
Power Tools, Expression Blend, TFS, Git, различные системы управления проектами (TFS, Asana и т.д.). Также желательно иметь устройство на базе Windows Phone для полноценного тестирования.
Зависит от позиции, на которую претендует разработчик. Обычно это стандартное разделение: Junior,
Middle, Senior. В любом случае наиболее важные факторы – это желание развиваться, обучаться новому каждый
день и передавать эти знания в дальнейшем другим членам команды. Академическое образование не обязательно
(но опять же зависит от позиции и доменной области проекта).
Желателен опыт работы с SQLite, REST API, построение Backend, Microsoft Azure (Azure Mobile Services,
Notification Hubs) или аналогичными сервисами, Social
services API, в некоторых случаях C++. Также желателен
опыт разработки классических Windows-приложений и опыт
разработки для других мобильных платформ.
Как я уже говорил – желание развиваться каждый день
и развивать других. И понимание того, что каждый день
2
3
4
5
70
рынок труда
разработчик сталкивается с новыми вызовами, которые позволяют ему получить новые знания и двигаться дальше.
Наталья Василькова, ведущий специалист по работе
с персоналом компании 2ГИС
1
В 2ГИС под WP мы разрабатываем на .NET/C#. Соответственно, необходимо обладать уверенными знаниями платформы .NET и языка C#. Очень желательно понимать, как .NET работает «за кулисами», как «сборщик
мусора» управляет памятью, к чему в конечном итоге приводят те или иные конструкции языка. Пользовательский
интерфейс пишется на языке XAML, и его тоже нужно знать
очень хорошо. Кроме того, нужно знать Windows Phone SDK
и различные нюансы работы приложений под WP: жизненный цикл, многозадачность.
Код на C# пишется в IDE Microsoft Visual Studio. Код
на XAML можно писать там же, но практика показывает, что удобнее делать это в Microsoft Expression Blend. Последний мы используем достаточно активно. Система контроля версий Git.
Желательно
наличие
высшего
образования,
но это не основополагающий фактор. Важнее то, какими знаниями, навыками и опытом решения конкретных задач обладает кандидат.
Если кандидат принимал участие в разработке большого коммерческого приложения под WP – это прекрасно
и является большим плюсом. Но ОС Windows Phone существует с 2010 года, более-менее полноценно разрабатывать
сложные приложения можно было только с 2012-го, после
выхода 8-й версии. А настоящий интерес к WP ожидается
только сейчас, с выходом Windows 10 и универсальных приложений. Поэтому неразумно ожидать от кандидата многолетнего опыта мобильной разработки под WP. Вместо этого
мы ориентируемся на несколько лет клиентской разработки
под .NET/C# с использованием языка XAML при разработке
пользовательского интерфейса (например, в десктопных
приложениях WPF).
Специфика такова, что наше приложение, 2GIS под WP,
активно использует внутренние библиотеки и SDK
компании (для отображения карты, поиска по справочнику
и т.п.). Все эти библиотеки написаны на C++, и с ними требуется глубокая интеграция. Поэтому для кандидата плюсом
будет знание C++ и C++/CX. Последняя аббревиатура –
это подмножество языка C++, разработанное специально
для интеграции C++ кода с WP SDK и с C# кодом под WP.
2
3
4
5
Николай Кобзев, Windows Phone-разработчик
в компании ООО «ГЛОБУС-ИТ»
1
В первую очередь, как и любому .NET разработчику, необходимо знать один из поддерживаемых языков программирования: C#, Visual Basic или же JavaScript. Для разработки пользовательского интерфейса необходимо знание
XAML, это специально разработанный язык разметки, схожий по своей структуре с HTML или XML. Если программировать на JavaScript, то будет достаточно знания HTML. Для разработки игр в современных версиях WP используются такие
движки, как Unity. При разработке приложений крайне полезными будут знания паттернов программирования (хотя
декабрь 2015 системный администратор
Карьера/Образование
рынок труда
бы MVC или MVVM). Полезным опытом в разработке приложений под Windows Phone является знание таких вещей,
как Windows Presentation Foundation, Windows Communication
Foundation, и опыт использования RestAPI.
Основным инструментарием для разработчика является среда разработки (CLR – Common Language
Runtime). Таковой является VisualStudio, которая, наверное,
самая мощная в функциональном плане среда разработки.
Кстати, она позволяет разрабатывать не только продукты
для семейства Windows, но и на Android и iOS. Кроме этого,
для верстки интерфейса и создания анимации очень удобно
пользоваться Blend for VisualStudio. Это утилита, которая работает в паре со средой разработки и предоставляет более
удобный интерфейс и больше возможностей именно для дизайна приложения. MSDN – «это наше все».
Принципиальных требований к уровню образования
кандидатов мы не имеем. Важнее уровень профессионализма и компетенции сотрудника и системное мышление,
а не то, какой у него диплом или сертификат. Поэтому попасть к нам на собеседование может выпускник или студент
любого вуза.
Junior-разработчиком может стать и студент старших
курсов без опыта работы (впрочем, студенты обычно
попадают на работу через стажировки), для Senior Developer
необходим определенный опыт работы.
О специфических требованиях говорить сложно.
Для разных проектов в компании требуются различные
2
3
4
5
системный администратор декабрь 2015
навыки, на которые мы можем обратить внимание. Если мы
видим на собеседовании, что перед нами компетентный человек, глубоко знающий свою предметную область, мы сделаем ему достойное предложение.
Алиса Машкова, маркетолог Touch Instinct
1
Знания разработки на C#, XAML и использования платформы .NET. Понимание принципов работы баз данных. Английский на уровне чтения технической документации. Представление о современных методиках организации
асинхронной работы на платформе Windows.
Операционная система Windows, Visual Studio, Git, Svn,
Mercurial и т.д.
Высшее техническое образование, иногда – студенты
последних курсов.
Опыт программирования – от двух лет. Разработка
на C#, XAML и использование платформы .NET, а также создание приложений с многопоточностью. Опыт работы
с какой-либо системой контроля версий (Git, Svn, Mercurial
и т.д.). Участие в проектах по разработке мобильных приложений под Windows Phone, Windows 8 – от идеи до конечной
реализации. Плюс: участие в Оpen Source-проектах, опыт
разработки клиент-серверных приложений.
Желание работать и развиваться на крупных проектах.
2
3
4
5
Подготовил Игорь Штомпель
71
Карьера/Образование
особое мнение
Визитка
ВЛАДИМИР ИВАНОВ, специалист по информационной безопасности.
Увлекается психологией, историей, философией
Социальная инженерия
под прикрытием трудоустройства
В публикации рассмотрим уловки злоумышленников, использующих
социальную инженерию
Praemonitus praemunitus – «предупрежден значит вооружен»
Для чего нужна эта статья
Если вы знаете об опасности инфекции, совсем нелишним
будет соблюдать правила гигиены и держаться подальше
от мест концентрации возбудителей инфекционных заболеваний. Точно так же, если вы знаете об опасности дискредитации компании и кражи информации, совсем нелишним
будет выработать комплекс предупредительных мер, чтобы
избежать таких волнующих событий.
Важное замечание. Этот материал отнюдь не является
прямым руководством к действию. Мало того, в целях безопасности наиболее уязвимые места преподнесены с небольшим искажением, чтобы не давать отмычку в руки злоумышленнику.
Задача для примера
Для примера выберем самую простую, набившую оскомину
цель: сделать дефейс корпоративного сайта. Для подготовки к этому акту необходимо собрать интересующую информацию.
Что такое социальная инженерия, и почему
об этом надо думать при трудоустройстве
Под словосочетанием «социальная инженерия» часто понимают набор противоправных действий, которые осуществляют злоумышленники при получении первоначальных данных для взлома компьютерных систем. Например, позвонить
по телефону и, представившись сотрудником технической
поддержки, «уточнить» логин и пароль для входа в систему.
На самом деле такое представление довольно поверхностное. Социальная инженерия – это прикладная дисциплина, базирующаяся на других науках: социологии,
психологии и антропологии, которая ставит своей целью исследование методик для управления поведением человека
без технических средств. Например, изучение способов мотивации персонала, использование различных рекламных
трюков и так далее.
Поэтому говорить о том, что социальная инженерия
существует только как помощник выполнения хакерских атак, – это неправильно. С тем же успехом можно
72
утверждать, что «химия – это наука о ядах». Но в то же время, как и любая научная дисциплина, она имеет двойное
назначение: мирное и военное. Вот о втором направлении
и пойдет речь в данной статье.
Самое слабое место в информационной защите любой
компании – это ее сотрудники. Каждый человек имеет свои
собственные представления о том, что «хорошо или плохо»,
что может навредить компании, а что пойдет ей на пользу,
и многих других «тараканов в голове». Нет сомнения в том,
что параноики-пессимисты меньше уязвимы, чем восторженные оптимисты, но и для тех и других существуют свои
методы.
Вот небольшой и далеко не полный перечень методов,
которые могут быть использованы злоумышленниками:
> сбор информации из открытых источников;
> получение списка сотрудников компании;
> слежение за блогами и страничками в социальных сетях сотрудников;
> имитация стремления к партнерским отношениям;
> собеседования при имитации набора персонала.
Я намеренно не стал включать в данный список такие
общеизвестные вещи, как выдача себя за другого человека
с целью получить пароль, подбрасывание зараженных носителей для внедрения «троянских программ» и аналогичные трюки. С некоторыми элементами подобных методик
мы все же встретимся на протяжении данного повествования. Ниже приводится описание по каждому из пунктов.
Сбор информации из открытых источников
Данный этап самый простой, самый всеобъемлющий и, пожалуй, самый непредсказуемый. Для начала достаточно
просто забить в интернет-поисковике название компании
и внимательно проанализировать полученную информацию.
Можно найти достаточно много информации для подготовки
вторжения. Например, род деятельности, размер компании,
имена руководителей, адрес физического расположения
центрального офиса, контактные телефоны, какой провайдер обслуживает, какая дизайнерская фирма выполняла
декабрь 2015 системный администратор
особое мнение
Карьера/Образование
Социальная инженерия может
превратиться в серьезное
оружие, способное заставить
человека выдать информацию
сайт компании и так далее. Прекрасную помощь окажут
черные списки работодателей и негативные отзывы клиентов. Если компания случайно засветилась на таких сайтах,
можно собрать много информации, используя бывших сотрудников и недовольных заказчиков.
В то же время при использовании данного метода трудно
предугадать точный результат. Среди потока информации
встречается порой слишком мало полезных находок. Например, если крупная фирма проиграла судебный процесс,
то на всех сайтах СМИ только и будут трубить об этом событии, копируя друг у друга один и тот же текст. И любой поиск
будет забит множеством ссылок на эти «новости», что значительно затрудняет сбор необходимой информации.
Поэтому данный метод можно считать скорее подготовительным. Своего рода предварительная разведка перед
серьезной операцией.
Получение списка сотрудников компании
В последнее время трудностей для использования этого
метода практически не существует. Рекламщики и HRменеджеры наперегонки выкладывают на корпоративный
сайт данные о сотрудниках компании вместе с фото, информацией об образовании, профессиональной подготовке,
а также указанием семейного положения, хобби и домашних
любимцах. В итоге можно запросто составить психологический портрет нужного сотрудника, например, системного
администратора или начальника ИТ-отдела, просто внимательно изучив корпоративный сайт.
Если на корпоративной страничке информации маловато, можно воспользоваться сайтами типа «Одноклассники»
или «ВКонтакте», где скорее всего будет сообщество работавших и работающих в данной компании и просто «друзей
фирмы».
Слежение за блогами и страничками
в социальных сетях сотрудников
После того как получен список сотрудников, можно переходить к анализу их личностных и эмоциональных характеристик. Например, злоумышленников интересует системный
системный администратор декабрь 2015
администратор компании для получения у него сведений
относительно средств информационной защиты. Будет нелишне иметь ответы на следующие вопросы (список приводится далеко не полный с целью не предоставлять злоумышленникам готовую «отмычку»).
Семейное положение
> Холост, женат, разведен?
> Есть ли дети, от каких браков?
> Какие отношения с партнерами (супругами)?
> Какие отношение с родителями и другими членами семьи?
Материальное положение
> Какое у него материальное положение?
> Есть ли кредитная история, невыплаченные долги, пени
и просрочки?
> Имеется ли собственное жилье, или есть постоянная
необходимость арендовать квартиру?
> Как этот человек относится к деньгам и тратам: жадный, экономный, транжира, любит покутить?
> Склонен ли делать инвестиции, имеет ли сбережения?
Психологические черты
> Каким типом темперамента обладает?
> Интроверт или экстраверт?
> Способен ли данный человек сдерживать гнев?
> Насколько внимателен к мелочам?
> Что говорят другие о его интуиции?
Профессиональные черты и карьера
> Склонен ли данный человек к постоянному профессиональному росту или остановился на достигнутом?
> В какой области предпочитает специализироваться?
> Как складывается его профессиональная карьера
на данный момент?
Хобби, увлечения, отдых
> Есть ли какие-либо увлечения помимо работы?
> В каких сообществах по интересам состоит?
73
Карьера/Образование
> Где и как предпочитает отдыхать?
> Отношение к алкоголю и другим вредным привычкам?
И так далее. Напоминаю, что для сбора всей этой информации вовсе не обязательно нарушать закон, например, тайно следить за объектом из кустов или опрашивать соседей,
представляясь сотрудником полиции. Все эти данные могут
быть получены из открытых источников, например, из социальных сетей, LiveJournal и других интернет-ресурсов.
Конечной целью данного исследования будет составление
психологического портрета, чтобы получить более весомые
инструменты воздействия на личность.
Изучение вакансий компании
Вакансии компании предоставляют замечательную возможность сбора информации об ИТ-системе в целях ее последующего взлома.
Причинами для такой утечки информации являются
все те же жадность, лень, заносчивость и глупость. И в Российской Федерации, и в странах СНГ до сих пор живет
страстное стремление получить все «на халяву», в том числе и сотрудников нужной квалификации. Это приводит к постоянному поиску специалистов на стороне. Многие клерки,
почувствовав себя «начальником», не хотят потратить несколько минут на телефонный разговор с понравившимся
кандидатом, чтобы убедиться в его квалификации. Отсюда
возникает глупое стремление вывалить в текст вакансии
в качестве требований полный перечень используемых сервисов и систем в надежде на то, что неподходящие кандидаты сами собой разбегутся, увидев длинный список пожеланий работодателя.
Разберем текст типичной вакансии
Обязанности:
> Администрирование сети в нескольких офисах.
> Администрирование Windows Server 2003/2012 (AD,
GPO, DNS, DHCP, IIS).
> Администрирование Linux Server (iptables, DNS (BIND),
Squid, Asterisk, ProFTP, OpenVPN, Apache).
> Администрирование АТС Oktell, Asterisk (маршрутизация звонков, учетные записи пользователей, настройка
IP-телефонов).
> Администрирование почтовых серверов.
> Монтаж и коммутация серверного и сетевого оборудования.
> Настройка активного сетевого оборудования Cisco,
Juniper.
> Поддержка корпоративного сайта.
> Подготовка рабочих мест, закупка оборудования
для сотрудников.
Требования:
> Опыт работы системным администратором от двух лет.
> Твердые знания в установке, настройке и администрировании серверов на базе Windows 2003, 2008, 2012.
> Опыт администрирования доменов (Active Directory)
и настройки рабочих станций.
> Опыт администрирования виртуальных АТС.
> Приветствуется знание Ubuntu Linux.
> Опыт работы с виртуальными машинами.
74
особое мнение
> Умение быстро диагностировать и устранять проблемы.
> Опыт работы с виртуализацией VMware.
> Умение писать bash, bat-скрипты.
Личные качества:
> Исполнительность, мобильность, стрессоустойчивость, клиентоорентированный подход.
Что можно выяснить из такой вакансии?
Так как в требованиях указан веб-сервер Apache, то, вероятнее всего, поддержкой корпоративного сайта будет заниматься системный администратор. При этом скорее всего
имеется собственный HTTP-сервер, который либо находится внутри периметра сети, либо размещен на площадке провайдера.
Фраза «подготовка рабочих мест, закупка оборудования для сотрудников» дает хорошую уверенность в том,
что системный администратор скорее всего занят «обслуживанием» пользователей и не имеет достаточно времени для регламентных работ по обеспечению нормальной
защиты веб-сайта. То, что в качестве единственной защиты от вторжений указан iptables, обычно говорит о том,
что никакие особенные средства предотвращения вторжений в данном случае не используются.
Наличие требований из разряда «и жнец, и швец,
и на дуде игрец» предполагает отсутствие специализации
на UNIX и Windows-направления, а также разделения на обслуживание серверов и рабочих станций. Это говорит о том,
что системный администратор будет обслуживать все «хозяйство» в одиночку, в лучшем случае имея малоквалифицированного сотрудника техподдержки из разряда «подайпринеси».
Обратите внимание на внушительный список требований.
По сути, это сферы деятельности для пяти или даже шести
различных специалистов. Если за все это предполагается
платить «среднерыночную» зарплату, то данный специалист
будет вполне справедливо считать, что ему недоплачивают,
и пожелает сменить работу на более высокооплачиваемую.
Такого человека не составит труда заманить на собеседование, чтобы выведать необходимые детали для взлома. То,
что сисадмин работает в одиночку, сильно облегчает задачу, так как он вынужден быть в курсе всех вопросов касательно информационной защиты.
Изучаем пожелания к личным качествам
Исполнительность. Это понятно. Приказано – хоть в лепешку разбейся, а все сделай.
Мобильность. Здесь либо требуется наследник способностей небезызвестного Фигаро, да, да, который «Фигаро
здесь, Фигаро там...», либо сотрудник должен 24 часа 7 дней
в неделю быть доступен по телефону, и покоя ему не будет.
Стрессоустойчивость. Ну, это, понятно, расшифровывается как: «Мы вам будем хамить, а вы не смейте возражать».
Клиентоориентированный подход. Здесь кандидату
ясно дают понять, что основная его задача – исполнять капризы пользователей, а все остальное делать тоже надо,
но потом...
Посмотрите еще раз внимательно на широкий список
обязанностей кандидата. Очевидно, что, даже работая
декабрь 2015 системный администратор
особое мнение
по 14 часов в сутки, человек не может решить все вопросы.
Чем обычно жертвуют в таких случаях? Правильно, вопросами безопасности. За неработающий директорский ноутбук
с сисадмина в любом случае голову снимут, а сервер могут
взломать, а могут и не взломать…
Теперь еще один важный нюанс. Необходимо изучить
другие аспекты данной вакансии. Когда появилась, как долго висит на «работном сайте», это «вечная вакансия» или же
появляется время от времени? Все эти детали дают возможность сформировать ясное представление о том, как реально обстоят дела с ИТ-системой в компании.
Отклик на вакансию и посещение собеседования
Для того чтобы попасть на собеседование, необходимо
получить приглашение. Это значит, что резюме кандидата
должно быть безупречно. Помимо профессиональных навыков, необходимо указать нечто, что сделает нашего кандидата особенным. Перед этим не зря был изучен список сотрудников и проведен сбор информации о них из открытых
источников. Пришла пора ответить на вопросы:
> Что у них общего?
> Какую субкультуру исповедуют?
> Под какие требования их подбирали?
> Есть какие-то дополнительные моменты вроде «особенной корпоративной культуры, и другие детали, которые можно использовать, чтобы выглядеть частью
единого целого.
Например, они все играют в волейбол или мини-футбол.
Тогда разумно будет указать в резюме в разделе хобби
соответствующий вид спорта.
Если руководство компании или служба HR помешаны
на тимбилдинге («командостроительстве»), то в разделе
«Дополнительное обучение» можно указать соответствующие тренинги.
С представителями службы персонала стоит поработать
отдельно. Для этого тоже понадобится ответ на следующие
вопросы.
> Сколько человек работает в HR-отделе?
> Какого они возраста?
> Есть ли них специализация? (Например, один человек
занимается только основным персоналом, другой –
только вспомогательными подразделениями и т.д.)
> Кто какую литературу предпочитает?
В итоге чем больше кандидат будет соответствовать идеалам сотрудников отдела персонала, тем точнее попадание
в цель.
Я не буду подробно описывать все нюансы подготовки
резюме, сопроводительного письма – эти детали достаточно неплохо освещены в интернете. Единственный общий
момент, используемый в таких ситуациях: наибольший результат дает сбор как можно большего объема информации
и максимальное желание соответствовать сложившимся
стереотипам.
Важное замечание. Такой кандидат-разведчик может добавить в свое резюме множество записей о полученных сертификатах, об успешной сдаче экзаменов, обучении на курсах и так далее. Проверить данную информацию в короткие
сроки весьма затруднительно. И, даже если его уличат
системный администратор декабрь 2015
Карьера/Образование
во лжи, он практически ничем не рискует. В крайнем случае
его с позором выгонят из офиса. Лично я не знаю ни одного
примера из правоприменительной практики, когда люди понесли наказание за такие «преступления».
Если на собеседование пришел человек, попадающий
под представление об «идеальном кандидате», то это уже
большой повод задуматься о реальных целях, которые
он преследует.
Цель кандидата-разведчика –
не пройти как можно быстрее
свое собеседование
с положительным результатом,
а выведать как можно больше
информации
Поведение на собеседовании
И вот наступил торжественный момент – кандидата-разведчика приглашают на собеседование.
Первая и основная задача для такого посетителя – пройти
фильтр из сотрудника службы персонала. Для этого нужно
не так уж много: быть одетым не броско, но со вкусом, приятно пахнуть парфюмерией, говорить то, что от тебя ожидают услышать, не болтать лишнего и не делать лишних движений. В общем, быть тем самым «душевным пареньком»,
который готов работать по 20 часов в сутки на благо компании за весьма скромную зарплату. В большинстве случаев этого хватает, чтобы сотрудник HR-службы отправил
новоявленного кандидата дальше, на допрос к айтишнику
или лицу, его заменяющему.
Еще раз хочу напомнить о главном. Опасность стать жертвой злоумышленников значительно выше в тех организациях, где руководство пытается «экономить на людях». А там,
где не обманывают работников, платят зарплату выше
«среднерыночной», инвестируют деньги в обучение персонала и полностью соблюдают трудовое законодательство,
в этой ситуации вероятность успеха «социальных инженеров» будет стремиться к нулю.
Цель такого кандидата-разведчика – не пройти как можно
быстрее свое собеседование с положительным результатом, а выведать как можно больше информации. Поэтому
такому человеку вовсе не нужно выглядеть крутым специалистом. Достаточно, чтобы он был «в курсе темы» и умел
показать, что вроде бы материал неплохо знает, но… И вот
это небольшое сомнение будет заставлять сотрудников ИТдепартамента задавать все больше и больше вопросов.
Стремления представителей ИТ-службы при проведении
подобных интервью сводятся к желанию побыстрее найти
человека, который закроет часть проблем. Поэтому они,
сами того не подозревая, будут задавать вопросы, близкие
по тематике к актуальным проблемам. Например, если ИТруководитель считает, что веб-сервер компании не очень хорошо защищен, он будет стремиться выяснить у кандидата,
есть ли у него требуемый опыт в данной сфере. Со стороны может показаться, что в этом нет ничего опасного, ведь
он не сам рассказывает о проблеме, а пытается разговорить
75
Карьера/Образование
собеседника. Нюанс заключается в том, что при любом диалоге обмен информацией идет в обоих направлениях.
Решающий момент – тестовое задание. Это просто подарок для социальных инженеров. Разумеется, мыслительный
процесс любого психически здорового человека – отнюдь
не набор абсолютно случайных образов, а последовательный ход рассуждений, базирующийся на предыдущем
опыте. И самое актуальное, «наболевшее» – это как раз
те самые задачи, решенные и нерешенные, которые прошли перед ним совсем недавно. Разумеется, и тестовое задание любой сотрудник будет составлять, так или иначе полагаясь на свой опыт, невольно включая в него и фрагменты,
которые «не получились».
В компании, где работники
чувствуют себя комфортно,
у злоумышленников
практически нет шансов
на успех
Что же делать и как защитить себя
от таких «джентльменов удачи»?
Во-первых, надо избавиться от стремления нанять суперспециалиста за скромную зарплату.
Во-вторых, не стоит «мучить» кандидатов на собеседовании техническими вопросами. Ведь любой, даже самый
сложный, технический навык можно приобрести путем соответствующего обучения. Гораздо лучше обратить внимание
на личностные качества. Например, на умение формулировать свою мысль, привычку читать специальную литературу
«просто так, на будущее», готовность взяться за нестандартные задачи, умение собирать информацию «по крупице» и многое другое, что отличает профессионала от просто
человека с технической подготовкой.
Нужно выбросить из головы саму мысль о тестовом
задании для людей, в чьи обязанности так или иначе может входить обеспечение безопасности. То, что хорошо
для программистов и рекламщиков, абсолютно не подходит
для системных инженеров и системных администраторов.
В противном случае это только повышает шансы «слить информацию» незнакомым людям.
В-третьих, не стоит благоговеть перед сертификатами.
Есть множество «специалистов», имеющих стену, увешанную «трофеями» в рамочках, и не способных решить самый
простой вопрос по своему профилю.
Приглашение сотрудника чужой компании
на собеседование
Но что делать, если позиция уже занята или у злоумышленников нет желания проникнуть на собеседование под видом
кандидата на вакансию? В этом случае можно пригласить
системного администратора на собеседование.
Благодаря анализу информации, полученной из открытых
источников, было установлено, что системный администратор интересующей нас компании находится в достаточно стесненном положении и в принципе не прочь сменить
76
особое мнение
работу. Для того чтобы заинтересовать его блестящими перспективами, достаточно раздобыть его личный (не корпоративный!) e-mail и написать письмо следующего содержания:
«Здравствуйте, уважаемый…
Вас беспокоит сотрудник кадрового агентства (вымышленное название).
Мы нашли Ваше резюме на одном из сайтов и хотели
бы предложить Вам вакансию системного администратора
в преуспевающей западной компании...»
Далее идет описание несуществующей вакансии, для которой как нельзя лучше подходит данный системный администратор.
Иногда, для полной убедительности, указанные требования слегка превосходят возможности нашего героя.
Но тут же дается пояснение, что компания не ожидает 100%
соответствия и готова предоставить успешному кандидату
возможность приобрести необходимые навыки во время работы. Это ведь вакансия мечты, не правда ли?
В конце отправитель просит не тянуть с ответом, потому
что вакансия «горящая» и ее необходимо закрыть в кратчайшие сроки. Это даст нашему «претенденту» еще большую
уверенность, что у него хорошие шансы получить прекрасную работу, надо только поспешить.
Скорее всего он сам свяжется по указанным контактным
данным, чтобы договориться о встрече. Если нет, то злоумышленник может перезвонить сам и назначить встречу.
Обратите внимание на важный момент. Так как в качестве отправителя указаны контакты рекрутера из кадрового
агентства, то у социального инженера абсолютно развязаны
руки в возможности выбора места встречи. Например, он может снять переговорную на короткое время или назначить
собеседование в уютном кафе, мотивируя тем, что до офиса агентства далеко добираться. Он может сделать вид,
что идет навстречу кандидату, и назначить встречу после
окончания рабочего дня, разумеется, вне офиса.
В общем, все ради удобства соискателя. Ну, разве
не здорово?
Ниже приводится несколько ключевых приемов, подготовка которых может помочь вытянуть из ничего не подозревающего сотрудника интересующую информацию.
Обычно злоумышленник имеет заранее составленный
список вопросов, которые так или иначе связаны с интересующей темой. Если речь идет о взломе сайта, то вопросы скорее всего о том, с какими файрволами приходилось
работать на последнем месте работы, как он организовал
защиту веб-сервера, какие установил «заплатки» в ядро,
на площадке какого провайдера он рекомендует или не рекомендует размещать сервер и так далее. Для того чтобы
явно не выдавать своих намерений, такие вопросы скорее
всего будут разбавлены вопросами на отвлеченные темы
наподобие «чем отличается хаб от свича?».
Заготовленный набор вопросов можно дополнить разговором по душам. Например, задать личные вопросы вроде:
с какими трудностями пришлось столкнуться в последнее
время, какие книги удалось прочесть в перерывах между
работой и самообразованием, насколько жесткие требования к дисциплине на текущем месте работы, есть ли дресскод и так далее? Стремление понять человека, проникнуться
декабрь 2015 системный администратор
особое мнение
его проблемами развяжет практически любой язык. А специальные приемы помогут усилить данный эффект и вытащить побольше информации.
И, конечно, нельзя забывать о самом действенном примере – тестовом задании.
Однажды в компании, которую я консультировал, произошел довольно забавный случай.
Мне пришлось в качестве специалиста по безопасности
принять участие в собеседовании одного молодого человека на должность системного администратора. На вопросы по UNIX-системам он отвечал как-то вяло и неохотно,
и я выразил сомнение, что он недостаточно хорошо владеет
вопросом и скорее всего завысил свои навыки в резюме.
В ответ на это юноша переменился в лице, быстро подошел к столу, на котором стоял демонстрационный компьютер. Несмотря на слабые протесты присутствующих о том,
что времени на демонстрацию осталось мало, он запустил
веб-браузер, подключился к приложению Webmin и стал
рассказывать о том, как он все это установил и как работают системы, которые он лично настраивал. Если бы на компьютере работала программа слежения за пользователем,
мы бы имели возможность нанести этой системе непоправимый вред сразу же после его ухода.
Разумеется, далеко не все люди так импульсивны, но вариант с тестовым заданием работает весьма и весьма неплохо. Например, человеку дают задание написать набор
правил для «файрвола» и смотрят, где он оставит брешь.
системный администратор декабрь 2015
Карьера/Образование
Стремление получить заветную работу поистине творят чудеса, заставляя испытуемого забыть об осторожности.
Надо ли говорить, что, проводя подобные манипуляции,
злоумышленник практически ничем не рискует. Даже если
он вдруг будет уличен в обмане, он может это представить
всего лишь как глупый розыгрыш.
Социальная инженерия может стать хорошим подспорьем
для облегчения жизни сотрудников, а может превратиться
в серьезное оружие, способное заставить человека выдать
самую секретную информацию. В заключение хочется пожелать читателям не попадаться на подобные уловки. И помните золотое правило: на предприятии, где работники чувствуют себя комфортно, у злоумышленников практически
нет шансов на успех. EOF
[1] Бирюков А.А. Информационная безопасность: защита и нападение. ISBN: 978-5-94074-647-8 – http://dmkpress.com/catalog/
computer/securuty/978-5-94074-647-8.
[2] Митник К.Д. Искусство вторжения. ISBN: 978-5-98453-020-0 –
http://dmkpress.com/catalog/computer/securuty/978-5-98453-020-0.
[3] Дрейфус Сьюлетт. Компьютерный андеграунд: истории
о хакинге, безумии и одержимости – http://www.setbook.ru/
books/1981736.html.
Ключевые слова: социальная инженерия, безопасность, работа.
77
Карьера/Образование
рейтинг
Визитка
ИГОРЬ ШТОМПЕЛЬ, инженер, системный администратор.
Сфера профессиональных интересов – свободное ПО,
keepercoder@gmail.com
Образование в сети:
операционные системы
В информационных технологиях есть две важные составляющие – Hardware
и Software. Причем нередко первая бесполезна без такого представителя Software,
как операционные системы. Они «оживляют» Hardware, позволяют им управлять
В свою очередь, совершенствовалось аппаратное обеспечение, изменялись и улучшались операционные системы,
обретали свою «специализацию». Одни стали работать
на серверном оборудовании, другие – на рабочих столах, третьи – на мобильных устройствах и т.д. Но есть то,
что их всех объединяет. Этому и посвящен наш сегодняшний рейтинг курсов.
Курсы, вошедшие в рейтинг, имеют разную сложность,
реализуют различные подходы в подаче материала. Познакомившись с рейтингом, вы сможете определиться с тем,
какие из них на данном этапе необходимо изучить.
Участники рейтинга
Основы операционных систем
> Авторы: В. Карпов (к.ф-м.н., доцент кафедры информатики Московского физико-технического института,
а также доцент факультета компьютерных наук базовой
кафедры «Системное программирование» Института системного программирования РАН. Принимал участие в разработке программных систем с компаниями
Paralogic, AT&T, http://old.intuit.ru/lector/41.html, http://www.
hse.ru/org/persons/161322668),
К. Коньков (к.ф-м.н., старший научный сотрудник Института автоматизации проектирования РАН, доцент кафедры математических и информационных технологий
Московского физико-технического института. Директор по научной работе ООО «Физтех-софт». Занимался
разработкой операционной системы PTS-DOS, а также StrongDisk, http://old.intuit.ru/lector/42.html, http://www.
abbyy.ru/science/universities/mipt/kl/tutors/konkov)
> Учебное заведение: ИНТУИТ (http://intuit.ru)
> Специальность: системный администратор, программист
> Лекции: 16 лекций
> Материалы: текст
> Уровень сложности: специалисты
> Сертификат: да
> Адрес: http://www.intuit.ru/studies/courses/2192/31/info
78
Основы операционных систем. Практикум
>
>
>
>
>
>
>
>
Авторы: В. Карпов, К. Коньков.
Учебное заведение: ИНТУИТ (http://intuit.ru)
Специальность: системный администратор, программист
Лекции: 10 лекций
Материалы: текст
Уровень сложности: специалисты
Сертификат: да
Адрес: http://www.intuit.ru/studies/courses/2249/52/info
Основы современных операционных систем
> Авторы: В. Сафонов (д.т.н, профессор кафедры информатики и заведующий лабораторией Java-технологии
математико-механического факультета СПбГУ, автор
более 120 научных трудов, 4 патентов США и 4 патентов РФ по компиляторам и технологиям программирования, 16 интернет-курсов, http://old.intuit.ru/lector/591.html,
http://pilotlz.ru/authors/208/6236)
> Учебное заведение: ИНТУИТ (http://intuit.ru)
> Специальность: системный администратор, программист
> Лекции: 32 лекции, 8 самостоятельных работ, дополнительные материалы
> Материалы: текст
> Уровень сложности: специалисты
> Сертификат: да
> Адрес: http://www.intuit.ru/studies/courses/641/497/info
Операционные системы
> Авторы: А. Брагин (лидер проекта ReactOS, https://
twitter.com/aleksbragin)
> Учебное заведение: МГТУ им. Баумана (http://www.
bmstu.ru)
> Специальность: системный администратор, программист
> Лекции: 11 лекций
> Материалы: видео
> Уровень сложности: специалисты
> Сертификат: нет
> Адрес: http://www.youtube.com/playlist?list=PLjSDyY6BQP
Ve2Zhxew5rJy2S-2_9t1vvn
декабрь 2015 системный администратор
Карьера/Образование
рейтинг
Наш подход
Для сравнения курсов мы определили несколько параметров. А именно: интерфейс, содержание, иллюстративный
материал, сертификация. Каждый из параметров предполагает присвоение оценки (от 1 до 5), а также имеет свой
вес (от 1 до 5). Умножение оценки параметра на его вес дает
итоговый балл. Сумма итоговых баллов всех параметров
определяет место в рейтинге.
Стоит отметить, что максимальный вес мы присвоили
только параметру содержание – 5. На балл ниже был оценен параметр интерфейс – 4. А два оставшихся параметра – иллюстративный материал и сертификация – получили
оценку 3.
Основы операционных систем. Теория
В рамках «Академии Intel» на портале Интернет-университета информационных технологий, как показано на рис. 1,
стал доступен курс с названием «Основы операционных
систем» [1]. Он имеет свои особенности. В частности, авторы основывались на курсе «Введение в операционные
системы», читаемом ими в МФТИ, продолжительностью
в семестр.
Слушателям предлагается начать с введения в операционные системы (далее в качестве синонима – ОС), в рамках
которого познакомиться с понятием ОС, историей эволюции
вычислительных систем во взаимосвязи с развитием ОС,
а также с основными понятиями и концепциями, связанными
с операционными системами, их архитектурными особенностями и классификацией.
После столь подробного введения несколько лекций посвящено процессам. Слушатели получат представление
о понятии процесса, его состоянии, операциях над процессами (набор операций, одноразовые операции, многоразовые операции и т.п.).
Не менее интересно подана информация о планировании процессов (уровни, критерии и параметры планирования и т.п.), а также о требованиях к алгоритмам планирования и самих алгоритмах.
Говоря о процессах, нельзя не отметить, что много внимания уделено их взаимодействию и логической организации
этого взаимодействия, нитям исполнения. В рамках поддержки взаимодействия процессов рассматриваются такие
проблемы, как алгоритмы синхронизации (Interleaving, race
condition и взаимоисключения; критическая секция, алгоритмы организации взаимодействия процессов), механизмы
синхронизации (семафоры, мониторы, сообщения и их эквивалентность). Отдельная лекция посвящена тупикам.
Начиная с восьмой лекции речь идет о памяти. Авторы начинают с информации об организации памяти компьютера
и показывают простейшие схемы управления памятью. Затем переходят к рассмотрению виртуальной памяти и архитектурных средств ее поддержки. В свою очередь, десятая
лекция посвящена аппаратно-независимому уровню управления виртуальной памятью.
Следующие три лекции помогут слушателям сформировать представление о реализации файловой системы
и системы управления вводом-выводом. Последние получат представление об организации файлов и доступа
к ним, операциях над файлами, директориях и операциях
над ними, правах доступа, т.е. о файловой системе с точки
зрения пользователя.
Не менее интересен материал о реализации файловой
системы, который позволяет узнать об общей структуре
Таблица 1. Рейтинг курса «Основы операционных систем» (Академия Intel)
Оценка
Коэффициент
«Содержание» (С)
Итоговый
балл
Содержание
5
5
25
Интерфейс
5
4
20
Иллюстративный
материал
5
3
15
Сертификация
4
3
12
72
Рисунок 1. Курс «Основы операционных систем» (Академия Intel)
системный администратор декабрь 2015
79
Карьера/Образование
рейтинг
файловой системы, управлении внешней памятью (методы
выделения дискового пространства и т.п.), реализации директорий, монтировании файловых систем, их надежности
и производительности, архитектурах современных файловых систем и т.п.
Отдельная лекция посвящена вводу-выводу. В ней затронуто много соответствующих проблем. Среди них, например, структура контроллера устройства, опрос устройств,
прерывания, прямой доступ к памяти (Direct Memory Access,
DMA), логические принципы организации ввода-вывода, интерфейс между базовой подсистемой ввода-вывода и драйверами, функции базовой подсистемы ввода-вывода, алгоритмы планирования запросов к жесткому диску и т.д.
Завершается курс рядом специальных тем, которые посвящены сетям и соответствующим ОС, информационной
безопасности (угрозы безопасности, криптография и т.п.),
защитным механизмам ОС (идентификация, аутентификация, авторизация, выявление вторжений, анализ защищенности ряда популярных ОС).
Отметим интерфейс текстовых курсов Интернет-университета информационных технологий. Все базовые необходимые элементы присутствуют. Слушатели смогут осуществлять переход на любую лекцию из текущей, использовать
Таблица 2. Рейтинг курса «Основы операционных систем. Практикум» (Академия Intel)
Оценка
Коэффициент
«Содержание» (С)
Итоговый
балл
Содержание
5
5
25
Интерфейс
5
4
20
Иллюстративный
материал
5
3
15
Сертификация
4
3
12
72
гиперссылки, открывать актуальный рисунок по ссылке, которые выделены цветом. Поставим этому интерфейсу максимальный балл, так как он обеспечивает удобную и простую навигацию в рамках курса.
Теперь несколько слов об иллюстративной составляющей. Лекции сопровождаются большим количеством рисунков, схем, таблиц, которые призваны способствовать
лучшему восприятия учебного материала. В свою очередь,
формулы выделены особо и вставлены в текст в виде рисунков, что характерно для текстовых курсов Интернет-университета информационных технологий. С учетом вышесказанного – максимальный балл.
О статусе сертификации от Интернет-университета информационных технологий. В ИТ-секторе широкого признания данные сертификаты пока не получили. Но в то же
время его обладатель показывает потенциальному работодателю, что он ориентирован на самообучение и способен
укладываться в необходимые сроки.
В целом курс оставляет приятное впечатление. Почерпнуть новое для себя из него смогут как начинающие ИТ-специалисты, так ИТ-профессионалы.
Основы операционных систем. Практикум
Авторы предыдущего курса, подготовили еще один, который
также доступен в рамках «Академии Intel» на портале Интернет-университета информационных технологий (см. рис. 2).
Его особенность, как и следует из названия, – ориентация
на практику, более того, он является приложением к первому
рассмотренному в этой статье курсу. Далее, чтобы избежать
путаницы, будем говорить о теоретическом курсе и, данном,
практическом (или, в качестве синонима, практикуме).
Лекции необходимы для закрепления на практике положений теоретического курса. В качестве инструмента используется операционная система UNIX.
Практикум начинается с введения и ознакомления с ОС
UNIX. Дается информация о системных вызовах и роли
Рисунок 2. Курс «Основы операционных систем. Практикум» (Академия Intel)
80
декабрь 2015 системный администратор
Карьера/Образование
рейтинг
библиотеки libc, разбираются понятия login и password, показывается работа команд pwd, man, cd, ls, cat, cp, rm, mkdir,
mv, ed, vi, mc, изучаются системные вызовы getuid () и getgid
(). В заключение первой лекции слушатели узнают о компиляции программ на C и их запуске в ОС UNIX.
Следующая тема – процессы. Речь идет о процессе
и его контексте, идентификации, иерархии процессов, рассматриваются системные вызовы getppid () и getpid (), показан пример написания программы с их использованием,
уделено внимание и системному вызову fork (), показано,
как создать процесс в ОС UNIX, а также уделено внимание
системному вызову exit (), рассмотрены параметры main ()
и изменение пользовательского контекста процесса.
После создания и завершения процессов можно переходить к изучению их взаимодействия на практике. В частности, для ОС UNIX, через pipe и FIFO. Изучается работа
с системными вызовами open(), close(), read(), write(), pipe(),
mknod(), mkfifo(). Помимо основной темы взаимодействия
процессов, авторы затрагивают сопутствующие: работа
с файлами с помощью системных вызовов и стандартной
библиотеки ввода-вывода, файловый дескриптор и т.п.
Следующая лекция посвящена средствам System V IPC,
работе с разделяемой памятью в UNIX, а также нитям исполнения. Слушатели узнают о преимуществах и недостатках потокового обмена данными, получат представление
о System V IPC (понятие, адресация и т.п.). Узнают о реализации разделяемой памяти в UNIX, познакомятся с системными вызовами shmget(), shmat(), shmdt(), командами
ipc и ipcrm. Изучая нити исполнения, рассмотрят такие
функции, как pthread_self(), pthread_create(), pthread_exit(),
pthread_join(), а также идентификатор нити исполнения
и ее создание и завершение.
Следующие лекции посвящены семафорам и очереди
сообщений в UNIX. Семафоры представлены как средство
синхронизации процессов, а очереди сообщений – как средство их синхронизации и связи. Дается представление
о таких системных вызовах, как semget(), semop(), semctl(),
msgget(), msgsnd(), msgrcv(), msgctl().
Организация и работа с файловыми системами – тематика последних двух лекций. Именно в них исследуются
логическая структура файловой системы и типы файлов
операционной системы UNIX, соответствующие понятия (индексный узел – inode, суперблок и т.п.) и системные вызовы stat(), fstat(), lstat(), lseek(), O_APPEND, ln, link(), symlink(),
unlink(), mmap(), munmap(). Отдельное внимание уделено
вводу-выводу, прерываниям и сигналам.
Интерфейс текстовых курсов Интернет-университета информационных технологий был описан и оценен выше. Поэтому просто отметим, что присваиваем максимальный балл.
Как и теоретический курс, данный снабжен богатыми
иллюстрациями (рисунки, схемы). Цветом выделяется код,
что позволяет ему не сливаться с остальным текстом лекции. Ставим максимальный балл.
О сертификации курсов проекта Intuit.ru также было сказано выше.
Основы современных операционных систем
Интернет-университет информационных технологий предлагает для изучения еще один курс, посвященный основам
Таблица 3. Рейтинг курса «Основы современных операционных систем» (Академия
Microsoft)
Оценка
Коэффициент
«Содержание» (С)
Итоговый
балл
Содержание
5
5
25
Интерфейс
5
4
20
Иллюстративный
материал
5
3
15
Сертификация
4
3
12
72
Рисунок 3. Курс «Основы современных операционных систем» (Академия Microsoft)
системный администратор декабрь 2015
81
Карьера/Образование
рейтинг
операционных систем и доступный, как показано на рис. 3,
в рамках Академии Microsoft [2]. Его целевая аудитория – студенты младших курсов, специализирующиеся на информационных технологиях. Особенность материалов, предлагаемых для изучения, состоит в том, что автор аккумулировал
при их подготовке свой 35-летний опыт использования различных операционных систем.
В первой лекции вводится понятие ОС, дается представление о целях ее работы и приводится классификация
компьютерных систем. Вторая лекция завершает введение
в мир операционных систем изложением истории их развития, как отечественных (ОС ДИСПАК, ОС «Эльбрус» и другие), так и зарубежных. Также уделено внимание и особенностям функционирования тех или иных ОС в различных
режимах: пакетный, мультипрограммирование, разделение
времени.
В последующих лекциях рассматриваются особенности
операционных систем применительно к различным классам
компьютерных систем, а также ОС для облачных вычислений. Уделяется внимание и архитектурам как компьютерной
системы, так и ОС.
После этого осуществляется переход к обзору функций
ОС (управление памятью, файлами, процессами, сервисами ОС, сетями, командными интерпретаторами, системными
Таблица 4. Рейтинг курса «Операционные системы» (МГТУ им. Н.Э. Баумана)
Оценка
Коэффициент
«Содержание» (С)
Итоговый
балл
Содержание
5
5
25
Интерфейс
5
4
20
Иллюстративный
материал
5
3
15
Сертификация
0
3
0
60
вызовами) и изучению методов проектирования и реализации ОС (уровни абстракции; архитектура микроядра; виртуальные машины; цели проектирования и разработки ОС
как с точки зрения пользователей, так и с точки зрения разработчиков и др.).
Следующая большая тема, которой отведено несколько
лекций, – это процессы. В частности, рассмотрено управление ими, планирование, диспетчеризация. Продолжая
изучение, слушатели узнают и о методах взаимодействия
процессов, потоках и многопоточном выполнении программ,
методах синхронизации процессов.
В двух последующих лекциях дается представление о тупиках, методах их предотвращения и обнаружения, алгоритме банкира.
За ними вновь следует большая тема, которая посвящена
памяти. В частности, предметом рассмотрения становятся
такие проблемы, как управление памятью, страничная организация памяти, сегментная организация памяти, виртуальная память. В целом это большой и интересный блок.
Системы файлов, VFS, реализация файловых систем,
NFS, система ввода-вывода – это следующие проблемы,
которые раскрывает слушателям автор. Есть и особенности, которые он привносит в изложение материала исходя
из своего богатого опыта. Например, рассказывая об отличиях файловых систем в ОС MULTICS и ОС «Эльбрус»
от файловых систем в ОС для ПЭВМ.
Сетям и сетевым протоколам, а также безопасности сетей и ОС посвящены несколько следующих лекций. А затем осуществляется переход к рассмотрению архитектуры
и возможностей операционных систем Linux и Windows.
Среди специфических тем, которые получили освящение:
Microsoft Shared Source Initiative, открытое ядро Windows
Research Kernel, Windows Mobile, Windows Azure.
Завершает лекции рассмотрение перспектив операционных систем и сетей.
Самостоятельные работы, включенные в курс, позволяют
получить практические навыки в работе с ОС. В частности,
Рисунок 4. Курс «Операционные системы» (МГТУ им. Н.Э. Баумана)
82
декабрь 2015 системный администратор
Карьера/Образование
рейтинг
например, с Windows Azure или Windows Research Kernel,
а также Linux.
Курс производит хорошее впечатление, в нем теория органично сочетается с практикой. Он будет полезен всем тем,
кто интересуется ОС, их историей. Тем более если принять
во внимание знания и опыт автора.
Оценка интерфейса, иллюстраций и сертификации текстовых курсов Интернет-университета информационных
технологий была дана выше.
Операционные системы
Алексей Брагин – лидер проекта ReactOS, как показано
на рис. 4, разместил у себя на канале в Youtube.com курс
лекций, посвященный операционным системам. Он был прочитан в МГТУ им. Н.Э. Баумана. Особенность курса состоит
в том, что он состоит из двух частей – теоретической и практической.
Начинает автор с введения в операционные системы:
понятие, предназначение и т.п. Рассказывает об истории
и эволюции ОС, уделяет внимание последовательному выполнению, пакетной обработке, системам разделения времени, а затем переходит к изложению материала о современных ОС.
Вторая и третья лекции посвящены проблеме архитектуры
ОС. В частности, слушатели узнают о проектировании ОС,
менеджере ресурсов (ОС как менеджер ресурсов и т.п.), системной инфраструктуре, сервисах ОС, основных достижения в разработке операционных систем (многозадачность,
концепции менеджеров в ОС и т.п.), процессах, управлении
процессами, управлении памятью, страничной и виртуальной
памяти, кэшировании, управлении вводом-выводом. В свою
очередь, в третьей лекции раскрываются такие проблемы,
как системный вызовы, архитектура современных ОС (микроядро, многопоточность, симметричная мультипроцессорность, виртуализация и т.п.), многопроцессорность.
Вслед за этим автор предлагает изучить процессы
и потоки. В частности, вводится понятие процесса, дается
представление о его составе, образе (выделенное место в памяти), структурах управления процессом, Process
Control Block, диспетчеризации, модели состояний процесса, управлении и планировании процессов, создании и иерархии процессов (в Windows и UNIX), переключении между
процессами. Затем вводится понятие потока (нити), раскрывается их предназначение. Завершает лекцию рассмотрение параллелизма, соотношения процессов и потоков (процессы – контейнеры, в которых выполняются потоки).
Следующие лекции посвящены остальным основным составляющим ОС: синхронизации, планированию процессов,
управлению памятью. Отметим некоторые особенности.
Подробное рассмотрение получили критические секции
(сопровождаются примерами), мониторы и Java. Осуществляется практика в СУБД (Microsoft SQL Server и ситуация
взаимной блокировки, ее обнаружение) и в ОС (взаимные
блокировки). Автор делает вывод о том, что на практике
фундаментально проблема избегания тупиков в ядрах ОС
не решается. Среди других особенностей указанных тем –
рассмотрение аппаратной поддержки виртуальной памяти,
эволюция управления памятью.
Две заключительные большие темы – Ядро Windows NT
и ReactOS: NT-совместимая ОС. Автор дает представление
системный администратор декабрь 2015
о ядре Windows NT, объясняет необходимость изучения существующих архитектур ОС, рассказывает об истории развития NT, режиме пользователя NT, режиме ядра NT и др.
Далее автор переходит к ReactOS. Дает представление
о проекте, архитектуре этой ОС, ее использовании в учебных и научных целях.
На Youtube.com курс доступен в виде плей-листа. Это облегчает навигацию по лекциям, т.е. позволяет переходить
из текущей в любую другую, которая необходима. Это повышает удобство освоения и восприятия курса. Таким образом, поскольку это единственный видеокурс в нашем
рейтинге и он размещен на одном из популярных видеосервисов, то и за интерфейс – максимальный балл.
Видеолекции сопровождаются демонстрацией презентаций, на которых присутствуют рисунки, во время
лекции автор рисует схемы, производит демонстрацию
работы программы и т.д. В свою очередь, он разместил
на портале презентации к семи первым лекциям на портале
Slideshare.net [3]. Таким образом, за иллюстративный материал – максимальный балл.
А вот возможность получить сертификат после успешного прохождения курса не предоставляется.
Курс интересный, специфичный в силу личности автора-разработчика, лидера проекта ReactOS. Автор строит
материалы лекций на примерах реализации тех или иных
составляющих различных ОС (Windows, Linux и ReactOS).
Сочетание, которое не встречается в прочих курсах рейтинга. В силу этого лекции могут быть полезны всем, кто специализируется на операционных системах.
Итак, три текстовых курса Интернет-университета информационных технологий стали лидерами рейтинга. Это объясняется доступностью сертификации. А вот по содержанию
и остальным параметрам все курсы набрали максимальное
количество баллов. В то же время, к сожалению, даже лидеры рейтинга не получили максимальный балл за сертификацию. EOF
[1] Академия Intel на портале Intuit.ru – http://www.intuit.ru/academies/
companiesn/41/info.
[2] Академия Microsoft на портале Intuit.ru – http://www.intuit.ru/
academies/companiesn/42/info.
[3] Презентация Алексея Брагина к курсу «Операционные системы» на портале Slideshare.net – http://www.slideshare.net/
AlekseyBragin.
Ключевые слова: операционные системы, рейтинг, курсы.
Таблица 5. Итоговый рейтинг курсов
Курс
Итоговый
балл
Основы операционных систем (Академия Intel)
72
Основы операционных систем. Практикум (Академия Intel)
72
Основы современных операционных систем (Академия
Microsoft)
72
Операционные системы (МГТУ им. Н.Э. Баумана)
60
83
Карьера/Образование
пятая пара
Визитка
АЛЕКСЕЙ ВТОРНИКОВ,
ЗАО КБ «Ростовский Универсальный», ведущий программист, pdp8dec@gmail.com
Трудный путь наверх
Вам нравится решать задачи? Вероятный ответ: «смотря какие». А ведь работа
программиста – это как раз решение задач
«Потому, что он существует»
Мне кажется очевидным, что только решение сложных задач способно поднять профессиональный уровень программиста. Если программист избегает таких задач – это скорее
всего говорит о том, что великое ему не по плечу. Конечно,
каждый решает сам, к чему стоит стремиться; большинство
практически лишено профессиональных амбиций и довольствуется пусть рутинной, но спокойной и стабильной работой. Но некоторым чудакам этого мало.
Однажды журналист из The New York Times задал Джорджу Ли Мэллори (английский альпинист, погибший при попытке подняться на Эверест в 1924 году) вопрос: «Зачем
вы туда лезете?» Ответ был и простым и гордым: «Потому,
что он существует».
Упражнения, задачи, проблемы
В своем «Искусстве программирования» Дональд Кнут приводит следующее высказывание математика Ричарда Беллмана: «Если вы можете решить задачу, значит, это упражнение; в противном случае это научная проблема».
И это действительно так. Простая задача может оказаться почти непреодолимой для новичка, но пустяком для мастера. С другой стороны, действительно сложная задача
проскочит мимо сознания дилетанта, но заставит оцепенеть
профессионала.
Грубо говоря, все задачи можно разделить на три категории:
> Задачи для проверки (например, синтаксических конструкций языка программирования). Это даже не задачи,
а так – упражнения.
> Задачи, требующие умения применить полученные
знания и для закрепления навыков (скажем, сортировка, обход деревьев и т.п.).
> Сложные задачи (которые, вероятно, и можно назвать
проблемами).
Первые две категории я далее обсуждать не буду: они –
необходимая часть процесса обучения и становления профессионала. Их надо уметь решать, и точка. Может быть,
84
преодолевая отвращение к задачникам, но надо. Лучше поговорим о проблемах.
О проблемах
Все-таки какие задачи можно считать проблемами? Вероятно, те, что либо еще не решены, либо решены частично, либо решены плохо («плохо» означает, что решение
не удовлетворяет требованиям скорости, затратам памяти
или предполагает существенные ограничения на объем обрабатываемых данных).
Вот, например, древняя настольная игра го (она очень
распространена в Китае, Японии и Корее, но достаточно
давно в нее успешно играют и европейцы). Игровое поле
представляет собой расчерченную на клетки горизонтальными и вертикальными линиями доску (обычно размером 19*19, но можно и меньше). Играют два соперника. Игра
заключается в установке фишек (их в го называют «камни»)
на пересечениях линий. Цель игры – контроль за территорией и пленение вражеских камней. При всей простоте правил – буквально полстраницы – го успешно сопротивляется
всем попыткам создать компьютерную программу, играющую хотя бы в силу среднего любителя. Го в отличие от шахмат или шашек пока не поддается счету – в ней эти методы
работают плохо. В го есть что-то такое, что никак не вписывается в имеющиеся методы решения игровых задач.
Разумеется, пример с го относится к «высшему пилотажу» и не слишком показателен. Но важно подчеркнуть то,
что при решении проблем необходимо привлекать не только
технические навыки, но и нечто такое, что называется интеллектом. Вот небольшие примеры, которые иллюстрируют эту мысль.
Пример 1: взвешивание монет
Имеется восемь монет одинакового достоинства, но одна
монета тяжелее других. Кроме того, есть весы с двумя чашами. Какое минимальное число взвешиваний необходимо
для того, чтобы найти самую тяжелую монету?
Подумайте пару минут, прежде чем читать дальше. Решили? Прекрасно!
декабрь 2015 системный администратор
пятая пара
Подсказки для тех, кто не решил.
> Подсказка 1: пусть имеется три монеты и одна из них
тяжелее других. Какое количество взвешиваний необходимо для определения самой тяжелой монеты?
> Подсказка 2: ну сосредоточьтесь, пожалуйста, больше
я подсказывать не могу!
> Подсказка 3: ладно, пожалею тех, кто так и не решил, –
для нахождения тяжелой монеты из восьми достаточно
двух взвешиваний. Поняли? Ну, если и теперь не поняли,
то задумайтесь – может, стоит сменить профессию?
Пример 2: площадь поверхности тора
Тор – это объемная геометрическая фигура в форме бублика. Всем известные примеры – обруч, камера автомобильной шины, пластиковое кольцо детской пирамидки или резиновый эспандер для тренировки мышц запястья и кисти.
Некоторое подобие тора легко изготовить из пластилина,
теста или глины. А теперь посмотрите внимательно на рисунок тора и ответьте на вопрос: чему равна площадь поверхности тора?
Я неоднократно задавал этот вопрос разным людям,
в том числе математикам. Многие просто растерянно пожимали плечами и отказывались решать, даже не пытаясь подумать. Математики же часто начинали с того, что тут надо
применить математический анализ. Когда я говорил, что задача решается и без этих сложностей, то решение обычно,
хотя и не сразу, находили почти все. Подумайте и вы.
Решение и просто, и изящно. Помните, я просил внимательно посмотреть на рисунок? Разрежьте тор вдоль одной
из поперечных (малых) окружностей и распрямите то, что получилось в трубку. А теперь разрежьте полученную трубку
вдоль образующей (большая синяя окружность на рисунке).
Что получится? Правильно – прямоугольник! Длина каждой
стороны этого прямоугольника равна длине соответствующей окружности. А дальше – элементарная арифметика
(окончательный ответ я не привожу, найдите его сами, а потом сверьтесь, например, в интернете).
Являются ли приведенные примеры проблемами? Для кого
как. Но в обоих случаях задачи были из разряда нестандартных; для их решения потребовалось выйти (хотя и недалеко)
за пределы привычного.
Три задачи
Теперь давайте рассмотрим еще три задачи. Первую мы решим вместе, а вот вторая и третья останутся без решений –
их решение легко отыскать в интернете. Кроме того, мне
не хочется лишать читателя удовольствия подумать самостоятельно.
Карьера/Образование
> наполнить сосуд на 7 л, из него наполнить сосуд на 5 л;
> опорожнить сосуд на 5 л, перелить в сосуд на 5 л остаток воды из сосуда на 7 л (теперь сосуд на 7 л пуст,
а в сосуде на 5 л содержится 4 л воды);
> наполнить сосуд на 7 л, из него наполнить сосуд на 5 л;
> опорожнить сосуд на 5 л, перелить в сосуд на 5 л воду
из сосуда на 7 л (теперь в сосуде на 7 л остался ровно 1 л воды).
А теперь главный вопрос: какой минимальный объем
воды можно отмерить, имея два сосуда разной емкости (емкости, разумеется, должны выражаться целыми числами)?
Действительно сложная задача
проскочит мимо сознания
дилетанта, но заставит
оцепенеть профессионала
Например, какой минимальный объем воды можно отмерить, имея сосуды на 8 и 5 л и т.д.?
Вернемся к решению задачи с сосудами на 5 и 7 л. Подсчитаем количество наполнений каждого из сосудов. Должно получиться вот что: сосуд на 7 л наполнялся три раза,
а сосуд на 5 л наполнялся четыре раза. Почти очевидным
становится уравнение:
(7*3) – (5*4) = 1
или в более общем виде:
(A*M) – (B*N) = 1
где A и B – емкости сосудов, а M и N – количество наполнений каждого из них.
Уравнения такого вида называются «уравнениями
первого порядка с двумя неизвестными». Для сосудов
на A = 8 л и B = 5 л уравнение приобретает вид:
Рисунок 1. Чему равна площадь поверхности тора
Из пустого в порожнее
Все, вероятно, сталкивались с задачами такого типа:
Имеется два сосуда; емкость первого – 7 л, емкость второго – 5 л. Кроме того, есть неисчерпаемый источник воды (например, река или море). Нужно отмерить ровно 1 л воды.
Подумайте несколько минут. Я почти уверен, что вам удалось решить эту задачу. На всякий случай вот решение:
> наполнить сосуд на 7 л, из него наполнить сосуд на 5 л;
> опорожнить сосуд на 5 л, перелить в сосуд на 5 л остаток воды из сосуда на 7 л (теперь сосуд на 7 л пуст,
а в сосуде на 5 л содержится 2 л воды);
системный администратор декабрь 2015
85
Карьера/Образование
(8*M) – (5*N) = 1
Можно ли подобрать такие M и N, чтобы уравнение стало
истинным? Можно: M = 2, N = 3 (16 – 15 = 1).
А что для сосудов на 9 и 5 л? Ответ: M = 4, N = 7.
А теперь пусть A = 4 л и B = 2 л. Нужно решить уравнение:
(4*M) – (2*N) = 1
Получилось (напоминаем, решение должно быть только
целочисленным)? Нет, не получилось. Вот два литра можно, а один – никак не получается. Аналогично для сосудов
на 6 и 4 л. Что-то знакомое, но вот что...
Присмотритесь повнимательнее к парам (7, 5), (8, 5),
(9, 5), для которых можно отмерить точно 1 л воды. Оба числа в каждой паре взаимно просты, т.е. имеют общим делителем единственное число – как раз ту самую единицу. Более
того, эта единица – наибольший общий делитель.
Для пар (4, 2) и (6, 4) наибольший общий делитель равен 2. Поэтому с их помощью 2 л отмерить можно, а вот 1 л –
никак.
Все становится на свои места, и благодарить за это
мы должны одного древнего грека, жившего примерно 2300 лет назад. Проницательный читатель, вероятно, уже
догадался, что речь идет о Евклиде и его алгоритме нахождения наибольшего общего делителя (НОД). Так легкомысленная задачка о переливаниях воды подвела нас к одной
из древнейших и красивейших дисциплин – теории чисел.
Алгоритм Евклида для нахождения НОД – один из краеугольных камней этой теории (за подробностями обратитесь к библиографии в конце статьи).
Напоследок, простой вопрос для самопроверки: чему равен НОД (6501, 528), т.е какое минимальное количество воды
можно отмерить, имея сосуды соответствующих объемов?
Выше мы несколько раз встретились с уравнениями первого порядка с двумя неизвестными.
Задача для любознательных: напишите программу, подбирающую пару чисел M и N в уравнении (A*M) –
(B*N) = 1 при заданных A и B. Если такой пары подобрать
нельзя, то программа должна вывести сообщение и остановиться.
Задача о старушках
Эту задачу в детстве предложил учитель математики своему
ученику – нашему соотечественнику, выдающемуся математику В.И. Арнольду (1937-2010). Поверьте, это настоящий
шедевр.
Из пункта A в пункт B и из пункта B в пункт A одновременно на рассвете и по одной дороге вышли навстречу друг
другу две старушки. Они встретились в полдень, но не остановились, а продолжили свой путь. Первая старушка пришла в пункт B в 16 часов, а вторая пришла в пункт A в 21 час.
В котором часу был рассвет (скорости каждой из старушек
оставались постоянными в течение всего пути)?
Задача о старушках по форме напоминает унылые
школьные задачки о трубах, бассейнах и землекопах,
но, однако, она далеко не так проста, как может показаться. Если вы справитесь с задачей, скажем, за час, то поздравьте себя – у вас, несомненно, способности к математике (кстати, по признанию В.И. Арнольда, он смог решить
86
пятая пара
задачу только после многих часов упорных размышлений,
правда, тогда ему было всего около 12 лет).
Задача Иосифа
Следующая задача носит несколько названий (из которых
самое известное «задача Иосифа») и несколько модификаций. Вот один из вариантов:
Согласно древней легенде, отряд из 40 израильтян попал
в окружение к римлянам. Не желая сдаваться врагу, воины
стали в круг и договорились последовательно убивать каждого третьего воина, пока в живых не останутся два последних.
Эти последние должны будут убить друг друга. Иосиф быстро
рассчитал, какое место ему нужно занять в круге. После того
как остались два воина (один из них – Иосиф), они сдались
в плен (благодаря чему, собственно, история и стала известна). На какое место должен был стать Иосиф, чтобы выжить?
Задачу нужно постараться решить в общем виде,
т.е. не ограничиваясь 40 воинами и умерщвлением каждого
третьего.
Буду откровенен: это весьма сложная задача, хотя рекурсивная программа, решающая эту задачу, на удивление коротка. Я приведу эту программу (на Java) без комментариев,
но лучше не надейтесь, что это вам как-то поможет – скорее
наоборот:
public class Josephus {
public Josephus () {
int q = 40, delta = 3;
System.out.println (josephus (q, delta));
}
int josephus (int n, int k) {
return josephus (n, k, 1);
}
int josephus (int n, int k, int startingPoint) {
if (n == 1) return 1;
int newSp = (startingPoint + k - 2) % n + 1;
int survivor = josephus (n - 1, k, newSp);
if (survivor < newSp) {
return survivor;
} else {
return survivor + 1;
}
}
public static void main (String [] args) {
new Josephus ();
}
}
В целочисленных переменных q и delta хранятся, соответственно, общее число воинов и порядок их пересчета;
можете заменить их другими значениями для проверки своего решения, если, конечно, вы его найдете.
Очевидно, что две последние задачи, действительно,
сложные. Если вам эти задачи незнакомы, то вы можете потратить много времени, пытаясь их решить. Так что, с моей
точки зрения, это, действительно, проблемы. Чтобы их решить, придется хорошенько подумать.
Что дальше?
Конечно, не стоило бы приводить все эти задачи и проблемы
просто так, без далеко идущих целей. Я просто хотел подготовить читателя к тому, что в дальнейшем нам встретятся понастоящему большие и сложные задачи, которые любознательный читатель может попробовать решить – т.е. написать
соответствующие программы.
декабрь 2015 системный администратор
пятая пара
Карьера/Образование
Отбирая эти задачи, я ставил своей целью не просто рассказать о тех или иных сложных проблемах. Все эти задачи
до единой носят сугубо прикладной характер. Это первое,
что их роднит. Второе, что между ними общего, – все они
для своего решения требуют привлечения математики. Нет,
не пугайтесь – никаких продвинутых разделов вам изучать
не придется (хотя, честно говоря, лучше бы с ними познакомиться – здесь найдется немало интересного и удивительного). Вся математика, которая потребуется, не выходит
за пределы школьного курса алгебры. Но, как вы, наверное,
уже поняли, даже школьная математика может оказаться
коварной.
Вот примерный список задач (нет, наверное, все-таки
проблем), которые мы рассмотрим в следующих публикациях (хотя и необязательно в этой же последовательности):
> диаграммы Вороного;
> планарность графов;
> расстояние Левенштейна;
> восстановление изображений.
Восстановление изображений
Возможно, будут и другие задачи, но пока я остановился
на этом списке. Повторюсь, что все без исключения задачи
имеют прикладное значение. В доказательство этого ниже
приведено краткое и довольно грубое описание каждой
из них.
Теория чисел и алгоритм Евклида
Диаграммы Вороного
Это задача определения близости точек на плоскости
или в пространстве. Диаграммы Вороного используются
в планировании городов, проектировании сложных производств, службах доставки, логистике и прочее, т.е. везде, где нужно оптимизировать доступность, стоимость
или время. Мы ограничимся обсуждением диаграмм Вороного на плоскости.
Планарность графов
Граф – это множество вершин и соединяющих их ребер (дуг,
ветвей). Будем рассматривать только графы на плоскости.
Граф называется планарным, если никакие два его ребра
не пересекаются.
Пусть дан произвольный граф (т.е. список вершин и множество соединяющих вершины ребер). Задача: является ли
этот граф планарным?
Все, вероятно, видели печатные платы. Планарность графов в этом контексте – это поиск решения следующей задачи: можно ли соединить произвольные точки на плате проводником (дорожкой) так, чтобы этот проводник не пересекал
других? Если это сделать невозможно, то придется делать
либо многослойные платы, либо использовать дополнительные соединительные провода. Практическая задача? Несомненно.
Знаете ли вы, что такое японский кроссворд? Ну, разумеется! В японском кроссворде изображения закодированы числами на границах области изображения. Задача играющего – восстановить изображение по этим числам.
А как томограф воссоздает изображение, знаете? Входными данными томографа являются данные, полученные
от просвечивания тканей и органов тонкими пучками частиц (всякое излучение, в т.ч. рентгеновское, – это согласно
квантовой механике и волна, и частица). И хотя японские
кроссворды и томографы друг другу не аналогичны, но коечто общее в них есть. Разве не практическая задача? Куда
уж практичнее.
Что почитать?
> Игра го – http://ru.wikipedia.org/wiki/Го.
> По ссылке найдете великолепный учебник для начинающих игроков го, впервые опубликованный в журнале
«Наука и жизнь» в 1975 году – http://go.hobby.ru.
Многие книги по теории чисел – это устрашающего содержания тексты, до предела насыщенные совершенно
зубодробительной математикой, но, к счастью, есть прекрасные введения, которые я с удовольствием рекомендую читателю (книги расположены в порядке возрастания
сложности):
> Г. Дэвенпорт «Высшая арифметика (введение в теорию
чисел)». Вероятно, лучшее введение в предмет. Начните с этой книги, чтобы почувствовать вкус к предмету.
> И.М. Виноградов «Курс теории чисел». Стандартный,
ясный, хотя и весьма лаконичный университетский
учебник, написанный выдающимся отечественным математиком. Много упражнений с решениями.
> П.Г.Л. Дирихле «Лекции по теории чисел». Классический текст. Автор – один из крупнейших математиков
XIX века. Книга написана очень ясно. Обязательна
для всех, кто действительно хочет понять, что такое теория чисел, и готов для этого потрудиться.
Все эти книги неоднократно переиздавались различными издательствами, так что воспользуйтесь теми изданиями,
какие найдете.
Теория графов
Здесь я не буду оригинальничать и просто приведу список
некоторых канонических книг:
> Р. Уилсон «Введение в теорию графов»
> Ф. Харари «Теория графов»
> О. Оре «Теория графов»
> Р. Басакер, Т. Саати «Конечные графы и сети»
Расстояние Левенштейна
Даны две строки. Какое минимальное количество преобразований (т.е. вставки, удаления и замены символов) нужно выполнить, чтобы преобразовать одну строку в другую?
Помните детскую задачу сделать из мухи слона? Вот примерно об этом и пойдет речь. Сферы использования – поисковые системы, распознавание и исправление текста, биоинформатика.
системный администратор декабрь 2015
Давайте пока на этом и остановимся. Вскоре нам предстоит
большая, сложная, но интересная работа. И напоследок маленький совет: если будет время и желание, то восстановите
в памяти основные понятия теории графов – пригодится! EOF
Ключевые слова: упражнения, задачи и проблемы, алгоритм Евклида, теория чисел, теория графов.
87
Карьера/Образование
ретроспектива
Визитка
ВЛАДИМИР ГАКОВ, писатель-фантаст, лектор. Окончил физфак МГУ. Работал в НИИ. С 1984 г. на творческой работе.
В 1990-1991 гг. – Associate Professor, Central Michigan University. С 2003 г. преподает в Академии народного хозяйства.
Автор 8 книг и более 1000 публикаций
Россия-ТВ. Made in USA
Часть 2
Как «техническая игрушка» превратилась в большой бизнес и большую политику
Продолжение. Начало – см. №11 за 2015 г.
Краткое содержание «первой серии». Телевидение
как трансляция изображения вместе со звуковым сигналом
было создано в начале прошлого века учеными и изобретателями разных стран. Но несомненный приоритет в изобретении одного из важнейших средств массовой информации
и соответствующей индустрии принадлежит четверке наших соотечественников, первый из которых остался на родине и сгинул, а трое других эмигрировали и завершили
создание ТВ в Америке. Их имена – Борис Розинг, Владимир
Зворыкин, Дэвид Сарнов и Григорий Оглоблинский. Также
было рассказано о первых шагах на пути превращения
новой технической «игрушки»
в большой бизнес и большую
политику. Подробнее об этом –
в предлагаемой вниманию читателей «второй серии».
Нос в нос с Америкой
Что же происходило на исторической родине «великолепной
четверки» в их отсутствие?
А происходили события, посвоему удивительные и выбивавшиеся из привычного ряда,
с легкой руки Никиты Хрущева
превратившегося в идеологическое клише. Советский руковоЧарльз Дженкинс
дитель, как известно, требовал
во всех областях «догнать и перегнать Америку». Во всех – кроме телевидения.
Потому что как раз к нему-то – и как к технической новинке, и как к новому СМИ – на родине создателей телевидения с самого начала отнеслись предельно серьезно.
Почему, объяснять, полагаю, не нужно: по тем же причинам,
что и в довоенной Германии (см. «первую серию») – вторая
ипостась (СМИ) была донельзя важна новому общественному строю, одной из основ которого была государственная
пропаганда. Но если говорить о технической стороне дела,
88
то – без всякого «квасного патриотизма» – следует отметить, что раннее советское телевидение долгое время «шло
вровень» с передовым западным.
Начать с того, что менее чем за два месяца до получения Зворыкиным патента на иконоскоп аналогичную заявку в СССР подал инженер Семен Исидорович Катаев
(1904-1991), впоследствии один из ведущих отечественных
специалистов в этой области.
Он прожил долгую жизнь (обратите внимание на дату
смерти!) и успел многое. Еще студентом легендарного
МВТУ Катаев сделал свои первые изобретения, а затем организовал и возглавил электротехнический кружок, среди
членов которого, в частности, можно встретить фамилию будущего
ведущего специалиста в области
средств связи академика Владимира Котельникова. После окончания
института Катаев получил еще несколько патентов, среди которых
было и указанное выше авторское
свидетельство №29.865 (заявка
подана 24 сентября 1931 года, патент получен 30 апреля 1933-го).
Фактически на тот же иконоскоп,
только названный изобретателем
более лапидарно: «трубка с трехслойной мишенью и накоплением
зарядов». К моменту получения
патента Катаев не только произвел передачу изображения, но и руководил работами
по разработке соответствующего приемного устройства
(вакуумной трубки с электромагнитной фокусировкой электронного луча).
А в 1936 году произошло нечто совершенно фантастическое! Если обратить внимание на год – предшественник
печальной памяти «тридцать седьмого» – и успевшие к тому
времени раскрутиться на всю катушку тотальную шпиономанию и поиски «вредителей»… Семен Катаев на несколько месяцев отправился в служебную командировку
декабрь 2015 системный администратор
ретроспектива
в США – для обмена опытом! Где, в частности, встретился
со Зворыкиным и даже подарил тому только что вышедшую
собственную книгу «Электронно-лучевые трубки». Что мне
лично представляется самым фантастическим во всей этой
истории, так это благополучное возвращение Катаева
на родину и продолжение им работ по усовершенствованию телевидения. Не в «шарашке» какой-нибудь – в мирном
НИИ. О чем свидетельствует вышедшая накануне войны
монография ученого «Основы телевидения».
В общем, никогда не поверил бы, если бы не прочитал
вышеизложенное в уважаемой мною (пока) Википедии.
К концу войны и в первое послевоенное десятилетие Катаев отметился еще несколькими смелыми предложениями
в области телевидения, которые впоследствии были реализованы. Он первым вместе с сотрудниками предложил
рекордный на то время стандарт телевизионного вещания
на 625 строк и первым же – использование Луны в качестве пассивного ретранслятора и искусственных спутников
Земли для передач на большие расстояния. Между прочим,
сенсационным успехом советских ученых и инженеров, получивших в 1959-м снимки обратной стороны Луны, страна
также обязана разработкам Катаева, который до 1987 года
продолжал работать в Московском электротехническом институте связи на кафедре
телевидения, ныне носящей его имя.
И, хотя приоритет остался за Зворыкиным, чьи заслуги перед телевидением
не подвергали сомнению и у него на родине, этот пример доказывает, что мысль ученых разных стран двигалась параллельно.
И СССР в данном случае не стал исключением.
Раннее отечественное телевидение
было, по сути, «передачей изображения
по радио», и на первых порах опытное
вещание из Москвы не всегда сопровождалось звуком. Первые регулярные
«озвученные» передачи начались в деУильям Пейли
кабре 1934 года, и уже тогда пока еще
не массовый зритель уже мог смотреть
по первым примитивным «ящикам» и новости, и развлекательные (в основном музыкальные) передачи, даже редкие
кинофильмы.
Своим первым телецентром наша страна обзавелась уже
к концу последнего предвоенного десятилетия. Естественно, возведен первый телецентр был в столице – на Шаболовке, по соседству со знаменитой радиобашней Шухова.
На ней установили специальную передающую антенну, созданную отечественными специалистами, что же касается
всего прочего оборудования, то большая часть его была закуплена за рубежом. Отгадайте с одного раза, у кого именно… Правильно, у того же Дэвида Сарнова (подробнее о котором речь пойдет ниже)!
В марте 1938 года состоялась первая пробная передача
из единственной на то время студии, а спустя год передачи
пошли в эфир регулярно.
На останках Останкино
В годы войны, разумеется, стране было не до «телека»
(как прежде всего средства развлечения – до средства
системный администратор декабрь 2015
Карьера/Образование
массовой пропаганды еще не хватало той самой массовости), хотя научно-технические работы по усовершенствованию телевизионной техники не прекращались. Уже в 1941м советские специалисты довели стандарт развертки
до американских 525 строк, а тремя годами позже «перегнали-таки Америку», добившись, как уже было сказано выше,
рекордных 625. На этот стандарт сразу же после войны был
переведен Московский телецентр – при помощи специалистов закрытого КБ в подмосковном Фрязино и приданных
им в помощь немецких коллег, доставленных в СССР из оккупированной Германии.
Первая телепередача в новом стандарте состоялась
в сентябре 1948 года, а позже его приняли другие европейские страны – с той же частотой питания в сети (50 Гц). А начиная со следующего года советские телезрители смотрели
передачи на первом же отечественном серийном телевизоре «КВН-49» (о нем – см. другой материал этого номера
«СА» – В.Г.).
До появления спутников связи сигнал из столицы в другие населенные пункты шел по кабельным или радиорелейным линиям связи. Однако в отдельных случаях приходилось
прибегать к более хитрым средствам – например, репортажи с Московского фестиваля 1957 года
передавались в Ленинград, Смоленск,
Киев и Минск с помощью ретрансляторов, установленных на самолетах.
Сейчас
кажется
невероятным,
но до конца 1950-х годов все отечественные телепередачи шли в прямом эфире
просто потому, что не существовало видеозаписи как таковой. (История того,
как первый «видак» был изобретен в середине 1950-х в Штатах еще одним эмигрантом из России и как это изобретение пришло на родину изобретателя, заслуживает
отдельного разговора.) Лишь 20 февраля 1960 года к Центральному дому звукозаписи на улице Качалова подъехала машина передвижной телевизионной станции
(ПТС), и концерт, который вела популярная
телеведущая Светлана Жильцова, был впервые записан
на видеомагнитофон. После чего запись была передана
на Шаболовку и оттуда сразу же пошла в эфир.
Тогда мы отставали от Запада всего на четыре года –
зато (во многом благодаря этому техническому новшеству,
изобретенному «нашими» же, но – не у нас!) потом отстали на целую эпоху. С талантливыми мозгами у нас никогда
не было перебоев, а вот что касается технологий, их внедрения и серийного производства… В то время как на Западе новое СМИ превратилось в бурно развивавшийся бизнес
(как раз и обеспечивший постоянный приток новых технологических решений), у нас телевидение все последние десятилетия прошлого века оставалось исключительно государственным орудием агитации и пропаганды. Популярный
анекдот советских лет о телезрителе, обалдевшем от присутствия на всех каналах одной и той же «бровастой» личности (находит он пустой канал, а там «опер» в штатском
пальчиком грозит: «Я тебе попереключаю!»), был всего
лишь калькой с кошмарного пророчества Джорджа Оруэлла, которого у нас тогда читали немногие. Его «телескрин»,
89
Карьера/Образование
ретроспектива
позволявший промывать гражданам мозги напрямую, видедвух: если основанная в 1925-м Charles Jenkins Laboratories
ли в сладких снах и советские идеологи.
транслировала на близкие расстояния малоразличимые силуэты людей и предметов, то созданная тремя годами позже
Вероятно, последним значительным техническим прорывом советского телевидения стала постройка телеJenkins Television Corporation передавала изображения уже
башни и нового телецентра в Останкино. Идея постройки
из одного штата в другой. Правда, зрительскую аудиторию
полукилометровой бетонной «иглы» была выдвинута еще
составляли сами сотрудники компании, и никакой прибыли сей бизнес его основателю не принес. Как и другому
в 1953-м и тогда же с энтузиазмом принята только что пришедшим к власти Хрущевым. 24 октября 1967 года башня
знаменитому изобретателю, купившему компанию после
была введена в эксплуатацию, а через неделю заработал
смерти ее владельца в 1934 году, – Ли де Форесту (притом
Останкинский телецентр. С этого времени Первый канал
что он в отличие от Дженкинса обладал незаурядной предпринимательской жилкой).
стал воистину общесоюзным.
Сделать большие деньги на технической новинке первым
Менее чем за месяц до того отечественные телезрители
удалось Дэвиду Сарнову, о котором также речь шла в перполучили возможность смотреть любимые передачи в цвете – Центральное телевидение начало трансляции программ
вой части моих «телехроник». Эмигрант из России раньше других догадался, что в телебизнесе важна не только
в цветном изображении по системе SECAM. Однако подавляющее большинство населения воспользоваться этим
телевизионная техника, но и телеаудитория. Вот что – точнее, кого – следовало «изобретать» и постоянно «усоверне смогло и по-прежнему продолжало видеть мир в привычном черно-белом изображении (в том числе и в буквальном
шенствовать». В смысле – убеждать, что без телевизора
смысле). Время родных «Рубинов»
им просто не жить. А еще нужно
и «Горизонтов» еще не пришло,
было уметь защищать в суде свою
а достать импортный цветной теле«интеллектуальную
собственвизор в те годы могли единицы.
ность», бороться с конкурентами
А башня с ее популярным враза потенциального покупателя
щающимся рестораном «Седьмое
и делать еще много чего, относящего к иным технологиям – тем,
небо» превратилась в такой же
что с приставкой «бизнес». В понепреходящий символ столицы,
следнем Дэвид Сарнов преуспел,
как Кремль или Большой театр.
как никто другой.
Что она значила для всех нас, советские люди впервые в полной
Когда глава компании Radio
мере осознали в августе 1991 года,
Corporation of America (RCA) познакомился с соотечественникомкогда на всех экранах крутили «Лебединое озеро», перемежаемое
эмигрантом Владимиром Зворыкиным, работавшим над первым
повторами
пресс-конференции
«телевизором»-иконоскопом,
ГКЧП. Еще раз о значении Останкинской башни, но теперь уже
в США уже существовал поПервый московский телецентр – Шаболовка
добный
прибор,
созданный
в значении «иглы», москвичи задумались осенью 2003-го – на башне случился пожар, и трое
«местным» изобретателем Фило Фарнсуортом. Известно,
суток темного телеэкрана для многих оказались сродни
что с его работами был знаком и Зворыкин, что неизбежно привело к «конфликту патентов». Фарнсуорт подал в суд
наркотической ломке.
на RCA и даже «отвоевал» у компании Сарнова целый милНо это уже была другая страна и другое телевидение.
лион долларов (деньги по тем временам немалые). Но, пока
Ничего личного – только телебизнес
продолжались «патентные войны», ушлый Сарнов целеуЧто касается пресловутой Америки, которую во что бы
стремленно и последовательно «окучивал» растущий телето ни стало советское начальство требовало «догнать и перынок. И к моменту окончания судебных слушаний оказался
регнать», то там путь от новейшего технического изобретев итоге не проигравшим, а победителем! Потому что, потения до процветающего на его основе бизнеса был пройден
ряв тот самый миллион, уже подготовил «грядки», на которекордно быстро. Более того, желающие преуспеть на норых скоро выросли и десятки миллионов, и сотни.
вом телевизионном рынке появились… раньше самого теНапомню (подробнее об этом – см. «СА», №11), что именлевидения! Хотя, конечно, медиамагнатами никто из таких
но RCA первой продемонстрировала полностью электрон«ранних» не стал, потому что, как правило, это были те же
ную систему телевидения (во время работы нью-йоркской
изобретатели, стремившиеся «пустить в дело» свои изобреВсемирной ярмарки в 1939 году). И именно Сарнову притения, а вовсе не бизнесмены.
надлежала стопроцентно выигрышная идея первым телеВ этой связи можно вспомнить того же англичанина
сюжетом дать в эфир речь тогдашнего американского
Чарльза Дженкинса, о котором упоминалось в первой чапрезидента. А во время войны, занимая пост советника
сти данной статьи (см. «СА», №11). Перебравшись в США
по коммуникациям при генерале Эйзенхауэре – будущем
и получив лицензию на «беспроводную передачу изобрапрезиденте США, предусмотрительный Сарнов «выбил»
жений», он, вероятно, первым попытался наладить собу своего начальника… звание бригадного генерала! Как гоственный бизнес на тогда еще не существовавшем «телеворится, пустячок – а приятно. И полезно. Генеральские знарынке» – во всяком случае, формально мог считать себя
ки отличия помогли бизнесмену в деловых переговорах пооснователем первой в истории телекомпании. И даже целых
сле окончания войны – ветеран-вояка, как не уважить!
90
декабрь 2015 системный администратор
ретроспектива
Войны в эфире
Однако со временем у RCA появились более опасные конкуренты, справиться с которыми оказалось «внапряг» даже
Сарнову. А с какими-то справиться и вовсе не удалось.
Так, американский телемагнат Аллен Дюмонт (1901-1965)
начал свой личный поединок с Сарновым еще до войны,
когда первый еще работал старшим инженером в компании упомянутого выше Ли де Фореста. В 1931 году Дюмонт
уволился из De Forest Radio Company и основал свою собственную фирму, производящую различное электронное
оборудование. В том числе изобретения самого Дюмонта, среди которых были усовершенствованные катодные
трубки. Последние оказались
настолько
перспективными,
что у компании появился мощный инвестор – голливудская
киностудия-«тяжеловес»
Paramount Pictures. Благодаря
ее финансовой помощи Дюмонт
смог приступить к выпуску собственных телевизоров – прямых
конкурентов продукции RCA:
экраны телевизоров Allen B.
DuMont Laboratories имели диагональ 14 дюймов, в то время
как сарновские лишь спустя
год «дотянули» до 12 дюймов.
А сразу после окончания
войны получила лицензию
на вещание телекомпания
DuMont Television Network, ко- Один из первых советских ретрансляторов
торая использовала иную, чем
у RCA, модель телевизионного бизнеса. Как оказалось
впоследствии – более перспективную.
Если Сарнов в своей деятельности упирал в основном
на продажи телевизоров, а неизбежные в каждом новом
деле убытки от своих телевизионных проектов покрывал
за счет необычайно развитой к тому времени собственной
радиосети, то у его конкурента Дюмонта таких возможностей не было. Зато он догадался вовсю задействовать телерекламу, о преимуществах которой тогда еще догадывались
немногие. Если Сарнов через «подведомственную» ему дочернюю компанию NBC просто продавал рекламодателям
эфирное время, не контролируя содержание профинансированных рекламодателями же шоу («Заплатили – ставьте,
что хотите»), то его главный конкурент поступил по-иному.
Дюмонт стал продавать только рекламное время, а производство шоу и контроль за качеством программ оставил
за собой.
С этой целью он – с помощью той же Paramount
Pictures – наладил тесные контакты с голливудскими звездами, которые с радостью согласились вести собственные
шоу на канале Дюмонта. Благодаря налаженному процессу «взаимного опыления» уже набравшей силу киноиндустрии с только начинавшейся индустрией телевидения
самые популярные американские телешоу в первом послевоенном десятилетии появились на канале DuMont,
а не RCA.
Тем не менее с этим опасным конкурентом Дэвиду Сарнову удалось-таки справиться. Но не потому, что он переиграл
системный администратор декабрь 2015
Карьера/Образование
Дюмонта в честном бою (насколько честной может вообще
быть конкурентная борьба на рынке), а благодаря своим
связям в могущественной государственной структуре –
Федеральной комиссии по коммуникациям (FCC). Именно
она занималась выдачей всевозможных лицензий на бурно
прогрессировавшем телевизионном рынке. И она же (надо
понимать, не без участия Сарнова) неожиданно прекращала их выдачу как раз в то время и в тех случаях, когда
на рынок с очередной заявкой выходила компания Дюмонта. Так, в частности, произошло в 1952 году, когда по решению FCC внезапно было прекращено вещание в метровом
диапазоне – ударном коньке DuMont. Владельцу последней пришлось строить новые станции, работавшие
в дециметровом диапазоне,
а в то время последний был
мало востребован телевизионной аудиторией, ранее «завоеванной» DuMont.
После чего рекламодатели отвернулись от Аллена
Дюмонта, и спустя всего
три года главный конкурент
Сарнова, как говорится, сошел с дистанции.
Зато за Дюмонта владельцу RCA «отомстил» другой
конкурент, также начавший
борьбу с Сарновым еще
до войны. Только в отличие
от Сарнова Пейли родился
в семье более чем обеспеченной: его отец был крупным табачным фабрикантом. Звали его Уильямом Пейли, и происходил он также из еврейской семьи, в свое время эмигрировавшей из России, где
при рождении, естественно, получил отцовскую фамилию
Палей! (Нет, воистину, там в кого ни кинь в раннем американском телевидении – все окажутся из «наших»!).
Возможно, именно отцовские деньги позволили Пейли-младшему еще в 1927 году за полмиллиона долларов
купить некую радиосеть, переименовать ее в Columbia
Broadcasting System и превратить ее в телерадиосеть и вывести в лидеры медийного рынка не только Соединенных
Штатов, но и мира.
Именно Пейли первым внедрил в практику такие ноу-хау
современных телевизионных империй, как создание и перевод на поток «мыльных опер» (сначала в радиоэфире,
а затем в телевизионном) и переманивание у конкурентов
перспективных телеведущих. Достаточно сказать, что именно владелец CBS трудоустроил на телевидении тогдашнего
популярного голливудского актера, которого звали Рональд
Рейган… А еще Пейли умел немедленно и жестко реагировать на появление в эфире любого удачного телесериала или шоу конкурентов – тут же, не считаясь с затратами, запускал аналогичные программы на своем канале.
Все эти меры привели к появлению коммерческого телевидения, которое мы знаем. И имеем возможность ежедневно наблюдать за ним по домашнему «ящику». К счастью
или к несчастью – судить читателям. И с неизбежностью –
телезрителям. EOF
91
Наука и технологии
Жа
В.В., . . .,
П
,
Д а
С.Н., . . .,
Д а
а
В.Н., а
ш а И. ., а
а
а
а
НИУ ВШЭ
,а
а
Д а
а
, vгhКdnov@hse.ru
а
Д а
а
а
а
НИУ ВШЭ
НИУ ВШЭ
К
.
.
.
.
(№ 15-05-0029),
«
У ШЭ»
2015
[2]
(ЭК ) [3].
.
,
,
,
.
К
-
.
,
,
,
(Э
,
.
,
Э
[1],
,
1.
ЭК
-
,
-
;
,
(
3
-
-
. 1).
ЭК ,
«
)
γ (95%
99,9%
-
Э
:
.
.
-
»
-
[2]
92
-
,
).
(
. 1).
. 1,
ЭК ,
(
•
•
2
-
;
.
К
ЭК
(
:
• 1–
• 2–
• 3–
)
Э
,
ЭК
.1
,
-
[2, 3]).
-
;
декабрь 2015 системный администратор
Наука и технологии
,
,
«
,
«
,
»
Э
-
•
•
γ
Э
;
Э
,
,
-
.
).
).
;
;
,
,
-
γ
.
Э
-
-
•
-
)
-
•
:
)
.
,
-
,
(5)
.
,
,
[2]
-
.
γ,
,
Э
,
(
-
(1)
2.
К
:
γ1
–
),
. 2.
,
К
,
.
-
:
. .),
-
–
.
(2)
-
;
(
Э
–
)
:
,
n–
;N–
.
(3)
-
,
-
-
Э
,
(
,
-
,
Э
;
Э
-
-
(
γ
«
-
,
N
-
,
-6», –
-
,
:
Э
.).
«К
.
γ
;
.
(
(4)
n-
(4)
»
[2]:
χγ –
γ; χγ1 –
γ 1;
-
,
•
-
(
–
,
;
[3]
,
γn
-
[3]
(
,
(КК ),
;
Э
( γ),
(
»,
;
(γ),
-
«
:
•
•
•
•
•
»
-
Э
системный администратор декабрь 2015
,
:
-
93
Наука и технологии
1.
2.
,
.
Э .
Э ,
γ,
3.
4.
-
,
.
-
.
7.
3.
.
КК .
5.
6.
,
К
(
.γ
-
К
(
.γ
:
,
.
-
.
8.
,
9.
10.
Э .
11.
,
γ1,
Э
).
.
.
-
-
.
,
–
.γ
(
.
.
-
,
«
»
-
-
.
,
-
.
.
.
.
.
.
,
-
)–
6
-
.
» КК .
-
16.
17. К
Э
).
νЭ
Э .
12.
13.
«
14.
15.
).
(
.γ
-
. 2,
К
.2
,
γ
–
:
КК
.
(
.γ
–
)–
7
; КЭ –
-
.2
-
,
К
–
.Э
;
КК .
4.
(
.γ
)–
.2
(7)
КК
-
-
8
:
–
. .γ
(
)–
,
К
.Э
–
Э
6.
5.
94
.
:
(6)
-
-
.
;К –
,
-
(8)
КК
«GОnОral tablОs»
КК
декабрь 2015 системный администратор
Наука и технологии
.3
К
,
К
.
Э
,
(
,
(
К
).
КК ).
,
.
«
250
К -К- Ч
»
КК ,
-
,
,
К
К -К [4],
«GОnОral tablОs»
,
-
-
К . 5.
. 6.
,
КК .
, ID-
,
«GОnОral tablОs»
«Class tablОs».
«Class tablОs»
.
.7
«Class tablОs»
«
».
«TRESИФrОУ», «TRESИФvvФ», «TRESИФvФО», «TRESИ
oРr», «TRESИФorn», «TRESИФvns», «TRESИФvnm», «TRESИФorn»,
«TRESИФОФs» «TRESИФvН»
,
КК .
,
КК .
«TRESИsubРОn»
«TRESИtmn»
КК .
,
.
,
-
«GОnОral tablОs»
«LSTИEKB»
КК .
,
КК ,
ID.
«LSTИCLASS»
КК .
.
«LSTИGR»
.
ID- ,
ID.
«LSTИPDGR»
ID-
.Э
КК
.
КК .
К- Ч,
-
К -К- Ч [4]
,
.4
. 3,
,
-
.
ID-
ID-
К
,
Э
«
-
»
.
,
,
.
Д1Ж
-
-
.,
EOF
27.003-90.
.
.
Д2Ж
4.012.013-84.
.
.
7.
«Class tablОs»
Д3Ж
Д4Ж
Э :
. .,
.–
. .,
.:
, 2006.
. .
-
-
:
.–
К
:«
:
,
-
./
.
. . .
», 2012. – 565 .
,
-
,
.
Computer forecasting of durability computing
ZhКdnov V.V., Polesskiв S.N., Kulвgin V.N., LushpК I.L.
NКtionКl ReseКrch Universitв Higher School of Economics (NRU HSE)
Summary: The pКper considers the method for predicting the durКЛilitв
performКnce computing using К computer. The ЛКsic technique of forecКsting
durКЛilitв. The Кlgorithm works of КutomКtion of cКlculКting durКЛilitв. And
Кlso developed К dКtКЛКse on the chКrКcteristics of durКЛilitв. This Кrticle wКs
written Кs pКrt of К reseКrch project (№ 15-05-0029), mКde with the support of
«Science FoundКtion Higher School of Economics» in 2015.
Keywords: durКЛilitв, computer engineering, dКtКЛКses, reliКЛilitв.
системный администратор декабрь 2015
95
Зал славы «СА»
Эфир – в «КВН»
Издается с 2002 года
Привычнее читается: «В эфире – КВН»,
но в данном случае все правильно. Потому что очередной экспонат нашего
виртуального музея – первый отечественный массовый телевизор, который
назывался «КВН-49». И расшифровывалось название, конечно же, не как «Клуб
веселых и находчивых», а как аббревиатура трех фамилий создателей этого
чуда тогдашней советской техники: Кенигсон, Варшавский, Николаевский.
Народ же быстро придумал свою расшифровку: «купил, включил, не работает». Такую нелестную характеристику первый
серийный отечественный «ящик» заслужил за то, что примерно половина проданных изделий в течение гарантийного срока сдавалась в ремонт. Хотя, если говорить
об объемах продаж, аппарат с экраном 10 на 14 сантиметров и выносной стеклянной или пластиковой линзой, наполненной дистиллированной водой (для увеличения
изображения), отработал свое на зависть многим западным производителям: в различных модификациях «КВН-49» выпускался на протяжении почти двух десятилетий
(с 1949 по 1967 год). К тому же это был один из первых телевизоров в мире, работавший в рекордном на то время стандарте 625 (подробнее об этом – см. статью в этом
номере журнала).
Разработка первых советских черно-белых телевизоров с такой разверткой началась в 1946 году специалистами ленинградского Всесоюзного научно-исследовательского института телевидения (ВНИИТ) под руководством главного инженера института
А. В. Дубинина. В состав группы входили упомянутые «крестные отцы» «КВН» – В.К.
Кенигсон, Н.М. Варшавский и И.А. Николаевский. Проект получил незамысловатое название «Т-1», но уже к моменту серийного производства был переименован в «КВН»,
а чуть позже в названии появились цифры, означавшие год выпуска – 1949-й. Сначала
телевизор выпускался на Александровском радиозаводе во Владимирской области,
а позже, в связи с не стихавшим спросом, к производству «КВН» подключился с десяток предприятий в Москве, Ленинграде, Воронеже, Новгороде, Баку, Киеве и других
городах.
Для первого послевоенного десятилетия в СССР это было действительно чудо техники – безо всяких кавычек. Телевизор принимал три канала (а больше тогда и не было),
и, хотя круглый экран был невелик – всего 180 миллиметров в диаметре (это давало
размер изображения 140 на 105 миллиметров), но приставная линза, тут же окрещенная в народе «аквариумом», обеспечивала неплохую величину изображения. Единственным существенным недостатком был звук – первый массовый советский «ящик»
размером 38х49х40 см и весом около трех килограммов нещадно хрипел и издавал
трескотню (как выяснилось позже, причиной был неудачный выбор звукового тракта).
Но народ, уже привыкший к радио, на это не обращал внимание: главное – картинка!
А послушать – музыку, футбольный репортаж или выступление «первого лица» – можно было и по радиоприемнику.
Поэтому главным элементом нового чуда техники был экран. А точнее, кинескоп ЛК715А, в котором фокусировка и отклонение электронного луча производились с помощью магнитных полей. У этого экрана с увеличительным «аквариумом» (верхом остроумия тогда были беседы о том, как будут смотреться бегающие по полю футболисты
или произносивший речь с трибуны Сам на фоне беззаботно снующих туда-сюда бессловесных аквариумных рыбок…) по вечерам собирались семьи тех, кому посчастливилось обзавестись столь завидной бытовой техникой.
В общем, то была целая эпоха. И сегодня представить себе «оттепельные» шестидесятые невозможно без телевизионного «ящика» на столе в гостиной городской квартиры. Конечно, не во всяком городе, но в Москве – точно. Не забыли о такой важной
детали тогдашнего московского быта, как «КВН», и создатели двух популярных фильмов в стиле ретро: художественного «Пять вечеров» и телевизионного «Покровские
ворота». Поэтому и создатели популярнейшей телевизионной игры для «веселых и находчивых», появившейся в 1961 году и благополучно пережившей более полувека, недолго раздумывали над ее названием. «КВН» – а как же еще! EOF
Владимир Гаков
Научный руководитель журнала –
председатель Редакционной коллегии
А.Н. Тихонов, научный руководитель, директор
96
Включен в Российский индекс
научного цитирования www.elibrary.ru
МИЭМ НИУ ВШЭ, д.т.н., профессор, академик РАО
Главный редактор
Галина Положевец, chief@samag.ru
Генеральный директор
Владимир Положевец
Шеф-редактор журнала
«Системный администратор»
Владимир Лукин, lukin@samag.ru
Заместитель главного редактора
Ирина Ложкина, lozhkina@samag.ru
Заместитель главного редактора,
официальный представитель редакции в Украине
Сергей Яремчук, grinder@samag.ru
Главный бухгалтер
Надежда Кан
Юридический отдел
Владимир Столяров
buch@samag.ru
stolyarov@samag.ru
Реклама
Светлана Павлова
Распространение
Олег Иванов
reklama@samag.ru
subscribe@samag.ru
Дизайн обложки
Михаил Лебедев
Дизайн-макет
Марина Рязанцева,
Дмитрий Бессонов
Верстка
Алексей Литвиненко
Иллюстрация
Виктор Чумачев
Редакционная коллегия
Д. Ю. Гудзенко, к.т.н., директор Центра компьютерного
обучения «Специалист» при МГТУ им. Н.Э. Баумана
Д. Ю. Динцис, д.т.н., ведущий преподаватель Центра
компьютерного обучения «Специалист» при МГТУ
им. Н.Э.Баумана
О.В. Китова, д.э.н., доцент, зав. кафедрой информатики
РЭУ им. Г.В.Плеханова, директор Академического
центра компетенции IBM «Разумная коммерция»
в РЭУ им. Г.В.Плеханова
А. С. Крюковский, д.ф-м.н., профессор, лауреат
Государственной премии СССР, декан факультета
информационных систем и компьютерных технологий
Российского нового университета
Э. С. Клышинский, к.т.н., доцент департамента компьютерной
инженерии НИУ ВШЭ
Л.А.Крукиер, д.ф-м.н., профессор, главный научный
сотрудник кафедры высокопроизводительных вычислений
и информационно-коммуникационных технологий
Южного федерального университета
С. Р. Тумковский, д.т.н., профессор департамента
компьютерной инженерии НИУ ВШЭ, лауреат Премии
Правительства РФ в области науки и техники
А. В. Тетюшев, к.т.н., доцент Вологодского государственного
технического университета
Экспертный совет
Рашид Ачилов, главный специалист по защите информации
Сергей Барамба, эксперт по системным решениям
Алексей Бережной, эксперт по администрированию и ИБ
Андрей Бирюков, ведущий системный инженер по ИБ
Алексей Вторников, эксперт по вопросам разработки ПО
Константин Кондаков, старший директор по ИТ
Кирилл Сухов, ведущий специалист направления интернетразработки
Леонид Шапиро, эксперт по ИБ и инфраструктурным проектам
Сергей Яремчук, эксперт по ИБ
Издатель
ООО «Синдикат 13»
Адрес редакции
129075, г. Москва, Шереметьевская ул., д. 85, стр. 2, офис 405,
тел.: (499) 277-12-41, факс: (499) 277-12-45
Сайт журнала: www.samag.ru
Отпечатано в Украине
OOO «Компания «Юнивест Маркетинг», типография Юнивест Принт
01054, г. Киев, ул. Дмитриевская, 44-б. Тел. +38-044-494-0903
Тираж 17000 экз.
Все права на материалы принадлежат журналу «Системный администратор». Перепечатка и использование материалов в любой форме, в том
числе и в электронных СМИ, без разрешения запрещена. При использовании материалов ссылка на журнал «Системный администратор»
обязательна. Материалы отмеченные знаком ADV публикуются на коммерческой основе. Редакция не несет ответственности за достоверность
информации в материалах, опубликованных на правах рекламы.
декабрь 2015 системный администратор
Подписывайтесь и читайте «Системный администратор»!
Подписывайтесь и получайте советы от практиков ИТ!
Подписывайтесь и применяйте знания, которых нет
в учебниках! «Системный администратор» дает их вам!
e
Разработчик для Windows Phon
Только полезная
информация
№12(157) декабрь 2015
Платформа RabbitMQ
Используем сервер очередей
#Здоровье online
Угрозы трекинга
показателей здоровья
VPN. IPSec. Linux
Построение
корпоративных VPN
Клиент-серверное
приложение для Android
Бумажная
электронная
версии!
5320 руб
Первые шаги в тестировании
Установка и настройка JMeter
я
Промышленная виртуализаци
с помощью Virtuozzo 7
Электронная почта
ИТ-инфраструктура
Мониторинг
Windows Exchange 2013
ManageEngine ServiceDesk Plus
Мониторинг блокировок в Oracle
Используем встроенные
средства резервного копирования
для обеспечения сохранности данных
Как с помощью ManageEngine
ServiceDesk Plus можно решить задачи,
стоящие перед ИТ-подразделением
Практический опыт диагностики
DML-блокировок, которые наиболее
характерны в базе данных
Стоимость печатной версии – 4560 руб.
Стоимость электронной версии – 1700 руб.
samag.ru/subscribe
Подпишитесь!
ЗАЩИТА СЕГОДНЯ —
ШАГ В БЕЗОПАСНОЕ ЗАВТРА
Стратегические решения в сфере IT-безопасности
Есть вопросы?
sales@kaspersky.com
kaspersky.ru/corporate
© ЗАО «Лаборатория Касперского», 2015.
Зарегистрированные товарные знаки и знаки обслуживания являются собственностью их правообладателей.
Автор
Kruz
Kruz3205   документов Отправить письмо
Документ
Категория
Без категории
Просмотров
1 535
Размер файла
18 123 Кб
Теги
sistemny
1/--страниц
Пожаловаться на содержимое документа