Разработка приложений в облаке на примере Amazon Web Serices

Preview:

DESCRIPTION

Выступление на конференции SolIT в Солигорске. Презентация рассказывает о принципе работы облачных сервисов Amazon и способах разработки приложений для работы в облаке.

Citation preview

Разработка приложений в облаке на примере 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

Спасибо за внимание!Вопросы?

kslisenko@gmail.com, Константин Слисенко

Recommended