Занимался сегодня переустановкой Линукса на своём домашнем компьютере и наткнулся на свои полуторагодичной давности упражнения по ускорению биллинга:
Заказчик: один из топ-3 операторов фиксированной связи России
Задача: подсчет интерконнект-биллинга
Описание задачи и текущий способ решения:
1) Берется месячный объем CDR от всех транзитных голосовых коммутаторов Заказчика (все CDR - нормализованные), около 160 000 000 записей, общий объем файлов ~16GB.
2) На основании обработки всех записей составляется следующий результирующий файл:
--------------------------------------------------
зонаА,зонаB,к-во вызовов,длительность
7495,7812,1993029,3465931
.....
---------------------------------------------------
содержащий пары зон (зона оригинатор - только Россия [четыре первые цифры номера A], терминирующая зона - Россия или зарубеж [плавающее количество цифр в начале номера B]), кол-во вызовов между зонами пары и длительность этих вызовов.
3) В настоящее время задача решается на HP SuperDome оборудованном 32 процессорами HP PA-RISC, 32GB RAM, с подключенным через 2*4Gbit/s хранилищем данных HP XP 12000. СУБД Oracle и ПО биллинга от флагманского разработчика российских билинговых систем из С-Пб. Стоимость системы исчисляется цифрой с шестью нулями в долларах.
4) Решение задачи занимает как минимум 8 часов (не считая времени, которое нужно для подъема всех CDR в базу данных, Заказчик постеснялся назвать это время).
Моё решение:
1) Весь исходный текст системы и результат прогона на тестовых данных (~4GB) представлен на картинке вот здесь.
2) Использовался мой офисный подстольный компьютер: Mac Pro, 2*2,.66GHz Dual Core Intel Xeon, 17GB RAM, 1*SATA HDD 7200 RPM. СУБД не использованы, вместо них четыре стандартных Unix-утилиты: gawk, make, cut, sort.
3) Результат - 5 мин 48 секунд. На полном объеме данных было бы 20 - 22 минуты. Если прогонять этот тест на 8 ядерной машине, то можно добится 2-кратного улучшения результата. SSD-диски и RAID могут дать еще выигрыш в два раза. Т.е. 5 минут - вполне достижимо. Я это проверю сегодня вечером дома на своем домашнем компьютере с описанными характеристиками (стоимостью $3200).
4) Итого - 96-кратное ускорение при минимум 312-кратном снижении затрат.
5) Проверил на домашней машине:
ASUS Z7S MB Two 2.0GHz Quad Core Intel Xeon 5405 24 GB FB-DIMM PC2-5300 DRAM LSI MegaRAID with 256MB cache RAID 0 with 2 * 64GB Samsung solid-state disks (SSD) Ubuntu Linux 8.10 64 bit
Как и ожидал, получил почти четырехкратное (по сравнению с Маком) ускорение: задача решается на том-же наборе тестовых данных за 1 минуту 23 сек. Снимок здесь. Таким образом, полный интерконнент на 16-ти гиговом наборе будет сделан за время примерно равное 5-6 минутам против 8 часов на 32-х процессорном HP SuperDome за 3 млн долларов (плюс неизвестная, но немалая сумма за лицензии Оракла и флагманского биллинга).
P.S. После того, как я представил это решению ИТ-директору Заказчика, он попросил меня никому о нём не рассказывать - как-то ему неуютно стало. Понятно, что не он принимал решение о покупке супердомов и флагманского биллинга, и принималось оно не по причине суперэффиктивности этих решений, но ведь, при случае, с него могли и спросить... Вот такая вот модернизация страны, ёлки-палки... О механизмах принятия решений в нашем телекоме читайте открытое письмо Е.Юрченко.