Top Banner
Modeling Highly Dynamic Software Architectures Research Proposal Jonathan Aldrich
29

Modeling Highly Dynamic Software Architectures Research Proposal Jonathan Aldrich.

Jan 17, 2016

Download

Documents

Dorthy Copeland
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Modeling Highly Dynamic Software Architectures Research Proposal Jonathan Aldrich.

Modeling Highly DynamicSoftware Architectures

Research Proposal

Jonathan Aldrich

Page 2: Modeling Highly Dynamic Software Architectures Research Proposal Jonathan Aldrich.

Motivation

• Modern architectures are dynamic– Networked, Plug-in, Object-oriented, Service-oriented

• Architectural notations quite limited– Acme/xADL: At most supports “optional” components– Wright: Fixed maximum # of components– ArchJava: Fixed pattern of connection

• Research questions:– What is the state of the art?– What are the open questions?– What are interesting possible approaches?

Page 3: Modeling Highly Dynamic Software Architectures Research Proposal Jonathan Aldrich.

Examples of Dyn. Arch.• Plugins/dynamic loading

– At load/start time or run time– Dependent on versions?– Eclipse, Apache, EJB, Corba, Java class loading

• Self-healing systems– Owen: videoconferencing

• Evolving a running system– Linux services

• Stop, upgrade, restart individual services– Telecom

• Uses duplication/failover to keep track of call circuit states as software is upgraded

• NASA spacecraft– Fail-safe mode: stop and wait for instructions from earth, maybe load

new code– MDS upgrade scenarios

Page 4: Modeling Highly Dynamic Software Architectures Research Proposal Jonathan Aldrich.

Evolution vs. Dynamism

• Evolution: configuration time, versioning

• Dynamism: run-time

• Border may be unclear– What about evolving a running system?

Page 5: Modeling Highly Dynamic Software Architectures Research Proposal Jonathan Aldrich.

Dynamism of Types/Instances

• Types– Adding new types to a style– Changing a style

• What does a type capture?– Behavior? Signature? Quality attributes? Identity?– Depends on modeling purposes

• Structure– Adding/removing/changing components & connectors

Page 6: Modeling Highly Dynamic Software Architectures Research Proposal Jonathan Aldrich.

Dimensions of Dynamism

• Locus of control: external or internal?

• Locus of control: centralized or decentralized?– May be different at design & impl time

• Field of view: complete or partial?

• What may change vs. how does it change

• How can we abstract away from these decisions at the modeling level?

Page 7: Modeling Highly Dynamic Software Architectures Research Proposal Jonathan Aldrich.

Static vs. Dynamic architecture

• Essential difference: state vs. execution

Page 8: Modeling Highly Dynamic Software Architectures Research Proposal Jonathan Aldrich.

Limitations of Previous Work

• Limitations on dynamic configurations– Finite # of configurations (Wright)– Limited to statically-declared patterns of types

(Everyone)– Cannot extend connections (ArchJava) or extension is

limited to one component type (Darwin, Rapide)– Cannot delete components/connections/ports

(ArchJava, Darwin)– Dynamically created components cannot provide

services (Darwin)• Research Challenge

– Can we build a modeling system without these limitations?

Page 9: Modeling Highly Dynamic Software Architectures Research Proposal Jonathan Aldrich.

Issues (1)

• Structural vs. Behavioral dynamism– Behavioral: Wright, Rapide– Structural: Wright, Rapide, Darwin, ArchJava

• Research Challenge: Combination– Wright, Rapide support only limited forms

Page 10: Modeling Highly Dynamic Software Architectures Research Proposal Jonathan Aldrich.

Issues (2)

• Explicit vs. Implicit connections– Implicit connections are not really architecture

• But often used in architectural formalisms, i.e. pi-calculus

• Research challenge– Can we get the expressiveness of pi-calc

while remaining explicit?

Page 11: Modeling Highly Dynamic Software Architectures Research Proposal Jonathan Aldrich.

Issues (3)

• Abstraction mechanisms– Hierarchy in architecture – Darwin, ArchJava,

Rapide– Non-determinism in behavior – Wright

• Research challenge– Can we combine these?

Page 12: Modeling Highly Dynamic Software Architectures Research Proposal Jonathan Aldrich.

Issues (4)

• Analysis support– Deadlock detection– Checking temporal properties– Simulating architectures– Verifying structural properties– Checking quality attributes

Page 13: Modeling Highly Dynamic Software Architectures Research Proposal Jonathan Aldrich.

ADLs with some dynamism

• Darwin

• Rapide

• Wright

• Acme (optional components)

• C2 SADL/xADL

• ArchJava

• ArchWare

Page 14: Modeling Highly Dynamic Software Architectures Research Proposal Jonathan Aldrich.

Major Open Issues• Type dynamism• Modeling emergent systems

– Does architecture have benefits here?• Modeling richer structural dynamism• Modeling structural & behavioral dynamism together• Dynamism and abstraction

– Hierarchy, non-determinism– Multiple views: abstraction

• Separation of concerns– How to reason separately about changes to the architecture that have different motivations, then compose

them together• How to transition to implementation and/or check conformance

– maybe more than one impl/more than one refinement• Field study of dynamism in applications today

– What kinds of dynamism are needed?– What could be checked?

• Richer analysis– Incremental progress towards goal/do no harm– Concurrency – what changes interfere with each other or with overall system functionality & quality

attributes– Stability – can you guarantee that a fix to one problem doesn’t destabilize another, whose fix breaks the

original problem

Page 15: Modeling Highly Dynamic Software Architectures Research Proposal Jonathan Aldrich.

Reading Group Interest?• Several people interested• Some people want credit (3-6 units)

• Once/week– Looking at different dyn. arch. Ideas– Reading papers from literature

• Dynamic Wright• Wermelinger• CHAM?• Graph grammars• ArchWare• Magee & Kramer / Darwin• Formalisms for (state machine/petri nets) composite web services• Autonomic computing

– Develop wiki wiki web as part of course to capture part of reading group• c2 wiki

Page 16: Modeling Highly Dynamic Software Architectures Research Proposal Jonathan Aldrich.

A Proposal

• Type dynamism

• Modeling emergent systems– Does architecture have benefits here?

• Modeling richer structural dynamism

• Modeling structural & behavioral dynamism together

• Dynamism and abstraction

• Richer analysis

Page 17: Modeling Highly Dynamic Software Architectures Research Proposal Jonathan Aldrich.

One set of goals

• Support both structural and behavioral dynamism– No type dynamism

• Avoid previous limitations on structural dynamism• Explicit connections• Support both hierarchical and behavioral abstraction• Control mechanism

– Internal, centralized, view based on hierarchy

• Analysis support– Typechecking, Structural constraints, behavioral constraints

Page 18: Modeling Highly Dynamic Software Architectures Research Proposal Jonathan Aldrich.

Dynamic Architectural Changes

• Goals– Allow arbitrary (well-formed) architectural changes– Avoid dangling ports or roles

• Operations– let c = addComponent(CType)– let x = addConnection(XType)– let (p,r) = bind(c,PType,x,RType)– removeComponent(c)– removeConnection(x)– unbind(p,r)

Page 19: Modeling Highly Dynamic Software Architectures Research Proposal Jonathan Aldrich.

Architectural Events

• Includes all operations above

• Operation sequences– op ; op

• External port/role creation– Create(p), Create(r)– Remove(p), Remove(r)

• Port/role communication– Communicate(p), Communicate(r)

Page 20: Modeling Highly Dynamic Software Architectures Research Proposal Jonathan Aldrich.

Component State

• Fixed set of states for each component– Name– Fixed # of element id parameters– Supports component behavior protocol

• Also similar set of states for each port– Tracks port correlations– Supports port behavior protocol

• Connectors/roles similar

Page 21: Modeling Highly Dynamic Software Architectures Research Proposal Jonathan Aldrich.

Component Behavior

• Transition relation– Initial state × action final state

• Semantics– Enumerate all transitions that apply

• Corresponding actions must match– Communication on port and role– External/internal port/role addition/removal events

– Choose one non-deterministically• Fairness criterion?• User-specified constraints?

Page 22: Modeling Highly Dynamic Software Architectures Research Proposal Jonathan Aldrich.

Configuration

• Component– ID × CType × State × pList × bList × cList

• Port– ID × PType × State

• Bindings– ID × ID

• Connectors/roles are symmetric

Page 23: Modeling Highly Dynamic Software Architectures Research Proposal Jonathan Aldrich.

Example: Eclipse Plugin Architecture

component type Eclipse { begin × let c=create(Plugin) configure(c)

configure(c:Plugin) × c2:Plugin.bind(c,ReqT,c2,ProvT) configure(c) configure(c:Plugin) begin}

component type Plugin { external port type ProvT,ReqT;

begin × create(p:ReqT) begin begin run

run × create(p:ProvT) run run × p:ProvT.comm(p) run run × p:ReqT.comm(p) run}

Page 24: Modeling Highly Dynamic Software Architectures Research Proposal Jonathan Aldrich.

Example: Self-Healing Servers

component type System { begin × let c=create(Client) begin begin × let s=create(Server) begin begin × c:Client s:Server.bind(c,CT,s,ST) begin begin × s:Server c:Client,cp:c.CT,sp:s.ST . unbind(c.cp,s.sp); remove(s) begin}

component type Client { external port type CT;

begin × create(p:CT) request(p) request(p:CT) × comm(p) reply(p) reply(p:CT) × comm(p) request(p) _ × p:CT.remove(p) begin}

component type Server { external port type ST;

begin × create(p:ST) begin begin × p:ST.comm(p) reply(p) reply(p:ST) × comm(p) begin reply(p:ST) × remove(p) begin}

Page 25: Modeling Highly Dynamic Software Architectures Research Proposal Jonathan Aldrich.

Example: Services with Discovery

component type System { begin × let c=create(Client) begin begin × let s=create(Server) begin begin × c:Client s:Server.bind(c,CT,s,ST) begin begin × s:Server c:Client,cp:c.CT,sp:s.ST . unbind(c.cp,s.sp); remove(s) begin}

component type Service { external port type DiscT,ProvT,ReqT;

begin × create(d:DiscT) register(d) register(d:DiscT) × comm(p) run(d)

run(d:DiscT) × comm(p),create(r:ReqT) run(d) run(d:DiscT) × create(p:ProvT) run(d)

run(d:DiscT) × r:ReqT/ProvT . comm(r) run(d)

run(d:DiscT) × remove(d) begin run(d:DiscT) × r:ReqT/ProvT . remove(r) begin}

component type Discovery { external port type DiscT;

begin × create(p:DiscT) begin begin × p:DiscT.comm(p) begin begin × p:DiscT.remove(p) begin}

Page 26: Modeling Highly Dynamic Software Architectures Research Proposal Jonathan Aldrich.

Research questions

• Do we need to model data passed on ports?

• How to define a well-formed state– And ensure that execution preserves well-

formedness

• Specification and verification of architectural constraints

• Expressiveness– Almost certainly Turing-complete

Page 27: Modeling Highly Dynamic Software Architectures Research Proposal Jonathan Aldrich.

Base for Future Work

• Aspect-based architecture specifications– Enhance or restrict a base architecture– Cleanly combine two architectural views

• Model unknown component & port types– For dynamic loading

Page 28: Modeling Highly Dynamic Software Architectures Research Proposal Jonathan Aldrich.
Page 29: Modeling Highly Dynamic Software Architectures Research Proposal Jonathan Aldrich.

Example: Self-Healing Servers

component type System { begin × let c=create(Client); s:Server.bind(c,CT,s,ST) begin begin × let s=create(Server) begin begin × s:Server delete(s) delete(s:Server) × sp:s.ST,c:Client,p:cp.CT where bind(c.cp,s.sp) . unbind(c.cp,s.sp)

rebind(s,c) rebind(s:Server,c:Client) × s2:Server where s2 != s . bind(c.CT,s2.ST) delete(s) delete(s:Server) × remove(s) begin}

component type Client { external port type CT; begin × create(p:CT) request(p) request(p) × comm(p) reply(p) reply(p) × comm(p) request(p) _ × p:CT.remove(p) begin}

component type Server { external port type ST; begin × p:ST.comm(p) reply(p) reply(p) × comm(p) begin reply(p) × remove(p) begin}