These types of services are usually called utility services. Here is a partial list of utility service types:
- Authentication: Verify the credentials provided by the requesting agent
- Identity: Use the identity of the requesting agent
- Personalization: Retrieve, update and apply preferences of the requesting agent or person
- Access control: Control access to resources based on policy
- Encryption: Encrypt/decrypt and sign messages; manage keys
- Provisioning: Grant or remove access to a resource or service
- Master data management: Access and update master entities (customer, product, account, etc)
- Rule execution: Execute business rules
- • •Auditing: Record audit events
- Logging: Record events useful for debugging and system recovery
- Service management: Set and manage service levels based on policy
- Error management & reporting: Handle and report errors
- System monitoring and notification: Monitor service and raise notifications when thresholds exceeded
There is no easy solution to this problem; in a sense SOA has just pushed some of these problems down a level. For now, I suggest building two versions of each service: a fully distributed service and a local component which can be loaded directly into memory by a service component. Yes, this is not fully satisfactory, but it is at least one step forward.