Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование под Linux (24-11-2004)


Информационный Канал Subscribe.Ru

Здравствуйте дорогие подписчики рассылки "Программирование под Linux" !!!
 ....----==== http://www.firststeps.ru/linux ====----....

Горячо приветствую всех подписчиков рассылки. Мы давно с Вами не виделись, но думаю сейчас будем видеться чаще.

Думаю Вы согласитесь с истиной того, что теория без практики - ничто. Я бы даже сказал, что практика постоянно требует новой теории. Нет ничего лучше для обучения, чем сесть за разработку большого проекта, и по крупицам узнавать все нужное для его реализации. Поэтому предлагаю учиться программировать под Linux на основе проекта - "биллинговая система".

Почему именно это ?! Ну, во-первых, это не просто, поэтому интересно и потребует большого количества знаний.

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

В-третьих, я еще нигде не видел описания этого процесса :) Каждый познает его ценой собственных набитых шишек, а ведь совместно можно создать хорошую биллинговую систему доступную всем и бесплатно (сила Open Source)...

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

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


Болтология aka Вступление

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

И вот среди всех людей, занимающихся подсчетом трафика, есть люди, а точнее говоря компании, для которых точный подсчет трафика является жизненной необходимостью. Конечно же я имею в виду мелких и крупных интернет провайдеров, которых сейчас развелось большое множество благодаря появлению домашних сетей различных размеров. Да и вообще бурному развитию отрасли передачи данных, ведь в цифровой век от продажи информации можно получить большую прибыль...

Статей и форумов посвященных этой теме в интернете полно, но почему-то я до сих пор не видел детального и полного описания всей подноготной этого процесса. Почему-то люди, которые съели на этом деле не то, что собаку, а может быть и целую стаю, не желают делиться своим опытом с теми "начинающими" администраторами, которые не понимают в этом деле ничего. Очень часто видны правильные советы в каком направлении двигаться, но чтобы разобраться во всем этом требуется очень много времени. А так как в большинстве случаев запустить подсчет трафика требуется в течение нескольких дней, практически для всех эта задача является практически невыполнимой.

Опустив руки большинство администраторов начинает нервно рыскать в интернете, биясь в конвульсиях от желания найти готовое работающее решение. А амплитуда этих конвульсий все больше увеличивается вместе со все возрастающими ценами и все уменьшающимся бюджетом :) Скажу Вам как доктор, не ищите, все равно не найдете того, что сможет Вас полностью удовлетворить! Либо функции будут сильно ограничены, либо их будет так много, что разобраться будет невозможно. Либо все это хозяйство будет очень дорого стоить, а внедрение новых возможностей будет требовать уйму времени и денег.

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

Многим возможно кажется, что подсчет трафика это простой подсчет пакетов, которые пришли в компьютер. Смею Вас заверить в том, что в целом это так и есть, однако если копнуть глубже, то трафик можно разделить на несколько типов: почтовый, вебный, мультимедийный и т.д. А если еще учесть, что за каждый из этих трафиков могут отвечать разные программы и даже компьютеры, то возникает совсем не тривиальная задача связывания всей этой кухни в одно целое. Прибавьте ко всему этому контроль денег на счете и возможность блокирования услуг и наша затея превращается не в разработку программы подсчета пакетов, а в разработку десятков программ имеющих общее название "биллинговая система". Поэтому готовьтесь к тому, что все будет не просто и придется сталкиваться с совершенно разными задачами имеющими различные по сложности решения.

Итогом работы будет готовая и работающая биллинговая система, которая сможет удовлетворить требованиям большинства администраторов. Те, у кого нет времени и денег смогут ее использовать сразу, а те у кого есть желание смогут по подробнейшему описанию принципов работы во всем самостоятельно разобраться и создать собственную биллинговую систему.

Еще я намеренно не хочу поднимать актуальный для провайдеров вопрос, о сертифицированности биллинговой системы. Законы в России далеки от совершенства и Министерство Связи по природе своей только вставляет палки в колеса всякими ограничениями, лицензиями и т.д, тем самым мешая отрасли "связи" нормально развиваться. Проблемы в этой бюрократической сфере огромные, и конечно же сертификация биллинговой системы вопрос очень важный. Но лично мое мнение такое... Оно возможно противоречит здравому смыслу государственных чиновников, но все же открытость исходников и понятные алгоритмы работы это более чем сертификат. Кто сомневается в правильности работы системы пусть сам найдет эти ошибки. К тому же исходные тексты позволят вместе найти все ошибки и сделать систему более устойчивой. А вот чего ждать от платных и закрытых систем, не знает никто. У меня почти еженедельно случаются разного рода проблемы в биллинговой системе, и если бы ее написал не я, то скорее всего все просто рухнуло бы и все. Любое неумелое действие может "уронить" систему, а поднять без помощи разработчиков будет очень сложно, так как ошибка может сидеть достаточно глубоко.

Цель наша не сертифицировать биллинговую систему, а разработать ее. Большинству сертификаты не нужны, а тем кому это необходимо, сами его получат на свою собственную разработку. Так что вперед... !!!


Пользователи и их аккаунты

Биллинговая система предназначена для подсчета количества предоставленных услуг, поэтому центральным объектом системы стоит потребитель этих услуг. Опишем "пользователя" системы следующим образом (users):

  • id - (целое без знака) - идентификатор пользователя;
  • group_id - (целое без знака) - идентификатор группы пользователя;
  • name - (строка) - имя пользователя;
  • phone - (строка) - контактные телефоны;
  • address - (строка) - адрес пользователя;
  • details - (строка) - дополнительные данные для информации;
  • create - (дата и время) - дата создания записи;
  • modify - (дата и время) - дата изменения записи;

Далее для удобства использования стоит ввести группы пользователей. Это упрощает разделение большого количества пользователей по каким-то признакам, например физические и юридические лица, сотрудники компании, администраторы и т.д. (groups):

  • id - (целое без знака) - идентификатор группы пользователей;
  • name - (строка) - название группы пользователей;
  • details - (строка) - дополнительная информация;
  • create - (дата и время) - дата создания записи;
  • modify - (дата и время) - дата изменения записи;

Следующим важнейшим объектом системы является счет(аккаунт) пользователя. В счете пользователя много нюансов, которые каждый для себя решает сам. Например, обычно один пользователь имеет один счет, но если взять компанию или семью, то теоритически одним счетом могут пользоваться несколько пользователей системы, т.е. несколько сотрудников фирмы или членов семьи. Тогда возникает резонный вопрос "стоит ли ограничивать каждого такого пользователя". Вобщем-то резонный ответ "стоит". Например, отец семейства кладет на общий счет какую-то сумму денег и для двух сыновей устанавливает лимит потребления услуг, к примеру старший может истратить 70% имеющихся средств, а младший только 30%. Следующая возможность - это кредит. Очень удобно пользователю, который не имеет возможности вовремя пополнить счет, дать возможность работать в кредит. Тогда у Вас в любое время все пользователи могут начать работу, а не ждать неделями, пока через банк пройдет платежка об оплате. Так же не плохо предусмотреть возможность внесения каких-то призовых или подарочных средств на счет, для проведения розыгрышей, рекламных акций и т.д. Думаю не следует путать такие "виртуальные" деньги с настоящими, иначе не возможно будет сравнить отчет по поступившим средствам в биллинговой системе и состоянием кассы или счета в банке. Поэтому счет может выглядеть так (accounts):

  • id - (целое без знака) - идентификатор счета;
  • money - (вещественное) - количество денег на счету;
  • credit - (вещественное) - количество денег для работы в кредит;
  • present - (вещественное) - количество денег в "подарок";
  • create - (дата и время) - дата создания записи;
  • modify - (дата и время) - дата изменения записи;

И привязка пользователя и счета (account_user):

  • user_id - (целое без знака) - идентификатор пользователя;
  • account_id - (целое без знака) - идентификатор счета;
  • limit - (вещественное) - лимит использования счета (коэффициент от 0 до 1);
  • create - (дата и время) - дата создания записи;
  • modify - (дата и время) - дата изменения записи;

Для удобства работы со счетом нужна дополнительная таблица истории изменения счета, в которую будут записываться все действия со счетом, например занесение средств, списание средств, установка лимита и т.д. Поля в такой таблице могут быть следующими (account_history):

  • account_id - (целое без знака) - идентификатор счета;
  • date - (дата и время) - дата внесения изменения;
  • code - (целое без знака) - код выполняемой операции (занесение, списание и т.д.);
  • value - (вещественное) - значение параметра операции (рубли);
  • old_value - (вещественное) - старое значение обрабатываемого поля (рубли);
  • admin_id - (целое без знака) - идентификатор администратора, внесшего изменения;

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

Давайте сконцентрируемся пока на задаче подсчета пакетов и разработаем для этой части биллинговой системы нужные таблицы.


Количество подписчиков: Рассылка 'Программирование под Linux'

Выпуск подготовил: Кузин Андрей (kuzinandrey@yandex.ru)

http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.linux
Отписаться

В избранное