<div dir="ltr"><div>Proper mirror identification is crucial, but it requires its own metadata:<br><br></div><div>- What kind of mirror?<br></div><div>Identical data and identical user interface<br></div><div>Identical data with different interface<br></div><div>Subset of the data<br></div><div>Derived data products<br><br></div><div>- Original data source/publisher<br></div><div>Name the source<br></div><div>Provide a link to the source<br></div><div>Provide acknowledgment and citation information<br><br></div><div>- The most recent sync date and time<br></div><div>This is an issue for mirrors of evolving repositories<br><br></div><div>This information needs to be available at (and provided by)<br></div><div>the mirror site, but it would be helpful if it (or some of it)<br></div><div>were also available in the registry.<br></div><div><br></div><div>Cheers,<br><br></div><div>  - Arnold<br></div></div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature"><div dir="ltr">-------------------------------------------------------------------------------------------------------------<br>Arnold H. Rots                                          Chandra X-ray Science Center<br>Smithsonian Astrophysical Observatory                   tel:  +1 617 496 7701<br>60 Garden Street, MS 67                                      fax:  +1 617 495 7356<br>Cambridge, MA 02138                                         <a href="mailto:arots@cfa.harvard.edu" target="_blank">arots@cfa.harvard.edu</a><br>USA                                                   <a href="http://hea-www.harvard.edu/~arots/" target="_blank">http://hea-www.harvard.edu/~arots/</a><br>--------------------------------------------------------------------------------------------------------------<br><br></div></div></div>
<br><div class="gmail_quote">On Thu, Jun 2, 2016 at 2:57 AM, Pierre Fernique <span dir="ltr">&lt;<a href="mailto:Pierre.Fernique@astro.unistra.fr" target="_blank">Pierre.Fernique@astro.unistra.fr</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
Hi Reg and DAL teams,<br>
<br>
The CDS has a very long experience in the usage and the management of the mirrors (20 years now). It is a key point for our services: easier access for low bandwidth users, security of the service, load-balancing, &quot;backup&quot; of the data, political/strategical reasons....<br>
<br>
So it will be definitivelly a very good news if the VO registry could manage them.<br>
<br>
Otherwise, the VO tools will continue either to totally ignore the mirror alternatives (TOPcat), or will continue to use a parallel system (the GLU for Aladin, its own mechanism for Sesame, or other commercial CDN systems as ESAC are using for their HiPS...), or will let the users specify manually the base root url for a dedicated service.<br>
<br>
So definitively, if we want to have a better chance that the VO registry is really directly used by the VO clients, I think that the VO registry should support mirror declarations.<br>
<br>
Cheers<span class="HOEnZb"><font color="#888888"><br>
Pierre Fernique</font></span><div class="HOEnZb"><div class="h5"><br>
<br>
<br>
<br>
<br>
Le 31/05/2016 à 13:53, Markus Demleitner a écrit :<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Dear Registry, Dear DAL,<br>
<br>
[I&#39;d suggest followups should go to registry]<br>
<br>
While revising VOResource 1.1, I&#39;d like to gather opinions on whether<br>
VOResource (and, in consequence, the Registry) should support the<br>
declaration of mirrors -- and if so, how.<br>
<br>
If you think mirrors should be handled in VOResource, let me know<br>
even if there&#39;s nothing else you&#39;d like to say.  Because, due to the<br>
complexities discussed below I&#39;d not plan for it unless there&#39;s<br>
(enough) interest in the first place.<br>
<br>
If you don&#39;t care about mirrors and/or the registry, you can stop<br>
reading now -- there&#39;s nothing else below.<br>
<br>
<br>
(1) The problem<br>
<br>
You could say we already support mirrors -- if one and the same<br>
interface is available at several places in the world, you can just<br>
add some accessURLs in to the interface element in your registry<br>
record, like this:<br>
<br>
   &lt;capability standardID=&quot;ivo://example/whatever&quot;&gt;<br>
     &lt;interface std=&quot;True&quot;&gt;<br>
       &lt;accessURL use=&quot;base&quot;&gt;<a href="http://example.eu/svc/stars" rel="noreferrer" target="_blank">http://example.eu/svc/stars</a>?&lt;/accessURL&gt;<br>
       &lt;accessURL use=&quot;base&quot;&gt;<a href="http://example.za/svc/stars" rel="noreferrer" target="_blank">http://example.za/svc/stars</a>?&lt;/accessURL&gt;<br>
       &lt;accessURL use=&quot;base&quot;&gt;<a href="http://example.cn/svc/stars" rel="noreferrer" target="_blank">http://example.cn/svc/stars</a>?&lt;/accessURL&gt;<br>
     &lt;/interface&gt;<br>
     &lt;param ...<br>
   &lt;/capability&gt;<br>
<br>
The problem is that that&#39;s not good enough.  There&#39;s no client<br>
support for this at all.  That&#39;s bad because clients will then<br>
probably choose a random mirror (depending on access modalities),<br>
which means that users will, in all likelihood, be directed to a<br>
mirror that&#39;s far away from them and probably on a smaller<br>
machine than the main site.<br>
<br>
With RegTAP, there&#39;s additional pain.  For one, since nobody so<br>
far has used multiple accessURLs and they&#39;d have required an<br>
additional join in almost every query (on top of the capability and<br>
interface joins), RegTAP has said &quot;if someone really does this, just<br>
make new interfaces per accessURL&quot;.  So, you&#39;d have lots of<br>
interfaces, which is kind of ugly.<br>
<br>
But worse, since RegTAP is about database tables, there&#39;s again no<br>
telling in which order the various accessURLs would come out; for a<br>
while, though, the order would be constant, and if &quot;naive&quot; clients<br>
always used the first interface (I&#39;d suspect that&#39;s what legacy<br>
clients do), they&#39;d *all* end up on some small mirror rather than on<br>
the big main site for a while.<br>
<br>
So, *if* we &quot;officially&quot; introduce mirror handling in VOResource, it<br>
needs to be done with a bit of deliberation.<br>
<br>
<br>
(2) Design goal<br>
<br>
It&#39;d be fairly important to me to keep &quot;simple&quot; service discovery<br>
possible.  So, I&#39;d say the design goal for mirrors in the Registry<br>
would be<br>
<br>
   &quot;Let advanced clients or other parts of the VO infrastructure<br>
   figure out the possible access URLs so it can select one close to<br>
   them.  Plain clients should just be directed to a primary site.&quot;<br>
<br>
<br>
(3) Alternatives<br>
<br>
My suspicion is that the Registry is not the ideal component if your<br>
goal is geographical load balancing or even some sort of fallback<br>
scheme.  Here&#39;s some other ways I&#39;m aware of:<br>
<br>
(a) I guess most commercial services use some sort of GeoIP, i.e., the<br>
DNS responses depend on the geographic location.  So, for instance<br>
here in Baden-Württemberg <a href="http://www.google.de" rel="noreferrer" target="_blank">www.google.de</a> (at the moment) resolves to<br>
2a00:1450:4013:c01::5e, wheres in Saxonia it is<br>
2a00:1450:4001:817::2003.  I&#39;ve never set something like that up<br>
before, but I&#39;d be surprised if it was hard.<br>
<br>
<a href="http://reg.g-vo.org" rel="noreferrer" target="_blank">reg.g-vo.org</a> uses something like this for failover (except we&#39;re, of<br>
course, switching manually and at any given time everyone sees  the<br>
same address.  But it&#39;s playing tricks with DNS nevertheless).<br>
<br>
The advantage is that mirror selection is up to whoever maintains the<br>
GeoIP mapping, so you could even do a bit of load balancing in this<br>
way (which clearly wouldn&#39;t work when mirror selection is with the<br>
clients).  Also, it&#39;s transparent to the clients, which is nice.<br>
<br>
The disadvantage is that a client couldn&#39;t easily say &quot;I want to go<br>
to the main site&quot; -- which it might, for instance, when it wants to<br>
run a huge TAP job.<br>
<br>
(b) A redirector.  I think some content delivery networks work like<br>
this.  The access URL then points to<br>
<a href="http://redirector.example.org/svcs/stars" rel="noreferrer" target="_blank">http://redirector.example.org/svcs/stars</a>, and based on an arbitrary<br>
heuristics, that one would then, respond with a 301 or 303 redirect<br>
to a mirror.  In terms of advantages and disadvantages, that&#39;s a bit<br>
like (a), except it would be easier for a client to insist on using<br>
the main site -- it just would go directly there.  If it&#39;s smart<br>
enough to figure out there is a primary site, it stands to reason<br>
that it knows its URL, too.<br>
<br>
(c) Do nothing.  Perhaps with faster networks and more fiber in the<br>
oceans, there&#39;s not much point any more in putting a large effort<br>
into mirrors and their maintenance, which always is a bit of a pain.<br>
<br>
(d) you tell me.<br>
<br>
<br>
(4) VOResource solutions<br>
<br>
Here&#39;s what I&#39;ve worked out so far how mirrors could work within the<br>
registry infrastructure.<br>
<br>
(a) accessURL attributes<br>
<br>
One could use an attribute to say what&#39;s the primary site and what&#39;s<br>
a mirror.  So, perhaps:<br>
<br>
   &lt;capability standardID=&quot;ivo://example/whatever&quot;&gt;<br>
     &lt;interface std=&quot;True&quot;&gt;<br>
       &lt;accessURL use=&quot;base&quot; priority=&quot;primary&quot;<br>
         &gt;<a href="http://example.eu/svc/stars" rel="noreferrer" target="_blank">http://example.eu/svc/stars</a>?&lt;/accessURL&gt;<br>
       &lt;accessURL use=&quot;base&quot; priority=&quot;fallback&quot;<br>
         &gt;<a href="http://example.za/svc/stars" rel="noreferrer" target="_blank">http://example.za/svc/stars</a>?&lt;/accessURL&gt;<br>
       &lt;accessURL use=&quot;base&quot; priority=&quot;mirror&quot;<br>
         &gt;<a href="http://example.cn/svc/stars" rel="noreferrer" target="_blank">http://example.cn/svc/stars</a>?&lt;/accessURL&gt;<br>
     &lt;/interface&gt;<br>
     &lt;param ...<br>
   &lt;/capability&gt;<br>
<br>
(I&#39;ve added there the possibility of giving another service to use<br>
when the primary site is unresponsive (&quot;fallback&quot;); I believe that&#39;s<br>
a bad idea, but that may be still be another use case for marking up<br>
mirrors).<br>
<br>
If that went into some searchable registry scheme as-is, legacy<br>
clients would still choose random mirrors, so that&#39;s bad.  However,<br>
standards for searchable registries could say that they, the<br>
searchable registries, are to select one accessURL per interface,<br>
based on some smart heuristics.  In that way, we could have regional<br>
registries that have access URLs selected for a particular region.<br>
<br>
I&#39;m not convinced we can pull that off, and even if we could, do we<br>
want this, given that the primary site usually is better maintained<br>
than the mirrors, and if the mirror is down you definitely want to go<br>
to the primary site?<br>
<br>
So, I&#39;d say if we do something like this, all the mirrors should be in<br>
&quot;another table&quot; (in RegTAP lingo).  That way legacy queries just keep<br>
doing the right thing (for them): lead to the primary site.  Fancy<br>
clients could check the mirrors table and work with what they  get<br>
from there.  But if we want this in a different table, perhaps it&#39;s a<br>
different thing in the first place, and we should have<br>
<br>
(b) have a separate element, perhaps like this:<br>
<br>
   &lt;capability standardID=&quot;ivo://example/whatever&quot;&gt;<br>
     &lt;interface std=&quot;True&quot;&gt;<br>
       &lt;accessURL use=&quot;base&quot;&gt;<a href="http://example.eu/svc/stars" rel="noreferrer" target="_blank">http://example.eu/svc/stars</a>?&lt;/accessURL&gt;<br>
       &lt;mirrorURL&gt;<a href="http://example.za/svc/stars" rel="noreferrer" target="_blank">http://example.za/svc/stars</a>?&lt;/mirrorURL&gt;<br>
       &lt;mirrorURL&gt;<a href="http://example.cn/svc/stars" rel="noreferrer" target="_blank">http://example.cn/svc/stars</a>?&lt;/mirrorURL&gt;<br>
     &lt;/interface&gt;<br>
     &lt;param ...<br>
   &lt;/capability&gt;<br>
<br>
I guess something like that would be my winner if we decided to go<br>
ahead with VOResource mirrors.<br>
<br>
Is there any metadata that should go ahead with mirrorURL if we went<br>
this way?  Perhaps something to help make a choice between the<br>
mirrors without having to ping them all?<br>
<br>
<br>
(5) Another issue with mirrors: Availability<br>
<br>
If we decide mirrors need to be described interoperably (i.e., make<br>
the VO mirror-aware), there&#39;s a second problem: VOSI availability,<br>
i.e., the endpoint that says whether a given service is up and if<br>
not, when one should try again.<br>
<br>
Currently, it&#39;s modelled as a separated capability, i.e., the<br>
capabilities of a service with mirrors would look like this:<br>
<br>
   &lt;capability standardID=&quot;ivo://example/whatever&quot;&gt;<br>
     &lt;interface std=&quot;True&quot;&gt;<br>
       &lt;accessURL use=&quot;base&quot;&gt;<a href="http://example.eu/svc/stars" rel="noreferrer" target="_blank">http://example.eu/svc/stars</a>?&lt;/accessURL&gt;<br>
       &lt;mirrorURL&gt;<a href="http://example.za/svc/stars" rel="noreferrer" target="_blank">http://example.za/svc/stars</a>?&lt;/mirrorURL&gt;<br>
       &lt;mirrorURL&gt;<a href="http://example.cn/svc/stars" rel="noreferrer" target="_blank">http://example.cn/svc/stars</a>?&lt;/mirrorURL&gt;<br>
     &lt;/interface&gt;<br>
     &lt;param ...<br>
   &lt;/capability&gt;<br>
<br>
   &lt;capability standardID=&quot;ivo://<a href="http://ivoa.net/std/VOSI#availability" rel="noreferrer" target="_blank">ivoa.net/std/VOSI#availability</a>&quot;&gt;<br>
     &lt;interface xsi:type=&quot;vs:ParamHTTP&quot;&gt;<br>
       &lt;accessURL use=&quot;full&quot;&gt;<a href="http://av.example.eu/av/stars" rel="noreferrer" target="_blank">http://av.example.eu/av/stars</a>&lt;/accessURL&gt;<br>
     &lt;/interface&gt;<br>
   &lt;/capability&gt;<br>
<br>
The availability schema doesn&#39;t let you specify the status of mirrors<br>
(or, for that matter, alternative interfaces) yet; including<br>
additional mirrorURLs probably isn&#39;t terribly helpful because it&#39;d be<br>
hard to match query URL and availability URL.<br>
<br>
If we were serious about mirrors, we&#39;d hence need to fix<br>
availability, too.  This would be a good moment for that because VOSI<br>
is being reviewed as we speak.   But someone would have to volunteer<br>
for actually doing it.<br>
<br>
Thanks for making it down here,<br>
<br>
          Markus<br>
</blockquote>
</div></div></blockquote></div><br></div>