34
Как превратить приложение в платформу Вадим Крючков (Long) Oversun-Scalaxy

Как превратить приложение в платформу

Embed Size (px)

Citation preview

Page 1: Как превратить приложение в платформу

Как превратить приложение в платформу

Вадим Крючков (Long)Oversun-Scalaxy

Page 2: Как превратить приложение в платформу

Немного о себе

• Руковожу разработкой комплексной панели управления в компании Oversun

• l-o-n-g.livejournal.com

Page 3: Как превратить приложение в платформу

Цель доклада

На примере Scalaxy API показать как превратить приложение в платформу

Page 4: Как превратить приложение в платформу

О чем будет доклад?

• Маркетинговый bullshit в trash

• Как построить API: REST vs …

• Краткое введение в cloud

• Построение API на примере масштабирования в облаке

• Плюсы и минусы облаков

• Переезд в облако — оно вам надо?

• Это все?

Page 5: Как превратить приложение в платформу

Что такое Cloud Computing

• Технология обработки данных, в которой программное обеспечение предоставляется пользователю как интернет-сервис

• Пользователь имеет доступ к собственным данным, но не должен заботиться об «железной» инфраструктуре

• «Не ограниченные» вычислительные ресурсы

Page 6: Как превратить приложение в платформу

Какие бывают облака?

Page 7: Как превратить приложение в платформу

Какие бывают облака?

• IaaS (Infrastructure-as-a-Service)предоставить пользователю некую инфраструктуру в виде сервиса (VPS+хранилище)Amazon (EC2=Elastic Compute Cloud, S3=Simple Storage Service), GoGrid, Gandi

• PaaS (Platform-as-a-Service)• SaaS (Software-as-a-Service)• ...aaS (Communication, Workplace)

Page 8: Как превратить приложение в платформу

Какие бывают облака?

• IaaS (Infrastructure-as-a-Service)• PaaS (Platform-as-a-Service)

предоставление какой-либо платформы (для разработки ПО или хостинга веб-приложений)AppEngine (Google), Mosso, Apatana Cloud, Azure и др.

• SaaS (Software-as-a-Service)• ...aaS (Communication, Workplace)

Page 9: Как превратить приложение в платформу

Какие бывают облака?

• IaaS (Infrastructure-as-a-Service)• PaaS (Platform-as-a-Service)• SaaS (Software-as-a-Service)

использование какого-то конкретного ПО, например, корпоративные системы, в виде сервиса по подпискеGoogle Docs, MobileMe (Apple), LotusLive (IBM)

• ...aaS (Communication, Workplace)

Page 10: Как превратить приложение в платформу

Какие бывают облака?

• IaaS (Infrastructure-as-a-Service)• PaaS (Platform-as-a-Service)• SaaS (Software-as-a-Service)• ...aaS (Communication, Workplace)

и многие другие — в основном вариации трех базовых

Page 11: Как превратить приложение в платформу

Структура облака

CPL

CE

CW

Page 12: Как превратить приложение в платформу

Структура облака

CPL

CE

CW

Панель управления:• Знает все о пользователе • Взаимодействие с пользователем• Биллинг

Page 13: Как превратить приложение в платформу

Структура облака

CPL

CE

CW

Cloud Engine:• Знает о «железе»• Управляет объектами облака

Page 14: Как превратить приложение в платформу

Структура облака

CPL

CE

CW

Cloud Watch:• Глаза сервиса — система мониторинга• Генератор Event'ов

Page 15: Как превратить приложение в платформу

Структура облака

CPL

CE

CW

• SOA — принципы:- Архитектура не привязана к какой-то технологии- Независимость системы от платформы,- Независимость от языков программирования,- Сервисы независимы от приложений, с единообразными интерфейсами доступа к ним,- Сервисы - слабо-связанные компоненты• REST (простота общения)

Взаимодействие сервисов

Page 16: Как превратить приложение в платформу

REST — с чем его едятREpresentational State Transfer

• подход к архитектуре сетевых протоколов, описан в 2000 году Ройем Филдингом• сетевой ресурс должен поддерживать операции - GET, PUT, POST и DELETE• данные передаются в виде стандартных форматов (HTML, XML, JSON)• не зависит от сетевого уровня• не сохраняет состояний между запросами (на практике накладно)• позволяет легко масштабироваться и добавлять новые свойства

Ссылки:• Roy Fielding - Architectural Styles and the Design of Network-based Software Architectures

• Джон Фландерс - Введение в службы RESTful с использованием WCF

Page 17: Как превратить приложение в платформу

Почему REST?

REST vs RPCRPC позволяет использовать небольшое количество сетевых ресурсов с большим количеством методов и сложным протоколом. REST - количество методов и сложность протокола ограничены, следовательно количество отдельных ресурсов должно быть большим.

SOAPПлюсы:

• Жесткая проверка типов

• Имеются специальные средства разработки

Минусы:

• Большой объем (XML)

• Тяжело читаем человеком

• Сложней в реализации

Page 18: Как превратить приложение в платформу

CPL - подробно

Page 19: Как превратить приложение в платформу

Как защититься от продвинутого пользователя?

1. Открыть HTML и проанализировать запросы2. Эмулировать браузер (cURL)

Как защититься от умного клиента?

Page 20: Как превратить приложение в платформу

Как защититься от продвинутого пользователя?

НИКАК! :)

Page 21: Как превратить приложение в платформу

Как защититься от продвинутого пользователя?

Только дружить — превратите приложение в платформу

Откройте API

Page 22: Как превратить приложение в платформу

CPL — подробно. v2

Page 23: Как превратить приложение в платформу

Критерии хорошего API

• Простота– Понимания– Реализации

• Четкое выделение – Сущностей– Событий

• Документация

Page 24: Как превратить приложение в платформу

Выделяем сущности

Определяем то, с чем работаем: • Account • Project• Instance• Volume• FireWall• ...

Page 25: Как превратить приложение в платформу

Масштабирование в облаке

Решение?

Причины:• CPU (la)• Memory (свободный

объем)• Диск (свободный

объем / iops)• Network (полоса)

Page 26: Как превратить приложение в платформу

Вертикальное масштабирование

• Слабая зависимость от архитектуры проекта

• Ограничение — физический сервер (временно)

Page 27: Как превратить приложение в платформу

Создание инстанса

POST /api/instance/ HTTP/1.1Cookie: PHPSESSID=2c9177dfbbce6268f3693646e6846f38; path=/Content-Type: application/x-www-form-urlencodedUser-Agent: http4e/1.6.1Host: 127.0.0.1Content-Length: 242{"instance": { "name":"Тестовый инстанс", "slots":2, "ip": { "private":["192.168.0.3"], "public":["217.29.52.254"] } }, "idProject":48 }

HTTP/1.1 200 OKServer: nginx/0.6.35Date: Wed, 07 Oct 2009 14:34:58 GMTContent-Type: application/json; charset=utf-8Connection: keep-aliveX-Powered-By: PHP/5.3.0Expires: Thu, 19 Nov 1981 08:52:00 GMT

{ "result": {"instance": { "name": "Тестовый инстанс", "id": 4, "loadAVG": 0, "status": 0, "ip": { "private": ["192.168.0.3"], "public": ["217.29.52.254"] }, "slots": 2, "idProject": 48 }}, "errors": []}

Запрос: Ответ:

Page 28: Как превратить приложение в платформу

Масштабирование инстанса

PUT /api/instance/4/ HTTP/1.1Cookie: PHPSESSID=2c9177dfbbce6268f3693646e6846f38; path=/Content-Type: application/x-www-form-urlencodedUser-Agent: http4e/1.6.1Host: 127.0.0.1Content-Length: 105

{"instance": { "slots":"10" }, "idProject":"48"}

HTTP/1.1 200 OKServer: nginx/0.6.35Date: Wed, 07 Oct 2009 16:02:02 GMTContent-Type: application/json; charset=utf-8Connection: keep-aliveX-Powered-By: PHP/5.3.0Expires: Thu, 19 Nov 1981 08:52:00 GMTPragma: no-cacheCache-Control: no-cache

{ "result": {"instance": { "name": "Тестовый инстанс", "id": 4, "loadAVG": 0, "status": 2, "ip": { "private": ["192.168.0.3"], "public": ["217.29.52.254"] }, "slots": 10, "idProject": 48 }}, "errors": []}

Запрос: Ответ:

Page 29: Как превратить приложение в платформу

Горизонтальноемасштабирование

• Требования к архитектуре сервиса

• Ограничения — практически нет (только архитектурные)

Page 30: Как превратить приложение в платформу

AutoScale

• Увеличение ресурсов в реальном времени

• Вертикальный:– По времени суток

– По достижению критических параметров

• Горизонтальный — в ближайшем будущем

Page 31: Как превратить приложение в платформу

Плюсы облака

• Масштабирование ресурсов под нагрузку

• Отсутствие «железных» проблем

• Аппаратная защита от DOS, DDOS

• CDN «из коробки»• Экономия $

Page 32: Как превратить приложение в платформу

Минусы облака

• Зарубежные сервисы — задержки

• Мало у кого есть реальный scale — сложности масштабирования

• Scalaxy — этап бета-тестирования :)

Page 33: Как превратить приложение в платформу

Для кого? И для чего?

• Не регулярный трафик

• Экономия на «железе»

• Большие объемы данных

• CPU на время

• StartUp

• Новостные ресурсы

• Файловые хранилища

• Научные расчеты

• Все остальные :)

Page 34: Как превратить приложение в платформу

Это все?

Вопросы?