Inspirel banner

Programming Distributed Systems with YAMI4

I Welcome To YAMI4

1 Introduction

1.1 A Bit Of History

1.2 YAMI4 Strong Points

1.2.1 Non-intrusiveness

1.2.2 Composability

1.2.3 Lightweight Scalability

1.2.4 Support For Real-Time Systems

1.2.5 Lack Of Dependencies

1.2.6 Small Size

1.2.7 Performance

1.2.8 Easy To Learn Interface

1.3 Licensing

1.4 Who Should Read This Book

1.5 Conventions Used In This Book

1.5.1 Code Example In Ada

1.5.2 Code Example in C++

1.5.3 Code Example in Java

1.5.4 Code Example in .NET

1.5.5 Code Example in Python

1.6 Thank You

2 Library Structure And Compilation

2.1 Core C++ Library

2.2 C++ General-Purpose Library

2.3 Ada Libraries

2.4 Java Library

2.5 .NET Library

2.6 Python Library

2.7 Central Services

II General-Purpose Programming

3 Data Model

3.1 Distributed Systems Are Dynamically Typed

3.2 Parameters

3.3 General Notes On Basic Types

3.3.1 Ada

3.3.2 C++

3.3.3 Java

3.3.4 .NET

3.3.5 Python

3.4 Creating Parameters

3.4.1 Ada

3.4.2 C++

3.4.3 Java

3.4.4 .NET

3.4.5 Python

3.5 Setting New Entries

3.5.1 Ada

3.5.2 C++

3.5.3 Java

3.5.4 .NET

3.5.5 Python

3.6 Reading Entries

3.6.1 Ada

3.6.2 C++

3.6.3 Java

3.6.4 .NET

3.6.5 Python

3.7 Removing Entries

3.7.1 Ada

3.7.2 C++

3.7.3 Java

3.7.4 .NET

3.7.5 Python

3.8 Finding And Exploring Entries

3.8.1 Ada

3.8.2 C++

3.8.3 Java

3.8.4 .NET

3.8.5 Python

3.9 Iteration

3.9.1 Ada

3.9.2 C++

3.9.3 Java

3.9.4 .NET

3.9.5 Python

3.10 Locking

3.10.1 Ada

3.10.2 C++

3.10.3 Java

3.10.4 .NET

3.10.5 Python

3.11 Serialization

3.11.1 Ada

3.11.2 C++

3.11.3 Java

3.11.4 .NET

3.11.5 Python

3.12 Multithreading And Performance Notes

3.13 Raw Binary Data Transfer

3.13.1 Ada

3.13.2 C++

3.13.3 Java

3.13.4 .NET

3.13.5 Python

4 Messaging - Common Concepts

4.1 Direct vs. Decoupled

4.2 Agents

4.3 Configuration Options

4.3.1 TCP Listening Backlog

4.3.2 TCP Reuse Server Address

4.3.3 TCP Non-Blocking I/O

4.3.4 TCP No-Delay

4.3.5 TCP Keepalive

4.3.6 TCP Frame Size

4.3.7 UDP Frame Size

4.3.8 Unix Listening Backlog

4.3.9 Unix Non-Blocking I/O

4.3.10 Unix Frame Size

4.3.11 File Non-Blocking I/O

4.3.12 File Frame Size

4.3.13 Dispatcher Threads

4.3.14 Connection Retries

4.3.15 Connection Retry Delay Spread

4.3.16 Outgoing Water Marks

4.3.17 Incoming Water Marks

4.3.18 Raw Binary Delivery

4.3.19 Incoming Queue Max Length

4.3.20 Ada

4.3.21 C++

4.3.22 Java

4.3.23 .NET

4.3.24 Python

5 Messaging - Client Side

5.1 Outgoing Messages

5.1.1 Ada

5.1.2 C++

5.1.3 Java

5.1.4 .NET

5.1.5 Python

5.2 One-Way Messages

5.3 Message Priorities

5.4 Load Balancing And Fail-Over

6 Messaging - Server Side

6.1 Listeners

6.1.1 TCP Listeners

6.1.2 UDP Listeners

6.1.3 Unix Listeners

6.1.4 Ada

6.1.5 C++

6.1.6 Java

6.1.7 .NET

6.1.8 Python

6.2 Objects And Message Handlers

6.2.1 Ada

6.2.2 C++

6.2.3 Java

6.2.4 .NET

6.2.5 Python

6.3 Incoming Messages

6.3.1 Ada

6.3.2 C++

6.3.3 Java

6.3.4 .NET

6.3.5 Python

6.4 Publish-Subscribe Messaging

6.4.1 Ada

6.4.2 C++

6.4.3 Java

6.4.4 .NET

6.4.5 Python

7 Central Services

7.1 Name Server

7.1.1 Bind

7.1.2 Resolve

7.1.3 List

7.1.4 Startup and Configuration

7.2 Message Broker

7.2.1 Message Routing Based On Tag Matching

7.2.2 Clustered Installations And Forwarding

7.2.3 Publish

7.2.4 Confirmed Publish

7.2.5 Subscribe

7.2.6 Get Statistics

7.2.7 Startup and Configuration

7.3 Cache

7.3.1 Set

7.3.2 Get

7.3.3 Delete

7.3.4 Startup and Configuration

7.4 Dashboard

7.4.1 Startup and Configuration

8 Loose Ends

8.1 Channel Management

8.1.1 Connection Event Notifications

8.2 Error Reporting and Event Logging

8.2.1 Errors

8.2.2 Logging

8.3 Java Beans

9 Examples

9.1 Printer

9.1.1 Ada

9.1.2 C++

9.1.3 Java

9.1.4 .NET

9.1.5 Python

9.2 Calculator

9.2.1 Ada

9.2.2 C++

9.2.3 Java

9.2.4 .NET

9.2.5 Python

9.3 Publish-Subscribe

9.3.1 Ada

9.3.2 C++

9.3.3 Java

9.3.4 .NET

9.3.5 Python

III Critical Systems

10 Special Needs

10.1 Minimized Dependencies

10.2 Private Memory Partitions

10.2.1 Predictability

10.2.2 Isolation

10.2.3 Ada

10.2.4 C++

11 Messaging With The Core Library

11.1 Data Model

11.2 Messaging

11.3 Callbacks

11.3.1 Incoming Connection

11.3.2 Incoming Connection Closing

11.3.3 Message Progress

11.3.4 Incoming Message

11.4 Doing The I/O Work

11.5 Multithreading

A Differences Between YAMI Releases

A.1 Main Concepts

A.2 Internal Architecture

A.2.1 Configuration Settings

A.3 Supported Languages

A.4 API Conventions

A.5 Additional Tools And Services

B Wire Protocol

B.1 Serialization Format

B.2 Frame Format

C General-Purpose Message Routing

D Inter-Language Interface

E JSF Coding Standard Exceptions