Retrofitting Reliability into Complex Systems
Chapter 20

1. Two approaches:
     -- Wrappers that encapsulate an existing system piece of software in an environment that transparently
     extends its properties. Ex: introducing fault tolerance through replication; enforcing security; enforcing access control;
    -- Toolkits that provide explicit procedure-call interfaces; Ex: Globus Toolkit
    -- Platforms that include reliability as integral component; Ex: Editing and debugging on MS Visual Studio uniformly
          supported for many languages. ("drag and drop reliability")

2. Issues, implementations, advantages and disadvantages, and limitations

3. Sample problem: Introduce reliability into Web Services.. no methods are currently available.

4. Issues and possible solutions for introducing reliability:
   Complexity of existing code (old technology) to be updated to be reliable?
   Solution: wrappers.
   A wrapper is a technology that overcomes problems by intercepting events at some interface between unmodifiable
   technology and external environment. This essentailly replaces existing behavior with an extended behavior which confers
   a desired property.
   
   -- Webservices itself is a wrapper, ofte used as a gateway between a new application and legacy code.
         http://www.infoworld.com/article/05/05/02/18FEsoabt_1.html?WEB%20SERVICES

   Toolkit Solutions: Write an independent application that will provide reliability solution. Existing code will call this
   application to enforce the required behavior.
    The toolkit approach pacakges potentially complex mechnisms, such as data with locking, behind easy-to-use interfaces.
    Toolkits are quite powerful in the hands of developer with freedom to use them in an intended manner with their limitations.
     However they may be inflexible at tmes.
 
    Examples: firewall that filters messages entering and exiting distributed systems, is a tool for enforcing security.
    A toolkit could package reliable communication technology such as message bus, a system monitoring and management
    technology, a fault tolerant file system and name service.
    Programming lanaguage that implements reliability techniques could be considered a toolkit too.

    Some good characteristics of a toolkit:
    -- addresses a set of application-specific problems
    -- well focussed and coherent; if it addresses many problems it may be very weak architecturally
    A large complex distributed system application typically uses a combination of wrappers and toolkits.

5. Types of toolkits for building reliable distributed systems:
    Server replication : Tols and techniques for replicating data for high availablity
    Video server: technologies for striping vedeo data across multiple servers, single replay for multiple clients (video on demand?)
     Client groupware: integration og conferencing tools into Java
    System management: for instrumenting a distributed systems and perfroming reactive control.
    Firewalls and Containment tools:

6. Wrapper types/methods: (20.1.1)
    Wrapping at object interface: object-oriented interface and implementation; Used in fault-tolerant CORBA.
    Wrapping by library replacement: RPC stub is ana example
    Wrapping by object code editing: object code editing would permit selective remapping of certain procedure calls into calls
      to wrapper functions. (C# and Java's intermediate cod eis well suited for this method).
    Wrapping with interposition of agents and buddy processes:  Shop front is an example.
    Wrapping communication infrastructures: Virtual private networks
     
    Another Internet?: See http://free2innovate.net/

7. Toolkit Technologies: Wrappers have limitations: typically are specific solutions and are not reusable as such.
                                          Wrappers are good for deterministic applications.
     Any (i) time dedependent appliation (ii) asynchronous application (iii) parallel or preemptive multithreaded application are
     all potentailly nondeterministic.

     In a toolkit desired technology is prepackaged usually in the form of API (or procedure calls).

     Typical interfaces in toolkits for Process Group Computing:
     1. Load Balancing: balanced as the number of group member increases
     2. Guaranteed execution: transparent to the user
     3. Locking: provides synchonization or token passing
     4. replicated data:
     5. Logging: Provides logging tools
     6. Wide area spooling: integrating LANS into WANs.
     7. Membership raking: Within a process group, provides ranking on the members that can be used to subdivide tasks.
     8. Monitoring and control: for instrumenting communications into and out of group and controlling aspects of comm.
     9. State Transfer: Transfre of state to group of joining process.
     10. Buk transfer: Supports out of band transfers for high volume data
      11. Shared memory: Tools for supporting shared memory regoins within process group.

8. Distributed Programming Languages
     Agent oriented programming languages and other fourth generation languages (4GLs) pacakge powerful tools in the form of special
     purpose programming environments.

    JBoss is a J2EE-compliant package that provides tools for designing and impementing JavaGroups in J2EE environment. We can
    use it for realizing reliability. (Major topic for CSE622)
    It embeds group communication functionality into Java Env.
    It extends Java platform to offer reliability features in the sense that group comm is provided as a language primitive.

   It is possible that in the future OO languages such as C# and Java may provide class libraries for "replication" and "group communication"
    while type theory community community presses forward on logical foundations of replication and mathematical correctness of highly available
    applications. (possible Ph.D topic).

9
. Wrapping a simple RPC: wrapping for reliability; 20.2
10. Wrapping a Web Site : fault-tolerant web server;20.3
11. Hardening other aspects of Web server;20.4
12. Unbreakable stream connections;20.5
13. Reliable distributed shaed memory;20.6