+1 On Fri, Jul 1, 2016 at 8:00 AM Jan van Doorn <j...@knutsel.com> wrote:
> Following the discussion thread, I would like to call a VOTE on accepting > Traffic Control into the Apache Incubator. > > [] +1 Accept Traffic Control into the Apache Incubator > [] +0 Abstain. > [] -1 Do not accept Traffic Control into the Apache Incubator because ... > > This vote will be open for at least 1 week (extra long to accommodate > holiday schedules). > > The proposal follows, you can also access the wiki page: > https://wiki.apache.org/incubator/TrafficControlProposal > > Thanks, > JvD > > > = Traffic Control Proposal = > > == Abstract == > > Traffic Control allows you to build a large scale content delivery network > using > open source. > > == Proposal == > > The goal of this proposal is to bring the Traffic Control project into the > Apache Software Foundation. > > == Background == > > Initially built around Apache Traffic Server as the caching software, > Traffic > Control implements all functions of a modern CDN except the caching > software: > > * Traffic Router is a Java Tomcat application that routes clients to the > closest > available cache on the CDN using both HTTP and DNS. By using consistent > hashing > it sends requests for the same content to the same cache in a group of > caches > working together in a location. It takes care of routing clients around > hot > spots and problems in the CDN by using the information from Traffic > Monitor with > regards to state of all the caches. > > * Traffic Monitor is a Java Tomcat application that implements the CDN > health > protocol. Every cache in the CDN is checked using HTTP for vital stats, > and > based on these stats, caches are declared healthy or unhealthy. This > information > is then used by Traffic Router to make its routing decisions. > > * Traffic Ops is a Perl Mojolicious and jQuery UI application for > management and > monitoring of all servers in the CDN. All server and content routing > information > for the CDN is managed through Traffic Ops. It also exposes RESTful API > endpoints for consumption by tools and other applications. > > * Traffic Stats is a Go application that is used to acquire and store > statistics > about CDNs controlled by Traffic Control. Traffic Stats mines metrics from > Traffic Monitor’s JSON APIs and stores the data in InfluxDB, and > visualizes them > using Grafana. > > * Traffic Analytics is a new component we are starting to build for log > file > analysis, based on Apache Kafka, Heka, and Elastic Search. > > > Traffic Control was developed by Comcast Cable and released as open source > under > the Apache 2.0 license in April of 2015. Traffic Control is deployed at > Comcast > and other cable operators. > > The Traffic Control project was presented at ApacheCon NA 2016, see > http://bit.ly/1UwMzmR for additional background information. > > == Rationale == > > Even though the traffic on today's CDNs is strictly defined by open > standards, > and there are many open source implementations of caches available, CDNs > are > still proprietary. The current providers of CDN-as-a-product or > CDN-as-a-service all have their own proprietary implementation of the > control > plane. The CDN control plane of one vendor can't interoperate with the CDN > control plane of another, creating a classic vendor-lockin for > CDN-as-a-product > customers. Traffic Control changes that. Emerging standards from IETF (CDNi > working group) and the Streaming Video Alliance Open Caching working group > need > an open source reference implementation; Traffic Control will strive to be > that. > > == Initial Goals == > > Initial goals of transitioning to ASF is to grow and diversify the > community, > and to move to a more open and inclusive development model. > > == Current Status == > > Traffic Control is functional and deployed at Comcast and other cable > operators. > In the past 12 months 10 major releases have been made. > > === Meritocracy === > > Initial development was done at Comcast Cable. Since April 2015 it has > been > open source, and a handful outside contributors have been added. > > Our main goal during incubation is to try to create a more diverse group of > contributors and users. > > === Community === > > Traffic Control is being used by a number of cable companies and is being > evaluated by a number of vendors and ISPs. Two vendors have created > products > based on Traffic Control and are active in the community. > > === Core Developers === > > Most of the core developers of Traffic Control are currently at Comcast. > The > main goal of the incubation is to grow the developer and user group into a > community beyond Comcast and US cable. > > === Alignment === > > Traffic Control is closely aligned with Apache Traffic Server (ATS). The > only > supported cache in a Traffic Control CDN at this time is ATS. One of our > proposed mentors is a committers to ATS, and our proposed champion the ATS > PMC > chair. > > We don't want to become a sub-project of ATS though, because we believe we > should add other caching proxies as they are deemed to be a valuable > addition to > the Traffic Control CDN. > > == Known Risks == > > === Orphaned products === > > Traffic Control is a new system that does not have wide adoption, but at > least > two major North American ISPs are committed to the continued development. > Two > vendors have used it to build products around and are active in the > community. > > === Inexperience with Open Source === > > One of the members of the team is an active Apache member and committer to > ATS. > The rest of the team has been, in various ways, active in the ATS > community in > recent years. > > === Homogenous Developers === > > Possibly our weakest area, and one of the drivers for us to want to become > part > of Apache. Most people working on the project are at Comcast, or at least > in the > cable industry. Even though we are currently open sourced, as it stands, > it is > not possible to add committers external to Comcast. We want to change > that. We > would add 3 external committers as a part of entering the incubator. > > === Reliance on Salaried Developers === > > Currently, Traffic Control relies solely on salaried employees. > > === Relationships with Other Apache Products === > > See also Alignment. ATS is a big part of a Traffic Control CDN, but we > also use > Apache Tomcat, apache Maven, and a number of other apache libraries (see > also > external dependencies). > > === A Excessive Fascination with the Apache Brand === > > We are more attracted to Apache as a philosophy than Apache as a brand. We > definitely see value in the brand, but we feel that adopting the "Apache > Way" > is the most crucial factor for our long term viability. > > == Documentation == > > Documentation is available at: > http://traffic-control-cdn.net/docs/latest/index.html > > == Initial Source == > > The source code can be found here: > https://github.com/Comcast/traffic_control > > == Source and Intellectual Property Submission Plan == > > The code is currently Apache 2.0 license, and was verified to have no > intellectual property or license issues before being being released to open > source by Comcast in 2015. Since then, extreme care has been taken to not > add > any dependencies or code that would change that. > > == External Dependencies == > > Note that all dependencies except two have been verified to have a Apache > compatible license. The two that are not compatible are MySQL (GPL), and > we are > removing that dependency in version 2.0, and jdnssec (GPL), which we are > planning to replace in the future. A third, Heka, is Mozilla Public > License 2.0, > we are unsure if it is compatible ( > http://www.apache.org/legal/resolved.html > seems to say it is category B, so it is OK to have the binary dependency), > but > the dependency is optional, and Heka will probably be replaced in the near > future. > > * Golang > * github.com/gorilla/handlers > * github.com/dgrijalva/jwt-go/ > * github.com/tebeka/selenium > * github.com/lib/pq > * Apache Kafka > * Heka (https://github.com/mozilla-services/heka - MPL) > * ElasticSearch > * Java > * org.apache.wicket > * org.slf4j > * log4j > * org.eclipse.jetty.aggregate > * org.apache.commons > * commons-codec > * com.ning.async-http-client > * org.hamcrest > * junit > * org.powermock > * org.springframework > * javax.servlet > * com.fasterxml.jackson.core > * org.apache.tomcat > * org.json > * dnsjava > * jdnssec # GPL, needs to be removed > * com.google.guava > * org.apache.wicket > * com.googlecode.java-ipv6 > * com.maxmind.geoip2 # maxmind commercial - optional > * com.google.http-client > * org.apache.httpcomponents > * org.eclipse.jetty.aggregate > * com.fasterxml.jackson.core > * com.quova.bff # neustar commercial - optional > * MySQL # Note: being replaced in version 2.0 with Postgres > * Postgres > * postgrest (https://github.com/begriffs/postgrest) > * Riak > * InfluxDB > * Grafana > * goose (https://bitbucket.org/liamstask/goose/) > * Perl packages > * CPAN package 'Algorithm::C3' > * CPAN package 'B::Hooks::EndOfScope' > * CPAN package 'CPAN::Meta' > * CPAN package 'CPAN::Meta::Check' > * CPAN package 'CPAN::Meta::Requirements' > * CPAN package 'CPAN::Meta::YAML' > * CPAN package 'Carp' > * CPAN package 'Carp::Clan' > * CPAN package 'Class::Accessor' > * CPAN package 'Class::Accessor::Chained::Fast' > * CPAN package 'Class::Accessor::Grouped' > * CPAN package 'Class::C3' > * CPAN package 'Class::C3::Componentised' > * CPAN package 'Class::Inspector' > * CPAN package 'Class::Load' > * CPAN package 'Class::Load::XS' > * CPAN package 'Class::Method::Modifiers' > * CPAN package 'Class::Unload' > * CPAN package 'Clone' > * CPAN package 'Compress::Raw::Bzip2' > * CPAN package 'Compress::Raw::Zlib' > * CPAN package 'Compress::Zlib' > * CPAN package 'Config::Any' > * CPAN package 'Config::General' > * CPAN package 'Config::Properties' > * CPAN package 'Context::Preserve' > * CPAN package 'Data::GUID' > * CPAN package 'DBD::SQLite' > * CPAN packagerequires 'Time::HiRes' # required by DBD::mysql > * CPAN package 'DBD::mysql', '==4.029' > * CPAN package 'DBI' > * CPAN package 'DBIx::Class' > * CPAN package 'DBIx::Class::Core' > * CPAN package 'DBIx::Class::EasyFixture' > * CPAN package 'DBIx::Class::IntrospectableM2M' > * CPAN package 'DBIx::Class::Schema' > * CPAN package 'DBIx::Class::Schema::Loader' > * CPAN package 'DBIx::Class::IntrospectableM2M' > * CPAN package 'Data::Compare' > * CPAN package 'Data::Dumper' > * CPAN package 'Data::Dumper::Concise' > * CPAN package 'Data::OptList' > * CPAN package 'Data::Page' > * CPAN package 'Date::Manip' > * CPAN package 'DateTime::Format::ISO8601' > * CPAN package 'Devel::GlobalDestruction' > * CPAN package 'Devel::StackTrace' > * CPAN package 'Devel::Symdump' > * CPAN package 'Digest::MD5' > * CPAN package 'Digest::SHA' > * CPAN package 'Digest::SHA1' > * CPAN package 'Digest::base' > * CPAN package 'DirHandle' > * CPAN package 'Dist::CheckConflicts' > * CPAN package 'DynaLoader' > * CPAN package 'Email::Valid' > * CPAN package 'Encode' > * CPAN package 'Encode::Locale' > * CPAN package 'Env' > * CPAN package 'Eval::Closure' > * CPAN package 'Exporter' > * CPAN package 'ExtUtils::CBuilder' > * CPAN package 'ExtUtils::Install' > * CPAN package 'ExtUtils::MakeMaker' > * CPAN package 'ExtUtils::Manifest' > * CPAN package 'ExtUtils::ParseXS' > * CPAN package 'File::Basename' > * CPAN package 'File::Copy::Recursive' > * CPAN package 'File::Find' > * CPAN package 'File::Find::Rule' > * CPAN package 'File::Listing' > * CPAN package 'File::Path' > * CPAN package 'File::Spec' > * CPAN package 'File::Stat' > * CPAN package 'File::Spec::Functions' > * CPAN package 'File::Temp' > * CPAN package 'Getopt::Long' > * CPAN package 'Getopt::Std' > * CPAN package 'HTML::Entities' > * CPAN package 'HTML::Parser' > * CPAN package 'HTML::Tagset' > * CPAN package 'HTTP::Cookies' > * CPAN package 'HTTP::Daemon' > * CPAN package 'HTTP::Date' > * CPAN package 'HTTP::Headers::Util' > * CPAN package 'HTTP::Negotiate' > * CPAN package 'Hash::Merge' > * CPAN package 'IO::Compress::Bzip2' > * CPAN package 'IO::Compress::Gzip' > * CPAN package 'IO::Uncompress::Unzip' > * CPAN package 'IO::File' > * CPAN package 'IO::HTML' > * CPAN package 'IO::Handle' > * CPAN package 'IO::Socket::SSL' > * CPAN package 'IO::Socket::Timeout' > * CPAN package 'IO::String' > * CPAN package 'IPC::Cmd' > * CPAN package 'Import::Into' > * CPAN package 'JSON' > * CPAN package 'JSON::PP' > * CPAN package 'JSON::XS' > * CPAN package 'LWP' > * CPAN package 'LWP::MediaTypes' > * CPAN package 'Lingua::EN::FindNumber' > * CPAN package 'Lingua::EN::Inflect' > * CPAN package 'Lingua::EN::Inflect::Number' > * CPAN package 'Lingua::EN::Inflect::Phrase' > * CPAN package 'Lingua::EN::Number::IsOrdinal' > * CPAN package 'Lingua::EN::Tagger' > * CPAN package 'Lingua::EN::Words2Nums' > * CPAN package 'Lingua::GL::Stemmer' > * CPAN package 'Lingua::Stem' > * CPAN package 'Lingua::Stem::Fr' > * CPAN package 'Lingua::Stem::It' > * CPAN package 'Lingua::Stem::Ru' > * CPAN package 'Lingua::Stem::Snowball::Da' > * CPAN package 'Lingua::Stem::Snowball::No' > * CPAN package 'Lingua::Stem::Snowball::Se' > * CPAN package 'List::Compare' > * CPAN package 'List::MoreUtils' > * CPAN package 'Locale::Maketext::Simple' > * CPAN package 'Log::Log4perl' > * CPAN package 'MIME::Base64' > * CPAN package 'Math::Round' > * CPAN package 'MRO::Compat' > * CPAN package 'Memoize' > * CPAN package 'Memoize::ExpireLRU' > * CPAN package 'Mixin::Linewise::Readers' > * CPAN package 'Modern::Perl','==1.20150127' > * CPAN package 'Module::Build' > * CPAN package 'Module::Build::ModuleInfo' > * CPAN package 'Module::CoreList' > * CPAN package 'Module::Find' > * CPAN package 'Module::Implementation' > * CPAN package 'Module::Load' > * CPAN package 'Module::Load::Conditional' > * CPAN package 'Module::Metadata' > * CPAN package 'Module::Pluggable' > * CPAN package 'Module::Runtime' > * CPAN package 'Module::ScanDeps' > * CPAN package 'Mojo::Base' > * CPAN package 'Mojo::JSON' > * CPAN package 'Mojo::Log' > * CPAN package 'Mojo::Upload' > * CPAN package 'Mojo::UserAgent' > * CPAN package 'Mojolicious', '==5.24' > * CPAN package 'Mojolicious::Lite' > * CPAN package 'Mojolicious::Plugin::AccessLog', '==0.004' > * CPAN package 'Mojolicious::Plugin::Authentication', '==1.26' > * CPAN package 'Mojolicious::Plugin::FormFields', '==0.04' > * CPAN package 'Mojolicious::Plugin::Mail', '==1.3' > * CPAN package 'MojoX::Log::Log4perl', '==0.10' > * CPAN package 'Moo' > * CPAN package 'Moose' > * CPAN package 'NetPacket::IPv6' > * CPAN package 'Net::FTP' > * CPAN package 'Net::HTTP' > * CPAN package 'Net::LDAP' > * CPAN package 'Net::Pcap' > * CPAN package 'Net::PcapUtils' > * CPAN package 'NetAddr::IP' > * CPAN package 'NetPacket' > * CPAN package 'Number::Compare' > * CPAN package 'POSIX' > * CPAN package 'Package::DeprecationManager' > * CPAN package 'Package::Stash' > * CPAN package 'Package::Stash::XS' > * CPAN package 'Params::Check' > * CPAN package 'Params::Util' > * CPAN package 'Parse::CPAN::Meta' > * CPAN package 'Path::Class' > * CPAN package 'Perl::OSType' > * CPAN package 'Perl::Tidy','==20150815' > * CPAN package 'PerlIO::utf8_strict' > * CPAN package 'PerlIO::via::Timeout' > * CPAN package 'Pod::Coverage::CountParents' > * CPAN package 'Pod::Coverage::TrustPod' > * CPAN package 'Pod::Escapes' > * CPAN package 'Pod::Eventual::Simple' > * CPAN package 'Pod::Find' > * CPAN package 'Pod::Man' > * CPAN package 'Pod::Simple' > * CPAN package 'Pod::Usage' > * CPAN package 'Role::Tiny' > * CPAN package 'SQL::Abstract' > * CPAN package 'Scalar::Util' > * CPAN package 'Scope::Guard' > * CPAN package 'Socket' > * CPAN package 'Storable' > * CPAN package 'String::CamelCase' > * CPAN package 'String::ToIdentifier::EN' > * CPAN package 'Sub::Exporter' > * CPAN package 'Sub::Exporter::Progressive' > * CPAN package 'Sub::Identify' > * CPAN package 'Sub::Install' > * CPAN package 'Sub::Name' > * CPAN package 'Sub::Uplevel' > * CPAN package 'Sys::Syslog' > * CPAN package 'TAP::Formatter::Jenkins' > * CPAN package 'Task::Weaken' > * CPAN package 'Term::ReadPassword' > * CPAN package 'Test' > * CPAN package 'Test::Builder::Tester' > * CPAN package 'Test::CPAN::Meta' > * CPAN package 'Test::Deep' > * CPAN package 'Test::Exception' > * CPAN package 'Test::Fatal' > * CPAN package 'Test::Harness' > * CPAN package 'Test::Inter' > * CPAN package 'Test::Mojo' > * CPAN package 'Test::MockModule' > * CPAN package 'Test::MockObject' > * CPAN package 'Test::More' > * CPAN package 'Test::NoWarnings' > * CPAN package 'Test::Pod' > * CPAN package 'Test::SharedFork' > * CPAN package 'Test::TCP' > * CPAN package 'Test::Tester' > * CPAN package 'Test::Warn' > * CPAN package 'Test::Requires' > * CPAN package 'Text::Abbrev' > * CPAN package 'Text::Balanced' > * CPAN package 'Text::German' > * CPAN package 'Text::Glob' > * CPAN package 'Text::ParseWords' > * CPAN package 'Text::Unidecode' > * CPAN package 'Text::Wrap' > * CPAN package 'Time::HiRes' > * CPAN package 'Time::Local' > * CPAN package 'Time::Out' > * CPAN package 'Time::Seconds' > * CPAN package 'Try::Tiny' > * CPAN package 'URI' > * CPAN package 'WWW::Curl::Easy' > * CPAN package 'WWW::RobotRules' > * CPAN package 'XSLoader' > * CPAN package 'ExtUtils::Config' # for Net::Riak > * CPAN package 'Module::Build::Tiny' # for Net::Riak > * CPAN package 'Net::Riak' > * CPAN package 'Crypt::OpenSSL::RSA' > * CPAN package 'Crypt::OpenSSL::Bignum' > * CPAN package 'Crypt::OpenSSL::Random' > * CPAN package 'Net::DNS::SEC::Private' > * CPAN package 'LWP::Protocol::https' > * CPAN package 'Net::CIDR' > * CPAN package 'Data::Validate::IP' > > == Cryptography == > > There is no cryptographic code in Traffic Control. We leverage OpenSSL for > all our cryptography needs. > > == Required Resources == > > === Mailing lists === > > We currently use "google groups" to communicate, but we would like to move > that > to ASF maintained mailing lists. > > Current groups / mailing lists: > * https://groups.google.com/forum/#!forum/traffic_control > * https://groups.google.com/forum/#!forum/traffic_control-announce > * https://groups.google.com/forum/#!forum/traffic_control-discuss > > Proposed ASF maintained lists: > * priv...@traffic-control.incubator.apache.org (moderated subscriptions) > * d...@traffic-control.incubator.apache.org > * comm...@traffic-control.incubator.apache.org > * notificati...@traffic-control.incubator.apache.org > * us...@traffic-control.incubator.apache.org > > === Subversion Directory === > > We do not use SVN for source code revision control. > > === Git Repository === > > We would like to use git-wip (git://git.apache.org/traffic_control.git). > > > === Issue Tracking === > > JIRA. > > === Other Resources === > > We have automated tests and continuous integration configurations we would > like > to move away from Comcast. > > == Initial Committers == > > * Dan Kirkwood (dangogh at gmail.com) > * David Neuman (david.neuman64 at gmail.com) > * Dewayne Richardson (dewrich at gmail.com) > * Eric Friedrich (eric.friedrich84 at gmail.com) > * Hank Beatty (Hank.Beatty at cox.com) > * Jackie Heitzer (jackieheitzer at gmail.com) > * Jan van Doorn (jvd at knutsel.com) > * Jeff Elsloo (jeff.elsloo at gmail.com) > * Jeremy Mitchell (mitchell852 at gmail.com) > * Mark Torluemke (mark at torluemke.net) > * Steve Malenfant (steve.malenfant at cox.com) > > == Affiliations == > > * Comcast Cable: Dan Kirkwood, David Neuman, Dewayne Richardson, Jackie > Heitzer, > Jan van Doorn, Jeff Elsloo, Jeremy Mitchell, Mark Torluemke > > * Cox Communications: Hank Beatty, Steve Malenfant > > * Cisco: Eric Friedrich > > == Sponsors == > > === Champion === > > * Leif Hedstrom (zwoop at apache.org) > > === Nominated Mentors === > > * Phil Sorber (sorber at apache.org) > * Eric Covener (covener at apache.org) > * Daniel Gruno (humbedooh at apache.org) > * J. Aaron Farr (farra at apache.org) > > === Sponsoring Entity === > > We request the Apache Incubator to sponsor this project. > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: general-unsubscr...@incubator.apache.org > For additional commands, e-mail: general-h...@incubator.apache.org > >