Public courses open for registration updated for 2015:
Read a review of the course recording here.
Udi also provides high-end, advanced architectural training on-site, tailored to your needs.
You get the combination of real-world expertise from a consultant who practices what he preaches for a living and the communication abilities of a world-class conference presenter.
Enterprise Development with NServiceBus
Duration: 4 days
Udi Dahan’s “Enterprise Development with NServiceBus” course teaches you all the ins-and-outs of NServiceBus – the most popular, open-source service bus for .NET – now updated for NServiceBus 3.0. Used in production since 2006, NServiceBus is now used in hundreds of companies in finance, healthcare, retail, SaaS, web 2.0, and more.
From basic one-way messaging, through publish/subscribe; providing solutions from transactions to cross-machine scale out; this hands-on course will show you how simple distributed systems development can be.
Upon completion of this NServiceBus course you will know how to use all the latest features of version 3.0, implement message exchange patterns such as full duplex and pub/sub, design long-running business processes using sagas and how to manage and monitor distributed systems.
.NET developers working on distributed systems and in enterprise environments.
Module 1: One-Way Messaging Basics
- Routing with the unicast bus
- Handling messages and polymorphic dispatch
- Durable and express messaging
Module 2: Advanced One-Way Messaging
- Fault tolerance and transactional processing (updated for 3.0)
- Error queues and administrative message replay
- Authorization, impersonation, and auditing
- Convention over configuration (new in 3.0)
Module 3: Customized Messaging
- Unit of work management and infrastructure extension (updated for 3.0)
- Dependency injection and unit testing
- Web app and custom hosting
- Web service integration and idempotence
- Customized and centralized configuration (updated for 3.0)
Module 4: Full Duplex Basics
- Callbacks and message handlers
- Purging queues and discarding messages
- Exposing synchronous WCF and web services (updated for 3.0)
Module 5: Advanced Full Duplex
- Web cache priming
- Business logic decomposition with multi-type responses
- Improved ASP.NET threading with web callbacks
- Crossing geographically distributed sites
Module 6: Distributed Systems Architecture Fundamentals
Module 7: Publish/Subscribe
- Publishing messages
- Automatic and manual subscriptions
- Subscription storage – built-in, extension, and profiles
Module 8: Administration, Monitoring
- Queue and service naming & installation (updated for 3.0)
- Monitoring in queue-based systems
- Virtualization and MSMQ configuration
- Performance counters & WMI
- Business Activity Monitoring
Module 9: Scaling-out and Multi-Site Messaging
- Message-driven load balancing for scaling out
- Master and worker profiles and configuration (updated for 3.0)
- HTTP and other cross-site communication (updated for 3.0)
Module 10: Long-running business processes
- Durably managing time-bound processes (updated for 3.0)
- Event correlation and business activity monitoring
- Process flow for integration with legacy and 3rd party systems
- Unit testing
Module 11: Group Exercise
- Combines SOA services, CQRS collaborative domains, and sagas for long-running processes
Advanced Distributed Systems Design using SOA & DDD
Duration: 5 days
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.
This workshop is targeted at team leads, application and solutions architects, as well as technologists who are involved in making decisions about the overall system design of software products and projects.
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
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
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
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
Group Analysis Exercise
In order to ensure maximum retention, students take part in a group analysis of an enterprise problem domain, identifying business services and events, experiencing first hand the tacit knowledge of parts of a solution that “feel right” and follow the rules outlined in the previous modules, as well as the other parts that “feel wrong”. Many students have described this exercise as the point of epiphany, when all the previous information “just made sense” afterward.
Module 6: Service Structure & CQRS
Drilling inside Business Services and Business Components, the topic of Command/Query Responsibility Segregation is introduced for designing collaborative, high-scale systems with great user experience. The connection between capturing user intent in task-based UIs, caching, and one-way messaging is described.
- Search & Queries + Denormalization
- Validation & Business Logic for commands
- Publish/Subscribe eventing for synchronizing denormalized caches
Module 7: 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 queues simplify monitoring solutions while at the same time connecting them to service-level agreements, as well as how this architecture can be capitalize on the capabilities of the cloud in order to create self-tuning systems.
- Scaling heterogeneous server farms
- Monitoring queues for SLA
- Rolling deployment and versioning
Module 8: Long running processes
The distributed communications patterns wouldn’t 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
- The connection of time and messaging
Module 9: Service Layers and Domain Models
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:
- Business Logic inside and outside a Domain Model
- Transactions, Isolation Levels, Concurrency Models
- Testing Domain Models
Module 10: Ultra-scalable Web Apps
As more web apps are put under the pressure of growing user bases, performing more complex tasks upon larger quantities of data, standard caching techniques are not able to handle the task by themselves. In this module, students will learn how to leverage the entire web as a cache, use Content Delivery Networks, in combination with the messaging shown in previous modules:
- Composability & Cacheability of dynamic content
- Scalable personalized data
- Integrated messaging & pub/sub for caching sensitive data
Module 11: Summary & Review
In order to make sure that attendees are able to put into practice all that they’ve learned throughout the course, here we strengthen the seams between the various topics. Q&A is also a core part of this final section.
“Udi Dahan is the real deal. We brought him on site to give our development staff the 5-day “Advanced Distributed System Design” training. The course profoundly changed our understanding and approach to SOA and distributed systems. Consider some of the evidence: 1. Months later, developers still make allusions to concepts learned in the course nearly every day 2. One of our developers went home and made her husband (a developer at another company) sign up for the course at a subsequent date/venue 3. Based on what we learned, we’ve made constant improvements to our architecture that have helped us to adapt to our ever changing business domain at scale and speed If you have the opportunity to receive the training, you will make a substantial paradigm shift. If I were to do the whole thing over again, I’d start the week by playing the clip from the Matrix where Morpheus offers Neo the choice between the red and blue pills. Once you make the intellectual leap, you’ll never look at distributed systems the same way. Beyond the training, we were able to spend some time with Udi discussing issues unique to our business domain. Because Udi is a rare combination of a big picture thinker and a low level doer, he can quickly hone in on various issues and quickly make good (if not startling) recommendations to help solve tough technical issues.”
“When I had the privilege of sitting through this training I did so with my team and cant say enough about how it invigorated, improved and turbo charged the mind-set and output of all who attended. Udi is a very skilful presenter and a wonderful teacher and significantly has amassed some great wisdom that anyone who is serious about building Service Oriented systems should go out of their way to experience and imbibe.”
“Awesome. Just awesome.
We’d been meaning to delve into messaging at Eleutian after multiple discussions with and blog posts from Greg Young and Udi Dahan in the past. We weren’t entirely sure where to start, how to start, what tools to use, how to use them, etc. Being able to sit in a room with Udi for an entire week while he described exactly how, why and what he does to tackle a massive enterprise system was invaluable to say the least.
We now have a much better direction and, more importantly, have the confidence we need to start introducing these powerful concepts into production at Eleutian.”
“Udi’s SOA class made me smart – it was awesome.
The class was very well put together. The materials were clear and concise and Udi did a fantastic job presenting it. It was a good mixture of lecture, coding, and question and answer. I fully expected that I would be taking notes like crazy, but it was so well laid out that the only thing I wrote down the entire course was what I wanted for lunch. Udi provided us with all the lecture materials and everyone has access to all of the samples which are in the NServiceBus trunk.
Now I know why Udi is the “Software Simplist.” I was amazed to find that all the code and solutions were indeed very simple. The patterns that Udi presented keep things simple by isolating complexity so that it doesn’t creep into your day to day code. The domain code looks the same if it’s running in a single process or if it’s running in 100 processes.”