Я только что развернул приложение Codeigniter для Amazon EC2 (используя S3 для мультимедиа и RDS для MySQL).
Мне нужно ограничить доступ к учетной записи пользователя на основе используемой полосы пропускания – учетные записи будут основаны на пропускной способности, например, базовая учетная запись £ x для до 20 ГБ в месяц и т. Д.
Однако я понятия не имею, что лучший способ сделать это.
Мои экземпляры EC2 – это Ubuntu с Apache2, если это помогает.
Любые идеи оценили!
Благодаря!
Вы можете использовать API-интерфейс amazon для проверки использования полосы пропускания вместо использования журналов. как вы сказали, что вы используете s3 для управления активами, хорошо, если вы создадите новый ковш для каждого пользователя и проверьте использование полосы пропускания, а затем ограничите учетную запись, если он превысит этот предел.
Ограничение пропускной способности для каждого подключения для Linux-ПК
Вам нужно установить инструмент Lighttpd, его веб-сервер. полезно ограничить пропускную способность для каждого соединения, а также установить Axel для увеличения и уменьшения количества подключений.
sudo apt-get install axel
http://www.cyberciti.biz/tips/installing-and-configuring-lighttpd-webserver-howto.html
за соединение я добавляю эту команду в этот путь / etc / lighttpd /lighttpd.conf.
connection.k bytes-per-second = 70
Я ограничиваю полосу пропускания 70 кб / сек, и я тестировал каждое соединение в течение 5 раз, и я наблюдал минимальное время, максимальное время и рассчитанное среднее время. Я повторил это до 10 подключений.
Вы можете создать собственный журнал с Apache для отслеживания количества переданных байтов. Трудная часть будет ассоциировать это с данным пользователем. Вероятно, комбинация файлов cookie и, возможно, удаленного IP.
Затем вы берете этот журнал и обрабатываете его в фоновом режиме.
S3 / Cloudfront может предоставлять похожие журналы, но вы, вероятно, не сможете связать их с пользователем.
Если вы используете буферизацию вывода в PHP, вы можете вызвать ob_get_length()
непосредственно перед вызовом ob_end_flush()
чтобы получить размер отправляемого клиенту выходного буфера.
Если вы также реализуете обработчик PHP для всех файлов (вместо того, чтобы разрешать прямые ссылки на файлы через Apache), у вас будет довольно приличное представление о том, сколько контента вы отправляли каждому клиенту.