Разработка приложений в облаке на примере Amazon
Web Services
Константин СлисенкоJazzTeam, Senior software engineer
Chuck Norris doesn’t need the cloud to scale his applications, he uses his laptop.
(Chuck Norris plugin for Jenkins)
Что такое облако?Пул ресурсов, к которому мы можем получить доступ через API
On demand (self service)● не ждём пока нам сконфигурируют сервер
Scalable (up and down)● в любой момент можно докупить новые ресурсы или
отказаться от существующих● безграничные ресурсы и мощности в любое время
Pay for use● платим только за то, что используем
Для чего можно использовать облако?
Размещение приложений с неравномерной нагрузкой● сезонная нагрузка (день/ночь, праздники, пики продаж)
● не известно вначале будет ли приложение популярным, мы не хотим на этом этапе инвестировать в сервера
Большие вычисленияНагрузочное тестирование● необходимо много ресурсов на короткое время
Хранение информации с экстремальными нагрузками● рекламный ролик, который должны посмотреть миллионы
покупателей по всему миру
Улучшение устойчивость к сбоям нашей системы● выход из строя нашего оборудования, запуск копии в облаке пока
не восстановится наша основная система
Типы облаковSAAS (Software as a service)
"Аренда" приложений, больше пользуемся - больше платим
PAAS (Platform as a service)Простое для разработчиков развёртывание приложений на известной технологии (Java, .NET, PHP, Ruby, ...)
IAAS (Infrastructure as a service)Настраиваем инфраструктуру самостоятельноНужны дополнительные навыки и опыт работы с окружением
Storageбезразмерное хранилище данныхустойчиво к очень большим нагрузкамCDN - системы "раздачи" контента
Рынок
IAAS
PAAS
SAAS
Storage
Типы облаковPublic cloud● сервера доступны через интернет● зачастую pay for use
Private cloud● работает и поддерживается
внутри организации ● не требуется интернет-
соединения● не все данные можно хранить вне,
например финансовые данные
Hybrid cloud● гибкость как у private cloud (не
требуется интернет-соединения) и устойчивость к сбоям как у public cloud
● проигрывает в защищённости private cloud
Open Source tools to build private clouds
http://incubator.apache.org/cloudstack/
http://www.eucalyptus.com/
http://www.openstack.org/
Amazon Web Services● Самый большой на рынке● Легко стартовать
● Период бесплатного использования 1 год!● Облачные сервисы практически для
любых нужд● API – стандарт де-факто● Marketplace (https://aws.amazon.
com/amis)
География датацентров
AWS Products and services
Amazon Elastic CloudВиртуальные машины в аренду
● Разная мощность, разная стоимость
AMI – образ виртуальной машины● Сохраняем настроенную конфигурацию● Запускаем любое количество в любой момент● Можно продавать и покупать на marketplace
Размещение в разных дата-центрах● Для большей надёжности
Auto Scaling groups
Amazon S3Файловое хранилище (до 5 ТБ)99,999999999% надёжность*Множество протоколов доступа
● http, https, bittorent, …Резервное копирование данных в разных дата-центрах
Amazon Cloud Front - размещение данных ближе к потребителям
Amazon SQSАсинхронная очередь сообщений
Управление облаком Amazon
AWS Management Console● Web-ui, наглядно отображены все сервисы
Прямой вызов API● Command line interface● Использование SDK и вызов из программы
API позволяет нам писать скрипты для управления инфраструктурой!
AWS Management Console
Amazon Web Services APISDK: java, android, iOS, .NET, Node.js,
Python, PHP, Ruby
Amazon SDK for java● поддерживает практически все сервисы● усть плагин к eclipse
http://aws.amazon.com/tools/http://aws.amazon.com/sdkforjava/
Запуск сервера в EC2AmazonEC2 ec2 = new AmazonEC2Client(credentials);
RunInstancesRequest req = new RunInstancesRequest();req.setInstanceType("t1.small");req.setImageId("ami-dd47ecb4");req.setMinCount(Integer.valueOf(1));req.setMaxCount(Integer.valueOf(1));
ArrayList<String> sg = new ArrayList<String>();sg.add("MySecurityGroup");req.setSecurityGroups(sg);
RunInstancesResult runResult = ec2.runInstances(req);
for (Instance instance : runResult.getReservation().getInstances()) {System.out.println("Launched Instace: " + instance.getInstanceId());
}
Размещение файла в S3AmazonS3 s3 = new AmazonS3Client(credentials);
// Просматриваем все букетыfor (Bucket b : s3.listBuckets()) { System.out.println(b.getName());}
s3.createBucket("myBucket" + UUID.randomUUID());s3.putObject(new PutObjectRequest("myBucket", "MyFile",
createSampleFile()));
ObjectListing listing = s3.listObjects(new ListObjectsRequest().withBucketName("myBucket"));
for (S3ObjectSummary obj : listing.getObjectSummaries()) { System.out.println(obj.getKey() + " size=" + obj.getSize());}
Архитектуры приложений в облаке
Web application hosting Disaster recovery
http://aws.amazon.com/architecture/
Batch processing
Спасибо за внимание!Вопросы?
[email protected], Константин Слисенко
Top Related