close

Вход

Забыли?

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

?

SisAdm 11 2015

код для вставки
Конкурс: Я – пользователь Dr.Web 11.0
№11(156) ноябрь 2015
Новый Nginx
с HTTP/2 и JavaScript
Биржевой робот
Инструменты и принципы
его создания
Управление гостевой ОС
средствами хоста
виртуализации
Построение системы
резервного копирования
Сетевые устройства
Централизованное управление
Облачное хранилище
Унифицированное программно-определяемое
Мобильные приложения
ИТ-инфраструктура
Механизмы защиты
Виджеты в Android
Периферийный сервер
Режим повышенной безопасности
Давайте разберемся, как создать
собственный виджет с дополнительной
информацией о системe
Концепция и реализация сервера,
предназначенного для гибкой работы
с несколькими интернет-провайдерами
Рассмотрим, каким образом можно
усилить уже существующую защиту
протокола SSL
В номере
18
31
АДМИНИСТРИРОВАНИЕ
Учет и инвентаризация
24
Облачные технологии
04
Основы облачного хранилища данных Ceph. Часть 1.
Архитектура. Поговорим о программно-определяемом храни-
Учет компьютеров от А до Я. Часть 2. Учет комплектов. В статье пойдет речь об особенностях учета комплектов
и составных частей компьютерного оборудования.
Игорь Чуфаров
лище данных Ceph. Начнем с обзора продукта и его архитектуры.
Бэкап
Андрей Маркелов
31
Виртуализация
07
Построение системы резервного копирования для
компании с множеством филиалов. Рассмотрим на кон-
Кастомизация гостевых ОС. Управление гостевой
ОС средствами хоста виртуализации. Вместо гро-
кретном примере процесс создания системы резервного копирования с нуля для компании с множеством филиалов.
моздких программных комплексов для кастомизации гостевых ОС
предлагается использовать простые и надежные средства – сценарии, выполняемые на хосте виртуализации.
Алексей Бережной
БЕЗОПАСНОСТЬ
Александр Пичкасов
Механизмы защиты
ИТ-инфраструктура
36
12
Периферийный сервер. Статья описывает концепцию и простую реализацию периферийного сервера предприятия, предназначенного для гибкой работы с несколькими интернет-провайдерами.
использование SSL привело к тому, что все чаще появляются атаки, которые направлены непосредственно против него, основанные
на ошибках либо недочетах реализации.
Александр Тетюшев
Рашид Ачилов
Продукты и решения
17
SSL в режиме повышенной безопасности. Широкое
Продукты и решения
Foxit PhantomPDF – несомненные плюсы. Формат PDF
41
давно стал стандартом для кроссплатформенного обмена электронными документами, соответственно, популярно и ПО, позволяющее
создавать и редактировать PDF-файлы.
СКОЛКОВО выбирает безопасность. Руководство бизнес-школы СКОЛКОВО не стало дожидаться возникновения реальных проблем в области ИБ.Опытом делится Андрей Еремин,
главный менеджер по информационной безопасности Московской
школы управления СКОЛКОВО.
Удаленный доступ
Инструменты
18
Удаленная поддержка пользователей. Тема удаленного управления компьютерным оборудованием родилась вместе с появлением компьютерных сетей и, наверное, уже никогда не утратит
своей актуальности.
Игорь Орещенков
2
42
Решения по централизованному управлению сетевыми устройствами. Поговорим о средствах централизованного управления сетевыми устройствами.
Андрей Бирюков
ноябрь 2015 системный администратор
В номере
56
66
компании». В гостях у «СА» Михаил Федотов, заместитель декана по учебной работе факультета ВМК МГУ имени М.В. Ломоносова.
БАЗЫ ДАННЫХ
Инструменты
Рейтинг
47
Опыт секционирования таблиц в Oracle. Часть 4. Управление секциями и подсекциями. При создании секцио-
74
Образование в сети: программирование на C++.
Воспользуйтесь нашим рейтингом перед началом освоения языка.
нированных таблиц периодически проводите работы с секциями.
Игорь Штомпель
Сергей Маслов
РАЗРАБОТКА
Рынок труда
80
Веб-технологии
Вакансия: программист под OS X.
Игорь Штомпель
52
Новый Nginx с HTTP/2 и JavaScript. Уже доступен новый
Ретроспектива
выпуск основной ветки сервера nginx 1.9.5.
Александр Майоров
83
Мобильные приложения
56
Виджеты в Android: теория и практика. Создаем собственный виджет с дополнительной информацией о системe.
Андрей Пахомов
Владимир Гаков
НАУКА И ТЕХНОЛОГИИ
88
Инструменты
60
Россия-ТВ. Made in USA. Часть 1. Шестого марта этого
года для американского телекоммуникационного гиганта American
Telephone and Telegraph Corporation «случилось страшное»...
Кролик в песочнице. Изучаем очереди и паттерны использования сервера очередей RabbitMQ.
Проектирование гипертекстовой модели электронно-цифровой библиотеки. В статье рассматриваются вопросы создания гипертекстовой электронно-цифровой библиотеки.
Титов В.А., Неделькин А.А.
Александр Календарев
92
66
Разрабатываем биржевого робота. Основные принципы
и инструменты для создания биржевых роботов.
Инструмент социально-экономического прогнозирования и тестирования проектируемых макроэкономических управлений. Результаты методологических
и прикладных разработок, проводимых в РЭУ им. Г.В. Плеханова,
в области прогнозирования социально-экономической динамики.
Олег Филиппов
КАРЬЕРА/ОБРАЗОВАНИЕ
70
Кугаенко А.А., Зотов В.А.
Alma mater российских ИТ
ЗАЛ СЛАВЫ «СА»
Михаил Федотов: «Многие наши выпускники возглавляют научные институты РАН и крупные ИТ-
96
системный администратор ноябрь 2015
Телевизор от радиокорпорации.
Владимир Гаков
3
Администрирование
облачные технологии
Визитка
АНДРЕЙ МАРКЕЛОВ, RHCA, старший менеджер архитектурных решений компании Ericsson.
Автор первой книги на русском языке, рассказывающей о работе с OpenStack,
andrey.markelov@ericsson.com
Основы облачного хранилища данных Ceph
Часть 1. Архитектура
Поговорим о программно-определяемом хранилище данных Ceph. Начнем с обзора
продукта и его архитектуры
Продолжаем знакомиться с сервисами облачной операционной системы OpenStack [1-4]. Согласно результатам
опроса OpenStack User Survey от мая 2015 года, проводившегося перед саммитом в Ванкувере, значительная часть
внедрений OpenStack в качестве блочной системы хранения данных использует Ceph [5]. Эта доля с тридцати семи
процентов в ноябре 2014 года выросла до сорока четырех.
Ceph – отдельный проект с открытым исходным кодом,
не входящий в число проектов OpenStack. Однако, рассматривая службы OpenStack, нельзя не упомянуть проект,
чей код входит практически во все основные дистрибутивы
OpenStack.
Что же представляет собой Ceph? Ceph – это проект с открытым исходным кодом по построению унифицированного
программно-определяемого хранилища данных. Отличительными особенностями Ceph являются высокая масштабируемость, производительность и отсутствие единой точки
отказа. В качестве аппаратного обеспечения предполагается использование серверов стандартной x86-архитектуры.
Под унификацией понимается возможность хранилища предоставлять объектный, блочный и файловый доступ.
Основные принципы, которыми руководствовались разработчики при создании архитектуры Ceph:
> Отказ компонента системы – это обычное поведение
системы, а не исключительная ситуация. Соответственно, не должно быть единой точки отказа.
> Каждый компонент системы обязательно должен быть
облачным приложением и уметь масштабироваться горизонтально.
> По возможности все компоненты для своего обслуживания и управления должны требовать минимального
вмешательства администратора.
> Решение должно работать на серверах стандартной
архитектуры.
> Решение должно быть с открытым исходным кодом.
Изначально Ceph был разработан в 2003 году в Калифорнийском университете. В 2006-м он был выпущен
как продукт с открытым исходным кодом. В промышленной
4
эксплуатации проект использовался с 2007 года хостинговой компанией DreamHost. А в 2012-м первоначальный
разработчик проекта Sage Wail при поддержке DreamHost
основал компанию Inktank, которая начала оказывать коммерческую поддержку для Ceph. Кстати, Ceph – это сокращение от cephalopod. Отсюда становится понятным выбор
названия для компании – Inktank.
В середине 2014 года Inktank купила компания Red Hat.
Для Red Hat на тот момент это было второе поглощение
компании, создающей программно-определяемую систему
хранения данных. Предыдущей покупкой была GlusterFS.
На настоящий момент поддержку Ceph в составе
OpenStack, помимо Red Hat, оказывает большинство компаний, имеющих свои дистрибутивы облачного программного
обеспечения: SUSE, Mirantis, HP, Canonical, Dell и другие.
OpenStack и Ceph совместно используются достаточно
давно, начиная с релиза Grizzly, и эта связка является проработанной и надежной. Со стороны OpenStack программно-определяемую систему хранения данных могут использовать компоненты Glance, Cinder и Nova. Также Ceph может
использоваться вместо объектного хранилища Swift.
Фактически вышесказанное означает, что Ceph может
заменить все другие типы хранилищ при использовании
совместно с OpenStack. В целом это так, однако конкретная
архитектура определяется в зависимости от требований,
предъявляемых к облаку. Например, некоторые аргументы
в сторону Swift или Ceph при выборе объектного хранилища
приведены в блоге компании Mirantis [6].
Рассмотрим основные компоненты Ceph (см. рис. 1). Основой Ceph является кластер RADOS (Reliable Autonomic
Distributed Object Store). Да, в основе Ceph лежит именно
объектное хранилище. Данные при этом хранятся без использования какой-либо иерархии, в «плоском» пространстве имен. У каждого объекта имеется уникальный во всем
кластере идентификатор. Объект состоит из непосредственно самих бинарных данных и метаданных. Метаданные
представляют собой пары имя и значение.
Кластер RADOS состоит из узлов, на которых работают
два типа демонов:
ноябрь 2015 системный администратор
облачные технологии
Администрирование
Ceph может заменить
все другие типы хранилищ
при использовании совместно
с OpenStack
> Object Storage Device (OSD) – отвечает непосредственно за хранение данных. Обычно один демон OSD связан
с одним физическим диском. Таким образом, на одном
узле хранения может быть одновременно несколько OSD,
и число демонов OSD в кластере обычно соответствует
общему числу физических дисков. OSD сами непосредственно выполняют операции по репликации, ребалансировке и восстановлению данных. Информацию о состоянии данных они передают мониторам.
> Ceph monitors (MON) – поддерживает мастер-копию карты состояния кластера и информацию о его текущем состоянии. Все узлы кластера отправляют информацию мониторам о каждом изменении в их состоянии. В кластере
должно быть нечетное число MON. Минимальное число
мониторов для отказоустойчивой инфраструктуры – три.
Для тестов и в лабораторном окружении можно использовать один.
Нужно также отметить важную роль файловой системы,
с которой работают OSD. Файловая система, созданная
на диске для хранения данных, должна поддерживать расширенные атрибуты файлов. Для промышленной эксплуатации на настоящий момент рекомендуются в первую очередь XFS. Также можно выбрать ext4, но она не настолько
популярна при работе с Ceph. Лучших результатов при тестировании производительности кластера Ceph позволяет
добиться Btrfs. Однако по ряду мнений она на настоящий
момент не достаточно стабильна для промышленного применения. В любом случае, решение о выборе файловой
системы как множества других параметров внедрения стоит
принимать в зависимости от конкретного проекта. Для тестовых внедрений Ceph файловую систему Btrfs с большой
долей уверенности можно назвать хорошим кандидатом.
Также, говоря о хранении данных, нужно отметить,
что OSD использует отдельный небольшой раздел или диск,
а иногда и файл в качестве журнала по аналогии с журналами файловых систем. При этом Ceph сначала пишет
все данные в журнал, а потом переносит их в место постоянного хранения.
системный администратор ноябрь 2015
Для определения местоположения данных кластер
использует псевдослучайный алгоритм распределения данных CRUSH (Controlled Replication Under Scalable
Hashing) [7], который эффективно распределяет реплики
объектов по узлам кластера. Вместо того чтобы обращаться
к некой центральной точке хранения информации о расположении объектов для каждого запроса, CRUSH вычисляет
положение данных. Алгоритм CRUSH с помощью созданных
под конкретное внедрение карт (CRUSH map) учитывает физическую инфраструктуру кластера в виде иерархии (диски,
пулы, узлы и т.д.) и политику распределения данных. Это отличает CRUSH, например, от подобного же принципа определения места положения данных в другом SDS с открытым
исходным кодом GlusterFS.
Объекты хранятся в логических группах – пулах. Пул можно рассматривать как тег, привязанный к ряду объектов.
На пулы также можно привязать, например, права пользователей. Разные пулы могут иметь разное число реплик
Рисунок 1. Архитектура Ceph
5
Администрирование
или использовать технологию erasure coding (EC) [8]. EC
в настоящее время рекомендуется только при работе Ceph
в качестве объектного хранилища. При использовании пула
erasure coding в Ceph как блочного или файлового хранилища значительно падает производительность. Таким образом, вы также с помощью пулов можете разделять данные
по методу доступа.
Пулы делятся на группы (placement groups, PG). PG –
это набор объектов, которые реплицируются OSD для обеспечения сохранности данных. Рекомендуется от пятидесяти
до ста PG в расчете на один OSD. PG решают проблему масштабирования пулов при значениях в миллионы объектов.
Возможность работы
напрямую с кластером RADOS
может быть дополнительным
преимуществом хранилища
данных при построении своих
сервисов поверх IaaS
Вкратце поиск объекта клиентом происходит следующим
образом. Клиент обращается к монитору и получает последнюю карту кластера, которая помогает клиенту понять состояние и конфигурацию кластера. Далее, обладая картой,
на основании имени объекта и имени пула CRUSH может
вычислить PG и главный OSD для записи или чтения данных.
При этом клиент напрямую обращается к OSD.
Следующий уровень на нашем рисунке, описывающем
архитектуру Ceph, – библиотека librados. Это библиотека
написана на языке программирования C и позволяет приложениям работать напрямую с RADOS, не используя какие-либо иные интерфейсы. Другие интерфейсы, такие
как RBD, RADOSGW и CephFS, работают поверх librados.
Подобные librados-библиотеки также позволяют разработчикам на других языках программирования получать напрямую доступ к кластеру RADOS. В число языков программирования входят С++, Java, Python, Ruby и PHP. Возможность
работы напрямую с кластером RADOS может быть дополнительным преимуществом хранилища данных при построении своих сервисов поверх IaaS.
Одним из наиболее востребованных методов доступа
к кластеру Ceph является блочный доступ, осуществляемый
с помощью RBD (RADOS block device). Драйвер RBD интегрирован в ядро Linux (Kernel RDB или сокращенно KRDB).
Драйвер полностью поддерживается QEMU/KVM. Вместе
с сервисами OpenStack Glance и Cinder в качестве хранилища Ceph RDB представляет собой дешевую альтернативу проприетарным SAN. Поддерживаются copy-on-write
и мгновенное клонирование виртуальных машин, мгновенные снимки и загрузка виртуальных машин с образов, хранящихся в кластере Ceph. В качестве примера приведен
вывод с одного из вычислительных узлов OpenStack, где
в качестве системы хранения данных используется Ceph.
Приведена только часть командной строки запуска виртуальной машины, а именно опция -drive. Это лучшим образом
иллюстрирует интеграцию Ceph с QEMU/KVM:
6
облачные технологии
# ps aux | grep qemu-kvm
5636 ? Sl 1:49 /usr/libexec/qemu-kvm -name instance-…
-drive file=rbd:vms/73f…_disk:id=openstack:key=BF3…==:
auth_supported=cephx\;none:mon_host=192.168.0.24\:6789\;
192.168.0.25\:6789\;192.168.0.26\:6789,if=none,
id=drive-virtio-disk0,format=raw,cache=none…
Минусом для других применений Ceph RBD является отсутствие поддержки в других операционных системах, кроме Linux, и других распространенных гипервизорах, например, VMware ESXi или Hyper-V.
Следующим компонентом является RADOSGW (Ceph
Object Gateway). Данный компонент проксирует HTTPзапросы от и к RADOS, предоставляя объектное хранилище, совместимое с OpenStack Swift и Amazon S3. Третьим поддерживаемым является Admin API для управления
кластером через RESTful интерфейс. S3 и Swift API можно
использовать одновременно и для общего пространства имен.
Следующий тип доступа – файловый с помощью CephFS
(Ceph file system). Файловая система требует не показанного на рисунке компонента – сервиса метаданных MDS.
В настоящий момент CephFS не готова для промышленного
применения и далее в статье не рассматривается.
Наконец последний опциональный компонент, не показанный на рисунке, – это Calamari, который является вебинструментом мониторинга и управления кластером Ceph.
Изначально этот инструмент был частью проприетарного
продукта Inktank Ceph Enterprise, но 2014 году исходный код
Calamari был открыт [9].
На этом закончим краткий обзор архитектуры Ceph. В следующих номерах рассмотрим установку кластера и интеграцию с сервисами OpenStack. EOF
[1] Маркелов А. Облачная операционная система OpenStack.
Часть 1. Введение. // «Системный администратор», №4, 2015 г. –
С. 10-15 (http://samag.ru/archive/article/2922).
[2] Маркелов А. OpenStack Keystone. Знакомство с сервисом
идентификации. // «Системный администратор», №5, 2015 г. –
С. 6-10 (http://samag.ru/archive/article/2936).
[3] Маркелов А. Облачная операционная система OpenStack.
Часть 3. Сервис хранения образов OpenStack Image Service.//
«Системный администратор», №6, 2015 г. – С. 12-14 (http://
samag.ru/archive/article/2958).
[4] Маркелов А. Облачная операционная система OpenStack.
Часть 4. Сервис блочного хранилища OpenStack. Cinder. //
«Системный администратор», №7-8, 2015 г. – С. 14-17 (http://
samag.ru/archive/article/2982).
[5] Сайт проекта Ceph – http://ceph.com.
[6] Сравнение Ceph с Swift – https://www.mirantis.com/blog/ceph-vsswift-architects-perspective.
[7] Описание CRUSH – http://ceph.com/papers/weil-crush-sc06.pdf.
[8] Технология Erasure coding – https://en.wikipedia.org/wiki/Erasure_
code.
[9] Страница проекта Calamari – https://github.com/ceph/calamari.
Ключевые слова: Open Source, OpenStack, Ceph, системы хранения данных.
ноябрь 2015 системный администратор
виртуализация
Администрирование
Визитка
АЛЕКСАНДР ПИЧКАСОВ, сертифицированный специалист Microsoft,
VMware, apichkasov@gmail.com
Кастомизация гостевых ОС
Управление гостевой ОС средствами хоста виртуализации
Вместо громоздких программных комплексов для кастомизации
гостевых ОС предлагается использовать простые и надежные средства –
сценарии, выполняемые на хосте виртуализации
Всегда хочется путем автоматизации процесса исключить
рутинные операции начиная от развертывания виртуальной
структуры. При этом использование специализированных
программных комплексов часто не оправдано, и заменой им
может послужить метод, описываемый в статье.
Несложно организовать выполнение команд на удаленном узле, для этого необходимо знать его адрес и обеспечить доступность. Сложнее достичь той же цели для гостевой
ОС, которая изначально находится в неактивном состоянии, и не известны заранее ни ее будущий адрес, ни имя
системы.
автоматизации – установка параметров гостевых ОС – требует отдельного рассмотрения. Именно этому посвящена
данная статья.
Прежде чем рассматривать конкретный пример, сформулируем методику модификации, выделив основные этапы, необходимые для достижения результата. Они будут
общими для всех платформ виртуализации и всех гостевых
операционных систем. Естественно, что в конкретных вариантах скриптов автоматизации будет использован свой набор инструментов и команд, специфичный для выбранной
платформы и гостевой ОС.
Область применения
Описание методов модификации
В связи с широким распространением средств виртуализации стало популярным предоставление готовых виртуальных машин (ВМ) с установленными гостевыми ОС для ознакомления, тестирования либо в виде готовых, возможно,
многозвенных, производственных решений. Примером могут служить каталог VMware Virtual Appliance Marketplace [1],
сайт Technet фирмы Microsoft [2] и другие. Естественно,
что при использовании таких решений обычно требуется
модификация настроек ОС под нужды конечного пользователя и параметры существующей сетевой инфраструктуры.
Одиночные развертывания не составит труда настроить
вручную, но для масштабных структур обычно используется специализированное ПО, например, VMware vCenter
Server, Microsoft System Center Virtual Machine Manager,
имеющее встроенные средства кастомизации. Однако бывают случаи, когда использование такого ПО нецелесообразно по бюджетным или логическим причинам. С этим
можно столкнуться в случаях периодически выполняемых
развертываний, например, в целях обучения, демонстрации
или замены обновленными версиями, для которых полезной будет автоматизация процесса развертывания. Такой
подход позволит сократить время подготовки и исключить
ошибки, возможные при ручной настройке. Автоматизация
импорта ВМ обычно не встречает затруднений, поскольку
это штатная операция платформы виртуализации, поддерживаемая клиентским ПО. Другая важная составляющая
Итак, чтобы модифицировать средствами хоста виртуализации параметры гостевой ОС, необходимо каким-либо
образом ей передать некую команду, которая должна выполниться в ее среде. Наиболее простой способ – использование штатных средств, в качестве таковых обычно выступают средства интеграции, установленные в гостевой
ОС. Анализ показывает, что это возможно только при использовании платформы виртуализации VMware, при условии, что в гостевой ОС установлены средства интеграции – VMware Tools. Данный способ действительно прост
и удобен, не предполагает каких-либо трудностей при реализации, и пример действий будет приведен в конце статьи
для сравнения. Однако по причине указанных выше ограничений – имеющаяся платформа виртуализации VMware и наличие установленных VMware Tools – часто мы вынуждены
прибегать к другому способу.
Второй способ носит более изощренный характер и заключается в монтировании виртуального диска ВМ в среде
ОС хоста, модификации скриптов инициализации и запуске виртуальной машины с выполнением подготовленных
скриптов. Детальный список действий и используемые
средства будут определяться типом платформы виртуализации и типом гостевой ОС, общими будут следующие
шаги.
> Монтирование виртуального диска ВМ. Средства
хоста должны позволять выполнение такой операции,
системный администратор ноябрь 2015
7
Администрирование
должны присутствовать необходимые драйверы и утилиты. Также на этом этапе определяется местоположение
скриптов инициализации, поскольку виртуальный диск
может содержать более одного раздела, и заранее неизвестно, какой именно раздел является системным.
> Модификация скриптов инициализации. Для реализации этого этапа необходима поддержка файловой системы дисков гостевой ОС в среде хоста виртуализации.
Модифицированный скрипт должен обеспечить однократность выполнения кода и остановку гостевой ОС
после выполнения скрипта. Этап завершается размонтированием виртуального диска.
> Старт ВМ с выполнением подготовленных скриптов.
Результатом этого этапа будет неактивная ВМ, параметры гостевой ОС которой изменены согласно намеченному плану.
> Опциональный этап – создание снимка ВМ в случае необходимости.
Проверка на практике. Подготовительный этап
Далее в качестве конкретного примера рассмотрим автоматизацию импорта и модификацию параметров сетевого
адаптера одного из оценочных образов ОС Windows, предоставляемых фирмой Microsoft [1].
Для тестов удобно выбрать образ минимального объема – Windows Server 2008 R2 Enterprise Edition x64 (Базовая версия). В качестве платформы виртуализации выберем
Windows Server 2008 R2, поскольку это позволит наиболее
полно проиллюстрировать все возникающие задачи и их решения.
Для выбранного образа и платформы виртуализации логично использовать Windows PowerShell в качестве языка
сценариев. К сожалению, в Windows PowerShell из состава
Windows Server 2008 R2 отсутствуют командлеты управления виртуальной средой, поэтому воспользуемся сторонним свободно распространяемым решением – модулем
pshyperv, доступным на сайте CodePlex [3]. Загруженный
модуль необходимо установить в соответствии с прилагаемыми инструкциями.
Для удобства представления тестовый скрипт разчленен
на отдельные части в соответствии с описанными ранее
этапами.
Первый фрагмент (см. листинг 1) выполняет импорт
ВМ и монтирование виртуального жесткого диска. Для импорта и монтирования используются командлеты модуля
pshyperv, поэтому в начале скрипта предусмотрена проверка установки данного модуля, а также проверка наличия
и корректности аргументов скрипта. В качестве аргумента
необходимо предоставить путь к папке с файлами ВМ. Поскольку заранее неизвестно, на каком из разделов виртуального жесткого диска расположен системный диск ОС,
в скрипте выполняется поиск системного раздела среди
вновь смонтированных томов по критерию максимального
объема. В реальных условиях, возможно, понадобится использовать более значимые критерии, например, имя тома,
либо наличие определенных элементов (например, каталога
%systemroot%) в файловой структуре. Завершается данный
фрагмент присвоением переменной значения, соответствующего системному диску гостевой ОС. Дополнительные пояснения представлены в комментариях в листинге скрипта.
8
виртуализация
Листинг 1
# Проверка аргумента
if (-not ($args) -or ($args).count -gt 1) {
Write-host "Usage: AutoDeploy.ps1 ↵
<drive:\virtualmachinefolder> "
Write-host " where 'virtualmachinefolder' ↵
- folder with virtulal machine files config.xml."
Exit
}
# Проверка установки модуля pshyperv
if (-not(Get-Module hyperv)) {import-module hyperv}
if (-not(Get-Module hyperv)) {
Write-Host "Install module 'HyperV'"
Exit}
#Проверка корректности аргумента – наличие каталога
$vmPath = $args[0]
if (Test-Path $vmPath){
$VMFolder = Get-Item -Path $vmPath\
}
else
{
Write-Host "Virtual Machine Folder not found"
Exit
}
if(-not ($VMFolder.PSisContainer))
{
Write-Host "Virtual Machine's item is not folder."
Exit
}
$savedir=$pwd
#Импорт ВМ
Write-Host "Import VM in folder " $VMFolder.FullName
$Exists = Get-VM -name ([string] $VMFolder.Name) ↵
-ErrorAction SilentlyContinue
If (!($Exists)){
Write-Host ("Importing virtual machine : ") -noNewLine
Write-Host ([string] $VMFolder.Name) -foreground Green
Write-Host Virtual Machine path: ↵
([string] $VMFolder.FullName)
Import-VM -path ([string] $VMFolder.FullName) -Wait
Write-Host
} Else {
Write-Host ('Virtual machine "') -noNewLine
Write-Host ([string] $VMFolder.Name) -noNewLine ↵
-foreground Yellow
Write-Host ('" does already exist.')
}
#Создание виртуального сетевого коммутатора и подключение
#к нему виртуального сетевого адаптера
$tswitch = Get-VMSwitch -VirtualSwitchName "testswitch"
if (-not $tswitch) {
$tswitch = New-VMPrivateSwitch -VirtualSwitchName ↵
"TestSwitch" | Out-Null
}
Get-VM -name ([string] $VMFolder.Name) | Get-VMNIC | ↵
Set-VMNICSwitch -VirtualSwitch $tswitch.elementname
#Получение файлов виртуальных дисков в каталоге
$VHDs = get-childitem "$VMFolder\virtual hard disks\*.vhd"
foreach ($VHD in $VHDs) {
if ($vhd -and ($vhd.length -ne 0)) {
Write-Host "Mounting for modification VHD " ↵
$VHD.FullName
#Монтирование виртуального диска и поиск
#системного раздела
$volbefore = gwmi -Namespace root\cimv2 ↵
-Class win32_volume
Mount-VHD -VHDPaths $VHD.FullName | Out-Null
$volafter = gwmi -Namespace root\cimv2 ↵
-Class win32_volume
# Поиск системного тома (критерий – максимальный
# размер, вновь подключенный диск)
$volsel = $null
foreach ($vol in $volafter) {
$cont = $false
foreach ($volb in $volbefore) {
if ($volb.deviceid -eq $vol.deviceid){
$cont = $true
ноябрь 2015 системный администратор
виртуализация
}
}
if (-not ($cont)) {
if ($volsel) {
if ($vol.capacity -gt $volsel.capacity) {
$volsel = $vol
}
}
else
{
$volsel = $vol
}
}
}
$sysdrive=$volsel.driveletter
Проверка на практике. Основные действия
В следующем фрагменте (см. листинг 2) выполняется модификация стартовых скриптов, которые при запуске ВМ произведут необходимые изменения.
В качестве скриптов инициализации выбраны стартап-скрипты групповых политик Windows. Это возможно
для серверных ОС Windows, а также для профессиональных
и корпоративных редакций клиентских Windows. Для других
редакций клиентских систем Windows также возможна организация стартап-скриптов, сделать это можно путем настройки автоматической регистрации пользователя и модификации логин-скрипта для этого пользователя. Реализация
этого варианта выполняется без особого труда на основе
представленных листингов.
Предлагаемый вариант имеет некоторые особенности,
связанные с тем, что при монтировании диска отсутствует
активная среда гостевой ОС, поэтому нет возможности конфигурировать стартовые скрипты штатными средствами.
Проведенный анализ позволил сделать вывод, что редактирование стартовых скриптов групповых политик и задание
связанных с ними конфигурационных параметров возможно
выполнить путем прямого редактирования файлов в файловой системе виртуального диска и редактирования ключей
реестра гостевой ОС.
В представленном фрагменте для организации стартовых скриптов в первую очередь создается структура папок
в файловой системе системного диска, затем создаются
необходимые конфигурационные файлы. После этого создается стартовый скрипт групповой политики, в котором
собственно и предусмотрено выполнение команд модификации параметров активного сетевого адаптера.
Далее для того, чтобы данная процедура выполнилась
только один раз, создается скрипт выключения, в котором
стартовый скрипт удаляется из конфигурационных файлов.
Кроме этого, необходимо модифицировать ключи реестра
гостевой ОС для задействования клиентских расширений
(CSE) групповых политик, обеспечивающих выполнение
стартовых скриптов.
Завершается фрагмент размонтированием виртуального жесткого диска.
Листинг 2.
if ($sysdrive) {
Write-Host "Drive letter for SysDrive is " $sysdrive
Write-Host "This volume on the one of partitions ↵
of VHD " $VHD.FullName
if (Test-Path $sysdrive\windows\system32) {
системный администратор ноябрь 2015
Администрирование
#Создание структуры папок для стартовых скриптов
#и конфигурационных файлов
new-item $sysdrive\windows\system32\grouppolicy ↵
-itemtype directory -ErrorAction ↵
SilentlyContinue | Out-Null
new-item $sysdrive\windows\system32\grouppolicy\ ↵
machine -itemtype directory -ErrorAction ↵
SilentlyContinue | Out-Null
new-item $sysdrive\windows\system32\grouppolicy\ ↵
user -itemtype directory -ErrorAction ↵
SilentlyContinue | Out-Null
new-item $sysdrive\windows\system32\grouppolicy\ ↵
machine\scripts -itemtype directory↵
-ErrorAction SilentlyContinue | Out-Null
new-item $sysdrive\windows\system32\grouppolicy\ ↵
machine\scripts\startup –itemtype ↵
directory -ErrorAction SilentlyContinue ↵
| Out-Null
new-item $sysdrive\windows\system32\grouppolicy\ ↵
machine\scripts\shutdown -itemtype ↵
directory -ErrorAction SilentlyContinue | ↵
Out-Null
#Создание конфигурационных файлов групповых политик
$StrGptIni = '[General]' + "`r`n" + ↵
'gPCMachineExtensionNames=[ ↵
{42B5FAAE-6536-11D2-AE5A-0000F87571E3} ↵
{40B6664F-4972-11D1-A7CA-0000F87571E3}]' ↵
+ "`r`n" + 'Version=5'
out-file -filepath "$sysdrive\windows\system32\ ↵
grouppolicy\gpt.ini" -InputObject ↵
$StrGptIni -encoding ascii | Out-Null
$StrScriptsIni= "`r`n" + '[Startup]' + "`r`n" + ↵
'0CmdLine=c:\windows\system32\ ↵
grouppolicy\machine\scripts\startup\ ↵
startup.cmd' + "`r`n" + '0Parameters=' ↵
+ "`r`n" + '[Shutdown]' + "`r`n" + ↵
'0CmdLine=c:\windows\system32\ ↵
grouppolicy\machine\scripts\shutdown\ ↵
remove.cmd' + "`r`n" + '0Parameters='
out-file -filepath "$sysdrive\windows\system32\ ↵
grouppolicy\machine\scripts\scripts.ini" ↵
-inputobject $StrScriptsIni -encoding ↵
ascii | Out-Null
#Создание стартового скрипта
$StrStartupCmd = 'For /f "skip=3 tokens=4*" ↵
%%a In (' + "'NetSh Interface IPv4 Show ↵
Interfaces'" + ') Do (Call ↵
:UseNetworkAdapter %%a "%%b") ' + "`r`n" ↵
+ 'c:\windows\system32\shutdown.exe -f ↵
-s -t 30' + "`r`n" + 'Exit /B' + "`r`n" ↵
+ ':UseNetworkAdapter' + "`r`n" + 'If ↵
%1==connected (@if %2 neq "Loopback ↵
Pseudo-Interface 1" ( netsh int ipv4 ↵
set addr %2 static 10.10.0.33 ↵
255.255.0.0 10.10.0.1))' + "`r`n" + ↵
'Exit /B' + "`r`n"
out-file –filepath "$sysdrive\windows\system32\ ↵
grouppolicy\machine\scripts\startup\ ↵
startup.cmd" -InputObject ↵
$StrStartupCmd -encoding ascii | Out-Null
#Создание скрипта выключения гостевой ОС
$StrRemoveCmd = 'del /q c:\windows\system32\ ↵
grouppolicy\machine\scripts\startup\ ↵
startup.cmd' + "`r`n" + 'del /q ↵
c:\windows\system32\grouppolicy\machine\ ↵
scripts\scripts.ini' + "`r`n" + 'del /q ↵
c:\windows\system32\grouppolicy\gpt.ini' ↵
+ "`r`n" + 'c:\windows\system32\reg.exe ↵
delete "HKLM\software\microsoft\windows\ ↵
currentversion\group policy\Status\ ↵
GPExtensions\{42B5FAAE-6536-11D2-AE5A- ↵
0000F87571E3}" /f '+ "`r`n" + 'del /q ↵
c:\windows\system32\grouppolicy\machine\ ↵
scripts\shutdown\remove.cmd'
out-file -filepath "$sysdrive\windows\system32\ ↵
grouppolicy\machine\scripts\shutdown\ ↵
remove.cmd" -InputObject $StrRemoveCmd ↵
-encoding ascii | Out-Null
9
Администрирование
#Модификация ключей реестра для задействования CSE
cd C:\Windows\System32
C:\Windows\System32\reg.exe load HKLM\onvhd ↵
$sysdrive\Windows\System32\config\ ↵
SOFTWARE | out-null
reg add "HKLM\onvhd\microsoft\windows\ ↵
currentversion\group policy\Status\↵
GPExtensions\{42B5FAAE-6536-11D2-AE5A-↵
0000F87571E3}" /f | out-null
reg add "HKLM\onvhd\microsoft\windows\ ↵
currentversion\group policy\Status\↵
GPExtensions\{42B5FAAE-6536-11D2-AE5A- ↵
0000F87571E3}" /v ForceRefreshFG ↵
/t REG_DWORD /d 0 /f | out-null
reg add "HKLM\onvhd\microsoft\windows\ ↵
currentversion\group policy\Status\ ↵
GPExtensions\{42B5FAAE-6536-11D2-AE5A-↵
0000F87571E3}" /v LastPolicyTime ↵
/t REG_DWORD /d 0 /f | out-null
reg add "HKLM\onvhd\microsoft\windows\ ↵
currentversion\group policy\Status\ ↵
GPExtensions\{42B5FAAE-6536-11D2-AE5A-↵
0000F87571E3}" /v PrevRsopLogging ↵
/t REG_DWORD /d 0 /f | out-null
reg add "HKLM\onvhd\microsoft\windows\ ↵
currentversion\group policy\Status\ ↵
GPExtensions\{42B5FAAE-6536-11D2-AE5A-↵
0000F87571E3}" /v PrevSlowLink ↵
/t REG_DWORD /d 0 /f | out-null
reg add "HKLM\onvhd\microsoft\windows\ ↵
currentversion\group policy\Status\ ↵
GPExtensions\{42B5FAAE-6536-11D2-AE5A-↵
0000F87571E3}" /v RsopStatus ↵
/t REG_DWORD /d 0 /f | out-null
reg add "HKLM\onvhd\microsoft\windows\ ↵
currentversion\group policy\Status\ ↵
GPExtensions\{42B5FAAE-6536-11D2-AE5A-↵
0000F87571E3}" /v Status /t REG_DWORD ↵
/d 0 /f | out-null
reg unload HKLM\onvhd | out-null
}
}
else
{
Write-Host "Drive letter not assigned for " $VHD.FullName
}
Dismount-VHD -VHDPaths $VHD.FullName -Force
}
}
cd $saveDir
Проверка на практике. Исполнение
Наконец остается запустить ВМ, дождаться завершения
ее работы и создать снимок ВМ. Эти действия выполняет
оставшийся фрагмент скрипта (см. листинг 3).
Листинг 3.
#Запуск ВМ
$Exists = get-vm -name ([string] $VMFolder.Name) ↵
-ErrorAction SilentlyContinue
If ($Exists){
Write-Host ("Starting virtual machine : ") -noNewLine
Write-Host
([string] $VMFolder.Name) -foreground Green
$exists | start-vm -wait
#Ожидание завершения работы ВМ с проверкой 6-минутного
#тайм-аута
$checktime = (get-date).addminutes(6)
while ((($exists | Get-VMState).enabledstate ↵
-eq "running") ↵
-and ((get-date).compareto($checktime) -lt 0)){
start-sleep 5
}
#Если ВМ еще работает, запускается принудительное
#выключение
10
виртуализация
if (($exists | Get-VMState).enabledstate -eq "running") {
Write-Host "Forced shutdown VM " $exist.elementname
$exists | Invoke-VMShutdown ↵
-force -ShutdownTimeOut 2
}
while (-not (($exists | Get-VMState).enabledstate ↵
-eq "stopped")){
start-sleep 1
}
if (($exists | Get-VMState).enabledstate -eq "stopped") {
# Создание снимка виртуальной машины
Write-Host "Create snapshot for virtual machine " ↵
$exists.elementname
$exists | New-VMSnapshot -Wait -Force -Note ↵
"StartImage" | Out-Null
}
Write-Host
}
Else
{
Write-Host ('Virtual machine "') -noNewLine
Write-Host ([string] $DriveDstFolder.Name) ↵
-noNewLine -foreground magenta
Write-Host ('" does not exist. Skip.')
}
Для выполнения скрипта необходимо распаковать ВМ
в выбранную папку и запустить скрипт с аргументом, указывающим на путь к этой папке. Результатом выполнения
скрипта будет подготовленная ВМ в выключенном состоянии, с модифицированными параметрами гостевой ОС
и снимком состояния.
То же самое штатными средствами
Для сравнения приведу пример управления гостевой ОС
штатными средствами хоста виртуализации, что возможно
в среде VMware при установленных средствах интеграции
VMware Tools и использовании в качестве клиента vSphere
PowerCLI [4]. При таких условиях часть скрипта, выполняющего модификацию параметров гостевой ОС виртуальной
машины VMname будет представлена строками листинга 4.
Листинг 4.
#Подготовка содержимого командного файла
$StrCmd = 'For /f "skip=3 tokens=4*" %%a In ↵
(' + "'NetSh Interface IPv4 Show Interfaces'" ↵
+ ') Do (Call :UseNetworkAdapter %%a "%%b") ' + ↵
"`r`n" + 'c:\windows\system32\shutdown.exe -f -s ↵
-t 30' + "`r`n" + 'Exit /B' + "`r`n" + ↵
':UseNetworkAdapter' + "`r`n" + 'If %1==connected ↵
(@if %2 neq "Loopback Pseudo-Interface 1" ↵
( netsh int ipv4 set addr %2 static 10.10.0.33 ↵
255.255.0.0 10.10.0.1))' + "`r`n" + 'Exit /B' + ↵
"`r`n"
# Сохранение файла в файловой системе хоста виртуализации
out-file –filepath "c:\changeip.cmd" -InputObject $StrCmd ↵
-encoding ascii | Out-Null
#Копирование файла в гостевую операционную систему
Copy-VMGuestFile -Source c:\changeip.cmd -Destination ↵
c:\temp\ -VM "VMname" -LocalToGuest -GuestUser ↵
Administrator -GuestPassword Pa$$w0rd
#Выполнение подготовленного командного файла
Get-VM "VMname" | Invoke-VMscript -ScriptText ↵
"c:\temp\changeip.cmd" -ScriptType Bat -GuestUser ↵
Administrator -GuestPassword Pa$$w0rd
В этом случае нет нужды манипулировать стартовыми скриптами, поскольку команды установки параметров выполняются непосредственно в среде гостевой ОС,
при работающей ВМ. Разумеется, что в таком варианте
ноябрь 2015 системный администратор
виртуализация
может потребоваться перезагрузка гостевой ОС, если этого
требуют выполненные изменения.
Дополнительно отмечу, что, если в качестве гостевой ОС
используется Windows Server 2012 R2, скрипт примет еще
более простой вид, представленный на листинге 5. (Подразумевается, что в гостевой ОС имеется только один активный
сетевой адаптер.)
Листинг 5.
Get-VM "VMname" | Invoke-VMscript -ScriptText 'New-NetIPAddress ↵
-InterfaceIndex ((Get-NetAdapter).ifindex) ↵
-IPAddress 10.10.0.33 -PrefixLength 16’ ↵
-GuestUser Administrator -GuestPassword Pa$$w0rd
Можно предположить, что в очередных версиях платформы
виртуализации Hyper-V будет реализован аналогичный способ управления. Об этом говорит то, что роль виртуализации ОС Windows Server 2012 R2 поддерживает копирование
файлов в гостевую ОС (но не из гостевой ОС на хост виртуализации) с помощью командлета Copy-VMFile [5].
Если клиентское ПО продолжит развитие в этом направлении и будет реализовано не только копирование файлов,
но и выполнение произвольных команд, описанные в данной статье манипуляции потеряют актуальность в контексте
платформ виртуализации.
системный администратор ноябрь 2015
Администрирование
В настоящее же время описанный способ управления может послужить примером для реализации различных сценариев автоматизации виртуальной инфраструктуры. EOF
[1] Магазин виртуальных модулей (VMware Virtual Appliance
Marketplace) – портал фирмы VMware, предоставляющий возможность загрузки готовых виртуальных машин от независимых разработчиков, для использования на узлах виртуализации ESXi – https://solutionexchange.vmware.com/store.
[2] Центр пробного ПО на портале Technet фирмы Microsoft позволяет загрузить готовые виртуальные машины для оценки решений корпорации Microsoft и ее партнеров, предназначенные
для узлов Hyper-V – https://technet.microsoft.com/bb738372.aspx.
[3] Модуль Windows PowerShell для Windows Server 2008 R2 дополняет стандартный набор командлетами управления ролью
Hyper-V, что позволяет организовать сценарии автоматизации – http://pshyperv.codeplex.com.
[4] Документация клиента vSphere PowerCLI, предназначенного для управления средой виртуализации VMware – http://
pubs.vmware.com/vsphere-50/index.jsp#com.vmware.powercli.
cmdletref.doc_50/Overview.html.
[5] Описание командлетов штатного модуля Hyper-V Windows
PowerShell серверной операционной системы Windows 2012 R2 –
https://technet.microsoft.com/en-us/library/dn464282.aspx.
Ключевые слова: виртуализация, PowerShell, VMware, Hyper-V.
11
Администрирование
ИТ-инфраструктура
Визитка
АЛЕКСАНДР ТЕТЮШЕВ, к.т.н., доцент кафедры АВТ Вологодского государственного
технического университета (ВоГТУ), tetavv@gmail.com
Периферийный сервер
Статья описывает концепцию и простую реализацию периферийного
сервера предприятия, предназначенного для гибкой работы с несколькими
интернет-провайдерами
Информационные технологии изменяют бизнес небольших
предприятий с огромной скоростью. Современные предприятия уже не привязаны к определенному физическому
адресу и могут кочевать по офисам, выбирая наиболее выгодные условия аренды, поскольку средства связи и доступ
к вычислительным ресурсам могут быть получены ими практически из любой точки современного города.
С другой стороны, постоянно появляются новые провайдеры интернет-услуг с очень заманчивыми предложениями,
и часто эти предложения имеют бесплатный пробный период от одного до трех месяцев, что можно считать довольно
хорошей экономией для небольших компаний. Совмещение
этих предложений и мобильность позволяют существенно
снизить затраты небольших организаций.
Единственным сдерживающим фактором использования
этих новых возможностей в полном объеме, на мой взгляд,
является ограничение «последней мили» – оборудование
Таблица 1. Разбиение жесткого диска на разделы
Устройства
Емкость
Тип файловой
системы
Точка монтирования
/dev/sda1
200 Мб
Ext4
/boot
/dev/sda2
4 Гб
Swap
Swap
/dev/sda3
34 Гб
Ext4
/
/dev/sda4
34 Гб
Ext4
(резервная/система)
Рисунок 1. Периферийный сервер
12
периферийного сетевого оборудования, подключающего
офисную сеть предприятия к сервисам интернета.
Мы уже привыкли к существованию периферийного сетевого оборудования в виде коммутаторов, шлюзов и маршрутизаторов. Обычно интернет-провайдеры предлагают
в аренду эти устройства при заключении договоров на обслуживание, и часто они содержат кастомизированные прошивки, не позволяющие перейти к другому провайдеру
или использовать двух и более провайдеров одновременно.
Более того, довольно часто замена периферийного оборудования при смене провайдера приводит к существенным
изменениям в информационной структуре предприятия.
Например, небольшая компания использовала ADSLмодем для работы с интернетом и аналоговое соединение
с городской телефонной станцией. При переезде она попадает в офис, в котором интернет подан через Wi-Fi, а телефоны – через SIP-шлюз. Перенастройка работы офиса
займет существенное время и дополнительные средства.
Но главное – будет нарушена существующая инфраструктура, что, безусловно, скажется на работе. При следующем
переезде или переходе к другому провайдеру опять возникнут трудности адаптации.
В этой статье я хочу рассказать о концепции и реализации периферийного сервера как наиболее гибком устройстве работы с внешними интернет-сервисами. Идея установить компьютер как периферийное оборудование не нова,
и такие устройства называются программными маршрутизаторами (программными роутерами) [1]. Но программные
маршрутизаторы предполагают одну целевую настройку
с дальнейшим длительным использованием, а в случае развертывания периферийного сервера мы изначально предполагаем, что его конфигурация станет меняться достаточно
часто, поскольку будут изменяться внешние условия предоставления сервисов. Общая структура периферийного сервера показана на рис.1.
Внешние сервисы взаимодействуют с периферийным
сервером, а внутренняя сеть и информационная структура
предприятия остаются неизменными при всех внешних изменениях.
ноябрь 2015 системный администратор
ИТ-инфраструктура
Такая структура позволяет переключаться между провайдерами без ущерба для работы предприятия и в случае
необходимости передать его на аутсорсинг, поскольку никаких реальных данных на периферийном сервере нет.
Архитектура периферийного сервера
Требования к оборудованию периферийного сервера по сегодняшним меркам довольно скромные. К обязательным аппаратным требованиям относятся процессор с архитектурой
x64 для развертывания виртуальных контейнеров и достаточное количество оперативной памяти. Требования к программному обеспечению – ядро Linux не ниже 2.6.x (3.8.x).
Общая архитектура периферийного сервера показана
на рис. 2.
В основе архитектуры – базовая ОС на базе ядра Linux
с резервной загрузкой, в ней размещены основные телекоммуникационные сервисы предприятия. Именно с ними
и предполагается работа сотрудников офиса. Выше сформирован docker [2], на котором в отдельных контейнерах
развернуты сервисы для работы с различными интернетпровайдерами.
Главная идея разработки периферийного сервера – сделать docker своего рода сервисной шиной предприятия
(ESB) [3] между внутренними и внешними сервисами. Такая
архитектура позволяет включать и отключать внешних провайдеров, выполнять тонкие настройки для работы с конкретными провайдерами, не затрагивая внутреннюю инфраструктуру предприятия, организовывать сложную коммутацию
между сервисами предприятия и интернет-сервисами.
Реализация периферийного сервера
Далее описана простая реализация периферийного сервера на примере предоставления интернет-доступа через
периферийный сервер с двумя интернет-провайдерами.
Один провайдер предоставляет доступ в интернет по сети
Ethernet, второй – по Wi-Fi. Схема реализации показана
на рис. 3.
Для построения периферийного сервера использовался компьютер с CPU Intel Celeron 2,8 Ггц, RAM 512 Мб
и HDD 72 Гб. Из телекоммуникационного оборудования в составе сервера – две кары Ethernet и Wi-Fi-адаптер. В качестве ОС использовался CentOS 6.7 x64, но принципиальных
различий при использовании другого дистрибутива нет.
Для формирования резервной загрузки жесткий диск
Рисунок 2. Архитектура периферийного сервера
системный администратор ноябрь 2015
Администрирование
разбивается на четыре раздела, примерно следующим образом (см. таблицу 1).
Разделы /dev/sda3 и /dev/sda4 создаются примерно одного размера, поскольку на них располагаются базовая и резервная ОС. При установке выбираем минимальный набор
пакетов (Basic Server), поскольку все основные функции будут реализованы в отдельных контейнерах.
Применение периферийного
сервера вносит существенное
упрощение в работу
предприятия при работе
с несколькими провайдерами,
частой смене тарифов
или смене самих провайдеров
Далее необходимо клонировать базовую файловую систему на вторую партицию, но, поскольку эта операция будет проводиться достаточно часто, сразу напишем скрипт
синхронизации.
Файл sync.sh:
#!/bin/bash
for i in `ls /dev/disk/by-uuid`; do
if [ -z `grep $i /etc/fstab| awk '{print $1 }'` ] ;then
if [ ! -d /mnt/new ]; then mkdir /mnt/new; fi
if [ ! -d /mnt/old ]; then mkdir /mnt/old; fi
mount -o bind / /mnt/old
if [ ! $? -eq 0 ]; then echo "ERROR mount /" && exit 1; fi
mount /dev/disk/by-uuid/$i /mnt/new
if [ ! $? -eq 0 ]; then echo "ERROR mount $i" && exit 1; fi
rsync –atp --delete /mnt/old/ /mnt/new/
touch /mnt/new/.autorelabel
sed -e '/ \/ /s/UUID=\(.*\)\//UUID='$i' \/ /' ↵
/mnt/old/etc/fstab >/mnt/new/etc/fstab
umount /mnt/old
umount /mnt/new
fi
done
Нам необходимо добавить секцию резервной загрузки
в файл /boot/grub/grub.conf (красным цветом отмечена новая секция для резервной загрузки):
Рисунок 3. Предоставление интернет-доступа через двух провайдеров
13
Администрирование
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS 6.7(/dev/sda2)
root (hd0,0)
kernel /vmlinuz-2.6.32-573.7.1.el6.x86_64 ro ↵
root=/dev/sda2 LANG=ru_RU.UTF-8 rd_NO_LUKS ↵
rd_NO_MD KEYBOARDTYPE=pc KEYTABLE=ru rd_NO_LVM ↵
rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-573.7.1.el6.x86_64.img
title CentOS 6.7 (/dev/sda4)
root (hd0,0)
kernel /vmlinuz-2.6.32-573.7.1.el6.x86_64 ro ↵
root=/dev/sda4 LANG=ru_RU.UTF-8 rd_NO_LUKS ↵
rd_NO_MD KEYBOARDTYPE=pc KEYTABLE=ru rd_NO_LVM ↵
rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-573.7.1.el6.x86_64.img
Записываем изменения на диск:
# grub-install /dev/sda
Теперь мы можем в случае отказа базовой системы
при установке драйверов или других действиях перейти
на резервную загрузку с последней удачной конфигурацией, сделать синхронизацию партиций и продолжить настройку.
По окончании отладки системы опять запускаем sync.sh
для фиксирования результата. Не буду описывать настройку драйверов в базовой системе, поскольку в большинстве
случаев это не требуется или носит слишком специфический характер.
Установка контейнеров для работы
с провайдерами
Согласно нашей концепции для каждого провайдера мы
создадим отдельный контейнер в docker, в котором настроим необходимое взаимодействие. Поскольку официальная
поддержка docker появилась только в CentOS 7, установим
его, как описано в [4]:
#curl https://get.docker.com/ |sh
#chkconfig docker on && service docker start
Настроим docker registry:
# docker search centos6.7
Из представленных образов я взял abuecker/centos6.7.
Выбор этого образа был сделан мною совершенно произвольно, поскольку мне привычнее работать с ОС CentOS,
но настоятельно рекомендую вам при реальной организации периферийного сервера выбирать образы c конкретными сервисами. Это значительно упростит их дальнейшую
настройку:
# docker pull abuecker/centos6.7
После установки смотрим образ и проверяем работу контейнера:
# docker run –i –t abuecker/centos6.7 /bin/sh
14
ИТ-инфраструктура
Давайте сформируем первый контейнер для работы
с провайдером. Для этого мы с вами создадим директорию
сборки и файл Dockerfile c предустановленным сервером
Squid3:
#cd /usr/src
#mkdir provider &&touch provider/Dockerfile
Файл Dockerfile:
#Version: 0.0.1
FROM abuecker/centos6.7
MAINTAINER #tetav@mail.ru
RUN groupadd -g 1000 squid \
&& useradd -u 1000 squid -g 1000 \
&& yum –y update \
&& yum -y install squid \
&& chkconfig squid on \
&& service squid start
VOLUME ["/var/log/squid"]
EXPOSE 8081
Собираем контейнер (точка в конце обязательна):
# cd provider && docker build –t=provider1:v1
.
Используя tag :v1 в конце названия контейнера, мы можем вести учет версии или предоставляемых сервисов.
Проверяем создание контейнера и его работу:
#docker images
#docker run –i –t provider1:v1
# ps –ef |grep squid
/bin/sh
Контейнер работает, и в нем запущен сервис squid.
Выполним тонкую настройку работы контейнера. В данном случае я использую практически идеальное соединение с провайдером через Ethernet, но очень может быть,
что вам придется настраивать VPN или ограничивать пропускную способность интерфейса по времени или стоимости. Все эти настройки следует выполнить непосредственно в контейнере. Допустим, я хочу ограничить пропускную
способность этого контейнера до 50 Мб/с на скачивание
и до 10 Мб/c на отдачу. В этом случае в контейнере создаем
скрипт /root/shapeSpeed.sh [5] следующего содержания:
#!/bin/bash
speedUp=$1
speedDown=$2
#Удаление очередей
/sbin/tc qdisc del dev eth0 ingress
/sbin/tc qdisc del dev eth0 root handle 1:
# Ограничение скорости отдачи
/sbin/tc qdisc add dev eth0 root handle 1: ↵
htb default 10 r2q 1
/sbin/tc class add dev eth0 parent 1: classid 1:10 htb ↵
rate ${speedUp}kbit quantum 8000 burst 8k
# Ограничение скорости загрузки
/sbin/tc qdisc add dev eth0 handle ffff: ingress
/sbin/tc filter add dev eth0 parent ffff: protocol ip ↵
prio 50 u32 match ip src 0.0.0.0/0 police rate ↵
${speedDown}kbit burst 12k drop flowid :1
и добавляем его в /etc/rc.local:
ноябрь 2015 системный администратор
Администрирование
ИТ-инфраструктура
/root/shapeSpeed.sh 50000 10000
Нетрудно сообразить, как потом через cron можно будет
изменять пропускную способность контейнера в зависимости от времени.
Настраиваем squid в контейнере через /etc/squid/squid.
conf, указав внутреннюю сеть (172.17.0.0/16) и перенаправив поток http-запросов на конкретный внешний адрес.
Фрагмент файла /etc/squid/squid.conf:
Сформируем аналогичный контейнер для второго провайдера. Для этого создадим новый каталог сборки и файл
Dockerfile:
#mkdir /usr/src/provider2&&touch ↵
/usr/src/provider2/Dockerfile
Файл Dockerfile:
#Version: 0.0.1
acl all src 0.0.0.0/0.0.0.0
# сеть docker 172.17.0.0/16
acl localnet src 172.17.0.0/16
# 192.168.0.1 – адрес провайдера
tcp_outgoing_address 192.168.0.1 localnet
udp_outgoing_address 192.168.0.1 localnet
http_access allow localnet
http_access deny all
# порт, на котором squid ждет клиентов
http_port 8081
FROM abuecker/centos6.7
MAINTAINER #tetav@mail.ru
RUN groupadd -g 1000 squid \
&& useradd -u 1000 squid -g 1000 \
&& yum –y update \
&& yum -y install squid \
&& chkconfig squid on \
&& service squid start
VOLUME ["/var/log/squid"]
EXPOSE 8082
После выполнения необходимых настроек, сохраняем
изменения, сделанные в контейнере. Для этого в соседнем
терминале, не выключая работающий контейнер, выполняем поиск и сохранение рабочего образа:
provider1:v1
#cd /usr/src/provider2&&docker build –t=provider2:v1
.
Файл /etc/squid/squid.conf правим под требования второго провайдера. Фрагмент файла squid.conf:
# docker ps | grep provider1:v1
2af60ad97380
Собираем второй контейнер:
"/bin/sh"
124 minutes ago
acl all src 0.0.0.0/0.0.0.0
# 172.17.0.0/16 – внутреняя сеть docker
# docker commit 2af60ad97380 provider1:v1
ВСЕРОССИЙСКИЙ ФОРУМ
« Ф
Ц
Ь»
я 2015,
о
, Sheraton Palace Hotel
У ЛОВИ УЧ
:
- для ИТ-директоров и менеджмента компаний участие бесплатное*.
- для представителей учебных заведений, органов
власти, представителей некоммерческих
организаций стоимость участия составляет
10 000 у . +
18%
- для представителей компаний-поставщиков
решений и услуг стоимость участия составляет
27 000 у . +
18%
Ведущий
информационный
партнер
Генеральный
интернет
партнер
Официальный
интернет-партнер
Реклама
3
Информационные
партнеры:
ПРАКТИКА CRM
рассказываем, как заработать больше
AHConferences • www.ahconferences.com • +7 (495) 790 7815 • it@ahconferences.com
системный администратор ноябрь 2015
15
Администрирование
acl localnet src 172.17.0.0/16
#192.168.100.1 адрес провайдера Wi-Fi
tcp_outgoing_address 192.168.100.1 localnet
udp_outgoing_address 192.168.100.1 localnet
http_access allow localnet
http_access deny all
# порт, на котором squid ждет клиентов
http_port 8082
Теперь установим базовый сервис Squid для работы внутренних офисных клиентов, в котором укажем созданные
контейнеры как родительские кэши и выполним их перебор
по round-robin:
# yum install squid
Добавляем родительские кэши в конфигурационный
файл /etc/squid/squid.conf и проверяем порт, на котором базовый squid ждет соединения. Фрагмент файла /etc/squid/
squid.conf:
# контейнеры как родительские кэши с перебором
cache_peer provider2:v1 parent 8080 3130 no-query ↵
no-digest round-robin
cache_peer provider1:v1 parent 8081 3130 no-query ↵
no-digest round-robin
# стандартный порт, на котором базовый squid ждет
# соединения http_port 192.168.1.200:3129
Реализуем прозрачный прокси для внутренних клиентов
средствами iptables:
# iptables -t nat –A PREROUTING -p tcp --dport 80 ↵
–j REDIRECT --to-port 3129
Осталось выполнить автоматический запуск контейнеров
при старте системы.
Поскольку пока нет штатного средства назначения статического IP-адреса конкретному контейнеру, придется написать небольшой скрипт, который будет подставлять IPадреса и имена запущенных контейнеров в файл /etc/hosts.
(надеюсь, такая возможность появится в docker в ближайшее время).
Файл /root/docker2hosts.sh:
#!/bin/bash
for i in ` /usr/bin/docker ps | awk ‘{ if (!/CONTAINER/) ↵
print $1 }’`
do
host=`/usr/bin/docker ps|grep $i | awk ‘{print $2}’`
# удаляем строки с таким именем
sed –i ‘/$host/d’ /etc/hosts
ip=’/usr/bin/docker inspect –f "{{ ↵
.NetworkSettings.IPAddress }}" $i`
# устанавливаем имена хостов в /etc/hosts
echo $ip $host >>/etc/hosts
done
Для автоматического запуска контейнеров при загрузке
базовой системы пропишем их в файле /etc/rc.local.
Фрагмент файла rc.local:
/bin/docker run –d –i -t provider1:v1
/bin/docker run –d –i –t provider2:v1
/root/docker2hosts.sh
16
ИТ-инфраструктура
В результате мы получили прозрачный прокси, одновременно работающий с двумя интернет-провайдерами. Тонкие сетевые настройки работы с провайдерами выполнены
в изолированных контейнерах и не влияют на работу других
систем.
Добавление нового провайдера через создание нового
контейнера и его подключение не потребуют остановки основного сервиса.
Применение периферийного сервера вносит существенное
упрощение в работу предприятия при работе с несколькими
провайдерами, частой смене тарифов или смене самих провайдеров.
Может, показанная выше настройка выглядит излишне
сложной, но стоит учесть следующие моменты:
> Нам не нужно формировать сложные маршрутные таблицы. Вся работа идет через единый docker hub. Просто представьте, что вам необходимо разрулить трафик по сервисам между 10 провайдерами.
> Для каждого провайдера я могу подобрать конкретный
контейнер с теми сервисами, которые он предоставляет, и выполнить тонкие настройки конкретно под него.
При этом не придется останавливать основной сервис
предприятия или делать сетевую перекоммутацию.
> Подключение или отключение очередного провайдера займет минимум времени и усилий, что позволит
использовать на полную силу временные бесплатные
услуги, не задумываясь о том, что будет после того,
как сервис станет недоступен.
> Время работы и режим работы каждого контейнера
определяется непосредственно в нем. Контейнер самостоятельно отключится от провайдера при наступлении определенного времени или события.
> Упрощаются тарификация и учет трафика по провайдерам, поскольку каждый контейнер ведет отдельный
лог.
> Упрощается приоритизация трафика, поскольку в каждом контейнере я могу задать конкретные сетевые настройки.
> Пропускная способность каждого реального интерфейса периферийного сервера может быть перераспределена по сервисам через контейнеры.
> Значительно улучшается безопасность работы предприятия с внешними службами. В случае удачной атаки
на один из контейнеров злоумышленник не сможет попасть в основную систему. EOF
[1] Бесплатные программные маршрутизаторы – http://forum.ruboard.com/topic.cgi?forum=8&topic=12070.
[2] Проект docker – https://www.docker.com.
[3] Сервисная шина предприятия – https://ru.wikipedia.org/wiki/Сервисная_шина_предприятия.
[4] Установка docker в CentOS – https://docs.docker.com/installation/
centos.
[5] Скрипт ограничения пропускной способности интерфейса –
http://admi.me/lesson-ogranichenie-skorosti-interfeysa-na-serverelinux-35.
Ключевые слова: сервер, CentOS, docker, Linux.
ноябрь 2015 системный администратор
продукты и решения
Администрирование
Foxit PhantomPDF – несомненные плюсы
Формат PDF давно стал стандартом для кроссплатформенного обмена электронными
документами, соответственно, популярно и ПО, позволяющее создавать и редактировать
PDF-файлы. Выбор здесь большой. Но есть и явные лидеры. Foxit PhantomPDF [1]
неоднократно удостаивался наград за простоту в использовании и функционал
Сгенерировать PDF-документ сегодня
не так уж сложно. Доступно большое
количество конвертеров, офисные пакеты или специальные плагины предлагают сохранять результат в PDFфайл. Но при профессиональном
использовании этого явно недостаточно: нет функций редактирования,
создания форм, совместной работы,
цифровой подписи и многого другого.
редактирование текста, перемещение
абзацев, проверка орфографии, изменение стиля, вставка видео и изображений, настройка страниц, поиск,
в том числе и по шаблону.
Реализованы
конвертирование
в PDF из разных источников, экспорт в несколько форматов, совместная работа, интеграция с SharePoint
и Evernote, распознавание текста в от-
PhantomPDF –
быстрый в работе
и безопасный продукт,
ориентированный на профессиональных
пользователей, позволяющий создавать
PDF-документы и формы
Одним из главных факторов выбора PhantomPDF является низкая
стоимость по сравнению с конкурентами. Цена относительно Adobe
Acrobat XI Pro ниже примерно в два
раза, при этом он проще в установке,
понятнее в использовании и не уступает функционально.
Современный ленточный интерфейс, принятый в последних версиях
ПО от Microsoft, хорошо организован,
и в нем легко ориентироваться. Большинство операций не требует специальной подготовки пользователя, хотя
компания представляет документацию
пользователя, обучающие ролики, ответы на FAQ, техподдержку и проводит
бесплатные вебинары. Для установки
потребуется компьютер, работающий
под управлением ОС Windows от XP
и выше. Распространяется в двух версиях – Standart и Business.
Процесс редактирования документа напоминает работу с обычным
текстовым редактором. Возможно
системный администратор ноябрь 2015
сканированных документах или изображениях, делающих его доступным для редактирования, проверка
на соответствие стандартам PDF/A,
E, X. Есть режим пакетной обработки
документов, оптимизации и сжатия.
Функции безопасности обеспечивают защиту паролем, удаление конфиденциальной информации перед
публикацией, шифрование файлов
с помощью сертификатов, можно
подписывать документы цифровой
и рукописной подписью, проверять
цифровую подпись, поддерживаются
подписи DocuSign. И многое другое.
Доступен плагин редактирования
для Microsoft Word 2010 и 2013, позволяющий создавать отредактированный PDF-документ в этих редакторах.
В версии Business, кроме этого,
доступны функции расширенного
редактирования,
предоставляющие
возможность редактировать изображения, объекты и отсканированные
документы, изменять свойства макета
страниц, конвертировать текст в контур и т.д. Интеграция со службой управления правами Active Directory позволяет обеспечить доступ к документу
только тем сотрудникам, которые имеют на это права. Плюс шифрование документа с помощью пароля или сертификата, а также интеграция с DocuSign
для электронных подписей, безвозвратное удаление текста и изображений, добавление водяных знаков.
Общее рецензирование также инициируется только в версии Business,
но в процессе обсуждения могут участвовать пользователи с установленной PhantomPDF Standart, а также
читалок Foxit Reader и MobilePDF. Рецензирование проводится с помощью
электронной почты, сетевой папки, рабочей области SharePoint или посредством сервиса Public Cloud.
Кроме того, OEM-партнерам доступна возможность запуска в режиме
PhantomPDF Express, предоставляемом
бесплатно и позволяющем, кроме просмотра файлов, производить базовые
операции по созданию PDF с функциями совместной работы (аннотации, заполнение форм, обмен информацией
и т.д.). При необходимости Express легко лицензировать до Business. Среди
партнеров такие, как HP, Acer и ASUS,
поэтому PhantomPDF можно встретить
в качестве предустановленной программы для работы с PDF на трети ПК
с ОС Windows.
Для подавляющего большинства задач
возможностей PhantomPDF более чем
достаточно. Стоимость, простота в использовании и широкий набор функций делают его хорошим выбором. ADV
[1] Страница Foxit PhantomPDF – https://
www.foxitsoftware.com/ru/pdf-editor,
http://www.foxitsoftware.com/russian/
products/phantomPDF/business.
17
Администрирование
удаленный доступ
Визитка
ИГОРЬ ОРЕЩЕНКОВ,
инженер-программист, iharsw@tut.by
Удаленная поддержка пользователей
Тема удаленного управления компьютерным оборудованием родилась вместе
с появлением компьютерных сетей и, наверное, уже никогда не утратит своей
актуальности
Для удаленного управления постоянно разрабатываются
новые программные продукты, утверждаются новые стандарты. Возможность дистанционного решения проблем
выгодна как системным администраторам, которые предпочитают не покидать лишний раз уютного кресла, так и их работодателям, которые видят экономию от уменьшения времени простоев и сокращения транспортных расходов.
Посредством удаленного доступа можно решать два
класса задач: производить настройку компьютерного оборудования и оказывать техническую поддержку пользователям, подключившись к их рабочему сеансу, и, оценив
сложившуюся на рабочем столе ситуацию, уверенно руководить их действиями.
В этой статье акцент сделан на вторую категорию задач
с ориентацией на инфраструктуру Microsoft Windows, поскольку в корпоративном сегменте эта операционная система по-прежнему занимает лидирующие позиции.
Актуальностью проблемы дистанционного управления обусловлен широкий выбор средств для ее решения.
Их можно разделить на три класса:
> Платные коммерческие продукты.
> Встроенное средство операционных систем Windows –
Удаленный помощник.
> Бесплатные разработки, базирующиеся на открытых
протоколах.
Мы не будем рассматривать в этой статье продукты первой категории, потому что консультации по их развертыванию и использованию оказывают разработчики. Остановимся подробнее на оставшихся двух классах.
Удаленный помощник
Почему-то документация Microsoft долгое время подробно
описывала неудобный способ предоставления удаленной
помощи через передачу маркера-приглашения посредством
электронной почты. Это заставляло многих системных администраторов прибегать к использованию альтернативных
средств. На самом же деле существует и вполне приемлемый вариант, реализующий более привычную схему предложения помощи по принципу подключения к удаленному
рабочему столу.
Подготовка к использованию удаленного помощника
Настройку инфраструктуры для использования удаленного
помощника стоит начать с настройки операционных систем пользователей, которым будет оказываться помощь.
Рисунок 1. Включение аудита входа в систему
18
ноябрь 2015 системный администратор
удаленный доступ
Администрирование
Использование проприетарных
решений сложно, если линия
взаимодействия пересекает
границу одной организации
Поскольку «удаленный помощник» использует ту же систему
аутентификации, что и средство доступа к файлам и принтерам, проверить ее готовность можно с помощью команды:
net use \\workstation /user:domain\login password
где:
> workstation – сетевое имя целевого компьютера (можно
использовать IP-адрес),
> domain – имя домена,
> login – имя доменной учетной записи пользователя,
> password – пароль учетной записи.
Если компьютер workstation не введен в домен, то проверку нужно провести от имени локальной учетной записи
пользователя на этом компьютере. Тогда команда приобретет вид:
Security («Безопасность») средства просмотра событий
eventvwr.msc. Если никакое сообщение не появилось, значит, до аутентификации дело не доходит, и нужно проверять
наличие сетевого соединения между компьютерами и настройки брандмауэра.
Наиболее вероятно, что в ответ на попытку подключения
будет выдано сообщение «System Error 1326 has occured.
Logon failure: unknown user name or bad password» («Системная ошибка 1326. Вход в систему не произведен: имя пользователя или пароль не опознаны») (см. рис. 2).
Если есть уверенность в том, что ошибка в предоставленных регистрационных данных исключена, нужно открыть раздел Computer Configuration → Windows Settings →
Security Settings → Local Policies → Security Options («Конфигурация компьютера → Конфигурация Windows → Параметры безопасности → Локальные политики → Параметры
безопасности») в редакторе групповых политик gpedit.msc
и сверить находящиеся в нем параметры между целевым
net use \\workstation /user:workstation\login password
В случае благополучной авторизации будет выдано сообщение: «The command completed successfully» («Команда
выполнена успешно»), после чего установленное соединение можно удалить командой:
Рисунок 2. В журнале зарегистрирована неудачная попытка подключения
net use \\workstation /d
Однако возможны проблемы. Начать их решение лучше
всего с включения аудита входа в систему на целевом компьютере. Для этого запускается редактор групповых политик
gpedit.msc, переходим в раздел Computer Configuration →
Windows Settings Security → Settings → Local Policies →
Audit Policy («Конфигурация компьютера → Конфигурация
Windows → Параметры безопасности → Локальные политики → Политика аудита»), и для политики Audit account logon
events («Аудит входа в систему») устанавливаются отметки
«Успех» и «Отказ» (см. рис. 1).
Повторное выполнение команды должно привести к появлению сообщения о попытке входа в систему в журнале
системный администратор ноябрь 2015
19
Администрирование
и управляющим компьютерами. Особое внимание следует обратить на согласованность значений параметра «Сетевая безопасность: уровень проверки подлинности LAN
Manager» (Network security: LAN Manager authentication level).
Если целевой компьютер не является членом домена,
то необходимо проверить значение параметра Network
access: Sharing and security model («Сетевой доступ: модель
совместного доступа и безопасности для локальных учетных
записей»). В Windows XP для упрощения совместного использования сетевых ресурсов принято значение по умолчанию Guest only – local users authenticate as Guest («Гостевая – локальные пользователи удостоверяются как гости»),
что препятствует работе при отключенной гостевой учетной
записи. Поэтому лучше изменить значение этого параметра на Classic: Local users authenticate as themselves («Обычная – локальные пользователи проверяются по их учетным
данным»).
Настройка целевого компьютера
Чтобы пользователи целевого компьютера смогли получать предложения об оказании помощи, нужно открыть
раздел Computer Configuration → Administrative Templates →
System → Remote Assistance (Конфигурация компьютера →
Административные шаблоны → Система → Удаленный помощник) в редакторе групповых политик gpedit.msc целевого
компьютера и установить в состояние Enabled («Включен»),
значение параметра Solicited Remote Assistance («Запрошенная удаленная помощь»). В этом же разделе устанавливается в состояние Enabled («Включен») значение параметра Offer Remote Assistance («Разрешить предложение
удаленной помощи»), задаются полномочия удаленного помощника – Allow helpers to remotely control the computer («Помощники могут управлять компьютером») или Allow helpers
to only view the computer («Помощники могут только наблюдать»), и через окно редактирования списка помощников,
удаленный доступ
доступное по кнопке «Show...» («Показать...»), вводятся
учетные записи, имеющие право оказания помощи.
Доменные учетные записи должны вводиться в формате «Домен\ИмяПользователя», а локальные учетные записи – просто в виде «ИмяПользователя» (имя компьютера
в качестве домена указывать не нужно). Если для оказания
помощи будут использоваться локальные учетные записи,
то учетная запись на целевом компьютере должна иметь
те же самые имя и пароль, что и учетная запись помощника
на управляющем компьютере. Это связано с тем, что указать учетную запись, от имени которой производится подключение (как, например, в команде net use), для удаленного помощника нельзя. Подключение всегда осуществляется
от имени той учетной записи, под которой помощник авторизовался в операционной системе своего компьютера.
Помощь в действии
После выполнения перечисленных шагов целевой компьютер готов принимать предложения от помощников. Пришло
время разобраться, как помощник может это предложение
отправить. В этом месте хочется отдать должное дизайнерам пользовательского интерфейса Windows и признать,
что выполнить что-то сложнее запуска браузера без командной строки стало практически невозможно.
Одним словом, набираем команду msra (легко запоминающуюся аббревиатуру от Microsoft Remote Assistance),
выбираем вариант «Помочь тому, кто вас пригласил» (Help
someone who has invited you), а на следующем экране, раз
нас никто не пригласил и мы хотим ворваться без приглашения, – ссылку «Вариант расширенного подключения
для службы поддержки» (Advanced connection option for help
desk), которая отображается мелким шрифтом в самом низу
формы (см. рис. 4). Сразу вслед за этим будет предложено
ввести имя или IP-адрес компьютера, что и нужно сделать,
подтвердив ввод щелчком по кнопке «Далее».
Рисунок 3. Разрешение предложения удаленной помощи
20
ноябрь 2015 системный администратор
удаленный доступ
Если сетевые настройки согласованы, то на экране целевого компьютера появится окно с предложением разрешить
помощнику доступ к компьютеру. В случае положительного
ответа помощник будет видеть рабочий стол целевого компьютера, но не сможет вмешиваться в его работу (см. рис. 5).
Чтобы захватить управление целевым компьютером, нужно
отправить запрос с помощью пиктограммы «Запрос управления» (Request control) на панели инструментов средства
«Удаленный помощник» и получить на него положительный
ответ.
Однако пользователь может и не передавать управление помощнику. При этом у сторон остается возможность
взаимодействовать посредством встроенного чата и однонаправленной передачи файлов с целевого компьютера
помощнику. Помимо этого, пользователь в любой момент
может прервать сеанс оказания помощи с помощью кнопки
на панели управления.
К сожалению, возможности «Удаленного помощника»
разнятся от версии к версии Windows, при определенных
сочетаниях операционных систем помощника и пользователя некоторые возможности могут оказаться недоступными, а в отдельных случаях может оказаться принципиально
невозможным само подключение (например, от Windows XP
к Windows 7) [1]. Средство «Удаленный помощник» впервые
появилось в Windows XP, поэтому использовать его с более
ранними версиями операционных систем не удастся.
Администрирование
Рисунок 4. Оказание помощи без приглашения
Рисунок 5. Помощник уже видит рабочий стол пользователя, но еще не может им
управлять
Бесплатное решение
Пришло время рассмотреть вариант организации системы
удаленной помощи на базе бесплатных разработок. Наиболее практичным механизмом доступа к удаленному рабочему
столу является использование систем, построенных на базе
протокола RFB (Remote Framebuffer Protocol). Реализующие
его программные продукты, как правило, обеспечивают, помимо режима графического терминала, некоторые полезные дополнительные возможности, как то двунаправленную
передачу файлов и проброс содержимого буфера обмена.
Класс этих клиент-серверных программ получил название
VNC (Virtual Network Computing).
К сожалению, многие бесплатные продукты VNC не обеспечивают защищенного канала передачи данных. В информационных системах, где безопасность является критичным
фактором, необходимо туннелировать поток данных через
SSH (см. рис. 6).
Ниже будет рассмотрен процесс построения системы
удаленного доступа к рабочему столу на основе трех бесплатных продуктов:
> Клиент-серверного решения TightVNC 2.7.10.
> SSH-сервера freeSSHd 1.3.1.
> SSH-клиента PuTTY 0.65.
Рисунок 6. Безопасность информационного обмена обеспечивается SSH-туннелированием
Настройка целевого компьютера
Начать настройку целевого компьютера лучше с создания защищенной паролем локальной учетной записи пользователя
RemoteAssistant, которую мы будем использовать для тестирования сетевого подключения. Несмотря на то что SSH-сервер поддерживает авторизацию по сохраненному паролю,
по базам данных пользователей локального компьютера
или домена и на основе открытых ключей, проверять работу
связки VNC-client – PuTTY – SSH-server – VNC-server удобно
системный администратор ноябрь 2015
21
Администрирование
наиболее простым способом. Для большей безопасности можно исключить пользователя RemoteAssistant из всех
групп.
На следующем шаге разворачиваем сервер TightVNC [2].
Процесс проходит линейно, но на этапе выбора компонентов можно отказаться от установки VNC-клиента. По завершении будет предложено ввести пароли для удаленного подключения к серверу и для локального доступа
к интерфейсу конфигурирования. По умолчанию сервер
ожидает подключений на порту 5900, не будем менять эту
настройку.
Установка сервера FreeSSHd [3] тоже не вызывает затруднений. Но на настройку придется затратить чуть больше усилий. Сразу отметим, что после внесения любых изменений в конфигурации сервера для вступления их в силу
нужно перезапустить службу FreeSSHDService через интерфейс соответствующей оснастки панели управления
Windows либо перезагрузить компьютер.
После установки можно отключить автоматическое обновление на закладке Automatic updates, снять отметку Start
Telnet server on freeSSHd startup на закладкe Telnet и включить журналирование на закладке Logging. Разрешим доступ к серверу пользователю RemoteAssistant, для чего нужно
открыть закладку Users, нажать кнопку «Add...», ввести имя
пользователя и установить единственную отметку Tunneling.
Включение туннелирования производится на закладке
Tunneling установкой флажка Allow local port forwarding.
По умолчанию SSH-сервер ожидает подключения на порту 22, что мы не будем менять.
Настройка компьютера помощника
удаленный доступ
После установки запускаем PuTTY и производим настройки для установления SSH-туннеля. Поскольку нам
не нужен доступ к командной строке, в категории настроек Connection-SSH устанавливаем флажок Don't start a shell
or command at all (см. рис. 7). В подкатегории настроек
Connection-SSH-Tunnels указываются:
> локальный порт, с которого будет начинаться SSHтуннель, в поле Source port (например, 5922);
> IP-адрес и порт целевого компьютера, которым заканчивается SSH-туннель, в поле Destination (в нашем случае
это 192.168.243.128:5900).
После нажатия кнопки «Add» в окне Forwarded ports
должно отобразиться правило: L5922 192.168.243.128:5900
(см. рис. 8).
Затем на компьютере помощника запускается PuTTY
и подключается к порту SSH-сервера целевого компьютера. После успешной парольной аутентификации на экране
остается только черное окно PuTTY. Его не нужно закрывать
до конца сеанса удаленного подключения, потому что им обеспечивается функционирование SSH-туннеля. Если сейчас
посмотреть в журнал SSH-сервера, то можно увидеть записи:
10-17-2015 11:16:26
attempt.
10-17-2015 11:16:35
successfully logged
10-17-2015 11:16:35
RemoteAssistant.
10-17-2015 11:16:43
RemoteAssistant.
IP 192.168.243.129 SSH connection
IP 192.168.243.129 SSH RemoteAssistant
on using password.
Shell service denied to user
Tunneling service granted to user
На компьютере помощника нужно установить VNC-клиент
и SSH-клиент PuTTY [4]. Не будем останавливаться на этом
процессе, потому что он не должен вызвать никаких затруднений.
Теперь запустим VNC-клиент, указав в качестве адреса
целевого компьютера localhost::5922. Если все было проделано правильно, то появится запрос пароля VNC-сервера
на доступ к рабочему столу целевого компьютера. После
ввода пароля на компьютере помощника в VNC-клиенте
Рисунок 7. Чтобы при запуске PuTTY не отображалось сообщение This service is
prohibited, нужно отключить функцию запуска командной оболочки
Рисунок 8. Так настраивается проброс локального порта 5922 на порт 5900 удаленного
компьютера
22
ноябрь 2015 системный администратор
удаленный доступ
Администрирование
должно открыться окно удаленного рабочего стола
(см. рис. 9).
plink.exe -N -L 5922:192.168.243.128:5900 192.168.243.128
Эксплуатация бесплатного решения
Коммерческие решения доступа к сеансам работы удаленных пользователей просты в развертывании и эксплуатации. Однако их широкомасштабное внедрение может потребовать значительных финансовых затрат. Кроме того,
использование проприетарных решений затруднительно,
если линия взаимодействия Помощник – Пользователь пересекает границу одной организации.
Встроенное в Windows средство «Удаленный помощник»
может быть легко развернуто в домене Active Directory,
но возможности его применения асимметричны по отношению к версиям операционных систем помощника и пользователя.
Бесплатные решения, основанные на открытых протоколах, являются наиболее гибкими, однако их развертывание и конфигурирование на начальном этапе может
быть сопряжено с некоторыми трудностями. Отличительной чертой рассмотренного решения на базе продуктов TightVNC, freeSSHd и PuTTY является единообразное
функционирование на всем спектре операционных систем
от Windows 2000 до Windows 10. EOF
После успешного экспериментального запуска системы
можно осуществить ее настройку для конкретного варианта
использования.
Клиент TightVNC может быть сконфигурирован для предоставления пользователю решения о разрешении подключения помощника. Для этого на закладке Access Control
интерфейса конфигурирования сервера (который вызывается щелчком по пиктограмме TightVNC в области оповещения панели задач Windows) нужно добавить правило, содержащее IP-адрес помощника и действие Query local user
(«Спросить локального пользователя»). Не будет лишним
здесь же добавить дополнительное правило с диапазоном
IP-адресов от 0.0.0.0 до 255.255.255.255 и действием Deny
(«Отклонить») для запрета подключений с других компьютеров (см. рис.10).
При такой настройке при попытке подключения помощника к рабочему столу пользователя у последнего появится
диалоговое окно, предлагающее принять или отклонить подключение. Если в течение 30 секунд ответ не будет получен,
то подключение будет отклонено (по умолчанию) или принято в зависимости от настроек Query Settings VNC-сервера.
Для технической поддержки нескольких пользователей
на компьютере помощника нужно обеспечить возможность
установления множества SSH-подключений (для организации туннеля между компьютером помощника и компьютерами пользователей), а VNC-подключение всегда будет одним
и тем же (к началу туннеля LOCALHOST::5922). PuTTY позволяет сохранять настройки сеансов в графическом интерфейсе либо предлагает использовать утилиту командной
строки PLink. Для рассмотренного выше примера работает
такая команда:
Рисунок 9. В результате правильного конфигурирования помощник получает доступ
к рабочему столу пользователя
системный администратор ноябрь 2015
[1] Windows 7 Resource Kit. Tulloch M., Northrup T., Honeycutt J.
(Chap. 23 Draft) – http://download.microsoft.com/download/A/3/9/
A398AF3E-75FB-465B-9FD4-DC4BE307A921/Win7_RK_
SampleChapter_23.pdf.
[2] Клиент-серверное решениеTightc – http://www.tightvnc.com.
[3] SSH-сервер freeSSHd – http://www.freesshd.com.
[4] SSH-клиент PuTTY – http://www.chiark.greenend.org.uk/~sgtatham/
putty.
Ключевые слова: удаленное управление, удаленный помощник,
Windows, SSH, VNC.
Рисунок 10. Настройка «деликатного» поведения помощника
23
Администрирование
учет и инвентаризация
Визитка
ИГОРЬ ЧУФАРОВ, начальник отдела интегрированных
автоматизированных систем, ОАО «Радиозавод», igorchufarov@mail.ru
Учет компьютеров от А до Я
Часть 2. Учет комплектов
В статье пойдет речь об особенностях учета комплектов и составных частей
компьютерного оборудования
В предыдущей части статьи [1] было подробно рассмотрено, чем отличается учет оборудования от инвентаризации,
в чем важность этих мероприятий и почему одно нельзя заменять другим. Сегодня поговорим о подводных камнях учета комплектов.
Ведомость активов
Примеры будут приведены для конфигурации «1С:ITIL
Управление информационными технологиями предприятия.
СТАНДАРТ». Из прошлой статьи стало примерно понятно,
каким образом в системе строится учет активов. Основным
способом, позволяющим увидеть информацию по активам
(компьютерному оборудованию), является отчет «Ведомость
активов по рабочим местам» (см. рис. 1). Второе название
данного отчета «Остатки и обороты на рабочих местах».
Именно на этом отчете закончилась предыдущая часть статьи. Сегодня о его преимуществах и недостатках остановимся более подробно.
Что же в этом отчете можно увидеть, а чего не хватает?
В первую очередь мы видим, что рабочие места выведены в порядке иерархии. Верхний уровень в приведенном
примере (использовались демонстрационные данные,
Рисунок 1. Отчет «Ведомость активов по рабочим местам» – аналог оборотно-сальдовой ведомости в бухгалтерском учете
24
ноябрь 2015 системный администратор
учет и инвентаризация
Администрирование
Один из самых тонких вопросов, касающихся учета компьютерного оборудования, – это раздельный либо совместный
учет комплектов. Не секрет, что в большинстве случаев
компьютеризированное рабочее место сотрудника состоит
из нескольких устройств. Обычно это системный блок, монитор, клавиатура, мышь, принтер и источник бесперебойного питания. В совокупности эти составляющие представляют собой комплект.
Безусловно, возможны различные вариации «на тему»
с большей или меньшей степенью экзотики. Например,
на местах могут отсутствовать источники бесперебойного
питания. От принтеров на рабочих местах также можно отказаться, если организовать централизованную очередь печати на сетевых принтерах, расположенных в специальных
местах. Наконец, системный блок – тоже не нечто само собой разумеющееся и не непреложная единственная истина
в последней инстанции. Вполне может быть ситуация, когда на рабочих местах используются тонкие клиенты. Кроме
того, никто не отменял такие рабочие инструменты, как ноутбуки, планшеты и моноблоки.
Если кажется, что варианты ограничиваются исключением или заменой некоторых составных частей комплекта,
то это не так. Например, для некоторых пользователей, чья
деятельность связана с работой в сложных графических
программах, может потребоваться несколько мониторов.
Для печати может использоваться несколько печатающих
устройств (лазерное, струйное, для печати на специфических материалах и так далее).
Но, так или иначе, в подавляющем большинстве случаев
компьютеризация рабочего места подразумевает установку
на него некоторого комплекта компьютерного оборудования.
Кто бы мог подумать, но именно этот факт стал камнем
преткновения в том, как именно отражать в бухгалтерском
учете компьютерное оборудование. Детально с точки зрения бухгалтера вопрос рассматривается в [2], где приводятся ссылки на нормативные документы и данные из арбитражной практики. Мы же рассмотрим только моменты,
важные с практической точки зрения, причем не со стороны
служб информационных технологий.
Входными данными для нас, ИТ-специалистов, будет являться позиция бухгалтерии относительно правил учета компьютерного оборудования. Возможны два варианта: в составе основных средств и в составе материалов.
Последний вариант допустим в случае, если стоимость
приобретаемого оборудования не превышает лимит, уста-
Рисунок 2. В карточке актива в группе «Идентификация» может быть указан инвентарный
номер оборудования, по которому проводится инвентаризация
Рисунок 3. Функционал состава оборудования присутствует в конфигурации в виде
вкладки «Состав» у карточки актива
включенные в комплект поставки «1С:ITIL Управление информационными технологиями предприятия. СТАНДАРТ»)
включает в себя классификацию по внешним и внутренним клиентам. Следующий уровень детализации – названия организаций для внешних клиентов и названия офисов
для внутренних.
Для каждого рабочего места выводится оборудование,
которое на нем расположено. Более того, в отличие от окна
«Активы в разрезе рабочих мест», в котором показан исключительно временной срез остатков активов на текущий
момент времени, в отчете «Ведомость активов по рабочим
местам» можно видеть динамику движения активов по рабочим местам за заданный промежуток времени. Последний
может быть задан произвольным образом в поле «Период»
верхней части с настройками отчета. Стандартными средствами там же можно отфильтровать отчет по рабочему месту
(как одному, так и нескольким внутри иерархии или по списку), виду и типу актива.
Для тех, кто знаком с бухгалтерским учетом, будет очевидно, что данный отчет – очередная вариация на тему оборотно-сальдовой ведомости, в которой видны остатки на начало и конец периода, а также обороты (приходы и расходы)
в течение него.
Однако с точки зрения принятой российской практики
ведения учета оборудования на предприятиях в данной ведомости не хватает такого широко распространенного реквизита, как инвентарный номер. Хотя последний вносится
в карточку актива (см. рис. 2).
Казалось бы, есть серийный номер оборудования, который также доступен для заполнения в карточке и который
в отличие от инвентарного попадает в отчет «Ведомость активов по рабочим местам». Для чего важен и нужен именно
инвентарный номер? Почему недостаточно учета серийного
номера?
Об этом речь пойдет далее, и невозможно раскрыть эту
тему полноценно, не введя понятия комплекта и не объяснив, какие особенности имеет учет комплектов в бухгалтерском учете на предприятиях.
Его величество Комплект
системный администратор ноябрь 2015
25
Администрирование
новленный в учетной политике организации. Законодательно размер такого лимита ограничивается суммой 40 000 руб.
(в п.5 ПБУ 6/01).
Надо заметить, что применительно к компьютерному оборудованию этот лимит находится, что называется, «на грани», особенно учитывая колебания курса валют. Кроме того,
для каждой конкретной организации лимит может быть свой,
и это необязательно именно 40 000 руб.
Вариант с учетом компьютерной техники в составе материалов, безусловно, проще, так как ее приобретение и списание можно оформлять точно так же, как это делается
для прочих материально-производственных запасов.
Более сложным вариантом является учет компьютерной
техники в составе основных средств. Почему это оправдано? Как уже говорилось выше, максимальный лимит
для отнесения закупаемого оборудования к материальнопроизводственным запасам ограничен суммой в 40 000 руб.
Комплект компьютерного оборудования как раз имеет стоимость в районе этой суммы. Значит, может сложиться ситуация, когда один комплект будет оформлен как материал
(так как его стоимость – 39 000 руб.), а другой как основное
средство (стоимостью 41 000 руб.).
Очевидно, что такой разброс однородных объектов
по разным областям учета, мягко скажем, не увеличивает
прозрачность контроля за компьютерной техникой. Поэтому
во многих организациях компьютерное оборудование учитывают в составе основных средств.
Единое целое
Предположим далее, что используется именно вариант
учета компьютерного оборудования в составе основных
средств. Однако и на этом вопросы касательно деталей
учет и инвентаризация
учета, к сожалению, не заканчиваются. Жаркие споры идут
относительно того, можно ли части комплекта учитывать
по отдельности.
Большинство контролирующих органов сходятся на том,
что учитывать по частям нельзя. Их довод состоит в том,
что по отдельности составные части комплекта не могут
выполнять свою функцию, а значит, становятся основным
средством только в комплекте с остальными частями.
С технической точки зрения, это, конечно, бред. Монитор
нельзя использовать в отрыве от системного блока? А если
подключить к нему по HDMI-медиаплеер, то можно. Источник
бесперебойного питания нельзя использовать вне комплекта? А если подключить к нему лампочку освещения – это ведь
заработает? Системный блок несостоятелен без остальных
составных частей комплекта? А если на него установить
гипервизор VMware ESXi, внутри «поднять» несколько виртуальных машин и подключаться к нему, используя сетевое
соединение, – как это будет укладываться в идею о неделимости комплекта? Для «технаря» со всей очевидностью
ясно, что комплект – это лишь абстракция, признанная упростить учет однотипных сущностей. Но так ли они однотипны,
как кажется? Вопрос открытый.
Более того, нередки ситуации, когда составные части
комплекта могут быть перемещены независимо от остальных частей. За примерами далеко ходить не надо. Допустим, закупили комплект с большим широкоэкранным
монитором. А сотруднику, на рабочее место которого
устанавливается комплект, такой монитор без надобности в силу выполняемых им задач. В то же время коллега
этого сотрудника как раз нуждается в апгрейде монитора.
Что при этом происходит? Мониторы меняются местами,
комплект разрывается.
Рисунок 4. Поступление комплекта, состоящего из системного блока, монитора и источника бесперебойного питания
26
ноябрь 2015 системный администратор
Администрирование
учет и инвентаризация
Кроме того, у разных составных частей комплекта может
существенно отличаться срок полезного использования.
При этом логично данный факт отражать в бухгалтерском
учете, а значит, для каждой составной части комплекта нужно вводить в эксплуатацию отдельное основное средство.
В противном случае говорить ни о каком различии сроков
эксплуатации не приходится.
Именно эти два довода обычно используются для подтверждения права раздельного учета составных частей
комплекта. О положительном решении подобных вопросов
свидетельствует арбитражная практика. Поддерживает данную точку зрения и Высший арбитражный суд Российской
Федерации.
Однако надо понимать, что для предприятий, область
информационных технологий для которых не является профильной, вряд ли будет продуктивным судиться и отстаивать
свою точку зрения по этому вопросу. Поэтому с точки зрения департамента информационных технологий важно лишь
прояснить позицию бухгалтерии по этому вопросу и принять
ее к исполнению.
Комплект комплекту рознь
Рассмотрим самый сложный вариант из тех, что были описаны выше. Пусть на предприятии используется учет компьютерного оборудования в составе основных средств, кроме того, в бухгалтерском учете не допускается разделение
комплектов на составные части. При этом предположим,
что в связи с производственной необходимостью составные
части комплектов перемещаются между рабочими местами независимо от остальных составных частей комплекта.
Сложная и противоречивая задача, не правда ли?
В конфигурации «1С:ITIL Управление информационными технологиями предприятия. СТАНДАРТ» есть стандартная возможность учитывать состав оборудования. Однако,
как обычно, у этого функционала существуют определенные особенности.
В карточке актива на вкладке «Состав» присутствует возможность задания комплектующих, из которых состоит тот
или иной актив (см. рис. 3).
В первую очередь под комплектующими понимаются,
конечно, компоненты системного блока, что хорошо видно
даже на демонстрационных данных из комплекта поставки
прикладного решения «1С:ITIL Управление информационными технологиями предприятия. СТАНДАРТ».
Попробуем «примерить» учет комплектов на данный
функционал. Насколько соответствуют понятию «комплектующие» такие составные части комплекта, как монитор,
системный блок и источник бесперебойного питания? Представим, что все сделано именно так (см. рис. 4).
С точки зрения прикладного решения все в порядке: в состав комплекта мы можем включить по своему усмотрению
все что угодно. На вкладке активы корректно отобразятся
и комплект, и его составные части (см. рис. 5). Но есть два
очень серьезных момента, препятствующих именно такой
организации учета комплектов. Давайте их внимательно
рассмотрим.
Момент первый. Если в качестве комплектующих актива
заданы составные части актива, а сам актив представляет
собой не что иное, как комплект, то возникает естественный
вопрос: а как же тогда учитывать собственно комплектующие в составе системного блока, ведь два иерархических
уровня детализации (актив и комплектующие) уже заняты.
С определенными ухищрениями все-таки возможно для комплектующих создавать еще комплектующие, из которых
они состоят. Однако получается некоторая искусственность
отнесения составных частей комплекта к комплектующим
(хотя тавтология создает иллюзию тождественности данных
понятий, что, безусловно, ложно).
Рисунок 5. Состав комплекта, размещенного на рабочем месте «Офис 200», виден в правой нижней области окна
системный администратор ноябрь 2015
27
Администрирование
Момент второй. Как уже обсуждалось выше, основные
сложности с комплектами возникают в том случае, если
составные части комплекта могут перемещаться по рабочим местам независимо друг от друга. Но если включить
их в состав актива, то по факту можно будет переместить
только весь актив целиком, но не его составную часть.
Здесь речь идет именно о документе «Перемещение активов» конфигурации «1С:ITIL Управление информационными технологиями предприятия. СТАНДАРТ» (см. рис. 6).
Конечно, чисто теоретически перемещать комплектующие
возможно. В документе «Перемещение активов» можно
выбрать вид ТМЦ «Комплектующая», тогда в поле актив
значение будет выбираться из соответствующего справочника.
Незадача же состоит в следующем. Если в случае
с активами при выборе в шапке документа рабочего места
и включении подбора в окне выбора актива происходит
фильтрация по рабочему месту и лишние активы в это окно
не попадают, то с комплектующими данный функционал
не работает.
Возможны два крайних варианта: либо отбор показывает
пустой список, либо, как в нижней части рис. 6, в список
попадают все комплектующие без фильтрации. Для демонстрационного примера внесено по три единицы каждой
комплектующей. Но что будет, когда их количество достигнет нескольких сотен или тысяч? Очевидно, что оформлять
такое перемещение комплектующих станет, мягко скажем,
проблематично. Более того, если попробовать провести
данный документ, появляется диагностическое сообщение
об ошибке: «Системный блок 1 не хватает на Складе 1».
О каком складе идет речь, если вся аналитика в системе выстроена вокруг рабочих мест, остается загадкой.
Так или иначе, если проявить дотошность, то документ
учет и инвентаризация
называется «Перемещение активов», а не «Перемещение
комплектующих», что как бы намекает на возможность некорректного отражения нетиповых хозяйственных операций. Ведь комплектующие в классическом понимании этого
слова редко перемещают с одного рабочего места на другое. В то же время составы комплекта имеют совершенно
иной смысл.
Однако, даже учитывая казус с перемещением, нельзя
сказать, что комплектующие, вошедшие в состав актива, –
это нечто, заданное жестко, раз и навсегда. Например, существует документ «Релиз актива», который предназначен
для фиксации факта изменения состояния актива. Таким
образом, можно зафиксировать факт добавления в состав
оборудования некоторой комплектующей (в нашем случае
составной части комплекта) либо ее исключение из состава
актива (в нашем случае из состава комплекта).
Нетрудно себе представить, какое количество «телодвижений» нужно нам совершить, чтобы отразить в учете
простое перемещение составной части комплекта с одного рабочего места на другое. Конечно, теоретически такое
сделать вполне можно, но вот только с практической точки
зрения при таком подходе вряд ли можно будет говорить
о какой-либо прозрачности таких перемещений и простоте их отслеживания, когда необходимо «открутить» назад
историю.
Учитывая два приведенных выше момента, можно прийти
к выводу, что учет составных частей комплекта как комплектующих актива – не самая лучшая идея. Гораздо продуктивнее уровень детализации, при котором единицей учета,
то есть активом, будут монитор, системный блок, источник
бесперебойного питания и принтер. Это позволит, с одной
стороны, оформлять движение этих объектов по рабочим
местам документом «Перемещение активов», а с другой
Рисунок 6. Документ «Перемещение активов» невозможно оформить для отдельной комплектующей
28
ноябрь 2015 системный администратор
учет и инвентаризация
стороны, даст возможность для системных блоков с высокой эффективностью вести в системе состав комплектующих, из которых они состоят.
Однако как быть с тем, что в бухгалтерском учете актив
представлен как единое целое с одним инвентарным номером, а в «1С:ITIL» будет использовано несколько активов
по числу составных частей? Я предлагаю решить данный
вопрос следующим образом: для всех составных частей актива использовать один и тот же инвентарный номер, который используется бухгалтерией для обозначения комплекта
(см. рис. 7).
При этом, правда, возвращаясь к отчету «Ведомость активов по рабочим местам», можно представить, что составные части комплекта как независимые активы будут расположены вразброс, и понять, на каком рабочем месте какая
составная часть комплекта установлена, станет невозможно. Это именно тот подводный камень по поводу инвентарных номеров, о котором я говорил в начале статьи, связывая
его с особенностью учета комплектов.
Однако достаточно изящно данную проблему можно
обойти, если создать дополнительный отчет, который отсутствует в изначальной поставке решения «1С:ITIL Управление информационными технологиями предприятия.
СТАНДАРТ». Суть данного отчета в том, чтобы произвести
группировку активов не по рабочим местам, как это делается в стандартной ведомости, а по инвентарным номерам
(см. рис. 8).
Как видно из рисунка, для тех активов, у которых заведены идентичные инвентарные номера, выводится группировка. Например, под инвентарным номером 18403275 выводится информация об источнике бесперебойного питания,
мониторе и системном блоке. Очевидно, что для каждой
из составных частей комплекта выводится ее месторасположение (рабочее место). Таким образом, даже если один
комплект по факту «разбросан» по разным рабочим местам,
из отчета нетрудно найти, на каком рабочем месте располагается какая его часть.
Надо сказать, что, кроме уже рассмотренных в данной
и предыдущей статьях реквизитов, в отчете выводятся и другие: пользователь оборудования, сеть, IP-адрес. Первый
из этих реквизитов изначально присутствует в прикладном
решении «1С:ITIL Управление информационными технологиями предприятия. СТАНДАРТ». В то же время последние
два являются еще одной полезной доработкой стандартного
решения. О ней, а также о других доработках, позволяющих
расширить исходный функционал конфигурации, – в следующей части статьи.
Администрирование
доработка тиражного решения. С учетом последней можно
достаточно свободно вести учет перемещающихся составных частей комплектов, невзирая на то что в бухгалтерском
учете они представляют собой единое целое.
В следующей части статьи еще больше «фишек» и доработок под нестандартные ситуации и расширение аналитических разрезов для получения информации в различном
виде. EOF
[1] Чуфаров И. Учет компьютеров от А до Я. Часть 1. Сбор информации. // «Системный администратор», №10, 2015 г. – С. 2429 (http://samag.ru/archive/article/3042).
[2] Бухгалтерский и налоговый учет компьютера. // «Главбух. Бумажный и электронный журнал, сообщество, справочная система и онлайн-сервисы», 09.09.2014 – http://www.glavbukh.ru/
art/21355-buhgalterskiy-i-nalogovyy-uchet-kompyutera.
[3] Бережной А. Как быстро и эффективно провести учет компьютерной техники. // «Системный администратор», №1, 2007 г. –
С. 20-24 (http://samag.ru/archive/article/755).
[4] Романенко Е. Инвентаризация компьютеров в сети, не вставая со стула, или OCS Inventory + GLPI – http://habrahabr.ru/
post/104141.
[5] Официальная страница программы для инвентаризации и учета
ПК в сети предприятия «10-Страйк: Инвентаризация Компьютеров» – http://www.10-strike.com/rus/networkinventoryexplorer.
[6] Степанов Д. «10-Страйк» – незаменимые программы
для системных администраторов. // «Системный администратор», №4, 2009 г. – С. 23 (http://samag.ru/archive/article/841).
Рисунок 7. Для всех составных частей комплекта можно задать одинаковые инвентарные
номера в карточке актива
Учет комплектов компьютерного оборудования имеет ряд
весьма специфичных тонкостей. Как видно, в бухгалтерской
практике не существует единой общепризнанной методики
учета комплектов. Вопрос имеет различные трактовки и толкования, поэтому решается в каждом конкретном случае поразному.
Независимо от варианта бухгалтерского учета комплектов в конфигурации «1С:ITIL Управление информационными технологиями предприятия. СТАНДАРТ» возможен
корректный учет жизненного цикла составных частей комплекта. Вплоть до самого сложного случая, когда требуется
системный администратор ноябрь 2015
29
Администрирование
[7] Степанов Д. Учет компьютеров и программ с помощью
«10-Страйк: Инвентаризация Компьютеров». // «Системный
администратор», №9, 2010 г. – С. 24-25 (http://samag.ru/archive/
article/1008).
[8] Степанов Д. Мониторинг сети и ПК предприятия. LANState Pro
и «10-Страйк: Инвентаризация Компьютеров». // «Системный
администратор», №11, 2013 г. – С. 34 (http://samag.ru/archive/
article/2561).
[9] Чуфаров И. Как избежать ошибок учета в «1С». Часть 1. Выбытие запасов. // «Системный администратор», №1-2, 2013 г. –
С. 72-76 (http://samag.ru/archive/article/2369).
[10] Чуфаров И. Как избежать ошибок учета в «1С». Часть 2. Учет
прямых материальных затрат. // «Системный администратор»,
№3, 2013 г. – С. 62-66 (http://samag.ru/archive/article/2399).
[11] Чуфаров И. Как избежать ошибок учета в «1С». Часть 3. Распределение косвенных материальных затрат. // «Системный
администратор», №5, 2013 г. – С. 46-53 (http://samag.ru/archive/
article/2439).
[12] Чуфаров И. Как избежать ошибок учета в «1С». Часть 7. Учет
оборудования. // «Системный администратор», №11, 2013 г. –
С. 73-79 (http://samag.ru/archive/article/2572).
[13] Чуфаров И. Как избежать ошибок учета в «1С». Часть 9. Амортизация основных средств. // «Системный администратор»,
№1-2, 2014 г. – С. 76-82 (http://samag.ru/archive/article/2615).
[14] Чуфаров И. Как избежать ошибок учета в «1С». Часть 10. События с основными средствами. // «Системный администратор», №5, 2014 г. – С. 40-45 (http://samag.ru/archive/article/2690).
[15] Чуфаров И. РАУЗ в 1С – друг или враг? Часть 1. Развенчание мифов и поиск правды. // «Системный администратор»,
№3, 2014 г. – С. 39-45 (http://samag.ru/archive/article/2642).
[16] Чуфаров И. РАУЗ в 1С – друг или враг? Часть 2. Детальный
учет, несмотря ни на что. // «Системный администратор»,
№4, 2014 г. – С. 39-45 (http://samag.ru/archive/article/2665).
учет и инвентаризация
[17] Описание программ и версий линейки решений «1С:ITIL Управление информационными технологиями предприятия» – http://
www.1c-itil.ru/versions.
[18] Учет компьютеров в «1С:ITIL Управление информационными технологиями предприятия» – http://www.1c-itil.ru/zadachi/
uk.php.
[19] Управление заявками пользователей в «1С:ITIL Управление информационными технологиями предприятия» – http://www.1citil.ru/zadachi/uz.php.
[20] Служба ServiceDesk в «1С:ITIL Управление информационными технологиями предприятия» – http://www.1c-itil.ru/zadachi/
sd.php.
[21] Учет загрузки сотрудников IT-службы в «1С:ITIL Управление информационными технологиями предприятия» – http://www.1citil.ru/zadachi/zs.php.
[22] Управление изменениями в «1С:ITIL Управление информационными технологиями предприятия» – http://www.1c-itil.ru/zadachi/
ui.php.
[23] Выявление проблемных мест в ИТ-инфраструктуре предприятия с помощью решеня «1С:ITIL Управление информационными технологиями предприятия» – http://www.1c-itil.ru/zadachi/
pm.php.
[24] Подготовка к сертификации «1С:ITIL Управление информационными технологиями предприятия» – http://www.1c-itil.ru/
zadachi/ps.php.
[25] Описание решения «1С:ITIL Управление информационными
технологиями предприятия. СТАНДАРТ» – http://rarus.ru/1cit/1c8-itil.
[26] Филиппов О. Знакомьтесь, 1С:ITIL. Автоматизация ИТ-отдела.
// «Системный администратор», №11, 2013 г. – С. 68-72 (http://
samag.ru/archive/article/2571).
Ключевые слова: учет, инвентаризация, комплект, 1С:ITIL.
Рисунок 8. В отчете «Составные инвентарные» активы сгруппированы по инвентарному номеру, благодаря чему комплекты собираются воедино
30
ноябрь 2015 системный администратор
бэкап
Администрирование
Визитка
АЛЕКСЕЙ БЕРЕЖНОЙ, независимый консультант, системный архитектор,
специалист по системам виртуализации и резервного копирования, alexey.berezhnoy@tech-center.com
Построение системы резервного копирования
для компании с множеством филиалов
Рассмотрим на конкретном примере процесс создания системы резервного
копирования с нуля для компании с множеством филиалов
Рано или поздно любой более или менее успешный бизнес
переходит эту грань перерождения и из небольшой локальной компании превращается в крупную инфраструктуру с несколькими филиалами. О том, что вместе с ростом
бизнеса необходимо обновлять ИТ-инфраструктуру, зачастую вспоминают только тогда, когда переход из малого
и среднего бизнеса в крупную компанию уже состоялся.
И то, что можно было осуществить поэтапно и не торопясь,
приходится делать сразу и быстро.
Так и случилось в одной компании, которая нежданнонегаданно превратилась в довольно крупную филиальную сеть. Что касается инфраструктуры общего назначения – электронная почта, СУБД, интернет-портал, – с этим
все было прекрасно. Единственный аспект, который традиционно обошли стороной, – система резервного копирования.
Итак, нужно было «всего-навсего» создать систему резервного копирования, которая бы позволила делегировать
ИТ-персоналу рутинные операции по выполнению резервного копирования, и в то же время центральное управление
должно было иметь независимые копии данных для осуществления контроля хозяйственной деятельности местных
управляющих.
Из анализа договоров с местными провайдерами стало
ясно, что каналы связи между филиалами и центральным
офисом не отличаются достаточной пропускной способностью для передачи большого количества данных при резервном копировании. Кроме этого, в некоторых офисах
была отмечена нестабильность работы внешней сети. Местные провайдеры просто не в состоянии обеспечить высокий
уровень качества связи.
В результате было установлено, что требуется очень
гибкое решение, способное учитывать все вышеописанные
нюансы.
Вместе с ростом бизнеса
необходимо обновлять
ИТ-инфраструктуру
Рассмотренные варианты
Ко времени окончания аудита мною уже были намечены два
решения.
Вариант от EMC
Аудит
После сбора информации с выездом в представительства
и опроса местных айтишников выяснились следующие
факты. ИТ-инфраструктура филиалов сильно отличалась,
как количественно, так и качественно. У кого-то установлены серверы последней модели и новейшее программное
обеспечение, а кое-где до сих пор можно встретить «динозавров» десятилетней давности. Численность ИТ-персонала
также сильно разнилась. При этом все эти отличия никак
не зависели от величины или финансового положения.
Единственное, что было более-менее схожим, – использование платформы Microsoft как основы для бизнес-среды.
То есть если речь шла о SQL-сервере, то можно было быть
уверенным, что это MS SQL, если о почтовом сервисе –
MS Exchange, и так далее.
системный администратор ноябрь 2015
Первое предложила компания EMC [1]. По ее замыслу,
в каждом филиале было необходимо установить медиасервер резервного копирования с большим дисковым массивом, который, собственно, и являлся бы основным хранилищем резервных копий.
Центр всей системы должен был располагаться в штабквартире. Там находятся управляющий сервер и мощная
дисковая система хранения данных, в несколько раз превосходящая филиальную. Соответственно, весь архив предполагалось разместить на этих жестких дисках.
Передача данных между центральным офисом и филиалами должна производиться исключительно по каналам связи в свободное от основной работы время.
Какие минусы у этого решения? Продукция EMC стоит весьма недешево. Когда инфраструктура, построенная
31
Администрирование
на таких продуктах, растет постепенно, то финансовые затраты, пусть и весьма высокие, равномерно распределяются в течение длительного времени. Но заплатить такую сумму за один раз чаще всего нереально.
Еще один важный момент – во всех рекламных буклетах
такого рода предложений не учитываются узкие каналы
связи. Да, представители EMC долго и одухотворенно говорили о прекрасных алгоритмах дедупликации, которые
есть в их продуктах. Если говорить о передаче инкрементальных копий, это прекрасно, алгоритмы сжатия и дедупликации здорово помогают в этом случае.
Очень важно видеть
всю картину и весь процесс
целиком – от закупки
оборудования до инструкции
по перевозке носителей
авиарейсами
Но никто из них так и не ответил на вопросы: «А как же
быть с полной резервной копией? Как этот самый Full Backup
попадет из филиала в штаб-квартиру?»
Даже если положиться на везение и верить, что за время
передачи связь не прервется, все равно процесс передачи всех данных занял бы около недели. При этом загрузка
и без того слабых линий была бы настолько велика, что полностью лишила бы филиал доступа в сеть.
Абсолютно было непонятно, как предполагается выполнять Disaster Recovery. Основой для хранения резервных
копий являлись дисковые массивы, которые размещались
в серверной и в случае форс-мажорных обстоятельств, например пожара, должны были неминуемо погибнуть вместе
с ней. Передача данных off-site по тонким каналам в центральный офис занимает массу времени, и столько же потребуется, чтобы выполнить полное восстановление.
Еще один вопрос заключался в подготовке и обучении
персонала. В некоторых представительствах не было системных администраторов на постоянной основе. И для обслуживания привлекались сотрудники по аутсорсинговой
модели. В других филиалах были свои системные администраторы общего профиля, но специалистов по работе со специализированными продуктами, такими как EMC
Avamar, просто не было. И если, рассуждая теоретически,
трудоустроенных специалистов еще можно отправить на дорогостоящие курсы, то что делать с «приходящими админами», не было понятно никому. Поэтому данное предложение не подошло, и внимание всей команды переключилось
на второй вариант.
Вариант автономной системы
резервного копирования
В качестве второго варианта рассматривался вопрос установки локальных систем резервного копирования в каждый
филиал, при этом время от времени комплект носителей,
содержащих Full Backup, должен был отправляться в штабквартиру.
32
бэкап
В качестве приложения для резервного копирования был
выбран CA ARCserve Backup for Windows [2] от компании CA
Technologies (ранее она имела полное название CA, Inc.,
Computer Associates). Причин для такого выбора было несколько. Во-первых, этот продукт реализует классическую
централизованную схему, при этом в наличии есть много
программ-агентов для большинства известных платформ
и приложений – от VMware ESX(i) до MS Exchange.
Кстати, об Exchange. Возможность выполнять так называемый granular backup, чтобы впоследствии восстанавливать
отдельные письма из почтовых ящиков, явилась несомненным плюсом.
Широкий спектр поддержки оборудования и отсутствие
необходимости специальным образом разыскивать драйверы для различных устройств, например ленточных накопителей, тоже был расценен как преимущество.
Вопрос с off-site и Disaster Recovery решался очень просто. Один комплект носителей с Full Backup должен все время храниться за пределами офиса. Где именно – это решала
служба безопасности. Возможность сохранения состояния
системы (System State) давала возможность быстро восстановить систему, пусть и не на «голое железо», но довольно
быстро.
Простой интерфейс управления и хорошая документация
также сыграли свою далеко не последнюю роль.
Обратите внимание, что данная система не предполагала
разделение на архивное копирование и снятие образа системы для Disaster Recovery. Это был явный минус системы.
Но, найдя утешение в словах «невозможно объять необъятное», было решено отложить создание системы снятия
образов на более поздний срок, и инженерная команда приступила к закупке и внедрению данного варианта.
Решение
В качестве основной схемы решения была принята централизованная схема среднего предприятия, когда один сервер
играет роль и управляющего и медиасервера.
В качестве основного носителя были выбраны кассеты
LTO. Для упрощения манипуляций версиями была выбрана
стандартная ежемесячная схема «дед-отец-сын». При этом
ежемесячные полные копии должны были передаваться
в центральный офис, а еженедельные полные копии вместе
с инкрементальными – оставаться в филиале. При этом предыдущая недельная полная копия изымается службой безопасности и хранится за пределами офиса.
При такой схеме ротации для размещения промежуточных копий использовались картриджи LTO2, а для хранения полных – LTO3. Объема картриджа (200 Gb без сжатия
LTO2 и 400 Gb без сжатия LTO3) на момент внедрения системы вполне хватало. Согласно выбранной схеме ротации
изымались только картриджи LTO3, а LTO2 оставались в накопителе для следующей перезаписи.
Примечательно, что системы резервного копирования
в филиалах и штаб-квартире были построены по одному
принципу. Различия были не качественные, а количественные: медиасервер в центральном офисе был мощнее, у него
было больше жестких дисков, к нему было подключено
больше ленточных накопителей и так далее...
Перемещение резервных копий между периферией
и центральным офисом не должно было составить большого
ноябрь 2015 системный администратор
бэкап
Администрирование
Процесс планирования
до внедрения решения
непосредственно связан
со спецификой бизнеса
труда, так как сотрудники филиалов и штаб-квартиры постоянно летали на встречи друг с другом. Оставалось позаботиться о мерах безопасности, чтобы при краже или утере
носителя информация на нем осталась недоступной для злоумышленника. В качестве основной меры защиты носителя
использовалось шифрование, дополнительно применялась
«безликая» схема маркировки, когда по надписи на кассете
нельзя установить, что за данные там записаны.
Существует старая шутка: «Все системный администраторы делятся на тех, кто делает бэкап и кто его не делает.
Последние делятся еще на два вида: кто пробовал восстанавливать из резервных копий и кто не пробовал». Разумеется, резервные копии обязательно необходимо проверять.
Поэтому в центральном офисе была организована целая
процедура, согласно которой привезенные резервные копии первоначально передавались службе безопасности,
она, в свою очередь, привлекала администратора резервного копирования для проверки возможности восстановления
данных, после чего изымала носители.
Еще один важный момент – все сотрудники, осуществляющие доставку резервных копий, были проинструктированы
на предмет прохождения контроля пассажиров на авиалиниях. Ленточные картриджи они были обязаны перевозить
в ручной клади (не сдавать в багаж!), при этом ни в коем
случае не держать при себе при прохождении магнитных рамок. Эти простые меры позволяли уберечь ленточные носители от возможных нежелательных воздействий магнитных
полей, а также от банальной кражи.
Роль управления всей сложной системой лежала на двух
инженерах из центрального офиса, игравших роль администраторов резервного копирования в центральном офисе.
Функции замены носителей и контроля за выполнением резервного копирования были делегированы местным системным администраторам в филиалах, которые выполняли роль
операторов резервного копирования.
Процесс внедрения
Условно процесс внедрения можно разделить на этапы:
> Планирование.
системный администратор ноябрь 2015
> Закупка оборудования.
> Установка ПО и тестирование.
> Передача в эксплуатацию и последующее сопровождение.
Далее расскажем обо всех пунктах по порядку.
Процесс планирования
Этот этап непосредственно связан со спецификой бизнеса.
И это неудивительно, потому что выполнение работ зависит
от выделяемых ресурсов и характера взаимодействия с другими подразделениями.
В данном случае для успешного выполнения были в наличии все необходимые составляющие: высшее руководство
компании (как я уже писал выше) объявило резервное копирование зоной особого внимания. Поэтому задача имела
высокий приоритет, деньги на закупку оборудования выделялись в достаточном количестве, а все остальные подразделения и сотрудники были обязаны оказывать посильную
помощь при внедрении.
В таких благоприятных условиях процесс планирования
сводится к приблизительному подсчету времени, необходимому для выполнения работ, и составлению графика.
Закупка оборудования
В качестве сервера резервного копирования для филиалов
был выбран сервер для монтажа в стойку высотой 1U и объемом памяти 8 Gb. Подключение к сети осуществлялось посредством двух LAN интерфейсов Gigabit Ethernet, встроенных в серверную материнскую плату.
Важной составляющей был контроллер UltraSCSI-320
с разъемом для подключения внешних устройств. В качестве ленточного накопителя использовался HP StorageWorks 1/8 G2 Tape Autoloader [3], подключаемый к серверу
по интерфейсу UltraSCSI-320.
Для системы резервного копирования штаб-квартиры
покупалось аналогичное, но более мощное оборудование. Сервер имел более мощный процессор, объем оперативной памяти 16 Gb, соответственно, его размер был
33
Администрирование
уже 2U, и к нему было подключено два автолоадера HP
StorageWorks 1/8 G2 Tape.
Говоря о закупках, не следует забывать о программном
обеспечении. Так как основной платформой для работы
была Windows, то на каждый сервер резервного копирования была куплена соответствующая лицензия для операционной системы. Также был приобретен комплект ПО CA
ARCserve, состоящий из основной программы для сервера
резервного копирования и набора программ-агентов. Состав и количество сильно отличались для каждого филиала.
Все же можно выделить некоторые общие черты, например, для каждого представительства была зарезервирована возможность копирования MS SQL Server, MS Exchange
(включая дополнительный модуль Granular Backup для копирования и восстановления писем по отдельности), а также
модель Open Files для файл-сервера, позволяющая копировать файлы, открытые для записи.
Ни в коем случае нельзя
перевозить ленточные
накопители с неизвлеченными
картриджами. Перед началом
перевозки устройство должно
быть полностью освобождено
от носителей информации
Все оборудование и программное обеспечение закупалось в центральном офисе, настраивалось и впоследствии
передавалось в филиалы. Такой порядок упрощал унификацию решения, а наработанные заготовки, например, образ
системы с установленным ПО, до ввода лицензии значительно упрощал развертывание.
Установка ПО и тестирование
Как уже было сказано выше, инсталляция программного
обеспечения производилась в штаб-квартире. Помимо простой установки, проводилось тестирование функций копирования-восстановления. Особое внимание уделялось работе устройств записи на ленту, как наиболее «капризной»
части решения.
Важное замечание. Ни в коем случае нельзя перевозить ленточные накопители с неизвлеченными картриджами. Перед началом перевозки устройство должно быть
полностью освобождено от носителей информации. Иначе
при перевозке происходят мелкие механические повреждения, по вине которых устройство не просто не способно записать и считать информацию, а даже извлечь ленту из записывающего устройства.
Передача в эксплуатацию
и последующее сопровождение
Функция самой передачи сводилась к написанию подробной
инструкции (дополнительно к штатной документации на устройства и ПО), перевозке и инструктированию по телефону
или Skype.
34
бэкап
Сопровождение на первом этапе заключалось в постоянном контроле работы системы резервного копирования,
как в центральном офисе, так и на периферии. Для осуществления контроля использовалась штатная консоль RDP,
традиционная для Windows-систем. Подключившись к удаленному серверу резервного копирования, администратор
мог видеть состояние заданий и ознакомиться с журналами
работы.
О печальном опыте использования DFS
Говоря о филиальной структуре, было бы несправедливо
замолчать один факт. В данной компании штаб-квартира
не представляла собой монолитное явление. Помимо центрального офиса, существовал еще и вспомогательный, где
располагалось небольшое вспомогательное подразделение.
Первоначально этому не придали значения, так как большую
часть работы они выполняли на сервере в офисе компании,
подключаясь удаленно по RDP. Но впоследствии оказалось,
что там тоже существует файл-сервер, где хранятся некие
данные для локального использования. И в соответствии
с политикой компании их также нужно копировать.
И тут снова возник дуализм мнений.
Самым простым решением было установить локальную
систему резервного копирования, тем более что на складе
валялся старый автолоадер LTO2 и соответствующих картриджей было в достаточном количестве. Если учесть малый
объем копируемых данных, то полной загрузки кассетами
этого хоть и старого, но весьма надежного устройства хватило бы мини-филиалу на несколько месяцев.
Нужно было всего лишь купить контроллер UltraSCSI,
подключить лоадер к файл-серверу. При этом не нужно
было покупать дорогостоящее ПО – для поставленных целей программы с лихвой хватило бы штатных средств операционной системы.
Недостатком данного решения была необходимость приобретать контроллер (он стоил хоть и недорого, но все равно нужно было платить) и время от времени забирать кассеты с резервными копиями из автолоадера. Если вспомнить,
что перед этим была организована доставка носителей
из удаленных филиалов, то этим обстоятельством вполне
можно было пренебречь.
Но местный апологет Microsoft предложил использовать
распределенную файловую систему DFS [4] для организации репликации.
Основными аргументами были отсутствие необходимости покупать контроллер и забирать кассеты. Достаточно
только настроить репликацию файлов в центральный офис
и копировать файлы на ленту уже внедренной системой
на базе ARCserve.
Компьютеры и мини-сервер этого филиала были в том же
домене Active Directory, что и в штаб-квартире. Поэтому
нашему герою оставалось только выделить дисковое пространство для хранения редуплицированной копии, создать
и запустить схему DFS – и вот оно, готовое решение!
Поначалу все шло нормально. Копии файлов из филиала хоть и с некоторым запозданием, но оказывались в резервном каталоге, что давало возможность делать бэкап.
Так продолжалось несколько месяцев.
Но потом произошло нечто странное. Репликация просто
перестала работать. Не помогли ни анализ логов, ни даже
ноябрь 2015 системный администратор
Администрирование
бэкап
повторное развертывание DFS. Решение проблемы осложнял тот факт, что, кроме этого поклонника Microsoft, из всего ИТ-отдела с данной проблемой возиться никто не хотел,
мало того, коллеги постоянно напоминали, что ради его «супертехнологии» пришлось пожертвовать простым и надежным решением.
Так продолжалось еще несколько месяцев. В итоге было
принято решение купить большой USB-диск и делать на него
добавочную копию. А еще через некоторое время этот мини-филиал просто закрыли, а всех сотрудников перевели
в центральный офис. И проблема неработающей репликации отпала сама собой.
Не стоит забывать, что все это время, когда прекратилась репликация DFS, резервное копирование выполнялось с перебоями, а порой и вовсе не проводилось.
Поэтому очень важно быть последовательными в своих
решениях и придерживаться проектных директив. Метания из стороны в сторону под девизом: «Как это интересно, а давайте попробуем...» – обычно ни к чему хорошему
не приводят.
Какие выводы можно сделать из данной истории? Вопервых, не нужно гнаться за широко разрекламированными решениями. Принцип «чем проще – тем надежнее» пока
еще никто не отменял. Во-вторых, очень важно видеть всю
картину и весь процесс целиком – от закупки оборудования
до инструкции по перевозке носителей авиарейсами. Остается пожелать читателям успехов в непростом деле самостоятельного создания систем резервного копирования. EOF
[1] Официальный сайт компании EMC на русском языке – http://
www.emc.com/ru-ru/index.htm?fromGlobalSelector.
[2] Официальный сайт программы Acronis на русском языке –
http://arcserve.com.
[3] Страница описания HP StorageWorks 1/8 G2 Tape Autoloader
на сайте HP – http://www8.hp.com/us/en/products/tapeautomation/product-detail.html?oid=3319912.
[4] MS TechNet: «Распределенная файловая система (DFS) в системе Windows Server 2003 с пакетом обновления 1 (SP1)» – https://
technet.microsoft.com/ru-ru/library/cc736868%28v=ws.10%29.
aspx.
[5] Бережной А. Резервное копирование. Теория и практика.
Краткое изложение. Часть 1. // «Системный администратор»,
№11, 2010 г. – С. 60-66 (http://samag.ru/archive/article/1115).
[6] Бережной А. Резервное копирование. Теория и практика.
Краткое изложение. Часть 2. // «Системный администратор»,
№12, 2010 г. – С. 34-37 (http://samag.ru/archive/article/1100).
[7] Бережной А. Резервное копирование. Теория и практика. Краткое изложение. Часть 3. // «Системный администратор», №12, 2011 г. – С. 72-76 (http://samag.ru/archive/article/1084).
Ключевые слова: системы хранения, резервные копии, DFS, отказоустойчивость.
15-й ФОРУМ
ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ
В РОЗНИЧНОЙ ТОРГОВЛЕ
20 ноября 2015, Москва, Sheraton Palace Hotel
Ключевые темы форума:*
СЕРЕБРЯНЫЙ СПОНСОР
• BI • «О
»
•И я
• Big Data
•О
яИ •
.М
• M-Pos
я
•В
! Digital Signage
•
•И •И
,
И
Ея
я
-
я.
:
,
,
.
УСЛОВИЯ • Для представителей ритейлеров участие бесплатное. Требуется регистрация!
УЧАСТИЯ: • Для представителей ИТ-компаний и консультантов стоимость участия 27000 ру
Ведущий
информационный
партнер
Интернет-партнер
по коммерческой
недвижимости
+ 18% ДС
Ре к л а м а
*Новые подтверждения ожидаются, следите за обновлениями программы!
Информационные партнеры
AHConferences • www.ahconferences.com • +7 (495) 790 7815 • it@ahconferences.com
системный администратор ноябрь 2015
35
Безопасность
механизмы защиты
Визитка
РАШИД АЧИЛОВ, главный специалист по защите информации в компании,
занимающейся автоматизацией горнодобывающей промышленности, shelton@sheltonsoft.ru
SSL в режиме повышенной безопасности
Широкое использование SSL привело к тому, что все чаще появляются атаки, которые
направлены непосредственно против него, основанные на ошибках либо недочетах
реализации. Рассмотрим, каким образом можно усилить уже существующую защиту
В ноябре 2011 года была опубликована первая серьезная
работающая атака против SSL – BEAST [1]. Она не зависела
от того, насколько тщательно были сделаны настройки, она
использовала ошибки реализации. Как говорят в таких случаях, by design. Атака позволяла при определенных условиях
расшифровать зашифрованную информацию – в [1] описана расшифровка secret cookie для учетной записи на сервере PayPal. Эта атака окончательно добила и без того уже
считавшийся небезопасным протокол SSL 2.0.
В октябре 2014-го, почти ровно через три года, была опубликована вторая, не менее серьезная, атака – POODLE [2].
Терминология
Алгоритм Диффи-Хеллмана (DH) – алгоритм, позволяющий двум сторонам получить общий секретный ключ, используя не защищенный
от прослушивания, но защищенный от подмены канал связи. В классическом случае DH работает на «обычной» конечной группе. Группа DH
задается единственным числом – модулем. Это обязательно большое
простое число. Именно это число передает сервер в составе сообщения
ServerKeyExchange.
Эфемерный алгоритм Диффи-Хеллмана (perfect forward secrecy,
DHE) – вариант алгоритма DH, при котором используются не долговременные группы (неважно, общие или индивидуальные), а сессионные ключи,
созданные из этих долговременных ключей.
Эллиптическая криптография (EC) – раздел криптографии, изучающий
и использующий эллиптические кривые над конечными полями. Основным
преимуществом эллиптических кривых считается отсутствие на настоящий момент существования субэкспоненциальных алгоритмов решения
задачи дискретного логарифмирования.
Режим Счетчика Галуа (GCM – Galois Counter Mode) – режим обслуживания, который использует универсальную хеш-функцию поверх двоичного поля Галуа и предоставляет аутентифицированное шифрование.
DSS (Digital Signature Standard) – стандарт, описывающий Digital
Signature Algorithm (DSA), который используется для генерации цифровой
подписи.
Она точно так же не зависела от настроек и основывалась
на ошибках протокола. И точно так же позволяла при определенных условиях расшифровать информацию. Не быстро, конечно, – по одному байту данных на 256 запросов.
Эта атака окончательно дискредитировала протокол
SSL 3.0.
Наконец в начале этого года была обнаружена еще одна
уязвимость – LogJam [3]. Сама по себе эта атака ничего
не расшифровывает, но позволяет понизить стойкость шифрования при установлении сессии до 512-битной группы DH,
что существенно упрощает задачу злоумышленника по расшифровке секретного ключа сессии, в особенности если
используется стандартная группа DH. Предвычислить нужную структуру можно только для известной группы, поэтому
для атакующего важно, чтобы TLS-серверы использовали
типовые параметры. Заставив пользователя задействовать
нестойкую группу DH и имея ее предвычисленные значения,
можно расшифровывать трафик буквально на лету, разумеется, обладая достаточными мощностями.
Что можно всему этому противопоставить?
> Отключить устаревшие протоколы SSL 2.0 и SSL 3.0 (к сожалению, есть еще серверы, которые используют только SSL 3.0).
> Предпочитать использование TLS 1.2, ну, либо TLS 1.1,
отказавшись по возможности и от TLS 1.0.
> Сгенерировать уникальную группу DH для каждого
сервера, если программное обеспечение позволяет
это сделать. Сгенерированная группа DH должна быть
длиной не менее 2048 бит – такая начальная группа
долго будет еще не «по зубам» расшифровщикам.
> Настроить программы таким образом, чтобы выбор
шифра оставался за сервером, а не за клиентом.
> Тщательно подобрать разрешенные шифронаборы,
исключив все старые, слабые и небезопасные, в том
числе все шифронаборы, использующие потоковый
шифр RC4 [4].
ECDSA (Elliptic Curve Digital Signature Algorithm) – алгоритм с открытым
ключом для создания цифровой подписи, но определенный не над полем
целых чисел, как DSA, а в группе точек эллиптической кривой.
36
Далее будет рассказано о методах формирования строки
шифронаборов (ciphersuite), описывающей разрешенные
ноябрь 2015 системный администратор
Безопасность
механизмы защиты
Повышение безопасности
SSL не отменяет
необходимости проверять
сертификаты на сайтах
в данной системе шифронаборы, а также о практических
приемах настройки программ Sendmail, nginx, Apache
и Dovecot таким образом, чтобы защититься от всех вышеперечисленных атак (и, возможно, от других, не упомянутых
выше, – а они были).
типа RC4-MD5, на них просто не стоит обращать внимание.
По каждому шифронабору указываются его основные компоненты:
DHE-RSA-AES256-SHA
Mac=SHA1
SSLv3 Kx=DH
Au=RSA
Enc=AES(256)
Загадочная строка шифронабора
Шифронабор обычно задается параметром CiperSuite
или подобным ему по написанию и служит для ограничения для данной программы (в Windows – для всей системы
сразу) возможности использовать только те шифронаборы,
которые подходят под шаблон строки. Более-менее подробное описание того, как формируется строка шифронаборов, приводится в [5].
Описание каждого шифронабора состоит из четырех
полей:
> Алгоритм обмена ключами (RSA, DH, ECDH).
> Алгоритм аутентификации (RSA, DH, DSS, ECDSA
или ничего (none).
> Алгоритм собственно шифрования.
> Алгоритм цифровой подписи (MD5, SHA, SHA256,
SHA384, SHA512).
Для упрощения записи строки шифронаборов, которая
может быть весьма длинной, можно использовать сокращения. Все поля могут и не указываться, в этом случае отсутствующие поля обозначают отсутствующие компоненты.
Таким образом, шифронабор DHE-RSA-AES256-SHA означает шифронабор с алгоритмом обмена ключами на основе эфемерного DH, с RSA-аутентификацией, шифрованием
содержимого шифром AES c длиной ключа 256 бит и подписью по алгоритму SHA (SHA1).
Узнать, какие шифронаборы существуют на конкретном
сервере, просто:
Но главную ценность команда openssl ciphers приобретает в процесс формирования нужной строки CiperSuite,
поскольку позволяет отобразить перечень шифронаборов,
подпадающих под некоторую строку. В строке могут применяться все сокращения, описанные в [5], и все спецсимволы: «+», означающий поместить совпавшие шифронаборы
в текущую позицию списка, «-», означающий убрать совпавшие шифронаборы (с возможностью восстановления) и «!»,
означающий то же, что и «-», но без возможности убрать
совпавшие шифронаборы:
# openssl ciphers -V 'EECDH+AESGCM:EECDH+AES:EDH+AESGCM: ↵
!SHA:!DSS:!SSLv2'
0xC0,0x30 - ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH
Au=RSA Enc=AESGCM(256) Mac=AEAD
0xC0,0x2C - ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH
Au=ECDSA Enc=AESGCM(256) Mac=AEAD
0xC0,0x2F - ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH
Au=RSA Enc=AESGCM(128) Mac=AEAD
0xC0,0x2B - ECDHE-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH
Au=ECDSA Enc=AESGCM(128) Mac=AEAD
0xC0,0x28 - ECDHE-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH
Au=RSA Enc=AES(256) Mac=SHA384
0xC0,0x24 - ECDHE-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH
Au=ECDSA Enc=AES(256) Mac=SHA384
0xC0,0x27 - ECDHE-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH
Au=RSA Enc=AES(128) Mac=SHA256
0xC0,0x23 - ECDHE-ECDSA-AES128-SHA256 TLSv1.2 Kx=ECDH
Au=ECDSA Enc=AES(128) Mac=SHA256
0x00,0x9F - DHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=DH
Au=RSA Enc=AESGCM(256) Mac=AEAD
0x00,0x9E - DHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=DH
Au=RSA Enc=AESGCM(128) Mac=AEAD
# openssl ciphers -v
В ответ будет выдан достаточно длинный список шифронаборов. Он может включать достаточно нелепые вещи
системный администратор ноябрь 2015
Здесь мы видим, что указанной CiperSuite соответствует
десять шифронаборов – в восьми используется эфемерный
DH на эллиптических кривых, в двух – обычный эфемерный
37
Безопасность
механизмы защиты
DH. Также в шести используется шифрование со счетчиком
Галуа. Как вы, наверное, уже обратили внимание, элементы CiperSuite разделяются двоеточиями. Количество их неограниченно. Каким образом мы сформировали подобную
строку:
> EECDH+AESGSM – будут использоваться варианты, в которых алгоритм обмена ключами – эфемерный DH на эллиптических кривых и шифрование по алгоритму AES
со счетчиком Галуа. Это первые четыре варианта.
> EECDH+AES – практически то же самое, только
для шифрования данных можно будет применить алгоритм без счетчиков Галуа. Это вторые четыре варианта.
> EDH+AESGSM – обмен ключами на эфемерном DH, построенном на стандартных ключах, шифрование алгоритмом AES со счетчиком Галуа. Это последние два варианта.
На всякий случай явно задается отказ от шифронаборов
с SHA (SHA-1), с DSS и любых шифронаборов, относящихся
к семейству наборов SSLv2.
В строке CiperSuite можно применять сокращенные обозначения, например:
EECDH+aRSA+AESGCM:EDH+aRSA+AESGCM:EECDH+aRSA+AES: ↵
EDH+aRSA+AES
Здесь используется сокращение aRSA, обозначающее
«RSA аутентификация». Всего этой строке соответствует 12 шифронаборов. Полный список всех сокращений,
а также наименований, используемых для задания отдельных компонентов шифронабора, в том числе довольно экзотических, приведен в [6].
Не стоит чересчур увлекаться ограничением шифронаборов – это может привести к совершенно неожиданным
последствиям. Например, Sendmail 8.14.4 из длинной строки шифронаборов выберет первый, в котором отсутствуют
эллиптические кривые, и, если ему такового не оставить,
он не сможет принять почту.
Итак, подбираем CiperSuite.
Если для веб-сервера переусердствовать и оставить
слишком мало шифронаборов, некоторые браузеры и ОС
просто не смогут отобразить сайт. В [7] хорошо изложено,
каким образом подбирается CiperSuite именно для веб-сервера.
Поэтому предположим, что мы хотим сохранить совместимость с Windows XP и расширим указанный самым первым CiperSuite, который задает только современные шифронаборы до вот такой строки:
EECDH+AESGCM:EECDH+AES:EDH+AESGCM:!DSS:!SSLv2:EDH+3DES: ↵
EECDH+RC4
Эта строка в дополнение к вышеперечисленным десяти
наборам разрешит еще следующие:
EDH-RSA-DES-CBC3-SHA
Enc=3DES(168) Mac=SHA1
ECDHE-RSA-RC4-SHA
Enc=RC4(128) Mac=SHA1
ECDHE-ECDSA-RC4-SHA
Enc=RC4(128) Mac=SHA1
38
SSLv3 Kx=DH
Au=RSA
SSLv3 Kx=ECDH
Au=RSA
SSLv3 Kx=ECDH
Au=ECDSA
То есть один дополнительный набор с 3DES и два с шифром RC4.
Настраиваем шифронаборы в веб-сервере Apache:
SSLCipherSuite EECDH+AESGCM:EECDH+AES:EDH+AESGCM:!DSS:!SSLv2
Здесь надо иметь в виду, что к серверу, в конфигурационном файле которого CiperSuite настроен подобным образом
с Windows XP, подключиться будет невозможно в принципе.
Если мы хотим обеспечить совместимость с Windows XP,
нужно использовать строку с 3DES и RC4, но тогда мы
не устраняем ни одной уязвимости.
Настраиваем наборы в nginx:
ssl_ciphers EECDH+AESGCM:EECDH+AES:EDH+AESGCM!DSS:!SSLv2;
Настраиваем CiperSuite в Sendmail. Для этого в файле исходного текста конфигурации .mc в конец файла добавляем
следующие строки:
LOCAL_CONFIG
O CipherList= EECDH+AESGCM:EECDH+AES:EDH+AESGCM!DSS:!SSLv2
После этого конфигурационный файл Sendmail необходимо перестроить. Имейте в виду, что если удаленный почтовый сервер поддерживает только SSL 3.0 (я недавно столкнулся с таким), то работать с ним будет невозможно.
Определяем CiperSuite для dovecot. Для этого изменяем
строку в файле conf.d/10-ssl.conf:
ssl_cipher_list = EECDH+AESGCM:EECDH+AES:EDH+AESGCM!DSS: ↵
!SSLv2
При задании CiperSuite для Sendmail и Dovecot в том случае, если почта доступна с мобильных устройств, следует
быть предельно осторожным и скорее прийти к компромиссу – либо поддержка старых версий Android (4.0.4 и ниже),
либо безопасность сайта.
Как можно проверить, с каких версий каких ОС можно
будет подключиться к данному серверу? На [8] есть замечательный онлайн-тест, доступный, правда, только для вебсерверов, который не только определит наличие уязвимостей на сайте, но и определит, с каких устройств каких
версий к нему можно подключиться. Варьируя CiperSuite
сайта и постоянно его проверяя, можно подобрать и список
наборов для других программ.
Проверка на [8] проводится в очень широких пределах – от IE6 на Windows XP до Edge 12 на Windows 10
и от Android 2.3.2 до Safari 8 на OSX 10.10.
Анти-пудель и анти-джем
После подбора строки задающей шифронаборы можно
еще дополнительно усилить безопасность путем задания
дополнительных настроек, исключающих срабатывание
уязвимостей.
В первую очередь это, конечно же, отключение протоколов SSL 2.0 и SSL 3.0, с потерей совместимости
с Windows XP – ну да и ладно. Будут ли при этом работать
шифронаборы, которые отмечаются как SSLv3, например, ECDHE-RSA-AES256-SHA? Будут. Но не все. Потому
ноябрь 2015 системный администратор
Безопасность
механизмы защиты
что OpenSSL при выводе списка шифронаборов не различает SSL 3.0 и TLS 1.0, и те наборы, которые существуют
в TLS 1.0, работать будут.
Настраиваем Apache:
SSLProtocol all -SSLv2 -SSLv3
Усиливаем nginx:
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
При настройке nginx есть одно совершенно не забавное
недоразумение. Если записать приведенную выше строку
так, как она приводится во всех руководствах, а именно
TLSv1 TLSv1.1 TLSv1.2, то сканер уязвимостей [8] покажет
наличие поддержки SSL 3.0, а вот если записать так, как показано в примере, покажет отсутствие поддержки.
Добавляем устойчивости Sendmail:
# openssl dhparam -out /etc/pki/tls/dhparams.pem 2048
После того как группа будет сгенерирована, имя файла,
в который ее сохранили (в примере dhparams.pem), нужно
указать в конфигурационных файлах программ.
Apache (начиная с версии 2.4.8):
SSLOpenSSLConfCmd DHParameters "/etc/pki/tls/dhparams.pem"
Nginx:
ssl_dhparam /etc/pki/tls/dhparams.pem
Sendmail:
LOCAL_CONFIG
O DHParameters=/etc/pki/tls/dpparams.pem
Для Sendmail можно также указать другим способом:
LOCAL_CONFIG
O ServerSSLOptions=+SSL_OP_NO_SSLv2 +SSL_OP_NO_SSLv3 ↵
+SSL_OP_CIPHER_SERVER_PREFERENCE
O ClientSSLOptions=+SSL_OP_NO_SSLv2 +SSL_OP_NO_SSLv3
Не забудьте, что эти строки необходимо добавить в файл
.mc и пересоздать конфигурацию Sendmail. Кроме отключения поддержки SSL 2.0 и SSL 3.0, данные строки задают преимущество сервера для выбора шифронаборов, хотя обычно это оставляют клиенту. Но, чтобы исключить ситуацию,
когда злоумышленник намеренно понижает шифронабор
и предлагает самый слабый из поддерживаемых, мнение
клиента игнорируется.
Укрепляем dovecot (внести в файл conf.d/10-ssl.conf):
ssl_protocols = !SSLv2 !SSLv3
Отключаем возможность выбора шифронабора клиентом в Apache:
SSLHonorCipherOrder on
define(`confDH_PARAMETERS',`/etc/pki/tls/dhparams.pem')
Не забывайте после внесения изменений в конфигурационный файл Sendmail перестраивать его, иначе изменения
применены не будут.
В Dovecot невозможно задать собственный файл DHгруппы, но Dovecot общих групп не использует – он автоматически создает свою и обновляет ее периодически. Можно
только задать длину группы (задавать в conf.d/10-ssl.conf):
ssl_dh_parameters_length = 2048
А что делать, если в интернет смотрит сервер
на ОС Windows? Конечно, использовать привычный
Windows-администраторам GUI. Существует бесплатная
программка IIS Crypto [9], с помощью которой можно менять
шифронаборы в Windows, а также задавать их приоритеты
так, как они привыкли, – мышкой (см. рис. 1).
Для запуска программа требует наличия NET 2.0
или NET 4.0, причем при загрузке программы с сайта [9]
и в nginx:
ssl_prefer_server_ciphers on;
Рисунок 1. Программа IIS Crypto
Параметры для Sendmail, которые включают возможность выбора шифронабора сервером, уже приводились
выше. Параметры для Dovecot приводятся ниже (внести
в файл conf.d/10-ssl.conf):
ssl_prefer_server_ciphers = yes
Осталось только добавить в конфигурацию SSL настройки, которые заблокируют любую попытку понизить
стойкость DH-групп до 512-битовой широко известной общей группы и заодно сгенерировать индивидуальный файл
группы размером 2048 бит. Да, даже неплохая машина может заняться генерацией 2048-битовой группы достаточно
долго.
Генерируется индивидуальная DH-группа следующей командой:
системный администратор ноябрь 2015
39
Безопасность
необходимо будет выбрать GUI или обычную версию
для NET 2.0 или NET 4.0. Ничего другого программа, в общемто, делать не умеет – разве что проверить на сайте [8] переданный ей URL.
Внесенные с ее помощью изменения вступают в силу
только после перезагрузки и распространяются сразу
на всю ОС и все программы, поэтому подбирайте перечень
работающих шифронаборов внимательно!
механизмы защиты
Для подсчета SPKI используются следующие команды:
# openssl x509 -noout -in certfile.pem -pubkey | ↵
openssl asn1parse -noout -inform pem -out public.key
# openssl dgst -sha256 -binary public.key | ↵
openssl enc -base64
Вывод второй команды и будет SPKI.
Настраивается чрезвычайно просто (после подсчета
SPKI). В Apache:
Что еще можно сделать?
Ну и напоследок рассмотрим, что же еще можно сделать
для усиления защиты. Например, можно решить такой вопрос: есть сайт, поддерживающий и протокол HTTP и протокол HTTPS. Пользователь сохранил в закладки адрес с HTTP
и постоянно его использует, несмотря на то что есть HTTPS.
И его данные передаются в открытом виде. Или он становится жертвой атаки «человек посередине».
Для того чтобы исключить подобные вещи, был разработан специальный механизм, называемый HTTP Strict
Transport Security (HSTS). Он заключается в том, что сервер
устанавливает специальный заголовок, и браузер не будет использовать протокол HTTP, даже если пользователь
его явно укажет, – произойдет принудительное переключение на HTTPS.
Настраивается использование этого заголовка очень
просто. В нем указывается максимальное количество времени (в секундах), в течение которого сайт будет доступен
исключительно по HTTPS. Как правило, это число задается
достаточно большим, обычные значения 31536000 (12 мес.)
или 63072000 (24 мес.). При задании includeSubdomains
действие заголовка будет распространено также и на поддомены.
Задание HSTS в Apache:
Header always set Strict-Transport-Security ↵
"max-age=31536000; includeSubDomains"
Задание HSTS в nginx:
add_header Strict-Transport-Security ↵
"max-age=31536000; includeSubDomains";
Более подробно о HTTP Strict Transport Security написано
в [10].
Еще можно включить HTTP Public Key Pinning (HPKP).
HPKP разработана для того, чтобы исключить ситуацию,
когда некий УЦ выпускает поддельный сертификат для известного сайта, например mail.ru, а браузер будет отображать его как настоящий – ведь он же подписан корневым УЦ!
Чтобы исключить такую ситуацию, сайт передает в заголовках некий хеш от публичного ключа сайта, называемый
SPKI (Subject Public Key Information), а также дополнительно
время в секундах, в течение которого этот SPKI будет хешироваться.
Кроме того, есть необязательный параметр, куда будет
отправляться отчет об ошибках проверки. Если пользователь посетит сайт, где установлен поддельный сертификат
якобы этого сайта, то браузер выдаст пользователю предупреждение.
40
Header always set Public-Key-Pins ↵
"pin-sha256=\"<рассчитанный_SPKI>\";↵
max-age=31536000; includeSubDomains"
В nginx:
add_header Public-Key-Pins 'pin-sha256="<рассчитанный_SPKI>"; ↵
max-age=31536000; includeSubDomains';
Более подробно о HTTP Public Key Pinning написано в [11].
Ну вот, мы усилили свою конфигурацию SSL на веб-сайтах,
в программах, которые используют SSL, и заблокировали
возможность атаки с использованием некоторых уязвимостей. Но не следует, конечно же, думать, что эти настройки обеспечат абсолютную безопасность – они всего
лишь повышают ее, не отменяя необходимости проверять
сертификаты на сайтах, где вы собираетесь выполнять
онлайн-платежи или хранить какую-либо личную информацию, внимательно набирать адреса, не допуская опечаток,
и не переходить по ссылкам из незнакомых или подозрительных сообщений. EOF
[1] Первая атака на протокол SSL – http://habrahabr.ru/company/
xakep/blog/132344.
[2] Атака POODLE использует откат версии протокола
до SSLv3 – https://threatpost.ru/novyj-poodle-ekspluatiruetproblemu-otkata-protokola-do-ssl-3-0/4195.
[3] LogJam – новая уязвимость в TLS – http://habrahabr.ru/company/
eset/blog/258461.
[4] Атака против RC4 тринадцатилетней давности – https://
threatpost.ru/na-black-hat-asia-prodemonstrirovana-novaya-atakaprotiv-ssl-tls/7186.
[5] Документация на mod_ssl – http://httpd.apache.org/docs/current/
mod/mod_ssl.html.
[6] OpenSSL Cookbook – https://www.feistyduck.com/library/opensslcookbook/online/ch-openssl.html.
[7] Выбор CiperSuite для TLS. Опыт Яндекса – http://habrahabr.ru/
company/yandex/blog/258673.
[8] Тестирование сайта на наличие SSL-уязвимостей – https://www.
ssllabs.com/ssltest.
[9] Бесплатная программа для изменения списков шифронаборов
в Windows – https://www.nartac.com/Products/IISCrypto.
[10] HTTPS Strict Transport Security – http://habrahabr.ru/post/216751.
[11] HTTP Public Key Pinning – https://bjornjohansen.no/public-keypinning.
Ключевые слова: безопасность, SSL, уязвимости, TLS, шифрование.
ноябрь 2015 системный администратор
продукты и решения
Безопасность
СКОЛКОВО выбирает безопасность
Руководство бизнес-школы СКОЛКОВО не стало дожидаться возникновения реальных
проблем в области ИБ. Ориентируясь на международные стандарты и практики,
было принято решение о необходимости обеспечения ИБ на самом раннем этапе
развития бизнес-школы. Опытом делится Андрей Еремин, главный менеджер
по информационной безопасности Московской школы управления СКОЛКОВО
– Андрей, расскажите о приоритетах в построенном
вами комплексе средств ИБ.
– Уже на начальном этапе нами была выбрана стратегия
защиты доступа в интернет для преподавателей и пользователей. У нас порядка 300 сотрудников Школы, примерно 800 студентов, а в дни проведения мероприятий количество пользователей в сети возрастает до 2500 человек.
Реализовать ее в полной мере удалось с помощью совместного решения по антивирусной и контент-фильтрации
Blue Coat Secure Web Gateway и Blue Coat ProxyAV c антивирусным движком «Лаборатории Касперского». Именно
с помощью этого комплекса мы обеспечиваем безопасный
доступ преподавателей, студентов и гостей бизнес-школы
к Интернету, в частности:
> данный комплекс производит контроль трафика и пользовательской активности, сохраняя детализированную
отчетность в формате, соответствующем корпоративным стандартам;
> для унификации настроек доступа применена схема
прозрачного перенаправления трафика на прокси-сервер Blue Coat ProxySG по протоколу WCCP;
> инициировать подключение к глобальной Сети пользователь может как с персональных компьютеров,
так и с любых мобильных устройств;
> сканирование контента и обнаружение вредоносного
ПО обеспечивается путем интеграции прокси-сервера
Blue Coat ProxySG с аппаратным антивирусным решением этого же разработчика, Blue Coat ProxyAV, с встроенным Антивирусом Касперского на борту.
От себя хочу добавить, что усилить данное решение можно
с помощью интеграции в систему устройства для анализа нестандартных угроз от Blue Coat – Malware Analysis Appliance,
который, по сути, является продвинутой «песочницей». Принцип работы прост и надежен – на MAA разворачиваются образы Windows-систем (всех конфигураций, присутствующих
Справка:
Московская школа управления СКОЛКОВО – одна из ведущих частных
бизнес-школ России и СНГ, основанная в 2006 году по инициативе делового
сообщества. В состав партнеров-учредителей школы входят 10 российских
и международных компаний и 11 частных лиц, лидеров российского бизнеса. Линейка образовательных программ Московской школы управления
СКОЛКОВО включает программы для бизнеса на всех стадиях его развития –
от стартапа до крупной корпорации, выходящей на международные рынки.
системный администратор ноябрь 2015
в корпоративной инфраструктуре), определив подозрительные объекты антивирусом, он передает их на МАА, которое,
в свою очередь, исследует их в системе, соответствующей
ОС респондента. После этого происходит анализ последствий и поведения, а также ответ с вердиктом по протоколу
ICAP, после чего прокси возвращает объект пользователю
либо блокирует его.
– Вы выбрали поставщиком баз сигнатур «Лабораторию
Касперского». Каковы причины такого выбора?
– Всем известна последовательная позиция «Лаборатории
Касперского» по борьбе с различного рода угрозами всех
уровней, в том числе и вирусными атаками государственного
уровня. Это не раз доказывалось громкими разоблачениями
вирусных атак. Blue Coat и «Лаборатория Касперского» являются признанными лидерами в построении решений по защите интернет-пользователей. Blue Сoat обрабатывает и категоризирует 9 миллиардов запросов ежедневно, в то же время
«Лаборатория Касперского» обнаруживает более 325 тыс.
новых образцов вредоносного кода каждый день. В связке
продукты этих производителей гарантируют очень сильный
уровень защиты, производительности и надежности.
– Расскажите подробнее о вверенной вам инфраструктуре и о результатах работы выбранного вами решения.
Каковы личные впечатления о работе системы?
– Инфраструктрура бизнес-школы СКОЛКОВО включает
в себя несколько десятков ИТ-систем достаточно высокого уровня. Это и централизованно управляемая Wi-Fi сеть
из нескольких сотен точек доступа, и виртуализация, и облачные технологии. Как я уже говорил, мы изначально приняли для себя стратегию BYOD, а также мы предоставляем ряд
сервисов согласно принципу SaaS.
Нам удалось решить ряд очень важных вопросов – это и потоковая фильтрация трафика на вирусную активность, и оперативность генерации статистики, и информирование специалистов по безопасности об инцидентах, связанных
с использованием интернета. Немаловажным плюсом от внедрения стало ускорение работы пользователей за счет кеширования объектов – данная функция доступна по умолчанию
владельцам решений от компании Blue Сoat.
На меня же лично произвел впечатление тот факт,
что при помощи Blue Coat Reporter (сервер статистики
и отчетности) удалось выявить несколько серьезных угроз,
связанных с HTTPS как с каналом проникновения вирусов
во внутреннюю сеть. ADV
41
Безопасность
инструменты
Визитка
АНДРЕЙ БИРЮКОВ, ЗАО «НИП Информзащита»,
системный архитектор, mex_inet@rambler.ru
Решения по централизованному
управлению сетевыми устройствами
Политики безопасности на сетевом оборудовании требуют постоянного контроля.
Поговорим о средствах централизованного управления сетевыми устройствами
Даже в компаниях среднего размера количество различных
сетевых устройств с функциями межсетевых экранов может измеряться десятками, а в крупных их уже сотни. Проконтролировать, кто, когда поправил какие списки доступа
и с какой целью, порой бывает практически невозможно.
Зачастую ACL построены неэффективно, вследствие чего
увеличивается общая загрузка устройства, а непродуманные изменения могут привести к неработоспособности
или появлению «дыр» в безопасности.
Для решения этих проблем необходим инструмент, позволяющий производить мониторинг всех изменений в списках доступа на межсетевых экранах. Нужно четко понимать, кто из сотрудников, в какое время и для чего добавил
или удалил то или иное правило. ИБ важно иметь в наличии
инструментарий, фиксирующий и формализующий действия сотрудников организации по всей цепочке процесса
предоставления/отзыва сетевого доступа.
Наилучшим подходом здесь является система заявок,
когда для того, чтобы что-то изменить в списках доступа,
администратор создает заявку, которая затем одобряется
специалистами ИБ. При создании заявки необходимо указать не только, какой порт или протокол нужно открыть,
но и на какой срок и для каких целей это нужно. Наличие
такого функционала в решении по управлению сетевыми
конфигурациями является необходимым. Также желательно
наличие возможности интеграции с системами управления
заявками, например, Service Desk.
Еще одной типичной проблемой при изменении настроек
доступа в уже развернутой сети является то, что очень трудно точно просчитать, какие последствия повлечет за собой
открытие или закрытие определенного порта. Например,
существует множество приложений, работающих по протоколу RPC, который использует порты выше 1024 для установки ответных соединений, и блокировка портов из этого
диапазона может привести к неработоспособности сетевых
приложений.
Причем на первый взгляд определить, закрытие какого именно порта привело к проблемам, далеко не всегда
представляется возможным. Таким образом, возникает
42
необходимость эмулировать изменение списков доступа
на сетевом оборудовании в целях выявления проблем с блокировкой трафика.
Еще одна сложность со списками доступа – это их неоптимальное конфигурирование. Предположим, правило,
блокирующее 30 процентов трафика, стоит на 100-м месте
в списке доступа. Тогда треть всего трафика бесполезно
проверяется предыдущими 99-ю правилами и лишь затем
блокируется 100-м правилом. Если мы переместим данное
правило с 100-го на первое место, то блокируемые 30 процентов трафика будут отбрасываться после первой же проверки, и устройству не надо будет тратить ресурсы на выявление соответствия оставшимся 99 правилам. Подобный
функционал позволяет существенно оптимизировать работу средств межсетевого экранирования.
Плюс не лишним было бы иметь единую консоль, позволяющую из одной точки управлять всеми сетевыми средствами защиты.
Итак, мы определились с основными требованиями,
которые предъявляются к системе централизованного
управления сетевыми устройствами. Теперь посмотрим,
что есть на рынке для решения данных задач.
Tufin Orchestration Suite
Свое описание начну с Tufin Orchestration Suite [1]. Пакет решений состоит из трех продуктов:
> SecureTrack
> SecureChange
> SecureApp
Компонент SecureTrack предназначен для управления
средствами межсетевого экранирования, а также сетевой
инфраструктурой защиты (включая маршрутизаторы, коммутаторы, балансировщики нагрузки, веб-прокси и т.п.)
с центральной консоли управления.
После развертывания консоли SecureTrack приложению необходимо прописать доступ на те устройства, которыми необходимо управлять. Tufin может подключаться
по SSH, Telnet или по проприетарным протоколам целевых
ноябрь 2015 системный администратор
инструменты
устройств. Список устройств, с которыми умеет работать
SecureTrack, можно найти на сайте проекта [2].
После того как целевая система подключена к Tufin,
мы можем контролировать все действия по настройке,
выполняемые администраторами. Прежде всего мы можем заблокировать подключения к консоли управляемого
устройства в обход Tufin. То есть если администратор попытается, например, с помощью SSH-клиента, установить
соединение с управляемым устройством, то ему не удастся
это сделать, так как теперь все администрирование возможно только через консоль Tufin. На практике это реализуется посредством добавления соответствующих настроек в списки доступа.
Когда Secure Track становится посредником между
администратором и целевой системой, каждая команда
или действие, выполняемые им, будут проверяться на соответствие утвержденной политике безопасности. То есть если
политика запрещает открытие определенных портов и протоколов, то попытка выполнить соответствующие настройки
завершится неудачно.
Польза для ИТ
Если функции SecureTrack интересны прежде всего специалистам по информационной безопасности, то представленный далее функционал будет полезен сетевым администраторам и специалистам по мониторингу. В состав решения
входят возможности по обеспечению контроля критически
важных компонентов ОС межсетевых экранов и показателей производительности серверов для предотвращения
перебоев в обслуживании и своевременного выявления «узких мест» в производительности устройств.
Компонент SecureChange предоставляет аналитический функционал для выявления рисков для безопасности
Безопасность
корпоративной сети. Каждое изменение в конфигурации
сети является потенциальным риском для безопасности
и соответствия требованиям регуляторов. Для защиты жизненно важных приложений и данных организации необходимо автоматизировать процесс внесения изменений в политику безопасности для анализа рисков, повышения точности
и принудительного соблюдения политик. SecureChange
предназначен для управления изменениями, правил межсетевых экранов и устройств безопасности сети, включая
маршрутизаторы, коммутаторы, балансировщики нагрузки,
шлюзы веб-прокси и т.п.
Решение предоставляет интерфейс для управления изменениями в конфигурации целевых устройств на основе
заявок. То есть если администратору необходимо открыть
доступ какому-либо приложению, то он создает заявку, которую должны согласовать все заинтересованные лица.
Тем самым можно избежать важной проблемы, когда неизвестно кто, неизвестно когда и не всегда понятно зачем
меняет списки доступа на сетевых устройствах. Также созданная заявка проверяется на соответствие корпоративным
политикам безопасности.
О политиках. Для их создания в Tufin включен специальный конструктор политик (Policy Designer), который, помимо
прочего, дает рекомендации на основе данных от производителя о том, как лучше всего осуществить изменение конфигурации для оптимизации защиты и производительности.
Рекомендации включают в себя удаление или изменение существующих правил или объектов на всех возможных целевых устройствах.
Кроме того, средствами Tufin можно осуществлять анализ рисков в так называемых теневых правилах. Примерами таких правил могут являться скрытые аналоги permit
any any, то есть разрешающие правила, которые не заданы
Рисунок 1. Пример работы Tufin SecureTrack
системный администратор ноябрь 2015
43
Безопасность
явным образом, однако на деле могут создавать угрозу безопасности. Анализатор рисков позволяет выявить подобные
правила и составить отчет, в котором указать возможные
способы реализации атак на основе данных рисков.
Третьим компонентом, входящим в состав решений
Tufin, является SecureApp. С помощью SecureApp администраторы ИБ и владельцы приложений могут легко определить, обновить, отследить и удалить правила, необходимые
для работы данных систем. Для этого не требуется анализ
длинных списков правил доступа на многочисленных межсетевых экранах и маршрутизаторах. SecureApp обеспечивает идентификацию требований приложения к сетевым
соединениям. Данный функционал позволяет ускорить внедрение новых приложений, обеспечить непрерывность бизнеса и упростить управление сетью.
На практике это выглядит следующим образом: с помощью графического редактора SecureApp необходимо указать нужные серверы и службы. После того как вы определите соединения, SecureApp автоматически создает
заявку с запросом доступа для системы автоматизации изменения безопасности SecureChange. При этом можно воспользоваться конструктором политики (Policy Designer)
SecureChange для анализа сети и выявления изменений, которые необходимы для политик межсетевых экранов. Далее
SecureApp самостоятельно предложит необходимый набор
портов и протоколов, которые нужно будет открыть на всех
сетевых устройствах, участвующих в работе данного приложения.
В случае вывода ненужных программ из корпоративной
сети немаловажным является вопрос обеспечения защиты,
чтобы после отключения или замены серверов в списках
доступа не осталось ненужных открытых портов. SecureApp
автоматически определяет правила политик, которые
инструменты
необходимо изменить или удалить во всех затрагиваемых
межсетевых экранах и маршрутизаторах.
Таким образом, решение Tufin обеспечивает полный набор функционала по централизованному управлению политиками сетевых устройств в рамках тех требований, о которых мы говорили во вступлении. Теперь посмотрим, какие
еще решения есть на рынке.
Algosec
Еще одним производителем средств централизованного управления политиками безопасности сетевых устройств является компания AlgoSec [3]. В состав решений от данного
разработчика входят следующие модули:
> AlgoSec Firewall Analyzer (AFA)
> AlgoSec FireFlow (AFF)
> AlgoSec BusinessFlow (ABF)
Начнем со средства управления межсетевыми экранами
AlgoSec Firewall Analyzer.
AlgoSec Firewall Analyzer
Данный продукт предназначен для проведения аудита
и анализа сложных политик сетевой безопасности. Прежде всего AlgoSec Firewall Analyzer в автоматическом режиме собирает информацию о настройках со всех сетевых
устройств и может «увидеть» всю сетевую инфраструктуру
и настроенные правила доступа. Это позволяет производить мониторинг изменений правил фильтрации и маршрутизации посредством использования автоматической проверки изменений правил сетевых устройств по расписанию
или запуска сбора информации вручную. В созданных отчетах можно выбирать любые периоды и просматривать
изменения относительно разных временных рамок. Сбор
Рисунок 2. Пример работы AlgoSec Firewall Analyzer
44
ноябрь 2015 системный администратор
Безопасность
инструменты
данных о настройках сети производится посредством подключения к целевым устройствам с помощью SSH/Telnet
и проприетарных протоколов.
AlgoSec Firewall Analyzer имеет встроенный функционал
по определению неоптимальных, взаимоисключающих и дублирующихся правил, исправление которых может ускорить
работу сетевого оборудования и их пропускную способность. Это реализуется различными способами как с помощью статического анализа списков доступа, так и с помощью динамического сбора статистики о срабатывании тех
или иных правил. На основании собранной информации выдаются рекомендации по их расположению.
Возможно сравнение политик межсетевых экранов разных производителей. Это реализуется с помощью сравнения списков доступа от известных AlgoSec устройств.
По результатам система выводит имеющиеся отличия. Этот
функционал существенно облегчает проекты по апгрейду
и миграции сетевых настроек. Например, в случае, когда
требуется произвести миграцию с Juniper на Cisco, система может проанализировать списки доступа на исходном
межсетевом экране и сравнить его со списком на целевом
файрволле.
Реализованный функционал по поддержке разделения доступа и авторизации позволяет использовать единую консоль для управления всеми сетевыми устройствами без необходимости подключаться локально. При этом
AlgoSec Firewall Analyzer имеет как собственную базу пользователей, так и возможность интеграции с серверами
RADIUS и LDAP.
AlgoSec FireFlow
Модуль AlgoSec FireFlow предназначен для автоматизации
процесса изменения сетевых политик доступа. Для внесения
изменений здесь используются запросы. Можно использовать заранее подготовленные шаблоны запросов, которые
позволяют существенно сэкономить время при выполнении
административных задач.
По заявлениям разработчиков продукта, автоматизация
носит проактивный характер, то есть при принятии решения о внесении тех или иных изменений администратором
FireFlow принимает в расчет трафик и риски, a также обеспечивает соответствие требованиям регуляторов. Новые
запросы проходят автоматическую проверку относительно
сетевого трафика во избежание ненужных изменений и точно указывают на конкретные устройства, которые должны
быть изменены. FireFlow легко интегрируется с существующими системами управления изменениями, такими как BMC
Remedy и HP ServiceCenter. Статус создаваемых CMSзаявок постоянно обновляется.
AlgoSec BusinessFlow
Модуль BusinessFlow обеспечивает управление политикой
безопасности, применяемой непосредственно к приложениям. BusinessFlow позволяет автоматически создавать
списки доступа для разрешения трафика тем или иным
сервисам. Оценивает влияние изменений сети (топологии,
маршрутизации, миграции серверов) на бизнес-приложения и запускает необходимые запросы на изменение МСЭ
для обеспечения доступности приложений. А также просчитывает безопасное отключение сетевого доступа при выводе приложений из эксплуатации без ухудшения состояния
безопасности сети и доступности или работоспособности
других бизнес-приложений, аналогично описанному ранее
функционалу Tufin.
Для анализа политики, моделирования и визуализации
трафика используются результаты работы AlgoSec Firewall
Рисунок 3. Firemon анализирует сетевые настройки
системный администратор ноябрь 2015
45
Безопасность
инструменты
Analyzer, для управления изменениями политики безопасности МСЭ – данные AlgoSec FireFlow.
Совместная работа AlgoSec FireFlow и AlgoSec
BusinessFlow позволяет оперативно внедрять все изменения
в приложениях, не тратя время на анализ списков доступа
на различных сетевых устройствах.
В целом существенная часть функций AlgoSec аналогична Tufin, хотя имеется ряд компонентов, таких как средства
сравнения списков доступа на различном оборудовании, которые отличают данное решение.
FireMon
Третьим участником обзора является решение Firemon [4].
В состав комплекса входят два решения:
> Security Manager & Policy Planner
> Risk Analyzer
Firemon предоставляет функционал по оптимизации политик безопасности межсетевых экранов, моделированию
инфраструктуры сети и использованию имитации атак
для сканирования уязвимостей сетевой инфраструктуры.
То есть в большей степени он ориентирован на решение
задач сетевой безопасности в плане защиты от атак, чем
в плане централизованного контроля всех сетевых устройств.
Модуль Security Manager предназначен для упреждающего поиска уязвимостей в инфраструктуре сетей
и их устранения, позволяя бороться не только с известными
угрозами, но и с подозрительными активностями, которые
могут являться угрозами нулевого дня.
При этом Security Manager ориентирован на крупный бизнес и может эффективно отслеживать корпоративные сети,
включающие десятки тысяч узлов и тысячи устройств сетевой безопасности.
Модуль Firemon Risk Analyzer анализирует уязвимости
целевых систем в контексте их доступа к сети. Для анализа уязвимостей возможна интеграция с такими средствами
анализа защищенности, как Rapid7 Nexpose и Metasploit.
Risk Analyzer использует результаты сканирования уязвимостей, а также данные о сети и безопасности, полученные
от Security Manager. На основе данной информации Risk
Analyzer определяет маршруты потенциальных атак (внутренних и внешних) на сеть. В результате администратор ИБ
получает полное представление о рисках и возможностях
обхода системы безопасности. Risk Analyzer получает набор
рекомендаций по устранению данных уязвимостей.
Для более эффективного сокращения рисков Risk
Analyzer производит приоритезацию действий по устранению проблем в соответствии со степенью серьезности
угроз.
Выбор оптимального решения
Рынок решений по централизованному управлению сетевым
оборудованием не так велик, как, к примеру, рынок межсетевых экранов, однако и здесь есть свои ведущие игроки –
о некоторых из них я рассказал. На каком же из упомянутых
продуктов остановить свой выбор?
Набор функций у Tufin и AlgoSec идентичен [4, 5], однако
есть некоторые отличия в количестве поддерживаемых устройств и других характеристиках, они сведены в таблице1.
Таким образом, решение Tufin можно рекомендовать
тем заказчикам, кому необходима поддержка специфичных
устройств и приложений, например, сетевой конфигурации
облачной операционной системы OpenStack. Кроме того,
Tufin имеет набор инструментов, позволяющих создавать
анализаторы для собственных форматов списков доступа.
Для организаций, в которых необходимо управлять всеми
политиками безопасности сетевой инфраструктуры, включая межсетевые экраны, маршрутизаторы и коммутаторы,
а также вносить в эти политики изменения непосредственно
из единой консоли управления, а не на каждом устройстве
по отдельности, подойдут решения от Tufin и AlgoSec.
Решение от Firemon подойдет специалистам по ИБ в крупных компаниях, которым необходима оптимизация политик
безопасности МЭ, имитация атак вместе с интеграцией с базами эксплоитов для сканирования уязвимостей сетевой инфраструктуры. Firemon является более узконаправленным
продуктом, предназначенным только для решения задач информационной безопасности.
В целом разработка средств централизованного управления сетевым оборудованием является достаточно перспективным направлением, так как разнообразие используемых
в компаниях устройств предъявляет требования к разработке единой консоли для управления ими. Поэтому в будущем
мы можем ожидать появления новых решений в данной области. EOF
[1] Сайт Tufin Technologies – http://www.tufin.com.
[2] Список поддерживаемых устройств Tufin – http://www.tufin.com/
supported-devices-and-platforms.
[3] Сайт компании AlgoSec – http://www.algosec.com.
[4] Сайт компании Firemon – https://www.firemon.com.
[5] Материалы по AlgoSec – http://www.anti-malware.ru/reviews/
AlgoSec_Firewall_Analyzer.
[6] Воробьев А. Обзор систем по управлению устройствами обеспечения ИБ. // Журнал «Безопасность компьютерных систем».
Ключевые слова: безопасность, сетевой доступ, Firewall, ACL, анализатор.
Таблица 1. Сравнение рассматриваемых решений
Вендор
Количество
поддерживаемых
устройств
Управление
конфигурацией МЭ
Построение
топологии
сети
Возможность
обновления в реальном
времени
Наличие сертификатов
ФСТЭК/ФСБ
Tufin
40+
Да
Да
Да
Нет в процессе получения НДВ 4
AlgoSec
20+
Да
Да
Нет
Нет
Firemon
30+
Нет
Да
Нет
Нет
46
ноябрь 2015 системный администратор
Базы данных
инструменты
Визитка
СЕРГЕЙ МАСЛОВ, руководитель центра СПАО «Ингосстрах»,
Maslov.Sergey@ingos.ru
Опыт секционирования таблиц в Oracle
Часть 4. Управление секциями и подсекциями
При создании секционированных таблиц необходимо периодически проводить
работы с секциями – очищать, добавлять или удалять. Мы разработали метод,
минимизирующий необходимость проведения операций над секциями
Управление секциями и подсекциями
В процессе работы с секционированной таблицей (далее
будем называть ее с-таблицей) периодически возникают задачи по работе с секциями или подсекциями. Над секциями
(подсекциями) выполняются такие операции, как:
> добавление новых и удаление существующих секций,
> перенос секции в другую не секционированную таблицу,
> «расщепление» секции на части,
> очистка т.д.
Create table aif.histlog (isn
number , updated
partition by range (updated)
(partition
P_01
values less than ↵
(to_date('01.01.2015','DD.MM.YYYY')) ,
partition
P_02
values less than ↵
(to_date('01.02.2015','DD.MM.YYYY')),
partition
P_03
values less than ↵
(to_date('01.03.2015','DD.MM.YYYY')),
partition
P_05
values less than ↵
(to_date('01.05.2015','DD.MM.YYYY')),
partition
P_MAX values less than (maxvalue))
enable row movement;
Все эти операции над секциями и подсекциями выполняются командой:
Увидеть созданные секции можно через представление
Oracle all_tab_partitions:
Alter table ИМЯ ТАБЛИЦЫ ОПЕРАЦИЯ ИМЯ СЕКЦИИ или ПОДСЕКЦИИ
Select *
При этом перечень возможных операций над секциями
(подсекциями) представлен ниже:
> add partition | subpartition
> coalesce partition | subpartition
> drop partition | subpartition
> exchange partition | subpartition
> merge partition| subpartition
> move partition | subpartition
> modify partition | subpartition
> rename partition | subpartition
> split partition | subpartition
> truncate partition | subpartition
date)
from all_tab_partitions where table_owner='AIF' ↵
and table_name='HISTLOG';
После ввода данных в таблицу увидеть число строк в каждой секции таблицы AIF.HISTLOG можно запросом:
Select 'P_01',count(*) from aif.histlog partition(P_01)
...
union all
Select 'P_MAX',count(*) from aif.histlog partition(P_MAX);
Управление секциями
Рассмотрим работу операторов с секциями на примерах.
Оператор ADD – добавление новой секции
Замечание. Использование фразы UPDATE GLOBAL
INDEX для всех этих операций позволяет Oracle выполнить модификацию глобального индекса, поддерживая
его в актуальном состоянии. Если не вставлена фраза
UPDATE GLOBAL INDEX, то для восстановления работоспособности индекса можно воспользоваться оператором
REBUILD.
Покажем работу указанных выше операторов на примерах работы с секциями с-таблицы AIF.HISTLOG, секционированной по Range-методу с ключом секционирования
по столбцу Updated:
системный администратор ноябрь 2015
Добавим секцию P_06 в таблицу AIF.HISTLOG по команде:
--новая секция
Alter table aif.histlog add partition P_06
--граница новой секции
values less than (to_date('01.06.2015','DD.MM.YYYY'))
update global indexes;
Вместе с тем для данной таблицы выполнение вышеуказанной команды приведет к ошибке (ORA-14074: граница секции должна быть выше предыдущей секции).
Это обусловлено тем, что в таблице имеется последняя
47
Базы данных
инструменты
секция P_MAX с максимальным неограниченным значением
maxvalue, в силу чего добавлять новую секцию возможно
при отсутствии этой секции в с-таблице. При этом если секция с maxvalue пустая, то ее следует сначала удалить, после
чего добавляются новые секций, а затем снова создается
секция p_max оператором ADD.
Оператор DROP – удаление секции
Удалим секцию P_02 из таблицы по команде:
Alter table aif.histlog drop partition
update global indexes;
↵
P_02
P_MAX со значением maxvalue на несколько секций (к примеру, на три секции P_7, P_8 и P_9) командами:
Alter table aif.histlog split partition P_MAX ↵
at to_date('01.07.2015','DD.MM.YYYY')) ↵
into (partition P_07, partition P_MAX) ↵
update global indexes;
Alter table aif.histlog split partition P_MAX ↵
at (to_date('01.08.2015','DD.MM.YYYY')) ↵
into (partition P_08, partition P_MAX) ↵
update global indexes;
Alter table aif.histlog split partition P_MAX ↵
at (to_date('01.09.2015','DD.MM.YYYY')) ↵
into (partition P_09, partition P_MAX) ↵
update global indexes;
Замечание. Если удалить секцию, то следующая после
удаленной старшая секция будет размещать у себя новые
строки, которые должны были попасть в удаленную секцию.
Оператор MERGE – слияние двух секций в одну секцию
Оператор MOVE – перемещение секции
в другое табличное пространство
Alter table aif.histlog merge partitions P_02, P_03 ↵
into partition P_02_03 update global indexes;
Переместим секцию P_01 в другое табличное пространство
AIFDATA (перемещать секцию в то же пространство можно в целях сжатия секции, используя фразу COMPRESS)
по команде:
Замечание. Результаты всех приведенных выше операций можно увидеть по запросу:
Alter table aif.histlog move partition P_01 tablespace ↵
aifdata nologging compress update global indexes;
Select table_owner, table_name, partition_name, ↵
high_value, tablespace_name, compression ↵
from all_tab_partitions where table_owner='AIF' ↵
and table_name='HISTLOG';
Секции P_02 и P_03 объединим в одну секцию c новым именем P_02_03 (можно со старым именем P_03) по команде:
Оператор TRUNCATE – очистка секции
Оператор COALESCE – объединение секций
Очистим секцию P_03 по команде:
Alter table aif.histlog truncate partition
update global indexes;
P_03
↵
В нашей практике секционирования наиболее востребованная операция. Она позволяет не только быстро удалить данные из секции (по сравнению с командой Delete),
но и освобождает табличное пространство, занятое данными (в отличие от операции Delete, после которой для этого приходится выполнять порой ресурсоемкую команду
Shrink).
Оператор SPLIT – «расщепление» секции
Оператор позволяет создать новую секцию. Расщепим секцию P_05, создав новую секцию P_04 с граничным значением меньше секции P_05, но больше граничного значения
секции P_03 по команде:
-- имя расщепляемой секции
Alter table aif.histlog split partition P_05
-- граница новой секции
at (to_date('01.04.2015','DD.MM.YYYY'))
-- имя новой секции
into (partition P_04,
-- имя расщепляемой секции
partition P_05)
update global indexes;
Операция расщепления секций нашла у нас широкое
применение при переходе от не секционированной таблицы
к с-таблице и подробно описана в предыдущей статье [1].
В качестве примера, показывающего возможности оператора SPLIT, проведем расщепление последней секции
48
Используется (только для секций, секционированных
по HASH-методу) в целях изменения распределения содержимого секции по остальным секциям таблицы путем удаления секции. По данной команде число хеш-секций уменьшается на единицу.
Например, создаем с-таблицу, секционированную
по HASH-методу, с восемью секциями:
Create table aif.histlog_h (isn number , updated
partition by hash(isn) partitions 8 ↵
enable row movement;
date) ↵
Выполним команду:
Alter table aif.histlog_h coalesce partition
update global indexes;
↵
Результат работы оператора COALESCE можно увидеть
указанным выше запросом.
Оператор RENAME – переименование секции
Проведем переименование секции P_03 в секцию P_03_NEW
по команде:
Alter table aif.histlog rename partition P_03 to P_03_NEW;
Оператор EXCHANGE – перенос строк секции в другую
не секционированную таблицу или перенос строк
из не секционированной таблицы в секцию с-таблицы
Оператор нашел у нас широкое применение и может использоваться в двух целях:
ноябрь 2015 системный администратор
инструменты
> во-первых, для уменьшения размера с-таблицы путем
переноса для временного хранения строк, например,
устаревшей секции в другую обычную таблицу с выполнением команды truncate для очистки табличного
пространства, занимаемого секцией;
> во-вторых, для быстрого переноса строк из обычной
таблицы в созданную на ее основе с-таблицу (особенности работы exchange в этом случае подробно описаны в [1]).
Перенос секции P_05 в другую не секционированную
таблицу AIF.HISTLOG_ARX осуществляется по команде:
Alter table aif.histlog exchange partition P_05
--имя таблицы, в которую переносим
with table aif.histlog_arx
including indexes without validation
update global indexes;
Перенос строк из не секционированной таблицы AIF.
HISTLOG_ARX в секцию P_05 с-таблицы AIF.HISTLOG выполняется той же командой. Таким образом, можно оперативно восстановить перенесенные данные из секции обратно
в секцию.
Фраза INCLUDING INDEXES позволяет переносить индексы, а фраза WITHOUT VALIDATION позволяет переносить
в секцию данные из не секционированной таблицы без проверки соответствия значения столбцов из переносимой
таблицы значению ключа с-таблицы, что и обуславливает
быстрый перенос в с-таблицу. Следует только заметить,
что операция переноса осуществляется с большой скоростью в силу того, что происходит простое обновление словаря данных (без ввода-вывода данных).
Замечание 1. Для выполнения оператора обе таблицы
должны иметь одинаковую структуру (например, одинаковые столбцы).
Замечание 2. Для практического применения представляет интерес логика работы exchange. Так, если первый раз
выполнить exchange по переносу строк из секции в таблицу,
то все строки секции перепишутся в новую таблицу (назовем архивной). Если выполнить команду exchange повторно, то все стоки из архивной таблицы перепишутся обратно
в секцию. Однако если после переноса строк в архивную
таблицу (т.е. после первого выполнения exchange) в секцию
были записаны новые строки, то при повторном выполнении exchange эти новые строки перепишутся в архивную
таблицу, а секция заполнится строками из архивной таблицы, при этом в ней не будет вновь введенных строк. Таким
образом, строки в секции не накапливаются при повторных
выполнениях оператора exchange.
Управление подсекциями
Основные часть операторов, таких как DROP, TRUNCATE,
MOVE, MERGE, RENAME и SPLIT, в подсекциях работают
по тем же командам, что и в секциях, только вместо имени
секции ставится имя подсекции.
Вместе с тем операции ADD и COALESCE имеют особенности. Так, для оператора ADD (добавление подсекции) следует указать еще имя секции, в которую идет
вставка подсекции, с фразой modify. Покажем на примере с-таблицы aif.histers, секционированной по методу
системный администратор ноябрь 2015
Базы данных
RANGE с подсекциями, секционированными по методу LIST,
с автоматической вставкой секции ежемесячно оператором
interval:
Create table aif.histers(updated date, raions number)
partition by Range(updated) interval(interval '1' MONTH)
subpartition by List(raions)
subpartition template
(subpartition sub1 values(1),
subpartition sub2 values(2))
(partition P_01 values less than (to_date('01.01.2015', ↵
'DD.MM.YYYY'))
) enable row movement;
Например, добавим подсекцию sub3 в секцию P_01 по команде:
Alter table aif.histers modify partition P_01
add subpartition sub3 values(3) ;
↵
Работу оператора COALESCE рассмотрим на примере
таблицы, где подсекции секционированы по методу HASH
(оператор COALESCE, как и для секций, применяется только
для HASH-метода). Создадим таблицу с подсекциями, секционированными по методу HASH:
Create table aif.histres_h(updated date, raions number)
partition by Range(updated)
interval(interval '1' MONTH)
subpartition by hash(raions) subpartitions 8
(partition P_01 values less than (to_date('01.01.2015', ↵
'DD.MM.YYYY'))
) enable row movement;
Операция COALESCE выполняется по команде:
Alter table aif.histers_h modify partition P_01 coalesce ↵
subpartition update global indexes;
Оператор SPLIT для подсекций имеет особенность,
в частности, для подсекций, секционированных по LIST.
Покажем особенности на примере с-таблицы:
Create table aif.histres_list(updated date, raions number)
partition by Range(updated) interval(interval '1' MONTH)
subpartition by List(raions)
(partition p_1 values less than (to_date('01.01.2015', ↵
'DD.MM.YYYY'))
(subpartition p_1_sub2 values(1,2))
) enable row movement;
Команда SPLIT расщепления подсекции P_1_SUB2 с созданием новой подсекции P_1_SUB1 имеет вид:
Alter table aif.histres_list split subpartition ↵
P_1_SUB2 values(1) into
(subpartition P_1_SUB1, subpartition P_1_SUB2)
В результате в новую подсекцию P_1_SUB1 из подсекции P_1_SUB2 будет перенесено значение 1, а в расщепляемой подсекции останется значение 2. Если в подсекции
P_1_SUB2 будет только одно значение, то получим ошибку:
ORA-14619: resulting List subpartition(s) must contain ↵
at least 1 value
49
Базы данных
Она говорит, что в расщепляемой подсекции должно
остаться хотя бы одно значение, т.е. ошибка предупреждает, что в расщепляемой подсекции должно быть более одного значения, т.е. вариант subpartition P_1_SUB2 values(1)
с одним значением при SPLIT по LIST даст ошибку.
Циклическое
секционирование
наиболее эффективно
для таблиц, у которых
имеется ограниченное
время жизни данных
в секциях
Увидеть результаты работы операторов в подсекциях
можно по запросу:
Select table_owner,table_name,partition_name, ↵
subpartition_name, high_value, ↵
subpartition_position, tablespace_name, ↵
segment_created from all_tab_subpartitions ↵
where table_owner='ИМЯ СХЕМЫ' ↵
and table_name='ИМЯ ТАБЛИЦЫ';
Замечание. Если бы подсекцию в таблице назвали SUB2,
то в запросе увидели бы имя подсекции P_1_SUB2, т.е. автоматически добавляется к имени подсекции имя секции P_1.
Более полную информацию по секции и подсекции дает
запрос:
Select * from all_tab_partitions P, all_tab_subpartitions S
where p.table_owner=s.table_owner ↵
and p.table_name=s.table_name ↵
and p.partition_name=s.partition_name ↵
and p.table_owner ='ИМЯ СХЕМЫ' ↵
and p.table_name='ИМЯ ТАБЛИЦЫ' ↵
order by p.partition_position, ↵
s.subpartition_position;
Секционирование таблиц по циклу
Под секционированием таблиц по циклу понимаtтся секционирование, выполненное в соответствии с двумя правилами.
> Первое правило: таблица должна содержать фиксированное количество секций, равное либо числу дней в месяце (31 секция), либо числу дней в году (366 секций),
либо числу месяцев в году (12 секций).
> Второе правило: данные в одну и ту же секцию попадают с определенной периодичностью (цикличностью). Например, данные попадают в секцию определенного дня
года, независимо от номера года.
Идея секционирования по циклу возникла из следующей
практической задачи. В одну из таблиц с именем DOCIMAGE
записывается большой поток данных, основной объем которого составляют BLOB (двоичные большие объекты), помещаемые в один из столбов OLEOBJECT таблицы DOCIMAGE.
50
инструменты
Вероятность обращения к этим данныv со временем быстро
снижается, однако, сохраняется требование их непрерывной доступности, т.е. в любой момент времени эти BLOB могут быть востребованы.
Для обеспечения непрерывного доступа к строкам, накопленным за несколько лет, было проведено секционирование таблицы DOCIMAGE. Число секций равняется числу
дней в году и составляет 366 с ключом секционирования
по столбцу PARTID, в котором номер текущего дня формируется из столбца CREATED (дата создания строки). Секции ежедневно заполняются, в силу чего в следующем году
строки с тем же днем попадают в ту же секцию, что и прошлый год. То есть в каждой секции накапливается информация за несколько лет.
Преимуществом секционирования по циклу является
то, что отпадает необходимость создавать новые секции.
Чтобы не было существенного роста размера секции, каждые сутки запускается процесс, который очищает устаревшие строки, сжимая табличное пространство командой
Shrink.
Например, для первой секции DOCIMAGE_1 команда
Shrink имеет вид:
Alter table docimage modify partition docimage_1
lob(oleobject) (shrink space);
↵
Данная с-таблица успешно функционирует более двух
лет и показала эффективность принятого решения.
Преимущества данной реализации:
> во-первых, цикличность таблицы позволяет ограничить
количество секций с возможностью сохранения данных за неограниченный период времени. Из-за постоянного удаления устаревших данных в архив размеры
секций остаются приемлемыми;
> во-вторых, наличие секций по дням позволяет получить
приемлемое время сжатия табличного пространства
по Shrink. Это важно, так как необходимость сохранения в секциях отдельных не удаляемых строк не позволяет применить операцию быстрой очистки секции
по Truncate.
В дальнейшем подход секционирования по циклу был
развит и реализован в ряде других таблиц, в которых данные хранятся ограниченное время (несколько дней или месяцев). Такие таблицы были секционированы по циклу с быстрой Truncate-очисткой устаревших секций. При этом опыт
показал, что эффективно секционируются по циклу таблицы трех видов: таблицы с числом секций, равным числу дней
в году, с ежедневной очисткой устаревшей секции; таблицы
с числом секций, равным числу месяцев в году (12 секций),
с ежемесячной очисткой устаревшей секции; с данными
за месяц и таблицы с числом секций, равным числу дней
в месяце (31 секция), с ежедневной очисткой устаревшей
секции с данными за день.
Преимуществом такого секционирования как в отсутствии необходимости создавать новые секции, так и в том,
что очистка секции по truncate происходит быстро с освобождением табличного пространства для ввода новых данных (что в ряде таблиц дало экономию в нескольких терабайт табличного пространства).
ноябрь 2015 системный администратор
Базы данных
инструменты
Пример секционирования по циклу таблицы
PAGES с секциями по месяцам в течение года
Идея секционирования по циклу была реализована в таблице PAGES с BLOB-столбцом PAGE_DATA. В этих BLOB-элементах содержатся отсканированные документы по страхованию. Объем данных, вводимых ежемесячно в таблицу
PAGES, – более 500 Гб, и он продолжает расти. В силу этого
хранение информации в течение нескольких месяцев потребовало бы терабайт пространства. В связи с этим было
принято решение разбить таблицу PAGES на 12 месяцев
и хранить данные только за несколько последних месяцев,
а более старые секции очищать по Truncate с освобождением табличного пространства. В результате объем хранимых данных стал более ограничен и предсказуем, а очистка
по Truncate происходит быстро с минимальной загрузкой
процессора. Секционирование по циклу таблицы PAGES
проведено по методу RANGE, где ключом секционирования выступил столбец PARTID, принимающий значения
от 1 до 12 (по числу месяцев).
Структура таблицы PAGES в схеме AIF приведена ниже.
Create table aif.pages(id number,page_data blob, ↵
created date,partid number)
partition by range (partid)
(partition pages_1 values less than (2),
...
partition pages_12 values less than (13)
) enable row movement;
Столбец PARTID в Oracle 10 пришлось бы заполнять триггером, однако в Oracle 11 и выше заполняется на основе
виртуального столбца, используя столбец CREATED (дата
создания строки):
Partid number generated always as(to_number( ↵
to_char (CREATED,'MM')))virtual
Очистка по Truncate, например, первой секции выполняется по команде:
Alter table aif.pages truncate partition(pages_1) ↵
update global indexes;
Контроль над освобождением табличного пространства
(в байтах) после выполнения Truncate можно осуществлять
по запросу:
Select tablespace_name, sum(bytes) free_bytes ↵
from dba_free_space group by tablespace_name
order by 1;
Секционирование может быть не только по методу секционирования RANGE, но и по LIST. В этом случае командные
строки секционирования таблицы примут вид:
Partition by list (partid)
(partition pages_1 values (1) ,
...
partition pages_12 values (12) )
Замечание. Нужно отметить, что преимуществом циклического секционирования является также наличие
системный администратор ноябрь 2015
фиксированного названия секций, что позволяет использовать это при просмотре и анализе секций. Например,
для указанной выше таблицы ниже приведенный запрос
позволяет следить за числом записей в таблице по секциям
и процессом очистки секций.
Select 'pages_1' part, count(*) num_rows ↵
from AIF.PAGES partition(PAGES_1)
union all
Select 'pages _2', count(*) from AIF.PAGES partition(PAGES_2)
...
union all
Select 'pages _12', count(*) ↵
from AIF.PAGES partition(PAGES_12)
Особенности секционирования по циклу
Чтобы провести секционирование по циклу надо иметь
в таблице столбец, который может выступать ключом обычного RANGE или LIST секционирования таблицы по дате
(типа CREATED, использованного выше) и из которого можно извлечь номер текущего дня или месяца. Это могут быть,
например, столбцы, в которых вводится время создания записи или изменения записи и т.д.
При секционировании по циклу возникает дополнительная задача очистки старых секций, чтобы освободить место в секции для ввода новых данных. Для этого нами был
разработан универсальный JOB, запускающий процедуры
очистки секций по дням или месяцам.
Выводы
В процессе обслуживания с-таблиц приходится обрабатывать секции или подсекции. При этом имеется целый набор
операторов обработки секций и подсекций. Как показала
практика, наиболее востребованными являются операторы
Truncate, Drop, Add, Split, Rename и Exchange.
Работа ряда операторов с секциями и подсекциями имеет
особенности, при этом для подсекций работа с операторами ADD, COALESCE и SPLIT имеет отличия от работы тех же
операторов с секциями.
Циклическое секционирование позволяет сократить число операций с секциями, таких как ADD и DROP, поскольку
нет необходимости создавать или удалять секции. Циклическое секционирование наиболее эффективно для таблиц,
у которых имеется ограниченное время жизни данных в секциях, например, в течение нескольких дней внутри года
или месяца, а также несколько месяцев внутри года. EOF
[1] Михеичев В. Опыт секционирование таблиц в Oracle.
Часть 1. Создание секционированных таблиц. // «Системный администратор», №7-8, 2015 г. – С. 60-65 (http://samag.ru/
archive/article/2993).
[2] Михеичев В. Опыт секционирования таблиц в Oracle.
Часть 2. Особенности перевода больших таблиц. // «Системный администратор», №9, 2015 г. – С. 42-46 (http://samag.ru/
archive/article/3026).
[3] Михеичев В. Опыт секционирования таблиц в Oracle.
Часть 3. Модификация секционированных таблиц. // «Системный администратор», №10, 2015 г. – С. 66-70 (http://samag.ru/
archive/article/3052).
Ключевые слова: Oracle, таблицы, секционирование, БД, SQL.
51
Разработка
веб-технологии
Визитка
АЛЕКСАНДР МАЙОРОВ, руководитель отдела Frontend-разработки,
Tutu.ru, alexander@majorov.su
Новый Nginx с HTTP/2 и JavaScript
Уже доступен новый выпуск основной ветки сервера nginx 1.9.5. Ключевым
новшеством является интеграция модуля ngx_http_v2_module с поддержкой
протокола HTTP/2 и встроенного парсера диалекта JavaScript – nginScript
Веб давно живет на текстовом протоколе HTTP/1.1, который
не менялся уже последние 16 лет. Текущая версия протокола
HTTP/1.1 была стандартизирована RFC 2068 в 1997, а принята в 1999 году. Новшеством в этой версии было добавление
режима «постоянного соединения»: TCP-соединение может
оставаться открытым после отправки ответа на запрос,
что позволяет посылать несколько запросов за одно соединение. Клиент обязан посылать информацию об имени
хоста, к которому он обращается, что сделало возможной
более простую организацию виртуального хостинга.
Веб стремительно развивается, бизнес- логика постепенно перешла с серверов на клиенты (браузеры). Количество
объемов загружаемой информации на одну веб-страницу
значительно выросло, а с ростом популяризации мобильного
Рисунок 1. Сравнение работы протоколов HTTP версии 1.1 и 2.0
интернета снова стал актуальным вопрос быстрой загрузки
на узких каналах. Наступила необходимость в усовершенствовании протертого до дыр протокола HTTP/1.1.
Когда смотришь на тенденции развития некоторых наиболее популярных на сегодня сайтов и сравниваешь, сколько занимает время загрузки их главной страницы, тогда
становятся очевидными тенденции развития веба. За последние несколько лет количество данных, которые требуется передать от сервера клиенту, постепенно выросло
до отметки 2Мб и выше. Но наиболее важен для нас факт
того, что число объектов, которое загружается клиенту,
в среднем составляет около ста единиц. Таким образом,
получается, что, чтобы отобразить всю страницу целиком,
необходимо загрузить сто объектов!
Ко всему прочему HTTP 1.1 очень чувствителен к задержкам, частично из-за того, что в конвейерной передаче HTTP
по-прежнему хватает проблем, и она отключена у подавляющего числа пользователей. Каналы с высокой задержкой,
такие как мобильные сети, значительно снижают скорость
загрузки страниц.
HTTP/2.0
11 февраля 2015 года были опубликованы финальные
версии черновика новой версии HTTP протокола. Протокол, хоть и носит название «Hyper Text Transfer Protocol»,
тем не менее, является бинарным, в отличие от предыдущих версий. Протокол HTTP/2 основан на базе протокола
SPDY и был разработан рабочей группой Hypertext Transfer
Protocol working group (httpbis, где bis означает «еще раз»,
«повторно», «на бис») из Internet Engineering Task Force.
SPDY – протокол прикладного уровня для передачи
веб-контента, разработан корпорацией Google. Позиционировался как замена некоторых частей HTTP – таких,
как управление соединениями и форматы передачи данных. На сегодня его разработка прекращена, а в сервере
Nginx 1.9.5 поддержка SPDY полностью убрана. Этот нюанс
стоит учитывать при переходе на новый сервер. В файлах конфигурации вместо «spdy» теперь нужно писать
«http2».
52
ноябрь 2015 системный администратор
Разработка
веб-технологии
Основной задачей HTTP/2 является снижение времени загрузки веб-страниц и их элементов. Это достигается за счет
расстановки приоритетов и мультиплексирования передачи нескольких файлов таким образом, чтобы требовалось
только одно соединение для каждого клиента (см. рис. 1).
Рабочая группа представила протокол HTTP/2 на рассмотрение IESG как Proposed Standard в декабре 2014 и IESG
утвердила его к публикации 17 февраля 2015 года. Спецификация была опубликована как RFC 7540 в мае 2015 года.
Протокол HTTP/2 поддерживается последними версиями браузеров Chrome, Opera, Firefox, Safari, Internet
Explorer 11 и Microsoft Edge. На мобильных устройствах
новый протокол поддерживается браузерами iOS Safari
и Chrome for Android. По данным консорциума W3Techs,
на август 2015 года доля всех веб-сайтов, поддерживающих
протокол HTTP/2, составляет 1,2%.
Ключевые особенности нового протокола:
> мультиплексирование запросов
> расстановка приоритетов для запросов
> сжатие заголовков
> загрузка нескольких элементов параллельно, посредством одного TCP- соединения
> поддержка проактивных push-уведомлений со стороны
сервера
> использование спрайтов, объединение или инлайнинг
картинок;
> разделение ресурсов между доменами.
Выше было сказано, что для перехода на новый протокол
не нужно менять серверную составляющую приложения.
Да, это так. Но, если вы хотите почувствовать разницу между протоколами и получить выгоду, то вам придется менять
архитектуру под новые паттерны, о которых будет рассказано в следующей статье.
Сборка NGINX c HTTP/2
Устанавливаем OpenSSL версии 1.0.2 или новее, необходимый для поддержки ALPN. Скачиваем [1] и распаковываем
Nginx версии 1.9.5 или новее. Конфигурируем Nginx с необходимыми опциями, например, для сборки вместе с OpenSSL
из исходников и статической линковки конфигурация будет
выглядеть так:
$ ./configure --with-http_ssl_module --with-http_v2_module ↵
--with-openssl=/path/to/openssl-1.0.2
После этого собираем и устанавливаем сервер.
Настройка
Переход на новый протокол
Одним из основных опасений является то, что для внедрения
поддержки HTTP/2 требуется изменение архитектуры серверного приложения. На самом деле это не так. Для перехода на новый протокол не требуется сложных манипуляций,
кроме пересборки и установки новой версии сервера. Также придется сделать небольшое изменение в существующих конфигурационных файлах – добавить к существующему HTTPS соединению параметр http2 к директиве listen:
listen localhost:443 ssl http2;
Сам Nginx действует как «HTTP/2-шлюз». На стороне
клиента сервер общается с браузерами через протокол
HTTP/2 при условии, что для браузера реализована поддержка HTTP/2 иначе будет работать SSL. На стороне сервера
общение происходит через протокол HTTP/1.x или FastCGI,
uwsgi, SCGI, в зависимости от вашего серверного стека,
как и раньше. Таким образом, сервер и приложения, проксируемые через Nginx, не требуют изменений для перехода
на новый протокол.
Для одновременной работы HTTP/1.x и HTTP/2 в Nginx
используется Application Layer Protocol Negotiation (ALPN),
являющийся расширением TLS. При подключении браузера
к серверу посылается список поддерживаемых протоколов.
Если в списке есть h2, то Nginx использует HTTP/2 для соединения. Если в браузере не реализована поддержка ALPN
или в списке поддерживаемых протоколов нет h2, то Nginx
будет использовать HTTP/1.x.
Старое хорошее – теперь новое плохое
С переходом на новый протокол часть оптимизаций, присущих для HTTP/1.1, теперь являются антипаттернами
для HTTP/2.
Среди таких оптимизаций:
системный администратор ноябрь 2015
Для включения HTTP/2 добавьте параметры ssl и http2 к директивам listen:
server {
listen 443 ssl http2 default_server;
...
}
Для проверки работоспособности HTTP/2 есть расширения для Google Chrome [2] и Firefox [3].
Также вы всегда можете открыть DevTools инспектор
в браузере или проверить каким-то другим способом ответ от сервера. Например, вы можете установить утилиту
nghttp2 для Linux. Эта утилита позволяет смотреть ответ сервера. Пример использования:
nghttp -v https://tutu.ru
Пример полного конфигурационного файла для сайта
с включенным HTTP/2:
server {
listen 80;
server_name domain.ru www.domain.ru;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name domain.tld www.domain.tld;
ssl on;
ssl_certificate
/etc/nginx/ssl/domain.pem;
ssl_certificate_key /etc/nginx/ssl/domain.key;
ssl_prefer_server_ciphers On;
ssl_protocols TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-↵
AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:↵
ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-↵
GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+↵
AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-↵
AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-↵
53
Разработка
AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-↵
AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-↵
AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-↵
SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:↵
DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:↵
!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK;
add_header Strict-Transport-Security max-age=15768000;
ssl_stapling on;
могут динамически блокировать вредоносные запросы, эксплуатирующие уязвимости в веб-приложениях или ограничивать интенсивность определенных запросов.
Также можно реализовывать гибкие правила перенаправления трафика, использующие информацию из запроса и не только.
location / {
root /www/site/public;
Включаем поддержку nginScript
}
}
Поддержка JavaScript
Я, как и многие айтишники, люблю новинки, поэтому релиз
нового софта – это как праздник. Новые возможности, новые способы решать типовые задачи. Разработчики Nginx
добавили в новой версии не только поддержку нового протокола, но и возможность писать небольшую логику обработки запросов на популярном ныне языке – JavaScript. Точнее,
на собственном диалекте, который называется nginScript
и для которого был разработан свой интепретатор.
Для выполнения скриптов используется собственный
движок njs. Для этого команда разработчиков Nginx реализовала свою версию виртуальной машины под урезанное
подмножество языка JavaScript. Собственно, этот язык и назвали nginScript, дабы не путали с JavaScript, так как все же
это именно подмножество. Что интересно: на каждый запрос запускается отдельная виртуальная машина, что позволяет обойтись без сборщика мусора. Язык JavaScript
выбран как наиболее популярный язык программирования.
Lua был хорошим претендентом, но он не так широко распространен в кругах веб-разработчиков. Необходимость
создания собственной виртуальной машины JavaScript обусловлена тем, что существующие движки оптимизированы
для работы в браузере, в то время как для Nginx необходима
не просто серверная реализация, но интегрированная в движок. nginScript обладает виртуальной машиной и компилятором байт-кода с быстрым запуском и завершением работы.
Блокирующие операции, такие как подзапросы HTTP, могут
быть приостановлены и возобновлены по аналогии с другими блокирующими операциями в JS.
Скрипты на JavaScript могут использоваться прямо в файле конфигурации для определения расширенной логики обработки запросов, а также для формирования конфигурации и динамической генерации ответа. Можно даже делать
модификацию запроса и ответа. А еще можно быстро создавать заглушки с решением проблем в веб-приложениях.
Сам скрипт запускается посредством директивы js_run
и позволяет прямо в самом сервере выполнять многие низкоуровневые операции с запросом, без необходимости написания отдельного модуля на языке Lua или С, создавая
свое расширение для сервера.
В язык описания конфигов Nginx добавлены синтаксические инструкции, позволяющие встраивать блоки кода на JS
прямо в файл конфигурации. Подобные блоки выполняются
по мере обработки HTTP-транзакций и позволяют для каждого запроса выполнять такие операции как корректировка
внутренних параметров nginx, создание сложных условий,
изменение запроса или ответа.
С помощью nginScript можно описывать конфиги, которые без написания дополнительных расширений и модулей
54
веб-технологии
Вам необходим установленный Mercurial. Если его нет, ставим и далее следуем инструкции:
$ wget http://nginx.org/download/nginx-1.9.5.tar.gz
$ tar -xzvf nginx-1.9.5.tar.gz
$ hg clone http://hg.nginx.org/njs
$ cd nginx-1.9.5
./configure \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--user=www \
--group=www \
--with-ipv6 \
--with-pcre-jit \
--with-http_gzip_static_module \
--with-http_ssl_module \
--with-http_v2_module \
--add-module=../njs/nginx \
$ make -j2
$ make install
Пишем первые программы на nginScript
Мы можем заранее предопределять переменные с результатами вычисления через директиву js_set
js_set $msg "
var m = 'Hello ';
m += 'world!';
m;
";
server {
…
location /hello {
add_header Content-Type text/plain;
return 200 $msg;
}
…
}
Вы можете сразу из конфигурационного файла сгенерить контент и отдать его в браузер:
location /hello {
js_run "
var res;
res = $r.response;
res.contentType = 'text/plain';
res.status = 200;
res.sendHeader();
res.send( 'Hello, world!' );
res.finish();
";
}
ноябрь 2015 системный администратор
Разработка
веб-технологии
Расширенный пример, печатаем информацию о реквесте:
js_set $summary "
var a, s, h;
prev = curr;
curr = newc;
деструктурированный код:
s = 'Request summary\n\n';
[ prev, curr ] = [ curr, prev + $curr ];
s += 'Method: ' + $r.method + '\n';
s += 'HTTP version: ' + $r.httpVersion + '\n';
s
s
s
s
+=
+=
+=
+=
'Host: ' + $r.headers.host + '\n';
'Remote Address: ' + $r.remoteAddress + '\n';
'URI: ' + $r.uri + '\n';
'Headers:\n';
for (h in $r.headers) {
s += ' header \"' + h + '\" is \"' + ↵
$r.headers[h] + '\"\n';
}
s += 'Args:\n';
for (a in $r.args) {
s += ' arg \"' + a + '\" is \"' + $r.args[a] + '\"\n';
}
s;
";
А давайте напишем сервис расчета чисел Фибоначчи.
Если есть микроскоп, то почему бы им не забить гвоздь?
На вопрос зачем? настоящий программист/ученый/изобретатель всегда ответит: потому что я могу это сделать! Да,
я могу написать такой сервис, не выходя из конфига Nginx,
не устанавливая Nodejs, PHP или Ruby. Я могу все это сделать прямо внутри сервера, используя только конфигурационные файлы!
Но nginScript ничего не знает про ES2015/ES6. Тогда я написал так:
prev = [ curr, prev += curr ][0];
И тут тоже была неудача. Так писать тоже нельзя. Но,
как мы помним, у нас же не оригинальный Javascript, а диалект, со своими особенностями, достоинствами и недостатками.
А зачем может быть нужен такой функционал в реальных
применениях? Например, для привязки апстримов и динамического роутинга:
upstream my_upstream0 {
server server1.example.com;
server server2.example.com;
}
upstream my_upstream1 {
server server3.example.com;
server server4.example.com;
}
js_set $my_upstream "
var s, upstream, upstream_num;
upstream = $r.args.upstream;
// convert upstream number to integer
upstream_num = +upstream | 0;
location /js/getfib {
js_run "
function fib(n) {
var prev = 1,
curr = 1,
newc,
i;
if (upstream_num < 0 || upstream_num > 1) {
upstream_num = 0;
}
s = 'my_upstream' + upstream_num;
s;
if (n < 2) return n;
";
for (i =
newc
prev
curr
}
server {
listen 80;
3; i <= n; i++) {
= prev + curr;
= curr;
= newc;
return curr;
}
var n = +$r.args['n'],
txt = 'Fibonacci( ' + n + ' ) = ' + fib(n),
res = $r.response;
res.contentType = 'text/plain';
res.status = 200;
res.sendHeader();
res.send(txt);
res.send('\n');
res.finish();
";
}
Я хотел написать вместо:
newc = prev + curr;
системный администратор ноябрь 2015
location / {
proxy_set_header Host $host;
proxy_pass http://$my_upstream;
}
}
Как видите, новая версия горячо любимого многими системными администраторами веб-сервера Nginx получилась
очень интересной и достойной. EOF
[1] Страница для загрузки веб-сервера Nginx – http://nginx.org/ru/
download.html.
[2] Расширение для Chrome для проверки HTTP2 – https://chrome.
google.com/webstore/detail/http2-and-spdy-indicator/mpbpobfflnp
cgagjijhmgnchggcjblin?hl=en.
[3] Расширение для Firefox для проверки HTTP2 – https://addons.
mozilla.org/en-us/firefox/addon/spdy-indicator.
Ключевые слова: nginx, http/2, nginScript, веб-сервер.
55
Разработка
мобильные приложения
Визитка
АНДРЕЙ ПАХОМОВ,
программист-фрилансер, mailforpahomov@gmail.com
Виджеты в Android: теория и практика
Разбираемся, как в Android создать собственный виджет с дополнительной
информацией о системe
Виджет – это небольшая программа, которая отображается на главном экране мобильного устройства.
Без сомнения, это красивые и функциональные элементы, которые мы часто не замечаем, но при этом постоянно
пользуемся. Часы, прогноз погоды, музыкальный плеер –
это, пожалуй, те виджеты, которые установлены в каждом
телефоне.
Давайте разберемся, какие инструменты есть в стандартном Android SDK для создания собственного виджета.
Типы виджетов в Android
Для начала немного теории. Компания Google выделяет четыре вида виджетов: информационный (Information
widget), виджет-коллекция (Collection widget), виджет управления (Control widget) и гибридный (Hybrid widget). Информационный виджет используется для отображения
важной информации, изменение которой критично для пользователя. Хороший пример – отображение времени или погоды.
Виджеты-коллекции отображают набор однотипных данных: галерея фотографий, заголовки статей или писем.
Главная функция таких виджетов – дать пользователю обзор
предоставляемого контента (см. рис. 1).
Виджеты управления предоставляют быстрый доступ
к главным функциям какого-либо приложения. Такие виджеты позволяют быстро переключить песню или изменить
яркость дисплея, что, несомненно, делает все устройство
более дружелюбным к пользователю.
Перечисляемые типы виджетов – не более чем условная
стандартизация, при создании приложения таких явных рамок и разделений не существует. Поэтому никто не мешает
разработчику создать «комбайн» со всеми уже перечисленными функциями. Такое «смешанное» приложение называются гибридным виджетом.
Ограничения для виджетов
Поскольку виджет функционирует непосредственно на главном экране устройства, для него имеется несколько существенных ограничений.
56
Жесты
Виджет расположен на главном экране и должен управляться так, чтобы не мешать пользователю. Для этого взаимодействие с пользователем урезано до двух возможных событий: касание и вертикальная прокрутка. Горизонтальная
прокрутка не обрабатывается виджетом, так как она используется для перехода между экранами устройства.
Обновление
Поскольку виджет расположен на главном экране устройства, то взаимодействие с ним будет идти не напрямую,
а через ОС – в данном случае через обработку объектом
класса BroadcastReciever. В случае с виджетами за это отвечает класс AppWidgetProvider. Объект этого класса будет
получать сообщения от системы о том, что какие операции ОС выполнила над виджетом: он обновлен (установлен или устройство перезагружено), удален, выключен
или включен.
Производительность
Виджет, как и любой другой получатель системных рассылок, имеет временные ограничения. Метод, вызванный
при получении сообщения, должен быть завершен в течение пяти секунд. Обычно данные, отображаемые на виджете, невозможно получить за такой короткий срок, поэтому
следует использовать объект класса Service. Вызов сервиса, осуществляющего обновление, возможен двумя способами: через интервал, заданный в конфигурации, либо используя класс AlarmManager.
В первом случае обновление виджета возможно
не чаще, чем раз в 30 минут, второй же способ позволяет
установить любой промежуток времени. При наступлении
каждой временной отсечки ОС выходит из режима сохранения энергии (если она в нем была) и вызывает наш объект класса BroadcastReciver, который инициирует обновление виджета.
Частые интервалы обновления быстрее разряжают аккумулятор устройства, об этом нужно помнить. Сегодня
мы воспользуемся первым способом, особенности работы
ноябрь 2015 системный администратор
мобильные приложения
Разработка
В Android SDK есть средства,
позволяющие создать свой
собственный виджет, который
будет востребован
с классом AlarmManager мы обязательно рассмотрим в следующих статьях.
относительно простой: вертикально расположим текстовое поле TextView с заголовком, а ниже поместим список
ListView, в котором станут отображаться данные.
Отображение
Внешний вид виджета также имеет свои ограничения. Получатель сообщения об обновлении состояния виджета
инициирует создание интерфейса виджета. Для этого заданная разметка (layout) преобразуется в объект класса
RemoteViews. Затем ОС самостоятельно размещает полученный объект на главном экране устройства.
Используемый для построения интерфейса класс
RemoteViews поддерживает не все варианты верстки.
С каждой новой версией ОС Android список разрешенных модулей меняется, поэтому с ним лучше ознакомиться самостоятельно на официальном сайте в разделе App
Widgets.
Создание приложения
А теперь перейдем непосредственно к программированию!
Сегодня мы создадим виджет, в котором будет отображаться техническая информация об используемом устройстве.
Все это будет реализовано в прокручиваемом списке, а данные станут обновляться при касании виджета.
Первым делом реализуем объект класса AppWidget
ProviderInfo. В нем указываются основные параметры виджета: частота обновления, минимальные размеры виджета,
расположение файлов с версткой интерфейса и иконкой
виджета. Наш виджет имеет размер минимум 50 на 200 точек, верстка описана в файле widget_layout, иконка размещена в файле widget_icon, а обновление будет происходить
раз в 30 минут.
<LinearLayout android:background="@drawable/myshape"...>
<TextView android:gravity="center"
android:id="@+id/description"
android:text="System Info".../>
<ListView android:gravity="center"
android:id="@+id/listview".../>
</LinearLayout>
В параметре android:background сделана ссылка на объект типа Shape drawable. Данный объект позволяет настроить внешний вид виджета, используя геометрические параметры. В современном мире дизайн, пожалуй, стоит
на первом месте, поэтому воспользуемся этим объектом
и сделаем наш виджет привлекательным для пользователя.
Основой виджета станет прямоугольник, каждый угол будет скруглен с радиусом в 8 пикселей.
<shape android:shape="rectangle" >
<corners android:bottomLeftRadius="8dp"... />
...</shape>
По всему контуру виджета сделаем белую окантовку.
Так мы выделим на фоне рисунка, расположенного в фоне
главного экрана.
<stroke android:width="2dp"
android:color="#FFFFFFFF"/>
Фоном виджета станет голубой цвет с небольшим оттеночным переходом (см. рис. 2).
android:minHeight="50dp"
android:minWidth="200dp"
android:initialLayout="@layout/widget_layout"
android:previewImage="@drawable/widget_icon"
android:updatePeriodMillis="300000">
<gradient android:angle="225"
android:endColor="#8258FA
android:startColor="#0404B4" />
Приступим непосредственно к верстке интерфейса,
для этого реализуем файл widget_layout. Интерфейс будет
Сегодня мы будем обрабатывать только метод, отвечающий за создание и обновление виджета. Для этого
системный администратор ноябрь 2015
57
Разработка
мобильные приложения
переопределим метод onUpdate, в котором выполним все команды из родительского метода, а затем пройдемся по всем
виджетам, для которых вызван метод, и запустим обновление контента.
@Override
public void onUpdate(...) {
super.onUpdate(context, appWidgetManager, appWidgetIds);
for (int i : appWidgetIds) { updateWidget(…);} }
Обновление (или инициализация, если пользователь
только помещает виджет на рабочий стол) будет состоять
только в том, что мы заполним список и зададим возможность обновления данных касанием текстового поля с заголовком.
void updateWidget(...) {
RemoteViews rv = new RemoteViews(context.getPackageName(), ↵
R.layout.widget_layout);
Вызываем метод, в котором происходит заполнение списка, а также задаем обновление списка по касанию заголовка виджета.
setList(rv, context, appWidgetId);
setRefreshField(rv, context, appWidgetId);...}
Для того чтобы наше приложение окончательно получило возможность работать в ОС, необходимо заполнить
манифест файл. Здесь мы указываем ОС, что будем обрабатывать сообщения об обновлении виджета, а также даем
ссылку на объект класса AppWidgetProviderInfo с базовой
информацией о виджете.
Рисунок 1. Многообразие виджетов в Android
58
<intent-filter>
<action android:name="android.appwidget.action. ↵
APPWIDGET_UPDATE" />
</intent-filter>
Затем указываем, где хранится наш экземпляр AppWidget
ProviderInfo.
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/widget_info" />
Полезная нагрузка
Теперь разберемся, какие именно данные будут отображаться. Сегодня мы с вами воспользуемся возможностями
класса TelephonyManager – он предоставляет доступ к информации о параметрах сим-карты, установленной в устройство. Некоторые из них мы получим для отображения
в списке.
Сначала требуется указать ОС, что мы хотим получить
доступ к таким данным, для этого сделаем запись в манифесте.
<uses-permission android:name="android.permission. ↵
READ_PHONE_STATE"/>
В виджете будем отображать серийный номер устройства (IMEI для GSM телефонов и MEID для CDMA), серийный
номер установленной СИМ-карты, имя сетевого оператора
и др.
TelephonyManager tm;
tm=(TelephonyManager)context.getSystemService( ↵
Context.TELEPHONY_SERVICE);
Рисунок 2. Сверстанный виджет
Рисунок 3. Созданный виджет
ноябрь 2015 системный администратор
мобильные приложения
Набор однотипных данных удобнее хранить упорядоченно. Используем для этого динамический массив ArrayList,
состоящий из переменных типа String.
ArrayList items = new ArrayList<String>();
items.add("Device ID: " + tm.getDeviceId());
Теперь можно приступать к переносу данных из массива
в список.
Заполнение списка
А теперь пора заполнить виджет полезной информацией.
Основные данные станут храниться в списке. Сегодня элементы нашего списка будут иметь простую верстку – только
одно текстовое поле TextView с идентификатором data.
В предыдущей статье [1] мы также работали со списком ListView, для его заполнения использовался класс
ArrayAdapter, который и загружал данные. Сегодня список
будет расположен в виджете, поэтому для обработки данных используем класс RemoteViewsFactory.
RemoteViewsFactory – это интерфейс для адаптера, который используется в случае, если требуется отобразить список (ListView, GridView и т.д.) в объектах класса RemoteView:
виджеты, уведомления. Он используется для того, чтобы
каждый элемент списка был преобразован в объект класса
RemoteView. Ключевым методом является getViewAt, который и возвращает каждый элемент списка в виде объекта
класса RemoteView.
Разработка
android:permission="android.permission. ↵
BIND_REMOTEVIEWS">
Исходный код сервиса несложен. Единственная
его задача – вернуть сформированный список, пригодный
для его отображения на виджете.
@Override
public RemoteViewsFactory onGetViewFactory(Intent intent) {
return new CustomListViewFactory(getApplicationContext(), ↵
intent);}
А теперь рассмотрим подробнее, как происходит обновление списка в методе setRefreshField. Для запуска сервиса,
описанного выше, формируется интент.
Intent adapterIntent = new Intent(context, ↵
WidgetService.class);
Добавляем в интент идентификатор виджета, содержимое которого будет обновлено.
adapterIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, ↵
appWidgetId);
Для начала мы создаем новый элемент RemoteView.
Следующие команды предназначены для случая, когда
на главном экране расположено несколько экземпляров нашего виджета.
Мы добавляем в тело интента его идентификатор, тем самым привязывая к сервису уникальный интент. В случае создания нового ви джета сервисы для обновлений виджетов
будут различны. Таким образом, исключается ситуация, когда по команде на обновление одного виджета (в данном случае это касание поля TextView) будут обновлены сразу все.
RemoteViews row=new RemoteViews(ctxt.getPackageName(), ↵
R.layout.listview_element);
Uri data = Uri.parse(adapter.toUri(Intent.URI_INTENT_SCHEME));
adapter.setData(data);
С помощью метода setTextViewText происходит заполнение одного из элементов RemoteView (в данном случае
это поле TextView с идентификатором data). И возвращаем
сформированный объект RemoteView, который уже и будет
отображен в списке виджета.
Интент сформирован. Теперь указываем виджету,
что в список с идентификатором listview будут загружаться
данные посредствам сформированного интента (см. рис. 3).
@Override
public RemoteViews getViewAt(int position) {
row.setTextViewText(R.id.data, items.get(position));
return(row);}
Как уже было сказано, действия с виджетом выполняются по команде ОС через получателя сообщений Broadcast
Reciver. Поскольку за пять секунд список мы скорее всего
не заполним, нужно создать сервис, который и выполнит эту
работу.
Для создания элементов списка в ОС Android используется сервис класса RemoteViewsService. Его задачей будет
стать «посредником» между адаптером, выдающим объекты
класса RemoteView, и непосредственно ОС, которая сформирует для нас виджет. Первым делом укажем в манифесте,
что в нашем приложении существует сервис WidgetService,
который используется специально для обновления виджета.
<service android:name="WidgetService"
системный администратор ноябрь 2015
rv.setRemoteAdapter(R.id.listview, adapterIntent);}
Мы разобрались в том, что такое виджет и как
он реализован в ОС Android. Это удачный элемент функционального дизайна, без которого сложно представить
современный смартфон или планшет. Как мы видим,
в Android SDK есть средства, которые позволяют создать
свой собственный виджет, который будет востребован
у пользователей. Исходный код описанного в статье виджета есть на сайте журнала, рекомендую его тоже изучить.
Если останутся какие-то вопросы, жду их на свою почту,
я обязательно отвечу. Удачи! EOF
[1] Пахомов А. Отображение систематизированных данных
в Android. //«Системный администратор», №10, 2015 г. –
С. 58-61 (http://samag.ru/archive/article/3050).
Ключевые слова: Android, программирование, виджет.
59
Разработка
инструменты
Визитка
АЛЕКСАНДР КАЛЕНДАРЕВ, РБК Медиа,
программист, akalend@mail.ru
Кролик в песочнице
В современных разработках проектов с высокой доступностью серверы очередей
заняли свою нишу. В статье рассматриваются основные принципы работы
с очередями и паттерны использования сервера очередей RabbitMQ
Попытаемся понять, в чем сама суть очередей, что это
за зверь и с чем его едят. Понятие «очередь» появилось
в теории систем массового обслуживания (СМО); когда запросов на обслуживание больше, чем может обработать
СМО, тогда необработанные заявки становятся в ожидание.
Существуют разные дисциплины обслуживания, но самая
распространенная – это FIFO (First In – First Out): пришел
первый – первый ушел. Такая дисциплина обслуживания
в СМО и называется очередью.
Теме очередей посвящен целый раздел в учебном курсе
«Алгоритмы и структуры данных». Существует несколько
видов реализации очередей. В частности, реализацию простой очереди FIFO можно организовать с помощью связанного списка.
Программные продукты, поддерживающие управление
и реализацию очередей, называют серверами очередей,
или часто в зарубежной прессе можно встретить название
Рисунок 1. Отправление сообщения в обмен
«брокер очередей», или просто часто сокращают до «брокера».
Серверы очередей относятся к классу middleware, связывающему программное обеспечение (ПО), которое является составной частью инфраструктуры проекта, и представляют собой промежуточное звено между серверами
приложений и системным программным обеспечением, таким как веб-сервер, серверы базы данных или иные хранилища данных, кэширующий сервер или еще какой-нибудь
скрипт-демон.
В настоящее время одними из самых распространенных
программных продуктов со свободным исходным кодом
являются JBoss Messaging, ZMQ, ActiveMQ, Apache Kafka
и RabbitMQ.
Будем рассматривать последний. Как вы уже догадались
из названия: Rabbit – кролик, MQ (message queue) – очередь
сообщений.
Рисунок 2. Связь отправителя и получателя
Рисунок 3. Направление сообщений по очередям
60
ноябрь 2015 системный администратор
Разработка
инструменты
Немного о протоколах
Раз появилось ПО, реализующее очередь, со временем
появились и правила взаимодействия систем, которые застандартизировались и утвердились в качестве протокола
взаимодействия. Для взаимодействия брокера очередей,
пользовательских скриптов и серверов приложений в основном используются два протокола:
> STOMP – Streaming (Simple) Text Orientated Messaging
Protoсol – упрощенный текстовоориентированный протокол сообщений
> AMQP – Advanced Message Queue Protoсol – расширенный протокол очереди сообщений
Что дает нам стандартизация? Используя на стороне
прикладного ПО (клиента) библиотеку, реализующую тот
или иной протокол, мы не зависим от задействованного
в инфраструктуре конкретного брокера. Главное, чтобы
этот брокер поддерживал используемый нами протокол.
На практике не все так радужно, но в первом приближении
соответствует истине...
AMQP-песочница
Рассмотрим базовые понятия протокола. Одно из основных
понятий – это Exchange, переводится как «обмен». В одной
статье его перевели как «точка обмена», а в другой – просто как «обменник». Ну а у меня слово «Exchange» ассоциируется с продуктом Microsoft Exchange Server, который
представляет собой почтовую программу. Ну и вообще
передача сообщений очень похожа на работу почтового отделения. Так вот, Exchange представляет собой аналог почтового ящика, куда мы кладем для отправки свои сообщения
(см рис. 1).
Как каждое почтовое отделение имеет несколько ящиков,
куда каждый желающий отправить сообщение может кинуть
свое письмо, так и сервер очередей (брокер) может иметь
несколько ящиков. Более того, в век техники и электроники мы сами можем завести себе свой собственный ящик.
А можем пользоваться почтовым общим ящиком на почтовом отделении или у ближайшего магазина. В общем,
Exchange – это место, откуда брокер забирает предназначенные для доставки сообщения.
Почтовый ящик (Exchange) может быть трех типов:
> direct (прямой) – привязан к конкретной очереди и передает ей сообщение;
> fanout (разветвленный) – связан со всеми доступными
очередями, которым направляется данное сообщение;
> topic (тематический) – выбирает очередь в соответствии
с темой сообщения.
после остановки программы и возобновляться после ее запуска.
Второе важное свойство элементов брокера, в частности Exchange, – это автоудаление (autodelete), т.е. удаление
при их неиспользовании. Например, если все производители сообщений закрыли соединение с брокером, то Exchange
автоматически может удалиться.
Рассмотрим далее, что происходит с нашим сообщением: оно направляется брокером в ящик получателя. Ящик
получателя называется очередью (Queue) (см. рис. 2). В зависимости от схемы доставки сообщений до получателя существуют разные типы Exchange.
Наиболее распространенный тип обмена (Exchange) –
это прямой (direct), когда обмен связан с очередью. Связь
(bind) или, выражаясь точнее, привязка очереди (Queue)
к обмену осуществляется через ключ маршрутизации
(routing key), который представляет собой аналог адреса.
Каждое сообщение снабжается ключом маршрутизации
(см. рис. 3). Чтоб понять, в какой ящик получателя должно
попасть письмо, придумали адрес, например: Петроград.
Смольный. Ленину. Например, если бы в то время существовало сообщение посредством электронного обмена,
то все сводки октябрьских событий 1917 года можно было
бы поместить в Exchange «Революционные сводки», который был бы связан ключом маршрутизации (routing key)
«Петроград. Смольный. Ленину» с личным почтовым ящиком товарища Ленина. Тогда вождь пролетариата, просматривая свой ящик, мог бы выбирать все сводки сообщений
хода исторических событий.
Рисунок 4. «Развернутый» обмен
Рисунок 5. Пример «тематического» обмена
Как в один ящик почтового отделения кидают письма
разные люди, так и в один и тот же Exchange могут послать сообщения разные отправители, которых часто называют производителями (или Producer Publisher) сообщений. Так как наш брокер, как мы сравнивали ранее, похож
на виртуальный почтовый офис, а всякая виртуальность
реализуется запущенными программами, а всякая программа, как известно, в любой момент может быть остановлена
администратором или просто случайно «упасть», то элементы брокера, в частности Exchange, могут иметь свойство
«постоянный» или «длительный» (durable), т.е сохраняться
системный администратор ноябрь 2015
61
Разработка
Необходимо заметить, что к одной очереди может быть
привязано несколько разных обменов с разными ключами
маршрутизации, так же как и один обмен может быть связан
с несколькими разными очередями.
Другой тип обмена – это «развернутый» (funout), когда один обмен связан c несколькими разными очередями
без ключа, типа отношение один-ко-многим (см. рис. 4).
Пусть наш обмен называется «Всем_Постам_ГАИ». А каждый пост ГАИ имеет свой почтовый ящик, т.е. свою очередь.
Тогда сообщение, отправленное в обмен «Всем_Постам_
ГАИ», дойдет то каждой очереди поста ГАИ. Данный тип обмена является самым быстрым.
И последний тип обмена – «тематический» (topic), когда
сообщение направляется по теме очереди (см. рис. 5). Рассмотрим пример: пусть в наш обмен «Фондовый рынок» поступают данные торгов с разных бирж. Фондовый брокер,
очередь А, торгует только на РТСБ (Российская товарно-сырьевая биржа), и его интересуют все торги на РТСБ. Ключ
привязки очереди А к фондовому обмену будет: RTSB.*.
Все сообщения с маской «RTSB.*» будут направлены этому брокеру: RTSB.Oil.Gazprom, RTSB.Oil.TransNeft, RTSB.
Mt.NorilskNikel.
Брокера В интересуют акции только Газпрома, но на всех
мировых биржах, поэтому он использует маску «*.Gazprom»
и получит сообщения с ключами RTSB.Oil.Gazprom и ChTB.
Oil.Gazprom.
Брокер С специализируется только на нефтяных компаниях, поэтому по его маске «*.Oil.*» ему доставят сообщения
RTSB.Oil.Gazprom и ChTB.Oil.Gazprom и RTSB.Oil.TransNeft.
На рис. 5 цветными линиями показано, в какие очереди поступят какие сообщения.
Также необходимо упомянуть пару важных свойств:
это «внутренний» (internal) и «пассивный» (passive) режимы.
Если включен «внутренний» режим, то обмен «не виден»
инструменты
для других приложений. Для того чтобы работать с новым
обменом, его надо объявить (команда exchange.declare).
При объявлении обмена необходимым атрибутом является
«имя обмена». Обычно если при объявлении обмена в брокере был уже ранее объявлен обмен с таким же именем,
то должна возникнуть ошибка. Но если установлен флаг
«пассивного» режима, то такая ошибка игнорируется.
Очередь
Ящик получателя, как упоминали, называется очередью
(Queue). Представим, что мы завели в почтовом отделении абонентский ящик и потеряли от него ключ. Но у нас
есть возможность через щель вытащить только одно, самое
нижнее, сообщение. Почтовые служащие складывают нам
в стопочку сообщения, а мы, когда нам удобно, по одному
вытягиваем их из ящика. Так работают очереди.
Как и обмен, очередь может быть «постоянной» (durable),
«самоудаляемой» (autodelete) и «пассивной» (passive). Также очередь еще может быть и «эксклюзивной» (exclusive).
Как ранее упоминалось, к одной очереди могут быть подключены несколько разных клиентов. Так вот, «эксклюзивная» очередь – эта очередь, которая работает только с одним клиентом.
Для работы с очередью ее необходимо объявить. Это можно сделать один раз, и нет необходимости объявлять очередь каждый раз при подсоединении к брокеру, если она
уже там существует. Данные для очереди могут быть получены двумя способами: синхронно и асинхронно. Синхронно, метод Consume – это, когда выполнение кода на данном
методе очереди блокируется и далее при приеме нового
сообщения осуществляется его обработка через функцию
обратного вызова. Этот цикл повторяется до приема метода
Cancel. На рис. 6 и 7 представлены диаграммы синхронного
и асинхронного обменов.
Рисунок 6. Асинхронный режим AMQP.GET
62
ноябрь 2015 системный администратор
Разработка
инструменты
Асинхронный прием сообщений осуществляется периодическим опросом методом GET, который возвращает
либо сообщение, либо пусто. Для большинства веб-приложений это наиболее применимый способ опроса очереди,
однако метод Consume является более производительным
и может использоваться для большинства бэдграундовских скриптов.
одного канала. Канал открывают методом Open и закрывают Close.
Сообщения
Как уже упоминалось, обмен осуществляется сообщениями.
Как таковой отдельной сущности Сообщение в AMQP нет,
но есть описание состава сообщений, хотя в разных языках
API оно может присутствовать.
Связи
Как уже упоминалось ранее, чтобы сообщения из обмена
в очередь попадали, их надо привязать друг к другу. Это делается командой bind. Однако в языках некоторых API она
отсутствует. Например, в РНР можно осуществить привязку
очереди к обмену:
Queue.bind($key, $exchange_name);
или, наоборот, обмена к очереди:
Использование каждого
инструмента надо
осуществлять исходя
из решаемых задач,
а не следовать тенденциям
общей моды
Exchange.bind($queue_name, $routing_key);
Привязка очереди к обмену или наоборот осуществляется через ключ маршрутизации, о котором мы так много
говорили выше. Для обмена типа fanout ключ в рамках API
должен присутствовать, но игнорируется, так что может
быть пустой строкой.
Каналы
Обмен данными между брокером и клиентом идет по каналам. На одном физическом соединении может быть открыто несколько каналов. Например, по одному каналу мы
можем получать данные для одной очереди, а по другому –
для другой, а по третьему осуществлять их отправку. Однако
для большинства случаев достаточно открытия всего лишь
Каждое сообщение должно иметь тело – это та информация, которая передается конечному пользователю. Помимо
этого, в сообщении присутствуют атрибуты и заголовок. Заголовок сообщения – это дополнительная служебная информация, аналогичная дополнительным полям HTTP-заголовка.
Также существуют атрибуты, вот, например, некоторые
из них: priority, user_id, app_id, content-type, content-encoding,
delivery_tag, type, timestamp и прочие. Как правило, эти атрибуты предназначены для реализации дополнительных возможностей клиентских библиотек. Например, через брокер можно передавать сериализованные объекты в разных
форматах: JSON, BSON, protobuf, Thrift или MessagePack.
Чтобы конечный пользователь понял, в каком формате им
передается объект, используется атрибут content-type.
Рисунок 7. Синхронный режим AMQP.CONSUME
системный администратор ноябрь 2015
63
Разработка
инструменты
Подтверждения
Каждое сообщение должно быть доставлено адресату.
Но как нам узнать, получено ли сообщение? В работе почтового отделения для заказных и ценных писем применяются
уведомления. Аналогом такого уведомления является команда AMQP.ACK, которая должна выдаваться после приема
сообщения. После ее приема переданное сообщение удаляется из очереди. Также при приеме сообщений мы можем
выставить флаг NOACK, тогда после доставки сообщения
оно автоматически пометится принятым.
Ближе к практике
!/usr/bin/env python
import pika
connection = pika.BlockingConnection()
channel = connection.channel()
channel.exchange_declare(exchange="test_exchange", ↵
exchange_type="direct", passive=False, ↵
durable=True, auto_delete=False)
Проверить создание очереди можно с помощью консольной утилиты rabbitmqctl, которая входит в состав пакета
rabbitmq-server:
$sudo rabbitmqctl list_exchanges
Процесс инсталляции RabbitMQ можно посмотреть на официальном сайте [1]. Существуют инсталляционные пакеты
для разных версий Unix, Windows и Mac. Для инсталляции
под Ubuntu достаточно установить из пакета:
sudo apt-get install rabbitmq-server
Для экспериментов лучше использовать виртуализацию
и установить docker-образ:
Listing exchanges ...
direct
amq.fanout
fanout
amq.headers
headers
amq.match
headers
amq.rabbitmq.log topic
amq.rabbitmq.tracetopic
amq.topic
topic
test_exchange
direct
...done.
Далее создадим очередь:
docker pull rabbitmq
Как уже упоминалось, RabbitMQ общается по протоколу
AMQP, поэтому необходимо установить клиентскую библиотеку librabbitmq (не все клиенты ее используют) и соответствующую библиотеку API используемого вами языка. Например, для Python – python-amqp, а для PHP – php-amqp.
Будучи приверженцем обоих языков, я стану приводить примеры также на обоих языках. Инсталляция соответствующих пакетов РНР (1) или Python (2):
sudo pecl install amqp
sudo pip install pika==0.10.0
// (1)
// (2)
В каждом API мы первоначально должны создать соединение и открыть канал:
!/usr/bin/env python
import pika
connection = pika.BlockingConnection( ↵
pika.ConnectionParameters('localhost'))
channel = connection.channel()
!/usr/bin/php
<?php
$rabbit = new AMQPConnection([
// можно эти параметры не задавать
// так как они установлены по умолчанию
'host' => 'localhost',
'port' => '5672',
'login' => 'guest',
'password' => 'guest'
]);
$rabbit->connect();
$сhannel = new AMQPChannel($rabbit);
Первоначально мы должны объявить Обмен и Очередь.
Пусть одно наше приложение работает на публикацию сообщений, а второе – на их прием. Таким образом, мы можем
осуществлять коммуникацию между разными частями инфраструктуры нашего проекта. Впрочем, именно для этого
и нужен брокер сообщений.
64
#!/usr/bin/php
<?php
$rabbit = new AMQPConnection( );
$res = $rabbit->connect();
$testChannel = new AMQPChannel($rabbit);
$queue = new AMQPQueue($testChannel);
$queue->setName('test_queue');
$queue->declare();
$rabbit->disconnect();
Проверяем создание очереди с помощью консольной
утилиты rabbitmqctl:
$sudo rabbitmqctl list_queues
Listing queues ...
test_queue
0
...done.
Также утилита rabbitmqctl показывает количество накопленных сообщений. Так как мы пока еще сообщения в очередь не отправляли, утилита показывает ноль.
Если мы отправим сообщение, то оно не дойдет до адресата, так как очередь и обмен пока еще не связаны. Можем
проверить это:
>>>
>>>
>>>
>>>
import pika
connection = pika.BlockingConnection()
channel = connection.channel()
channel.basic_publish('test_exchange', 'my_key', ↵
'test message 1', pika.BasicProperties( ↵
content_type='text/plain', delivery_mode=1))
True
Если опять проверим длину нашей очереди, то она не изменилась. Теперь свяжем их:
#!/usr/bin/php
<?php
$rabbit = new AMQPConnection();
$res = $rabbit->connect();
ноябрь 2015 системный администратор
Разработка
инструменты
$testChannel = new AMQPChannel($rabbit);
$queue = new AMQPQueue($testChannel);
$queue->setName('test_queue');
$queue->bind('test_exchange', 'my_key');
$rabbit->disconnect();
$i++;
if($i > 10){
return false;
}
}
$rabbit = new AMQPConnection();
$res = $rabbit->connect();
Проверяем создание связи:
$ sudo rabbitmqctl list_bindings
Listing bindings ...
exchange test_queue
test_exchange exchange
...done.
queue
test_queue
test_queue
queue
[]
my_key []
Связь между обменом и очередью создалась, теперь
повторим скрипт отправки сообщения и убедимся в том,
что в очереди появилось сообщение:
Listing queues ...
test_queue
1
...done.
Теперь получим отправленное сообщение методом GET:
$rabbit = new AMQPConnection();
$res = $rabbit->connect();
$testChannel = new AMQPChannel($rabbit);
$queue = new AMQPQueue($testChannel);
$queue->setName('test_queue');
$msg = $queue->get();
$rabbit->disconnect();
var_dump($msg);
// вывод:
object(AMQPEnvelope)#4 (18) {
["body"] => string(11) "test message 1"
["content_type"]=> string(10) "text/plain"
["routing_key"]=> string(6) "my_key"
["delivery_tag"]=> int(1)
["delivery_mode"]=> int(1)
["exchange_name"]=> string(13) "test_exchange"
["is_redelivery"]=> int(0)
["content_encoding"]=> string(0) ""
["type"]=> string(0) ""
["timestamp"]=> int(0)
["priority"]=> int(0)
["expiration"]=> string(0) ""
["user_id"]=> string(0) ""
["app_id"]=> string(0) ""
["message_id"]=> string(0) ""
["reply_to"]=>
string(0) ""
["correlation_id"]=> string(0) ""
["headers"]=> []
}
Получить данные можно: $msg->getBody(); а также мы
можем узнать, с каким ключом маршрутизации и из какого
обмена к нам пришло сообщение. Если сравнивать с почтой, то это будет похоже на «обратный адрес».
Рассмотрим синхронную обработку сообщения методом
AMQP.CONSUME. Для этого первоначально необходимо
объявить функцию обратного вызова processMessage, в которой будет проходить обработка сообщения, и потом вызвать метод $queue->consume(<имя обработчика>):
function processMessage($envelope, $queue) {
static $i=0;
echo 'Message ',$i,': ',$envelope->getBody(), PHP_EOL;
системный администратор ноябрь 2015
$testChannel = new AMQPChannel($rabbit);
$queue = new AMQPQueue($testChannel);
$queue->setName('test_queue');
$queue->consume("processMessage");
Вырастаем из песочницы
RabbitMQ, несмотря на кажущуюся простоту описания, является сложным и высокопроизводительным решением.
В блоге разработчиков RabbitMQ упоминается о создании
кластера с производительностью до 1 млн операций в секунду. Существует множество паттернов его использования –
от банальных почтовых рассылок до масштабирования с использованием взаимодействия frontend-backend-скриптов.
К сожалению, более детальное рассмотрение данных паттернов выходит за рамки данной статьи. Упомянем их лишь
кратко.
Создание каналов между клиентами может быть, как точка-точка («эксклюзивная» очередь), так и множественное
распространение сообщений в виде публикация-подписка.
Канал можно организовать как временный, так и канал гарантированной доставки.
Можно выделить такие основные паттерны использования, как фильтрация, агрегация, отложенный запрос, динамическая маршрутизация.
В заключение хочется отметить, что использование каждого инструмента надо осуществлять исходя из решаемых
задач, а не следовать тенденциям моды (О, использование RabbitMQ – это круто!). Например, у меня в практике
встречалось множество проектов, в которых использование
RabbitMQ было на 75% не обоснованным. С данной задачей
мог бы справиться Redis или ZMQ, и, возможно, реализация
была бы менее затратной. EOF
[1] Официальный сайт RabbitMQ – https://www.rabbitmq.com.
[2] Официальный сайт поддержки протокола AMPQ – http://
amqp.org.
[3] Официальный
docker-образ
RabbitMQ
–
https://hub.
docker.com/_/rabbitmq.
[4] Описание работы с РНР – https://www.rabbitmq.com/tutorials/
tutorial-one-php.html.
[5] Описание работы с Рython – https://www.rabbitmq.com/tutorials/
tutorial-one-python.html.
[6] Документация API PHP – http://php.net/manual/pl/book.amqp.php.
[7] Документация API Python pika – https://pika.readthedocs.org/
en/0.10.0.
[8] Силаков Д. Проект Docker. Управляем виртуальными окружениями. // «Системный администратор», №3, 2015 г. – С. 4-7 (http://
samag.ru/archive/article/2887).
[9] Силаков Д. Инструменты управления множеством контейнеров docker. // «Системный администратор», №5, 2015 г. –
С. 11-15 (http://samag.ru/archive/article/2942).
Ключевые слова: RabbitMQ, очереди, программирование, API,
AMPQ.
65
Разработка
инструменты
Визитка
ОЛЕГ ФИЛИППОВ, АНТ-Информ, заместитель начальника
отдела разработки, comol@mail.ru
Разрабатываем биржевого робота
Вы собрались разработать робота для торговли на бирже, но не знаете, с чего начать.
В статье рассмотрены основные принципы и инструменты для создания биржевых
роботов
Что такое биржевой робот, и зачем он нужен?
Форекс, биржевые свечи, разница курсов… Знакомые слова? В современном мире, наверное, нет необходимости
говорить о том, что игра на финансовых рынках стала достаточно популярным занятием. Для большинства «простых
смертных» это тем не менее является чем-то вроде ставок
на спорт. Больше шансов потерять деньги, чем заработать.
Но если эксперименты с форексом не завершились для вас
полным фиаско и вы чувствуете ностальгию по чему-либо,
подобному тому, что представлено на рис.1, но из игр уже
выросли, то самое время погрузиться в мир так называемого алгоритмического трейдинга.
Если же для вас то, что представлено на рис. 1, – темный
лес, то прежде чем приниматься за создание биржевого робота, нужно обязательно поторговать на бирже «руками».
Для этого устанавливаем клиент MetaTrader, который
есть в свободном доступе и доступен по ссылке [1]. Платформа открытая и достаточно удобная. За годы своего существования обкатана множеством пользователей.
Есть также версиипод мобильные платформы для Android
и iOS.
Конечно, просто поторговать недостаточно, крайне желательно познакомиться со специализированной литературой:
> Роберт Майнер «Торговые стратегии с высокой вероятностью успеха».
> Александр Элдер «Основы биржевой торговли».
Обязательно посетить ресурсы:
> http://ru.investing.com
> http://smart-lab.ru
> http://investopedia.com
> https://www.mql5.com
Рисунок 1. Биржевые графики в программе MetaTrader
66
ноябрь 2015 системный администратор
инструменты
Разработка
В мире большинство сделок
на срочном финансовом рынке
совершается уже биржевыми
роботами
После этого торговля на бирже станет для вас несколько более осмысленной. Главное – не слишком увлекаться
торговлей на Forex. Валютный рынок, большие комиссии,
отсутствие прямого выхода на биржу и прочие ограничивающие условия делают данный рынок менее привлекательным для разработки биржевого робота, который станет
его участником.
Для более серьезного подхода к биржевой торговле,
конечно, вам нужно заключить договор брокерского обслуживания и, возможно, приобрести дополнительное ПО
для работы с брокером и использования алгоритмической
торговли.
После определенного времени игры на бирже (на виртуальные деньги, кстати, лучше бы) будет понимание, какие
стратегии вам нравятся и подходят. Только вот не всегда
есть желание и возможность находиться у компьютера
и проводить сделки, если на рынке что-то меняется. Вот
тут на помощь и приходит биржевой робот. Биржевой робот – это некая программа, которая может производить
определенные сделки на бирже по заранее заданному алгоритму.
В современном мире большинство сделок на срочном
финансовом рынке совершается уже биржевыми роботами. Официальную статистику, конечно, никто не ведет.
Но то, как рынок быстрее, чем за секунду, реагирует на изменившуюся информацию, точно на это указывает. На мой
взгляд, всех успешных трейдеров можно разделить на две
категории:
Рисунок 2. Графический интерфейс для создания биржевых роботов терминала LSLab
системный администратор ноябрь 2015
67
Разработка
> люди, владеющие определенной инсайдерской информацией;
> роботы.
Виды биржевых роботов
Из практики: всех биржевых роботов, пожалуй, можно разделить на три категории:
> высокочастотные роботы;
> роботы на основе эмпирических правил (чаще всего
«таймфрейм»);
> роботы на основе математических инструментов (чаще
всего «скальперы»).
Разделение весьма условное, и никто не мешает одному
роботу совмещать в себе черты первого, второго и третьего
вида. Но при начале разработки все-таки надо определиться, за счет чего вы главным образом собираетесь извлекать
выгоду.
В варианте 1 нужна будет серьезная подготовка. Общий
смысл работы высокочастотных роботов заключается в поиске несовершенства на бирже, которое возникает за счет
временных лагов, когда реакция рынка на изменения на несколько секунд запаздывает по отношению к каждым новым изменениям. Таким образом, высокочастотные роботы
должны ориентироваться на специфичные методы технического анализа. Для них важны даже шумы в данных, более
того, они очень часто используют шумы с выгодой для себя.
Чем быстрее робот успеет проанализировать данные,
Рисунок 3. Основные элементы панели инструментов TSLab
Рисунок 4. Элемент «внешний скрипт» TsLab
68
инструменты
сделать выводы и совершить сделку, тем больше шансов
успеть до изменения рынка. В данном случае решающее
значение имеет скорость реакции, которая даже важнее,
чем качество прогноза. Таким образом, данная категория
роботов является, пожалуй, самой технически сложной
из перечисленных.
Инструментарий для разработки высокочастотного робота будет примерно следующий:
> Язык разработки: C++, еще лучше Assembler.
> Обязательно прямой доступ на биржу. Для этого придется познакомиться с протоколом Plaza II [2]. Данный
протокол является «нативным» на московской бирже.
В случае если хочется создать универсального робота
или планируется выход на западные биржи, придется обратиться еще и к протоколу FIX [3].
> Крайне желательно само оборудование, на котором будут крутиться биржевые роботы, размещать
в том же ЦОД, в котором находятся серверы биржи. Время отклика должно быть более 0,2 мс.
> Оборудование тоже должно быть специфичным.
Для ускорения математических расчетов в данном случае
чаще всего используют CUDA кластеры.
В варианте 2 подготовка уже нужна куда менее существенная. По сути, к этому виду роботов относятся 95%, которые вы можете встретить в открытом доступе. Эти роботы
обычно строятся на основе простых (ну или не очень простых) эмпирических правил, которые вы можете встретить
в разнообразной литературе по биржевой торговле. Для начала рекомендую прочесть [4]. Собственно, после этого инструментов для реализации вашей стратегии можно подобрать великое множество:
> Скриптовые языки популярных биржевых терминалов
(TradeScript – SmartX, Metastock, WealthScript – Wealth
Lab, MQL5– MetaTrader).
> Инструменты визуального создания роботов (TsLab,
LiveTrade (CoFiTe).
> Конечно, языки программирования общего назначения
(С++/C#).
В варианте 3 уже нужно ориентироваться на определенную математику. Это чаще всего статистические методы
прогнозирования временных рядов, методы аппроксимации
функций, алгоритмы оптимизации и прочее. Математика
достаточно серьезная, поэтому в случае использования
данных методов, конечно, необходимо обратиться к специализированным программным пакетам Statistica, Matlab
или SPSS.
Часто также используется специализированный биржевой софт, который решает схожие задачи. Только дело
в том, что в случае специализированного биржевого софта ограничены настройки по кастомизации. Данные пакеты, кроме решения задачи применения математических
методов, обладают достаточно развитым языком разработки, а также различными расширениями непосредственно
для работы на бирже.
О роботах вида 1, наверное, речи в данной статье не будет. Как правило, данные программно-аппаратные комплексы создаются большими командами профессионалов
за большие деньги.
ноябрь 2015 системный администратор
инструменты
Для начала они нам явно не подходят. Начнем с категории 2, т.к. инструментарий для создания данных роботов достаточно прост.
Графический интерфейс
для создания биржевых роботов
Рассмотрим создание биржевого робота средствами пакета
TSLab.
Внешний интерфейс создания биржевого робота с помощью пакета TSLab представлен на рис. 2.
Собственно, любой, даже самый простой, биржевой робот должен иметь следующие элементы:
> График/графики (на котором в итоге отображаются
все данные).
> Источник/источники данных, из которых берутся данные для анализа (к примеру, биржевых котировок).
> Хотя бы один индикатор по данным графика.
> Команду на открытие позиции при определенных условиях.
> Команду на закрытие позиции при определенных условиях.
Собственно, на рис. 2 присутствуют все эти элементы.
График – самая большая и цветная фигура. Серые элементы – индикаторы или части входных данных. Элемент, выделенный красным цветом, – открытие позиции, светло-желтым – закрытие позиции.
Перечень возможных элементов весьма существенный.
На рис. 3 представлены внешний вид панели инструментов
и основные элементы, которыми можно пользоваться.
Я думаю, ни у кого не вызывает сомнения, что, открыв
категорию «Индикаторы», мы найдем достаточно большое
разнообразие, что типично для торговых систем.
На мой взгляд, особый интерес представляет отдельный
блок под называнием «внешний скрипт». Его окно и свойства представлены на рис. 4.
Почему данный блок нам интересен? Наверное, уже догадываетесь. Данный элемент предназначен для исполнения
сторонних компонент в рамках скрипта. То есть в свойствах
элемента нужно указать файл *.dll. Можно, кстати, несколько файлов *.dll.
Данный dll-файл индикатора нужно разрабатывать на C#
c использованием готовых сборок.
После этого в начале скрипта пишется код включения
определенных сборок от TsLab, вроде следующего:
using TSLab.Script;
using TSLab.Script.Handlers;
using TSLab.Script.Helpers;
Затем можно и нужно использовать объекты из этих пространств имен. Сам робот/индикатор должен, по сути дела,
экспортировать только одну функцию:
Разработка
public IList<double> Execute( ISecurity source )
Приведенный код, конечно, может напугать после графического интерфейса, тем более код на достаточно сложном с точки зрения решения финансовых задач языке C#.
К счастью, для TsLab достаточно много примеров создания
компонент (как и готовых компонент, кстати). Посмотреть
и поискать то, что вам нужно, конечно, можно на их официальном форуме [5].
Кроме непосредственно разработки скриптов, среда
TsLab предоставляет средства их тестирования на исторических данных.
Перечень инструментов, которые TsLab предоставляет
в пользование разработчика робота, показан на рис. 5.
Конечно, графический конструктор роботов – штука достаточно удобная, позволяющая быстро решать задачи
по биржевой торговле.
Но, как только ваш робот приобретет более-менее сложную структуру, в графических связях и кубиках будет достаточно сложно разобраться. Кроме того, модификация
их тоже затруднена, скорость работы тоже, очевидно, будет
ниже.
В этом случае, очевидно, уже нужно использовать API.
На мой взгляд, в случае если трейдер знает и уверен, какую стратегию он хочет реализовать, то нет большой разницы в том, использовать для этого графический инструмент или текстовый. Если стратегия действительно состоит
«из нескольких кубиков», то реализовать ее с помощью
графических инструментов вполне допустимо. А вот если
уже речь идет о том, что стратегия, реализованная на кубиках становиться сложной и запутанной, то однозначно надо
осваивать API. Собственно, на эту тему есть целая статья
на сайте TsLab [6].
В данной статье мы рассмотрели только самую вершину
айсберга разработки биржевых роботов. Но для того чтобы
понять, о чем идет речь, и приступить к первым экспериментам, этого, думаю, достаточно. EOF
[1] Платформа MetaTrader 4 – http://www.metatrader4.com/ru/
download.
[2] Описание протокола Plaza II на хабре – http://habrahabr.ru/
company/itinvest/blog/261709.
[3] Описание протокола FIX передачи биржевых данных – http://
www.fixtradingcommunity.org.
[4] Майнер Р. Торговые стратегии с высокой вероятностью успеха – http://www.ozon.ru/context/detail/id/8387424.
[5] Форум системы TsLab – http://forum.tslab.ru.
[6] Статья «Преимущества TsLab API перед визуальным редактором» – http://rusalgo.com/article/tslab_api.
Ключевые слова: программирование, биржи, робот, TsLab.
Рисунок 5. Инструменты тестирования и оптимизации скрипта в TsLab
системный администратор ноябрь 2015
69
Карьера/Образование
alma mater российских ИТ
Михаил Федотов:
«Многие наши выпускники возглавляют
научные институты РАН и крупные ИТ-компании»
В гостях у «Системного администратора» Михаил Валентинович Федотов, кандидат
физико-математических наук, заместитель декана по учебной работе факультета
ВМК МГУ имени М.В. Ломоносова, доцент
– Студент ВМК – каков он? Какие требования к уровню
подготовки абитуриента?
– На нашем факультете учиться, безусловно, трудно.
Но вполне по силам выпускнику практически любой школы.
Я, например, заканчивал обычную школу в городе Химки
Московской области. Сейчас я веду занятия на первом курсе и на первом семинаре спрашиваю студентов о том, кто
в какой школе учился. Большинство заканчивают физматклассы или даже физматлицеи и лицеи информационных
технологий. Но есть и выпускники школ других профилей.
При этом около половины всех студентов, поступающих
на наш факультет, иногородние.
– Сколько выпускников по ИТ-профессиям вы готовите? По каким специальностям?
– Ежегодно факультет ВМК оканчивают около 300 выпускников. Учим мы по двум направлениям: «Прикладная математика
и информатика» и «Фундаментальная информатика и информационные технологии». Но у нас на факультете 18 выпускающих кафедр, которые охватывают практически все направления ИТ-сферы, в которую я включаю любую область
человеческой деятельности, где применяются компьютеры.
– У вас большой конкурс на место? Соотношение бюджетных и коммерческих мест?
– Ежегодно на факультет ВМК принимаются 340 студентов
на бюджетные места и 40-80 студентов по контракту. Конкурс на бюджетные места у нас стабильный – более четырех
человек на место.
– Принято считать, что ИТ-знания, полученные в вузах,
сильно отстают от требований времени. Так или это?
– Сейчас ИТ-компании используют много различных языков
программирования и еще больше полезных программных
комплексов. При этом регулярно появляются новые языки
и новые программы. Поэтому невозможно научить студентов
всем современным языкам и новым замечательным инструментам. Следовательно, цель университета – дать фундаментальные знания по математике и информатике на базе
70
Михаил Федотов: «Проблем с трудоустройством у наших выпускников обычно не бывает»
некоторых языков и инструментов – знания, которые позволят выпускнику легко осваивать новые языки программирования и новые инструменты обработки цифровых данных,
а также создавать новые языки программирования и новые
программные комплексы.
Факультет сотрудничает со многими ИТ-компаниями,
специалисты которых читают спецкурсы и циклы спецкурсов для студентов по самым современным направлениям
развития ИТ-индустрии, обучают работать с новейшими продуктами, рассказывают о новых технологиях и т.д.
ноябрь 2015 системный администратор
Карьера/Образование
alma mater российских ИТ
И все это совершенно бесплатно для студентов и в свободное от основных занятий время.
Так, например, на факультете совместно с компанией
Mail.ru Group организован и уже два года успешно работает
образовательный проект «Техносфера», цель которого –
дать студентам знания в области Big-Data. Обучение проходит на факультете в виде лекций и семинаров три-четыре
раза в неделю после основных занятий в течение двух лет.
Программа состоит из 10 курсов, созданных и читаемых
тридцатью лучшими специалистами Mail.ru Group.
Многие
магистерские
программы
факультета,
а их у нас около 30, созданы в сотрудничестве с ведущими
ИТ-компаниями, которые передают свои программные продукты для обучения наших студентов и помогают создавать
учебные курсы по этим продуктам.
Так что у студентов есть много возможностей быть в курсе новейших разработок в ИТ-сфере.
Институт системного программирования, Федеральный
исследовательский центр «Информатика и управление»,
Институт кристаллографии и др. Продолжаются совместные исследования с ведущими медицинскими институтами:
хирургии имени А.В.Вишневского, научным центром сердечно-сосудистой хирургии имени А.Н.Бакулева, НИИ глазных
болезней имени Гельмгольца.
– Расскажите о профессорско-преподавательском составе факультета. Педагоги – ученые или практики?
– На 18 кафедрах факультета работают около 250 преподавателей – профессионалы очень высокого уровня, около трети из них – это профессора, доктора физико-математических
наук, среди остальных практически все – кандидаты физико-математических наук. Многие преподаватели параллельно трудятся в научных институтах Российской академии наук,
в ведущих ИТ-компаниях. У нас более 10 членов Российской
академии наук. В 17 научно-исследовательских лабораториях факультета работают более 100 научных сотрудников, которые проводят исследования в самых разных областях ИТсферы и параллельно участвуют в учебном процессе.
Факультет имеет тесные рабочие контакты с крупными ИТ-компаниями: Intel, Microsoft, Microsoft Research, IBM,
Hewlett-Paccard, Samsung, Sun, Cisco, SAP, SAS; сотрудничает со многими российскими компаниями, например, IBS,
Mail.ru Group, «Ай-Ти», «Гарант», «Диалог-наука», «Доктор
Web», «КонсультантПлюс», «Лаборатория Касперского»,
«Люксофт», НПО «Энергия», ОКБ Сухого и другими.
– Осуществляется ли сотрудничество с другими вузами, научными центрами и ИТ-компаниями, российскими
и зарубежными?
– Факультет активно сотрудничает со многими институтами РАН, в числе которых Институт прикладной математики имени М.В.Келдыша, Математический институт имени В.А.Стеклова, Институт вычислительной математики,
Наши выпускники
На нашем факультете
учиться, безусловно,
трудно. Но вполне по силам
выпускнику практически
любой школы
– Каковы перспективы трудоустройства выпускников?
– Проблем с трудоустройством у наших выпускников обычно
не бывает. Одни студенты во время учебы работают в факультетских научных коллективах, сотрудничающих с ИТкомпаниями, о которых я уже говорил. Другие студенты
на последнем курсе находят себе работу и начинают трудиться параллельно с учебой. Ежегодно на факультете проходят два Дня карьеры. Они проводятся для представителей
компаний из самых разных сфер бизнеса, которым требуются высококвалифицированные ИТ-специалисты. Поэтому
спрос на наших выпускников выше, чем предложение. Кстати, многие наши выпускники возглавляют научные институты РАН и крупные ИТ-компании. EOF
> Наталия Берлова (Тринько), выпускница
> Дмитрий Першеев, выпускник факультета
> Игорь Соколов, выпускник факультета
факультета ВМК 1991 года (первая женщи-
ВМК 1987 года (генеральный директор ком-
ВМК 1976 года (директор ФИЦ «Информа-
на-профессор математики в Кембриджском
тика и управление» РАН, академик РАН)
университете)
> Евгений Тыртышников, выпускник факуль-
> Владимир Воеводин, выпускник факультета
тета ВМК 1977 года (директор Института
ВМК 1984 года (зам. директора НИВЦ МГУ,
вычислительной математики РАН, член-
член-корреспондент РАН)
корреспондент РАН)
> Сергей Шоргин, выпускник факультета
ВМК 1974 года (заместитель директора Института проблем информатики РАН)
> Дмитрий Новиков, выпускник факультета
ВМК 1986 года (генеральный директор компании «КонсультантПлюс»)
> Сергей Пантелеев, выпускник факультета
ВМК 1988 года (генеральный директор медицинской компании «ПРЕКОМ»)
> Виктор Вайнштейн, выпускник факультета ВМК 1993 года (генеральный директор
APLANA Software)
> Булат Гайфуллин, выпускник факультета
пании «Гарант»)
> Сергей Абрамов, выпускник факультета
ВМК 1980 года (директор Института программных систем РАН)
> Борис Гольдштейн, выпускник факультета
ВМК 1972 года (вице-президент компании
«ЛАНИТ»)
> Татьяна Дьяченко (Ельцина), выпускница
факультета ВМК 1983 года (советник бывшего президента РФ Ельцина Б.Н.)
> Инна Святенко, выпускница факультета
ВМК 1989 года (депутат Московской город-
> Виктор Савюк, выпускник факультета ВМК
ВМК 1982 года (председатель совета ди-
ской Думы, член фракции «Единая Россия»)
в 1984 году (президент «Ренова-медиа»)
ректоров компании Interface Ltd., председа-
> Алексей Ремизов, выпускник факультета
> Андрей Свириденко, выпускник факультета
тель правления Сообщества выпускников
ВМК 1980 года (председатель совета ди-
ВМиК)
ректоров «Ай-Теко»)
ВМК 1991 года (президент компании SPIRIT)
системный администратор ноябрь 2015
71
Карьера/Образование
alma mater российских ИТ
Светлана Зива:
«Как можно стать студентом МГУ?
Немного одаренности, много трудолюбия
и подготовительные курсы!»
Светлана Зива, помощник декана факультета
ВМК МГУ имени М.В. Ломоносова по информационному
продвижению
В жизни множества семей однажды
встает вопрос: где дальше учиться ребенку, для которого школьный выпускной стал близкой датой, а не абстрактным понятием? Ответ на на него,
устраивающий оба поколения, может
сразу не найтись. Но, если этот общий
вопрос разбить на три одинаково значимых: чему, у кого и ради чего учиться, то принять совместное решение
становится гораздо проще.
Действительно, с тех пор, как математика существует в виде стройной научной системы, во всем мире
и в разные времена не нашлось другого столь же эффективного тренинга
для развивающегося пытливого ума.
Каков бы ни был намеченный трудовой
путь человека, изучение математики
организует, систематизирует мышление и дает точку опоры для уверенности в своих силах. С другой, не менее
важной для выбора будущей специальности, стороны, ИТ-специалисты
будут востребованы всегда и во всем
мире. Алгоритмический подход к различным рабочим и житейским процессам – универсальный и эффективный
в любой сфере жизни.
Уникальность нашего факультета
заключается в том, что учебный план
для студентов, аспирантов, слушателей магистратуры и программы второго высшего образования – выверенный четырьмя десятилетиями симбиоз
между знаниями по фундаментальной
математике и специализированными
актуальными знаниями в области ИТтехнологий.
Если ответ на вопрос, чему учиться,
найден, то ответ на два других вопроса
молодые люди, иногда вместе с родителями, обычно ищут на профильных
выставках, посвященных получению
высшего образования, и Днях открытых дверей вузов.
Здесь на первый план выходят
более конкретные интерпретации
72
вопроса «Где и у кого учиться?». Самые распространенные из них: легко ли поступить на наш факультет?
И легко ли учиться, поступив?
Поскольку ежегодно на ВМК приходят чуть более 400 новых студентов,
самый быстрый ответ на первый вопрос: они же смогли, значит, это возможно. Вам же интересно, как можно
оказаться в числе студентов МГУ? Немного одаренности, много трудолюбия и подготовительные курсы – вот
лучший рецепт для любого человека, желающего связать свою жизнь
с компьютерными технологиями и традициями лучшего университета страны. Перед поступлением в МГУ можно выбрать трехлетнюю подготовку
по всем предметам или по одному,
можно воспользоваться интенсивной
программой, рассчитанной на три
месяца, летними лекциями или группами выходного дня. Для школьников
из отдаленных районов разработана
и успешно действует дистанционная система обучения и подготовки
к поступлению. Если эти возможнос-
решения. Достигается это усердием,
с которым студенты изучают дисциплины факультета: фундаментальные математические, физические,
в
различных
программирование
аспектах, информатику, гуманитарные науки и английский язык. Только
так получится стать профессионалом
в узкой области, имея при этом широкий кругозор. Как видно, для того,
чтобы относительно легко поступить
и легко учиться, все-таки необходимо
приложить усилия. Если все случилось именно так, то студент ВМК переходит на следующий уровень этого
«квеста».
Для какой-то части студентов
«учиться легко» означает «учиться
интересно». Эмоции молодых людей
формируют ту особую студенческую
Изучение математики организует,
систематизирует мышление
и дает точку опоры для уверенности
в своих силах
ти использованы эффективно, то вероятность оказаться в числе 400 поступивших существенно повышается.
Теперь заглянем в наши классы.
Молодые люди, которые там занимаются, – в будущем специалисты, умеющие и использовать вычислительную технику, и понять коллег из других
областей – физиков, химиков, биологов, инженеров, менеджеров – тех,
кто ставит задачи для совместного
среду, попав в которую однажды,
уже не захочется прощаться с ней.
Это объясняет то, что, реализуясь
во взрослой жизни, многие в сложных
случаях ищут поддержки и дружеского участия у тех, с кем делили годы
в Alma Mater. Одинаковая профессиональная область позволяет решать
проблемы сообща, продолжать креативно мыслить, поддерживать дружеское общение на одной волне. EOF
ноябрь 2015 системный администратор
alma mater российских ИТ
Карьера/Образование
Эльдар Исхаков: «Не учебой единой»
Эльдар Исхаков, студент 1-го курса магистратуры ВМК
В первую очередь, конечно же, факультет – место, где люди получают
высокоуровневое образование, где
куются научные кадры. Но студенческая жизнь состоит не только из учебы.
Имея свободное время, хочется проводить его с друзьями, заниматься спортом и творчеством. Поэтому начинают
проявляться активные, инициативные,
позитивные и талантливые студенты,
которые привносят целую палитру красок в размеренный учебный процесс.
И в результате возникают яркий спектр
факультетских событий, а также различные студенческие организации, позволяющие раскрыть весь творческий
потенциал одним студентам и помогающие весело и интересно проводить
свое свободное время другим.
Почему студенты идут в наш Профком, в Театр++, в Приемную комиссию
и в газету «В ногу с жизнью» со своей
заинтересованностью в дальнейшем
развитии этих студенческих инициатив?
Они знают, что будут услышаны и поддержаны. А еще потому, что это возможность проявить себя, стать частью
чего-то значительного, это возможность познакомиться с интересными
и активными людьми, завести новых
друзей, это возможность после выпуска очередного номера газеты или после тяжелого рабочего дня в Приемной
комиссии сходить погулять по городу
или просто поиграть в настольные игры
в какой-нибудь аудитории на факультете с приятной компанией.
В течение учебного года активистами факультета традиционно проводятся самые запоминающиеся для студентов ВМК события.
В первые дни сентября по коридорам и в аудиториях первокурсники начинают нашептывать слово «посвят».
Многие из них не вполне понимают,
что это такое и «с чем его едят». Другие, быть может, уже наслышаны о посвящении от старших братьев, сестер,
товарищей. Тем не менее, для большинства Посвят становится одним
из самых грандиозных событий студенчества. Чего стоят незабываемая
«тропа первокурсника», конкурс сценок, концерт приглашенных музыкальных групп, выступление вээмкашной
группы «Пёсики», различные конкурсы
и спортивные мероприятия на поляне!
Ну и как же обойтись без песен под гитару у костра со своими новыми одногруппниками?
Далее вереницей следуют Посвят-послесловие, Выставка кафедр
факультета, Фестиваль науки, Фестиваль карьеры, Новый год, Экватор,
а также другие интересные события, в которых студенты принимают
Фото Адамова Никиты. Концерт на студенческом празднике «Посвят»
Контакты:
непосредственное активное участие,
одновременно являясь их организаторами. Особенно интересно проходит
Школа актива с выездом в пансионат
«Красновидово», которая длится три
дня и обычно проводится в ноябре.
Это время студенческих инициатив,
когда каждый студент может выразить
свое мнение о происходящем на ВМК,
предложить свои идеи по улучшению
факультета, будь то организационные
либо инфраструктурные вопросы.
Вторым полюсом факультетских
мероприятий после Посвящения является День факультета. Проводится
он во вторые выходные апреля и знаменует День рождения ВМК. В рамках
Дня факультета в течение целого месяца устраиваются конкурсы «Мистер
и Мисс ВМК», «ВМКвест», чемпионат
«Что? Где? Когда?», «Бегущий факультет», Кубок ВМК по футболу, в котором
могут принимать участие и преподаватели, Конкурс комнат и Конкурс групп,
концерт «Живой звук» и т.д. Кульминацией становится сам праздник с головокружительным шоу на ступеньках
и разрезанием праздничного торта.
Не удивительно, что на таком факультете Московского государственного университета, как факультет вычислительной математики и кибернетики,
есть много талантливых и инициативных студентов. Однако все их идеи
не смогли бы реализоваться, если бы
у нас не было такого отзывчивого профессорско-преподавательского
состава и администрации, которые всегда готовы помочь, дать дельный совет
и даже принять участие в студенческих
инициативах. EOF
WEB: cs.msu.ru – сайт факультета, vmk-edu.ru – подготовительные и компьютерные курсы
Телефоны: (495) 932-9808 – подготовительные курсы, (495) 939-5429/3604 – компьютерные курсы
системный администратор ноябрь 2015
73
Карьера/Образование
рейтинг
Визитка
ИГОРЬ ШТОМПЕЛЬ, инженер, системный администратор.
Сфера профессиональных интересов – свободное ПО,
keepercoder@gmail.com
Образование в сети:
программирование на C++
ИТ бурно развиваются. Появляются новые языки, порой для узких задач,
отражающие процесс нарастающего усложнения ИТ. Но есть и такие, положение
которых незыблемо уже не один десяток лет. Речь идет о C++. Начать освоение
его мы предлагаем, воспользовавшись нашим рейтингом
Участники рейтинга
Программирование
> Авторы: В. Борисенко (к.ф-м.н., старший научный сотрудник кафедры теоретической информатики отделения
математики механико-математического факультета МГУ
им. М.В. Ломоносова, http://istina.msu.ru/profile/vladimir_
borisenko, http://math.msu.su/~vvb)
> Учебное заведение: ИНТУИТ (http://intuit.ru)
> Специальность: программист
> Лекции: 163 лекции
> Материалы: видео
> Уровень сложности: специалисты
> Сертификат: да
> Адрес: http://www.intuit.ru/studies/courses/13869/1266/info
Программирование на языке С++ в среде Qt Creator
> Авторы: Е. Алексеев (к.т.н, доцент, профессор кафедры
прикладной математики и информатики Вятского государственного университета, г. Киров),
Г. Злобин (к.т.н., доцент кафедры радиофизики и компьютерных технологий Львовского национального университета им. И. Франко),
Д. Костюк (к.т.н., доцент кафедры электронных вычислительных машин и систем Брестского государственного
технического университета),
О. Чеснокова (старший преподаватель кафедры «Вычислительная математика и программирование» Донецкого национального технического университета),
А. Чмыхало (выпускник факультета электроники Львовского национального университета им. И. Франко), http://
freeschool.altlinux.ru/?p=5212
> Учебное заведение: ИНТУИТ (http://intuit.ru)
> Специальность: программист
> Лекции: 15 лекций
> Материалы: текст
> Уровень сложности: специалисты
> Сертификат: да
> Адрес: http://www.intuit.ru/studies/courses/3479/721/info
74
Основы C++, первый семестр
> Авторы: Е. Линский (к.т.н., доцент кафедры комплексной защиты информации СПб ГУАП (ЛИАП), https://www.
lektorium.tv/speaker/2936)
> Учебное заведение: Лекториум (http://lektorium.tv)
> Специальность: программист
> Лекции: 12 лекций
> Материалы: видео
> Уровень сложности: специалисты
> Сертификат: нет
> Адрес: https://www.lektorium.tv/course/22825; https://www.
youtube.com/playlist?list=PL-_cKNuVAYAUbiaTl7HeFTcG0ghilVrYA
Основы C++, второй семестр
> Авторы: Е. Линский (к.т.н., доцент кафедры комплексной защиты информации СПб ГУАП (ЛИАП), https://www.
lektorium.tv/speaker/2936)
> Учебное заведение: Лекториум (http://lektorium.tv)
> Специальность: программист
> Лекции: 10 лекций
> Материалы: видео
> Уровень сложности: специалисты
> Сертификат: нет
> Адрес: https://www.lektorium.tv/course/22858; https://www.
youtube.com/playlist?list=PL-_cKNuVAYAWx8lq9HICEj4Km01V_
ZV6h
C/C++
> Авторы: А. Петров (ассистент кафедры «Информационные системы и телекоммуникации» Московского государственного технического университета (МГТУ) им. Н.Э.
Баумана, http://school.system-analysis.ru/aleksey-petrov)
> Учебное заведение: Технопарк Mail.Ru (https://park.mail.ru)
> Специальность: программист
> Лекции: 9 лекций
> Материалы: видео
> Уровень сложности: специалисты
> Сертификат: нет
> Адрес: https://park.mail.ru/materials/video/#3
ноябрь 2015 системный администратор
рейтинг
Наш подход
Для сравнения курсов мы определили несколько параметров. А именно следующие: интерфейс, содержание, иллюстративный материал, сертификация. Каждый из параметров предполагает присвоение оценки (от 1 до 5), а также
имеет свой вес (от 1 до 5). Умножение оценки параметра
на его вес дает итоговый балл. Сумма итоговых баллов всех
параметров определяет место в рейтинге.
Стоит отметить, что максимальный вес мы присвоили
только параметру «содержание» – 5. На балл ниже был оценен параметр «интерфейс» – 4. А два оставшихся параметра – «иллюстративный материал» и «сертификация» – получили оценку 3.
Программирование
Курс «Программирование» (см. рис. 1) был создан на механико-математическом факультете МГУ им. Ломоносова
и включает в себя двадцать больших глав. Каждая из глав посвящена той или иной проблеме и состоит из нескольких лекций. А всего, как мы указали выше, их 163, что является «рекордным» количеством для нашего рейтинга, как текущего,
так и предыдущих. Предлагаются лекции, которые не ограничиваются лишь теоретическим описанием, но подробно
рассматриваются и программная составляющая, ее использование, необходимая для создания базовых программ на C/
C++. Таким образом, теория органично перемежается в курсе с практикой, практическими примерами. Курс ориентирован на студентов и преподавателей вузов.
Содержание лекций ориентировано на обучение основам
программирования на C/C++. Но отмечается, что будет полезно «студентам и преподавателям вузов». Действительно,
автор начинает с того, что рассказывает о преподавании
Карьера/Образование
программирования на механико-математическом факультете МГУ им. Ломоносова, а также соотношении материала
курса с последним. Слушатели начнут свое погружение в мир
C/C++ с аппаратных основ – архитектура Фон-Неймана, ассемблера и основ C до работы с матрицами в этих языках
и численных методов (интерполяция функций многочленами, вычисление определенных интегралов).
Получив представление об основах С, слушатели смогут перейти к изучению в C/C++, работы с целыми числами.
Стоит отметить, что автор много внимания уделяет алгоритмам. Вот, например, после главы, посвященной работе
с целыми числами, предлагается рассмотреть алгоритм Евклида, а затем перейти к исследованию массивов и указателей (здесь же речь идет о стековой памяти и аппаратном
стеке), их реализации. После этого становится возможным
обратить пристальное внимание и на виды памяти и соответствующие два стиля программирования (использование
массивов или указателей).
В целом в лекциях можно обнаружить всю необходимую
базовую информацию для знакомства с C/C++. Это и сложные типы C, и индуктивные функции, циклы, поиск и сортировка (последней уделено шесть глав), массивы. Интересна
составляющая курса – представление чисел в компьютере
(целых, вещественных) и особенности работы с ними. Тема
представления чисел рассмотрена достаточно подробно –
три главы. Две последние главы затрагивают математические аспекты. Одна посвящена работе с матрицами в C/C++
и численным методам (интерполяция функций многочленами, вычисление определенных интегралов).
Максимальный балл получает интерфейс портала Intuit.ru.
Он прост, понятен и удобен. Два воспроизведения лекций
используются свой движок и плеер, на нем основанный.
Рисунок 1. Курс «Программирование»
системный администратор ноябрь 2015
75
Карьера/Образование
рейтинг
Он позволяет воспроизводить видео с разным разрешением (от 480 pуб. до 1920 pуб. – прогрессивный формат
HDTV) [1]. Кроме того, интерфейс воспроизведения видео
позволяет управлять громкостью, показывает время воспроизведения, раскрытие на весь экран. Интерфейс позволяет перейти на любое место видео. Но, к сожалению, лекции
курса не снабжены аннотацией и кратким описанием.
Иллюстративный материал к курсу отсутствует. А вот тестирование доступно, но, к сожалению, максимальной балл
оно не получает. Хотя возможность получить сертификат
В рамках Академии ALT Linux на портале Интернет-Университета Информационных Технологий, как показано
на рис. 2, стал доступен курс с названием «Программирование на языке С++ в среде Qt Creator» [2]. Он имеет две
особенности. Во-первых, он не требует знакомства с программированием для успешного усвоения материалов лекций, во-вторых, он основан на среде разработки Qt Creator.
Эта среда является кроссплатформенной, позволяет создавать визуальные приложения. И, кроме того, в отличие
от всех остальных рейтингов курса этот – текстовый. Таким
образом, кроме знакомства с алгоритмизацией, программированием, слушатели получают представление о работе с Qt Creator, редактором Geany, библиотекой MathGL
(кроссплатформенная). То есть, с одной стороны, слушатели учатся программированию на C++, а с другой, исследуют
создание визуальных приложений в Qt Creator.
Авторы начинают со знакомства с C++. В частности, показывается программа, которая позволяет находить площадь и периметр прямоугольника. Она дает возможность
ознакомиться со структурой программы на C++. Кроме
того, дается представление об основных этапах перевода
в машинный код программы на C++. А завершается первая
лекция знакомством с интерфейсом Qt Creator, созданием
консольного приложения, его сборкой и запуском.
Вторая лекция целиком посвящена основам языка программирования C++: алфавит, переменные, константы,
типы данных, основные операции, стандартные функции,
средства ввода-вывода и т.п. В последующих лекциях продолжается знакомство с языком и затрагиваются такие
темы, как операторы управления, функции, массивы, статические и динамические матрицы, организация ввода-вывода
в C++, строки, структуры.
Изучение ООП начинается в 10-й лекции. Именно в ней
слушатели получат информацию о парадигме ООП, классах, объектах, создании и удалении объектов, шаблонах
классов и т.п. После этого авторы переходят к знакомству
с библиотекой Qt. Уделяется внимание ее истории, политике лицензирования, настройке. Далее слушатели узнают о структуре проекта Qt, особенностях компиляции Qtпроекта, классах Qt.
Таблица 1. Рейтинг курса «Программирование»
Таблица 2. Рейтинг курса «Программирование на языке С++ в среде Qt Creator»
Лекции ИНТУИТ снабжены
большим количеством
рисунков, таблиц, графиков,
блок-схем алгоритмов,
а формулы выделены особо
и вставлены в текст в виде
рисунков
после прохождения тестирования имеется. Но в ИТ-секторе
широкого признания данные сертификаты пока не получили. Это скорее свидетельство самомотивации его обладателя на профессиональное развитие, свидетельство того,
что он способен самообучаться в заданные сроки.
Программирование на языке С++
в среде Qt Creator
Оценка
Содержание
Коэффициент
«Содержание» (С)
5
Итоговый
балл
Оценка
Коэффициент
«Содержание» (С)
Итоговый
балл
5
25
Содержание
5
5
25
Интерфейс
5
4
20
Иллюстративный
материал
5
3
15
Сертификация
4
3
Интерфейс
5
4
20
Иллюстративный
материал
0
3
0
Сертификация
4
3
12
57
Таблица 3. Рейтинг курса «Основы C++, первый семестр»
Оценка
12
72
Таблица 4. Рейтинг курса «Основы C++, второй семестр»
Коэффициент
«Содержание» (С)
Итоговый
балл
Оценка
Коэффициент
«Содержание» (С)
Итоговый
балл
Содержание
5
5
25
Содержание
5
5
25
Интерфейс
5
4
20
Интерфейс
5
4
20
Иллюстративный
материал
0
3
0
Иллюстративный
материал
0
3
0
Сертификация
0
3
0
Сертификация
0
3
45
76
0
45
ноябрь 2015 системный администратор
рейтинг
После чего будет предложено освоить общие вопросы
создания графического интерфейса с помощью инструментария Qt. Здесь, конечно, активно привлекается среда
Qt Creator для иллюстрации и реализации изучаемых примеров.
15-я лекция предлагает информацию о собственных
классах Qt (например, QObject, QMouseEvent, QKeyEvent
и др.) и о создании элементов графических интерфейсов.
Соответственно, после изучения основ создания графического интерфейса и его элементов средствами Qt авторы
предлагают ознакомиться с разработкой программ с графическим интерфейсом. Изложение материала построено
на базе использования виджетов Qt.
В дополнение к лекциям курса авторы подготовили дополнительные материалы. Они посвящены редактору Geany
и компилятору командной строки, основам библиотеки
MathGL (установка, построение двухмерных и трехмерных
графиков).
Несколько слов об интерфейсе текстовых курсов ИНТУИТ. Все необходимые возможности доступны. Это и переход
на любую лекцию из текущей, и по гиперссылкам, и к упоминающемуся рисунку по ссылке (а сами ссылки выделены
цветом). Таким образом, навигация по курсу удобна, проста.
Это максимальный балл, с учетом того, что речь идет о текстовом курсе.
Что касается иллюстративной части, нельзя не отметить,
что лекции снабжены большим количеством рисунков, таблиц, графиков, блок-схем алгоритмов, а формулы выделены особо и вставлены в текст в виде рисунков. Это также
максимальный балл.
О статусе сертификации от Интернет-Университета Информационных Технологий мы уже сказали выше. Поэтому
Карьера/Образование
не будем объяснять, почему за сертификации балл ниже
максимального.
Основы C++, первый семестр
Расширить свое представление о C++ позволяет данный
курс, который стал доступен на портале проекта Лекториум. Он содержит много практической информации, снабжен
массой примеров, которые призваны помочь в освоении материала. Будет полезен начинающим, желающим повысить
свои знания о языке программирования C++.
Курс «Основы C++» будет
полезен начинающим,
желающим повысить
свои знания о языке
программирования C++
В целом условно курс можно разделить на две части: базовая (лекции 1-5) и ООП (лекции 5-12). Лекции начинаются с рассмотрения компиляции и линковки, соответственно
и с программ, состоящих из нескольких файлов. Отдельное
внимание уделено утилите make. В рамках базовой части,
далее предлагается изучить указатели, ссылки, глобальную
память, стек, кучу. Кроме того, отдельное внимание – динамическому выделению памяти. Завершается базовая часть
обзором стандартной библиотеки языка C. И в этой же лекции рассматривается то, для чего необходимо изучать объектно-ориентированное программирование (далее – ООП).
Рисунок 2. Курс «Программирование на языке С++ в среде Qt Creator»
системный администратор ноябрь 2015
77
Карьера/Образование
Слушатели начнут изучение ООП на базе С++ со знакомства с инкапсуляцией, рассмотрят конструктор копий
и ключевые слова const, enum, typedef, static, inline, а также
структуры. А также до перехода к изучению наследования
автор предлагает исследовать выделение объектов в куче,
декомпозицию программы на части и умные указатели.
Завершают курс две лекции, в которых дается представление о наследовании и полиморфизме.
Видеокурс «C/C++» может
стать хорошим подспорьем
для тех, кто интересуется
вопросами углубленного
программирования на C++
Курс доступен на двух порталах: собственно Lektorium.tv
и канале Youtube.com. Но это условно, так как на портале
Lektorium.tv доступен не его движок для воспроизведения
видео, а просто интегрировано видео с Youtube.com. О преимуществах воспроизведения видео на этом портале нет необходимости говорить.
Отметим следующее: на Youtube.com курс доступен
в виде плейлиста, что позволяет при просмотре той или иной
лекции перейти на любую необходимую. Таким образом,
автор в полном объеме использует один из факторов успеха онлайн-курсов, а именно удобный интерфейс, который,
в свою очередь, способствует хорошему восприятию учебных материалов.
рейтинг
Соответственно, максимальный балл в этом рейтинге получает и интерфейс портала Youtube.com.
Иллюстративный материал отсутствует, как и недоступно
получение сертификата.
Основы C++, второй семестр
Курс является продолжением предыдущего. Он также содержит много практической информации и массу примеров.
Соответственно, если слушатели успешно закончат изучение первой части, то им есть смысл продолжить и освоение
второй части.
Автор начинает с приведения типов, константного объекта и указателя на функции. Далее слушатели познакомятся с шаблонами, вложенными классами, пространством
имен, а затем им предлагается перейти к освоению Standard
Template Library (STL, Стандартная библиотека шаблонов).
В рамках STL исследуются последовательные контейнеры (vector, deque, list, string) и ассоциативные контейнеры
(set, multiset, map, multimap). Кроме того, уделено внимание
итераторам и функторам.
В заключительных лекциях уделяется внимание использованию XML, исключениям, приведению типов в стиле языка программирования C, вводу-выводу в STL, перегрузке
операторов, MVC (Model-View-Controller), Boost и др.
Все, что сказали об интерфейсе, иллюстрациях и сертификации для первой части курса, справедливо и для второй
части.
C/C++
Видеокурс от совместного проекта МГТУ им. Н. Э. Баумана
и Mail.Ru Group, который получил простое название «Технопарк».
Рисунок 3. Курс «Основы C++, второй семестр»
78
ноябрь 2015 системный администратор
Карьера/Образование
рейтинг
Слушатели смогут познакомиться не только с программированием на C++, но и с разработкой архитектуры
или дизайна. Другими словами, будут учиться проектированию для C++ (см. рис. 3).
Начать слушателям предлагается в лучших традициях –
с цели, задач, структуры курса. Затем внимание уделяется
языку программирования С и основам организации оперативной и сверхоперативной памяти в соответствующих
программах. В частности, затрагиваются такие проблемы,
как место С в промышленной разработке, новшества С11,
препроцессорная обработка, управление памятью и производительность кода, оперативная и сверхоперативная
память (физическая и логическая организация), указатели,
одномерные массивы, строки и т.п.
К дополнительным вопросам организации и использования оперативной и сверхоперативной памяти в программах
на С автор отнес такие вопросы, как многомерные массивы, выравнивание и упаковка переменных составных типов,
взаимодействие с операционной системой и др.
Следующие две лекции посвящены специальным вопросам инкапсуляции, наследования и полиморфизма.
В их рамках поставлены и раскрыты такие проблемы,
как определение и состав класса, члены класса и указатели на них, вложенные типы, конструкции и операции переноса, раннее и позднее связывание, перегрузка и перекрытие членов класса, виртуальные функции, абстрактные
классы и т.п.
Еще одна лекция, которая предваряет рассмотрение библиотек, посвящена шаблонам классов и методов, обработке исключительных ситуаций, обобщенному и безопасному
программированию.
Библиотеки, которые исследуются автором, – STL и Boost.
Стоит отметить, что дается представление о новшествах
C11 применительно к STL, а среди тем, к ней относящихся,
были затронуты итераторы, контейнеры, адаптеры и др. Кроме того, уделено внимание функциональному программированию в рамках C++. Так, например, автор дает представление о параметризации алгоритмов STL лямбда-функциями
и применении замыканий. Что касается Boost, то слушатели
узнают о ее составе и назначении, познакомятся с примерами использования, а также узнают, как можно с ее помощью
повысить производительность и безопасность кода.
Завершает курс информация о принципах и шаблонах
объектно-ориентированного проектирования, идиоматике
C++, основах рефакторинга и качества исходного кода,
стандартах кодирования и методологии разработки.
Видео лекций размещено на портале Youtube.com, на сайте проекта Технопарк оно встроенное. Соответственно,
Таблица 5. Рейтинг курса «C/C++»
интерфейс курса получает максимальный балл. Кроме того,
стоит отметить, что все лекции снабжены аннотациями.
Презентации к лекциям не прилагаются. Иллюстративный материал отсутствует. Также отсутствует возможность
получения сертификата.
Победитель – текстовый курс,
снабженный разнообразным
иллюстративным материалом,
а также возможностью
получения сертификата
Курс может стать хорошим подспорьем для тех, кто интересуется вопросами углубленного программированием
на C++. Начинать знакомство с программированием вообще и с программированием на C/C++ в частности с этого
курса не стоит. А вот расширить свои познания в области
разработки и проектирования на основе языка программирования C++ можно.
Итак, с большим отрывом в рейтинге побеждает курс Академии ALT Linux, за ним – курс от ИНТУИТ. А вот места с третьего по пятое поделили три оставшихся курса. Результаты
требуют пояснений.
Победитель – текстовый курс, но он, помимо хорошего
содержания и удобного интерфейса, как и все курсы, снабжен хорошим и разнообразным иллюстративным материалом, а также предлагает возможность получения сертификата в случае успешного освоения.
Курс «Программирование», занявший второе место,
также предлагает возможность получения сертификата,
но не снабжен иллюстративным материалом.
А все остальные курсы не имеют ни иллюстративной составляющей (дополнительной к видеолекциям), ни возможности получения сертификата.
Стоит отметить, что лидер рейтинга не набрал абсолютное количество баллов, так как сертификация не получила
высший балл. EOF
[1] Статья в Википедии, посвященная Full HD – https://
ru.wikipedia.org/wiki/Full_HD.
[2] Академия ALT Linux на портале Intuit.ru – http://www.intuit.ru/
academies/companiesn/224/info.
Таблица 6. Итоговый рейтинг курсов
Оценка
Коэффициент
«Содержание» (С)
Итоговый
балл
Курс
Итоговый
балл
Содержание
5
5
25
Программирование на языке С++ в среде Qt Creator
72
Интерфейс
5
4
20
Программирование
57
Иллюстративный
материал
0
3
0
Основы C++, первый семестр
45
Основы C++, второй семестр
45
С/C++
45
Сертификация
0
3
0
45
системный администратор ноябрь 2015
79
Карьера/Образование
рынок труда
Вакансия: программист под OS X
Рынок десктопов в последнее время лихорадит, но настольные системы от Apple,
работающие под управлением OS Х, пользуются неизменной популярностью. В России
ниша разработчиков под эту систему уже, чем для Unix/Linux, но хорошие специалисты
без работы не останутся. Итак, что хотят работодатели?
1. Какими знаниями и навыками должен обладать программист под OS X?
2. Каков инструментарий программиста под OS X?
3. Требования компании к уровню образования потенциальных сотрудников?
4. Какие требования предъявляются к опыту работы?
5. Требования, которые обусловлены спецификой деятельности компании?
Александр Владимирович Серков,
инженер-программист (OS X), ООО «Доктор Веб»
1
Примерно такими же, как и любой другой программист
для любой другой платформы/области, – он должен
знать инструментарий, с которым работает, и уметь его использовать. А также не помешает умение обучаться и находить ответы на неожиданные вопросы в приемлемые сроки.
В дополнение ко всему этому хорошо бы еще знать язык
программирования Objective-C (если писать что-то, связанное с GUI, то без Objective-C пока скорее всего не обойтись,
да и часто некоторые системные вещи требуют знания этого
языка) и иметь представление о наиболее важных библиотеках (фреймворках), являющихся частью этой операционной
системы. О системах контроля версий, коммуникабельности
и умении работать в команде говорить не буду.
Разнообразный. OS X – это более-менее современная и быстро развивающаяся ОС, и для нее подходит
почти весь инструментарий, доступный для других *nix-like
(и не очень) операционных систем. Но все же Objective-C,
сопутствующие фреймворки и Хсode (IDE для OS X от Apple)
пока являются «главным» инструментом для разработчика (Swift еще скорее всего все же игрушка, но в перспективе...). И, конечно, С/С++. Многое в OS X написано
на этих языках, даже если имеет «официальный» интерфейс на Objective-C.
Особенных требований именно к образованию у нас
нет. Мы считаем, что для сотрудника больше важны
знания и опыт. Но, насколько я знаю, большинство сотрудников нашей компании все-таки имеют высшее образование.
Насколько я знаю, от трех лет. Однако реально уровень опыта, как мы считаем, все-таки определяется
не годами, а выполненными проектами/задачами, их сложностью и величиной.
Да, конечно. Мы же компания, занимающаяся информационной безопасностью. Поэтому для нас
очень важна внимательность к мелочам, умение писать
2
3
4
5
80
стабильный, читабельный и безопасный код. Умение читать
и понимать чужой код тоже не будет лишним. И, конечно,
в принципе важен большой кругозор – человек должен
не просто знать, как работают те или иные подсистемы
той или иной ОС, но и понимать их принципы работы, понимать то, как они связаны между собой, как взаимодействуют. И как на эти подсистемы влияет пользовательский код,
или, наоборот, как подсистемы влияют. В общем, человек
должен представлять себе, как работают современные программы. От самого низкого уровня до самого высокого.
Виктор Брыскин, Senior iOS Developer, Comindware
Полина Семенюк, HR-менеджер, Comindware
1
В.Б.: Разработчик под OS X (сейчас операционная система называется именно так) не сильно отличается
от любого другого разработчика, и особых специфических
требований здесь практически нет. Разница только в инструментарии и API.
Абсолютно точно необходимо знание языков и фреймворков, которые применяются на платформе, – в основном
из языков это Objective-C. Сейчас, впрочем, набирает популярность Swift, на котором также можно вести разработку. Нелишним будет и знание С++, умение писать на этом
языке очень помогает сделать жизнь разработчика проще,
в связи с тем, что Objective-C – очень старый язык, лишь
в последнее время начавший активно развиваться, и многие вещи проще писать на С++. С другой стороны, система
ООП и ObjC Runtime, применяющаяся в Objective-C, позволяет очень просто писать довольно сложно реализуемые
на других языках вещи.
В решении задач очень помогают навыки автоматизации
с использованием скриптовых языков – это Shell, Python
или Ruby.
Естественно, нужно понимать специфику OS X в плане распространения и развертывания приложений. В ОС
встроен магазин приложений, которым можно и нужно пользоваться.
ноябрь 2015 системный администратор
Карьера/Образование
рынок труда
2
В.Б.: Основная среда разработки – это, конечно же,
IDE Xcode, но возможны и альтернативы, например,
AppCode от JetBrains. Этого вполне достаточно для того,
чтобы разрабатывать приложения – в Xcode встроены и инструменты разработчика для профилировки приложений
и даже клиент системы контроля версий, поддерживающий
SVN и Git. Однако большинство разработчиков пользуются
внешними Git-клиентами, выбор которых – вопрос привычки
и дело вкуса.
П.С.: Мы ищем людей с высшим образованием. Более
того, у нас есть сотрудники, которые продолжают образование, например, учатся в аспирантуре. Мы рады, когда
наши сотрудники продолжают совершенствоваться в профессиональном плане, и поддерживаем их в этом.
П.С.: Наш подход не кардинально отличается от других
компаний на рынке, для Comindware важно, чтобы сотрудник имел опыт работы в данной отрасли не менее трех
лет. Для нас также очень важно, чтобы сотрудник стабильно
работал на предыдущих местах, а не менял работу несколько раз в течение года.
П.С.: Каких-то особых требований, связанных именно
с нашей компанией, нет. Одновременно есть ряд технических требований, которые для нас важны, а именно:
> Уверенное владение Objective-C, iOS Guidlines
> Cocoa Pods, Frameworks, static libraries
> Знание шаблонов проектирования и принципов SOLID
> Знание ARC и MRC
> Multithreading, GCD
3
4
5
Павел Морозов, главный OS X-разработчик, Paragon
Software Group/mobile applications (www.slovoed.com)
1
В первую очередь любой сотрудник, вовлеченный
в создание программного обеспечения для OS X, должен быть убежденным пользователем этой операционной
системы, особенно программист. Революционные идеи
Apple и их воплощение в действительность в виде готовых продуктов являются примером для подражания даже
у конкурентов. Именно поэтому качественное приложение
для OS X должно соответствовать фирменному стилю Apple.
Основой такого соответствия является доскональное владение принципами создания идеальных приложений для OS X,
изложенными в библии разработчиков, известной под названием OS X Human Interface Guidelines.
Естественно, разработчик должен уверенно владеть языком Objective-C и как минимум иметь представление о стремительно набирающем популярность языке Swift.
Очень важен также и общий кругозор в смежных областях, особенно в веб-технологиях.
Крайне приветствуется знание одного или более скриптовых языков, подобных Perl/Python/Ruby/PHP/Bash/Apple
Script.
Основным средством разработки является Xcode с сопутствующими инструментами. Альтернативные IDE,
такие как AppCode, у нас также в ходу, как и просто различные тестовые редакторы. Для коллективной работы и обмена информацией используется Redmine.
Идеальный кандидат – это специалист с высшим техническим образованием и двумя-тремя годами опыта программирования для Mac OS X или iOS.
2
3, 4
системный администратор ноябрь 2015
Тем не менее соискатели, еще не окончившие вуз, также могут нас заинтересовать. Несомненным плюсом будет дополнительное образование в виде профильных спецкурсов, наличие успешных продуктов в App Store и активность в Open
Source-сообществах.
Из специфичных требований заслуживает упоминания
способность программиста работать в многозадачном
режиме. Как правило, сотруднику приходится одновременно работать над несколькими проектами, быстро переключаясь между ними, когда очередная задача уходит на другие
этапы жизненного цикла или возвращается обратно в девелопмент.
5
Владимир Кукушкин, Mac Applications Development
Group Manager, «Лаборатория Касперского»
1
2
Программист под OS X ничем не отличается от любого
другого программиста – прежде всего он должен уметь
объяснить программе, что она должна сделать.
Для того чтобы начать разработку приложений под OS
X, помимо наличия устройства с этой операционной
системой, нужно скачать из Mac App Store среду разработки – Xcode. Для большинства задач этого будет достаточно. Плюс под OS X встречаются реализации инструментов,
знакомых по разработке под другие платформы, например,
можно использовать vim, cmake, Qt, клиенты для всевозможных систем контроля версий. В составе Xcode для отладки
есть lldb, а для профилирования – Instruments.
Такие же, как и к любому другому программисту. Несомненным плюсом будет прохождение курсов в онлайн-университетах, где можно найти тематические курсы
по разработке под платформы Apple. Но нужно понимать,
что такие курсы – никак не замена фундаментальному техническому образованию.
Опять же – такие же, как и у всех. Но есть один нюанс.
В случае с разработкой, не связанной непосредственно с OS X, ее специфичными функциями или GUI, бывает
очень ценен опыт разработки под Unix, ведь OS X – под капотом это тот же Unix.
«Лаборатория Касперского» – большая компания
с большим количеством продуктов, выпускаемых
для разных платформ. Нужно быть готовым к тому, что большая часть кода и технических решений (например, антивирусный движок) используется на трех-четырех платформах,
и об этом нужно всегда помнить. Соответственно, и большая
часть кода не имеет непосредственного отношения к OS X.
3
4
5
Дмитрий Обухов, основатель и разработчик,
Wirelessheads
1
Хоть я и не люблю узкую специализацию и сам термин
«программист под OS X», но, на мой взгляд, человек, который разрабатывает приложения под платформы от Apple,
должен действительно обладать неким набором навыков,
которые, по большому счету, к программированию не имеют отношения. Во-первых, он должен разбираться в проектировании интерфейса. Многие считают, что интерфейсом
должен заниматься дизайнер (и это так и есть), но на практике, если человек, который пишет код, не интересуется
интерфейсами или не имеет «чувства прекрасного», проект
81
Карьера/Образование
ждут большие проблемы. Во-вторых, OS X быстро развивается как со стороны Apple, так и со стороны комьюнити, появляются новые фреймворки и даже языки – за всем этим
нужно успевать следить, нужно быть на острие технологий,
и без большого вовлечения здесь не получится. И, наконец,
разработчик под OS X должен быть и разработчиком под iOS
(обратное – не верно). Так получается, что все новые технологии и практики появляются сначала на iOS, их необходимо
перенимать и использовать на маке.
Xcode (IDE от Apple, бесплатное и есть все необходимое), CocoaPods (менеджер зависимостей), Sketch (векторный графический редактор). Все остальное опционально.
Не думаю, что компании предъявляют какие-то требования к образованию. Во-первых, в России разработчиков не учат, во-вторых, на рынке сейчас дефицит специалистов. В любой профессии основную роль играет опыт,
разработчики не исключение, скорее даже наоборот, опыт –
основной показатель.
Требования очень разные, и, если говорить об OS X,
очень часто сотрудников приглашают развивать или поддерживать существующий продукт. Часто этот продукт портирован с другой платформы и написан на C/C++, поэтому
в описании вакансии можно увидеть требования знания C++.
Что касается моих требований, основной показатель
для меня – это наличие законченных коммерческих продуктов, не обязательно даже под OS X. Я считаю, что технические знания приобретаются быстро, но их не всегда бывает
достаточно.
Разработчик должен быть погружен в специфику деятельности компании. Если компания занимается, например, разработкой бизнес-приложений или банковских
систем, разработчик должен понимать, как работают с этими системами, какие задачи они решают.
Бывает, что компания использует какие-то специфичные
технологии при разработке, эти технологии также могут появиться в требованиях к кандидату.
2
3
4
5
Алексей Цымлов, Senior Software Developer, Hyperboloid
1
Главное, чтобы глаза горели. Если выбирать кандидатов по их знаниям, то нужно быть готовым уволить их,
когда эти знания устареют, а устаревают они очень быстро.
Если человеку интересно то, чем он занимается, он всегда
будет в курсе последних технологий и стремиться к расширению своих знаний.
Говоря о стеке технологий Apple, очень важно понимать,
что без знания английского никуда. Информации на русском
языке в этой области очень мало, и, как правило, большая
часть ее уже устарела. Технологии развиваются настолько
быстро, что даже источники на английском языке появляются спустя несколько месяцев после презентации какой-либо
новой фичи. Представьте, сколько времени пройдет, пока
эта информация будет переведена на русский язык каким-нибудь энтузиастом, который нашел возможность в свободное
от работы время это сделать. Книги публикуются в лучшем
случае спустя год, а то и несколько лет. От знания английского языка зависит, насколько быстро ты окажешься в теме.
Конечно, базисом является знание языка программирования. У Apple с недавнего времени два языка, на которых ведется разработка, – Objective-C и Swift. Swift пришел
82
рынок труда
на замену Objective-C и со временем займет его место
полностью. Уже сейчас Apple активно переписывает свои
фреймворки на Swift, и большинство примеров, которые
можно встретить в интернете, приводятся на Swift. Поэтому
для тех, кто только начинает, нет смысла вкладывать свое
время в технологию, которая завтра окажется невостребованной, и лучше начать с изучения современного, уже ставшего популярным языка Swift.
В остальном необходимы, конечно, знание гайдлайнов,
понимание MVC, навыки использования основных фреймворков Foundation, Cocoa, AppKit, CoreData, CoreAnimation,
Quartz, умение работать со сторонними фреймворками, используя CocoaPods, и опыт подготовки приложения для публикации в App Store.
Основной инструмент – это среда разработки Xcode.
Хотя ребята из JetBrains сделали классную IDE под названием AppCode, но ее использование затрудняется пока
несколькими ограничениями. Со временем, я уверен,
эти проблемы будут решены, и мы получим мощнейший инструмент, такой же как IntelliJ IDEA и ReSharper. По крайней
мере я на это надеюсь и жду этого дня. Но пока основной
средой остается Xcode.
В качестве системы контроля версий используется Git.
Очень редко – Subversion.
Для трекинга задач нужно уметь работать с такими системами, как, например, Jira и Trello.
У нас в «Гиперболоиде» иногда бывает такое, что заказчик, для которого мы создаем приложение, настаивает
на использовании своей трекинговой системы. Если заказчик с громким именем и платит хорошие деньги, отказать
ему сложно. Поэтому разработчику приходится быть профессионалом и подстраиваться. В случае с крутыми заказчиками это даже приятно. Да и ничего сложного в этом нет.
Ситуация такова, что рынок перегрет предложениями работодателей. Российских разработчиков активно «хантят» из-за рубежа. Сказывается и курсовая разница – иностранные компании, имеющие валютный
оборот, могут предложить гораздо более существенную
компенсацию. Помимо этого, они предлагают помощь в релокации, аренду жилья на первые несколько месяцев, выплачиваются подъемные. Это очень заманчиво.
Но в то же время требуют подтверждения, что ты действительно профессионал. Дипломы российских вузов,
к сожалению, не рассматриваются как подтверждение квалификации. Поэтому нужно проходить техническое интервью и выполнять тестовые задания. Иногда такие интервью
затягиваются на три – пять часов. Тестовые задания могут
быть достаточно сложными и тоже рассчитаны на много
часов. Если на тест уходит больше пяти часов, то принято
оплачивать такую работу – правильные компании уважают
кандидатов и их время.
Разумеется, особенно ценятся специалисты, способные разрабатывать для нескольких платформ –
как для десктопов, так и для мобильных устройств.
Также учитывается то, насколько кандидат психологически вписывается в команду. Творческая и веселая атмосфера в компании очень важна. О способности к саморазвитию
я уже упомянул. Нужно любить то, что делаешь, и делать то,
что любишь.
2
3, 4
5
Подготовил Игорь Штомпель
ноябрь 2015 системный администратор
ретроспектива
Карьера/Образование
Визитка
ВЛАДИМИР ГАКОВ, писатель-фантаст, лектор. Окончил физфак МГУ. Работал в НИИ. С 1984 г. на творческой работе.
В 1990-1991 гг. – Associate Professor, Central Michigan University. С 2003 г. преподает в Академии народного хозяйства.
Автор 8 книг и более 1000 публикаций
Россия-ТВ. Made in USA
Часть 1
Шестого марта этого года для американского телекоммуникационного гиганта
American Telephone and Telegraph Corporation (которого вся страна и мир знают
под сокращенным именем – AT&T) «случилось страшное»...
эту самую реальность. Как и о том, что новое техническое
изобретение неизбежно воздвигнет невидимую стену между
«болями и слезами мира» и равнодушными потребителями
этой самой информации. Таким суперпровидцем, сам того
не ведая, оказался французский писатель и художник Альбер Робида, в романах которого (иллюстрированных автором) «Электрическая жизнь» (1883) и «Война в ХХ веке»
(1887) репортажи корреспондентов с полей сражений лишь
приятно щекочут нервы обывателям, комфортно развалившимся в домашних креслах. Знакомая картинка, не так ли?
Слово «телевидение» Робида не знал, хотя в немецком языке оно появилось в 1895 году: именно так назвал
еще не существовавшее техническое новшество инженер из Люксембурга Хьюго Гернсбек. Позже, эмигрировав
в США, он основал не только
первый в мире научно-фантастический журнал, но и несколько
научно-популярных. И в одном
До лампочки
из них, Modern Electrics, опублиВозможность видеть на далековал в 1909 году статью «Телекие расстояния – вероятно,
видение и телефот», посвященодно из самых заветных мечную пионерским экспериментам
таний человечества. Всякие
немецких ученых по фототрансчудо-зеркальца и магические
миссии. Так новое слово вошло
кристаллы, в которые можи в английский язык. А в русно рассмотреть то, что лежит
ский – даже раньше: на Парижза пределами возможностей
ской выставке 1903 года с ним
человеческого зрения, заполпознакомил коллег инженер
ра
лью телевизо
Джон Лоджи Бэйрд со своей моде
няли сказки и легенды разных
из России, преподаватель Канародов. А в конце позапрошлого
детского корпуса в Санкт-Петербурге Константин Перский.
века, когда мощно заработала «индустрия воображения» –
Но тогда, до появления и широкого применения электринаучная фантастика, ее читатель уже познакомился с таким
ческих ламп, говорить можно было лишь о «телевидении» мечудом техники следующего столетия, как домашний экран,
ханическом, у истоков которого стояли еще по меньшей мере
на котором потомки могли наблюдать события, происходивсемеро изобретателей, составивших – вместе с упомянутышие далеко за пределами их домов.
ми выше россиянами – своего рода инженерный «телеинНо только отдельные провидцы задумывались тогда
тернационал». Это были немцы Пауль Нипков, Фриц Шретер
о будущем, в котором «дальновидение» будет не только
и Манфред фон Арденн, шотландец Джон Лоджи Бэйрд, анбесстрастно доносить информацию об окружающей реальгличанин (позже перебравшийся в Штаты) Чарлз Дженкинс
ности до зрителя, но и значительной мере СОЗДАВАТЬ ее,
и американец Фило Фарнсуорт.
Автор всегда с должной иронией относился к ура-патриотическим изысканиям на благодатную (постоянно востребованную, а значит, денежную) тему «Россия – родина слонов».
Читатель со стажем, вероятно, помнит растиражированных
в советских СМИ «первого воздухоплавателя дьяка Крякутного», «изобретателя первого велосипеда Артамонова»
и прочих, как бы сегодня сказали, виртуальных персонажей.
Притом что и реальных соотечественников – пионеров в различных областях науки и техники – хватало с избытком. Как,
к примеру, в данном конкретном случае – истории телевидения. Сегодня никто не подвергнет сомнению, что у истоков
его стояли четверо россиян – Борис Розинг, Владимир Зворыкин, Дэвид Сарнов и Григорий Оглоблинский. Другое дело,
что первый из списка был забыт и сгинул у себя на родине,
а последние трое создали современное телевидение, увы,
вдали от нее…
системный администратор ноябрь 2015
83
Карьера/Образование
ретроспектива
Еще в 1883 году никому даже на родине не известследующего вещательная корпорация BBC начала регулярный 23-летний берлинский студент Пауль Нипков предложил
ные телепередачи, используя передатчики Бэйрда. И еще
одну из самых ранних схем механической телевизионной сисгод спустя британские торговцы радиоаппаратурой наперетемы, на базе которой создавались практически все последубой предлагали покупателям наборы телеприемников типа
ющие. Он даже запатентовал свое изобретение – «электриче«сделай сам».
ский телескоп для воспроизведения светящихся объектов».
А в том же 1928-м состоялась впечатляющая демонстрация изобретения еще одного пионера телевидения – переПоследний представлял собой вращающийся диск с отверстиями по спирали для разделения изображения на отдельбравшегося в Штаты англичанина Чарльза Дженкинса (1867ные элементы («диск Нипкова») – фактически первое ска1934). Его фирма Jenkins Laboratories презентовала особый
«радиопередатчик для фильмов» Radio Vision, после чего нанирующее устройство. После чего с помощью селенового
чались первые регулярные передачи «радиофильмов» на гоэлемента световые колебания превращались в электронный
сигнал, а тот распознавался с помощью аналогичного диска
рода Восточного побережья США. До этого Дженкинс изов «телеприемнике». Однако удалось ли самому автору изобрел собственную модель кинопроектора – «фантаскопа»,
бретения построить на его основе действующее устройство
а после ссоры с партнерами по бизнесу (причиной ссоры
по передаче изображений, доподлинно неизвестно. Нипков
стали споры вокруг авторских прав на изобретение) продал
получил должность конструктора в одим свою долю в проекте и переключился на телевидение. Но,
ном из берлинских институтов и болькак и в случае с Бэйрдом, меше к этой теме не возвращался.
ханическая в своей основе сисЗато его идеями удачно воспользовались другие. Так, в 1923 году затема передачи изображения
патентовал свою оптико-механичевскоре была вытеснена более
перспективной – электронной.
скую систему передачи изображений
Эта «электронная революс помощью синхронного вращения
ция» пришла в мир из далекой
сканирующих «дисков Нипкова»
России – вскоре после другой
шотландец Джон Лоджи Бэйрд (1888революции, социалистической.
1946). Он назвал свое изобретение
И была связана с именем еще од«телевизором», и это воистину был
ного эмигранта, обосновавшеготелевизор (в смысле – передатчик
ся в США, – Владимира Козьмича
изображения), а не современный
Зворыкина (1889-1982).
телеприемник. 25 марта 1925 года
Фило Фарнсуорт со своей моделью телевизора
Сын крупного муромского
Бэйрд продемонстрировал свой
купца, можно сказать, с раннего
прибор в одном из крупнейших лондонских универмагов – Selfridge’s. Но тогда не удалось додетства «вращался в научной среде». Его дядья, Николай
биться передачи полутонов, и на экране были видны лишь
Алексеевич и Константин Алексеевич Зворыкины, были видными учеными: первый – физиком и математиком, учеником
силуэты вместо лиц. Спустя год изобретатель сделал повторную попытку – на сей раз публика, присутствовавшая
знаменитого Столетова, второй – специалистом в области
машиностроения и металловедения, профессором Киевскона первом публичном телесеансе в истории, смогла увидеть
изображения, пусть по-прежнему нечеткие. И, наконец, еще
го политехнического института. После окончания реального
через два года неутомимый шотландец создал первую дейучилища в родном Муроме Владимир Зворыкин поступил
ствующую модель цветного телевизора – за 30 лет до его шив столичный университет, откуда перевелся в питерский же
рокого практического использования (в 1929 году экспериТехнологический институт, где познакомился с пионерскими
ментальная телевизионная передача в цвете была проведена
работами профессора Бориса Львовича Розинга (1889-1933)
и сотрудниками американской компании Bell).
по передаче изображений на расстояние. В 1907 году Розинг
первым в мире предложил использовать для этих целей элекЭлектроника из России
тронно-лучевую трубку. Уже в следующем году он начал эксОднако все приборы Бэйрда оставались системами механиперименты по передаче изображения с помощью катодной
ческими, и вскоре эта идея была признана тупиковой и оттрубки (так называемой трубки Брауна) и двух зеркальных
брошена за ненадобностью. Тем более что на американском
барабанов, а в 1911-м осуществил с помощью своей системы
рынке уже с успехом продавался полностью электронный
первую экспериментальную телепередачу. Метод Розинга
прибор – image dissector, сконструированный в 1927 году
был основан на яркостной модуляции луча от трубки Брауна
американским вундеркиндом из штата Юта 21-летним Фило
сигналом от фотоэлемента.
Фарнсуортом (1906-1971). Впечатляющая демонстрация перВ отличие от ряда коллег-соотечественников ученый не завого американского «телевизора» прошла в следующем году,
был запатентовать свое изобретение – и не только на родине,
и вскоре техническая новинка поступила в продажу. Правда,
но и в США, Англии и Германии, откуда в первую очередь следоступна она была немногим – прибор стоил $75, и тогда
довало ждать конкуренции. Однако в следующем десятилена эти деньги можно было купить много чего более полезного
тии и телевидение, и политические события в нашей стране
в хозяйстве, чем эта новомодная техническая игрушка.
развивались столь стремительно, что к концу 1920-х годов
о патенте Розинга все забыли. Как вычеркнули из Истории
Тем не менее жители Великобритании еще долго хранили верность «своему» Бэйрду. В 1928 году он провел первую
и фамилию самого ученого, умершего в архангельской ссылке в 1933-м.
трансатлантическую телевизионную передачу, а в сентябре
84
ноябрь 2015 системный администратор
ретроспектива
Карьера/Образование
Забыли все – за исключением, разве что, его бывшего
студента Владимира Зворыкина, который, по его собственным воспоминаниям, именно во время долгих бесед и споров с учителем окончательно утвердился в своей «ставке»
на электронные системы передачи изображений – вместо
активно разрабатывавшихся тогда механических.
Закончив с отличием институт, дипломированный инженер Зворыкин отправился продолжать свое образование
во Францию – в знаменитый парижский College de France.
Там его научным руководителем был известный физик Поль
Ланжевен. А когда началась Первая мировая война, вернулся
в Россию и ушел воевать. Сначала служил простым военным
связистом, а затем был направлен в офицерскую радиошколу – в частности, для освоения новейших средств молодой
тогда науки радиоэлектроники.
Между прочим, мир мог легко потерять и этого отца телевидения – вслед за его соотечественником-учителем Розингом. В разгар Гражданской войны по поручению адмирала
Колчака офицер-связист отправился в Америку – закупать
для Белой армии новейшее вооружение. А выполнив задание, решил все же вернуться в Сибирь –
почти на верную гибель. Но судьба миловала, в кровавой каше Зворыкин чудом
остался жив и в 1919-м эмигрировал окончательно. Туда же – в США.
истории. Это был Дэвид Сарнов (1891-1971), энтузиаст радио
и создатель первой в мире коммерческой радиокомпании
Radio Corporation of America (RCA). Одним из первых он разглядел огромные коммерческие перспективы и в рождавшемся на глазах телевидении. В 1926 году Сарнов добился
выделения в структуре корпорации нового подразделения,
которое сам и возглавил. Чуть позже оно превратится в первую же в мире телекомпанию National Broadcasting Company
(NBC). Впрочем, о Сарнове – и о «бизнесе на ТВ» в целом –
будет подробно рассказано во второй части данных «телехроник».
Историческая встреча двух «наших в Америке» – Сарнова
и Зворыкина – состоялась в 1928 году. На прямой вопрос,
сколько Зворыкину нужно для создания практичного и доступного рядовому потребителю телевизионного приемника, изобретатель, далекий от всех этих бизнес-планов, расценок на НИОКР и инвестиций, «от фонаря» назвал сумму
в $100 тыс. Сарнов тут же выписал чек. Дальнейшие эксперименты потребовали сумм куда больших, но RCA в лице
Сарнова, исправно и не торгуясь, финансировала все запросы Зворыкина. Ему построили лабораторию
в Питтсбурге, где в апреле 1929 года появился на свет и той же осенью был запатентован первый в мире практичный телеприемник – кинескоп с диагональю 9,5 дюйма.
сделать
последний
Оставалось
Русские идут! С телеками…
шаг – построить соответствующий переПрибыв в Америку, Зворыкин устроился
датчик. В этом Зворыкину помог еще один
на работу в уже хорошо известную элекэмигрант, Григорий Оглоблинский, работрическую компанию Westinghouse Electric.
тавший над той же проблемой, но уже в ПаМежду прочим, по рекомендации другого
риже. К сожалению, никаких подробностей
эмигранта из России, имя и фамилия кооб этом человеке, кроме его имени и фаторого тоже много говорят тем, кто хотя
милии по-английски (Gregory Ogloblinski),
бы вкратце знаком с историей главных
автор этой статьи в интернете отыскать
изобретений конца XIX – начала ХХ веков:
не смог. Известно лишь, что Зворыкин
Александра Лодыгина. Да-да, того самого –
разыскал его в Париже во время одного
изобретателя лампы накаливания, «провоиз своих европейских вояжей и от имени
Отец телевидения – Владимир Зворыкин
ронившего» свой патент, который был
Сарнова пригласил в Америку. Там они
подхвачен непревзойденным «патентным гевместе с небольшой группой сотрудников
нием» Томасом Эдисоном. Справедливости ради нужно скаRCA довели до ума идею передающего электронно-лучевого
зать, что американский изобретатель не «заимствовал» изоприбора с накоплением электрического заряда на мозаичных светочувствительных мишенях – иконоскопа (подроббретение русского коллеги, а усовершенствовал его, доведя
нее об этом приборе и истории его создания – см. статью
до нужных «рыночных кондиций»... Впрочем, это отдельная
история, важно лишь, что именно Лодыгин, перебравшийся
«Говорит и показывает…» / «Системный администратор»,
в Америку задолго до Зворыкина, рекомендовал коллегу-со№6, 2015 г.).
отечественника в вышеупомянутую компанию.
Телеполитпросвет
В Westinghouse Electric Зворыкин проработал почти десять
Однако самое интересное и во многом остающееся загадочлет, после чего всерьез задумался о «переходе на другую раным в биографии Зворыкина – это его контакты с коллегаботу». Известно, что русский инженер был «застукан» одним
ми на родине. В Советской России, с которой «купеческий
из руководителей компании за занятием не то, чтобы предосудительным, но определенно бесполезным, с точки зрения
сын», офицер царской, а затем колчаковской армии и белоэмигрант не просто поддерживал связь – даже дважды побосса. А именно – разглядывал на экране собранного им
непонятного прибора (понятна была лишь функция экрана
бывал в СССР! В первый раз – в 1930-х (как раз во времена
от обычного осциллографа) то появлявшееся, то исчезавБольшого террора!), а во второй – уже в разгар хрущевской
шее изображение латинской Х. Зворыкину настоятельно по«оттепели», в конце 1950-х.
советовали перестать заниматься «иксней», а «заняться чемЧто касается первого визита «классово чуждого элемента» в СССР, то тут руку приложил тот же Сарнов. Дело
то более полезным и перспективным».
было в 1934 году, компания RCA еще только-только создала
К счастью, работами Зворыкина, получившего свой перпервые опытные образцы телевизора, а неуемный босс Звовый патент в 1923 году, заинтересовался еще один эмигрант
рыкина уже был одержим идеей продвигать новую технику
из России – не первый и, обещаю, не последний в данной
системный администратор ноябрь 2015
85
Карьера/Образование
ретроспектива
на казавшийся необозримым советский «рынок». Благо прапод Винницей, Гитлер обвинял Геббельса в том, что он «провительство Рузвельта годом раньше установило дипломавалил важную политическую и пропагандистскую работу».
тические отношения с СССР. К тому времени и на родине
В отличие от системы тотальной радиопропаганды, созданной и успешно внедренной после прихода Гитлера
Зворыкина ведущие специалисты, занимавшиеся схожими
проблемами, – Сергей Векшинский, Леонид Кубецкий, Алекк власти. Уже в августе 1933 года на Берлинской выставке
широким массам был показан предшественник «народносандр Шорин и другие – настойчиво приглашали бывшего
го автомобиля» (Volkswagen) – «народный радиоприемник»
соотечественника прочитать серию лекций для советских
коллег. Зворыкину, за плечами которого были допросы в ЧК
VE 301 (Volksempfanger). Стоил он всего 76 рейхсмарок (цена
обычного радиоприемника тогда была в 3-6 раз выше), а вскои служба у Колчака, отправляться в СССР было, как говорится, стремно, но Сарнов его уговорил.
ре появился и еще более дешевый – за 35 марок, прозванный
И – обошлось. Американского гостя приняли тепло и рав народе «геббельсовой пастью». И уже к концу 1930-х годов
душно, показали Москву, Ленинна дверях радиофицированных пивных можно было увидеть
град, Тбилиси, сводили на «Дни
табличку с надписью: «Здесь
Турбиных» во МХАТ и, что мне
вы услышите речь фюрера».
представляется самым странным
К 1937-му в Германии было
и необъяснимым, обеспечили
около 8 миллионов зарегистрированных владельцев приемнимаксимальный контакт с коллегами – учеными и инженераков, то есть в среднем по одной
ми. Это в тридацатых-то годах,
радиоточке на 8-9 немцев.
Однако с запланированным
когда сажали и расстреливали
и за меньшее! А Зворыкин, отаналогичным тотальным телеохватом населения случилась
читав свои лекции, беспрепятзаминка. Хотя экспериментальственно вернулся в Америку, где
ные телепередачи начались
продолжил свою научную деятельность.
в Германии еще в 1929 году,
а производство серийных телеОн еще раз посетил Москву
в 1958 году, когда там, в парке
визионных приемников освоили
Телевизионная трансляция с открытия Олим
пийских игр в Берлине, 1936 г.
«Сокольники», начала свою распустя всего пять лет, к началу
боту первая Американская выВторой мировой войны мечта
ставка. Но тогда перед советскими людьми открылась такая
Гитлера так и не была осуществлена. Началась борьба между ведомством главного пропагандиста Геббельса и главного
Америка – во всех смыслах, – что явление видного ученогоавиатора Геринга, который заявил, что телевидение жизненэмигранта скорее всего просто не заметили – «зевнули» те,
но важно именно для ВВС и ПВО.
кому по роду службы зевать было не велено…
Затянувшаяся склока привела к тому, что упоминавшееся
Умер Владимир Зворыкин в 1982 году, когда телевидение
открытие Олимпиады смогли посмотреть лишь около 150 тыуже успело завоевать планету. И превратиться не только
сяч жителей Германии, причем половина из них – в специв мощное техническое средство информации, но и в не менее мощное средство политической пропаганды. И в мощный
альных телетеатрах и телезалах. А фюрер, которому нужны
бизнес, о котором речь пойдет во второй части наших «телебыли миллионные аудитории, по-прежнему появлялся перед
хроник».
нацией на экранах кинотеатров или выступал исключительно
Вообще данную техническую новинку признали на редпо радио.
кость быстро. В 1926 году не кто-нибудь, а выдающийся
Как бы то ни было, одной из первых телевизионных «картинок», посланных человечеством в эфир через континенты,
изобретатель, создатель триода и успешный бизнесмен
была речь, произнесенная Адольфом Гитлером на открытии
Ли де Форест еще мог себе позволить скепсис в отношеИгр. Эта же картинка первой ушла в космические дали – и,
нии перспектив телевидения, заявляя: «Хотя теоретически
как рассказано в научно-фантастическом романе-бестсели технически телевидение может быть построено, с коммерлере известного ученого и популяризатора науки Карла Саческой и финансовой точек зрения я считаю его невозможгана «Контакт» (и еще более впечатляюще показано в одноиным. Это из тех открытий, что достойны лишь нескольких чаменном фильме режиссера Роберта Земекиса), стала своего
сов праздных мечтаний». Но уже десятилетие спустя никто
рода космической «визитной карточкой» человечества. Увы,
не подвергал сомнению коммерческое значение телевидения. А также политическое.
именно по этим кадрам высокоразвитая инопланетная цивиТридцатые годы открылись первой спортивной телетранлизация решила, что земляне созрели для Контакта…
сляцией, которую в 1931 году BBC вела со скачек в Дерби.
А на исходе десятилетия, 1 сентября 1939 года, в Великобритании важное правительственное сообщение: «Война!» –
А в 1936-м телезрители на обоих берегах Атлантики уже могли наблюдать открытие очередных Олимпийских игр в Бервпервые прозвучало также с экрана телевизора. И в данном
случае не обошлось без иронической ухмылки истории – отлине.
нюдь не веселой, даже мрачной. Дело в том, что шедший
Между прочим, в гитлеровской Германии телевидение
имело все шансы стать национальным СМИ номер один.
в тот день детский мультик про Микки-Мауса на канале BBC
прервался на фразе диснеевского мышонка: «Кажется, нам
Но этому помешала чисто ведомственная склока между двумя ближайшими сподвижниками фюрера – Герингом и Гебпора сваливать». EOF
(Продолжение следует)
бельсом. Во всяком случае, в 1942-м, находясь в своей ставке
86
ноябрь 2015 системный администратор
НАУКА
И ТЕХНОЛОГИИ
88 Проектирование гипертекстовой модели
электронно-цифровой библиотеки
92 Инструмент социально-экономического
прогнозирования и тестирования
проектируемых макроэкономических
управлений
Наука и технологии
. . – . . .,
« Э
. .–
« Э
. .
», vtТtov213@вКnНОб.ru
. .
», КК@nОНОlФ.Тn
,
,
.
.
-
-
.
on-lТnО
-
.
-
-
.
-
.
-
,
-
,
ШЧ-ХТЧО
,
-
,
,
,
,
.
.
,
-
-
,
,
:
.
;
,
;
-
,
,
.
-
-
,
-
-
;
.
.
,
,
.
.
-
.
,
88
.
,
-
,
,
,
,
-
ноябрь 2015 системный администратор
Наука и технологии
,
.
;
•
,
,
,
•
-
,
,
-
,
,
;
,
(
)
-
,
.
;
•
,
,
-
-
.
.
,
,
,
,
-
.
.
•
-
,
-
А
,
,
,
,
.
-
:
,
-
. .
,
-
,
-
–
,
-
;
,
.
.
,
(
,
,
.
-
;
. .).
-
-
.
,
.
.
.
.
-
,
,
-
,
-
.
,
,
. .);
•
,
,
•
(
.
,
,
,
-
;
).
(
:
,
(
:
•
•
.
системный администратор ноябрь 2015
-
,
. .),
,
-
,
,
,
.
,
-
,
-
,
,
,
-
,
,
,
.
-
.
-
89
Наука и технологии
.
,
,
.
,
-
.
,
«
1.
),
,
,
,
-
-
,
».
,
,
.
,
»
«
(
,
,
:
. .
,
-
,
-
,
,
-
-
/
,
.
-
:
-
,
;
-
.
,
(
. 1).
.
АТЧНШаsSОrЯОr 2012.
MТМrШsШПЭIIS,
– MвSQL 5.
,
,
.
,
-
,
,
.
–
-
-
;
,
.
-
PHP
-
,
,
2.
-
,
,
.
,
-
-
-
.
.
,
.
-
,
.
-
,
,
,
,
,
,
,
(
.
,
,
-
. 2).
,
-
90
ноябрь 2015 системный администратор
Наука и технологии
.
,
.
,
Д5Ж
,
. .
-
,
.
. // «
,
.
,
.
-
», №2, 2015 . – . 50-59.
. .,
. .
Д6Ж
,
. .,
. // «
Д7Ж
,
. .,
-
№1, 2012 . – . 164-171.
. .,
. .,
. .,
»,
. .,
. .
. .,
. .,
-
-
,
,
// «
-
,
.
Д8Ж
, . .
», .1, №12, 2014 . – . 140.
/ . .
//
.
.
.«
,
,
.
,
,
,
,
.
,
,
». –
,
-
,
Д9Ж
.:
. .,
, 2005. – . 39-44.
. .,
. .,
. .
-
.
-
. // «
», №5, 2015 . –
. 44.
,
,
Д10Ж
-
:
. .,
. .,
. .
. .,
. .,
. .,
. // «
. .,
-
;
. .,
. .,
-
», №10, 2014 . – . 132.
Д11Ж
-
,
M.: «
,
,
.
Д12Ж
-
. .
», 2005. – 288 .
. .,
. .
. // «
.
.–
-
», №12-1, 2014 . –
. 135.
Д13Ж
***
,
», №12-1, 2014 . –
. 135К.
-
.
. .
. // «
. .,
Д2Ж
. .,
Д4Ж
-
», №1, 2012 . – . 81-87.
. .
-
,
-
:
:
(
», №3, 2008 . – . 20-27.
системный администратор ноябрь 2015
). // «
,
,
-
.
TТtov V.A. – PhD, ProПОssor, НОpКrtmОnt oП ТnПormКtТon tОchnoloРТОs,
PlОФhКnov RussТКn UnТvОrsТtв oП EconomТcs, vtТtov213@вКnНОб.ru
NОНОlФТn A.A. – sОnТor tОКchОr, НОpКrtmОnt oП ТnПormКtТon tОchnoloРТОs,
PlОФhКnov RussТКn UnТvОrsТtв oП EconomТcs, КК@nОНОlФ.Тn
EOF
. .
,
,
Design hypertext models of electronic-digital library
.// «
. . .
», №2, 2015 . – . 1-14.
. .,
. .
./
. – .: «
», 2007. – 288 .
-
:
)
-
Д3Ж
», №2, 2015 . –
. 24-33.
,
,
. .
. . .
К
(
)
. .,
. // «
;
;
. .
,
,
Д1Ж
-
,
Д14Ж
(
. .
. // «
,
.
. .,
,
Summary: ThТs КrtТclО НОКls аТth thО crОКtТon oП hвpОrtОбt НТРТtКl lТЛrКrв
ЛКsОН on moНОrn ТnПormКtТon КnН communТcКtТon tОchnoloРТОs, tКФТnР
Тnto Кccount thО spОcТic usО Тn thО ОНucКtТonКl ОnvТronmОnt. ThТs sвstОm
Тs НОsТРnОН to rОprОsОnt РОoРrКphТcКllв rОmotО КccОss rОКНОrs Тn on-lТnО
moНО, КnН thus hОlp to ТmprovО thО ТnПormКtТon ТnПrКstructurО oП thО
unТvОrsТtв.
Keywords: hвpОrtОбt moНОl, lТЛrКrв, аОЛ-sОrvОr.
91
Наука и технологии
. .,
,
. .,
,
. .
, vlКНТslКv.гotov@РmКТl.com
,
. . .
, DвnФuР@mКТl.ru
. . .
,
И
. . .
« И -
,
.
(
»
(
. . .,
),
,
Э
».
,
,
).
,
.
•
•
-
«
.
,
-
-
-
,
:
•
-
.
:
.
,
.
-
-
,
»
-
,
.
» Д4, 5, 6Ж
-
-
,
,«
,
,
),
),
,
-
,
(
-
,
И
•
,
,
–
,
,
-
-
.
А.А.),
-
,
-
,
(
.
(
,
.
,
,
,
,
.К
И ,
,
92
я
-
Э
«
,
я
•
(
,
,
,
-
19
).
(
,
,
(
9
,
-
-
ноябрь 2015 системный администратор
Наука и технологии
,
. .)
-
,
,
,
•
«
,
,
-
(
«
-
,
;
»
,
,
,
И
«
. .;
,
.
-
-
,
•
,
10
•
-
•
-
/
-
)
,
-
.
,
-
.
1.
-
-
,
-
,
-
,
,
. .)
;
. .)
(
.
-
,
,
,
;
,
. .
,
)
;
;
(
,
,
(
.
,
;
•
:
,
»
(
(
. .
•
-
:
,
-
-
,
,
),
•
-
,
,
(
),
:
,
-
»
•
)
);
•
;
-
»
•
-
»
»
(
,
).
,
•
-
-
»
),
(
,
(50-70
,
:
И
,
-
.).
•
,
-
-
;
,
-
;
•
«
«
»
,
«
.
»
,
»
,
14.32.
(
.
системный администратор ноябрь 2015
-
),
-
93
Наука и технологии
Д6Ж
. .,
. .
,
,
.
.
.
,
№ 73101
-
,
К
29.12.2007.
:
-
,
-
,
,
,
,
,
,
.
-
Д3Ж
Д4Ж
,
):
,
,
,
. .).
,
EOF
. .
-
, 1973.
. .
. – .: «
. .
», 2010.
. .,
». –
.:
.
», 2005.
. – .: «
№ 2004612233
«
. .,
Summary: ThТs КrtТclО prОsОnts thО rОsults oП mОthoНoloРТcКl КnН КpplТОН
rОsОКrch (lОН Лв proП. KouРКОnФo A.A.) Тn iОlН oП socТo-ОconomТc НвnКmТcs
ПorОcКstТnР cКrrТОН out Кt PlОФhКnov RussТКn UnТvОrsТtв oП EconomТcs. Authors
proposОН soПtаКrО "DВN-ProРnoг" to construct cвЛОrnОtТc moНОls (НвnКmТc,
non-lТnОКr, hКvТnР К ПООНЛКcФ loops КnН non-stКtТonКrв structurО) КnН ПorОcКst
ПuturО conНТtТons КnН structurКl trКnsПormКtТons oП stuНТОН sвstОms. ThОrО Тs
ЛrТОП ovОrvТОа oП ТnnovКtТvО tool DВN ЛКsОН on К НвnКmТc moНОl oП RussТКn
FОНОrКtТon Оconomв.
-
Keywords: socТo-ОconomТc ПorОcКstТnР, socТo-ОconomТc procОssОs НвnКmТc
moНОlТnР, non-stКtТonКrв structurОs, НОtОrmТnТstТc chКos, nonlТnОКr
procОssОs, sТtuКtТon cОntОr, mКcroОconomТc ПorОcКstТnР, countrТОs coКlТtТon
moНОlТnР, mТlТtКrв-polТtТcКl conlТcts, ТntОrnКtТonКl oТl mКrФОt ПorОcКstТnР,
DВN-ProРnoг.
-
. .
01.10.2004
».
. .,
-
. .
.
.
№ 43663
27.01.2005.
KouРКОnФo A.A., Doctor oП EconomТcs, ProПОssor, PlОФhКnov RussТКn
UnТvОrsТtв oП EconomТcs, DвnФuР@mКТl.ru.
Гotov V.A., Ph.D., AssocТКtО ProПОssor, DОpКrtmОnt oП InПormКtТon TОchnoloРв,
PlОФhКnov RussТКn UnТvОrsТtв oП EconomТcs, LКЛorКtorв oП mОНТcКl soПtаКrО,
vlКНТslКv.гotov@РmКТl.com.
-
-
.
Д5Ж
-
-
«
Д2Ж
-
,
Social and economic forecasting and macroeconomic management testing
system
(
Д1Ж
,
,
,
(
,
2.
94
ноябрь 2015 системный администратор
Акция «Заяви о себе»
в
Офо
в е ак о
ую
иску
а 2016 о а с еша ую е сию
а а
«БИТ. Б е &И фо а о
е ех о о »,
е е к й а
а ка а о воей ко а
вое
о к е а
а
ах
а
!
о
В е об ИТ
#9(52) ноябрь 2015
RIW 2015
Сергей Плуготаренко:
«Кризисный сценарий
развития Рунета – это рост»
Мотивация
персонала
ИТ-управление
Вероника Тараба:
«Если компания никогда
не ставила маркетинг
во главу угла, продавать
ей очень сложно»
Кто и как влияет
на сотрудников?
Интеллект уальные
системы видеонаблюдения
БИТ.Персона
и Средней Азии
Бумажная
электронная
версии!
Тема номера
Сергей Земков,
управляющий директор
«Лаборатории Касперского»
в России, странах Закавказья
в бизнесе
и для бизнеса
Сде лано в России
Евгения Василенко:
«Для роста компаний
нужны условия,
как для растений, которые
из теплицы высаживают
в открытый грунт»
4500 руб
В е од обно и оведения акции –
на ай е ж нала http://bit.samag.ru
http://bit.samag.r u
ISSN 2313-8718
Подписывайтесь
и раcсказывайте о себе!
bit.samag.ru/subscribe
Зал славы «СА»
Телевизор
от радиокорпорации
Этот «экспонат» нашего виртуального
музея компьютерных и коммуникационных технологий – наверное, самый необычный из тех, с которыми
уже успели познакомиться читатели
журнала. Потому что это не столько
прибор – замечательный в истории
техники (и бизнеса), но в большей
мере – «мини-портрет» удивительного
человека, благодаря которому родился данный прибор. И занял достойное
место в вышеназванном музее.
Прибор – это первый коммерческий телевизор. А человек – уже упоминавшийся
на страницах этого номера журнала основатель и первый президент первой в истории
радиокорпорации RCA (Radio Corporation of America) Дэвид Сарнов (1891-1971). Или Давид Абрамович Сарнов, – будущий американский магнат родился в еврейском местечке
Узляны неподалеку от Минска. Его образование ограничилось религиозной еврейской
школой – хедером. В девятилетнем возрасте он эмигрировал вместе с родителями
в Америку, где поначалу продавал газеты, а затем получил работу в радиокомпании
знаменитого Маркони. Работа не относилась к престижным – молодой Сарнов был фактически офисным «мальчиком на побегушках».
О Сарнове-радиолюбителе Америка узнала в 1912 году. Потому что именно он,
работая телеграфистом, будто бы первым «поймал» радиосообщение о катастрофе,
случившейся в Атлантике с «Титаником». Во всяком случае, так утверждал сам Сарнов – многие историки считают, что он все выдумал. Что ж, умение пропиарить себя –
качество для бизнесмена необходимое. А бизнесменом Сарнов стал быстро – и каким!
В 1915 году он, занимая уже пост менеджера среднего звена, послал руководству
Marconi Wireless Telegraph Company of America докладную записку с коммерческим проектом «радиомузыкального ящика», предназначенного для того, «чтобы передавать
музыку по беспроводной связи». Инициатива не сразу была оценена по достоинству –
это случилось позже, когда компания Маркони вошла в состав General Electric и была
преобразована в Radio Corporation of America. Именно там рядовой менеджер проделал
стремительный взлет по карьерной лестнице – в кресло вице-президента RCA. А чуть
позже занял и президентский кабинет.
Именно в качестве президента RCA он в последнее предвоенное десятилетие непосредственно руководил работами по созданию электронного телевидения. За десять
лет RCA вложила в новое СМИ более $13 млн – сумму, невероятную для времени Великой депрессии. И в 1939 году на Всемирной ярмарке в Нью-Йорке компания впервые
продемонстрировала полностью электронную систему телевидения. Прирожденный
бизнесмен, Сарнов для первого телесюжета выбрал беспроигрышный вариант – речь
президента Рузвельта. Кстати, на первом коммерческом телевизоре RCA Victor
TRK 12 была впервые применена знакомая читателю со стажем тестовая картинка – та
самая «решетка», которая появлялась на экранах всех телевизоров «доцифровой эры».
А регулярное коммерческое телевещание началось за полгода до того, как Америка вступила во Вторую мировую войну, – 1 июля 1941 года. Вещание велось с ньюйоркского небоскреба Empire State Building, а принимали сигнал около тысячи приемников, пока еще установленных в отелях, ресторанах, офисах – время домашнего
телевидения еще не пришло.
Да и это «изначальное телевидение» с наступлением войны было временно отложено в сторону – воюющая страна больше нуждалась в полевых рациях и радарах,
на производство которых Сарнов и переключил свою компанию. Сам же он провел войну советником по коммуникациям при генерале Эйзенхауэре – будущем президенте
Соединенных Штатов – и даже выбил у того для себя звание бригадного генерала.
Прошло совсем немного времени после окончания войны, и он смог «убедить» покупать свои телевизоры американские «широкие массы». А за ними телеманией постепенно заболел весь мир. EOF
Владимир Гаков
96
Издается с 2002 года
Включен в Российский индекс
научного цитирования 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 системный администратор
Подписывайтесь и читайте «Системный администратор»!
Подписывайтесь и получайте советы от практиков ИТ!
Подписывайтесь и применяйте знания, которых нет
в учебниках! «Системный администратор» дает их вам!
eb 11.0
Конкурс: Я – пользователь Dr.W
Только полезная
информация
№11(156) ноябрь 2015
Бумажная
Новый Nginx
с HTTP/2 и JavaScript
электронная
версии!
Биржевой робот
Инструменты и принципы
его создания
Управление гостевой ОС
средствами хоста
виртуализации
5320 руб
Построение системы
резервного копирования
Сетевые устройства
Централизованное управление
Облачное хранилищеое
о-определяем
Унифицированное программн
Мобильные приложения
ИТ-инфраструктура
Механизмы защиты
Виджеты в Android
Периферийный сервер
Режим повышенной безопасности
Давайте разберемся, как создать
собственный виджет с дополнительной
информацией о системe
Концепция и реализация сервера,
предназначенного для гибкой работы
с несколькими интернет-провайдерами
Рассмотрим, каким образом можно
усилить уже существующую защиту
протокола SSL
Стоимость печатной версии – 4560 руб.
Стоимость электронной версии – 1700 руб.
samag.ru/subscribe
Подпишитесь!
МЫ ПРЕДПОЧИТАЕМ СЛОВАМ
РЕАЛЬНЫЕ ДЕЛА
«Волма» всегда переходит
от слов к делу. Эта философия
заложена в нашем бренде –
мы предпочитаем словам
реальные дела. Мы гордимся
тем, что делаем.»
Владимир Овчинцев,
генеральный директор
компании «Волма»
www.kaspersky.ru/podhod
Добрый день! Я Владимир Овчинцев,
генеральный директор компании «Волма». Компания «Волма» – первый российский производитель строительных
материалов федерального масштаба.
Мы производим строительные материалы на основе гипса и цемента, гипсокартонные листы, сухие строительные
смеси и т.д. Сегодня это уже 8 производственных площадок не только в России, но и в странах ближнего зарубежья.
Наши производства оснащены самыми
современными линиями по выпуску
продукции. Мы активно реализуем социальные программы по поддержке
различных инициатив в регионах нашего присутствия. В нашей компании
большое внимание уделяется развитию
персонала. «Волма» всегда переходит
от слов к делу. Эта философия заложена в нашем бренде – мы предпочитаем
словам реальные дела. Мы гордимся
тем, что делаем.
+7 800 755 88 08
Здравствуйте! Я Любимов Александр
Иванович, руководитель IТ-управления
компании «Волма». Для руководителя
© АО «Лаборатория Касперского», 2015
IТ-управления компании, Александра
Любимова важен комплексный подход
к защите ценных ресурсов и данных
компании: «Сотрудники нашей компании работают как внутри компании, так и в «полях». Они используют
стационарные компьютеры, ноутбуки
и мобильные устройства. Для защиты
информации и пользователей нашей
компании мы используем инструменты
«Лаборатории Касперского». Набор инструментов Kaspersky Endpoint Security
для бизнеса включает в себя средства
для защиты рабочих станций, мобильных устройств, серверов и почтового
трафика. Это правильный подход!»
Автор
Kruz
Kruz3206   документов Отправить письмо
Документ
Категория
Информационные технологии
Просмотров
988
Размер файла
34 975 Кб
Теги
2015
1/--страниц
Пожаловаться на содержимое документа