Within the context of this book, the term migration is defined as the transition of an environment's people, processes, or technologies from one implementation to another. While somewhat open ended, this definition allows us to discuss migration in a number of different contexts:
The migration of common off-the-shelf (COTS) software from one platform to a larger or smaller similar platform
The migration of data from one database to another, possibly similar data storage technology
The migration of a custom-written application from one platform to a different platform and operating environment
These examples have different inputs, different execution strategies, and dissimilar functional outcomes, but they are all migrations in that the IT functionality has been moved from one platform to a different platform. It is this varied scope that affords the term "migration" its varied interpretations.
Migration is often confused with the act of consolidation. Webster's College Dictionary defines consolidation as the act of bringing together separate parts into a single or unified whole. As defined in the Sun BluePrints book Consolidation in the Data Center, by David Hornby and Ken Pepple, consolidation should be thought of as a way to reduce or minimize complexity. If you can reduce the number of devices you have to manage and the number of ways you manage them, your data center infrastructure will be simpler. This simplicity should contribute to efficiency, and consistency should contribute to lower management costs in the form of a reduced total cost of ownership (TCO).
While consolidations involve migrations, as applications and business functionality are moved to a single machine, migrations do not necessarily involve consolidation. The value proposition realized by migration relates to improved quality of service (QoS) and reduced TCO realized as a characteristic of the new platform, environment, and overall IT infrastructure.
Frequently, the release of a new edition of an operating environment might require that the platform's operating system (OS) be replaced with a more up-to-date version, a practice referred to as adoption. Depending on the changes introduced in the new version, upgrading to a new version of the current OS might be as difficult as migrating the application to a completely different OS, even though the hardware platform remains the same.
Usually, applications that must be moved to a newer version of the same environment, have to be tested to determine whether they provide the same functionality in the new environment. This can be a time consuming, as well as expensive, process. If test suites designed to verify critical application functionality are not available, they will need to be developed, at considerable time and expense.
Application programming interfaces (APIs) are the touch points between applications and the operating environment. In addition to defining APIs, the Solaris environment also supports the concept of the application binary interface (ABI), the description of these APIs used by the application executable at a binary level. This definition enables you to compare the API usage of an application executable created in one version of the OS to the binary description of interfaces supported by a different release of the OS. Consequently, compatibility between different versions of the OS can be guaranteed without any examination of the source code used to create the application.
In most cases, binaries created under an earlier version of the OS require no change. However, should any incompatibilities exist, specific APIs that don't conform to the ABI definition of the new OS can be identified. Tools exist to support the static analysis of the application binary. Sun's appcert tool identifies differences so that they can be remediated prior to moving the application. This technology enables migration engineers to ascertain whether an application can be moved, without problem, to a newer version of the OS.
Moving applications from an older version of the Solaris OS to a newer version is referred to as adoption rather than migration. This distinction is made because the use of stable API standards, backward compatibility, and an ABI and tools enables you to verify and compare application interface usage, thereby guaranteeing that an application will run, without problem, in the new OS. In most cases, adoptions do not require recompilation, although using a later version of the compiler might provide performance benefits.
Before we introduce migration and porting, consider the following figure, which we call the Enterprise stack or E-stack.
FIGURE 0-1 E-Stack Model for Enterprise Infrastructure
This construct is used as a model of the infrastructure of the enterprise. At the top of the stack, the business strategy, people, and process are defined. The high-level functions that occur here are usually controlled by an executive team. These functions provide logistical support to enable business functions, in addition to the unique value-added functions that differentiate one enterprise from another. The outputs of this level of the stack must be implemented by the lower levels. Typically, applications are used to implement and execute business processes.
The next section of the E-stack represents the execution architecture, which is composed of the following items:
Applications that support business functionality. Changes in business processes most likely require changes in the application layer. Consequently, a rapidly evolving business must be able to implement application change in a timely manner. Business segments that are not subject to frequent change are less likely to require an agile development or runtime environment to effect application change.
Application infrastructure that supports the applications. Modern implementations of this layer include web servers, application servers, middleware, and database technology that support a typical n-tiered architecture. For older, legacy applications, the application infrastructure layer is composed almost entirely of the OS. Applications in this layer are written to interact with the APIs provided by the OS vendor and software provided by independent software vendors (ISVs).
Compute and storage platforms. These hardware components enable the application infrastructure. This layer of the stack is usually composed of a heterogeneous mix of hardware provided by a number of different vendors. As we will see, industry consolidation within the hardware manufacturing segment might require changes at this level of the stack. Unless the vendor has gone to great lengths to support backward compatibility, changes to the compute and storage platforms will require changes to the layers above them in the stack.
Network infrastructure. In today's environment, the ability to communicate over a network is critical. This infrastructure can be based on any type of networking technology, from low-speed dial up to fiber-optic, high-speed backbones. Many legacy applications and their interfaces were designed and developed prior to the advent of networking technology. They depend on antiquated, proprietary interconnect technology, which might include a series of screens for data entry or possibly thick-client technology. These applications are not web enabled.
Facilities. Frequently overlooked, this layer provides critical support to the stack elements above.
The upper portion of the E-stack that defines the execution architecture supports a number of systemic properties that are key to any enterprise. Availability, scalability, measurability, and security are all desirable, but can be implemented only to the extent that they are driven and supported by the execution architecture and its components.
The lower portion of the E-stack represents the management architecture. These tools, people, and processes implement the management infrastructure for the enterprise and combine to control, measure, and manage the execution architecture. Tools can be used to monitor capacity, utilization, and throughput, and to help ensure that service levels can be met. Processes are in place to support change, service, deployment, and maintenance. These tools and processes are selected, developed, and administered by the IT staff. As change is effected within the E-stack, IT staff must be made aware of all changes. Training must take place to ensure that people understand the management process, as well as the execution architecture.
As you can see, all the elements of the stack support each other. If the facilities do not provide adequate power or air conditioning, the results will manifest themselves in the compute and storage platforms. If the compute and storage platforms do not support the application infrastructure, the application will not be able to function correctly and service level agreements will not be met. This would mean that the business function and requirements mandated and defined from the top layer of the stack could not be implemented.
The following table outlines the relationship between consolidation, migration, and adoption.
TABLE 0-1 Consolidation, Migration, and Adoption
The act of reducing the complexity in a data center
The act of moving technology from one platform or OS to another
The act of moving from an earlier version of the Solaris OS to a later version
As illustrated in the E-stack shown in FIGURE 0-1 on page 4, the term porting applies to applications rather than infrastructures. In particular, it is usually used when talking about custom-written applications and refers to modifying or normalizing the code of an application so it can be recompiled and deployed on a new hardware platform that supports a different OS. Wherever possible, coding standards (ANSI, POSIX, and the like) should be adopted to minimize potential future changes that might have to be made.
Porting is inherently associated with modifying the code base of an application so that the functionality provided by the APIs of the existing OS and supporting software products is replicated in the new target environment. This is typically done by developing compatibility libraries that map the older APIs to the new environment. Vendors might provide these libraries to ease the burden of migrating applications to their environments, but in many cases, you will have to develop compatibility libraries yourself.
Porting the application requires minimal understanding of the logic or functionality of the application. It is a somewhat mechanical effort for making the application compatible with the new environment.
A porting strategy requires you to integrate the application with a new development environment, as well as a new operating system. While source code, scripts, and data are moved, compilers, source code repositories, and software tools are replaced by new versions that are compatible with the target platform.
When porting an application, you must also migrate any supporting third-party software. If the software is no longer available, you will have to find similar software and integrate it into the application. Should the amount of integration become excessive, the migration might begin to look less like a port and more like a rearchitecture effort, as described later in the chapter. Ensure that you determine the availability of third-party software used by the application prior to choosing a migration strategy.
The term enterprise migration refers to migrating all layers of the E-stack, not only the application that supports business functionality. This is a very involved exercise that will have a greater impact on the entire IT staff than other strategies do. For example, migrations include the following changes:
Management policies present in the old environment must be migrated to the new environment.
Tools used to monitor and manage the execution environment must be replicated.
Supporting software, in the form of third-party products provided by an ISV, or locally written scripts to manage applications and data, must be integrated into the new environment.
People must be trained to administer the new hardware platform and operating environment.
Adding a large symmetric multiprocessor compute platform might justify the use of a multithreaded architecture for the application.
Implementing a Storage Area Network (SAN), rather than attached storage, might enable other applications to fully utilize storage resources that were previously unavailable.
Adding networking capabilities might eliminate the need to transport and mount tapes.
Web-enabling an application might reduce the need for proprietary terminal interfaces or thick-client technology.
Changing hardware might require changes to the facilities to support more, or possibly less, power and cooling.
Creating new tiers in the architecture might allow for the use of cheaper, more cost-effective hardware to support that portion of the application, which might, in turn, support greater availability and supportability.
Using a modern programming language might enable the application to leverage more new third-party software, reducing the need for costly in-house development.