Software as a service
Software as a service (SaaS) involves hosting the software or platform of applications, remotely and providing access to these applications over a secure Internet connection. There are 2 ‘types’ of SaaS:
1-One is for internal usage (eg. Using SAP applications to manage your firm’s Human Resource processes such as time sheets, vacations, performance evaluations, or Sharepoint to manage documents); and
2-The second is for external clients (example moving your ‘fat client’ software which clients used to download, to a Cloud-model, where the logic sits on a remote server and there is no client logic to be downloaded).
Within the SaaS model, the software is deployed on a server (or a number of servers) and is accessed through a web browser. It is not deployed on a local PC. The software is owned and managed by a software provider, rather than the organizations using the software.
Users may pay for the software according to the amount of use they make of it or through an annual or monthly subscription. Example: Google Docs, Dropbox, Salesforce. Key elements of SaaS include:
- Software is deployed on a server (or more commonly, several servers) and is accessed through a web browser. It is not deployed on a local PC.
- The software is owned and managed by a software provider, rather than the organizations using the software.
- Users may pay for the software according to the amount of use they make of it or through an annual or monthly subscription. Sometimes, the software is free for anyone to use but users must then agree to accept advertisements, which fund the software service.
SaaS vs SOA:
Software as a service (SaaS) and service-oriented architectures (SOA) are related, but they are not the same. Software as a service is a way of providing functionality on a remote server with client access through a web browser. The server maintains the user’s data and state during an interaction session. Transactions are usually long transactions e.g. editing a document.
Service-oriented architecture is an approach to structuring a software system as a set of separate, stateless services. These may be provided by multiple providers and may be distributed. Typically, transactions are short transactions where a service is called, does something then returns a result.
Implementation complexity of SaaS
Many organisations may need to customise the SaaS application. As an Enterprise Architecture principle, this is never the preferred model. However, it may be valid in some cases. An example is the extension of Salesforce functionality (reporting for eg) using ‘Lightening’ APIs, add-ons or market-place products. Service configuration includes:
- Branding, where users from each organization, are presented with an interface that reflects their own organization.
- Business rules and workflows, where each organization defines its own rules that govern the use of the service and its data.
- Database extensions, where each organization defines how the generic service data model is extended to meet its specific needs.
- Access control, where service customers create individual accounts for their staff and define the resources and functions that are accessible to each of their users.
The underlying physical infrastructure of SaaS (and related virtualisation) is shared amongst clients or ‘tenants’ unless the organisation buys a ‘dedicated host’. This will mean that the SaaS provider needs to present a replicated copy of the software ‘watermarked’ for that client, using however, common resources.
- Multi-tenancy is a situation in which many different users access the same system and the system architecture is defined to allow the efficient sharing of system resources.
- It must appear to each user that they have the sole use of the system.
- Multi-tenancy involves designing the system so that there is an absolute separation between the system functionality and the system data.
With Covid pushing remote usage of SaaS to all-time highs, the SaaS vendor must have an auto-scaled elastic infrastructure to provide uninterrupted service against potentially scaling demand.
- Develop applications where each component is implemented as a simple stateless service that may be run on any server.
- Design the system using asynchronous interaction so that the application does not have to wait for the result of an interaction (such as a read request).
- Manage resources, such as network and database connections, as a pool so that no single server is likely to run out of resources.
- Design your database to allow fine-grain locking. That is, do not lock out whole records in the database when only part of a record is in use.