Automated Introspection of a Distributed Virtualization
Platforms for Performance Analysis and Documentation
Nima Kaviani, Michael Miximilien,
Ignacio Silva-Lepe, Isabelle Rouvellou
IBM Research – T.J. Watson Research Centre
University of British Columbia, Vancouver, Canada
Problem
Understanding Distributed Open-source Cloud Platforms
Problem
Problem
Track System Evolution
Problem
Austin Bexar Cactus Diablo
Essex
Folsom
Grizzly
Havana
Problem
Austin Bexar Cactus Diablo
Essex
Folsom
Grizzly
Havana
version 1.0
version 2.0
Problem
Austin Bexar Cactus Diablo
Essex
Folsom
Grizzly
Havana
version 1.0
version 2.0Online Enterprise
Problem
Software Resiliency & Testing
11
CloudFoundry 1.0
CF Client Eclipse Plugin MobilePC
Router
NATS
Mysql Redis Mongo
.....
.
NATS MSGHTTP MSG
DEA
UAA
He
alth
Ma
na
ge
r
Stager
CloudControllerCloud
Controller
Service Pool
Cache
BlobStore
12
CloudFoundry 2.0
CF Client Eclipse Plugin MobilePC
GoRouter
NATS
Mysql Redis Mongo
.....
.
NATS MSGHTTP MSG
DEA
UAA
He
alth
Ma
na
ge
r
CloudControllerCloud
Controller
Service Pool
Cache
BlobStore
Connector
Ext. Services
Apps in warden
Build Packs Dir Server
Code Introspection
capturing message exchanges
Code Introspection
capturing message exchanges
Aquarium: Aspect-oriented programming for Ruby
point-cuts advicejoin-points
15
Aquarium
class Test def test_method puts “Hello World!” endend
16
Aquarium
class Test def test_method puts “Hello World!” endend
join-points
17
Aquarium
class Test def test_method puts “Hello World!” endend
Aspect.new :around, :calls_to => “test_method”, :type_and_descendents => “Test”, :method_options[:public] do |jpt, obj, *args| puts “Pre-Aspect Execution.” result = jpt.proceed puts “Post-Aspect Execution.”end
join-points
18
Aquarium
class Test def test_method puts “Hello World!” endend
Aspect.new :around, :calls_to => “test_method”, :type_and_descendents => “Test”, :method_options[:public] do |jpt, obj, *args| puts “Pre-Aspect Execution.” result = jpt.proceed puts “Post-Aspect Execution.”end
join-points
point-cuts
19
Aquarium
class Test def test_method puts “Hello World!” endend
Aspect.new :around, :calls_to => “test_method”, :type_and_descendents => “Test”, :method_options[:public] do |jpt, obj, *args| puts “Pre-Aspect Execution.” result = jpt.proceed puts “Post-Aspect Execution.”end
join-points
point-cuts
advice
20
Aquarium
class Test def test_method puts “Hello World!” end
alias_method :_aspect_saved_Test_test_method, :test_method
def test_method *args, &block_for_method
# advice chaining # advice invocation end
public :test_method private :_aspect_saved_Test_test_methodend
21
Aquarium
class Test def test_method puts “Hello World!” end
alias_method :_aspect_saved_Test_test_method, :test_method
def test_method *args, &block_for_method
# advice chaining # advice invocation end
public :test_method private :_aspect_saved_Test_test_methodend
rewrite
22
Aquarium
class Test def _aspect_saved_Test_test_method puts “Hello World!” end
def test_method *args, &block_for_method
# advice chaining # advice invocation # making a call to :_aspect_saved_Test_test_method end
public :test_method private :_aspect_saved_Test_test_methodend
Code Inspection
AOP - drawback
Code Inspection
AOP - drawback
Aspect.new :around, :calls_to => “test_method”, :type_and_descendents => “Test”, :method_options[:public] do |jpt, obj, *args| puts “Pre-Aspect Execution.” result = jpt.proceed puts “Post-Aspect Execution.”end
SignatureDependent
Capturing NATS
Capturing REST
REST Http Client
27
CloudFoundry 2.0
CF Client Eclipse Plugin MobilePC
GoRouter
NATS
Mysql Redis Mongo
.....
.
NATS MSGHTTP MSG
DEA
UAA
He
alth
Ma
na
ge
r
CloudController
Service Pool
Cache
BlobStore
Connector
Ext. Services
Apps in warden
Build Packs Dir Server
PROFILER
PR
PR
PR PR
PR
PR
PR PR PR
PR
28
CloudFoundry 2.0
CF Client Eclipse Plugin MobilePC
GoRouter
NATS
Mysql Redis Mongo
.....
.
NATS MSGHTTP MSG
DEA
UAA
He
alth
Ma
na
ge
r
CloudController
Service Pool
Cache
BlobStore
Connector
Ext. Services
Apps in warden
Build Packs Dir Server
PROFILER
PR
PR
PR PR
PR
PR
PR PR PR
PR
Analysis Server
29
Analysis Server
MessageCorrelation
MessageType Resolution
MessageSource Resolution
MessageTarget Resolution
MessageCorrelation
MessageCorrelation
MessageFiltering
SequenceExec Extraction
SequenceExtraction
SequenceDiagram Docs
MessageTemplates
MessagePattern Changes
Documentation Generation
Message Exchange Patterns
31
Message Exchange PatternsChannel Name: dea.advertise
Content: Name Type
app_id_to_count Hash
available_memory FixNum
id String
prod FalseClass
stacks Array
Subscribers: Cloud_Controller
Publishers: DEA
Documentation Generation
Message Exchange Sequences
33
Message Exchange Sequences
Message Snapshots:
34
Message Exchange Sequences
Message Snapshots:
System Evolution
Message Pattern Changes
36
Message Pattern ChangesChannel Name: dea.advertise
Content: Name Type
app_id_to_count Hash
available_memory FixNum
id String
prod NilClass FalseClass
runtimes stacks Array
Subscribers: Cloud_Controller
Publishers: DEA
Evaluations
Evaluations
releasing the documentation
to the CloudFoundry community
39
Evaluation
5 days of active emailing / twitting people11 people responded
40
Evaluation
41
Evaluation
42
Evaluation
43
Evaluation
44
Evaluation
Challenges
Challenges
signature-based AOP is restrictive
Challenges
manual intervention is required
Future Plans
Future Plans
developing a DSL for instrumentation
Future Plans
assessing generalizability
Future Plans
software resiliency tests
Future Plans
increased automation
Future Plans
code dependency analysis