Take the community feedback survey now.

Johan Björnfot
Feb 11, 2010
  7848
(2 votes)

Mirroring 2.0 – Overview

This is the first post in a series about mirroring 2.0. In this first post I will give an overview of the design for the mirroring functionality in CMS 6.

Background

Although the previous mirroring worked fine it has some limitations (especially when it comes to large amount of data). Below is a list of issues that we often received feedback about regarding the previous implementation of mirroring:

  • Responsiveness for site decreased when a mirroring job was executed (both for source and destination sites).
  • Failures during mirroring of huge site structure, due to either OutOfMemoryException or web service communication problems.
  • A single failure stops the whole mirroring process.
  • Poor status and error messages.

With that in mind some of the design goals we set up for the new mirroring implementation were:

  • Scalability – There should be no upper limit of how much content the mirror will handle. Of course it will take some time to mirror a huge site but the time should be linearly proportional to the amount of data.
  • The mirroring job should not execute in the same process as the web application.
  • It should be possible to continue the mirroring job for certain types of errors.
  • It should be possible to get detailed information from ongoing jobs.

Design

The design we came up with conceptually looks like:

MirroringOverview

And a process flow for a mirroring job looks like:

  1. A scheduled job (or a user in CMS admin mode) starts the mirroring job and sends a request to the mirroring source service to start mirroring.
  2. The source service initializes itself with settings from the site and returns a message to the sender that it has started working with the job.
  3. The source service starts to export pages and files in packages to the target service.
  4. The target service starts importing the data and responds with status messages to the source service for each package.
  5. When the target service is finished it sends a message to its site to allow it to clear invalidated cache entries.
  6. The source service persist the mirroring status to the site’s database.

During execution, a monitoring client has the chance to follow the whole flow in real-time.

In the picture above the source and target services runs in separate processes outside the web site application. Both source and target services are instances of MirroringService which we have chosen to implement as an IIS hosted WCF service. However the services have no dependency to web context so it would be easy to host them for example in a Windows Service instead.

Upcoming posts will go into more detail about various aspects about mirroring.

Feb 11, 2010

Comments

Please login to comment.
Latest blogs
New Opal Certifications Are Live and Free!

We’ve got some exciting news to share: two brand-new Opal certifications are now available and they’re completely free. Whether you’re already...

Satata Satez | Sep 10, 2025

Going Headless: On-Page Editing with Optimizely Graph and Next.js

Introduction On-page editing is one of the standout features of Optimizely CMS, giving editors the power to update content directly on the site as...

Michał Mitas | Sep 10, 2025

Dynamic CSP Management for Headless and Hybrid Optimizely CMS with Next.js

In the evolving realm of web security, Content Security Policy (CSP) is essential for defending against XSS and injection attacks. Traditional...

Minesh Shah (Netcel) | Sep 8, 2025

Create a Simple home page in Optimizely CMS

  Introduction In this blog post, I will walk you through a step by step process to create a very basic home page on a Optimizley CMS Empty site....

Ratish | Sep 7, 2025 |

AEO, GEO and SEO with Epicweb AI-Assistant in Optimizely

As search evolves beyond traditional SEO, businesses must adapt to Answer Engine Optimization (AEO) and Generative Engine Optimization (GEO). This...

Luc Gosso (MVP) | Sep 7, 2025 |

Meet the newest OMVPs – summer 2025 cohort

We’re excited to welcome the latest group of Optimizely Most Valuable Professionals (OMVPs) into the program! This summer’s cohort highlights a ble...

Satata Satez | Sep 5, 2025