infuerno.github.io

Pluralsight - .NET Distributed Systems Architecture

Introduction

What is a distributed system?

A distributed system is any application which involves two or more communicating processes. If any process becomes unavailable, then any dependent process operates in a state of reduced capability.

A good example of a distributed system is converting a console application with a call to library dll on the same computer to a call to a web service. The web service can be updated easily and also stats of the web service usage easily tracked.

Why?

Components

Security - authentication and authorisation need to be top of the list Logging - must be implemented early on Data - information between layers must only expose data required. Often need to expose different versions of the same objects Business Logic - exposed via web service, queues etc Connectivity - will have internal and external consumers - internal will likely use the same authentication system, external will likely have different authentication and be limited to HTTP

Security

Callers need to be authenticated to access the service and also the data provided by the service. Have a mechanism to translate the identities into a single principle you can trust. Given a trusted identity, authorisation rules can be applied.

Decide how group membership will be maintained. With AD? Temporal?

Authorisation will also be distributed and will depend on the components.

Logging

Data

Business logic

Sharing logic between assemblies requires all assemblies to be tested and deployed as a unit when any changes are made With larger components a distributed app or service is more manageable

Connectivity

On Microsoft platforms distributed systems expose components via COM+, .NET remoting, WCF. Type of connectivity provided will limit consumers - provide mechanisms influenced by consumers

On service provider side:

On caller side:

Tools