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