blob: f8a78a01eee143ea6fb8740acf0c2e87f0462fd7 [file] [log] [blame]
..
.. Copyright 2015 Comcast Cable Communications Management, LLC
..
.. 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 Router
**************
Introduction
============
Traffic Router is a Java Tomcat application that routes clients to the closest available cache on the CDN using both HTTP and DNS. Cache availability is determined by Traffic Monitor; consequently Traffic Router polls Traffic Monitor for its configuration and cache health state information, and uses this data to make routing decisions. HTTP routing is performed by localizing the client based on the request's source IP address (IPv4 or IPv6), and issues an HTTP 302 redirect to the nearest cache. HTTP routing utilizes consistent hashing on request URLs to optimize cache performance and request distribution. DNS routing is performed by localizing clients, resolvers in most cases, requesting ``A`` and ``AAAA`` records for a configurable name such as ``edge.deliveryservice.somecdn.net``. Traffic Router is comprised of four separate Maven modules:
* api - Provides a simple JSON interface into certain aspects of core and is deployed as a WAR to a Service (read: connector/listen port) within Tomcat which is separate from core
* connector - A JAR that overrides Tomcat's standard Http11Protocol Connector class and allows Traffic Router to delay opening listen sockets until it is in a state suitable for routing traffic
* core - Services DNS and HTTP requests, performs localization on routing requests, and is deployed as a WAR to a Service (read: connector/listen port) within Tomcat which is separate from api
* rpm - A simple Maven project which gathers the artifacts from the prior three modules and builds an RPM
Software Requirements
=====================
To work on Traffic Router you need a \*nix (MacOS and Linux are most commonly used) environment that has the following installed:
* Eclipse >= Kepler SR2 (or another Java IDE)
* Maven >= 3.3.1
* JDK >= 6.0
Traffic Router Project Tree Overview
=====================================
* ``traffic_control/traffic_traffic_router/`` - base directory for Traffic Router
* ``api/`` - Source code for Traffic Router API, which is built as its own deployable WAR file and communicates with Traffic Router Core using JMX
* ``src/main`` - Main source directory for Traffic Router API
* ``java/`` - Java source code for Traffic Router API
* ``resources/`` - Spring resources pulled in during an RPM build
* ``webapp/`` - Java webapp resources
* ``src/test`` - Test source directory for Traffic Router API
* ``java/`` - JUnit based unit tests for Traffic Router API
* ``resources/`` - Resources pulled in by unit tests
* ``connector/`` - Source code for Traffic Router Connector;
* ``src/main/java`` - Java source directory for Traffic Router Connector
* ``core/`` - Source code for Traffic Router Core, which is built as its own deployable WAR file and communicates with Traffic Router API using JMX
* ``src/main`` - Main source directory for Traffic Router Core
* ``etc/init.d`` - Init script for Tomcat
* ``conf/`` - Configuration files
* ``java/`` - Java source code for Traffic Router Core
* ``opt/tomcat/conf`` - Contains Tomcat configuration file(s) pulled in during an RPM build
* ``resources/`` - Resources pulled in during an RPM build
* ``scripts/`` - Scripts used by the RPM build process
* ``webapp/`` - Java webapp resources
* ``src/test`` - Test source directory for Traffic Router Core
* ``db`` - Files downloaded by unit tests
* ``java/`` - JUnit based unit tests for Traffic Router Core
* ``resources/`` - Configuration files used by unit tests
* ``var/auto-zones`` - BIND formatted zone files generated by Traffic Router Core during unit testing
Java Formatting Conventions
===========================
None at this time. The codebase will eventually be formatted per Java standards.
Installing The Developer Environment
====================================
To install the Traffic Router Developer environment:
1. Clone the traffic_control repository using Git.
2. Change directories into ``traffic_control/traffic_router``.
3. If you are not running Traffic Monitor locally (http://localhost:8080) from within Eclipse, edit the following parameter in core/src/test/resources/traffic_monitor.properties and point it to an instance, or instances of Traffic Monitor for your chosen CDN:
+-------------------------------------+------------------------------------------------------------------------------------------------------------------+
| Parameter | Value |
+=====================================+==================================================================================================================+
| ``traffic_monitor.bootstrap.hosts`` | FQDN and port of the Traffic Monitor instance(s), separated by semicolons as necessary (do not include http://). |
+-------------------------------------+------------------------------------------------------------------------------------------------------------------+
4. Import the existing git repo into Eclipse:
a. File -> Import -> Git -> Projects from Git; Next
b. Existing local repository; Next
c. Add -> browse to find ``traffic_control``; Open
d. Select ``traffic_control``; Next
e. Ensure "Import existing projects" is selected, expand ``traffic_control``, select ``traffic_router``; Next
f. Ensure ``traffic_router_api``, ``traffic_router_connector``, and ``traffic_router_core`` are checked; Finish (this step can take several minutes to complete)
g. Ensure ``traffic_router_api``, ``traffic_router_connector``, and ``traffic_router_core`` have been opened by Eclipse after importing
5. From the terminal, run ``mvn clean verify`` from the ``traffic_router`` directory
6. Start the embedded Jetty instance for Core from within Eclipse
a. In the package explorer, expand ``traffic_router_core``
b. Expand ``src/test/java``
c. Expand the package ``com.comcast.cdn.traffic_control.traffic_router.core``
d. Open and run ``TrafficRouterStart.java``
.. Note:: If an error is displayed in the Console, run ``mvn clean verify`` from the ``traffic_router`` directory
7. Traffic Router Core should now be running; the HTTP routing interface is available on http://localhost:8081, while the DNS server and routing interface is available on localhost:1053 via TCP and UDP.
Test Cases
==========
Unit tests can be executed using Maven by running ``mvn test`` at the root of the ``traffic_router`` project.
API
===
:ref:`reference-tr-api`
.. toctree::
:hidden:
:maxdepth: 1
traffic_router/traffic_router_api