The following lists the impact on NFRs of the SOA solution pattern:
NFRs |
Description |
Availability |
On the whole, the availability of the application is improved due to splitting in services. |
Performance |
Overall system performance is potentially improved. The performance of the services will also be enhanced if they are hosted on their own dedicated hardware rather than sharing with the core application. |
Scalability |
As services are mostly stateless and promote loose coupling, it enables the scalability of both service provider and service consumer. SOA also enables architects to leverage scalability-friendly features such as invoking services on-demand, asynchronous service invocation, light-weight data transfer, and so on. SOA allows reuse of modules and components which help in achieving integration scalability. |
Security |
As it introduces more and different elements into the system, it can make security more of a challenge. However, by using the security controls their security can be individually tailored. |
Manageability |
Manageability of the functionality is improved because each service element can be managed appropriately. |
Maintainability |
The use of service elements can improve the maintainability of the system as any problem with the service elements is isolated in its own context. |
Flexibility |
SOA can deliver additional, non-core, functionality in a flexible manner. |
Portability |
Portability is widely improved. Even if we choose to implement them in different technologies, porting the application is likely to be as easy. Choosing to implement functionality using off-the-shelf products (commercial or non-commercial) can affect portability. |
Cost |
On the face of it, choosing SOA like this will increase our costs: we will probably increase the number of hardware servers, and we have increased our maintainability problem (a primary source of ongoing cost). However, we have to trade this off against potential savings: use of off-the-shelf products (commercial or non-commercial) can save money compared to developing the functionality ourselves. |