.. 
.. 
.. Licensed under the Apache License, Version 2.0 (the "License");
.. you may not use this file except in compliance with the License.
.. You may obtain a copy of the License at
.. 
..     http://www.apache.org/licenses/LICENSE-2.0
.. 
.. Unless required by applicable law or agreed to in writing, software
.. distributed under the License is distributed on an "AS IS" BASIS,
.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
.. See the License for the specific language governing permissions and
.. limitations under the License.
.. 

%%%%%%%%%%%%%%%
Traffic Control
%%%%%%%%%%%%%%%

The vast majority of today's Internet traffic is media files being sent from a single source to many thousands or even millions of destinations.  Content Delivery Networks make that one-to-many distribution possible in an economical way. 

Traffic Control is an Open Source implementation of a Content Delivery Network. 

The following documentation sections are available:

CDN Basics
==========
A review of the basic functionality of a Content Delivery Network. 

.. toctree::
   :maxdepth: 2

   basics/index


Traffic Control Overview
========================
An introduction to the Traffic Control architecture, components, and their integration.

.. toctree::
   :maxdepth: 0

   overview/index

Administrator's Guide
=====================
How to deploy and manage a Traffic Control CDN.

.. toctree::
   :maxdepth: 3

   admin/index

Developer's Guide
==================
A guide to the various internal and external APIs, and an introduction for the Traffic Control developer.

.. toctree::
   :maxdepth: 3

   development/index


FAQ
===

.. toctree::
   :maxdepth: 3

   faq/index

Indices and Tables
==================

.. toctree::
   :maxdepth: 3

   glossary.rst


