1.1 KINDS OF MODERN SOFTWARE ARCHITECTURES
Before diving into cloud computing itself, let us consider some important concepts and kinds of modern software architectures and analyze the place of cloud computing in this scheme.
Here are some typical kinds of modern software:
- Client–server systems
- Web services and Web applications
- Integrated distributed software solutions
- Built-in systems
- Real-time systems
- Software for mobile devices
- Software for wearable computers
- Middleware (midlevel software)
- Software for cloud computing and datacenters
- Software for computer clusters
- Software for virtualization
- Software for information management
- Software for knowledge management
- Software for scientific computing.
In general, modern software architectures tend to get more and more complicated.
Client–server system paradigm and architecture have become widely spread for decades. A client–server system consists of a server or set of servers and a set of clients, connected to a local area network. The following kinds of servers are used in most local networks: application server, Web server, email server, database server, file server, and so on [13].
Internet (Web) applications are intended for use on the net. Currently the majority of them are developed on .NET [14] or Java [15] platforms, though some software developers still prefer to write Internet applications in older languages such as C. In modern Web programming, languages with dynamic types are widely used – JavaScript, Python, and Ruby. Their characteristic features are the dynamic change and construction of new types at runtime, which is comfortable, since it reflects the dynamic nature of Web applications and Web sites.
Internet applications are classified into client side applications (e.g., Web browsers) and server side applications (e.g., Web services).
Integrated software solutions are distributed software systems for information processing and supporting the business and functioning of enterprises, companies, banks, or universities. The characteristic features of integrated software solutions are modules for authentication and authorization of users, modules for accessing databases, modules for networking, and modules for implementing the business logic of the company. Integrated solutions can be developed using several programming languages.
Built-in systems are software for specialized microprocessors controlling various kinds of specific devices, from nuclear reactors to freezers, cardiostimulators, electric power transmission systems, and cars. The characteristic requirement of such software is fixed response time interval with some critical upper limit that is dramatic to satisfy for usability, reliability, and security of the whole system and the controlled object in general, or even for continuing the life of some living organism to be controlled. The typical requirement to the basic working cycle of such a system is the absence of interrupts, which could cause critically undesirable time delays.
Software for mobile devices is one of the most modern and widely used kinds of software. Its specific characteristics are the use of limited amount of resources (for the first turn, limited memory size) and the need to take into account a variety of models of mobile devices (differences of their screens and control keys) when implementing the graphical user interface of mobile applications. Currently, most of the software for mobile devices is developed on the Java platform; an especially popular mobile platform now is Google Android.
As an exotic but real-life example, consider the software for wearable computers. Such specialized computers are built into specific kinds of wear or uniform (e.g., space suits) that they monitor the state, health, and behavior of a human, and give expert recommendations to him or her. This class of software also has strict limitations on the computing resources used.
Middleware (or mid-level software) is a kind of communication software present in the software architectural scheme between the client and the server and supporting their networking communication protocols. A typical modern example of middleware is communication software for sending and receiving instant messages between mobile devices, and laptop and desktop computers.
Software for datacenters is yet another modern kind of software. Its most important components are powerful server-side operating system, middleware to support networking communications, and database management systems (e.g., Microsoft SQL Server).
Software for virtualization is a modern software intended for the installation and use of virtual machines on real computer hardware, with the purpose of extending computing features, using other kinds of operating systems, or using software developed for other hardware platforms. Examples of such software are Microsoft Virtual PC and a new toolkit Microsoft Hyper-V hypervisor.
Software for cloud computing consists of various kinds of server-side operating systems (e.g., Windows Server or Linux) and other software that supports the use of cloud resources (applications and data) by the cloud clients. It is considered in more detail subsequently in this chapter.
Software for knowledge management plays a more and more important role now, in relation to Web intellectualization and popularity of intelligent software solutions that contain modules of logical assessment of the computation results, in addition to computational modules. Examples of knowledge management software are the Protégé knowledge management system developed at Stanford University [16] implementing the ontology management language OWL and our own software product developed by our team under my supervision at St. Petersburg University – Knowledge.NET [17], an extension of the C# language by knowledge management features, implemented as a plug-in to Visual Studio.
Software for information management is a set of office applications for document processing (e.g., Microsoft Office) and database management systems (e.g., Oracle DMBS, MySQL, Microsoft SQL Server).
Software for scientific computing is a set of software tools and packages that support the solving of scientific tasks, for example, MATHLAB.