?

Log in

No account? Create an account
dump -0f - /dev/mind
Я знаю Haskell, OCaml, GSM, эндофункторы и много других страшных слов
GSM: почему биллинг делается так долго? 
20th-Nov-2006 04:14 pm
(заказной пост для en_vision) Допустим, ваш оператор делает биллинг (готовит ежемесячные счета) в течении 5-10 дней? Почему так долго? Казалось бы, делов-то - "select sum(rated_amount) from rated_calls group by contract_id", и вперед - печатать счета. Давайте попробуем разобраться, где же порылась собака.

Допустим, у компании-оператора два миллиона абонентов, которым надо выставить счета. Каждый из этих абонентов за день в среднем совершает 10 тарифицируемых событий (исходящие звонки, SMS, ...) и еще столько же нетарифицируемых (входящие звонки, SMS, ...).

За месяц получаем: 2*10^6 * 20 * 30 = 12 * 10^8 (1 млрд 200 млн). Это количество записей, прошедших через rating.

Что делает процесс биллинга в простейшем случае? Для каждого из 2-х млн абонентов он смотрит, какие контракты принадлежат каждому абоненту, выбирает звонки, сделанные контрактами, суммирует их, добавляет все необходимые ежемесячные абонплаты, и начисляет сверху налоги. По окончании расчета полученные данные засовываются в красивую печатную форму (например, в виде PostScript).

Тут все желающие уже могут провести пару простых экспериментов. Например, взять любую базу данных, засунуть в нее миллиард-другой записей и попробовать выполнить select, вынесеный мной в первые строчки поста. Результаты отмасштабировать в предположении, что у оператора процессоры будут СуперМощные, а памяти будет Дофигищща.

Все? Нет, не все. Стрижка только начата. Это мы построили самый простой биллинг, практически - сферический биллинг в вакууме.

Давайте добавим в картину мира услуги, плата за которые зависит от месячной активности абонента. Например, "абонент платит за сервис фиксированную сумму в день, но только в дни, когда он пользовался этой услугой" или "сумма ежемесячной абонплаты зависит от кол-ва дней, в течении которых контракт был активен". Чтобы рассчитывать такие суммы, нам придется делать детальный анализ таблицы событий в разрезе дней. Допустим, что такие услуги популярны, и нам надо делать это для бОльшей части абонентской базы.[1]

Давайте также добавим в картину мира так популярные нынче "бесплатные" (или входящие в абонплату) минуты/SMS-ы/MMS-ы и т.п. В терминах нашей модели это означает, что для каждого контракта существует некое кол-во минут N, и определенные (не все) звонки суммарной продолжительностью не более N должны быть исключены из счета. Учтем, что, как правило, N бесплатных минут не будут исчерпаны при помощи целого числа звонков - будет какой-то звонок, который попадет "на границу" и его придется порезать на две части - платную и бесплатную. И это тоже делает биллинг.[2]

Давайте еще учтем смену тарифных моделей. Если у абонента была модель A (X_1 грн в месяц, Y_1 "бесплатных" минут) и он 20-го числа поменял ее на модель B (X_2 грн в месяц, Y_2 бесплатных минут), то с абонента надо снять X_1*(20/30) грн и дать ему Y_1*(20/30) минут в рамках модели А, а в рамках модели B снять X_2*(10/30) грн и дать ему Y_2*(10/30) минут - пропорционально времени, которое он провел в каждой тарифной модели. Да, попутно надо не забыть пересчитать все абонплаты, которые зависят от месячной активности.[3]

Как, все еще помещаемся в пару часов? Сомневаюсь.

Погодите, но кроме счетов для абонента есть еще бухгалтерия. Надо показать, какие звонки абонента "закрывают" те или иные его платежи. Другими словами, если абонент заплатил два раза по 100 грн, а наговорил на 200 грн, то биллинг должен для каждого звонка указать, к какому платежу он "отнесен" - к первому или второму. И так для всех звонков всех абонентов.[4]

Теперь посчитаем налоги и все цифры для налоговых накладных (это, правда, можно делать только для абонентов-юрлиц).

В принципе, дальше уже можно не продолжать, думаю, что и так все должно быть понятно. Если кто-то сможет втиснуть это все в рамки нескольких часов - ему прямая дорога писать и продавать биллинговые системы. Можно миллионы будет на этом деле заработать.

На реплики "так это ж можно распараллелить на 100 серверов!" я, наверное, реагировать не буду, уж извините :)

PS
Предваряя отдельный рассказ про Intelligent Network, NextGenerationOSS, конвергентные, hot, almost-hot и другие "быстрые" решения, хочу закинуть такую "удочку": в системе, которая Сразу после события подбивает достоверный и окончательный баланс абонента, и абонент не может уйти в минус, невозможна нормальная реализация услуг, описаных в пунктах [1],[2],[3],[4].

А реализовывать такие услуги отделу маркетинга хочется. Вот и получается, что либо модные услуги, контракт и длинный биллинг, либо без модных услуг, препейд и невозможность биллинга, как такового.

UPD: тем не менее, многие все-таки решили написать мне о том, как прекрасно параллелится биллинг и, в частности, как прекрасно разделяется для этого на части база данных. Коллеги! Я сам придерживаюсь мнения, что среди биллингописателей множество идиотов. Множество - но не все. Подумайте о том, почему такое, казалось бы, тривиальное решение не было реализовано на практике кем-то из major players. А еще подумайте о том, что биллинг - он раз в месяц, а все остальные 27 дней с этой базой и этой таблицей тоже что-то происходит. Причем очень активно происходит, практически без перерыва. И разделение базы на части для этих процессов .... ээээ ... ну, скажем, не самое лучшее решение.
Comments 
20th-Nov-2006 10:34 pm (UTC)
В T-Mobile и Cingular лёгким движением руки делается up to the day минутосчитание (точнее реально он работает с точностью примерно до часа

Теперь берем наши или российские реалии. У лидеров рынка хот-биллинг (реально мы говорим, конечно, про хот-рейтинг) работает с точностью до, округляя, четырех часов. Про то, что биллинг у них радикально другой - не поверю, особенно зная, что любит внедрять Т-Мобил.

Возвращаемся к нам. Через четыре часа мы имеем хорошее представление текущем балансе, ровно как ты описываешь.

Разумеется по окончании месяца биллинг все пересчитывает и зачастую получает чуть другие цифры.

Но вот скажи мне - что скажет американец, который 30-го числа видел на балансе 51 бакс, а после биллинга там осталось 49 (пересчитали, получилось на 2 бакса дороже)? Скорее всего он не скажет ничего, т.к. 30-го числа свой баланс не проверял, а смотрит только в бумажный счет.

А что скажут у нас? Скажут - компания сперла два рубля. Однозначно.

Или, например, станет ли американец после совершения звонка выжидать ровно час (т.к. ему на форуме друганы сказали, что ровно столько работает биллинг), после чего проверять свой баланс, еще через пол-часа проверять его еще раз, и если он вдруг уменьшился - опять-таки говорить, что воруют деньги (пофиг, что там мог хот-рейтинг задержаться, например)? Мне слабо это видится. А у нас - повсеместно.

Доходит до смешного - на лицевом два контракта, муж и жена. Муж приходит ругаться, что воруют деньги - он специально все выходные(!) не говорил и регулярно проверял баланс(!), а деньги куда-то уходят. Первая версия оператора - это расходы на звонки жены. "Нет, я с ней говорил - она никуда не звонила". Делают распечатку. Там куча исходящих СМС от жены. Муж краснеет, бледнеет, уходит....
21st-Nov-2006 01:05 am (UTC)
Ну самый простой выход из этой ситуации -- давать минуты а не баланс :) И минуты округлять.
Так что клиент реально увидит "вы потратили 231 минуту из 400 включённых" и нытья про сворованные баксы не будет. Плюс всё округляется до минуты (в отличие от .ру, где народ избалован N-секундным биллингом).

У Т-Мобила детализированный биллинг есть на вебе, плюс посылается по почте по умолчанию (у Cingular было, но по умолчанию в печатном виде теперь только сокращённый формат, за полную портянку надо дать 2 бакса). Так что до похода в точку обычно не доходит. И главные причины разбирательства это "premium SMS", которых тут теперь расплодилось как мух на г-не. И вот у них-то биллинг действительно восхитительный ($5.25 в месяц за не более 4 сообщений с ринг-тонами, за исключением премиум ринг-тонов, считающихся невходящими в указанный лимит, с дополнительной оплатой 99c - $1.54 плюс стоимость приёма/получения сообщений от оператора) и приплюсовываются они прямо к счёту абонента автоматом :) И никаких предварительных "данных" от них нет.
Я всё жду когда число воев от клиентов (а один звонок с гневными криками по статистике обходится провайдеру баксов в 6) перевесит прибыль от сервисов "Голые Бабы На Телефон Ежедневно!" :)
21st-Nov-2006 07:46 am (UTC)
Ну тык вот у меня тариф как раз с аккумулятором. Зашел на сайт МТС, глянул состояние аккумулятора - и живу себе спокойно дальше. А СМС и прочим ЖПРС лично я пользуюсь редко.
А вот насчет объединенных лицевых счетов adept верно заметил Ж:)
22nd-Nov-2006 07:21 am (UTC)
Ну самый простой выход из этой ситуации -- давать минуты а не баланс :) И минуты округлять. Так что клиент реально увидит "вы потратили 231 минуту из 400 включённых"

А по исчерпании 400 минут все равно прийдется считать деньги и говорить "вы потратили 400 минут из 400, плюс N баксов сверху". Не говоря уже о том, что округление до минут "пипл не схавает" - абоненты именно что избалованы секундным биллингом :)

Про все остальное - ага, местные реалии медленно, но верно движутся в эту же сторону.

22nd-Nov-2006 07:32 am (UTC)
неа :) У них тут минуты фиксированные %) А отчёт на лету скажет "перерасход -- 123 минуты", потом биллинг умножит это на 45 центов и всё :)
Тут всё очень упрощено. Я когда смотрю на Европейские планы мне страшно становится -- цена зависит от фазы луны, продолжительности разговоров и "любимости" номера :) Тут цена зависит от размера контракта, и вечера/уик-енда, и всё (например у меня 1000 минут в любое время суток + неограниченные с 9 до 8 и по выходным -- 40 баксов в месяц). Главной проблемой остаются grandfathered plans, у которых могут быть странные методы подсчёта стоимости, но к таким обычно не дают "оценку расходов", а просто показывают клиенту минуты разбросанные по его личным категориям.

Самым страшным приключением было введение ATT SAP-системы, порушившей нафиг их старую систему и убившую весь саппорт и половину биллинга на два-три месяца (клиенты получали счета на левые планы, которые к ним не применимы, руминг насчитывался на то, что было местными звонками и тп). Вот воя-то было.
22nd-Nov-2006 02:07 pm (UTC)
Да уж. За забором трава всегда зеленее, как обычно :)

Были бы у нас тут такие тарифные планы - не было бы, о чем говорить :)
This page was loaded Oct 20th 2019, 4:10 pm GMT.