sc.base.cdn
===========

.. contents::

Overview
********

This package implements an easy way to configure a CDN to distribute skin 
elements of your site, thus reducing server accesses and improving response 
time.

sc.base.cdn as developed initially as a proof of concept and it's shipped with 
three different providers:

   * Coral CDN
   * AlternateHostname
   * MultipleHostnames


Requirements
************

    **sc.base.cdn** has been tested with:
    
    * Plone 3.3.x (http://plone.org/products/plone)
    
Installation
************
    
To use this package, on a buildout based installation:

    1. Edit your buildout.cfg and add ``sc.base.cdn``
       to the list of eggs to install ::

        [buildout]
        ...
        eggs = 
            sc.base.cdn

    2. Tell the plone.recipe.zope2instance recipe to install a ZCML slug::

        [instance]
        ...
        zcml = 
            ...
            sc.base.cdn
    

If another package depends on the sc.base.cdn egg or 
includes its zcml directly you do not need to specify anything in the 
buildout configuration: buildout will detect this automatically.

After updating the configuration you need to run the ''bin/buildout'',
which will take care of updating your system.

Go to the 'Site Setup' page in the Plone interface and click on the
'Add/Remove Products' link.

Choose the product (check its checkbox) and click the 'Install' button.

Uninstall -- This can be done from the same management screen, but only
if you installed it from the quick installer.

Post-Installation
*****************

This package installs a control panel on your Plone instance. To access it 
point your browser at http://<address_to_your_plone_site/@@cdn-controlpanel .

The CDN Control Panel allows you to enable/disable the CDN support and also 
choose which CDN provider you plan to use. 

Providers
*********

This package is bundled with three **very basic** CDN providers. Each one of 
them could be used in production but it's possible to deploy new ones.

CoralCDN
--------

CoralCDN is a decentralized, self-organizing, peer-to-peer web-content 
distribution network. CoralCDN leverages the aggregate bandwidth of volunteers 
running the software to absorb and dissipate most of the traffic for web sites 
using the system. In so doing, CoralCDN replicates content in proportion to the 
content's popularity, regardless of the publisher's resources.[#]_

Our implementation basically appends the .nyud.net sufix to urls generated by 
resource registries (like portal_javascripts, portal_css, portal_kss).

AlternateHostname
-----------------

This provider allows you to designate an alternate hostname to serve skin 
resources for your portal. 
A very basic example would be to add 127.0.0.1 as an alternate hostname -- 
using same port number as your zope instance -- during development, thus enabling 
resources to be downloaded from 127.0.0.1 while content will be served from 
localhost.

MultipleHostnames
-----------------

Acting in a similar way to AlternateHostname provider, MultipleHostnames allows 
you to type in multiple values for hostname.

When the absolute_url method from a resource registry is called, we use choice 
to pick one of the available hostnames and return it to the browser.

Using MultipleHostnames allows you to serve content from a hostname while 
resources will be called from up to 3 other addresses -- one for each registry.


Todo/Future
***********

* Support other CDN providers as Amazon AWS/S3, FTP / SCP servers

* Select which contents will be distributed by a CDN

Credits
*******

    * Erico Andrei (erico at simplesconsultoria dot com dot br) - Coding and
      Packaging

.. [#] Extracted from http://www.coralcdn.org/overview/

