Слисенко Константин, Минск. Компания JazzTeam, Senior Software Engineer (R&D), Java/Agile Coach
«Разработка приложений в облаке на примере Amazon Web Services». Development секция. Для разработчиков.
«JVM изнутри: оптимизация и профилирование». Development секция. Для разработчиков.
2. Chuck Norris doesn’t need the cloud to scale
his applications, he uses his laptop.
(Chuck Norris plugin for Jenkins)
3. Что такое облако?
Пул ресурсов, к которому мы можем получить
доступ через API
On demand (self service)
● не ждём пока нам сконфигурируют сервер
Scalable (up and down)
● в любой момент можно докупить новые ресурсы или
отказаться от существующих
● безграничные ресурсы и мощности в любое время
Pay for use
● платим только за то, что используем
4. Для чего можно
использовать облако?
Размещение приложений с неравномерной нагрузкой
● сезонная нагрузка (день/ночь, праздники, пики продаж)
● не известно вначале будет ли приложение популярным, мы не
хотим на этом этапе инвестировать в сервера
Большие вычисления
Нагрузочное тестирование
● необходимо много ресурсов на короткое время
Хранение информации с экстремальными
нагрузками
● рекламный ролик, который должны посмотреть миллионы
покупателей по всему миру
Улучшение устойчивость к сбоям нашей системы
● выход из строя нашего оборудования, запуск копии в облаке пока
5. Типы облаков
SAAS (Software as a service)
"Аренда" приложений, больше пользуемся - больше платим
PAAS (Platform as a service)
Простое для разработчиков развёртывание приложений на известной
технологии (Java, .NET, PHP, Ruby, ...)
IAAS (Infrastructure as a service)
Настраиваем инфраструктуру самостоятельно
Нужны дополнительные навыки и опыт работы с окружением
Storage
безразмерное хранилище данных
устойчиво к очень большим нагрузкам
CDN - системы "раздачи" контента
7. Типы облаков
Public cloud
● сервера доступны через интернет
● зачастую pay for use
Private cloud Hybrid cloud
● работает и поддерживается ● гибкость как у private cloud (не
внутри организации требуется интернет-соединения)
● не требуется интернет- и устойчивость к сбоям как у
соединения public cloud
● не все данные можно хранить вне, ● проигрывает в защищённости
например финансовые данные private cloud
8. Open Source tools to
build private clouds
http://incubator.apache.org/cloudstack/
http://www.eucalyptus.com/
http://www.openstack.org/
9. Amazon Web Services
● Самый большой на рынке
● Легко стартовать
● Период бесплатного использования 1 год!
● Облачные сервисы практически для
любых нужд
● API – стандарт де-факто
● Marketplace (https://aws.amazon.
com/amis)
12. Amazon Elastic Cloud
Виртуальные машины в аренду
● Разная мощность, разная стоимость
AMI – образ виртуальной машины
● Сохраняем настроенную конфигурацию
● Запускаем любое количество в любой момент
● Можно продавать и покупать на marketplace
Размещение в разных дата-центрах
● Для большей надёжности
Auto Scaling groups
13. Amazon S3
Файловое хранилище (до 5 ТБ)
99,999999999% надёжность*
Множество протоколов доступа
● http, https, bittorent, …
Резервное копирование данных в разных
дата-центрах
Amazon Cloud Front - размещение данных
ближе к потребителям
15. Управление облаком
Amazon
AWS Management Console
● Web-ui, наглядно отображены все сервисы
Прямой вызов API
● Command line interface
● Использование SDK и вызов из программы
API позволяет нам писать скрипты
для управления инфраструктурой!
17. Amazon Web Services
API
SDK: java, android, iOS, .NET, Node.js,
Python, PHP, Ruby
Amazon SDK for java
● поддерживает практически все сервисы
● усть плагин к eclipse
http://aws.amazon.com/tools/
http://aws.amazon.com/sdkforjava/
18. Запуск сервера в EC2
AmazonEC2 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());
}
19. Размещение файла в S3
AmazonS3 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());
}