Средний пользователь Интернет видит в сети около 200 рекламных объявлений в день. Такое количество разнообразных рекламных сообщений создает высокий уровень информационного «шума», от которого опытные пользователи хорошо научились абстрагироваться. Из-за этого эффективность объявлений заметно снижается, приходится постояно искать новые более заметные форматы объявлений, которые способны пробраться сквозь рекламный «шум».
И в поисках новых форматов рекламщики вспомнили про старое доброе «сарафанное радио», которое существует уже не одно столетие. Так в рекламе появились «рекомендации стоматологов», «лучшие ветеринары выбирают...», «протестировано дерматологами» и тому подобные обороты. Но сегодня и они не работают. Пытливые пользователи давно выяснили, что «лучшие ветеринары» могут на поверку оказаться совсем не ветеринарами, и эффективность подобных рекламных сообщений также стала снижаться.
Самый высокий уровень доверия по-прежнему проявляется к рекомендациям от друзей и знакомых – но как эффективно использовать рекомендации в целях продвижения товаров и услуг? Наборы метрик социальных сетей пока не дают полного представления о том, каким путем человек пришел к мысли купить определенный продукт или услугу. Выразить в цифрах эффект, производимый тем или иным рекламным продуктом в Интернет, не предоставляется возможным без создания системы, связывающей каналы дистрибуции, каналы доставки рекламы и каналы общения потенциальных покупателей. И такая система есть – это продукт компании Manumatix под названием Bamboo.
Чтобы привлекать новых покупателей, необходимо предложить существующим клиентам очень простой способ рассказать друзьям о продуктах/услугах компании, к которой они лояльны. Отправить сообщение или приглашение в социальной сети, написать электронное письмо или твит о продукте или услуге (и только в той форме, которую выберет пользователь) – все это, и даже больше, позволяет сделать Bamboo, предоставляя при этом развернутую отчетность о социальных действиях клиентов.
Ключевые возможности приложения – интеграция с самыми популярными социальными сетями (Facebook, Twitter, Google+, Pinterest, Tumblr), возможность детальной конфигурации рекламных продуктов (веб-сайт, встраиваемые объявления, приложение или fan page в Facebook) и, главное, полнейшая отчетность по действиям пользователя от нажатия на ссылку для перехода на сайт до покупки товара в оффлайн магазине. С использованием Bamboo рекламные бюджеты резко сокращаются. Например, на каждую $1000 получается в среднем 20000 кликов ($.05/клик) в отличие от 1000 на баннерах.
В такой системе, казалось бы, должны возникать вопросы о том, как предоставить непрерывный доступ к рекламной информации, ведь поток пользователей сравним с масштабами социальной сети. Но для обслуживания серверов и хранения информации используются продукты компании Amazon. Сама информационная система работает в рамках частного облака EC2 – такой подход позволяет обеспечить максимальную устойчивость к нагрузкам, а географическое распределение ЦОД дает возможность пользователю работать с сервером практически без задержек. Информация о пользователях и их достижениях хранятся в нереляционной базе данных DynamoDB, что также сокращает время выполнения операций на сервере, а значит, и время ожидания пользователя.
Еще одной полезной особенностью DynamoDB является возможность управления пропускной способностью программного интерфейса (ПИ) как через графический интерфейс пользователя (ГИП), так и программно. Предоставление данных настроек в ГИП показано на рисунке ниже.
Рисунок 1. Предоставление данных о пропускной способности API
Через пункт меню “Modify Throughput” вы можете перейти к настройкам данных характеристик. Важная особенность: пропускная способность (ПИ) за одно изменение может быть увеличена не более, чем в два раза, и уменьшена не более, чем на 10%. Меню конфигурации предоставлено на рисунке ниже.
Рисунок 2. Диалог конфигурации настроек пропускной способности API
Описанные настройки позволяют манипулировать так называемой Provisioned Capacity – количеством операций в единицу времени, которое гарантирует Amazon. Но в информационных системах (ИС) с распределенной архитектурой сложно разделить модули таким образом, чтобы каждый работал со своим набором таблиц в БД, - обычно требуется кооперация различных модулей для выполнения задач бизнеса. И в этом случае важную роль играет динамическое управление пропускной способностью ПИ – такую функциональность предоставляет библиотека Google Guava. Рассмотрим программную конфигурацию пропускной способности ПИ в рамках языка программирования Java.
Допустим, для реализации некоторой отчетности в ИС необходимо выполнить расчеты над данными, хранящимися в БД. Предлагается следующая реализация решения поставленной задачи:
- Получить установленное значение пропускной способности на чтение;
- Воспользоваться инструментом RateLimiter библиотеки Google Guava для ограничения количества вызовов ПИ;
- Последовательно просканировать таблицу выборками по 100 записей;
- Выполнить требуемые расчеты над полученными записями.
Соответствующий блок кода предоставлен ниже.
// выставляем ограничение в 50% от установленного в ГИП ограничения на //чтение float ALLOWED_SCAN_CONSUMPTION_RATIO = 0.5f; // получаем подключение к таблице TableDescription tableDescription = dbConnection.describeTable( someTableName ).getTable(); // получаем значение ограничения на чтение long provisionedReadCapacity = tableDescription.getProvisionedThroughput().getReadCapacityUnits(); // рассчитываем новое ограничение с учетом выставленных ограничений long allowedConsumption = Math.max( 1, Math.round( provisionedReadCapacity * ALLOWED_SCAN_CONSUMPTION_RATIO ) ); // получаем объект RateLimiter с рассчитанным ограничением RateLimiter rateLimiter = RateLimiter.create( allowedConsumption ); Map< String, AttributeValue > lastKeyEvaluated = null; int permitsToConsume = 1; do { // метод acquire остановит поток выполнения, если частота обращения // превысит установленное ограничение rateLimiter.acquire( permitsToConsume ); // создаем запрос к БД на получение 100 записей final ScanRequest scanRequest = new ScanRequest() .withTableName( someTableName ) .withLimit( 100 ) .withExclusiveStartKey( lastKeyEvaluated ) // важный момент: просим SDK рассчитать нагрузку, оказанную этим запросом .withReturnConsumedCapacity( ReturnConsumedCapacity.TOTAL ); final ScanResult scanResult = dbConnection.scan( scanRequest ); for( Map< String, AttributeValue > record : scanResult.getItems() ) { // выполняем действия над результатом } lastKeyEvaluated = scanResult.getLastEvaluatedKey(); final double consumedCapacity = scanResult.getConsumedCapacity().getCapacityUnits(); // относительно оказанной нагрузки рассчитываем доступную пропускную // способность для следующего запроса permitsToConsume = ( int )( consumedCapacity - 1.0 ); if( permitsToConsume <= 0 ) { permitsToConsume = 1; } } while( lastKeyEvaluated != null );
Листинг 1. Обход таблицы выборками по 100 записей с выполнением операций над записями
Как видно из листинга 1, использование новейших технологий в реализации ИС может привести повышению гибкости всей системы и снижению нагрузки на сервер (в том числе, к снижению затрат на содержание сервера, так как, в рамках Amazon AWS, превышение предустановленного количества обращений к БД или пропускной способности ПИ приводит к увеличению счета).
За счет использования передовых технологий в нестандартном подходе к взаимодействию потенциальных покупателей с информационной системой, Bamboo является инновационным решением компании Manumatix. Использование Bamboo позволяет максимально эффективно осваивать рекламный бюджет и приводит к увеличению прибыли за счет социального взаимодействия клиентов.