crx2oak for Blue–Green deployment | Community
Skip to main content
another-dave
Level 2
August 4, 2017

crx2oak for Blue–Green deployment

  • August 4, 2017
  • 3 replies
  • 4676 views
  1. I've seen some threads discussing the use of crx2oak for Blue–Green deployment, which sounds quite interesting, as one of the challenges of applying this deployment pattern with AEM is the question of how to handle syncing repositories easily.
  2. That said, other people recommend only running the repo migration offline (slide 9).
  3. The official documentation (Using the CRX2Oak Migration Tool) isn't conclusive either way — not even mentioning offline or online migrations, let alone that one way or the other is recommended (or prohibited).

So, is the use of crx2oak for a migration against a running instance of AEM a supported use-case? If so,

  • are there any limitations against running it in this way (e.g. speed)?
  • If there are limiting factors, does it have an impact if both instances are offline (versus one online and one offline).

Any info would be appreciated, and links to canonical documentation would be great if they exist.

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.

3 replies

smacdonald2008
Level 10
August 4, 2017

The Eng teams talks about the crx2oak tool in this GEMS session -- Deep dive into AEM upgrade process

another-dave
Level 2
August 7, 2017

Thanks, though from the slides & description (haven't had a chance to check video yet), it seems to be related to upgrades, rather than deployments, is that right? — Is deployment a supported use-case for crx2oak, or is it only for upgrades?

joerghoh
Adobe Employee
Adobe Employee
August 8, 2017

Hi,

The blue-green deployment pattern post by Martin Fowler simply forgot a single item: What happens when blue is under constant change by its users while you prepare green?

This is the problem with AEM, as your blue publishs are under constant change by authoring users. Oh, and don't forget that you have your single point of truth as well, the authoring instance. There you cannot apply this pattern at all, if you don't want to have a planned downtime for the time of the deployment.

My conclusion: You cannot apply the classical blue-green approach.

I normally do deployments in a way, that I use planned service downtimes on authoring, but none on publish.

  1. initiate service downtime on author
  2. deploy author
  3. remove 1st half of the publishing instances from loadbalancer, so that the 2nd half is serving all the requests.
  4. deploy 1st half of the publish instances
  5. switch loadbalancer, so the 1st half now servces all the requests
  6. deploy 2nd half
  7. bring all back online

This is a modified version of the blue-green approach: I don't have a standby instance which just changes roles with the production instance. But I have enough redundancy in the frontend that I am able to perform the deployment without downtime.

Jörg

another-dave
Level 2
August 12, 2017

Thanks Jörg,

what I meant by Blue-Green in this case was to have a 'Blue' and a 'Green' author instance, one which is the live Production instance, and one acting as Pre-Prod. For example:

  1. Deploy new release to non-live servers (green), both author and publish.
  2. Enforce a content freeze on live author (blue).
  3. Run a synchronisation of content between live & non-live servers.
  4. Put green servers live, and set blue to non-live
  5. Lift the content freeze for authors.

In theory, this set-up is quite feasible, even with a changing author, if we can quickly sync the latest changes from Blue back to Green — a minimal content freeze can be tolerable, especially if outside of normal business hours.

I'm still not clear as to whether this is a supported use-case of the tooling though?

joerghoh
Adobe Employee
Adobe Employee
August 15, 2017

Hi,

the approach sounds good, but the problem is indeed step 3. And unless you know a method, which can achieve this really quickly (that means 2 min at max) in 99% of all cases, I would doubt that this is doable.

Fast synchronization between AEM instances (especially if 1 instance is weeks behind) is hard; especially problematic is the versioning stuff, because the API prevents it to create the versioning nodes directly via JCR APi (you have to use the versioning API for it).

So yes, in theory it's possible. But I haven't seen it implemented yet :-)

Jörg

kautuk_sahni
Community Manager
Community Manager
August 16, 2017

Hi another-dave

Accedently it got marked as correct. Thanks for the corrective notification. Apologies for this.

~kautuk

Kautuk Sahni