SOA:s fyra lärosatser
Ok, här kommer något om tjänsteorienterad arkitektur (SOA). Ett stickspår kanske, men intressant och .Net-relaterat i allra högsta grad.
Först några definitioner: SOA brukar definieras som en affärsdriven approach till systemarkitektur baserad på ett antal sammankopplade tjänster. En tjänst är en fristående och återanvändbar modul, som har ett väl definierat gränssnitt och som inte gör några antaganden om anropande applikation eller underliggande plattform. Tjänsteorienterad design har uppstått genom evolution från komponentorienterade och meddelandeorienterade system, och är ett komplement till objektorientering.
Don Box formulerade i för ett par år sedan SOA:s fyra lärosatser (eller hur ska man annars översätta "tenet"), vilka kan fungera som fundamentala design guidelines för all tjänsteorienterad systemutveckling. Jag tar dem på engelska:
Läs mer:
Först några definitioner: SOA brukar definieras som en affärsdriven approach till systemarkitektur baserad på ett antal sammankopplade tjänster. En tjänst är en fristående och återanvändbar modul, som har ett väl definierat gränssnitt och som inte gör några antaganden om anropande applikation eller underliggande plattform. Tjänsteorienterad design har uppstått genom evolution från komponentorienterade och meddelandeorienterade system, och är ett komplement till objektorientering.
Don Box formulerade i för ett par år sedan SOA:s fyra lärosatser (eller hur ska man annars översätta "tenet"), vilka kan fungera som fundamentala design guidelines för all tjänsteorienterad systemutveckling. Jag tar dem på engelska:
- 1. Boundaries are explicit
- Services interact through explicit message-passing behind the boundaries. We make no assumptions on the space behind the service boundaries. Crossing service boundaries can be costly (for example, you may need to span geography, trust boundaries, or execution environments). We explicitly opt in to service invocation, by formally passing defined messages between services. The explicit boundaries allow us to formally express implementation independent interaction—we can be agnostic to choices of platform, middleware, or coding language used to implement other services.
- 2. Services are autonomous
- Services behave reasonably as independent entities. We make no assumptions on the space between the service boundaries. There is no presiding authority in a service-oriented environment. Services are independently deployed, versioned, and managed. The topology in which a service executes can and will evolve. The service should expect that peer services can and will fail, and that it can and will received malformed or malicious messages. Services should be built not to fail, using (for example) redundancy and failover techniques.
- 3. Services share schema and contract, not class
- Services interact solely on their expression of structures using schema, and behaviors using contract. The service's contract describes the structure of messages and ordering constraints over messages. The formality of the expression allows machine the verification of incoming messages, which allows us to protect the service's integrity. Contracts and schema must remain stable over time, so building them flexibly (for example, through use of xsd:any in schema) is important.
- 4. Service compatibility is determined based on policy
- Both service-providers and service-consumers will have policies—operational requirements—for interactions across boundaries. A simple example of provider-side policy is that a service may require that the invoker have a valid account with the service provider. From the consumer-side, an organization may require that service invocations across the Internet be encrypted, so it will only use services that offer the capability of bi-directional security-enhanced data exchanges. Services express their capabilities and requirements in terms of a machine-readable policy expression. Policy assertions are identified by a stable, globally unique name. Individual policy assertions are opaque to the system at large; services must simply be able to satisfy each other's policy requirements.
Läs mer:
- Code Name Indigo: A Guide to Developing and Running Connected Systems with Indigo -- MSDN Magazine, January 2004 (Don Box)
- Service Orientation and Its Role in Your Connected Systems Strategy (Mike Burner)
0 Comments:
Skicka en kommentar
Links to this post:
Skapa en länk
<< Home