|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
Hi, All! Где можно можно почитать об архитектурах построения высокопроизводительных биллингов для операторов связи? Я работаю в ISP и являюсь одним из авторов нашего биллинга. По функциональности он нас устраивает, но есть проблемы с производительностью. Чувствую, что с ростом числа клиентов наш биллинг начнёт загибаться. Сейчас это построено по следующей схеме: есть сервер, собирающий данные о сессиях клиентов (RADIUS) сервер БД (Oracle) хранит данные о сессиях клиентов, их счета и т.п. рабочие места операторов, с которых заводятся/удаляются клиенты, производится рассылка счетов и т.п. RADIUS принимает данные о сессиях клиентов из сети и преобразовывает их в удобную для дальнейшей обработки хранимой процедурой форму, затем передаёт эти данные в БД. Вся бизнес-логика реализована в виде хранимых процедур (бизнес-логика достаточно сложная, куча проверок на пускать/не пускать пользователя, кучерявые тарифные планы, роуминг и т.п.). Реализован hot-billing (т.к. большинство тарифов - prepaid): сессия клиента обсчитывается сразу по её окончании. Сам RADIUS ресурсов практически не потребляет, а вот Ораклу плохо -- загрузка процессора всегда 99-100%. А нам важна скорость обработки клиента (чтоб человеку не приходилось ждать по 10 секунд прохождения аутентификации при доступе в сеть). Оракл уже тюнинговали, железо достаточно приличное 2хP3-1,2GHz, диски SCSI. У меня складывается такое впечатление, что у нас где-то допущена архитектурная ошибка и строить это надо было несколько иначе. Например ввести буферную лёгкую базку (типа MySQL) для хранения оперативных данных ("сырые" данные для последующего обсчёта) и данных по клиенту, достаточных для его быстрой аутентификации. И отдельную базу для собственно биллинга (проведения всех необходимых расчётов по сырым данным), печати счетов и т.п. Эти базы разнести по разным машинам и обеспечить между ними синхронизацию необходимых данных. Мы даже готовы поступиться hot-billing-ом (хотя и не хотелось бы), но чтобы завершившиеся сессии обрабатывались с задержкой не более скажем 2-х минут. Желательно, чтобы у клиента не было возможности вылезти в отрицательный баланс. Где обо всём этом можно почитать? P.S. Где-то читал короткую заметку, что одна российская компания написала для оператора сотовой связи с несколькими миллионами клиентов биллинг с hot-billing-ом (в качестве БД - Cache). Удивляюсь как им это удалось реализовать при таком количестве клиентов. Не думаю, что там только дело в БД и мощном железе. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2004, 12:39 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
Что-то мне кажется что автор2хP3-1,2GHz это все таки слабое железо. Взять например начинающий провинциальный МТС, дык они сразу начинают с 4-х процессорного Sun большой оперативкой только под биллинг(не считая прочих серверов для роумеров, смс, стандбаев и прочего). И при том что им на такой конфигурации не разрешают делать Hot billing, под hot отдельное железо. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2004, 13:42 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
Железо действительно слабоватое. А InterSystems (поставщик Cache в России) хвастается, что установка СУБД Cache увеличила производительность по биллингу в 4 раза, и сравнение идет именно с ORACLE. Может быть, действительно имеет смысл с ними связаться? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2004, 15:44 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
777, а где именно в Oracle у вас тормоза? На каких именно операциях? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2004, 16:05 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
QuarkЧто-то мне кажется что автор2хP3-1,2GHz это все таки слабое железо. Взять например начинающий провинциальный МТС, дык они сразу начинают с 4-х процессорного Sun большой оперативкой только под биллинг(не считая прочих серверов для роумеров, смс, стандбаев и прочего). И при том что им на такой конфигурации не разрешают делать Hot billing, под hot отдельное железо. Garya Железо действительно слабоватое. А InterSystems (поставщик Cache в России) хвастается, что установка СУБД Cache увеличила производительность по биллингу в 4 раза, и сравнение идет именно с ORACLE. Может быть, действительно имеет смысл с ними связаться? Не, это всё экстенсивные пути решения :-) Хотелось прежде всего улучшений в идейном плане. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2004, 18:14 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
А вот в Германии такая система вообще на InterBase. И, говорят, тянет. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2004, 18:18 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
1777, а где именно в Oracle у вас тормоза? На каких именно операциях? Основные тормоза начинаются при обработке пакетов окончания сессий. Немного информации из предметной области: наша система обрабатывает три типа RADIUS-пакетов Access-Request - запрос пользователя на вход в сеть. Тут мы проверяем числится ли вообще у нас такой пользователь, есть ли у него деньги на счету, откуда он заходит (из нашей сети или пользуется роумингом), можно ли ему заходить в данный момент времени, предоставлять ему callback и т.д. и т.п. В конечном итоге мы принимаем решение пускать его или нет, плюс переводим его деньги во время, которое он может находиться в сети. Вес этой операции примерно 2-3 балла. Accounting-Request-Start - свидетельствует о том. что пользователь вошёл в сеть. Это довольно лёгкая оперция с весом 1. Accounting-Request-Stop - свидетельствует об окончании сессии. При этом мы получаем реальную длительность сессии, пересчитываем время в деньги, обновляем баланс пользователя и т.п. Это самая тяжёлая операция, весит 5-6 баллов. Наибольшую нагрузку создают Stop-ы. Плюс ещё операторы могут запускать в это время какие-то свои задачи: искать данные, выводить отчёты и т.п. Получаются интересные эффекты, н.п. если в сети где-то проблемы. Юзер дозванивается и видит что "интернет плохой" тут же отконекчивается и дозванивается снова и таких юзеров начинает перезванивать одномоментно очень много. На биллинг начинает валиться куча запросов, он начинает потихоньку затыкаться. Он ещё более-менее живой и как-то отзывается, но некоторые юзера не дожидаются окончания аутентификации и начинают звонить на HelpDesk - "нельзя доступиться в интернет". Тут ещё подключается и HelpDesk со своими запросами к базе - им надо проверить баланс пользователя, посмотреть историю соединений и выяснить почему этот юзер не может законектиться. Всё, после этого биллинг ложится окончательно. Плоюс ещё первые числа месяца, когда в эту же базу начинают вносить деньги и распечатывать счета и выписки по "горячим данным" за предыдущий месяц. Вобщем такие дела. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2004, 18:37 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
mvА вот в Германии такая система вообще на InterBase. И, говорят, тянет. А что за оператор и сколько там юзеров? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2004, 18:37 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
Судя по всему, к таблицам, в которых вся эта бодяга находится, прицеплены индексы. Возможно, даже много индексов. Они ускоряют выборку, но замедляют обновление информации. Что делать? Вариант 1. Разбивать информацию на части. В первую часть поступает оперативная информация, в ней желательно избавиться от интдексов, может быть, не от всех, но постараться минимизировать их набор. С определенной периодичностью в промежутки наименьшей загрузки информация из части 1 переливается в часть 2, в которой уже имеются все индексы, которые могут понадобиться. Выборка агрегатов совместно с оперативной информацией осуществляется по совокупности наборов. Поскольку количество информации в части 1 невелико, отрабатывать будет достаточно быстро и без индексов. Вариант 2. Модификация варианта 1. Вместо части 1 и части 2 выступает OLTP- и OLAP-системы с обратной связью. Обратная связь обеспечивает получение агрегатов в OLAP по совокупности OLTP и OLAP-хранилищ. С заданной периодичностью OLAP-кубы процессятся в периоды наименьшей нагрузки. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2004, 18:51 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
777ogAccounting-Request-Stop - свидетельствует об окончании сессии. При этом мы получаем реальную длительность сессии, пересчитываем время в деньги, обновляем баланс пользователя и т.п. Это самая тяжёлая операция, весит 5-6 баллов. Вам действительно необходимо TDR в CDR переводить на лету? Может лучше это отложенным batch'ем обрабатывать? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2004, 18:52 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
ЗЫ. Я не ораклоид, для ясности. Я представляю, как это можно реализовать в MS SQL, но технические подробности по ORACLE разжевать не смогу. Однако, полагаю, что в Oracle наверняка можно сделать не хуже, чем в MS SQL. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2004, 18:53 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
GaryaСудя по всему, к таблицам, в которых вся эта бодяга находится, прицеплены индексы. Возможно, даже много индексов. Они ускоряют выборку, но замедляют обновление информации. Автор меня конечно поправит если я не прав, но только неадекватный проектировщик будет индексировать колонки балансов (а именно они и обновляются). ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2004, 18:55 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
2 777og Вы вообще как тьюнингом занимались? На что смотрели-то? STATS Pack'ом пользовались? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2004, 18:57 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
Whateva 777ogAccounting-Request-Stop - свидетельствует об окончании сессии. При этом мы получаем реальную длительность сессии, пересчитываем время в деньги, обновляем баланс пользователя и т.п. Это самая тяжёлая операция, весит 5-6 баллов. Вам действительно необходимо TDR в CDR переводить на лету? Может лучше это отложенным batch'ем обрабатывать? Нашёл в гугле, что CDR - это Call Detail Record, а TDR - Transaction Data Record. Если Вам не трудно, Вы могли бы объяснить, что обозначают эти термины? Если я понял Ваш вопрос правильно, то имеется в виду нужно ли нам в реальном времени переводить время в деньги по окончании сессии? Вобщем-то говоря это очень желательно, т.к. большинство наших услуг являются предоплачеными и надо не дать пользователю возможности влезть в отрицательный баланс. Скажем если обсчёт завершившихся сессий будет отложен на 5 минут после окончания сессии, то мы либо должны запретить пользователю заходить в течение этих 5 минут (что не устроит пользователей, т.к. есть такие, которые "звонят в интернет" только чтобы проверить почту каждые 2 минуты с длительностью сессий по 40 секунд), либо его пустить и тогда он будет висеть в сети столько, сколько ему захочется (отключить мы его не можем, вернее можем, но не все наши сервера доступа позволяют это делать). Тут ещё есть такой момент - максимально быстро нам нужно обработать первый пакет - Access-Request, это создаст комфорт пользователю - он "быстро войдёт в сеть" и сервер доступа не будет задалбывать биллинг повторными пакетами Access-Request (если наш биллинг с ответом не укладывается в определённое время, то сервер доступа посылает повторный запрос и тем самым укладывает биллинг ещё больше). ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2004, 19:18 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
Whateva GaryaСудя по всему, к таблицам, в которых вся эта бодяга находится, прицеплены индексы. Возможно, даже много индексов. Они ускоряют выборку, но замедляют обновление информации. Автор меня конечно поправит если я не прав, но только неадекватный проектировщик будет индексировать колонки балансов (а именно они и обновляются). Балансы у нас конечно же не проиндексированы :-) Но у нас есть одна огромная таблица SessionLog, в которой хранятся все сессии всех пользователей за последние полтора месяца. С этой таблицей производится довольно много операций и её вклад в тормоза если не наибольший, то ощутимый. Garya подал очень хорошую идею с разделением данных на оперативные и статические. Надо только подумать как впишется разрезание SessuionLog-a в нашу бизнес-логику, нам надо просматривать SessuinLog полностью например для показа статистики пользователю, возможно ещё в нескольких местах. Вобщем надо будет подумать на эту тему. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2004, 19:32 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
Whateva2 777og Вы вообще как тьюнингом занимались? На что смотрели-то? STATS Pack'ом пользовались? Не могу сказать, т.к. я не ораклист. Тюнингом занималась наша DBA, с помощью чего она собирала статистику я узнаю завтра. Надо будет самому почитать что на эту тему советует оракловая документация. Если Вам не трудно, то посоветуйте чем лучше пользоваться и на что обращать особое внимание. Я вот сейчас проверяю хорошо ли стоится нашему ораклу. Активного обмена со свопом нет, да и своп не сильно занят, значит памяти ему хватает. Смотрю iostat-ом распеределение дисковой нагрузки по дискам и разделам. Есть некоторый дисбаланс между дисками: за период в 10сек по одному диску 20 wsec/s, по другому 8 wsec/s при скорости записи 10 vs 3 kb/s. Это можно поправить, но IMHO это не очень большая нагрузка на диски (там SCSI Ultra 160, к тому же на удивление мало чтений, неужели всё в памяти крутится?), так что если я сбалансирую диски, то всё равно сильно ему не полегчает. При этом загрузка процессоров довольно высокая 70-100% ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2004, 19:53 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
777og Whateva 777ogAccounting-Request-Stop - свидетельствует об окончании сессии. При этом мы получаем реальную длительность сессии, пересчитываем время в деньги, обновляем баланс пользователя и т.п. Это самая тяжёлая операция, весит 5-6 баллов. Вам действительно необходимо TDR в CDR переводить на лету? Может лучше это отложенным batch'ем обрабатывать? Нашёл в гугле, что CDR - это Call Detail Record, а TDR - Transaction Data Record. Если Вам не трудно, Вы могли бы объяснить, что обозначают эти термины? Если я понял Ваш вопрос правильно, то имеется в виду нужно ли нам в реальном времени переводить время в деньги по окончании сессии? Вобщем-то говоря это очень желательно, т.к. большинство наших услуг являются предоплачеными и надо не дать пользователю возможности влезть в отрицательный баланс. Скажем если обсчёт завершившихся сессий будет отложен на 5 минут после окончания сессии, то мы либо должны запретить пользователю заходить в течение этих 5 минут (что не устроит пользователей, т.к. есть такие, которые "звонят в интернет" только чтобы проверить почту каждые 2 минуты с длительностью сессий по 40 секунд), либо его пустить и тогда он будет висеть в сети столько, сколько ему захочется (отключить мы его не можем, вернее можем, но не все наши сервера доступа позволяют это делать). Тут ещё есть такой момент - максимально быстро нам нужно обработать первый пакет - Access-Request, это создаст комфорт пользователю - он "быстро войдёт в сеть" и сервер доступа не будет задалбывать биллинг повторными пакетами Access-Request (если наш биллинг с ответом не укладывается в определённое время, то сервер доступа посылает повторный запрос и тем самым укладывает биллинг ещё больше). CDR - грубо говоря результат сессии/звонка (т.е. какой клиент, куда, когда, сколько и т.п.). Одна запись на сессию/звонок. По ним балансы обновляют. TDR - это как проходила сессия/звонок (то что Вы получаете с Radius'а насколько я понимаю). Как минимум две записи (начал, закончил) на сессию/звонок. По ним формируются CDR. Т.е. я предложил рассмотреть построение в очередь запросов на формирование CDR (и соответственно обновление балансов) из TDR (и при возможности разнести их). Риск пустить клиента в минус конечно при этом есть, но Вы же как-то и сейчас проверяете возможные "проблемные" сессии (типа баланс на 5 минут а он висит уже пол часа), не так ли? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2004, 19:59 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
Whateva CDR - грубо говоря результат сессии/звонка (т.е. какой клиент, куда, когда, сколько и т.п.). Одна запись на сессию/звонок. По ним балансы обновляют. TDR - это как проходила сессия/звонок (то что Вы получаете с Radius'а насколько я понимаю). Как минимум две записи (начал, закончил) на сессию/звонок. По ним формируются CDR. Понял, спасибо. Whateva Т.е. я предложил рассмотреть построение в очередь запросов на формирование CDR (и соответственно обновление балансов) из TDR (и при возможности разнести их). Риск пустить клиента в минус конечно при этом есть, но Вы же как-то и сейчас проверяете возможные "проблемные" сессии (типа баланс на 5 минут а он висит уже пол часа), не так ли? Нет таких проверок не проводится, т.к. как я уже писал выше не всё оборудование позволяет принудительно отключать сессию. Эта проблема решается иначе: результатом успешной аутентификации клиента (т.е. мы его пускаем в сеть) является авторизационный пакет, который мы отправляем серверу доступа. В этот пакет мы заносим атрибут Session-Timeout с допустимым временем сессии. Это время мы рассчитываем исходя из имеющегося остатка на счету клиента. По истечении этого времени сервер доступа сам отключает клиента. Поэтому на момент запроса клиентом доступа в сеть нам важно знать его реальный остаток на счету. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2004, 20:24 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
авторА InterSystems (поставщик Cache в России) хвастается, что установка СУБД Cache увеличила производительность по биллингу в 4 раза Был както у них на презентации, слышал подобное). Но как это реализовано - все в секрете). Единственно что удалось внятного получить: для такого ускорения есть возможности писать данные напрямую в память обходя всякие "внутренние проверки" на соотвествие типов итп. То есть вся отвественность ложится на программиста. Представьте что будет если вы запишите в область памяти где int переменную char. В лучшем случае ваш биллинг повиснет выкинув всех пользователей( авторGarya подал очень хорошую идею с разделением данных на оперативные и статические. Надо только подумать как впишется разрезание SessuionLog-a в нашу бизнес-логику, нам надо просматривать SessuinLog полностью например для показа статистики пользователю, возможно ещё в нескольких местах. Вобщем надо будет подумать на эту тему или для начала можно просто добавить отдельных табличек с агрегатами за прошлые периоды. Типа самодельный ROLAP. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2004, 06:11 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
Whateva Вам действительно необходимо TDR в CDR переводить на лету? Может лучше это отложенным batch'ем обрабатывать? Не путайте человека, это все таки более телефонные термины, а не интернетовские. Вот если у ребят есть VoIP, но судя по их словам - нет.. Теперь по сути.. Опираясь на свой опыть могу с увереностью сказать, что задачка очень и очень непростая. В свое врем я был свидетелем и - отчасти - участником многочисленых попыток ускорить это дело, но увы.. Максимальная скорость авторизации, с учетом закрывающихся сессий - 8-10 клиентов в секунду.. Конечно, существенная модернизация железа облегчит вашу участь, но это не панацея, и когда нибудь аппраратные ресурсы тоже кончатся.. С точки зрения архитектуры в свое время возобладала такая точко зрения: модуль авторизации должен жить отдельно, и иметь собственные сведенья об остатках на счетах, достаточные для расчета допустимого времени соединения с высокой точностью. Сам же билллинг должен жить отдельно, там должна проводится подробная тарификация, выписка счетов, поплнеие балансов и прочее.. Такое решение в свое время было признано оптимальным на основе многолетнего опыта разработки билинга и многочисленных экпериментов. К сожалению, до реализации дело не дошло, поэтому я не могу сказать, насколько это решение правильное, но другого пути просто нет, по крайцней мере судя по той информации, которую Вы сообщили. В принципе, анализ структуры базы может показать и дргие пути ускорения работы, но это дело непростое.. Кроме того, если вы готовы оправдать некоторые неудобства для юзеров, то тут тоже можно отыскать пути к экономии ресурсов.. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2004, 14:45 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
Код: plaintext
- Deutche Telecom. На одном серваке примерно по 200 одновременно работающих (конкурирующих) юзеров. Естественно, транзакции очень короткие. ----------------------- Эту информацию стоит рассматривать как рекламу (шутка): ABACS - там описана архитектура комплекса. И, кажется, демка есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2004, 16:03 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
mv Код: plaintext
- Deutche Telecom. На одном серваке примерно по 200 одновременно работающих (конкурирующих) юзеров. Естественно, транзакции очень короткие. Биллинг Deutsche Telecom-а работает на Интербейзе? Вот это да! А ссылочку можно? А то я потыкался в гугле и по словам 'Deutsche Telecom Interbase billing' ничего подробного не нашёл. mv ABACS - там описана архитектура комплекса. И, кажется, демка есть. Спасибо, посмотрю. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2004, 16:43 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
Я читал об этом на сайте у FIB - плюсовцев, кажется. Они там все завернуты на InterBase (и я тоже :-), и, кажется, в прошлом году ездили в Германии - реаламировали свои компоненты доступа. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2004, 16:59 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
Maksim Chak С точки зрения архитектуры в свое время возобладала такая точко зрения: модуль авторизации должен жить отдельно, и иметь собственные сведенья об остатках на счетах, достаточные для расчета допустимого времени соединения с высокой точностью. Сам же билллинг должен жить отдельно, там должна проводится подробная тарификация, выписка счетов, поплнеие балансов и прочее.. Вобщем мы пока решили разделить SessionLog на две части - оперативную и "статическую". Оперативный SL будет неиндексируемым (т.к. в него будут частые инсерты и он будет небольшим), а статический проиндексируем (у него большой объём и из него производятся частые выборки, обновляться он будет редко). Может ещё выиграем что-нибудь за счёт тюнинга. Ещё мне подсказали, что 9-ый и 10-ый ораклы умеют перекомпилировать пакеты в нативный код, это ещё может дать какое-то ускорение. Если высвободившихся ресурсов будет достаточно, то организуем репликацию на другую машину всех таблиц кроме "горячих" (с оперативными данными, таких должно быть немного. Данные из "горячиех" таблиц будут ночью (во время минимальной нагрузки) переноситься в статические таблицы. Репликация должна будет позволить перенести печать отчётов, счетов, выписок и т.п. на другую машину и тем самым ещё больше разгрузить основной (авторизующий) сервер. Вот такие предварительные соображения. Ещё накачал статей с http://citeseer.ist.psu.edu может ещё из них удастся почерпнуть каких-нибудь идей. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2004, 17:30 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
авторGarya подал очень хорошую идею с разделением данных на оперативные и статические. Надо только подумать как впишется разрезание SessuionLog-a в нашу бизнес-логику, нам надо просматривать SessuinLog полностью например для показа статистики пользователю, возможно ещё в нескольких местах. Вобщем надо будет подумать на эту тему. статическую часть разбить на партиции, а вообще это слишком обстрактный разговор. если вы не видете страшных архитектурных ляпов значит тут все таки бОльшая проблема с тюнигом/железом. если вы не тянете RAC но стэндбай же у вас есть ! (если нет то не понятно как вы от сбоев железа защищаетесь) раз есть стендбай - то все отчеты туда. дальше если проблема с хелпдеском - профайлер, не давать хелпдеску грузить проц более чем на 10-20%. а ну и главное - вы должны/обязаны выяснить какие запорсы/процедуры грузят сервер и только после этого решать, а то ведь наверника у вас в 2-3 запросах просто забыли биндингс а вы архитектуру менять ... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2004, 18:55 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
2 777og: Привет! 777og Где можно можно почитать об архитектурах построения высокопроизводительных биллингов для операторов связи? Думаю врядли найдети что-то стоющее. Либо это будет системы >1M-10M$, либо "что-то еще". Ладно, это так. Поискать можно, скорее нужно, чтоб посмотреть "как у других". Смотрите case studies, кто-что использовал и что им это дало и за сколько :-) Тепер по порядку. 1) Тут уже было сказано, что лучьше логи хранить на отдельном серваке. Абсолютно согласен. Это нетолько разгрузит основной сервер базы данных, но позволит Вам в дальнейшем организовать archive-сервера... 2) По самой бизнес-логике: 777og Вся бизнес-логика реализована в виде хранимых процедур Для того чтоб проверить 777og запрос пользователя на вход в сеть. Тут мы проверяем числится ли вообще у нас такой пользователь, есть ли у него деньги на счету, откуда он заходит (из нашей сети или пользуется роумингом), можно ли ему заходить в данный момент времени, предоставлять ему callback и т.д. и т.п. В конечном итоге мы принимаем решение пускать его или нет, Нет необходимости вызывать sp. Здесь должено быть просто, на столько, на сколько это возможно. Типа 1 SELECT => знаем: можно или нет. Так как правило, много "левых" запросов, а их нужно очень быстро отбивать. 777og , плюс переводим его деньги во время, которое он может находиться в сети. Это дорогостоющая операция. Кроме как memory cache на accounting server'e (radius -> acc.server <- db ) Вам не даст ощутимый прирост производительности. Конечно, тут придеться позаботиться о синхронизации memory <- db... Можно еще смотреть в сторону полной денормализации тарифов, чтоб легче по ним было искать и считать, но это частный случай и не факт, что он даст выигрыш. 777og Accounting-Request-Stop - свидетельствует об окончании сессии. При этом мы получаем реальную длительность сессии, пересчитываем время в деньги, обновляем баланс пользователя и т.п. Это самая тяжёлая операция, весит 5-6 баллов. Аналогия c деньги -> время. Плюс, можно еще по думать о messaging server'e (a-ля WebSphere MQ или другое). Это может стать гарантом, что у Вас будет определенный performance на подсчет (типа 50 request/second), а также невызовет overflow всей системы. Просто radius "отдаст" информацию в очередь messasing server'у, а уже другая прога по своей возможности будет "брать и считать" и разблокирует клиента. Вообщем, "место для разгона" есть, только конечно многое зависит от людских и технических ресурсов, времени и т.д. Но начинать, imho, надо с простых вещей. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2004, 13:29 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
SEMA { http://www.boardwatch.com/document.asp?doc_id=37521 } Rating ~ 6 [ max 10] Use ~2500 concurrent transactions : 4 500 000 clients 3D rateplan tree Basic:: Oracle 8i Antenne :: Oracle 9i & Sybase Ещё мне подсказали, что 9-ый и 10-ый ораклы умеют перекомпилировать пакеты в нативный код, это ещё может дать какое-то ускорение. WELL!! Можно еще смотреть в сторону полной денормализации тарифов, чтоб легче по ним было искать и считать, но это частный случай и не факт , что он даст выигрыш ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2004, 18:46 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
2 777og: 1. Какая реальная нагрузка на ваш сервер - сколько запросов на авторизацию/минуту, сколько accounting-запросов/минуту ? 2. Можете дать краткие характеристики самых тяжелых таблиц, к которым обращаются ваши SP в момент авторизации? Информация вида - размер на диске, число записей, число индексов, наличие триггеров и пр. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2004, 11:34 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
Wireless2 777og: 1. Какая реальная нагрузка на ваш сервер - сколько запросов на авторизацию/минуту, сколько accounting-запросов/минуту ? 2. Можете дать краткие характеристики самых тяжелых таблиц, к которым обращаются ваши SP в момент авторизации? Информация вида - размер на диске, число записей, число индексов, наличие триггеров и пр. 1. Померял за 30минут: получается около 20авторизаций/минуту и 34 акаунтингов/минуту (без разбивки на старт/стоп). Но это не показательная статистика, т.к. народ сейчас действительно вяло работает - отпуска, каникулы и т.п. Сервер сейчас загружен где-то только наполовину. 2. Из больших таблиц в аторизации учавствуют SessionLog (~600тыс. записей) - в основном выборка/обновление/вставка, user_totals (~160тыс.) - в основном выборка/обновление, таблица юзеров (~30тыс.) - в основном выборка. Деталей по поводу размера на диске, триггеров и индексов, честно говоря, не знаю. Выяснение деталей у нашего DBA имеет свои м-м-м, скажем так, свои сложности. Даже глядя на эти цифры (пускай даже если их и умножить на 3) видно, что объёмы не очень серьёзные. И реального прироста производительности можно добиться, как правильно заметил Aion простыми вещами типа грамотной организации данных, индексов и т.п. Осталось в этом убедить нашего DBA :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2004, 13:48 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
777og Деталей по поводу размера на диске, триггеров и индексов, честно говоря, не знаю. Выяснение деталей у нашего DBA имеет свои м-м-м, скажем так, свои сложности. Даже глядя на эти цифры (пускай даже если их и умножить на 3) видно, что объёмы не очень серьёзные. И реального прироста производительности можно добиться, как правильно заметил Aion простыми вещами типа грамотной организации данных, индексов и т.п. Осталось в этом убедить нашего DBA :-) Грм.. Объем действительно не слишком велик.. Оптимизация запросов если и не спасет отца русской демократии, то сильно ему поможет :-) А вот то, что Вашего DBA надо в этом убеждать.. Это очень плохо. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2004, 10:07 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
Привет всем.. Тут в форума прошла реплика, что МТС на начальном уровне ставит "тяжелое" железо. Я думаю, это из-за того, что они ставят ПО от CBOSS, а оно у них действительно "тяжелое" из-за сильной денормализации... В качестве советов для Оракла, я еще не встретил тут высказаваний по поводу применения partition table. Это ведь тоже может дать определенный выигрыш при правильной стратегии ее построения.. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2004, 10:26 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
Всем привет. 2 777og Те данные, которые Вы тут привели (характуристики системы, железо и т.д.), наводит (точнее доводит) мои мысли до следующего: - та техника, что у Вас имееться должна справляться с поставлеными задачами - большие проблемы не толко в организации данных но и в их обработки конечно, я могу и ошибаться... :-) А вообщето неплохо бы посчитать стоимость одной единицы. Т.е. сделать некий простой тест, который Вам даст результаты (сурогатные) типа: мах производительность, сколько нужно времени для обработки одной единицы (если с системой никто неработает, работают 10/100/1000 пользователей). Это еще может Вам дать аргумент для админа, типа: "Вот видишь, наш Oracle обрабатывает 1 request в секунду!!! Если в системе будут 100 пользователей, то 100-й пользователь будет ждать антификации 40 секунд!!!!" :-)))) 2 Ekuku partition table - это да, действительно может помочь, тот же SessionLog хранить в сегментах разделеные по месяцам (или как там это правильно в Oracle называеться) В вот по поводу MTC, думаю здесь больше вопрос в том что, система начинает себя оправдывать при 500 000 calls per day(как пример). Ну или типа того. Это как: "Если хотите одновреммено возить 1 т или 15 т апельсинов на одной машине, то нужно Вам именно фура, а не микробас" :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2004, 11:23 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
AionВсем привет. 2 777og Те данные, которые Вы тут привели (характуристики системы, железо и т.д.), наводит (точнее доводит) мои мысли до следующего: - та техника, что у Вас имееться должна справляться с поставлеными задачами - большие проблемы не толко в организации данных но и в их обработки Согласен. Будем исправлять. Aion А вообщето неплохо бы посчитать стоимость одной единицы. Т.е. сделать некий простой тест, который Вам даст результаты (сурогатные) типа: мах производительность, сколько нужно времени для обработки одной единицы (если с системой никто неработает, работают 10/100/1000 пользователей). Это еще может Вам дать аргумент для админа, типа: "Вот видишь, наш Oracle обрабатывает 1 request в секунду!!! Если в системе будут 100 пользователей, то 100-й пользователь будет ждать антификации 40 секунд!!!!" :-)))) Вот по этому поводу я и думал. Хочется вокруг нашего биллинга построит систему мониторинга, отображающую качество обработки поступающих запросов. Я имею в виду следующее: скорость обработки одного запроса (Dt) - время между приходом пакета на интерфейс и уходом пакета с ответом на пришедший запрос. Можно получить Dt_auth, Dt_start, Dt_stop. Dt_auth имеет смысл разбить на Dt_accept и Dt_reject, т.к. Reject пакеты имеет смысл задерживать (увеличивать Dt_reject) намеренно для защиты от флуда пакетами н.п. с подбором пароля, а борьба за минимизацию Dt_accept для нас имеет очень важное значение :-) Аналогично с Dt_start и Dt_stop, они являются показателями качества алгоритмов обработки и настроек базы, с одной стороны, и позволяют правильно выбрать время для ретрансмита пакетов на серверах доступа с другой стороны. количество поступивших на обработку пакетов (N_access, N_start, N_stop) - с этип понятно. некую относительную характеристику (dt_accept, dt_start, dt_stop) - аналогичную первой, но учитывающую количество поступивших запросов. Имеется в виду следующее: если к нам поступает 3 пакета в течение 3 минут (DT = 3 мин) с интервалом в 20 секунд, то даже на самом хилом железе и на криво настроенной базе мы их сможем обработать с Dt_accept = 1сек. Если к нам за DT=3мин приходит 30 пакетов, то мы их можем обработать скажем за Dt_accept = 1,5сек, в случае 300 пакетов Dt_accept = 5сек. Поскольку DT=const, хилость_железа=const, то полученные Dt_accept(300) - Dt_accept(3) = 5 - 1 = 4 сек являются показателем неадаптированости алгоритмов обработки и настроек базы к данной нагрузке (чего нам собственно говоря и хочется узнать). Смотреть на график Dt_auth(t) и совмещать его с N_auth(t) неудобно, поэтому хочется относительную характеристику dt_accept(t) и аналогичные ей. Только я не могу придумать как её определить. количество необработанных запросов (N_access_dropped, N_start_dropped, N_stop_dropped) - количество тех пакетов, на которые сервер вообще не ответил. По полученным данным можно потом ещё строить гистограммы/распределения вида: - количество обработанных запросов N за определённый Dt. В идеале эти распределения должны иметь вид дельта-функций :-) - Dt от количества запросов и т.п. Может мне не стоит изобретать велосипед, и уже есть ряд ТТХ, характеризующих подобные системы? Где об этом можно почитать? Мне это нужно для того, чтобы можно было определить эффективность тех или иных мероприятий по оптимизации биллинга и что бы можно было строить прогнозы на предмет того сколько ещё пользователей можно добавить без существенной потери в производительности и без апрейта железа. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2004, 13:13 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
радует сколько народа интересуется биллингами.. почитав всю бодягу могу сказать автору треда следующее - купите другой биллинг. я в свое время написал и продал десяток биллингов под Вокалтек на сиквеле и оракле. оракл отрабатывал до 200 запросов в секунду (больше не могу сказать так как не было нагрузок выше) без видимых задержек. железо было - компак сервер 1.2 / 512 рам / скази диск зеркало. с твоей нагрузкой и железом все должно летать.. остальное - просто теория хорошая для форумов "оракл" и "сиквел". если ты не в курсе что сидиар есть то писать свой биллинг - предприятие безуспешное даже расчитывая на русские дешевые ресурсы. на крайняк заплати умельцам пусть поставят что то ломанное типа майнда. я не рекомендую но другие ставят и вроде работает но у меня лично от майнда зубы болят. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2004, 20:07 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
777og Снимите трейс со стопа/старта и много вопрос сразу отпадет (там наверное и про неразделенный loqsession будет написано :) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2004, 22:30 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
2 777og Рекомендовать что-то из "monitoring tools for billing solutions" не могу, так как сам толком ничего и ничитал из этого. Да и нужно ли это? Написать monitoring систему, которая умело то-и-все, это можно сказать сделать 2-ой биллинг :-))) Если у Вас есть проблемы - решайте их. Если Вы проектируете систему - думайте о проблемах... 2 Полуэкт Купить дело хорошее, но слабо я верю что "они" найдут то что нужно. Почему-то у меня такое впечатления складываеться. Либо это будет приемлемо по деньгам - но лажа по features, либо это будет то что надо - но $$$ :-) То что "они" мало знают что-есть-что - вопрос времени. Биллинг уже свой-то сделали :-) А MIND дело хорошее, только вот если ломаный вариант почему-то перестанет работать - бизнес можно закрывать :-))) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2004, 11:04 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
не согласен. радиус-биллинг можно купить за штуку-две-три сегодня. при нынешних ценах на программистов даже в россии это уже не слишком большая цена для нормального бизнеса т.к. потери на биллинге могут составить эти же самые 2-3 штуки уже за месяц. я например написал биллинг свой именно потому что черные братья вставили меня на 900 баксов на том что последний звонок не завершался по истчении баланса и негритята быстро это скоцали и звонили на последнюю минуту по часу а потом терялись. майнд даже если встанет что вполне вероятно то есть много вариантов. 1. найти того кто его продал и заставить поднять. 2. поставить другой биллинг и слить клиентов из майнда т.к. он на оракле и там в принципе ничего сложного нет выцепить юзеров и балансы. так что ничего катастрофического нет.. уверен что за тот год что я вышел из воип бизнеса уже есть и другие более приятные софты с возможностью поломать. есть несколько людей специализирующихся на ломании воип софтин включая биллинги. один из них из латвии кстати ;) Андриус. второй из .. не скажу откуда т.к. это мой кореш :) но сам к краку отношения иметь не хочу :) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2004, 19:02 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
777ogHi, All! Где можно можно почитать об архитектурах построения высокопроизводительных биллингов для операторов связи? Я работаю в ISP и являюсь одним из авторов нашего биллинга. По функциональности он нас устраивает, но есть проблемы с производительностью. Чувствую, что с ростом числа клиентов наш биллинг начнёт загибаться. Сейчас это построено по следующей схеме: есть сервер, собирающий данные о сессиях клиентов (RADIUS) сервер БД (Oracle) хранит данные о сессиях клиентов, их счета и т.п. рабочие места операторов, с которых заводятся/удаляются клиенты, производится рассылка счетов и т.п. Вы случайно не на Рязанке сидите? Где-то я уже про этот набор слышал... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2004, 20:20 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
777og Maksim Chak С точки зрения архитектуры в свое время возобладала такая точко зрения: модуль авторизации должен жить отдельно, и иметь собственные сведенья об остатках на счетах, достаточные для расчета допустимого времени соединения с высокой точностью. Сам же билллинг должен жить отдельно, там должна проводится подробная тарификация, выписка счетов, поплнеие балансов и прочее.. Вобщем мы пока решили разделить SessionLog на две части - оперативную и "статическую". Оперативный SL будет неиндексируемым (т.к. в него будут частые инсерты и он будет небольшим), а статический проиндексируем (у него большой объём и из него производятся частые выборки, обновляться он будет редко). Может ещё выиграем что-нибудь за счёт тюнинга. Ещё мне подсказали, что 9-ый и 10-ый ораклы умеют перекомпилировать пакеты в нативный код, это ещё может дать какое-то ускорение. Если высвободившихся ресурсов будет достаточно, то организуем репликацию на другую машину всех таблиц кроме "горячих" (с оперативными данными, таких должно быть немного. Данные из "горячиех" таблиц будут ночью (во время минимальной нагрузки) переноситься в статические таблицы. Репликация должна будет позволить перенести печать отчётов, счетов, выписок и т.п. на другую машину и тем самым ещё больше разгрузить основной (авторизующий) сервер. Вот такие предварительные соображения. Ещё накачал статей с http://citeseer.ist.psu.edu может ещё из них удастся почерпнуть каких-нибудь идей. Мой вам совет, отложить какие-либо дополнительные архитектурные решения до того момента, когда вы будете четко представлять в чем заключаются ваши текущие проблемы с производительностью. Поверьте, за семь лет я насмотрелся на таааакие кульбиты со стороны разработчиков в разных компаниях. В результате там, где нужно было сделать всего лишь точечные действия, строились такие небоскребы, которые в конечном счете из простой, стройной системы делали неповоротливых монстров. Через пару лет уже кто-либо вообще боялся трогать некоторые модули, поскольку разобраться зачем и для чего накручены разные навороты уже никто не мог. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2004, 20:34 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
2 Полуэкт Хм. Сами говорите типа за 1-2 K можно купить, а пишите все-таки свое :-) За это деньги, биллинг будет - г...о (извеняюсь за выражение) Хотя конечно, если кому-то в нынешнии времена нужно посчитать минутный тариф на длительность и все, то можно конечно и так. А по поводу MIND не MIND, это уже дело каждого кто-и-за-что использует. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2004, 15:25 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
1. Партицировать таблицу по дню, доступ будет быстрее в разы. Индексы тоже быстро будут обновляться. 2. Внимательно посмотреть все запросы. Всегда есть один запрос, который грузит сервак на 100% на полчаса, а после небольшой переделки он уже грузит на 25% и на 10-15 сек :) 3. Обработку, по крайней мере начальную, производить не на оракле, а в памяти. Написать простейшую прожку на плюсах, которая "держит" балансы абонентов и дает быстрые ответы "брать, на сколько/не брать". 4. Обновления и т.д. делать по rowid, запись искать, как Том Кайт завещал, по наличию в индексе, по окончанию обработки из индекса выкидывать (null значение соотв. полю) 5. В принципе тарифные планы и т.д. я бы тоже рекомендовал загрузить в прожку на плюсах, чтобы она делала маленький select записи, ее тарифицировало и делало пару маленьких update-ов Вроде все, Удачи! ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2004, 19:10 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
Да, и еще... Оракл разработчикам-таки учить надо, особенно разработчикам hot-биллингов. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2004, 19:12 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
По-моему, лучше не на плюсах, а создать JBean на PK ( сведения о клиенте он держит в ОЗУ ). Да, использование ODBC дает дополнительные тормоза, не забывайте. Больше использовать об'екты. Вообще, не замедляйте работу БД Oracle стилем запросов ( SQL92 ). ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2004, 14:22 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
Внимательно посмотреть на: 1. materialized view on prebuilt partitioned table (для SessionLog) + materialized view log 2. TimesTen®/Cache – Real-Time Dynamic Data Caching System (TimesTen/Cache (Cache) includes in-memory database and data exchange technologies. Together, they enable applications to combine the real-time performance of TimesTen with the large storage capacity of an RDBMS (currently Oracle) www.timesten.com - очень сильная вещь. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2004, 14:28 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
Aion2 Полуэкт Сами говорите типа за 1-2 K можно купить, а пишите все-таки свое :-) За это деньги, биллинг будет - г...о (извеняюсь за выражение) Хотя конечно, если кому-то в нынешнии времена нужно посчитать минутный тариф на длительность и все, то можно конечно и так. ну вопервых я написал его тогда когда был один Майнд на рынке и стоил он 350 штук (мне со скидкой для совка предлагали его за 200). так что выбора не было и поломать его тогда еще никто не догадался. а что делают современные биллинги? просто интересно. что считается последним писком моды? я когда уходил - народ остро нуждался в надстройках для реселлеров - что бы биллинг считал по трем тарифам - клиент, терминирующий партнер и реселлер (тот кто снимает копейку с клиента). а что нонче ценится? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2004, 21:58 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
ну вопервых я написал его тогда когда был один Майнд на рынке и стоил он 350 штук (мне со скидкой для совка предлагали его за 200). так что выбора не было и поломать его тогда еще никто не догадался. Понятно. а что делают современные биллинги? просто интересно. что считается последним писком моды? я когда уходил - народ остро нуждался в надстройках для реселлеров - что бы биллинг считал по трем тарифам - клиент, терминирующий партнер и реселлер (тот кто снимает копейку с клиента). а что нонче ценится? Считают они, что им больше делать ;-) По "писком моды" - даже и незнаю что и сказать. Все цениться, чем больше всего, тем лучше, типа: навороты в подсчетах, "куча мола" цифр (коэф.,тиков,пиков,тарифов,шагов...) , из который появляеться суммы :) ; интерфейс пользователя (репорты,графики) и т.д. и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2004, 18:36 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
EkukuПривет всем.. Тут в форума прошла реплика, что МТС на начальном уровне ставит "тяжелое" железо. Я думаю, это из-за того, что они ставят ПО от CBOSS, а оно у них действительно "тяжелое" из-за сильной денормализации... В качестве советов для Оракла, я еще не встретил тут высказаваний по поводу применения partition table. Это ведь тоже может дать определенный выигрыш при правильной стратегии ее построения.. Чтобы это дало хороший результат, приложение должно быть изначально спроектировано с учетом partitioning'a. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2004, 23:50 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
Разруха - в головах (С) Проф. Преображенский. Если разработчик системы не может внятно сформулировать что и как происходит в БД и где именно возникают проблемы производительности, то мы имеем дело с проблемой не технического характера, а организационного. Разработчик биллинговой (или любой другой "тяжелой" по БД) системы должен прежде всего хорошо разбираться в "родной" СУБД. Особенно в случае если бизнес-логика реализована в виде хранимых процедур (правильное решение, кстати). Сначала писать приложение а потом его тюнить - нездоровый подход. Производительность должна быть с самого начала заложена в дизайн и протестирована на прототипе. Проблемы с производительностью у данной конкретной системы могут быть по миллиону причин: - неадекватность железяки задаче (не поможет никакая СУБД) - неоптиальная логическая структура БД - неоптиальная физическая структура БД - неоптимально или бездумно спроектированные транзакции - ... Когда тюнингом занимаются DBA а резработчики не в курсе что конкретно делают DBA, мне лично все ясно. Это называется раздрай, и переход с Оракла на что-то другое не улучшит ситуацию. Ибо проблема - не в Оракле. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2004, 04:14 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
Доброго времени суток возможно я не очень подробно прочитал но я не увидел о каком типе билинга идет речь prepay (карточный) или repayment (по сроку) у обоих типов принципиально разная логика и разные слабые места поэтому их по разному нужно оптимизировать в принципе общей проблемой для обоих типов являеться агрегирование входящей информации и обработка тарифных планов для prepay требуеться оптимизация обработки тарифных планов и генератор скриптов соединения а для repayment агрегирование входящей информации ну у меня есть такие рекомендации для repayment пишеться агрегирующий фильтр который подготавливает набор данных для инсерта в оперативную таблицу это приведет к тому что уменьшеться число инсертов да и количество входящих данных затем данные агрегируясь переходят в ращетную таблицу где уже обрабатываються с учетом тарифных планов а для prepay единственной пока рекомендацией есть такая рекомендация генератторы скриптов дозвона (соединения) выносяться во внешние процедуры с возможностью fork`а чтоувеличит число транзакций но даст возможность справиться с пиковой нагрузкой звонков если что пинайте icq:117356538 может чем помогу ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2004, 05:04 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
QuarkБыл както у них на презентации, слышал подобное). Но как это реализовано - все в секрете). Единственно что удалось внятного получить: для такого ускорения есть возможности писать данные напрямую в память обходя всякие "внутренние проверки" на соотвествие типов итп. То есть вся отвественность ложится на программиста. Представьте что будет если вы запишите в область памяти где int переменную char. В лучшем случае ваш биллинг повиснет выкинув всех пользователей( Нет, там не совсем так - есть один-единственный тип данных - строка.И "более сложная строка" - список (типа дин. массива.). Плюс многомерные разреженные массивы. А ко всему этому - классовые обёртки - очень удобно. Но для быстроты можно что-то (конечно, это надо толково вписать в архитектуру) можно сделать ручками. Алексей Буйницкий3. Обработку, по крайней мере начальную, производить не на оракле, а в памяти. Написать простейшую прожку на плюсах, которая "держит" балансы абонентов и дает быстрые ответы "брать, на сколько/не брать". 4. Обновления и т.д. делать по rowid, запись искать, как Том Кайт завещал, по наличию в индексе, по окончанию обработки из индекса выкидывать (null значение соотв. полю) 5. В принципе тарифные планы и т.д. я бы тоже рекомендовал загрузить в прожку на плюсах, чтобы она делала маленький select записи, ее тарифицировало и делало пару маленьких update-ов Вроде все, Удачи! Такую-вот вещь можно сделать на встроенном языке Cache' - довольно-таки богатые возможности у него. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2004, 14:28 |
|
Архитектуры высокопроизводительных биллингов
|
|||
---|---|---|---|
#18+
777og авторУ меня складывается такое впечатление, что у нас где-то допущена архитектурная ошибка и строить это надо было несколько иначе. Например ввести буферную лёгкую базку (типа MySQL) для хранения оперативных данных ("сырые" данные для последующего обсчёта) и данных по клиенту, достаточных для его быстрой аутентификации Хм . Помню делали биллинг где как раз использовалась буферная база для Radius. Radius настроили так, чтобы он сам обращался к этой БД для обработки AuthRequest, для записи данных о сессии и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2004, 19:00 |
|
|
start [/forum/topic.php?all=1&fid=29&tid=1528660]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
47ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
75ms |
get tp. blocked users: |
2ms |
others: | 233ms |
total: | 407ms |
0 / 0 |