cloud messaging with cloud foundry

107
© 2012 VMware, Inc. All rights reserved. Cloud Messaging with Cloud Foundry Álvaro Videla - VMware Tuesday, November 13, 12

Upload: alvaro-videla

Post on 16-May-2015

3.061 views

Category:

Technology


0 download

DESCRIPTION

The Pub/Sub Pattern Image is taken from here: http://www.eaipatterns.com/PublishSubscribeChannel.html

TRANSCRIPT

Page 1: Cloud Messaging With Cloud Foundry

© 2012 VMware, Inc. All rights reserved.

Cloud Messaging with Cloud Foundry

Álvaro Videla - VMware

Tuesday, November 13, 12

Page 2: Cloud Messaging With Cloud Foundry

About Me

• Developer Advocate for Cloud Foundry• Blog: http://videlalvaro.github.com/• Twitter: @old_sound

2Tuesday, November 13, 12

Page 3: Cloud Messaging With Cloud Foundry

About Me

• Developer Advocate for Cloud Foundry• Blog: http://videlalvaro.github.com/• Twitter: @old_sound• I created gifsockets™

3Tuesday, November 13, 12

Page 4: Cloud Messaging With Cloud Foundry

About Me

Co-authored

RabbitMQ in Action

http://bit.ly/rabbitmq

4Tuesday, November 13, 12

Page 5: Cloud Messaging With Cloud Foundry

Classic Apps

5Tuesday, November 13, 12

Page 6: Cloud Messaging With Cloud Foundry

Implement a Photo Gallery

Tuesday, November 13, 12

Page 7: Cloud Messaging With Cloud Foundry

Two Parts:

Tuesday, November 13, 12

Page 8: Cloud Messaging With Cloud Foundry

Pretty Simple

Tuesday, November 13, 12

Page 9: Cloud Messaging With Cloud Foundry

‘Till new requirements arrive

Tuesday, November 13, 12

Page 10: Cloud Messaging With Cloud Foundry

The Product Owner

Tuesday, November 13, 12

Page 11: Cloud Messaging With Cloud Foundry

Can we also notify the user friends when she uploads a new image?

Tuesday, November 13, 12

Page 12: Cloud Messaging With Cloud Foundry

Can we also notify the user friends when she uploads a new image?

I forgot to mention we need it for tomorrow…

Tuesday, November 13, 12

Page 13: Cloud Messaging With Cloud Foundry

Tuesday, November 13, 12

Page 14: Cloud Messaging With Cloud Foundry

The Social Media Guru

Tuesday, November 13, 12

Page 15: Cloud Messaging With Cloud Foundry

We need to give badges to users for each picture upload

Tuesday, November 13, 12

Page 16: Cloud Messaging With Cloud Foundry

We need to give badges to users for each picture upload

and post uploads to Twitter

Tuesday, November 13, 12

Page 17: Cloud Messaging With Cloud Foundry

Tuesday, November 13, 12

Page 18: Cloud Messaging With Cloud Foundry

The Sysadmin

Tuesday, November 13, 12

Page 19: Cloud Messaging With Cloud Foundry

Dumb! You’re delivering full size images!

The bandwidth bill has tripled!

Tuesday, November 13, 12

Page 20: Cloud Messaging With Cloud Foundry

Dumb! You’re delivering full size images!

The bandwidth bill has tripled!

We need this fixed for yesterday!

Tuesday, November 13, 12

Page 21: Cloud Messaging With Cloud Foundry

Tuesday, November 13, 12

Page 22: Cloud Messaging With Cloud Foundry

The Developer in the other team

Tuesday, November 13, 12

Page 23: Cloud Messaging With Cloud Foundry

I need to call your PHP stuff but from Python

Tuesday, November 13, 12

Page 24: Cloud Messaging With Cloud Foundry

I need to call your PHP stuff but from Python

And also Java starting next week

Tuesday, November 13, 12

Page 25: Cloud Messaging With Cloud Foundry

Tuesday, November 13, 12

Page 26: Cloud Messaging With Cloud Foundry

The User

Tuesday, November 13, 12

Page 27: Cloud Messaging With Cloud Foundry

I don’t want to waittill your app resizes

my image!

Tuesday, November 13, 12

Page 28: Cloud Messaging With Cloud Foundry

You

Tuesday, November 13, 12

Page 29: Cloud Messaging With Cloud Foundry

Tuesday, November 13, 12

Page 30: Cloud Messaging With Cloud Foundry

Let’s see the code evolution

30Tuesday, November 13, 12

Page 31: Cloud Messaging With Cloud Foundry

%% image_controllerhandle('PUT', "/user/image", ReqData) -> image_handler:do_upload(ReqData:get_file()), ok.

Pseudo Code

Comments

Tuesday, November 13, 12

Page 32: Cloud Messaging With Cloud Foundry

%% image_controllerhandle('PUT', "/user/image", ReqData) -> image_handler:do_upload(ReqData:get_file()), ok.

Pseudo Code

Function Name

Tuesday, November 13, 12

Page 33: Cloud Messaging With Cloud Foundry

%% image_controllerhandle('PUT', "/user/image", ReqData) -> image_handler:do_upload(ReqData:get_file()), ok.

Pseudo Code

Arguments

Tuesday, November 13, 12

Page 34: Cloud Messaging With Cloud Foundry

%% image_controllerhandle('PUT', "/user/image", ReqData) -> image_handler:do_upload(ReqData:get_file()), ok.

Pseudo Code

Function Body

Tuesday, November 13, 12

Page 35: Cloud Messaging With Cloud Foundry

%% image_controllerhandle('PUT', "/user/image", ReqData) -> image_handler:do_upload(ReqData:get_file()), ok.

Pseudo Code

Return Value

Tuesday, November 13, 12

Page 36: Cloud Messaging With Cloud Foundry

%% image_controllerhandle('PUT', "/user/image", ReqData) -> image_handler:do_upload(ReqData:get_file()), ok.

First Implementation:

Tuesday, November 13, 12

Page 37: Cloud Messaging With Cloud Foundry

%% image_controllerhandle('PUT', "/user/image", ReqData) -> {ok, Image} = image_handler:do_upload(ReqData:get_file()), resize_image(Image),ok.

Second Implementation:

Tuesday, November 13, 12

Page 38: Cloud Messaging With Cloud Foundry

%% image_controllerhandle('PUT', "/user/image", ReqData) -> {ok, Image} = image_handler:do_upload(ReqData:get_file()), resize_image(Image),notify_friends(ReqData:get_user()),ok.

Third Implementation:

Tuesday, November 13, 12

Page 39: Cloud Messaging With Cloud Foundry

%% image_controllerhandle('PUT', "/user/image", ReqData) -> {ok, Image} = image_handler:do_upload(ReqData:get_file()), resize_image(Image),notify_friends(ReqData:get_user()),add_points_to_user(ReqData:get_user()),ok.

Fourth Implementation:

Tuesday, November 13, 12

Page 40: Cloud Messaging With Cloud Foundry

%% image_controllerhandle('PUT', "/user/image", ReqData) -> {ok, Image} = image_handler:do_upload(ReqData:get_file()), resize_image(Image),notify_friends(ReqData:get_user()),add_points_to_user(ReqData:get_user()),tweet_new_image(User, Image),ok.

Final Implementation:

Tuesday, November 13, 12

Page 41: Cloud Messaging With Cloud Foundry

Can our code scale to new requirements?

41Tuesday, November 13, 12

Page 42: Cloud Messaging With Cloud Foundry

What if

42Tuesday, November 13, 12

Page 43: Cloud Messaging With Cloud Foundry

What if

• We need to speed up image conversion

43Tuesday, November 13, 12

Page 44: Cloud Messaging With Cloud Foundry

What if

• We need to speed up image conversion• User notification has to be sent by email

44Tuesday, November 13, 12

Page 45: Cloud Messaging With Cloud Foundry

What if

• We need to speed up image conversion• User notification has to be sent by email• Stop tweeting about new images

45Tuesday, November 13, 12

Page 46: Cloud Messaging With Cloud Foundry

What if

• We need to speed up image conversion• User notification has to be sent by email• Stop tweeting about new images• Resize in different formats

46Tuesday, November 13, 12

Page 47: Cloud Messaging With Cloud Foundry

What if

• We need to speed up image conversion• User notification has to be sent by email• Stop tweeting about new images• Resize in different formats• Swap Language / Technology

47Tuesday, November 13, 12

Page 48: Cloud Messaging With Cloud Foundry

What if

• We need to speed up image conversion• User notification has to be sent by email• Stop tweeting about new images• Resize in different formats• Swap Language / Technology (No Down Time)

48Tuesday, November 13, 12

Page 49: Cloud Messaging With Cloud Foundry

Can we do better?

49Tuesday, November 13, 12

Page 50: Cloud Messaging With Cloud Foundry

Sure. Using messaging

50Tuesday, November 13, 12

Page 51: Cloud Messaging With Cloud Foundry

DesignPublish / Subscribe Pattern

Tuesday, November 13, 12

Page 52: Cloud Messaging With Cloud Foundry

%% image_controllerhandle('PUT', "/user/image", ReqData) -> {ok, Image} = image_handler:do_upload(ReqData:get_file()),Msg = #msg{user = ReqData:get_user(), image = Image},publish_message('new_image', Msg).

First Implementation:

Tuesday, November 13, 12

Page 53: Cloud Messaging With Cloud Foundry

%% image_controllerhandle('PUT', "/user/image", ReqData) -> {ok, Image} = image_handler:do_upload(ReqData:get_file()),Msg = #msg{user = ReqData:get_user(), image = Image},publish_message('new_image', Msg).

First Implementation:

%% friends notifieron('new_image', Msg) ->notify_friends(Msg.user, Msg.image).

Tuesday, November 13, 12

Page 54: Cloud Messaging With Cloud Foundry

%% image_controllerhandle('PUT', "/user/image", ReqData) -> {ok, Image} = image_handler:do_upload(ReqData:get_file()),Msg = #msg{user = ReqData:get_user(), image = Image},publish_message('new_image', Msg).

First Implementation:

%% friends notifieron('new_image', Msg) ->notify_friends(Msg.user, Msg.image).

%% points manageron('new_image', Msg) ->add_points(Msg.user, 'new_image').

Tuesday, November 13, 12

Page 55: Cloud Messaging With Cloud Foundry

%% image_controllerhandle('PUT', "/user/image", ReqData) -> {ok, Image} = image_handler:do_upload(ReqData:get_file()),Msg = #msg{user = ReqData:get_user(), image = Image},publish_message('new_image', Msg).

First Implementation:

%% friends notifieron('new_image', Msg) ->notify_friends(Msg.user, Msg.image).

%% points manageron('new_image', Msg) ->add_points(Msg.user, 'new_image').

%% resizeron('new_image', Msg) ->resize_image(Msg.image).

Tuesday, November 13, 12

Page 56: Cloud Messaging With Cloud Foundry

Second Implementation:

Tuesday, November 13, 12

Page 57: Cloud Messaging With Cloud Foundry

Second Implementation:

THIS PAGE INTENTIONALLY LEFT BLANK

Tuesday, November 13, 12

Page 58: Cloud Messaging With Cloud Foundry

Tuesday, November 13, 12

Page 59: Cloud Messaging With Cloud Foundry

Messaging

59Tuesday, November 13, 12

Page 60: Cloud Messaging With Cloud Foundry

Messaging

• Share data across processes

60Tuesday, November 13, 12

Page 61: Cloud Messaging With Cloud Foundry

Messaging

• Share data across processes• Processes can be part of different apps

61Tuesday, November 13, 12

Page 62: Cloud Messaging With Cloud Foundry

Messaging

• Share data across processes• Processes can be part of different apps• Apps can live in different machines

62Tuesday, November 13, 12

Page 63: Cloud Messaging With Cloud Foundry

Messaging

• Share data across processes• Processes can be part of different apps• Apps can live in different machines• Communication is Asynchronous

63Tuesday, November 13, 12

Page 64: Cloud Messaging With Cloud Foundry

Main Concepts

64Tuesday, November 13, 12

Page 65: Cloud Messaging With Cloud Foundry

Main Concepts

• Messages are sent by Producers

65Tuesday, November 13, 12

Page 66: Cloud Messaging With Cloud Foundry

Main Concepts

• Messages are sent by Producers• Messages are delivered to Consumers

66Tuesday, November 13, 12

Page 67: Cloud Messaging With Cloud Foundry

How can we start using messaging

today?

67Tuesday, November 13, 12

Page 68: Cloud Messaging With Cloud Foundry

Enter

68Tuesday, November 13, 12

Page 69: Cloud Messaging With Cloud Foundry

Why Cloud Foundry is Good™

for Messaging?

69Tuesday, November 13, 12

Page 70: Cloud Messaging With Cloud Foundry

Key aspects of Cloud Foundry

70Tuesday, November 13, 12

Page 71: Cloud Messaging With Cloud Foundry

Key aspects of Cloud Foundry

71

• Supports many apps per account

Tuesday, November 13, 12

Page 72: Cloud Messaging With Cloud Foundry

Key aspects of Cloud Foundry

72

• Supports many apps per account• Supports many services per account

Tuesday, November 13, 12

Page 73: Cloud Messaging With Cloud Foundry

Key aspects of Cloud Foundry

73

• Supports many apps per account• Supports many services per account• Services can be shared across apps

Tuesday, November 13, 12

Page 74: Cloud Messaging With Cloud Foundry

Key aspects of Cloud Foundry

74

• Supports many apps per account• Supports many services per account• Services can be shared across apps• Supports RabbitMQ by default

Tuesday, November 13, 12

Page 75: Cloud Messaging With Cloud Foundry

Intermission:

75

What is RabbitMQ

Tuesday, November 13, 12

Page 76: Cloud Messaging With Cloud Foundry

RabbitMQ

76Tuesday, November 13, 12

Page 77: Cloud Messaging With Cloud Foundry

RabbitMQ

• Multi Protocol Messaging Server

77Tuesday, November 13, 12

Page 78: Cloud Messaging With Cloud Foundry

RabbitMQ

• Multi Protocol Messaging Server• Open Source (MPL)

78Tuesday, November 13, 12

Page 79: Cloud Messaging With Cloud Foundry

RabbitMQ

• Multi Protocol Messaging Server• Open Source (MPL)• Part of Spring Source

79Tuesday, November 13, 12

Page 80: Cloud Messaging With Cloud Foundry

RabbitMQ

• Multi Protocol Messaging Server• Open Source (MPL)• Part of Spring Source• Supports AMQP, STOMP, MQTT

80Tuesday, November 13, 12

Page 81: Cloud Messaging With Cloud Foundry

RabbitMQ

• Multi Protocol Messaging Server• Open Source (MPL)• Part of Spring Source• Supports AMQP, STOMP, MQTT• Has Clients for Many Platforms: Java, Ruby, node.js, PHP,

Erlang, .Net., more

81Tuesday, November 13, 12

Page 82: Cloud Messaging With Cloud Foundry

TELL ME MORE

82Tuesday, November 13, 12

Page 83: Cloud Messaging With Cloud Foundry

TELL ME MORE

83

RabbitMQ Simulator Demo

Tuesday, November 13, 12

Page 84: Cloud Messaging With Cloud Foundry

Sample App: CloudStagram

84Tuesday, November 13, 12

Page 85: Cloud Messaging With Cloud Foundry

Sample App: CloudStagram

85Tuesday, November 13, 12

Page 86: Cloud Messaging With Cloud Foundry

Sample App: CloudStagram

86Tuesday, November 13, 12

Page 87: Cloud Messaging With Cloud Foundry

Sample App: CloudStagram

87Tuesday, November 13, 12

Page 88: Cloud Messaging With Cloud Foundry

Sample App: CloudStagram

88Tuesday, November 13, 12

Page 89: Cloud Messaging With Cloud Foundry

Sample App: CloudStagram

89Tuesday, November 13, 12

Page 90: Cloud Messaging With Cloud Foundry

Sample App: CloudStagram

90Tuesday, November 13, 12

Page 91: Cloud Messaging With Cloud Foundry

Sample App: CloudStagram

91

Frontend Appnode.js

Tuesday, November 13, 12

Page 92: Cloud Messaging With Cloud Foundry

Sample App: CloudStagram

92

Frontend Appnode.js

Image Resizersnode.js

Tuesday, November 13, 12

Page 93: Cloud Messaging With Cloud Foundry

Sample App: CloudStagram

93

Frontend Appnode.js

Image ResizersClojure

Tuesday, November 13, 12

Page 94: Cloud Messaging With Cloud Foundry

CODE OR IT DIDN’T HAPPEN

94Tuesday, November 13, 12

Page 95: Cloud Messaging With Cloud Foundry

CODA

95Tuesday, November 13, 12

Page 96: Cloud Messaging With Cloud Foundry

Messaging

96Tuesday, November 13, 12

Page 97: Cloud Messaging With Cloud Foundry

Messaging

97

Scale

Tuesday, November 13, 12

Page 98: Cloud Messaging With Cloud Foundry

Messaging

98

Scale Decoupling

Tuesday, November 13, 12

Page 99: Cloud Messaging With Cloud Foundry

Messaging

99

Scale Decoupling

Polyglot

Tuesday, November 13, 12

Page 100: Cloud Messaging With Cloud Foundry

100Tuesday, November 13, 12

Page 101: Cloud Messaging With Cloud Foundry

101

HeavyLifting

Tuesday, November 13, 12

Page 102: Cloud Messaging With Cloud Foundry

102

HeavyLifting

MultiApps

Tuesday, November 13, 12

Page 103: Cloud Messaging With Cloud Foundry

103

HeavyLifting

MultiApps

MultiServices

Tuesday, November 13, 12

Page 104: Cloud Messaging With Cloud Foundry

104

HeavyLifting

Cloud Messaging

MultiApps

MultiServices

Tuesday, November 13, 12

Page 105: Cloud Messaging With Cloud Foundry

Sign Up Today

105

https://my.cloudfoundry.com/signup

Tuesday, November 13, 12

Page 106: Cloud Messaging With Cloud Foundry

Questions?

106Tuesday, November 13, 12

Page 107: Cloud Messaging With Cloud Foundry

107

Thanks!Álvaro Videla

http://twitter.com/old_sound

http://github.com/videlalvaro

http://www.slideshare.net/old_sound

Tuesday, November 13, 12