Author: jdcasey
Date: Tue May 24 03:26:45 2011
New Revision: 1126849

URL: http://svn.apache.org/viewvc?rev=1126849&view=rev
Log:
Adding proposal to README.md

Modified:
    maven/maven-3/branches/mirror-group-routing/README.md

Modified: maven/maven-3/branches/mirror-group-routing/README.md
URL: 
http://svn.apache.org/viewvc/maven/maven-3/branches/mirror-group-routing/README.md?rev=1126849&r1=1126848&r2=1126849&view=diff
==============================================================================
--- maven/maven-3/branches/mirror-group-routing/README.md (original)
+++ maven/maven-3/branches/mirror-group-routing/README.md Tue May 24 03:26:45 
2011
@@ -1,3 +1,44 @@
+[PROPOSAL] Route-M Auto-Mirror Configuration for Maven 3
+=======================================================
+
+Introduction
+------------
+
+Currently, configuring Maven to use mirrors is an extremely manual process. 
The opportunities for human error involved in this configuration severely limit 
our practical ability to build a decentralized, distributed server 
infrastructure for serving Maven repositories. Moreover, this manual 
configuration problem makes the use of in-house repository managers 
unnecessarily difficult and error-prone.
+
+In addition to the configuration difficulties related to using mirrors, 
Maven's centralized repository structure is very difficult to serve. Maven has 
achieved a level of popularity such that the central repository requires 
incredibly high bandwidth to avoid network errors when users resolve 
dependencies for their projects. This problem is exacerbated by the usage 
design in tools like m2eclipse, that seems to encourage users to re-resolve the 
central repository's indexes very frequently. We've reached a point in the 
evolution of Maven where it's not feasible to host the central repository on 
donated infrastructure. The central repository is therefore unscalable, and 
therefore the design for resolving artifacts needs to be revisited.
+
+As part of this redesign, an automatic mirror-selection algorithm built 
directly into Maven would allow the use of a distributed network of Maven 
repositories. This would transform the scalability of Maven's repository 
infrastructure at a stroke. At the same time, an automatic mirror-selector 
would eliminate many of the configuration errors and confusion common to new 
users working in customized environments, as in the presence of a corporate 
repository manager.
+
+This proposal involves using a lightweight, centralized - but distributable - 
"routing table" document that describes the available mirrors, which is used by 
Maven to automatically select a mirror for a given repository. The routing 
table in question is meant to support various metrics that will allow Maven to 
give preference to the most appropriate mirrors, say those with better 
performance characteristics, closer geographical locations, etc. Once Maven 
makes a selection for a given repository, it will store that selection in a 
separate configuration file within $HOME/.m2 to avoid incurring the same 
selection cost next time around. Finally, Maven will support configuration of 
this auto-selection logic, to supply a different URL for the routing table, 
select which routing table URL discovery strategies should be used, and provide 
authentication for accessing the routing table URL.
+
+
+Backward Compatibility
+----------------------
+
+While this new auto-mirroring feature will transform the user experience and 
allow better scaling for the repository infrastructure, it's also critical not 
to interfere with configurations that are already working. Therefore, the 
auto-mirroring logic will defer to any mirrors configured in the Maven 
settings.xml. This allows the auto-mirror selector to remain in the background, 
dormant, until it's used without a specific mirror configuration in the 
settings.
+
+
+The Routing Table Model
+-----------------------
+
+The anatomy of a routing table document is fairly simple. This is a JSON 
document that consists of an array of mirror entries. Each mirror entry 
contains its own URL, id, enabled flag, and list of canonical repository URLs 
it mirrors. Additionally, it currently contains a simple weight integer, which 
allows Maven to favor selection of mirrors with a higher weight than others. 
Eventually, it may make sense to extend the mirror specification to include 
geolocation attributes like latitude and longitude, or other advanced selection 
data. For now, a simple weight rating will allow Maven to make a 
weighted-random selection to help spread load effectively over all available 
mirrors.
+
+
+Discovering the Routing Table
+-----------------------------
+
+For the most bare-bones use case, Maven should be configured by default to 
load a routing table document hosted on http://repository.apache.org. This 
location will be the fall-back URL even for users whose environment and 
configuration reference other routing-table URLs.
+
+In addition to the default routing table, it will also be possible to retrieve 
the routing table in two other ways. First, if the user has configured a 
property called 'router-url' in the $HOME/.m2/conf/automirror.properties file. 
If this property is available, Maven will attempt a HTTP GET to retrieve the 
routing table from that URL. If supplied, the 'router-user' and 
'router-password' properties can be used to configure authentication for this 
request. 
+
+If there is no router-url property or the configuration file doesn't exist, 
Maven will automatically attempt to locate a routing table URL using DNS. It 
will determine your localhost's DNS domain and attempt to retrieve a TXT record 
for the entry '_maven.domain.org'. If it finds a TXT record by this name, it 
will attempt a HTTP GET to retrieve the routing table JSON document. Once 
again, the 'router-user' and 'router-password' properties can be used to 
authenticate this request. If neither of these discovery attempts work, Maven 
will fall back to the canonical routing table URL. If the user configures the 
'discovery-strategies' property to 'none', this DNS discovery step will be 
skipped.
+
+While it would be possible to host the default routing table on the main 
maven.apache.org site, using repository.apache.org offers the flexibility to 
store or generate the routing table. For instance, we could store mirror 
records in a CouchDB instance, or generate them based on the contents and 
configuration of a repository manager. Using a more dynamic source for the 
canonical routing table gives us the opportunity to write a UI for maintaining 
the mirror entries. For example, it would be relatively straightforward to 
write a Javascript- and CouchDB-based application to support simple operations 
like enabling or disabling a mirror, updating a mirror's weight, or adding and 
removing mirrors.
+
+[ORIGINAL README FOLLOWS]
+=========================
+
 Homepage
 ========
 <http://maven.apache.org/>


Reply via email to