Designing large-scale distributed systems is hard. New technologies make it easier to comply with today’s communications and security standards, but don’t auto-magically give you a robust and scalable system. Join Udi for a course packed with the wisdom of companies like SUN, Amazon and EBay.
Tried-and-true theories and fallacies will be shown, keeping you from making those same costly mistakes today. Communications patterns like publish/subscribe and correlated one-way request/response will be used in conjunction with advanced object-oriented state management practices for long-running workflows. If you enjoy deep architectural discussion, if you are in charge of building a large-scale distributed system, if you want to know more about how the big guys run their systems, this is for you.
Module 1: Distributed Systems Theory
Decades of distributed systems development have taught us many lessons. In this
module we’ll cover many historical mistakes as well as proven best practices for scalable
and robust design. Topics include:
- 8 fallacies of distributed systems
- Transactions
Module 2: Coupling: Platform, Temporal, & Spatial
Loose coupling has become the watchword of complex systems development, yet few
understand its multiple dimensions. In the module we’ll be covering the three different
dimensions of coupling as well as patterns for dealing with them.
- Platform Coupling – XML/SOAP
- Temporal Coupling – Synchronous/Asynchronous
- Spatial Coupling – Endpoints/Topics
Module 3: Asynchronous Messaging Patterns
Although scalability is achieved through the use of asynchronous message passing,
more advanced message exchange patterns are required to handle today’s complex
integration scenarios. This module will cover the most commonly used patterns:
- One way
- Correlated Request/Response
- Publish/Subscribe
Module 4: Bus & Broker Architectural Styles
Enterprise Service Buses are all the rage these days. In this module we’ll be covering
what’s the difference between the Bus architectural style, and the more well-known
Broker, found commonly in many EAI projects. Topics will include:
- Architectural advantages and disadvantages
- Technological advantages and disadvantages
Module 5: SOA Building Blocks
One of the goals of SOA is to develop systems which are more closely aligned with
Business. In this module we’ll be covering an analysis methodology from moving from
the business domain to executable systems that comply with all the principles of loose-
coupling.
- Business Services
- Business Components
- Autonomous components & Queues
Module 6: Scalability and Flexibility
In order to enable agility, services must be able to scale up, out, and down quickly. In
this module we’ll see how autonomous components can be configured including
transactional and durable aspects of message handling.
- Configuring autonomous components
- Scaling up and out
Module 7: Long running processes
The distributed communications patterns would not be complete without a discussion on orchestration. In this module we’ll see how to manage the state of long-running distributed communication flows as well as:
- Encapsulating process logic
- Advantages & disadvantages of orchestration
Module 8: Service / Autonomous Component Solution Structure
As developers go to implement autonomous components, guidance is required as to which concepts need to implemented in which project, what dependencies are there between projects, and how to bridge the worlds of messaging, business logic and reporting. Topics include:
- Messages + Handlers
- Databases
Module 9: Service Layer – Domain Model Interaction
Logic-rich services require the use of advanced techniques for logic componentization.
The Domain Model Pattern enforces a high level of Separation of Concerns, yet it must eventually be connected with Service Layer code that supports many concurrent users.
In this module, the topics covered will include:
- Domain Model introduction
- Testing Domain Models
- Optimistic, Pessimistic, and Realistic Concurrency Models
Module 10: Creating High-Performance Domain Models
The strong separation between the Domain Model and the database which stores and
retrieves its data may enable a high level of testability, yet often causes performance
problems. In this module, we’ll see the various aspects impacting the performance of
persistence:
- Transactions and Isolation Levels
- Lazy Loading, Eager Fetching
- Databases Tips & Tricks
Module 11: Web Services and User Interfaces
The ease of interacting with users over the web drives the need for service to UI interactions. Also, many integrations require exposing synchronous web services to customers. In this module, we’ll see what is required in both cases:
- ASP.NET 2.0 Asynchronous Tasks
- Rich Internet Applications and Services
- Web Services for integration
Module 12: Case Study
This course will wrap up with an enterprise case study that draws upon all lessons showing students how all the patterns and principles work together in a solution.
Each day will end with a general discussion, review and wrap up.