Our development environments and data migration strategy is
something that has evolved during the project, and will continue to
evolve during development. Process and design improvements are
encouraged and investigated in an attempt to optimize the end product.
When multiple developers are involved in a large project,
multi-staging is extremely important. It allows developers to work
simultaneously and independently, without affecting each other. It also
allows stability and loss testing along with a bunch of advantages. The
number of stages required should depend on several things (this is obviously not a complete list):
- Size of the project
- Complexity
- Number of developers
Two stages is the minimum required for any project, one for development
and one for production. However, it's highly recommended to have a Test environment between Development and Production. The Test environment
should be identical, or at least as close to the Production development
as possible to minimize risk when deploying updates to Production.
In our situation we have three stages, which are:
- Development
- Test
- Production
Furthermore, we are currently debating adding a fourth stage, QA, that
would be always kept identical to the Production environment.
To meet our requirements, the Production environment is
designed to be highly available with session replication. Each stage
incrementally becomes more similar to the Production environment. The
incremental changes spread out the issues that are due to environment
variations, easing debugging. Each environment is designed specifically
for a purpose.
Initial development is performed on a local desktop or
laptop, which is not listed above. The local environment is the most
flexible, easily restarted and best for independent development and
debugging. Each developer has a complete environment running locally on
their desktop/laptop. This environment, which is used for rapid
development, initial integration and testing by the developer,
debugging, etc... It gives developers the maximum freedom to work
without affecting each other, which is very important near the start of
the project because restarting services is quite common. Locally we're
developing using Liferay Developer Studio on Microsoft Windows.
We're using Development for initial integration between
developers and testing. It is running on RHEL. The Test environment
adds session replication, is located in a DMZ with public access and
uses an Oracle database. The differences in the development and great
environment increase reliability and performance. They also make the
test environment extremely similar to the Production environment.
Data migration between environments quickly became important to synchronize
configurations and reduce overall effort. We use built in features of Liferay to migrate documents, content and configurations.
configurations and reduce overall effort. We use built in features of Liferay to migrate documents, content and configurations.
To migrate web content as well as documents, we export and
import LAR (Liferay ARchive) files. They're easy to use, however
sometimes we notice issues with improper migration and have to repeat
the export and/or import. Issues we've encountered include missing
content and permissions.
You can use staging to migrate pages and other
configuration, however we we are using the database migration (Control
Panel -> Server Administration -> Data Migration) in Liferay.
Data migration is a bit more work to use, but right now we aren't
synchronizing individual pages -- which is the main advantage of staging
-- we generally want to synchronize everything.
The headaches that go along with database migration are
having to initialize the target database (shutting down the instance of
Liferay that's using the database, and deleting all tables within the
database) and then restarting both Liferay instances. It is much more
powerful though, allowing us to migrate from any environment to another.
We find that it is extremely useful to migrate from Development or Test
to our local environment during integration and testing. It will also
be important to migrate from production to test, development or locally
when debugging and trying to recreate problems that occur in production.
To aid with data migration we switched from using the
default hypersonic database to using MySQL in all the environments
before test. The Test and Production environments are using an Oracle
database. Using mysql was done for several reasons.
- Allows database backups and quick restores because the database does sometimes become corrupt. We have nightly backups of our local and development databases.
- Allows database migration to and from any environment
- Allows direct access to the database for debugging and clearing lock records (Lock_ table)
Originally we were hosting Liferay on Glassfish, but we ran
into several issues including session replication and data migration.
Since then we have switched to using tomcat as our application server,
and have not had any application server problems since.
No comments:
Post a Comment