際際滷

際際滷Share a Scribd company logo
The	PerfOps
Revolution	
Shutterflys	Journey	
To	FAST
Fred	Beringer	 VP,	Digital	Customer	Experience
2
WHO IS FRED?
3
4
WHY?
Source: Forrester Research
CUSTOMER SATISFACTION
Source: Forrester Research
Rebuilding Pinterest pages for performance
resulted in a 40% decrease in wait time, a
15% increase in SEO traffic and a 15%
increase in conversion rate to signup.
Source: Forrester Research
BBC has seen that they lose an additional 10%
of users for every additional second it takes
for their site to load
Source: Forrester Research
Staples reduced median homepage load time
by 1 second and reduced load time for the
98th percentile by 6 seconds. As a result,
they saw a 10% increase in their conversion
rate.
Source: Forrester Research
MORE STATS
https://wpostats.com/
10
PerfOps Program
11
Synthetic
Monitoring
Real User Monitoring
NFRs
Back-End Optimization
Performance Budget
Automated Load Test
Automated
WebPageTestBack-End Monitoring
Front-End
Optimization
Production Load Test
Non-Functional Requirements
Bring	Engineering,	Operations	and	Product	together
class ProjectServicePatchSimulation extends Simulation {
val users = Configuration.getNumUsers(100)
val ramp = Configuration.getRampDuration(60 seconds)
val simulationDuration = Configuration.getDuration(StandardDurations.EXTRA_LONG)
val httpConf = newProjectServicesConfig(Configuration.ssapiProjectService.httpsUrl)
val numRepeats = 500;
val projectPatchScenario = scenario(this.getClass.getSimpleName)
.during(simulationDuration) {
exitBlockOnFail {
exec(clearCookies)
.exec{session=>
println("Simualtion duration: " + simulationDuration)
session
}
.exec(NonVisualAuthenticationService.signInUniqueUser)
.exec(ProjectService.createProject("photobook"))
.repeat(numRepeats) {
exec(ProjectService.patchProject("photobook", "${userid}",
"${photobook_project_guid}"))
}
.exec(ProjectService.createProject("calendar"))
.repeat(numRepeats) {
exec(ProjectService.patchProject("calendar", "${userid}", "${calendar_project_guid}"))
}
.exec(signOut)
}
}
setUp(projectPatchScenario.inject(rampUsers(users) over (ramp)))
.protocols(httpConf)
.assertions(simulationAssertions)
private def simulationAssertions: List[Assertion] = {
val baseAsserts = List(
details(ProjectService.REQUEST_PATCH_PROJECT + "-
calendar").failedRequests.percent.lessThan(1),
details(ProjectService.REQUEST_PATCH_PROJECT + "-
photobook").failedRequests.percent.lessThan(1),
details(ProjectService.REQUEST_PATCH_PROJECT + "-
calendar").responseTime.percentile3.lessThan(12000),
details(ProjectService.REQUEST_PATCH_PROJECT + "-
photobook").responseTime.percentile3.lessThan(1411),
details(ProjectService.REQUEST_PATCH_PROJECT + "-
calendar").requestsPerSec.greaterThan(10),
details(ProjectService.REQUEST_PATCH_PROJECT + "-
photobook").requestsPerSec.greaterThan(30)
)
baseAsserts
}
AUTOMATED LOAD AND PERFORMANCE
WEB PERFORMANCE BEST PRACTICES
15
AUTOMATED WEBPAGE TESTContinuous	Monitoring	of	Performance	Improvements
PERFORMANCE BUDGET
BACK-END OPTIMIZATIONAPPDYNAMICS
BACK-END OPTIMIZATIONCPU	HOTSPOTS	WITH	YOURKIT
BACK-END OPTIMIZATION
MEMORY	HOTSPOTS	WITH	YOURKIT
BACK-END OPTIMIZATION
During	non-peak	
1. P80	- Backend	time	for	this	page	is	around	1.5Secs	(from	mpulse)
2. Around	30	slow	transactions		every	10	mins	(from	appD)
3. Around	4	very	slow	transactions	(	>	900ms)	every	10	mins	
SAMPLE:	ONE	SFLY	CRITICAL	PAGES
BACK-END OPTIMIZATION
JDBC	Connection	Objects	are	created	rather	than	
obtaining	from	pool.		Database	connections	are	
often	expensive	to	create	because	of	the	overhead	
of	establishing	a	network	connection	and	initializing	
a	database	connection	session	in	the	back	end	
database.	
Recommendation	:	Use	Connection	pool
SAMPLE:	DB	CONNECTION
22
SYNTHETIC MONITORINGNEUSTAR
23
REAL-USER MONITORINGMPULSE
PRODUCTION LOAD AND PERFORMANCESOASTA	CLOUDTEST
PRODUCTION LOAD AND PERFORMANCESOASTA	CLOUDTEST
Q4 - GAME ON!
Q4 - GAME ON!
28
Get in Touch!
fberinger@shutterfly.com
twitter.com/fredberinger
linkedin.com/in/fredberinger

More Related Content

The PerfOps revolution - Shutterfly's journey to faster performance