SlideShare a Scribd company logo
1 of 40
Download to read offline
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.1 von 40
12th Plone Conference
Bristol, UK, 2014
Big Fat Fast Plone
Scale Up, Speed Up
Jens W. Klein twitter: @yenzenz
jk@kleinundpartner.at
30.10.2014 http://kleinundpartner.at
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.2 von 40
I'am ...
● located in Innsbruck, Tyrol, Austria
● doing Plone since v.1.0
● a consultant, developer, open source evangelist
● owner of Klein & Partner KG, co-founder and
member of BlueDynamics Alliance
Ad:
Alpine City Sprint at Innsbruck
January 20th to 25th 2015 – registration at
http://www.coactivate.org/projects/alpinecitysprint2015
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.3 von 40
Problem
● Default Plone is not that fast
● Scales great horizontally (add machines)
● Still bottlenecks
– primary loading stuff from ZODB
– rendering of sites
– searching information
– third party services: ldap, crm, sap-bc, ...
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.4 von 40
You have
to know
your knobs
and
handles.
Juliett U-461
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.5 von 40
3 different customers
(1)
● Niederösterreich Kulturwirtschaft (NOEKU)
● central service for several cultural institutions in
Lower Austria
● over 30 Plone Sites (including e-ticketing)
● hi-availibility on low-to-mid budget
● self hosted on hardware,
● VM's with KVM, HA with Pacemaker, CRM, DRBD
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.6 von 40
Noeku in Detail
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.7 von 40
3 different customers
(2)
● Zumtobel Group AG
● Internationally leading supplier of integral
lighting solutions
● Brand specific international product Portals
● Customer Extranets, B2B e-shop
● Hosting on dedicated and managed VM's and
NAS storage
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.8 von 40
3 different customers
(3)
● HTU Graz
● general students' representative body, serves
as the students' government, at the University
of Graz
● One plone site with several subsites (lineage)
● Lots of students looking at it = peak-load
● One virtual machine on overloaded host
= not enough resources
● Low-budget
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.9 von 40
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.10 von 40
Data Flow in Plone
or
the Publishing Chain
Database
Client
Connection
Pool
Plone 1..n
Caching
Proxy
Load
Balancer
Webserver
Webbrowser
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.11 von 40
Data Flow in Plone
or
the Publishing Chain
Database
Client
Connection
Pool
Plone 1..n
Caching
Proxy
Load
Balancer
Webserver
Webbrowser
ZEO-Server or
PostgreSQL, plus
Blobstorage (NFS, NAS)
Different ZEO
Storage Adapters
HAProxy or
Pound
Varnish
(what else?)
NGINX
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.12 von 40
Data Flow in Plone
or
the Publishing Chain
Database
Client
Connection
Pool
Plone 1..n
Caching
Proxy
Load
Balancer
Webserver
Webbrowser
ZEO-Server or
PostgreSQL, plus
Blobstorage (NFS, NAS)
Different ZEO
Storage Adapters
HAProxy or
Pound
Varnish
(what else?)
NGINX
Memcached
LDAP
Other third part services
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.13 von 40
Data Flow in Plone
or
the Publishing Chain
Database
Client
Connection
Pool
Plone 1..n
Caching
Proxy
Load
Balancer
Webserver
Webbrowser
ZEO-Server or
PostgreSQL, plus
Blobstorage (NFS, NAS)
Different ZEO
Storage Adapters
HAProxy or
Pound
Varnish
(what else?)
NGINX
Memcached
LDAP
Other third part services
Consider also:
CPU Cores
Used RAM/ Diskcache ratio
IO network and disk
...
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.14 von 40
Tools
know them!
● install Munin on every node and monitor all you
can.
● fio is simple powerful to get measures
● read how linux manages disk/RAM
● know your hardware and your VMs (if any)
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.15 von 40
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.16 von 40
Database Level
● NOEKU: ZEO-Server + BlobStorage, both
replicated with DRBD on own self-managed VM
● Zumtobel: RelStorage on PostgreSQL and
Blobs from NAS over NFS
● HTU Graz: RelStorage on PostgreSQL, all on
one machine.
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.17 von 40
Never store blobs in ZODB
Use blobstorage!
(check your code and adons!)
First things first
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.18 von 40
Classical ZEO
Server+Blobstorage
● Using classical ZEO-server + blobstorage
– ensure a fast IO to HDD or NAS
– have enough RAM for disk buffering
● Blobstorage on NFS/NAS:
– shared blobs and mount on each node
– mount NAS/NFS read-only on webserver node
and use collective.xsendfile (X-HTTP-Accel)
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.19 von 40
RelStorage + Blobstorage
● Never store blobs in SQL DB (same as with
ZODB, see slide before)
● Do not use MySQL if you can avoid it
● Configure your SQL DB properly, defaults are
not enough!
● Ensure a sane disk-/storage-IO (on Vms this is a
common bottleneck).
● Have RAM left for OS-level disk-caching.
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.20 von 40
Connections Pool
ZEO- vs. RelStorage Adapter
● ZEO-Server pushes
invalidations to client
● Disk cache of pickled
objects per Zope
instance
● RAM-cache of
unpickled objects per
connection
● ZEO-Client polls for
invalidated objects
● Memcached of pickled
objects shared
between Zope
instances on one
machine
● RAM-cache of
unpickled objects per
connection
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.21 von 40
Database-/ Client-
Configurations (1)
● NOEKU (ZEO)
– 30 sites with different sizes
– 2 (rare: 4) instances, each 2 threads
– RAM cache ~750 - 20000 objects – depending on
the site – no disk cache
– ZEO-Server with DRBD and failover (works with
Plone >=4) on own Virtual Maschine
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.22 von 40
Database-/ Client-
Configurations (2)
● Zumtobel (RelStorage, history free)
– Different setups for different kinds of sites!
– Always 2 VMs for, because of easier
maintainability
– 16 instances plus some worker-instances (async
import, zipfile creation, ...)
– each 2 or 4 threads
– RAM cache 30000 or 100000 objects
– Memcached as shared connection cache
– relstorage_packer (search on pypi)
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.23 von 40
Database-/ Client-
Configurations (3)
● HTU (RelStorage, history free)
– 6 instances, each 1 thread
– RAM cache 30000 objects
– Memcached as shared connection cache
– Poll interval 120 sec
– Blobstorage shared folder on same maschine
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.24 von 40
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.25 von 40
All between Request and
Response has to be fast
REQUEST
(what Plone does)
RESPONSE
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.26 von 40
Plone Configuration
● Turn off: debug mode, verbose security, logging,
deprecation warnings, …
● Configure plone.app.caching, even if you do not
plan to use varnish! → browser caches too!
● multiple plone instances: use memcached
instead of classic ramcache
● install jarn.checkinterval and tweak the
checkinterval of your instance in your live
buildout.
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.27 von 40
Custom Code and
Someones Add-On
● know plone.memoize, use it
● never calculate/search twice
● cache searched/ prepared data and/or rendered
pages or snippets
● again: never store blobs in ZODB.
● use the catalog
● dont overuse metadata
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.28 von 40
Write conflicts
● Happens >90% of time at catalog
● Use collective.solr/ collective.indexing
● Reduce time of the transaction
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.29 von 40
Lots of objects?
● large site with several 100 thousands of content
items (and even more objects in ZODB)?
● Catalog queries are slow?
● Use an own mount point with own caches for
the catalog
● if that does not help, use collective.solr
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.30 von 40
Archetypes vs. Dexterity
● in Archetypes avoid to "wake up" (read: load
from DB) the object, ask the catalog and use
metadata
● in Dexterity its some times cheaper to wake up
the object:
– If objects are small.
– And if you iterate over a folder or subtree
– Or if adding lots of metadata to the catalog
would be needed.
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.31 von 40
Using Webservices, LDAP,
other Databases
● Talking to external systems over network is
slow.
● Cache whats possible → plone.memoize
● Measure the external system!
● How fail safe are the services?
● Does your addon/custom code behaves nicely if
the service fails?
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.32 von 40
In case of serious
performance trouble
● Measure!
– Munin (base system parameters),
– Fio,
– collective.traceview
– Good old friend Products.ZopeProfiler
– haufe.requestmonitoring,
Products.LongRequestLogger
● Do not change more than one parameter at
once,
● measure again.
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.33 von 40
plone.app.caching
● Caching is essential in order to serve hi-traffic.
● On Peak load a site can be faster (!) than on
normal traffic.
● Varnish + plone.app.caching are our superheros
● Default settings are good for default sites
● Custom Addons with own types and
templates needs extra configuration for
each type and template:
– Do this! Calculate time for this task, its some
work!
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.34 von 40
Micro-Caching
● On hi traffic introduce a new caching rule for
one two five minute caches
● It speeds up a public facing site really
good!
● Apply this rule to all types/ templates youre
expecting to be hit
● This means a small delay for content editors
between save and live.
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.35 von 40
Microcaching
used at...
● Zumtobel
– Extranet on group level
– Portal for all anonymous
● HTU Graz
– For all anonymous
● Bunch of other sites
– Mostly anonymous access
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.36 von 40
Load Balancer
● Pound → tiny, simple, stable, old, but difficult to
get measurements out of it.
● HAProxy → not that simple, complex
configuration, newer, nice WebUI for stats
● Point same request type to same instance
– Stick to session (public site)
– Stick to User (intranet)
– Stick to Group/ other vector (customer extranet)
● Group Instances for editors/ anonymous
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.37 von 40
Webserver
● NGINX – others possible, but more difficult to
configure
● Set the proxy_* to recommended values
● Consider configuring direct blob delivery (using
collective.xsendfile)
– collective.xsendfile needs some love to work fine
with dexterity and plone.app.imaging (deliver
more variants) – any takers?
● Mostly it works fine OOTB
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.38 von 40
*Cat Image (Bobcat by Markus Wollny)
CC BY-NC-SA2.0 License
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.39 von 40
Further Reading
● Plone Documentation Chapter
„Performance and tuning“
http://docs.plone.org/manage/deploying/testing
_tuning/performance/index.html
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.40 von 40
Questions?

More Related Content

What's hot

Last Month in PHP - March 2016
Last Month in PHP - March 2016Last Month in PHP - March 2016
Last Month in PHP - March 2016Eric Poe
 
Http2 on go1.6rc2
Http2 on go1.6rc2Http2 on go1.6rc2
Http2 on go1.6rc2Jxck Jxck
 
Conda - alternative packaging for scientific computing
Conda - alternative packaging for scientific computingConda - alternative packaging for scientific computing
Conda - alternative packaging for scientific computingtakluyver
 
Working with npm packages
Working with npm packagesWorking with npm packages
Working with npm packagesTomasz Bak
 
Cape Cod Web Technology Meetup - 3
Cape Cod Web Technology Meetup - 3Cape Cod Web Technology Meetup - 3
Cape Cod Web Technology Meetup - 3Asher Martin
 
Waylandifying Chromium: From downstream to shipping (ELCE 2020)
Waylandifying Chromium: From downstream to shipping (ELCE 2020)Waylandifying Chromium: From downstream to shipping (ELCE 2020)
Waylandifying Chromium: From downstream to shipping (ELCE 2020)Igalia
 
Docker & PHP - Practical use case
Docker & PHP - Practical use caseDocker & PHP - Practical use case
Docker & PHP - Practical use caserjsmelo
 
Salt and pepper — native code in the browser Browser using Google native Client
Salt and pepper — native code in the browser Browser using Google native ClientSalt and pepper — native code in the browser Browser using Google native Client
Salt and pepper — native code in the browser Browser using Google native ClientMayflower GmbH
 
Install Qt/Qt Quick for Android devices
Install Qt/Qt Quick for Android devicesInstall Qt/Qt Quick for Android devices
Install Qt/Qt Quick for Android devicesPaolo Sereno
 
Introduction to NPM and building CLI Tools with Node.js
Introduction to NPM and building CLI Tools with Node.jsIntroduction to NPM and building CLI Tools with Node.js
Introduction to NPM and building CLI Tools with Node.jsSuroor Wijdan
 
Monitoraggio del Traffico di Rete Usando Python ed ntop
Monitoraggio del Traffico di Rete Usando Python ed ntopMonitoraggio del Traffico di Rete Usando Python ed ntop
Monitoraggio del Traffico di Rete Usando Python ed ntopPyCon Italia
 
A Hands-On Set of Programming Problems Using Python and OpenCV
A Hands-On Set of Programming Problems Using Python and OpenCVA Hands-On Set of Programming Problems Using Python and OpenCV
A Hands-On Set of Programming Problems Using Python and OpenCVNader Karimi
 

What's hot (20)

Middleware web APIs in PHP 7.x
Middleware web APIs in PHP 7.xMiddleware web APIs in PHP 7.x
Middleware web APIs in PHP 7.x
 
Last Month in PHP - March 2016
Last Month in PHP - March 2016Last Month in PHP - March 2016
Last Month in PHP - March 2016
 
How we do python
How we do pythonHow we do python
How we do python
 
Http2 on go1.6rc2
Http2 on go1.6rc2Http2 on go1.6rc2
Http2 on go1.6rc2
 
GIT pour développeur
GIT pour développeurGIT pour développeur
GIT pour développeur
 
Why and what is go
Why and what is goWhy and what is go
Why and what is go
 
Conda - alternative packaging for scientific computing
Conda - alternative packaging for scientific computingConda - alternative packaging for scientific computing
Conda - alternative packaging for scientific computing
 
Working with npm packages
Working with npm packagesWorking with npm packages
Working with npm packages
 
IPSEC
IPSECIPSEC
IPSEC
 
Lua
LuaLua
Lua
 
NPM THE GUIDE
NPM THE GUIDENPM THE GUIDE
NPM THE GUIDE
 
Cape Cod Web Technology Meetup - 3
Cape Cod Web Technology Meetup - 3Cape Cod Web Technology Meetup - 3
Cape Cod Web Technology Meetup - 3
 
Waylandifying Chromium: From downstream to shipping (ELCE 2020)
Waylandifying Chromium: From downstream to shipping (ELCE 2020)Waylandifying Chromium: From downstream to shipping (ELCE 2020)
Waylandifying Chromium: From downstream to shipping (ELCE 2020)
 
Docker & PHP - Practical use case
Docker & PHP - Practical use caseDocker & PHP - Practical use case
Docker & PHP - Practical use case
 
Salt and pepper — native code in the browser Browser using Google native Client
Salt and pepper — native code in the browser Browser using Google native ClientSalt and pepper — native code in the browser Browser using Google native Client
Salt and pepper — native code in the browser Browser using Google native Client
 
Install Qt/Qt Quick for Android devices
Install Qt/Qt Quick for Android devicesInstall Qt/Qt Quick for Android devices
Install Qt/Qt Quick for Android devices
 
Introduction to NPM and building CLI Tools with Node.js
Introduction to NPM and building CLI Tools with Node.jsIntroduction to NPM and building CLI Tools with Node.js
Introduction to NPM and building CLI Tools with Node.js
 
Monitoraggio del Traffico di Rete Usando Python ed ntop
Monitoraggio del Traffico di Rete Usando Python ed ntopMonitoraggio del Traffico di Rete Usando Python ed ntop
Monitoraggio del Traffico di Rete Usando Python ed ntop
 
A Hands-On Set of Programming Problems Using Python and OpenCV
A Hands-On Set of Programming Problems Using Python and OpenCVA Hands-On Set of Programming Problems Using Python and OpenCV
A Hands-On Set of Programming Problems Using Python and OpenCV
 
.Net Core
.Net Core.Net Core
.Net Core
 

Viewers also liked

YAFOWIL - Webformulare in Python ohne Kopfschmerzen
YAFOWIL - Webformulare in Python ohne KopfschmerzenYAFOWIL - Webformulare in Python ohne Kopfschmerzen
YAFOWIL - Webformulare in Python ohne KopfschmerzenJens Klein
 
cornerstone.soup Lighning Talk on Plone Conference 2009
cornerstone.soup Lighning Talk on Plone Conference 2009cornerstone.soup Lighning Talk on Plone Conference 2009
cornerstone.soup Lighning Talk on Plone Conference 2009Jens Klein
 
Projekte mit Plone
Projekte mit PloneProjekte mit Plone
Projekte mit PloneJens Klein
 
Was ist Plone?
Was ist Plone?Was ist Plone?
Was ist Plone?Jens Klein
 
Ausfallsichere Kultur mit Plone
Ausfallsichere Kultur mit PloneAusfallsichere Kultur mit Plone
Ausfallsichere Kultur mit PloneJens Klein
 
Schlangenhochzeit in-der Wolke - Pyramid auf Google Appengine
Schlangenhochzeit in-der Wolke - Pyramid auf Google AppengineSchlangenhochzeit in-der Wolke - Pyramid auf Google Appengine
Schlangenhochzeit in-der Wolke - Pyramid auf Google AppengineJens Klein
 
Plone is so semantic, isn't it?
Plone is so semantic,  isn't it?Plone is so semantic,  isn't it?
Plone is so semantic, isn't it?Jens Klein
 

Viewers also liked (8)

Plone Einführung
Plone EinführungPlone Einführung
Plone Einführung
 
YAFOWIL - Webformulare in Python ohne Kopfschmerzen
YAFOWIL - Webformulare in Python ohne KopfschmerzenYAFOWIL - Webformulare in Python ohne Kopfschmerzen
YAFOWIL - Webformulare in Python ohne Kopfschmerzen
 
cornerstone.soup Lighning Talk on Plone Conference 2009
cornerstone.soup Lighning Talk on Plone Conference 2009cornerstone.soup Lighning Talk on Plone Conference 2009
cornerstone.soup Lighning Talk on Plone Conference 2009
 
Projekte mit Plone
Projekte mit PloneProjekte mit Plone
Projekte mit Plone
 
Was ist Plone?
Was ist Plone?Was ist Plone?
Was ist Plone?
 
Ausfallsichere Kultur mit Plone
Ausfallsichere Kultur mit PloneAusfallsichere Kultur mit Plone
Ausfallsichere Kultur mit Plone
 
Schlangenhochzeit in-der Wolke - Pyramid auf Google Appengine
Schlangenhochzeit in-der Wolke - Pyramid auf Google AppengineSchlangenhochzeit in-der Wolke - Pyramid auf Google Appengine
Schlangenhochzeit in-der Wolke - Pyramid auf Google Appengine
 
Plone is so semantic, isn't it?
Plone is so semantic,  isn't it?Plone is so semantic,  isn't it?
Plone is so semantic, isn't it?
 

Similar to Big Fat FastPlone - Scale up, speed up

K8s best practices from the field!
K8s best practices from the field!K8s best practices from the field!
K8s best practices from the field!DoiT International
 
Testing Persistent Storage Performance in Kubernetes with Sherlock
Testing Persistent Storage Performance in Kubernetes with SherlockTesting Persistent Storage Performance in Kubernetes with Sherlock
Testing Persistent Storage Performance in Kubernetes with SherlockScyllaDB
 
The Lies We Tell Our Code (#seascale 2015 04-22)
The Lies We Tell Our Code (#seascale 2015 04-22)The Lies We Tell Our Code (#seascale 2015 04-22)
The Lies We Tell Our Code (#seascale 2015 04-22)Casey Bisson
 
The lies we tell our code, LinuxCon/CloudOpen 2015-08-18
The lies we tell our code, LinuxCon/CloudOpen 2015-08-18The lies we tell our code, LinuxCon/CloudOpen 2015-08-18
The lies we tell our code, LinuxCon/CloudOpen 2015-08-18Casey Bisson
 
Making clouds: turning opennebula into a product
Making clouds: turning opennebula into a productMaking clouds: turning opennebula into a product
Making clouds: turning opennebula into a productCarlo Daffara
 
Making Clouds: Turning OpenNebula into a Product
Making Clouds: Turning OpenNebula into a ProductMaking Clouds: Turning OpenNebula into a Product
Making Clouds: Turning OpenNebula into a ProductNETWAYS
 
OpenNebulaConf 2013 - Making Clouds: Turning OpenNebula into a Product by Car...
OpenNebulaConf 2013 - Making Clouds: Turning OpenNebula into a Product by Car...OpenNebulaConf 2013 - Making Clouds: Turning OpenNebula into a Product by Car...
OpenNebulaConf 2013 - Making Clouds: Turning OpenNebula into a Product by Car...OpenNebula Project
 
Rook: Storage for Containers in Containers – data://disrupted® 2020
Rook: Storage for Containers in Containers  – data://disrupted® 2020Rook: Storage for Containers in Containers  – data://disrupted® 2020
Rook: Storage for Containers in Containers – data://disrupted® 2020data://disrupted®
 
NetflixOSS meetup lightning talks and roadmap
NetflixOSS meetup lightning talks and roadmapNetflixOSS meetup lightning talks and roadmap
NetflixOSS meetup lightning talks and roadmapRuslan Meshenberg
 
Elasticsearch on Kubernetes
Elasticsearch on KubernetesElasticsearch on Kubernetes
Elasticsearch on KubernetesJoerg Henning
 
Tomcat from a cluster to the cloud on RP3
Tomcat from a cluster to the cloud on RP3Tomcat from a cluster to the cloud on RP3
Tomcat from a cluster to the cloud on RP3Jean-Frederic Clere
 
Meteor Day Athens (2014-11-07)
Meteor Day Athens (2014-11-07)Meteor Day Athens (2014-11-07)
Meteor Day Athens (2014-11-07)svub
 
WebAssembly is Key to Better LLM Performance
WebAssembly is Key to Better LLM PerformanceWebAssembly is Key to Better LLM Performance
WebAssembly is Key to Better LLM PerformanceSamy Fodil
 
Introduction to containers
Introduction to containersIntroduction to containers
Introduction to containersNitish Jadia
 
Scaleable PHP Applications in Kubernetes
Scaleable PHP Applications in KubernetesScaleable PHP Applications in Kubernetes
Scaleable PHP Applications in KubernetesRobert Lemke
 
Second Skin: Real-Time Retheming a Legacy Web Application with Diazo in the C...
Second Skin: Real-Time Retheming a Legacy Web Application with Diazo in the C...Second Skin: Real-Time Retheming a Legacy Web Application with Diazo in the C...
Second Skin: Real-Time Retheming a Legacy Web Application with Diazo in the C...Chris Shenton
 
Netflix Open Source Meetup Season 4 Episode 2
Netflix Open Source Meetup Season 4 Episode 2Netflix Open Source Meetup Season 4 Episode 2
Netflix Open Source Meetup Season 4 Episode 2aspyker
 

Similar to Big Fat FastPlone - Scale up, speed up (20)

K8s best practices from the field!
K8s best practices from the field!K8s best practices from the field!
K8s best practices from the field!
 
Kubernetes: My BFF
Kubernetes: My BFFKubernetes: My BFF
Kubernetes: My BFF
 
Testing Persistent Storage Performance in Kubernetes with Sherlock
Testing Persistent Storage Performance in Kubernetes with SherlockTesting Persistent Storage Performance in Kubernetes with Sherlock
Testing Persistent Storage Performance in Kubernetes with Sherlock
 
Scaling symfony apps
Scaling symfony appsScaling symfony apps
Scaling symfony apps
 
The Lies We Tell Our Code (#seascale 2015 04-22)
The Lies We Tell Our Code (#seascale 2015 04-22)The Lies We Tell Our Code (#seascale 2015 04-22)
The Lies We Tell Our Code (#seascale 2015 04-22)
 
The lies we tell our code, LinuxCon/CloudOpen 2015-08-18
The lies we tell our code, LinuxCon/CloudOpen 2015-08-18The lies we tell our code, LinuxCon/CloudOpen 2015-08-18
The lies we tell our code, LinuxCon/CloudOpen 2015-08-18
 
Making clouds: turning opennebula into a product
Making clouds: turning opennebula into a productMaking clouds: turning opennebula into a product
Making clouds: turning opennebula into a product
 
Making Clouds: Turning OpenNebula into a Product
Making Clouds: Turning OpenNebula into a ProductMaking Clouds: Turning OpenNebula into a Product
Making Clouds: Turning OpenNebula into a Product
 
OpenNebulaConf 2013 - Making Clouds: Turning OpenNebula into a Product by Car...
OpenNebulaConf 2013 - Making Clouds: Turning OpenNebula into a Product by Car...OpenNebulaConf 2013 - Making Clouds: Turning OpenNebula into a Product by Car...
OpenNebulaConf 2013 - Making Clouds: Turning OpenNebula into a Product by Car...
 
Rook: Storage for Containers in Containers – data://disrupted® 2020
Rook: Storage for Containers in Containers  – data://disrupted® 2020Rook: Storage for Containers in Containers  – data://disrupted® 2020
Rook: Storage for Containers in Containers – data://disrupted® 2020
 
NetflixOSS meetup lightning talks and roadmap
NetflixOSS meetup lightning talks and roadmapNetflixOSS meetup lightning talks and roadmap
NetflixOSS meetup lightning talks and roadmap
 
Elasticsearch on Kubernetes
Elasticsearch on KubernetesElasticsearch on Kubernetes
Elasticsearch on Kubernetes
 
Tomcat from a cluster to the cloud on RP3
Tomcat from a cluster to the cloud on RP3Tomcat from a cluster to the cloud on RP3
Tomcat from a cluster to the cloud on RP3
 
Modularity problems
Modularity  problemsModularity  problems
Modularity problems
 
Meteor Day Athens (2014-11-07)
Meteor Day Athens (2014-11-07)Meteor Day Athens (2014-11-07)
Meteor Day Athens (2014-11-07)
 
WebAssembly is Key to Better LLM Performance
WebAssembly is Key to Better LLM PerformanceWebAssembly is Key to Better LLM Performance
WebAssembly is Key to Better LLM Performance
 
Introduction to containers
Introduction to containersIntroduction to containers
Introduction to containers
 
Scaleable PHP Applications in Kubernetes
Scaleable PHP Applications in KubernetesScaleable PHP Applications in Kubernetes
Scaleable PHP Applications in Kubernetes
 
Second Skin: Real-Time Retheming a Legacy Web Application with Diazo in the C...
Second Skin: Real-Time Retheming a Legacy Web Application with Diazo in the C...Second Skin: Real-Time Retheming a Legacy Web Application with Diazo in the C...
Second Skin: Real-Time Retheming a Legacy Web Application with Diazo in the C...
 
Netflix Open Source Meetup Season 4 Episode 2
Netflix Open Source Meetup Season 4 Episode 2Netflix Open Source Meetup Season 4 Episode 2
Netflix Open Source Meetup Season 4 Episode 2
 

More from Jens Klein

RelStorage Plone Zope RDB Storage Backend
RelStorage Plone Zope RDB Storage BackendRelStorage Plone Zope RDB Storage Backend
RelStorage Plone Zope RDB Storage BackendJens Klein
 
Plone Performance, Profiling, Power-Consumption
Plone Performance, Profiling, Power-ConsumptionPlone Performance, Profiling, Power-Consumption
Plone Performance, Profiling, Power-ConsumptionJens Klein
 
RelStorage - an alternative ZODB Backend
RelStorage - an alternative ZODB BackendRelStorage - an alternative ZODB Backend
RelStorage - an alternative ZODB BackendJens Klein
 
AGX - Tree Transformations with Python - Lightning Talk at Plone Conference 2009
AGX - Tree Transformations with Python - Lightning Talk at Plone Conference 2009AGX - Tree Transformations with Python - Lightning Talk at Plone Conference 2009
AGX - Tree Transformations with Python - Lightning Talk at Plone Conference 2009Jens Klein
 
Plone - Community, Entwicklung, Support
Plone - Community, Entwicklung, SupportPlone - Community, Entwicklung, Support
Plone - Community, Entwicklung, SupportJens Klein
 
Plone Conference 2007 Naples: Lightning Talk Daidalos
Plone Conference 2007 Naples: Lightning Talk DaidalosPlone Conference 2007 Naples: Lightning Talk Daidalos
Plone Conference 2007 Naples: Lightning Talk DaidalosJens Klein
 

More from Jens Klein (6)

RelStorage Plone Zope RDB Storage Backend
RelStorage Plone Zope RDB Storage BackendRelStorage Plone Zope RDB Storage Backend
RelStorage Plone Zope RDB Storage Backend
 
Plone Performance, Profiling, Power-Consumption
Plone Performance, Profiling, Power-ConsumptionPlone Performance, Profiling, Power-Consumption
Plone Performance, Profiling, Power-Consumption
 
RelStorage - an alternative ZODB Backend
RelStorage - an alternative ZODB BackendRelStorage - an alternative ZODB Backend
RelStorage - an alternative ZODB Backend
 
AGX - Tree Transformations with Python - Lightning Talk at Plone Conference 2009
AGX - Tree Transformations with Python - Lightning Talk at Plone Conference 2009AGX - Tree Transformations with Python - Lightning Talk at Plone Conference 2009
AGX - Tree Transformations with Python - Lightning Talk at Plone Conference 2009
 
Plone - Community, Entwicklung, Support
Plone - Community, Entwicklung, SupportPlone - Community, Entwicklung, Support
Plone - Community, Entwicklung, Support
 
Plone Conference 2007 Naples: Lightning Talk Daidalos
Plone Conference 2007 Naples: Lightning Talk DaidalosPlone Conference 2007 Naples: Lightning Talk Daidalos
Plone Conference 2007 Naples: Lightning Talk Daidalos
 

Recently uploaded

Prompt Engineering - an Art, a Science, or your next Job Title?
Prompt Engineering - an Art, a Science, or your next Job Title?Prompt Engineering - an Art, a Science, or your next Job Title?
Prompt Engineering - an Art, a Science, or your next Job Title?Maxim Salnikov
 
Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)
Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)
Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)Gáspár Nagy
 
A Deep Dive into Secure Product Development Frameworks.pdf
A Deep Dive into Secure Product Development Frameworks.pdfA Deep Dive into Secure Product Development Frameworks.pdf
A Deep Dive into Secure Product Development Frameworks.pdfICS
 
Anypoint Code Builder - Munich MuleSoft Meetup - 16th May 2024
Anypoint Code Builder - Munich MuleSoft Meetup - 16th May 2024Anypoint Code Builder - Munich MuleSoft Meetup - 16th May 2024
Anypoint Code Builder - Munich MuleSoft Meetup - 16th May 2024MulesoftMunichMeetup
 
Wired_2.0_CREATE YOUR ULTIMATE LEARNING ENVIRONMENT_JCON_16052024
Wired_2.0_CREATE YOUR ULTIMATE LEARNING ENVIRONMENT_JCON_16052024Wired_2.0_CREATE YOUR ULTIMATE LEARNING ENVIRONMENT_JCON_16052024
Wired_2.0_CREATE YOUR ULTIMATE LEARNING ENVIRONMENT_JCON_16052024SimonedeGijt
 
StrimziCon 2024 - Transition to Apache Kafka on Kubernetes with Strimzi.pdf
StrimziCon 2024 - Transition to Apache Kafka on Kubernetes with Strimzi.pdfStrimziCon 2024 - Transition to Apache Kafka on Kubernetes with Strimzi.pdf
StrimziCon 2024 - Transition to Apache Kafka on Kubernetes with Strimzi.pdfsteffenkarlsson2
 
How to install and activate eGrabber JobGrabber
How to install and activate eGrabber JobGrabberHow to install and activate eGrabber JobGrabber
How to install and activate eGrabber JobGrabbereGrabber
 
Food Delivery Business App Development Guide 2024
Food Delivery Business App Development Guide 2024Food Delivery Business App Development Guide 2024
Food Delivery Business App Development Guide 2024Chirag Panchal
 
Microsoft365_Dev_Security_2024_05_16.pdf
Microsoft365_Dev_Security_2024_05_16.pdfMicrosoft365_Dev_Security_2024_05_16.pdf
Microsoft365_Dev_Security_2024_05_16.pdfMarkus Moeller
 
Automate your OpenSIPS config tests - OpenSIPS Summit 2024
Automate your OpenSIPS config tests - OpenSIPS Summit 2024Automate your OpenSIPS config tests - OpenSIPS Summit 2024
Automate your OpenSIPS config tests - OpenSIPS Summit 2024Andreas Granig
 
architecting-ai-in-the-enterprise-apis-and-applications.pdf
architecting-ai-in-the-enterprise-apis-and-applications.pdfarchitecting-ai-in-the-enterprise-apis-and-applications.pdf
architecting-ai-in-the-enterprise-apis-and-applications.pdfWSO2
 
From Theory to Practice: Utilizing SpiraPlan's REST API
From Theory to Practice: Utilizing SpiraPlan's REST APIFrom Theory to Practice: Utilizing SpiraPlan's REST API
From Theory to Practice: Utilizing SpiraPlan's REST APIInflectra
 
Software Engineering - Introduction + Process Models + Requirements Engineering
Software Engineering - Introduction + Process Models + Requirements EngineeringSoftware Engineering - Introduction + Process Models + Requirements Engineering
Software Engineering - Introduction + Process Models + Requirements EngineeringPrakhyath Rai
 
OpenChain Webinar: AboutCode and Beyond - End-to-End SCA
OpenChain Webinar: AboutCode and Beyond - End-to-End SCAOpenChain Webinar: AboutCode and Beyond - End-to-End SCA
OpenChain Webinar: AboutCode and Beyond - End-to-End SCAShane Coughlan
 
Weeding your micro service landscape.pdf
Weeding your micro service landscape.pdfWeeding your micro service landscape.pdf
Weeding your micro service landscape.pdftimtebeek1
 
Spring into AI presented by Dan Vega 5/14
Spring into AI presented by Dan Vega 5/14Spring into AI presented by Dan Vega 5/14
Spring into AI presented by Dan Vega 5/14VMware Tanzu
 
Salesforce Introduced Zero Copy Partner Network to Simplify the Process of In...
Salesforce Introduced Zero Copy Partner Network to Simplify the Process of In...Salesforce Introduced Zero Copy Partner Network to Simplify the Process of In...
Salesforce Introduced Zero Copy Partner Network to Simplify the Process of In...CloudMetic
 

Recently uploaded (20)

Prompt Engineering - an Art, a Science, or your next Job Title?
Prompt Engineering - an Art, a Science, or your next Job Title?Prompt Engineering - an Art, a Science, or your next Job Title?
Prompt Engineering - an Art, a Science, or your next Job Title?
 
Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)
Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)
Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)
 
Abortion Clinic In Springs ](+27832195400*)[ 🏥 Safe Abortion Pills in Springs...
Abortion Clinic In Springs ](+27832195400*)[ 🏥 Safe Abortion Pills in Springs...Abortion Clinic In Springs ](+27832195400*)[ 🏥 Safe Abortion Pills in Springs...
Abortion Clinic In Springs ](+27832195400*)[ 🏥 Safe Abortion Pills in Springs...
 
A Deep Dive into Secure Product Development Frameworks.pdf
A Deep Dive into Secure Product Development Frameworks.pdfA Deep Dive into Secure Product Development Frameworks.pdf
A Deep Dive into Secure Product Development Frameworks.pdf
 
Anypoint Code Builder - Munich MuleSoft Meetup - 16th May 2024
Anypoint Code Builder - Munich MuleSoft Meetup - 16th May 2024Anypoint Code Builder - Munich MuleSoft Meetup - 16th May 2024
Anypoint Code Builder - Munich MuleSoft Meetup - 16th May 2024
 
Abortion Clinic In Polokwane ](+27832195400*)[ 🏥 Safe Abortion Pills in Polok...
Abortion Clinic In Polokwane ](+27832195400*)[ 🏥 Safe Abortion Pills in Polok...Abortion Clinic In Polokwane ](+27832195400*)[ 🏥 Safe Abortion Pills in Polok...
Abortion Clinic In Polokwane ](+27832195400*)[ 🏥 Safe Abortion Pills in Polok...
 
Wired_2.0_CREATE YOUR ULTIMATE LEARNING ENVIRONMENT_JCON_16052024
Wired_2.0_CREATE YOUR ULTIMATE LEARNING ENVIRONMENT_JCON_16052024Wired_2.0_CREATE YOUR ULTIMATE LEARNING ENVIRONMENT_JCON_16052024
Wired_2.0_CREATE YOUR ULTIMATE LEARNING ENVIRONMENT_JCON_16052024
 
StrimziCon 2024 - Transition to Apache Kafka on Kubernetes with Strimzi.pdf
StrimziCon 2024 - Transition to Apache Kafka on Kubernetes with Strimzi.pdfStrimziCon 2024 - Transition to Apache Kafka on Kubernetes with Strimzi.pdf
StrimziCon 2024 - Transition to Apache Kafka on Kubernetes with Strimzi.pdf
 
How to install and activate eGrabber JobGrabber
How to install and activate eGrabber JobGrabberHow to install and activate eGrabber JobGrabber
How to install and activate eGrabber JobGrabber
 
Food Delivery Business App Development Guide 2024
Food Delivery Business App Development Guide 2024Food Delivery Business App Development Guide 2024
Food Delivery Business App Development Guide 2024
 
Microsoft365_Dev_Security_2024_05_16.pdf
Microsoft365_Dev_Security_2024_05_16.pdfMicrosoft365_Dev_Security_2024_05_16.pdf
Microsoft365_Dev_Security_2024_05_16.pdf
 
Abortion Clinic Pretoria ](+27832195400*)[ Abortion Clinic Near Me ● Abortion...
Abortion Clinic Pretoria ](+27832195400*)[ Abortion Clinic Near Me ● Abortion...Abortion Clinic Pretoria ](+27832195400*)[ Abortion Clinic Near Me ● Abortion...
Abortion Clinic Pretoria ](+27832195400*)[ Abortion Clinic Near Me ● Abortion...
 
Automate your OpenSIPS config tests - OpenSIPS Summit 2024
Automate your OpenSIPS config tests - OpenSIPS Summit 2024Automate your OpenSIPS config tests - OpenSIPS Summit 2024
Automate your OpenSIPS config tests - OpenSIPS Summit 2024
 
architecting-ai-in-the-enterprise-apis-and-applications.pdf
architecting-ai-in-the-enterprise-apis-and-applications.pdfarchitecting-ai-in-the-enterprise-apis-and-applications.pdf
architecting-ai-in-the-enterprise-apis-and-applications.pdf
 
From Theory to Practice: Utilizing SpiraPlan's REST API
From Theory to Practice: Utilizing SpiraPlan's REST APIFrom Theory to Practice: Utilizing SpiraPlan's REST API
From Theory to Practice: Utilizing SpiraPlan's REST API
 
Software Engineering - Introduction + Process Models + Requirements Engineering
Software Engineering - Introduction + Process Models + Requirements EngineeringSoftware Engineering - Introduction + Process Models + Requirements Engineering
Software Engineering - Introduction + Process Models + Requirements Engineering
 
OpenChain Webinar: AboutCode and Beyond - End-to-End SCA
OpenChain Webinar: AboutCode and Beyond - End-to-End SCAOpenChain Webinar: AboutCode and Beyond - End-to-End SCA
OpenChain Webinar: AboutCode and Beyond - End-to-End SCA
 
Weeding your micro service landscape.pdf
Weeding your micro service landscape.pdfWeeding your micro service landscape.pdf
Weeding your micro service landscape.pdf
 
Spring into AI presented by Dan Vega 5/14
Spring into AI presented by Dan Vega 5/14Spring into AI presented by Dan Vega 5/14
Spring into AI presented by Dan Vega 5/14
 
Salesforce Introduced Zero Copy Partner Network to Simplify the Process of In...
Salesforce Introduced Zero Copy Partner Network to Simplify the Process of In...Salesforce Introduced Zero Copy Partner Network to Simplify the Process of In...
Salesforce Introduced Zero Copy Partner Network to Simplify the Process of In...
 

Big Fat FastPlone - Scale up, speed up

  • 1. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.1 von 40 12th Plone Conference Bristol, UK, 2014 Big Fat Fast Plone Scale Up, Speed Up Jens W. Klein twitter: @yenzenz jk@kleinundpartner.at 30.10.2014 http://kleinundpartner.at
  • 2. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.2 von 40 I'am ... ● located in Innsbruck, Tyrol, Austria ● doing Plone since v.1.0 ● a consultant, developer, open source evangelist ● owner of Klein & Partner KG, co-founder and member of BlueDynamics Alliance Ad: Alpine City Sprint at Innsbruck January 20th to 25th 2015 – registration at http://www.coactivate.org/projects/alpinecitysprint2015
  • 3. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.3 von 40 Problem ● Default Plone is not that fast ● Scales great horizontally (add machines) ● Still bottlenecks – primary loading stuff from ZODB – rendering of sites – searching information – third party services: ldap, crm, sap-bc, ...
  • 4. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.4 von 40 You have to know your knobs and handles. Juliett U-461
  • 5. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.5 von 40 3 different customers (1) ● Niederösterreich Kulturwirtschaft (NOEKU) ● central service for several cultural institutions in Lower Austria ● over 30 Plone Sites (including e-ticketing) ● hi-availibility on low-to-mid budget ● self hosted on hardware, ● VM's with KVM, HA with Pacemaker, CRM, DRBD
  • 6. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.6 von 40 Noeku in Detail
  • 7. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.7 von 40 3 different customers (2) ● Zumtobel Group AG ● Internationally leading supplier of integral lighting solutions ● Brand specific international product Portals ● Customer Extranets, B2B e-shop ● Hosting on dedicated and managed VM's and NAS storage
  • 8. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.8 von 40 3 different customers (3) ● HTU Graz ● general students' representative body, serves as the students' government, at the University of Graz ● One plone site with several subsites (lineage) ● Lots of students looking at it = peak-load ● One virtual machine on overloaded host = not enough resources ● Low-budget
  • 9. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.9 von 40
  • 10. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.10 von 40 Data Flow in Plone or the Publishing Chain Database Client Connection Pool Plone 1..n Caching Proxy Load Balancer Webserver Webbrowser
  • 11. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.11 von 40 Data Flow in Plone or the Publishing Chain Database Client Connection Pool Plone 1..n Caching Proxy Load Balancer Webserver Webbrowser ZEO-Server or PostgreSQL, plus Blobstorage (NFS, NAS) Different ZEO Storage Adapters HAProxy or Pound Varnish (what else?) NGINX
  • 12. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.12 von 40 Data Flow in Plone or the Publishing Chain Database Client Connection Pool Plone 1..n Caching Proxy Load Balancer Webserver Webbrowser ZEO-Server or PostgreSQL, plus Blobstorage (NFS, NAS) Different ZEO Storage Adapters HAProxy or Pound Varnish (what else?) NGINX Memcached LDAP Other third part services
  • 13. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.13 von 40 Data Flow in Plone or the Publishing Chain Database Client Connection Pool Plone 1..n Caching Proxy Load Balancer Webserver Webbrowser ZEO-Server or PostgreSQL, plus Blobstorage (NFS, NAS) Different ZEO Storage Adapters HAProxy or Pound Varnish (what else?) NGINX Memcached LDAP Other third part services Consider also: CPU Cores Used RAM/ Diskcache ratio IO network and disk ...
  • 14. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.14 von 40 Tools know them! ● install Munin on every node and monitor all you can. ● fio is simple powerful to get measures ● read how linux manages disk/RAM ● know your hardware and your VMs (if any)
  • 15. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.15 von 40
  • 16. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.16 von 40 Database Level ● NOEKU: ZEO-Server + BlobStorage, both replicated with DRBD on own self-managed VM ● Zumtobel: RelStorage on PostgreSQL and Blobs from NAS over NFS ● HTU Graz: RelStorage on PostgreSQL, all on one machine.
  • 17. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.17 von 40 Never store blobs in ZODB Use blobstorage! (check your code and adons!) First things first
  • 18. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.18 von 40 Classical ZEO Server+Blobstorage ● Using classical ZEO-server + blobstorage – ensure a fast IO to HDD or NAS – have enough RAM for disk buffering ● Blobstorage on NFS/NAS: – shared blobs and mount on each node – mount NAS/NFS read-only on webserver node and use collective.xsendfile (X-HTTP-Accel)
  • 19. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.19 von 40 RelStorage + Blobstorage ● Never store blobs in SQL DB (same as with ZODB, see slide before) ● Do not use MySQL if you can avoid it ● Configure your SQL DB properly, defaults are not enough! ● Ensure a sane disk-/storage-IO (on Vms this is a common bottleneck). ● Have RAM left for OS-level disk-caching.
  • 20. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.20 von 40 Connections Pool ZEO- vs. RelStorage Adapter ● ZEO-Server pushes invalidations to client ● Disk cache of pickled objects per Zope instance ● RAM-cache of unpickled objects per connection ● ZEO-Client polls for invalidated objects ● Memcached of pickled objects shared between Zope instances on one machine ● RAM-cache of unpickled objects per connection
  • 21. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.21 von 40 Database-/ Client- Configurations (1) ● NOEKU (ZEO) – 30 sites with different sizes – 2 (rare: 4) instances, each 2 threads – RAM cache ~750 - 20000 objects – depending on the site – no disk cache – ZEO-Server with DRBD and failover (works with Plone >=4) on own Virtual Maschine
  • 22. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.22 von 40 Database-/ Client- Configurations (2) ● Zumtobel (RelStorage, history free) – Different setups for different kinds of sites! – Always 2 VMs for, because of easier maintainability – 16 instances plus some worker-instances (async import, zipfile creation, ...) – each 2 or 4 threads – RAM cache 30000 or 100000 objects – Memcached as shared connection cache – relstorage_packer (search on pypi)
  • 23. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.23 von 40 Database-/ Client- Configurations (3) ● HTU (RelStorage, history free) – 6 instances, each 1 thread – RAM cache 30000 objects – Memcached as shared connection cache – Poll interval 120 sec – Blobstorage shared folder on same maschine
  • 24. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.24 von 40
  • 25. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.25 von 40 All between Request and Response has to be fast REQUEST (what Plone does) RESPONSE
  • 26. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.26 von 40 Plone Configuration ● Turn off: debug mode, verbose security, logging, deprecation warnings, … ● Configure plone.app.caching, even if you do not plan to use varnish! → browser caches too! ● multiple plone instances: use memcached instead of classic ramcache ● install jarn.checkinterval and tweak the checkinterval of your instance in your live buildout.
  • 27. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.27 von 40 Custom Code and Someones Add-On ● know plone.memoize, use it ● never calculate/search twice ● cache searched/ prepared data and/or rendered pages or snippets ● again: never store blobs in ZODB. ● use the catalog ● dont overuse metadata
  • 28. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.28 von 40 Write conflicts ● Happens >90% of time at catalog ● Use collective.solr/ collective.indexing ● Reduce time of the transaction
  • 29. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.29 von 40 Lots of objects? ● large site with several 100 thousands of content items (and even more objects in ZODB)? ● Catalog queries are slow? ● Use an own mount point with own caches for the catalog ● if that does not help, use collective.solr
  • 30. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.30 von 40 Archetypes vs. Dexterity ● in Archetypes avoid to "wake up" (read: load from DB) the object, ask the catalog and use metadata ● in Dexterity its some times cheaper to wake up the object: – If objects are small. – And if you iterate over a folder or subtree – Or if adding lots of metadata to the catalog would be needed.
  • 31. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.31 von 40 Using Webservices, LDAP, other Databases ● Talking to external systems over network is slow. ● Cache whats possible → plone.memoize ● Measure the external system! ● How fail safe are the services? ● Does your addon/custom code behaves nicely if the service fails?
  • 32. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.32 von 40 In case of serious performance trouble ● Measure! – Munin (base system parameters), – Fio, – collective.traceview – Good old friend Products.ZopeProfiler – haufe.requestmonitoring, Products.LongRequestLogger ● Do not change more than one parameter at once, ● measure again.
  • 33. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.33 von 40 plone.app.caching ● Caching is essential in order to serve hi-traffic. ● On Peak load a site can be faster (!) than on normal traffic. ● Varnish + plone.app.caching are our superheros ● Default settings are good for default sites ● Custom Addons with own types and templates needs extra configuration for each type and template: – Do this! Calculate time for this task, its some work!
  • 34. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.34 von 40 Micro-Caching ● On hi traffic introduce a new caching rule for one two five minute caches ● It speeds up a public facing site really good! ● Apply this rule to all types/ templates youre expecting to be hit ● This means a small delay for content editors between save and live.
  • 35. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.35 von 40 Microcaching used at... ● Zumtobel – Extranet on group level – Portal for all anonymous ● HTU Graz – For all anonymous ● Bunch of other sites – Mostly anonymous access
  • 36. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.36 von 40 Load Balancer ● Pound → tiny, simple, stable, old, but difficult to get measurements out of it. ● HAProxy → not that simple, complex configuration, newer, nice WebUI for stats ● Point same request type to same instance – Stick to session (public site) – Stick to User (intranet) – Stick to Group/ other vector (customer extranet) ● Group Instances for editors/ anonymous
  • 37. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.37 von 40 Webserver ● NGINX – others possible, but more difficult to configure ● Set the proxy_* to recommended values ● Consider configuring direct blob delivery (using collective.xsendfile) – collective.xsendfile needs some love to work fine with dexterity and plone.app.imaging (deliver more variants) – any takers? ● Mostly it works fine OOTB
  • 38. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.38 von 40 *Cat Image (Bobcat by Markus Wollny) CC BY-NC-SA2.0 License
  • 39. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.39 von 40 Further Reading ● Plone Documentation Chapter „Performance and tuning“ http://docs.plone.org/manage/deploying/testing _tuning/performance/index.html
  • 40. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.40 von 40 Questions?