atlascamp 2014: preparing your plugin for jira data center

25
June 3-5, 2014 | Berlin, Germany

Upload: atlassian

Post on 17-May-2015

426 views

Category:

Technology


2 download

DESCRIPTION

JIRA and Confluence are introducing new product editions with support for high availability and clustering. Depending on your add-on, supporting enterprise-grade deployments of JIRA and Confluence could require updates to your plugin. Get a sneak preview of the application architecture for HA and clustering, and learn how you can ensure your plugin is ready to run in these mission critical installations.

TRANSCRIPT

Page 1: AtlasCamp 2014: Preparing Your Plugin for JIRA Data Center

June 3-5, 2014 | Berlin, Germany

Page 2: AtlasCamp 2014: Preparing Your Plugin for JIRA Data Center

Chris Fuller, Senior Developer, Atlassian

Data Center for Developers

Page 3: AtlasCamp 2014: Preparing Your Plugin for JIRA Data Center

• About Data Center

• Hazards for Plugins

• Marketplace

• Resources

!

Data Center for Developers

Page 4: AtlasCamp 2014: Preparing Your Plugin for JIRA Data Center

• Clustering

• Scale and Performance

• High Availability

• Hardware Maintenance

• Unexpected outages

Data Center: The Reasons

Page 5: AtlasCamp 2014: Preparing Your Plugin for JIRA Data Center

Data Center: The PictureUsers

WAN

Index

Database

JIRA

Page 6: AtlasCamp 2014: Preparing Your Plugin for JIRA Data Center

Data Center: The Picture

WAN

Users

. . .Replicated Indexes

Multiple JIRA Nodes

Database Shared Home

Load Balancer

Page 7: AtlasCamp 2014: Preparing Your Plugin for JIRA Data Center

• What you don’t know…

• Long-lived caches

• Scheduled tasks

• Locking

Plugins: Danger Zone!

Page 8: AtlasCamp 2014: Preparing Your Plugin for JIRA Data Center

Sharing is Caring

Odds and Ends

Locks

Scheduled Tasks

Caches

Page 9: AtlasCamp 2014: Preparing Your Plugin for JIRA Data Center

• Expensive Information

• I/O costs

• CPU costs

• Caching is not free

• Memory costs

• Consistency risks

Caches: The Problem

?!

Page 10: AtlasCamp 2014: Preparing Your Plugin for JIRA Data Center

• Local or clustered

• Replication control

• By invalidation

• By copy

• Lazy loading pattern

• Statistical reporting

Caches: Atlassian Cache 2.0

Page 11: AtlasCamp 2014: Preparing Your Plugin for JIRA Data Center

• Rolling your own

• HTTP Session as a cache

• Unbounded caches

• Custom key classes

• Enumerating the keys

Caches: Asking for Trouble

?!

Page 12: AtlasCamp 2014: Preparing Your Plugin for JIRA Data Center

• Don’t keep state!

• Atlassian Cache API

• Lazy load pattern

• Set bounds

• Maximum size?

• Timeout (30 minutes)

• Use simple keys

Caches: Best practices

Page 13: AtlasCamp 2014: Preparing Your Plugin for JIRA Data Center

Sharing is Caring

Odds and Ends

Locks

Caches

Scheduled Tasks

Page 14: AtlasCamp 2014: Preparing Your Plugin for JIRA Data Center

• Per-node maintenance

• Atlassian Scheduler API

• SAL PluginScheduler

• Backward compatibility

• Confluence

!

Scheduler: Local

1:00

2:00

3:00

4:00

Page 15: AtlasCamp 2014: Preparing Your Plugin for JIRA Data Center

• Runs on any one node

• Atlassian Scheduler API

• Quartz (Deprecated)

• Compatibility library

Scheduler: Clustered

1:00

2:00

3:00

4:00

Page 16: AtlasCamp 2014: Preparing Your Plugin for JIRA Data Center

• Atlassian Scheduler API

• Clustered run-immediately job

• Could run twice

• Specify initial run time

• Unscheduling on disable

• Unschedules for whole cluster

• Unregister job runner instead

Scheduler: Dos and Don’ts

Page 17: AtlasCamp 2014: Preparing Your Plugin for JIRA Data Center

Sharing is Caring

Odds and Ends

Caches

Scheduled Tasks

Locks

Page 18: AtlasCamp 2014: Preparing Your Plugin for JIRA Data Center

• synchronized

• java.util.concurrent

• atlassian-util-concurrent

Locks: Local

Page 19: AtlasCamp 2014: Preparing Your Plugin for JIRA Data Center

• Atlassian Beehive

• Cluster-wide

• Cheap in single node

Locks: Clustered

Page 20: AtlasCamp 2014: Preparing Your Plugin for JIRA Data Center

• Problems

• Expensive in a cluster

• Not read/write

!

!

• Alternatives

• Lock-free SQL ordering

• Optimistic locking

• Tolerating inconsistency

• Transactions

Locks: The Details

Page 21: AtlasCamp 2014: Preparing Your Plugin for JIRA Data Center

Sharing is CaringCaches

Locks

Scheduled Tasks

Odds and Ends

Page 22: AtlasCamp 2014: Preparing Your Plugin for JIRA Data Center

• Application Home Split

• Local home

• Shared home

No Place Like Shared Home

• Application Home Split

• Local home

• Shared home

• Application Home Split

• Local home

• Shared home

Page 23: AtlasCamp 2014: Preparing Your Plugin for JIRA Data Center

Data Center Ready!

<plugin-info>

<description>${project.description}</description>

<version>${project.version}</version>

<vendor name="${project.organization.name}" url="${project.organization.url}" />

<param name="atlassian-data-center-compatible">true</param>

</plugin-info>

Page 24: AtlasCamp 2014: Preparing Your Plugin for JIRA Data Center

• JIRA Plugin Guide developer.atlassian.com/display/JIRADEV/Plugin+Guide+to+JIRA+High+Availability+and+Clustering

• Confluence Plugin Guidedeveloper.atlassian.com/pages/viewpage.action?pageId=2031761

• docs.atlassian.com/atlassian-cache-api

• docs.atlassian.com/atlassian-scheduler-api

• docs.atlassian.com/beehive-api

• bitbucket.org/cfuller

!

Resources

Page 25: AtlasCamp 2014: Preparing Your Plugin for JIRA Data Center

June 3-5, 2014 | Berlin, Germany