Вячеслав Красовский Старший инженер-разработчик Микрософт BI 202.

Презентация:



Advertisements
Похожие презентации
SQL SERVER PARALLEL DATA WAREHOUSE Обзор, лучшие практики, новое в AU3 Резник Андрей Гвоздев Александр
Advertisements

Максим Хлупнов Архитектор технологий Microsoft Technology Center AR308.
Александр Степанов Специалист по решениям Microsoft Василий Гусев MVP: PowerShell Консультант DC203.
Администрирование информационных систем Лекция 4. Система управления базами данных.
Организация распределенных прикладных систем. Попытаемся ответить на вопросы Как устроены распределенные прикладные системы? Каковы наиболее важные их.
Работу выполнили ученики 21 гимназии 10 А класса.
Учебный курс Технологии и средства разработки корпоративных систем Лекция 1 Открытые системы. Клиент и сервер Лекции читает кандидат технических наук,
9:30 Приветственный кофе 10:00 Ключевой доклад 11:45 Аппаратные решения HP для платформы Microsoft BI Аппаратные решения HP для платформы Microsoft BI.
Как Map/Reduce спас Яндекс.Статистику. Background Взрывной рост объема данных, за 8 лет объем дневных данных вырос в 2000 раз с 2ГБ до 4ТБ Скорости процессоров,
МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ИНСТИТУТ ЭЛЕКТРОНИКИ И МАТЕМАТИКИ (ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ) КАФЕДРА ИКТ Дипломный проект на тему: Студент: Руководитель проекта:
Проектная работа на тему: «Компьютерные сети» Работу выполнили: студенты группы 6301 Айнатдинов Ильдар и Хаснутдинов Айдар.
FastTrack Data Warehouse Иван Косяков Technology Architect, MTC Moscow Особая благодарность Алексею Халяко из SQLCAT.
Тема 6. Технология разработки реляционной модели данных Вопросы 1.Объекты реляционных БД, терминология 2.Разработка структуры БД 3.Нормализация отношений.
«СЕТИ КОМПЬЮТЕРОВ. ОСНОВНЫЕ ПОНЯТИЯ» Методическое пособие по дисциплине «Программное обеспечение компьютерных сетей и информационных систем»
Локальная сеть Типы локальных сетей Топология сетей.
Масштабируемость Интернет-ресурсов Игорь Лобанов Центр Финансовых Технологий.
Все процессоры выполняют одну и ту же программу ВС класса SIMD.
Компьютерные кластеры. Автор: Капля Алексей Владимирович alex
СУБД Access Запросы Автор: Тутыгин В.С.. Назначение запросов Запросы обеспечивают простой доступ к определенному подмножеству записей одной или нескольких.
Методы построения и программное обеспечение вычислительных кластеров Дмитрий Лайком гр. 8ВМ23.
Транксрипт:

Вячеслав Красовский Старший инженер-разработчик Микрософт BI 202

: Упор на экзотические архитектуры Неразвитые «строительные блоки» (напр. TCP/IP) Чересчур сложные дизайны Сегодня: Мощные широкодоступные компьютеры Дешёвые сетевые технологии Проверенный подход к параллелизму

Много-компьютерная масштабируемость Метрики успеха: линейный рост производительности Подходы к масштабированию Независимость рулит Алгоритмы PDW: Как разделить данные и властвовать Секционный (партиционный) параллелизм Microsoft SQL Server 2008 R2 PDW Устройство устройства

Два ключевых аспекта (1) - Линейное ускорение (рост в быстродействии) – добавление оборудования ведёт к увеличению скорости исполнения запроса MEM CPU MEM CPU MEM CPU MEM CPU Сеть MEM CPU MEM CPU MEM CPU MEM CPU MEM CPU MEM CPU MEM CPU MEM CPU 10 TB на 4 машинах и 4 дисках 10 TB на 8 машинах и 8 дисках 5

(2) - Линейное масштабирование (рост максимальных объёмов данных)– добавление оборудования ведёт к увеличению количества данных при прежней скорости исполнения запросов 10 TB на 4 машинах и 4 дисках 20 TB на 8 машинах и 8 дисках MEM CPU MEM CPU MEM CPU MEM CPU Сеть MEM CPU MEM CPU MEM CPU MEM CPU MEM CPU MEM CPU MEM CPU MEM CPU 6

Стартовое время Время необходимое для запуска операции Для большого количества процессоров (100) может быть весьма значительным Интерференция Замедление всех запросов привносимое при добавлении нового запроса. Возникает в результате доступа к общим ресурсам Неравномерность (Skew) Общее время запроса ограничено временем исполнения самого медленного шага 7

Много-компьютерная масштабируемость Метрики успеха: линейный рост производительности Подходы к масштабированию Даёшь независимость! Как разделить данные и властвовать Партиционный параллелизм Microsoft SQL Server 2008 R2 PDW Устройство устройства

Пета-байтные хранилища уже в эксплуатации! Сотни машин и тысячи дисков Системы на сотни терабайт уже в широком обиходе Что же делать с сотнями 1 ТВ дисков? Простой перечень подходов: (1) Системы с общей памятью (2) Системы с общим диском (3) Независимые (shared-nothing) системы 9

Процессоры делят всю память и все диски Достоинства: Простая организация упрощает код Проблемы с масштабированием Система памяти становится узким местом Проблемы вызванные протоколами синхронизации кэшей Интерференция вследствие доступа к общим ресурсам (таблицы блокировок, буфер страниц, т.п.) Весьма сложно достичь масштаба сотни ядер ЦПУ Память CPU 10

Обычные компьютеры (2-4 проц., память, локальный диск) СХД - дорого Ограничения в масштабируемости (10-20 машин) Для координации доступа нужен сложный распределённый менеджер блокировок Пример: Oracle RAC Сеть хранения данных (SAN) … Машина 1 MEM CPU Машина 2 MEM CPU Машина K MEM CPU База данных находится на СХД дисках 11

Обычные машины объединённые в обычную сеть (gigabit Ethernet, Infiniband) Дизайн масштабируется бесконечно Нет общих разделяемых компонент (как в системах с общей памятью) Нет распределённого менеджера блокировок (как в системах с общим диском) Пропускная способность памяти и дисков растёт линейно с добавлением машин … Машина K MEM CPU Машина 2 MEM CPU Машина 1 MEM CPU Сеть 12

Достоинства Дешёвые общедоступные компьютеры Отличная масштабируемость Отказоустойчивость Нет «горячих» компонент (буферный кэш, таблица блокировок) Линейный рост производительности (ускорение и масштабирование) Недостатки Администрация – труднее создать систему администрирования Сложнее подобрать удачный дизайн базы данных приложения Нужен ПО для обработки ситуаций отказа компонент и неравномерностей (skew) данных 13

СУБД на базе такой архитектурной модели были предложены например Teradata или Gamma (Univ. of Wisconsin) IBM DB2/PE – 1990-е Informix XPS – конец 1990-х Ныне: Greenplum, Netezza, Vertica, Aster Этот же подход используется поисковиками (Bing, Yahoo, Google) Кластеры из 10,000 машин Microsoft SQL Server 2008 R2 PDW – независимая (shared-nothing) система 14

Много-компьютерная масштабируемость Метрики успеха: линейный рост производительности Подходы к масштабированию Даёшь независимость! Алгоритмы PDW: Как разделить данные и властвовать Партиционный параллелизм Microsoft SQL Server 2008 R2 PDW Устройство устройства

Сеть IDName… 201cBob… 105Sue… 933Mary… IDName… 201cBob… 105Sue… 933Mary… IDName… 201cBob… 105Sue… 933Mary… IDName… 201cBob… 105Sue… 933Mary… IDName… 201cBob… 105Sue… 933Mary… IDName… 201cBob… 105Sue… 933Mary… IDName… 201cBob… 105Sue… 933Mary… IDName… 201cBob… 105Sue… 933Mary… Ключевая идея: Разделить ряды всех таблиц равномерно по всем машинам и дискам Масштабируется прекрасно сотни машин, тысячи дисков Основа линейного ускорения и масштабируемости Три варианта Разделение по кругу (Round Robin) Разделение по диапазонам (Range) Разделение по хэшу (Hash) 16

Идея: ряды направляются по очереди IDNameCityBalance 201BobMadison$3, SueSan Fran$ MarySeattle$40, GeorgeSeattle$60 220SallyMtn View$ LarryPalo Alto$1, AnneL.A.$22,000 50LizNYC$2,200 86BobChicago$ BobLondon$994 19GeorgeParis$3, JeffMadison$0 Загружаемые Данные Сеть MEM CPU MEM CPU ETL Node 1 Node 2 17 IDName… IDName… IDName… IDName… 105Sue… 201Bob… 933Mary… 600Larry … 220Sally … 150George … 750Anne … 50Liz … 86Bob … 320Jeff … 19George … 630Bob … + Все диски загружаются равномерно - Неизвестно куда какой ряд попал

Ключевая идея: роды раздаются согласно значению одной из колонок (в данном примере ID) IDNameCityBalance 201BobMadison$3, SueSan Fran$ MarySeattle$40, GeorgeSeattle$60 220SallyMtn View$ LarryPalo Alto$1, AnneL.A.$22,000 50LizNYC$2,200 86BobChicago$ BobLondon$994 19GeorgeParis$3, JeffMadison1818 Данные пользователя Interconnection Network MEM CPU MEM CPU IDName… 19George … 50Liz … 86Bob … IDName… 105Sue … 150George … 201Bob … IDName… 220Sally … 320Jeff … 600Larry … IDName… 630Bob … 750Anne … 933Mary … IDNameCityBalance 19GeorgeParis$3,105 50LizNYC$2,200 86BobChicago$ SueSan Fran$ GeorgeSeattle$60 201BobMadison$3, SallyMtn View$ JeffMadison$0 600LarryPalo Alto$1, BobLondon$ AnneL.A.$22, MarySeattle$40,000 Сортировка по ID ETL Node 2 Node ID 219 ID ID 629 I D 630 После сортировки можно разбить на нужное количество диапазонов В этом примере 4 диска, следовательно нужно 4 диапазона Ряды распределяются согласно диапазонам Информация о диапазонх сохраняется в схеме таблицы

Ключевая идея: рады раздаются путём вычисления хэш функции от значения одной из колонок IDNameCityBalance 201BobMadison$3, SueSan Fran$ MarySeattle$40, GeorgeSeattle$60 220SallyMtn View$ LarryPalo Alto$1, AnneL.A.$22,000 50LizNYC$2,200 86BobChicago$ BobLondon$994 19GeorgeParis$3, JeffMadison$0 Данные пользователя MEM CPU Сеть MEM CPU IDName… IDName… IDName… IDName… Хэш по ID 933Mary…602Larry…105Sue…201Bob…50Liz…150George…220Sally…320Jeff…752Anne…86Bob…19George…633Bob… Обратите внимание: диск 1 машины 1 получил 4 ряда, в то время как диск 1 машины 2 – только два ряда. Неравномерность (skew). Машина 2 Машина 1 19 Информаця о том, по какой колонке совершино хэширование сохраняется в схеме Hash_Function (201) ( Машина 1, Диск 2) Hash_Function (105) ( Машина 1, Диск 2 ) Hash_Function (933) ( Машина 2, Диск 2 )

Примитив, используемый СУБД для выполнения конструкций языка SQL Пример, предикат AmtDue > $30K FILTER и SCAN – есть реляционные операторы, ряды проходят через конвейер таких операторов и приходят к пользователю AmtDue > $30K FILTER SCAN IDNameAmtDue 933Mary$49K 633Bob$19K 19George$83K 20

IDNameAmtDue 201Bob$9K 105Sue$11K 86Bob$90K IDNameAmtDue 933Mary$49K 633Bob$19K 19George$83K IDNameAmtDue 602Larry$13K 752Anne$75K 322Jeff$20K Координатор выполнения Оптимизатор Парсер Каталог Приложение Запрос: Select * from Customers where AmtDue > $30K 86Bob$90K 752Anne$75K 933Mary$49K 19George$83K 752Anne$75K 86Bob$90K Запрос выполняется (1)Всеми машинами (2)Последовательный поиск на всех машинах (3)Легко масштабируется (4)Блокировка локальна AmtDue > $30K Filter Scan AmtDue > $30K Filter Scan AmtDue > $30K Filter Scan SQL Server SQL Server SQL Server Таблица пользователя 933Mary$49K 19George$83K 21

IDNameAmtDue 201Bob$9K 105Sue$11K 86Bob$90K IDNameAmtDue 933Mary$49K 633Bob$19K 19George$83K IDNameAmtDue 602Larry$13K 752Anne$75K 322Jeff$20K Координатор выполнения Оптимизатор Парсер Приложение Запрос: Select * from Customers where ID = Mary$49K Customers (ID, Name, AmtDue) Разеление по хэшу по ID 933Mary$49K Запрос выполняется (1)Одной машиной (2)Последовательный поиск (3)Остальные машины могут выполнять другие запросы SQL Server ID=933 Filter Scan SQL Server SQL Server 22

Пример #1: Таблица Customers (ID, Name, AmtDue) Разделение по хэшу по ID Имеем кластерный индекс по Customers (ID) 23

IDNameAmtDue 86Bob$90K 105Sue$11K 201Bob$9K IDNameAmtDue 19George$83K 633Bob$19K 933Mary$49K IDNameAmtDue 322Jeff$20K 602Larry$13K 752Anne$75K Координатор выполнения Оптимизатор Парсер Приложение Запрос: Select * from Customers where ID = Mary$49K Таблица: Customers (ID,Name,AmtDue) Разеление по хэшу по ID Кластерный индекс по ID 933Mary$49K ID Запрос выполняется (1)Одной машиной (2)Поиск по индексу ID (3)Эффективные короткие транзакции SQL Server SQL Server Index Select ID=933 SQL Server 24

Пример #1: Таблица Customers (ID, Name, AmtDue) Разделение по хэшу по ID Имеем кластерный индекс по Customers (AmtDue) Имеем не кластерный индекс по Customers (ID) 25

IDNameAmtDue 201Bob$9K 105Sue$11K 86Bob$90K IDNameAmtDue 633Bob$19K 933Mary$49K 19George$83K IDNameAmtDue 602Larry$13K 322Jeff$20K 752Anne$75K Координатор выполнения Оптимизатор Парсер Приложение Запрос: Select * from Customers where ID = 933 Index Select ID= Mary$49K SQL Engine SQL Engine SQL Engine Таблица: Customers (ID, Name, AmtDue) Разеление по хэшу по ID Кластерный индекс по AmtDue Не-кластерный индекс по ID 933Mary$49K ID AmtDue ID AmtDue ID AmtDue Запрос: Select * from Customers where AmtDue > $30K Index Select AmtDue >$30K Index Select AmtDue >$30K Index Select AmtDue >$30K 86Bob$90K 752Anne$75K 933Mary$49K 19George$83K 752Anne$75K 86Bob$90K 933Mary$49K 19George$83K 26 Запросы выполняются (1)Одной машиной (2)Поиск по индексу ID (1)Всеми машинами (2)Поиск по индексу AmtDue (3)Эффективный поиск в обоих случаях

Операторы SELECT легко распределяются Select * from Customers where AmtDue > $30K Простые агрегации тоже Select Avg (AmtDue) from Customers Каждая машина независимо выполняет под-запрос Одна из машин собирает полный результат НО: как быть со сложными агрегациями? Select City, Avg(AmtDue) from Customers group by City Как работают слияния (join)? Select Customer.Name, Order.ShipDate where where Customer.CID = Order.CID 27

Координатор выполнения Оптимизатор Парсер Catalogs Приложение SQL Engine Таблица Orders разделена по хэшу СID Таблица Customers разделена по хэшу CID Запрос: Select Name, Item from Customers C, Orders O where C.CID = O.CID SQL Engine JOIN C.CID = O.CID Соединение совершаеться локально Время выполнение запроса постоянно, вне зависимости от количества машин! 28 CIDOIDItem 60210Xbox 60211iPod 60210Tivo 75231Zune CIDNameAmtDue 602Larry$13K 322Jeff$20K 752Anne$75K CIDOIDItem 63321TV 63321DVD 93320Zune 1951TV CIDNameAmtDue 933Mary$49K 19George$83K 633Bob$19K

Execution Coordinator Optimizer Parser Catalogs Application SQL Engine Таблица Orders разделена по хэшу OID Таблица Customers разделена по хэшу CID Запрос: Select Name, Item from Customers C, Orders O where C.CID = O.CID SQL Engine Это соединение не может совершаеться локально – одна таблица разделна по хэшу CID, другая - OID Нужно сделать пере-разделение (repartition) - послать копию таблицы Orders похэшировав её по CID (после применеия предикатов например Orders.item = Zune) 29 CIDNameAmtDue 602Larry$13K 322Jeff$20K 752Anne$75K CIDNameAmtDue 933Mary$49K 19George$83K 633Bob$19K CIDOIDItem 63321DVD 60211iPod 1951TV 75231Zune 63321TV CIDOIDItem 60210Xbox 60210Tivo 93320Zune

Фундаментальный механизм для Слияния в случае когда таблицы не разделены по одному и тому же атрибуту Агрегаты с группировкой (GROUP BY) Концептуально 3 фазы Фаза разбиения: каждая машина разбивает таблицу на N кусочков (где N – количество машин) Фаза пересылки - каждая машина посылает свои кусочки другим машинам (и оставляет один себе) Фаза сборки - каждая машина принимает свои кусочки от других машин и делает одну временную таблицу Split Scan Merge Join Split Scan Split Scan Split Merge Join A 0 A 1 B 0 B 1 Ряды пересылаются от оператора к оператору, пока не придут к пользователю

Если происходит слияние по атрибуту по которому ни одна из таблиц не разделена, обе таблицы перераспределяться (после применения предикатов) Не обязательно на самом деле всегда материализовать временные таблицы На практике эти 3 фазы выполняются одновременно и используется идея конвейера 31

SQL Engine OIDCIDItem 203Zune 213TV 211DVD 511TV CIDName 1U.S. 2France 3Italy OIDCIDItem 101Tivo 312Zune 102Xbox 111iPod SQL Engine OIDCIDItem 402iPod 432Iron 93DVD 331VCR CIDName 1U.S. 2France 3Italy CIDName 1U.S. 2France 3Italy ТаблицаCountry Реплицирована на всех машинах Сеть Хорошо работает для сценариев хранилища данных Соединения (Join) с таблицей фактов локально Компромисс в том, что изменения к таким таблицам применяються на всех машинах Таблица Orders разделена по хэшу по OID 32

Всего 3 механизма: Репликация операторов – параллельное выполнение Оператор разделения – разделяет таблицу при перераспределении Оператор слияния – совершает слияние Результат: параллельная СУБД способная достичь линейного ускорения и масштабирования 33

Сеть RAID помогает, но не достаточен 34 MEM CPU RAID MEM CPU RAID MEM CPU RAID MEM CPU RAID MEM CPU RAID MEM CPU RAID Нужен дублицированый доступ к дискам

Много-компьютерная масштабируемость Метрики успеха: линейный рост производительности Подходы к масштабированию Даёшь независимость! Алгоритмы PDW: Как разделить данные и властвовать Партиционный параллелизм Microsoft SQL Server 2008 R2 PDW Устройство устройства

Database Servers Control Nodes Active / Passive Landing Zone Backup Node Storage Nodes Spare Database Server Dual Fiber Channel Management Servers Compute RackControl Rack Compute Nodes Dual Infiniband Пример на базе аппаратных средств HP Вычислительные машины: HP DL380 G6 HP MSA

Control RackCompute Rack HP PDW 4 Rack: 47 Серверов 82 Процессора 492 Ядра от 140 до 500 TB HP PDW 1 Rack 17 Серверов 22 Процессора 132 Ядра от 35 до 125 TB

39 Time Dim Date Dim ID Calendar Year Calendar Qtr Calendar Mo Calendar Day Date Dim ID Calendar Year Calendar Qtr Calendar Mo Calendar Day Store Dim Store Dim ID Store Name Store Mgr Store Size Store Dim ID Store Name Store Mgr Store Size Product Dim Prod Dim ID Prod Category Prod Sub Cat Prod Desc Prod Dim ID Prod Category Prod Sub Cat Prod Desc Mktg Campaign Dim Mktg Campaign Dim Mktg Camp ID Camp Name Camp Mgr Camp Start Camp End Sales Facts Date Dim ID Store Dim ID Prod Dim ID Mktg Camp Id Qty Sold Dollars Sold

SF Sales Facts Date Dim ID Store Dim ID Prod Dim ID Mktg Camp Id Qty Sold Dollars Sold Большая таблица фактов разделена SF -1 SF -2 SF -3 SF -4 Time Dim Date Dim ID Calendar Year Calendar Qtr Calendar Mo Calendar Day Date Dim ID Calendar Year Calendar Qtr Calendar Mo Calendar Day Store Dim Store Dim ID Store Name Store Mgr Store Size Store Dim ID Store Name Store Mgr Store Size Product Dim Prod Dim ID Prod Category Prod Sub Cat Prod Desc Prod Dim ID Prod Category Prod Sub Cat Prod Desc Mktg Campaign Dim Mktg Campaign Dim Mktg Camp ID Camp Name Camp Mgr Camp Start Camp End

41 Time Dim Date Dim ID Calendar Year Calendar Qtr Calendar Mo Calendar Day Date Dim ID Calendar Year Calendar Qtr Calendar Mo Calendar Day Store Dim Store Dim ID Store Name Store Mgr Store Size Store Dim ID Store Name Store Mgr Store Size Product Dim Prod Dim ID Prod Category Prod Sub Cat Prod Desc Prod Dim ID Prod Category Prod Sub Cat Prod Desc Mktg Campaign Dim Mktg Campaign Dim Mktg Camp ID Camp Name Camp Mgr Camp Start Camp End TDTD TDTD PDPD PDPD SDSD SDSD MDMD MDMD TDTD TDTD PDPD PDPD SDSD SDSD MDMD MDMD TDTD TDTD PDPD PDPD SDSD SDSD MDMD MDMD Таблицы измерений реплицированы на каждой машине TDTD TDTD PDPD PDPD SDSD SDSD MDMD MDMD Sales Facts Date Dim ID Store Dim ID Prod Dim ID Mktg Camp Id Qty Sold Dollars Sold SF -1 SF -2 SF -3 SF -4 Результат: слияния фактов с измерениями локальны

CREATE DATABASE database_name [ WITH AUTOGROW = ON | OFF, | REPLICATED_SIZE = replicated_size [ GB ] | DISTRIBUTED_SIZE = distributed_size [ GB ] | LOG_SIZE = log_size [ GB ] ] CREATE TABLE table_name [ ( { } [,...n ] ) [ CLUSTERED INDEX ( column_name ) ], [ DISTRIBIUTE ON = ( column_name ) ] | [ REPLICATE ], [ PARTITION column_name ( RANGE { LEFT | RIGHT } FOR VALUES { [ boundary_value [,...n] ] ) ) ] } BACKUP DATABASE database_name TO backup_directory WITH [ ( ] DIFFERENTIAL [, DESCRIPTION = 'text'] [ ) ]

Будущие СУБД за параллелизмом Независимые (Shared-nothing) архитектуры будут превалировать т.к. предлагают по настоящему масштабируемый параллелизм на базе общедоступного оборудования Техника разделения данных и разделённого выполнения запросов является ключом к достижению линейного ускорения и масштабирования Microsoft SQL Server 2008 R2 PDW – продукт обеспечивает производительность и масштабируемость посредством массивной параллельной обработки данных, используя комплекс систем общедоступных машин 43

Вячеслав Красовский Senior Software Engineer SQL Server Engine warehouse.aspx Ваше мнение очень важно для нас. Пожалуйста, оцените доклад, заполните анкету и сдайте ее при выходе из зала Спасибо!

Более 300 официальных курсов Microsoft доступно в России. Официальные курсы можно прослушать только в авторизованных учебных центрах Microsoft под руководством опытного сертифицированного инструктора Microsoft интенсивное обучение с акцентом на практику более 80-и учебных центров более чем в 20-и городах России (+ дистанционные и выездные курсы) Сертификат Microsoft - показатель квалификации ИТ-специалиста для работодателя. Microsoft предлагает гибкую систему сертификаций. Все курсы, учебные центры и центры тестирования: % Доказательство 75 сертифицированных специалистов считают, что сертификация помогла им получить работу или повышение 57 % Доказательство 119 рекрутеров считают сертификацию сотрудников одним из критериев для повышения в должности

Сертификационный пакет со вторым шансом Пакеты экзаменационных ваучеров со скидкой от 15 до 20% и бесплатной пересдачей («вторым шансом»). Все экзамены сдаются одним человеком. Сэкономьте 15% на сертификации вашей ИТ-команды Пакет из 10-и экзаменационных ваучеров со скидкой 15% для сотрудников ИТ-отдела. «Второй шанс» включен. Ваучеры можно произвольно распределять между сотрудниками. Microsoft Certified Career Conference Первая 24-часовая глобальная виртуальная конференция с 18 ноября с (моск. время) по 19 ноября 2010 г. Сессии по технологиям и построению карьеры Скидка 50% для сертифицированных специалистов Microsoft и студентов Бесплатная подписка на TechNet для слушателей официальных курсов Некоторые курсы по SharePoint, Windows 7; Windows Server 2008; SQL Server 2008 Детали: С 22 ноября 2010 г. – подписка TechNet бесплатно для слушателей курсов. Количество ограничено!