SlideShare ist ein Scribd-Unternehmen logo
1 von 51
Downloaden Sie, um offline zu lesen
1




          Plone TuneUp challenges
          in search of enterprise intranet solution


Andrew Mleczko (redturtle.net)
European Plone Symposium 2009
Sorrento, Italy
2




Poznan   Ferrara
3




    Co-founder of ACC Poland Ltd., the first Polish
●



    Plone company (past)
    Plone consultant at RedTurtle Technology -
●



    based in Ferrara (present)
    Plone-based and Lotus-based web applications
●
4



RedTurtle Technology




         “Sharing knowledge
       about knowledge sharing”
5



So what can you expect...

      Plone is just a CMS?
  ●



      Case study – Intranet Provincia di Ferrara
  ●



      Loadtests environment
  ●



      Plone TuneUp challenges
  ●
6




How we can use
    Plone?
7



Plone variety

      Community portals
  ●



      Document management system (DMS)
  ●



      Groupware - Collaboration
  ●



      Subsite management system
  ●



      Enterprise intranets
  ●



      ...
  ●



      Combination of all mantioned above
  ●
8




  Plone as CMS
       vs.
Plone as framework
9




“Plone is NOT a general web development
framework.“

                    /Carlos de la Guardia/



          Why?
10




Plone can be SLOW*



          *when using the wrong way
11



Framework comparision

         Used hardware:
 ●


          CPU: AMD OpteronT Processor 146 (2 GHz)
     –

          Memory: 2 GB
     –

         Testing with Siege 2.68
 ●



         Read scenario
 ●



         Results for 50, 200, 300 Concurent Users (CU)
 ●



         More details:
 ●


         www.alrond.com/en/2007/jan/25/performance-test-of-6-leading-frameworks
12



Comparision

                  Response time, secs.
   2,5




    2




   1,5

                                                 50 CU
                                                 200 CU
                                                 300 CU
    1




   0,5




    0
         Django       RubyOnRails   TurboGears
13



Comparision

                 Longest transaction, secs.
   35



   30



   25



   20
                                                  50 CU
                                                  200 CU
   15                                             300 CU


   10



    5



    0
        Django         RubyOnRails   TurboGears
14




So where is Plone?
15



Far, far away

              Response time, secs.                            Longest transaction, secs.
18                                                       60


16
                                                         50
14


12                                                       40


10
                                                50 CU                                                   50 CU
                                                         30                                             200 CU
                                                200 CU
                                                                                                        300 CU
                                                300 CU
 8


 6                                                       20


 4
                                                         10
 2


 0                                                       0
     Django    RubyOnRails TurboGears   Plone                 Django   RubyOnRails TurboGears   Plone
16



But comparing with Zope2

                                           Response time, secs.
 18


 16


 14


 12


 10
                                                                           50 CU
                                                                           200 CU
  8
                                                                           300 CU
  6


  4


  2


  0
      Django + Psyco   RubyOnRails 1.2.1      TurboGears   Plone   Zope2
17



What can we do...

      Do not treat Plone as a framework
  ●



      For some use cases:
  ●



      use ContentMirror + fast framework (django,
      pylons, repoze)
      But what about enterprise intranet solutions?
  ●
18



Plone for enterprise intranet

      Large number of users (more than 500) and
  ●



      documents (more than 100 000)
      A lot of simultaneous write requests (>20 CU/s)
  ●



      Using of caching limited
  ●



      Slowest acceptable resp. time <10 seconds
  ●



      the limit for keeping the user's attention focused
      [Miller 1968; Card et al. 1991]
19



Intranet Provincia di Ferrara



                                 y
                               d
                          tu
                        s
                    e
                  s
              a
            C
20



Prerequisites

      800 users stored in Domino Server (by PAS)
  ●



      170.000 documents
  ●



      Yearly growth: ca 25.000 documents
  ●



      Peak traffic: 20 CU/s - write transactions
  ●



      (based on Domino logs)
21



Objective

          User response time (mixed read/write):
  ●


          Slowest (5-6 seconds)
      –

          Recommended (2-4 seconds) 90% of all request
      –

          Fast (<2 seconds)
      –
22



Test environment

          Hardware (current):
  ●


          4 dual-core Intel Xeon 2.8 Ghz
      –

          32 GB RAM
      –

          Amazon EC2 (future)
  ●
23



Test environment

          collective.loadtesting
  ●


          funkload
      –

          collective.funkload
      –

          PageTemplate Profiler
  ●



          mr.bent
  ●



          Munin + redturtle.munin
  ●
24



collective.loadtesting

   class Readonly(testcase.FLTestCase):
       
       def setUp(self):
           self.server_url = 'http://localhost:8080/plone'

       def test_ReadOnly(self):
           server_url = self.server_url
           self.get(server_url + quot;/plone/login_formquot;,
               description=quot;Get /plone/login_formquot;)

           self.post(server_url + quot;/plone/login_formquot;, params=[
               ['came_from', server_url + '/plone'],
               ['form.submitted', '1'],
               ['cookies_enabled', ''],
               ['login_name', ''],
               ['pwd_empty', '0'],
               ['__ac_name', 'admin'],
               ['__ac_password', 'admin'],
               ['submit', 'Accedi']],
               description=quot;Post /plone/login_formquot;)
25



mr.bent


 >>> from mr.bent.wrapper import mkwrapper
 >>> from mr.bent.tests.test_bent import callcounter
 >>> from Products.CMFPlone.CatalogTool import 
     CatalogTool

 >>> mkwrapper(CatalogTool.searchResults,
               callcounter, quot;catalogsearchesquot;)
26



Test scenario

      Log in
  ●



      View random folder
  ●



      Create document (2 requests)
  ●



      View newly created document
  ●



      Publish it
  ●



      View home page
  ●



      Logout
  ●
27



Default clean Plone

                                        Response time, secs.
   60




   50




   40




                                                                                                     5CU
   30                                                                                                20CU
                                                                                                     60CU



   20




   10




    0
        Log in   Folder view   Create document Save document   View   Publish   Home page   Logout
28



Default clean Plone

                                         % Errors (ConflictErrors)
 100


 90


 80


 70


 60


                                                                                                    5CU
 50
                                                                                                    20CU
                                                                                                    60CU
 40


 30


 20


 10


   0
       Log in   Folder view   Create document Save document   View   Publish   Home page   Logout
29




Let's start TuneUp and install
            the basics:

 Varnish + Pound (with sticky session) +
+ 6 ZEO Clients (18 threads) + ZEO Server
30




    Apache – proxy/rewriting urls
●



    Varnish – cache resources, add http headers
●



    Pound – balancing with sticky sessison
●



    6 ZEO clients
●



    ZEO Server
●
31



+ Varnish + Pound + ZEO

                                         Response time, secs.
 40



 35



 30



 25



                                                                                                   5CU
 20
                                                                                                   20CU
                                                                                                   60CU

 15



 10



  5



  0
      Log in   Folder view   Create document Save document   View   Publish   Home page   Logout
32



+ Varnish + Pound + ZEO

                                         % Errors (ConflictErrors)
 100


 90


 80


 70


 60


                                                                                                    5CU
 50
                                                                                                    20CU
                                                                                                    60CU
 40


 30


 20


 10


   0
       Log in   Folder view   Create document Save document   View   Publish   Home page   Logout
33




Comparing to default Plone
34



Comparision

                                    Response time, secs., 20 CU
 40



 35



 30



 25



 20                                                                                                Default Plone
                                                                                                   Improvment

 15



 10



  5



  0
      Log in   Folder view   Create document Save document   View   Publish   Home page   Logout
35




Where are the conflict errors
      comming from?
      mainly portal_catalog
36




             Let's try:
mount portal_catalog to different ZODB
    and increase zodb cache on it
37




    Install redturtle.catalogmount
●

    Add zope-conf-additional:
●

      <zodb_db catalog>
        mount-point /plone/portal_catalog
        container-class Products.CMFPlone.CatalogTool.CatalogTool
        cache-size 300000
        <zeoclient>
           server ${zeoserver:zeo-address}
           storage 2
           name catalogstorage
           var ${buildout:parts-directory}/instance1/var
           cache-size 400MB
        </zeoclient>
     </zodb_db>
38




    And add zeo-conf-additional:
●


    <filestorage 2>
       path ${buildout:directory}/var/filestorage/CatalogData.fs
    </filestorage>
39



+ redturtle.catalogmount


                                            Response time, secs.
 25




 20




 15


                                                                                                   5CU
                                                                                                   20CU
                                                                                                   60CU
 10




  5




  0
      Log in   Folder view   Create document Save document   View   Publish   Home page   Logout
40



+ redturtle.catalogmount


                                         % Errors (ConflictErrors)
 100


  90


  80


  70


  60


                                                                                                    5CU
  50
                                                                                                    20CU
                                                                                                    60CU
  40


  30


  20


  10


   0
       Log in   Folder view   Create document Save document   View   Publish   Home page   Logout
41




Maybe there is a more
    stable solution:
     collective.indexing
experimental.catalogqueryplan
  archetypes.schematuning
42



+ collective.indexing + archetypes.schematuning


                                             Response time, secs.
  16



  14



  12



  10



                                                                                                    5CU
   8
                                                                                                    20CU
                                                                                                    60CU

   6



   4



   2



   0
       Log in   Folder view   Create document Save document   View   Publish   Home page   Logout
43



+ collective.indexing + archetypes.schematuning


                                          % Errors (ConflictErrors)
  100


  90


  80


  70


  60


                                                                                                     5CU
  50
                                                                                                     20CU
                                                                                                     60CU
  40


  30


  20


  10


    0
        Log in   Folder view   Create document Save document   View   Publish   Home page   Logout
44




So what is the improvment?
45



Improvment


                              Response time, secs., 20 CU
  40



  35



  30



  25



  20                                                                                                fresh Plone
                                                                                                    after TuneUp

  15



  10



   5



   0
       Log in   Folder view   Create document Save document   View   Publish   Home page   Logout
46




Let's try to scale it...
47



ZEO scalability problem

                                  Response time, secs. 20 CU
   45



   40



   35



   30



   25
                                                                                                     1:10
                                                                                                     4:20
   20
                                                                                                     6:18
                                                                                                     10:30
   15



   10



   5



   0
        Log in   Folder view   Create document Save document   View   Publish   Home page   Logout
48



ZEO scalability problem

                                   % Errors (ConflictErrors), 20 CU
   60




   50




   40




                                                                                                     1:10
   30
                                                                                                     4:20
                                                                                                     6:18
                                                                                                     10:30
   20




   10




   0
        Log in   Folder view   Create document Save document   View   Publish   Home page   Logout
49



Plone intranet limits

      ZODB is slow when handling concurrent writes
  ●



      transactions
      Scalability problem using flat ZEO
  ●



      Missing 'out of the box' performance
  ●



      (comparing to other framworks, CMS)
50




How we can solve the problem?
51



Ideas


      RelStorage for scalability problem
  ●



      collective.solr
  ●



      others ?
  ●



      share knowledge at plone-enterprise mailing list
  ●

Weitere ähnliche Inhalte

Andere mochten auch

Needle in an enterprise haystack
Needle in an enterprise haystackNeedle in an enterprise haystack
Needle in an enterprise haystackAndrew Mleczko
 
Collective.amberjack ploneconf2010
Collective.amberjack ploneconf2010Collective.amberjack ploneconf2010
Collective.amberjack ploneconf2010Massimo Azzolini
 
Fast content import in Plone
Fast content import in PloneFast content import in Plone
Fast content import in PloneAndrew Mleczko
 
Bringing "real life" relations to Plone
Bringing "real life" relations to PloneBringing "real life" relations to Plone
Bringing "real life" relations to PloneMassimo Azzolini
 
Resoconto dalla Plone Conference 2010
Resoconto dalla Plone Conference 2010Resoconto dalla Plone Conference 2010
Resoconto dalla Plone Conference 2010Stefano Marchetti
 
Strategie e comunicazione per il turismo sul web
Strategie e comunicazione per il turismo sul webStrategie e comunicazione per il turismo sul web
Strategie e comunicazione per il turismo sul webMassimo Azzolini
 
Breve resoconto dalla World Plone Conference 2009 26 Ottobre - 1 Novembre
Breve resoconto dalla World Plone Conference 2009 26 Ottobre - 1 NovembreBreve resoconto dalla World Plone Conference 2009 26 Ottobre - 1 Novembre
Breve resoconto dalla World Plone Conference 2009 26 Ottobre - 1 NovembreStefano Marchetti
 
3M per Plone Mockup, Mediacore, Mailchimp
3M per Plone Mockup, Mediacore, Mailchimp3M per Plone Mockup, Mediacore, Mailchimp
3M per Plone Mockup, Mediacore, MailchimpStefano Marchetti
 
Future is bright, future is Plone
Future is bright, future is PloneFuture is bright, future is Plone
Future is bright, future is PloneAndrew Mleczko
 

Andere mochten auch (12)

Needle in an enterprise haystack
Needle in an enterprise haystackNeedle in an enterprise haystack
Needle in an enterprise haystack
 
Collective.amberjack ploneconf2010
Collective.amberjack ploneconf2010Collective.amberjack ploneconf2010
Collective.amberjack ploneconf2010
 
Fast content import in Plone
Fast content import in PloneFast content import in Plone
Fast content import in Plone
 
Bringing "real life" relations to Plone
Bringing "real life" relations to PloneBringing "real life" relations to Plone
Bringing "real life" relations to Plone
 
Plone Konferenz 2012
Plone Konferenz 2012Plone Konferenz 2012
Plone Konferenz 2012
 
Resoconto dalla Plone Conference 2010
Resoconto dalla Plone Conference 2010Resoconto dalla Plone Conference 2010
Resoconto dalla Plone Conference 2010
 
Plone per tutte le stagioni
Plone per tutte le stagioniPlone per tutte le stagioni
Plone per tutte le stagioni
 
Strategie e comunicazione per il turismo sul web
Strategie e comunicazione per il turismo sul webStrategie e comunicazione per il turismo sul web
Strategie e comunicazione per il turismo sul web
 
Breve resoconto dalla World Plone Conference 2009 26 Ottobre - 1 Novembre
Breve resoconto dalla World Plone Conference 2009 26 Ottobre - 1 NovembreBreve resoconto dalla World Plone Conference 2009 26 Ottobre - 1 Novembre
Breve resoconto dalla World Plone Conference 2009 26 Ottobre - 1 Novembre
 
3M per Plone Mockup, Mediacore, Mailchimp
3M per Plone Mockup, Mediacore, Mailchimp3M per Plone Mockup, Mediacore, Mailchimp
3M per Plone Mockup, Mediacore, Mailchimp
 
Social intranet
Social intranetSocial intranet
Social intranet
 
Future is bright, future is Plone
Future is bright, future is PloneFuture is bright, future is Plone
Future is bright, future is Plone
 

Ähnlich wie Plone TuneUp challenges

Pylons + Tokyo Cabinet
Pylons + Tokyo CabinetPylons + Tokyo Cabinet
Pylons + Tokyo CabinetBen Cheng
 
EC2ナイトセミナプレゼン資料 Rel2
EC2ナイトセミナプレゼン資料 Rel2EC2ナイトセミナプレゼン資料 Rel2
EC2ナイトセミナプレゼン資料 Rel2真一 藤川
 
Critical Issues at Exascale for Algorithm and Software Design
Critical Issues at Exascale for Algorithm and Software DesignCritical Issues at Exascale for Algorithm and Software Design
Critical Issues at Exascale for Algorithm and Software Designtop500
 
Beyond the RTOS: A Better Way to Design Real-Time Embedded Software
Beyond the RTOS: A Better Way to Design Real-Time Embedded SoftwareBeyond the RTOS: A Better Way to Design Real-Time Embedded Software
Beyond the RTOS: A Better Way to Design Real-Time Embedded SoftwareMiro Samek
 
Tew4 Yatce presentation
Tew4 Yatce presentationTew4 Yatce presentation
Tew4 Yatce presentationUENISHI Kota
 
Puppet Availability and Performance at 100K Nodes - PuppetConf 2014
Puppet Availability and Performance at 100K Nodes - PuppetConf 2014Puppet Availability and Performance at 100K Nodes - PuppetConf 2014
Puppet Availability and Performance at 100K Nodes - PuppetConf 2014Puppet
 
Scaling a Rails Application from the Bottom Up
Scaling a Rails Application from the Bottom Up Scaling a Rails Application from the Bottom Up
Scaling a Rails Application from the Bottom Up Abhishek Singh
 
FPGA based 10G Performance Tester for HW OpenFlow Switch
FPGA based 10G Performance Tester for HW OpenFlow SwitchFPGA based 10G Performance Tester for HW OpenFlow Switch
FPGA based 10G Performance Tester for HW OpenFlow SwitchYutaka Yasuda
 
Alfresco Security Best Practices 2012
Alfresco Security Best Practices 2012Alfresco Security Best Practices 2012
Alfresco Security Best Practices 2012Toni de la Fuente
 
VISUG - Approaches for application request throttling
VISUG - Approaches for application request throttlingVISUG - Approaches for application request throttling
VISUG - Approaches for application request throttlingMaarten Balliauw
 
Velocity 2011 - Our first DDoS attack
Velocity 2011 - Our first DDoS attackVelocity 2011 - Our first DDoS attack
Velocity 2011 - Our first DDoS attackCosimo Streppone
 
Beyond the RTOS: A Better Way to Design Real-Time Embedded Software
Beyond the RTOS: A Better Way to Design Real-Time Embedded SoftwareBeyond the RTOS: A Better Way to Design Real-Time Embedded Software
Beyond the RTOS: A Better Way to Design Real-Time Embedded SoftwareQuantum Leaps, LLC
 
Rails performance: Ruby GC tweaking
Rails performance: Ruby GC tweaking Rails performance: Ruby GC tweaking
Rails performance: Ruby GC tweaking Dimelo R&D Team
 
How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -
How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -
How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -kwatch
 
Loadays managing my sql with percona toolkit
Loadays managing my sql with percona toolkitLoadays managing my sql with percona toolkit
Loadays managing my sql with percona toolkitFrederic Descamps
 
Bottlenecks, Bottlenecks, and more Bottlenecks: Lessons Learned from 2 Years ...
Bottlenecks, Bottlenecks, and more Bottlenecks: Lessons Learned from 2 Years ...Bottlenecks, Bottlenecks, and more Bottlenecks: Lessons Learned from 2 Years ...
Bottlenecks, Bottlenecks, and more Bottlenecks: Lessons Learned from 2 Years ...Enkitec
 
Static Analysis and Code Optimizations in Glasgow Haskell Compiler
Static Analysis and Code Optimizations in Glasgow Haskell CompilerStatic Analysis and Code Optimizations in Glasgow Haskell Compiler
Static Analysis and Code Optimizations in Glasgow Haskell CompilerIlya Sergey
 

Ähnlich wie Plone TuneUp challenges (20)

Pylons + Tokyo Cabinet
Pylons + Tokyo CabinetPylons + Tokyo Cabinet
Pylons + Tokyo Cabinet
 
EC2ナイトセミナプレゼン資料 Rel2
EC2ナイトセミナプレゼン資料 Rel2EC2ナイトセミナプレゼン資料 Rel2
EC2ナイトセミナプレゼン資料 Rel2
 
Critical Issues at Exascale for Algorithm and Software Design
Critical Issues at Exascale for Algorithm and Software DesignCritical Issues at Exascale for Algorithm and Software Design
Critical Issues at Exascale for Algorithm and Software Design
 
Beyond the RTOS: A Better Way to Design Real-Time Embedded Software
Beyond the RTOS: A Better Way to Design Real-Time Embedded SoftwareBeyond the RTOS: A Better Way to Design Real-Time Embedded Software
Beyond the RTOS: A Better Way to Design Real-Time Embedded Software
 
Tew4 Yatce presentation
Tew4 Yatce presentationTew4 Yatce presentation
Tew4 Yatce presentation
 
Puppet Availability and Performance at 100K Nodes - PuppetConf 2014
Puppet Availability and Performance at 100K Nodes - PuppetConf 2014Puppet Availability and Performance at 100K Nodes - PuppetConf 2014
Puppet Availability and Performance at 100K Nodes - PuppetConf 2014
 
Scaling a Rails Application from the Bottom Up
Scaling a Rails Application from the Bottom Up Scaling a Rails Application from the Bottom Up
Scaling a Rails Application from the Bottom Up
 
FPGA based 10G Performance Tester for HW OpenFlow Switch
FPGA based 10G Performance Tester for HW OpenFlow SwitchFPGA based 10G Performance Tester for HW OpenFlow Switch
FPGA based 10G Performance Tester for HW OpenFlow Switch
 
Alfresco Security Best Practices 2012
Alfresco Security Best Practices 2012Alfresco Security Best Practices 2012
Alfresco Security Best Practices 2012
 
VISUG - Approaches for application request throttling
VISUG - Approaches for application request throttlingVISUG - Approaches for application request throttling
VISUG - Approaches for application request throttling
 
re7jweiss
re7jweissre7jweiss
re7jweiss
 
Velocity 2011 - Our first DDoS attack
Velocity 2011 - Our first DDoS attackVelocity 2011 - Our first DDoS attack
Velocity 2011 - Our first DDoS attack
 
Beyond the RTOS: A Better Way to Design Real-Time Embedded Software
Beyond the RTOS: A Better Way to Design Real-Time Embedded SoftwareBeyond the RTOS: A Better Way to Design Real-Time Embedded Software
Beyond the RTOS: A Better Way to Design Real-Time Embedded Software
 
Rails performance: Ruby GC tweaking
Rails performance: Ruby GC tweaking Rails performance: Ruby GC tweaking
Rails performance: Ruby GC tweaking
 
How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -
How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -
How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -
 
Loadays managing my sql with percona toolkit
Loadays managing my sql with percona toolkitLoadays managing my sql with percona toolkit
Loadays managing my sql with percona toolkit
 
Bottlenecks, Bottlenecks, and more Bottlenecks: Lessons Learned from 2 Years ...
Bottlenecks, Bottlenecks, and more Bottlenecks: Lessons Learned from 2 Years ...Bottlenecks, Bottlenecks, and more Bottlenecks: Lessons Learned from 2 Years ...
Bottlenecks, Bottlenecks, and more Bottlenecks: Lessons Learned from 2 Years ...
 
Static Analysis and Code Optimizations in Glasgow Haskell Compiler
Static Analysis and Code Optimizations in Glasgow Haskell CompilerStatic Analysis and Code Optimizations in Glasgow Haskell Compiler
Static Analysis and Code Optimizations in Glasgow Haskell Compiler
 
Blogopolisの裏側
Blogopolisの裏側Blogopolisの裏側
Blogopolisの裏側
 
RR Osorio FPGA
RR Osorio  FPGARR Osorio  FPGA
RR Osorio FPGA
 

Mehr von Andrew Mleczko

Lost in o auth? learn velruse and get your life back
Lost in o auth? learn velruse and get your life backLost in o auth? learn velruse and get your life back
Lost in o auth? learn velruse and get your life backAndrew Mleczko
 
Celery and the social networks
Celery and the social networksCelery and the social networks
Celery and the social networksAndrew Mleczko
 
PloneConf2012 - Are you in a hole and still digging? Or how to become an agil...
PloneConf2012 - Are you in a hole and still digging? Or how to become an agil...PloneConf2012 - Are you in a hole and still digging? Or how to become an agil...
PloneConf2012 - Are you in a hole and still digging? Or how to become an agil...Andrew Mleczko
 
Bootstrap your app in 45 seconds
Bootstrap your app in 45 secondsBootstrap your app in 45 seconds
Bootstrap your app in 45 secondsAndrew Mleczko
 
PyconUA - How to build ERP application having fun?
PyconUA - How to build ERP application having fun?PyconUA - How to build ERP application having fun?
PyconUA - How to build ERP application having fun?Andrew Mleczko
 
EuroPython 2011 - How to build complex web applications having fun?
EuroPython 2011 - How to build complex web applications having fun?EuroPython 2011 - How to build complex web applications having fun?
EuroPython 2011 - How to build complex web applications having fun?Andrew Mleczko
 

Mehr von Andrew Mleczko (6)

Lost in o auth? learn velruse and get your life back
Lost in o auth? learn velruse and get your life backLost in o auth? learn velruse and get your life back
Lost in o auth? learn velruse and get your life back
 
Celery and the social networks
Celery and the social networksCelery and the social networks
Celery and the social networks
 
PloneConf2012 - Are you in a hole and still digging? Or how to become an agil...
PloneConf2012 - Are you in a hole and still digging? Or how to become an agil...PloneConf2012 - Are you in a hole and still digging? Or how to become an agil...
PloneConf2012 - Are you in a hole and still digging? Or how to become an agil...
 
Bootstrap your app in 45 seconds
Bootstrap your app in 45 secondsBootstrap your app in 45 seconds
Bootstrap your app in 45 seconds
 
PyconUA - How to build ERP application having fun?
PyconUA - How to build ERP application having fun?PyconUA - How to build ERP application having fun?
PyconUA - How to build ERP application having fun?
 
EuroPython 2011 - How to build complex web applications having fun?
EuroPython 2011 - How to build complex web applications having fun?EuroPython 2011 - How to build complex web applications having fun?
EuroPython 2011 - How to build complex web applications having fun?
 

Kürzlich hochgeladen

Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfSeasiaInfotech2
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 

Kürzlich hochgeladen (20)

Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdf
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 

Plone TuneUp challenges

  • 1. 1 Plone TuneUp challenges in search of enterprise intranet solution Andrew Mleczko (redturtle.net) European Plone Symposium 2009 Sorrento, Italy
  • 2. 2 Poznan Ferrara
  • 3. 3 Co-founder of ACC Poland Ltd., the first Polish ● Plone company (past) Plone consultant at RedTurtle Technology - ● based in Ferrara (present) Plone-based and Lotus-based web applications ●
  • 4. 4 RedTurtle Technology “Sharing knowledge about knowledge sharing”
  • 5. 5 So what can you expect... Plone is just a CMS? ● Case study – Intranet Provincia di Ferrara ● Loadtests environment ● Plone TuneUp challenges ●
  • 6. 6 How we can use Plone?
  • 7. 7 Plone variety Community portals ● Document management system (DMS) ● Groupware - Collaboration ● Subsite management system ● Enterprise intranets ● ... ● Combination of all mantioned above ●
  • 8. 8 Plone as CMS vs. Plone as framework
  • 9. 9 “Plone is NOT a general web development framework.“ /Carlos de la Guardia/ Why?
  • 10. 10 Plone can be SLOW* *when using the wrong way
  • 11. 11 Framework comparision Used hardware: ● CPU: AMD OpteronT Processor 146 (2 GHz) – Memory: 2 GB – Testing with Siege 2.68 ● Read scenario ● Results for 50, 200, 300 Concurent Users (CU) ● More details: ● www.alrond.com/en/2007/jan/25/performance-test-of-6-leading-frameworks
  • 12. 12 Comparision Response time, secs. 2,5 2 1,5 50 CU 200 CU 300 CU 1 0,5 0 Django RubyOnRails TurboGears
  • 13. 13 Comparision Longest transaction, secs. 35 30 25 20 50 CU 200 CU 15 300 CU 10 5 0 Django RubyOnRails TurboGears
  • 14. 14 So where is Plone?
  • 15. 15 Far, far away Response time, secs. Longest transaction, secs. 18 60 16 50 14 12 40 10 50 CU 50 CU 30 200 CU 200 CU 300 CU 300 CU 8 6 20 4 10 2 0 0 Django RubyOnRails TurboGears Plone Django RubyOnRails TurboGears Plone
  • 16. 16 But comparing with Zope2 Response time, secs. 18 16 14 12 10 50 CU 200 CU 8 300 CU 6 4 2 0 Django + Psyco RubyOnRails 1.2.1 TurboGears Plone Zope2
  • 17. 17 What can we do... Do not treat Plone as a framework ● For some use cases: ● use ContentMirror + fast framework (django, pylons, repoze) But what about enterprise intranet solutions? ●
  • 18. 18 Plone for enterprise intranet Large number of users (more than 500) and ● documents (more than 100 000) A lot of simultaneous write requests (>20 CU/s) ● Using of caching limited ● Slowest acceptable resp. time <10 seconds ● the limit for keeping the user's attention focused [Miller 1968; Card et al. 1991]
  • 19. 19 Intranet Provincia di Ferrara y d tu s e s a C
  • 20. 20 Prerequisites 800 users stored in Domino Server (by PAS) ● 170.000 documents ● Yearly growth: ca 25.000 documents ● Peak traffic: 20 CU/s - write transactions ● (based on Domino logs)
  • 21. 21 Objective User response time (mixed read/write): ● Slowest (5-6 seconds) – Recommended (2-4 seconds) 90% of all request – Fast (<2 seconds) –
  • 22. 22 Test environment Hardware (current): ● 4 dual-core Intel Xeon 2.8 Ghz – 32 GB RAM – Amazon EC2 (future) ●
  • 23. 23 Test environment collective.loadtesting ● funkload – collective.funkload – PageTemplate Profiler ● mr.bent ● Munin + redturtle.munin ●
  • 24. 24 collective.loadtesting class Readonly(testcase.FLTestCase):          def setUp(self):         self.server_url = 'http://localhost:8080/plone'     def test_ReadOnly(self):         server_url = self.server_url         self.get(server_url + quot;/plone/login_formquot;,             description=quot;Get /plone/login_formquot;)         self.post(server_url + quot;/plone/login_formquot;, params=[             ['came_from', server_url + '/plone'],             ['form.submitted', '1'],             ['cookies_enabled', ''],             ['login_name', ''],             ['pwd_empty', '0'],             ['__ac_name', 'admin'],             ['__ac_password', 'admin'],             ['submit', 'Accedi']],             description=quot;Post /plone/login_formquot;)
  • 25. 25 mr.bent >>> from mr.bent.wrapper import mkwrapper >>> from mr.bent.tests.test_bent import callcounter >>> from Products.CMFPlone.CatalogTool import      CatalogTool >>> mkwrapper(CatalogTool.searchResults,   callcounter, quot;catalogsearchesquot;)
  • 26. 26 Test scenario Log in ● View random folder ● Create document (2 requests) ● View newly created document ● Publish it ● View home page ● Logout ●
  • 27. 27 Default clean Plone Response time, secs. 60 50 40 5CU 30 20CU 60CU 20 10 0 Log in Folder view Create document Save document View Publish Home page Logout
  • 28. 28 Default clean Plone % Errors (ConflictErrors) 100 90 80 70 60 5CU 50 20CU 60CU 40 30 20 10 0 Log in Folder view Create document Save document View Publish Home page Logout
  • 29. 29 Let's start TuneUp and install the basics: Varnish + Pound (with sticky session) + + 6 ZEO Clients (18 threads) + ZEO Server
  • 30. 30 Apache – proxy/rewriting urls ● Varnish – cache resources, add http headers ● Pound – balancing with sticky sessison ● 6 ZEO clients ● ZEO Server ●
  • 31. 31 + Varnish + Pound + ZEO Response time, secs. 40 35 30 25 5CU 20 20CU 60CU 15 10 5 0 Log in Folder view Create document Save document View Publish Home page Logout
  • 32. 32 + Varnish + Pound + ZEO % Errors (ConflictErrors) 100 90 80 70 60 5CU 50 20CU 60CU 40 30 20 10 0 Log in Folder view Create document Save document View Publish Home page Logout
  • 34. 34 Comparision Response time, secs., 20 CU 40 35 30 25 20 Default Plone Improvment 15 10 5 0 Log in Folder view Create document Save document View Publish Home page Logout
  • 35. 35 Where are the conflict errors comming from? mainly portal_catalog
  • 36. 36 Let's try: mount portal_catalog to different ZODB and increase zodb cache on it
  • 37. 37 Install redturtle.catalogmount ● Add zope-conf-additional: ● <zodb_db catalog> mount-point /plone/portal_catalog container-class Products.CMFPlone.CatalogTool.CatalogTool cache-size 300000 <zeoclient> server ${zeoserver:zeo-address} storage 2 name catalogstorage var ${buildout:parts-directory}/instance1/var cache-size 400MB </zeoclient> </zodb_db>
  • 38. 38 And add zeo-conf-additional: ● <filestorage 2> path ${buildout:directory}/var/filestorage/CatalogData.fs </filestorage>
  • 39. 39 + redturtle.catalogmount Response time, secs. 25 20 15 5CU 20CU 60CU 10 5 0 Log in Folder view Create document Save document View Publish Home page Logout
  • 40. 40 + redturtle.catalogmount % Errors (ConflictErrors) 100 90 80 70 60 5CU 50 20CU 60CU 40 30 20 10 0 Log in Folder view Create document Save document View Publish Home page Logout
  • 41. 41 Maybe there is a more stable solution: collective.indexing experimental.catalogqueryplan archetypes.schematuning
  • 42. 42 + collective.indexing + archetypes.schematuning Response time, secs. 16 14 12 10 5CU 8 20CU 60CU 6 4 2 0 Log in Folder view Create document Save document View Publish Home page Logout
  • 43. 43 + collective.indexing + archetypes.schematuning % Errors (ConflictErrors) 100 90 80 70 60 5CU 50 20CU 60CU 40 30 20 10 0 Log in Folder view Create document Save document View Publish Home page Logout
  • 44. 44 So what is the improvment?
  • 45. 45 Improvment Response time, secs., 20 CU 40 35 30 25 20 fresh Plone after TuneUp 15 10 5 0 Log in Folder view Create document Save document View Publish Home page Logout
  • 46. 46 Let's try to scale it...
  • 47. 47 ZEO scalability problem Response time, secs. 20 CU 45 40 35 30 25 1:10 4:20 20 6:18 10:30 15 10 5 0 Log in Folder view Create document Save document View Publish Home page Logout
  • 48. 48 ZEO scalability problem % Errors (ConflictErrors), 20 CU 60 50 40 1:10 30 4:20 6:18 10:30 20 10 0 Log in Folder view Create document Save document View Publish Home page Logout
  • 49. 49 Plone intranet limits ZODB is slow when handling concurrent writes ● transactions Scalability problem using flat ZEO ● Missing 'out of the box' performance ● (comparing to other framworks, CMS)
  • 50. 50 How we can solve the problem?
  • 51. 51 Ideas RelStorage for scalability problem ● collective.solr ● others ? ● share knowledge at plone-enterprise mailing list ●