SlideShare uma empresa Scribd logo
1 de 51
Baixar para ler offline
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
  ●

Mais conteúdo relacionado

Destaque

Needle in an enterprise haystack
Needle in an enterprise haystackNeedle in an enterprise haystack
Needle in an enterprise haystack
Andrew Mleczko
 
Fast content import in Plone
Fast content import in PloneFast content import in Plone
Fast content import in Plone
Andrew Mleczko
 

Destaque (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
 

Semelhante a Plone TuneUp challenges

Pylons + Tokyo Cabinet
Pylons + Tokyo CabinetPylons + Tokyo Cabinet
Pylons + Tokyo Cabinet
Ben Cheng
 
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
top500
 
Tew4 Yatce presentation
Tew4 Yatce presentationTew4 Yatce presentation
Tew4 Yatce presentation
UENISHI Kota
 
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 toolkit
Frederic 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
 

Semelhante a 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
 

Mais de 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?
 

Último

Último (20)

Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 

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 ●