+ All Categories
Home > Documents > Deltacloud API - Internet Infoi.iinfo.cz/urs-att/Ada_nahled_workshop-130217518229562.pdf · •...

Deltacloud API - Internet Infoi.iinfo.cz/urs-att/Ada_nahled_workshop-130217518229562.pdf · •...

Date post: 04-Sep-2020
Category:
Upload: others
View: 1 times
Download: 0 times
Share this document with a friend
36
horizontální škálování Deltacloud API
Transcript
Page 1: Deltacloud API - Internet Infoi.iinfo.cz/urs-att/Ada_nahled_workshop-130217518229562.pdf · • zařazení http cache pro dynamický obsah • oddělení databáze a aplikačního

horizontální škálování

Deltacloud API

Page 2: Deltacloud API - Internet Infoi.iinfo.cz/urs-att/Ada_nahled_workshop-130217518229562.pdf · • zařazení http cache pro dynamický obsah • oddělení databáze a aplikačního

2

Horizontální škálování webové app.

Page 3: Deltacloud API - Internet Infoi.iinfo.cz/urs-att/Ada_nahled_workshop-130217518229562.pdf · • zařazení http cache pro dynamický obsah • oddělení databáze a aplikačního

3

HI SCALE ≠ HIGH AVAILABILITY

Horizontální škálování webové app.

Page 4: Deltacloud API - Internet Infoi.iinfo.cz/urs-att/Ada_nahled_workshop-130217518229562.pdf · • zařazení http cache pro dynamický obsah • oddělení databáze a aplikačního

4

Vysoká dostupnost

• redundanceinfrastruktury

• biodiverzita

• failover

• disasterrecovery

• monitoring

• zálohování

Horizontální škálování webové app.

Page 5: Deltacloud API - Internet Infoi.iinfo.cz/urs-att/Ada_nahled_workshop-130217518229562.pdf · • zařazení http cache pro dynamický obsah • oddělení databáze a aplikačního

5

Překážky ve škálování

• bottle-necks

• blob,blackbox

• statefullaplikace

• absencedokumentace

• nepredikovatelnéchování

Horizontální škálování webové app.

Page 6: Deltacloud API - Internet Infoi.iinfo.cz/urs-att/Ada_nahled_workshop-130217518229562.pdf · • zařazení http cache pro dynamický obsah • oddělení databáze a aplikačního

6

Postup při škálování

• vytvořenítest-suiteavývojovéhoprostředí

• performancetest,stanovenícílovéperformance

• bottle-neckanalýza

• optimalizaceas-is

• rozdělenírolí

• horizontálníškálovánívrámcistejnýchrolí

Horizontální škálování webové app.

Page 7: Deltacloud API - Internet Infoi.iinfo.cz/urs-att/Ada_nahled_workshop-130217518229562.pdf · • zařazení http cache pro dynamický obsah • oddělení databáze a aplikačního

7

Vytvoření test-suite

• klonkonfiguraceprodukčníhosystému

• jedennebovícevýkonnýchklientů

• stejnéprostředí,jakobudepoužitopooptimalizaci

• nikdynetestujemenaprodukčnímsystému

Horizontální škálování webové app.

Page 8: Deltacloud API - Internet Infoi.iinfo.cz/urs-att/Ada_nahled_workshop-130217518229562.pdf · • zařazení http cache pro dynamický obsah • oddělení databáze a aplikačního

8

Performance test – metriky pro web

• requestpersecond

• concurrency,maximálníudržitelnýpočetspojení

• timeperrequest

• bandwidth

• userexperience

Horizontální škálování webové app.

Page 9: Deltacloud API - Internet Infoi.iinfo.cz/urs-att/Ada_nahled_workshop-130217518229562.pdf · • zařazení http cache pro dynamický obsah • oddělení databáze a aplikačního

9

Performance test – nástroje

• YSlow

• AB

• httperf

Horizontální škálování webové app.

Page 10: Deltacloud API - Internet Infoi.iinfo.cz/urs-att/Ada_nahled_workshop-130217518229562.pdf · • zařazení http cache pro dynamický obsah • oddělení databáze a aplikačního

10

Optimalizace as-is

• klástrozumnélimityvlastnímuživatelům

• optimalizacekonfiguraceserveru

• SQLslowqueries

• komprese

• redukcepočtuhttpobjektů(assetsmerging,sprites)

• overloadpage

Horizontální škálování webové app.

Page 11: Deltacloud API - Internet Infoi.iinfo.cz/urs-att/Ada_nahled_workshop-130217518229562.pdf · • zařazení http cache pro dynamický obsah • oddělení databáze a aplikačního

11

Horizontální škálování webové app.

Page 12: Deltacloud API - Internet Infoi.iinfo.cz/urs-att/Ada_nahled_workshop-130217518229562.pdf · • zařazení http cache pro dynamický obsah • oddělení databáze a aplikačního

12

Optimalizace as-is

• IOintenzivníoperacepřesunoutdopaměti

• lazyloadingproneklíčovéelementy(FBlikebuttons,etc)

• optimalizacekódu(rekurze,memoryleaks)

• codecoveragetest

• minimalizaceoverloadrecoverytime

Horizontální škálování webové app.

Page 13: Deltacloud API - Internet Infoi.iinfo.cz/urs-att/Ada_nahled_workshop-130217518229562.pdf · • zařazení http cache pro dynamický obsah • oddělení databáze a aplikačního

13

Rozdělení rolí

• použitíhttpproxy

• zařazeníhttpcacheprodynamickýobsah

• oddělenídatabázeaaplikačníhoserveru

• odděleníhttpstatickéhoobsahu

• použitíMemcached/Membased/Redis

Horizontální škálování webové app.

Page 14: Deltacloud API - Internet Infoi.iinfo.cz/urs-att/Ada_nahled_workshop-130217518229562.pdf · • zařazení http cache pro dynamický obsah • oddělení databáze a aplikačního

14

Horizontální škálování stejných rolí

• loadbalancing

• DNSRRs

• resourcepooling

Horizontální škálování webové app.

Page 15: Deltacloud API - Internet Infoi.iinfo.cz/urs-att/Ada_nahled_workshop-130217518229562.pdf · • zařazení http cache pro dynamický obsah • oddělení databáze a aplikačního

15

Performance test – obecné bottle-necky

• filesystem

• databáze

• sessionmanagement

• paměť

• cpu

• síťbandwitdth–síť,latence

Horizontální škálování webové app.

Page 16: Deltacloud API - Internet Infoi.iinfo.cz/urs-att/Ada_nahled_workshop-130217518229562.pdf · • zařazení http cache pro dynamický obsah • oddělení databáze a aplikačního

16

Nástroje pro diagnostiku• free

• top

• iotop

• iostat

• collectd

• mysqlslowquerylog

• mysqltuner.pl

• vmstat

• netstat

• iptraf

• ntop

• strace

• mtop

Horizontální škálování webové app.

Page 17: Deltacloud API - Internet Infoi.iinfo.cz/urs-att/Ada_nahled_workshop-130217518229562.pdf · • zařazení http cache pro dynamický obsah • oddělení databáze a aplikačního

17

DeltacloudAPI – seznámení

Page 18: Deltacloud API - Internet Infoi.iinfo.cz/urs-att/Ada_nahled_workshop-130217518229562.pdf · • zařazení http cache pro dynamický obsah • oddělení databáze a aplikačního

18

DeltacloudAPI – seznámení

Infrastructure as a Service (IaaS)

• kdykolivytvářetservery

• provádětakce(zapnout,vypnout,restartovat,smazat)

• zjistitstav,ipadresy,hwkonfiguraci,názevimage

Jak?

• webUI-prototyping

• API-integrace

Page 19: Deltacloud API - Internet Infoi.iinfo.cz/urs-att/Ada_nahled_workshop-130217518229562.pdf · • zařazení http cache pro dynamický obsah • oddělení databáze a aplikačního

19

„Many clouds = many APIsMany APIs = many problems”

• neexistujestandard

• vendorlock-in

• sledovánízměn

• složitáimplementace–parsování,generováníXML,SOAP,JSON,binární@!#$%^&*

MichalFojtik,RedHat

DeltacloudAPI – seznámení

Page 20: Deltacloud API - Internet Infoi.iinfo.cz/urs-att/Ada_nahled_workshop-130217518229562.pdf · • zařazení http cache pro dynamický obsah • oddělení databáze a aplikačního

20

http://incubator.apache.org/deltacloud/

Page 21: Deltacloud API - Internet Infoi.iinfo.cz/urs-att/Ada_nahled_workshop-130217518229562.pdf · • zařazení http cache pro dynamický obsah • oddělení databáze a aplikačního

21

Proč další API?

• industrystandardvyvíjenyspolečnostíRedHat

• abstrakčnívrstvanadcloudprovidery

• 0%vendorlock-in

• legacysupport–zpětněkompatibilní

• RESTfulAPI–podporaRuby,Python,Java…

• dostupnádokumentace

DeltacloudAPI – seznámení

Page 22: Deltacloud API - Internet Infoi.iinfo.cz/urs-att/Ada_nahled_workshop-130217518229562.pdf · • zařazení http cache pro dynamický obsah • oddělení databáze a aplikačního

22

Datový model

• instances–název,veřejnéIP,lokálníIP,možnéakce

• images–název

• hardwareprofiles–ram,storage,CPU

• realms,flavours–tarify,úrovně,datacentra

základní akce

• vytvořit,zapnout,vypnout,restartovataodstranitserver

DeltacloudAPI – seznámení

Page 23: Deltacloud API - Internet Infoi.iinfo.cz/urs-att/Ada_nahled_workshop-130217518229562.pdf · • zařazení http cache pro dynamický obsah • oddělení databáze a aplikačního

23

Podpora providerů v core

• AmazonEC2

• GoGrid

• Rackspace

• OpenNebula

• RHEV-M

DeltacloudAPI – seznámení

Page 24: Deltacloud API - Internet Infoi.iinfo.cz/urs-att/Ada_nahled_workshop-130217518229562.pdf · • zařazení http cache pro dynamický obsah • oddělení databáze a aplikačního

24

Nativní implementace

• odpadáinstalaceproxy

• zabezpečeníHTTPS

• cooldebuggingconsole

• rychlostimplementace

DeltacloudAPI – seznámení

Page 25: Deltacloud API - Internet Infoi.iinfo.cz/urs-att/Ada_nahled_workshop-130217518229562.pdf · • zařazení http cache pro dynamický obsah • oddělení databáze a aplikačního

25

DeltacloudAPI – ukázka

Page 26: Deltacloud API - Internet Infoi.iinfo.cz/urs-att/Ada_nahled_workshop-130217518229562.pdf · • zařazení http cache pro dynamický obsah • oddělení databáze a aplikačního

26

RESTful API

• HTTPprotokol

• HTTPmethods–CRUD

• URLnamespaceaccordingtodatamodel

• XML

DeltacloudAPI – ukázka

Page 27: Deltacloud API - Internet Infoi.iinfo.cz/urs-att/Ada_nahled_workshop-130217518229562.pdf · • zařazení http cache pro dynamický obsah • oddělení databáze a aplikačního

27

„HTTP is the lingua Franca of our age, it opens up all sort of doors.”KarelMinařík

DeltacloudAPI – ukázka

Page 28: Deltacloud API - Internet Infoi.iinfo.cz/urs-att/Ada_nahled_workshop-130217518229562.pdf · • zařazení http cache pro dynamický obsah • oddělení databáze a aplikačního

28

Curl – seznam serverůCREDENTIALS=“6yvc3:wb97o1ijwWx7kRpzIlc8xLm8yH+NqOTvCpy5B1A“ BASEURL=“https://www.virtualmaster.cz/services/deltacloud“

curl -s -X GET -u „$CREDENTIALS“ $BASEURL/instances

<instances> <instance href=“https://www.virtualmaster.cz/services/deltacloud/instances/15844“ id=“15844“> <owner_id>2531</owner_id> <name>master</name> <image href=“https://www.virtualmaster.cz/services/deltacloud/images/124“ id=“124“/> <hardware_profile href=“https://www.virtualmaster.cz/services/deltacloud/hardware_profiles/virtual-15844“ id=“virtual-15844“/> <realm href=“https://www.virtualmaster.cz/services/deltacloud/realms/prague-l1-personal“ id=“prague-l1-perso-nal“/> <state>RUNNING</state> <actions> <link method=“post“ href=“https://www.virtualmaster.cz/services/deltacloud/instances/15844/start“ rel=“start“/> <link method=“post“ href=“https://www.virtualmaster.cz/services/deltacloud/instances/15844/stop“ rel=“stop“/> <link method=“post“ href=“https://www.virtualmaster.cz/services/deltacloud/instances/15844/reboot“ rel=“re-boot“/>

DeltacloudAPI – ukázka

Page 29: Deltacloud API - Internet Infoi.iinfo.cz/urs-att/Ada_nahled_workshop-130217518229562.pdf · • zařazení http cache pro dynamický obsah • oddělení databáze a aplikačního

29

Curl – seznam serverůCREDENTIALS=“6yvc3:wb97o1ijwWx7kRpzIlc8xLm8yH+NqOTvCpy5B1A“ BASEURL=“https://www.virtualmaster.cz/services/deltacloud“

curl -s -X GET -u „$CREDENTIALS“ $BASEURL/instances \| grep name | sed -e ‚s/<name>//g‘ -e ‚s/<\/name>//g‘| sed ‚s/^[ \t]*//‘

masterworker-staleworker-1300959292worker-1300960167

DeltacloudAPI – ukázka

Page 30: Deltacloud API - Internet Infoi.iinfo.cz/urs-att/Ada_nahled_workshop-130217518229562.pdf · • zařazení http cache pro dynamický obsah • oddělení databáze a aplikačního

30

Curl – vytvoření serveru

BASEURL=“https://www.virtualmaster.cz/services/deltacloud“IMAGE_ID=“942“HWP_ID=“2513“REALM_ID=“prague-l1-personal“COUNT=“1“CREDENTIALS=“6yvc3:wb97o1ijwWx7kRpzIlc8xLm8yH+NqOTvCpy5B1A“NAME=“worker-“`date +%s`DATA=“image_id=$IMAGE_ID&name=$NAME&realm_id=$REALM_ID&hwp_id=$HWP_ID“

curl -s -X POST -u „$CREDENTIALS“ -d „$DATA“ $BASEURL/instances

DeltacloudAPI – ukázka

Page 31: Deltacloud API - Internet Infoi.iinfo.cz/urs-att/Ada_nahled_workshop-130217518229562.pdf · • zařazení http cache pro dynamický obsah • oddělení databáze a aplikačního

31

Ruby – příprava

# apt-get update# apt-get install -y ruby ruby-dev rubygems libxml2-dev libxslt-dev \build-essential libopenssl-ruby# gem install deltacloud-client# irb

DeltacloudAPI – ukázka

Page 32: Deltacloud API - Internet Infoi.iinfo.cz/urs-att/Ada_nahled_workshop-130217518229562.pdf · • zařazení http cache pro dynamický obsah • oddělení databáze a aplikačního

32

Ruby – připojení k API

require ‚rubygems‘ require ‚deltacloud‘

api_url = ‚https://www.virtualmaster.cz/services/deltacloud‘ api_name = ‚6yvc3‘ api_password = ‚wb97o1ijwWx7kRpzIlc8xLm8yH+NqOTvCpy5B1A‘

api = DeltaCloud.new( api_name, api_password, api_url )

=> #<DeltaCloud::API:0x7f38d85125a8 @api_driver=nil, @driver_name=“mock“, @api_uri=#<URI::HTTPS:0x7f38d8512300 UR-L:https://www.virtualmaster.cz/services/deltacloud>, @verbose=false, @entry_points={:images=>“https://www.virtual-master.cz/services/deltacloud/images“, :instances=>“https://www.virtualmaster.cz/services/deltacloud/instances“, :instance_states=>“https://www.virtualmaster.cz/services/deltacloud/instance_states“, :hardware_profiles=>“https://www.virtualmaster.cz/services/deltacloud/hardware_profiles“, :realms=>“https://www.virtualmaster.cz/services/delta-cloud/realms“}, @password=“wb97o1ijwWx7kRpzIlc8xLm8yH+NqOTvCpy5B1A“, @api_provider=nil, @api_version=“1.0“, @fea-tures={}, @username=“6yvc3“>

DeltacloudAPI – ukázka

Page 33: Deltacloud API - Internet Infoi.iinfo.cz/urs-att/Ada_nahled_workshop-130217518229562.pdf · • zařazení http cache pro dynamický obsah • oddělení databáze a aplikačního

33

Ruby – běžící instance instance

api.instances.map{|i| i.name}

=> [„master“, „worker-stale“, „worker-1300959292“, „worker-1300960167“]

DeltacloudAPI – ukázka

Page 34: Deltacloud API - Internet Infoi.iinfo.cz/urs-att/Ada_nahled_workshop-130217518229562.pdf · • zařazení http cache pro dynamický obsah • oddělení databáze a aplikačního

34

Ruby – ip exisutjících adresy instancí

h = {}

api.instances.each{|i| h[i.name] = i.public_addresses.first}

h

=> {„worker-1300959292“=>“80.79.23.90“, „master“=>“83.167.232.91“, „worker-1300960167“=>“83.167.232.116“, „worker-stale“=>“80.79.23.171“}

DeltacloudAPI – ukázka

Page 35: Deltacloud API - Internet Infoi.iinfo.cz/urs-att/Ada_nahled_workshop-130217518229562.pdf · • zařazení http cache pro dynamický obsah • oddělení databáze a aplikačního

35

Ruby – nová instance

instance = Api.create_instance( „5“, :name => ‚api-test‘ )

=> #<DeltaCloud::API::Stateful::Instance:0x7f38d89d83d0 @actions=[[„start“, „https://www.virtualmaster.cz/servi-ces/deltacloud/instances/15970/start“], [„stop“, „https://www.virtualmaster.cz/services/deltacloud/instances/15970/stop“], [„reboot“, „https://www.virtualmaster.cz/services/deltacloud/instances/15970/reboot“], [„shutdown“, „https://www.virtualmaster.cz/services/deltacloud/instances/15970/shutdown“], [„destroy“, „https://www.virtualmas-ter.cz/services/deltacloud/instances/15970/destroy“]], @base_name=“instance“, @state=“PENDING“, @client=#<Delta-Cloud::API:0x7f38d85125a8 @api_driver=nil, @driver_name=“mock“, @api_uri=#<URI::HTTPS:0x7f38d8512300 URL:https://www.virtualmaster.cz/services/deltacloud>, @verbose=false, @entry_points={:images=>“https://www.virtualmaster.cz/services/deltacloud/images“, :instances=>“https://www.virtualmaster.cz/services/deltacloud/instances“, :instance_states=>“https://www.virtualmaster.cz/services/deltacloud/instance_states“, :hardware_profiles=>“https://www.virtu-almaster.cz/services/deltacloud/hardware_profiles“, :realms=>“https://www.virtualmaster.cz/services/deltacloud/re-alms“}, @password=“wb97o1ijwWx7kRpzIlc8xLm8yH+NqOTvCpy5B1A“, @api_provider=nil, @api_version=“1.0“, @features={}, @username=“6yvc3“>, @url=“https://www.virtualmaster.cz/services/deltacloud/instances/15970“, @action_urls=[„https://www.virtualmaster.cz/services/deltacloud/instances/15970/start“, „https://www.virtualmaster.cz/services/delta-cloud/instances/15970/stop“, „https://www.virtualmaster.cz/services/deltacloud/instances/15970/reboot“, „https://www.virtualmaster.cz/services/deltacloud/instances/15970/shutdown“, „https://www.virtualmaster.cz/services/del-tacloud/instances/15970/destroy“], @id=“15970“, @objects=[{:type=>:state, :method_name=>“stopped?“, :state=>“S-TOPPED“}, {:type=>:state, :method_name=>“running?“, :state=>“RUNNING“}, {:type=>:state, :method_name=>“pending?“, :state=>“PENDING“}, {:type=>:state, :method_name=>“shutting_down?“, :state=>“SHUTTING_DOWN“}, {:type=>:text, :va-lue=>2531.0, :method_name=>“owner_id“}, {:type=>:text, :value=>“api-test“, :method_name=>“name“}, {:type=>:link, :method_name=>“image“, :id=>“5“}, {:type=>:text, :value=>“5“, :method_name=>“image_id“}, {:type=>:link, :method_name=>“hardware_profile“, :id=>“virtual-15970“}, {:type=>:text, :value=>“virtual-15970“, :method_name=>“hardwa-

DeltacloudAPI – ukázka

Page 36: Deltacloud API - Internet Infoi.iinfo.cz/urs-att/Ada_nahled_workshop-130217518229562.pdf · • zařazení http cache pro dynamický obsah • oddělení databáze a aplikačního

36

Ruby – změna stavu polling instance.state

=> „PENDING„

loop do break if api.instance(i.id).state == „RUNNING“ sleep 5end

ips = api.instances.map{|i| i.public_addresses.first}

LoadBalancer.update_backend_pool(ips)

DeltacloudAPI – ukázka


Recommended