GREG WARDEN • HEAD OF ENGINEERING SERVICES • ATLASSIAN • @USMILE1
Thanks to Facebook, Twitter, Netflix, Linkedin, Etsy and others…
The standard for availability,
performance and dev speed is now
VERY HIGH
For us old-farts that learned to develop
for servers, the rules have changed
Damn
There is already A LOT of material
out there about this stuff
By people WAY smarter than me
So this talk is NOT going to be about…
CAP theory
or the fallacies of distributed
programming
or Raft vs. Paxos
or CRDTs
It’s not about 12-factor apps
or micro-services
or the reactive manifesto
It’s not about circuit-breakers or
back pressure
or no-sql, CQRS, immutability,
idempotentcy, or functional
programming
Sorry
This talk is about thinking differently about some of the
basics
it’s about un-learning some stuff
practical learnings
Let’s start with availability
Un-learning #1: the customer admin
is sitting there on app startup
You can’t just dump some friendly error
message to a log
You can’t just bork the whole system
and expect the admin will sort it
out
@40000000553d9deb364aa0d4 2015-04-27 04:24:33,909 main FATAL [atlassian.jira.startup.JiraStartupLogger] @40000000553d9deb364aa8a4 @40000000553d9deb364aa8a4 *************************************************************************************************************************************@40000000553d9deb364aac8c The following plugins are required by JIRA, but have not been started: Gadget Spec Publisher Plugin (com.atlassian.gadgets.publisher)@40000000553d9deb364aac8c *************************************************************************************************************************************@40000000553d9deb36589af4 @40000000553d9deb3686947c 2015-04-27 04:24:33,914 main ERROR [atlassian.jira.upgrade.UpgradeLauncher] Skipping, JIRA is locked.@40000000553d9deb368ada3c 2015-04-27 04:24:33,915 main INFO [atlassian.jira.scheduler.JiraSchedulerLauncher] JIRA Scheduler not start
Now what?
Just text by itself, for impact.
Graceful degradation
Un-learning #2: sys properties are a good
source of user information
Tied to a server?
It would really suck if you had to restart
the system to change the timezone?
public TimeZone getDefaultTimezone() { String systemDefaultTimeZoneId = applicationProperties.getString( APKeys.JIRA_DEFAULT_TIMEZONE ); if (StringUtils.isNotEmpty(systemDefaultTimeZoneId)) { return TimeZone.getTimeZone(systemDefaultTimeZoneId);
} return TimeZone.getDefault(); }
The old way
public void acceptTenant(final String tenantId, final Map<String, String> tenantProperties) throws LandlordRequestException { final Tenant tenant = new JiraTenantImpl(tenantId); jiraTenantAccessor.addTenant(tenant);