There's a few discussions around speeding up Jira/Confluence etc server installs, so thought it would be beneficial to kick start a discussion and share some learnings, and see what others had tried with what results.
The install the team I'm part of look after is for a global organization with around 15,000 users spread all around the world. We're running Server for both Jira and Confluence and to help get the most out of these and the best performance possible for our users, we looked at how we could use CDN to boost performance.
** disclaimer - below is based on my experience and circumstances only, if you do choose to try anything test in a non-production environment first and no warranty express or implied **
Given we're not in control of the application code itself, there was some trial and error on our dev environment, but have been able to get significant benefit from our setup.
Stats since Jan 1st, 2018:
Jira: Of the 689GB traffic initiated by users browsers, 587GB has been served directly from CloudFront, leaving only 102GB needing to go back to the server (origin) ~ 85%
Confluence: Of 185GB total, 160GB has come from CloudFront, 26GB from the server ~ 86%
While the traffic that does make it back to the server is where the server needs to do most work (dynamic content), offloading such a large percentage of the easy traffic has allowed us to get more life out of the infrastructure and licensing we do have.
NB: Even if you choose to enable no caching whatsoever, enabling a CDN will (should) assist with performance as end users traffic will go from their ISP to the AWS backbone at the closest edge location and then travel along the AWS backbone to your server.
Given most of the objects that are requested from the server require authentication, you'll need to pass through cookies. There's also heavy use of URI queries/params, so these are passed through as well.
When doing an app or add-on update, likely safest to run a full cache invalidation once complete to ensure no old versions are being served.
Anything not mentioned is using the default setting:
JIRA
- Path Pattern = /s/*
- Allowed HTTP methods = GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE
- Cache Based on Selected Request Headers = Whitelist
- Object Caching = Use Origin Cache Headers
- Forward Cookies = All
- Query String Forwarding and Caching = Forward all, cache based on all
- Path pattern = /secure/projectavatar*
- Allowed HTTP methods = GET, HEAD
- Cache Based on Selected Request Headers = Whitelist
- Object Caching = Customize
- Min/Max/Default = 86400
- Forward Cookies = All
- Query String Forwarding and Caching = Forward all, based on whitelist
- pid
size
- Path pattern = /secure/viewavatar*
- Allowed HTTP methods = GET, HEAD
- Cache Based on Selected Request Headers = Whitelist
- Object Caching = Customize
- Min/Max/Default = 86400
- Forward Cookies = All
- Query String Forwarding and Caching = Forward all, based on whitelist
- avatarId
avatarType
size
- Path pattern = /download/resources/*
- Allowed HTTP methods = GET, HEAD
- Cache Based on Selected Request Headers = Whitelist
- Object Caching = Customize
- Min/Default = 86400
- Max = 31536000
- Forward Cookies = None
- Query String Forwarding and Caching = Forward all, cache based on all
- Path pattern = /robots.txt and /favicon.ico (cause hey, why not)
- Allowed HTTP methods = GET, HEAD
- Cache Based on Selected Request Headers = Whitelist
- Object Caching = Customize
- Min/Max/Default = 31536000
- Forward Cookies = None
- Query String Forwarding and Caching = None
- Default:
- Allowed HTTP methods = GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE
- Cache Based on Selected Request Headers = All
- Forward Cookies = All
- Query String Forwarding and Caching = Forward all, cache based on all
Confluence:
We're just doing the same /s/* for Confluence for now.
If anyone has any feedback, it'd be great to hear how you were able to improve performance. Or, even if you tried something but it didn't work.
CCM