- PVSM.RU - https://www.pvsm.ru -
С восходом социальных приложений, таких, как Facebook, Instagram, YouTube и многих других, управление сгенерированным пользователями контентом стало проблемой, а проблемы нужно решать. Amazon AWS S3, Google Storage, Rackspace Cloud Files и другие похожие сервисы стали появляться, как грибы после дождя, чтобы помочь разработчикам приложений решить актуальную проблему – управление масштабируемым хранилищем активов. И конечно же все они используют “Облако”!
Популярные социальные приложения, научные приложения и приложения генерирующие медиа контент способны генерировать гигантское количество информации за короткий промежуток времени. Вот вам пару примеров:
Когда ваше приложение начинает сохранять огромное количество контента, который сгенерировали ваши пользователи, ваша команда должна будет решить, куда инвестировать своё время для решения этой задачи. Если ваше приложение построено таким образом, чтобы размещать активы на вашем железе/инфраструктуре, ваша команда потратит кучу времени и денег пытаясь эффективно хранить и управлять активами. Как вариант вы можете сохранять активы у облачного провайдера хранилищ. Выбрав этот путь вы сможете позволить контенту приложений масштабироваться почти безгранично, платя только за используемое место и ресурсы для подачи этого контента. Как следствие, облачное хранение данных развяжет руки вашим инженерам и позволит сконцентрироваться на создание уникальных приложений, вместо придумывания велосипеда, когда масштабируемость станет проблемой.
Большинство лидирующих облачных хранилищ предоставляет доступ через свой API позволяя разработчикам интегрировать облачное хранение активов в свое приложение. Ниже мы взглянем на несколько примеров кода с использованием SDK или библиотеки для хранения активов на Amazon S3.
Примеры кода адаптированы из репозитория CarrierWave [5].
CarrierWave.configure do |config|
config.fog_credentials = {
:provider => 'AWS', # required
:aws_access_key_id => 'xxx', # required
:aws_secret_access_key => 'yyy', # required
:region => 'eu-west-1' # optional, defaults to 'us-east-1'
}
config.fog_directory = 'имя_папки'
config.fog_public = false
config.fog_attributes = {'Cache-Control'=>'max-age=315576000'}
config.asset_host = 'https://assets.example.com’
end
class AvatarUploader < CarrierWave::Uploader::Base
storage :fog
end
uploader = AvatarUploader.new
uploader.store!(my_file)
uploader.retrieve_from_store!('my_file.png')
add_column :users, :avatar, :string in a database migration file
require 'carrierwave/orm/activerecord' in your model file.
class User < ActiveRecord::Base
mount_uploader :avatar, AvatarUploader
end
u = User.new
u.avatar = params[:file]
u.avatar = File.open('somewhere')
u.save!
u.avatar.url # => '/url/to/file.png'
u.avatar.current_path # => 'path/to/file.png'
u.avatar.identifier # => 'file.png'
Вот примеры использования CarrierWave для загрузки на Amazon S3, [6] Rackspace Cloud Files [7] и Google Storage [8], а также несколько джемов для ORM, таких, как DataMapper [9], Mongoid [10] and Sequel [11].
Amazon предоставляет PHP SDK [12] для работы с AWS API и сервисами. Для этого примера мы будем использовать инструкции из SDK репозитория README.
// инстанцировать AmazonS3 класс
$s3 = new AmazonS3();
// создаём новый s3 bucket для загрузки
$bucket = 'НАЗВАНИЕ-ВАШЕГО-BUCKET' . strtolower($s3->key);
if (!$s3->if_bucket_exists($bucket))
{
$response = $s3->create_bucket($bucket,AmazonS3::REGION_US_E1);
if (!$response->isOK()) die('Could not create `' . $bucket . '`.');
}
// Скачиваем общественный объект.
$response = $s3->get_object('aws-sdk-for-php', 'some/path-to-file.ext',array(
'fileDownload' => './local/path-to-file.ext'
));
// Загружаем объект.
$response = $s3->create_object($bucket, 'some/path-to-file.ext', array(
'fileUpload' => './local/path-to-file.ext'
));
Для Node.js я адаптировал пример кода из Knox Amazon S3 клиента [14] на Github.
// конфигурируем клиент
var client = knox.createClient({
key: '<api-key-here>'
, secret: '<secret-here>'
, bucket: 'BUCKET-NAME'
});
// загружаем файл на S3
client.putFile('some/path-to-file.ext', 'bucket/file-name.ext', function(err, res){
// Logic
});
// Скачиваем файл из S3
client.get('/some/path-to-file.ext’).on('response', function(res){
console.log(res.statusCode);
console.log(res.headers);
res.setEncoding('utf8');
res.on('data', function(chunk){
console.log(chunk);
});
}).end();
// Стираем файл из S3
client.del('/some/path-to-file.ext’).on('response', function(res){
console.log(res.statusCode);
console.log(res.headers);
}).end();
Как вы видите, работать с AWS S3 APIs крайне просто и существует куча доступных библиотек для большинства языков. Я бы рекомендовал взглянуть на облачные хранилища при разработке своего будущего проекта. Вы сэкономите себе время не изобретая новые решения размещения активов и вам будет предоставлена практически неограниченная возможность масштабирования облачного хранилища.
Автор: slainte
Источник [15]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/hosting/30196
Ссылки в тексте:
[1] источник: http://www.youtube.com/t/press_statistics
[2] источник: http://techcrunch.com/2012/10/29/billion-snapchats/
[3] источник: http://aws.amazon.com/solutions/case-studies/
[4] источник: http://www.linuxnews.co/2012/06/psychsoftpc-offers-hadoop-cluster-solution/
[5] CarrierWave: https://github.com/jnicklas/carrierwave
[6] Amazon S3,: https://github.com/jnicklas/carrierwave#using-amazon-s3
[7] Rackspace Cloud Files: https://github.com/jnicklas/carrierwave#using-rackspace-cloud-files
[8] Google Storage: https://github.com/jnicklas/carrierwave#using-google-storage-for-developers
[9] DataMapper: https://github.com/jnicklas/carrierwave-datamapper
[10] Mongoid: https://github.com/jnicklas/carrierwave-mongoid
[11] Sequel: https://github.com/jnicklas/carrierwave-sequel
[12] PHP SDK: https://github.com/amazonwebservices/aws-sdk-for-php
[13] config-sample.inc.php: https://github.com/amazonwebservices/aws-sdk-for-php/raw/master/config-sample.inc.php
[14] Knox Amazon S3 клиента: https://github.com/learnboost/knox
[15] Источник: http://habrahabr.ru/post/173939/
Нажмите здесь для печати.