may i suggest just add a new hook before OS conection (post cache miss and 
previous to pick address 
(http://trafficserver.apache.org/docs/v2/sdk/HTTPHooksAndTransactions.html) 

if there's no health servers just send to the first (so it will fail)or just 
send back a error.

in another part of the plugin i just add a schedule to test the servers health.
and every "pick address" just need to follow a algorithm between the server 
pool. (and the cache is just going to get the content of the url he need w/o 
noticing the origin of the content)


in this way if i get a hook like this


 if (INKHttpHookAdd(TS_HTTP_PICK_ADDR, INKContCreate(pic_addr, NULL)) == 
INK_ERROR) {
    
  }


static int pic_addr(INKCont contp, INKEvent event,void *edata);



edata might contain the header data so i can just add a regex check to validate 
the hostname and select a server from the pool in the algorithm order.   


--Victor Lucero

El 09-12-2010, a las 4:06, ming....@gmail.com escribió:

> we are thinking of L7 service health checking in connection manager to
> OS, still investing.
> 
> if you want do full balance, that is hard, I think we have many
> checkpoints:
> 1, HostDB strict RR, proxy.config.hostdb.strict_round_robin, that may
> make all HostDB response strict RR.
> 2, need a strict RR connection manager to OS, I think that will need
> some work. and may or may not be a design problem, as we are not
> guarantee to connnect all OS hosts for now. and the full balance may or
> may not make sense, it will depends on how many TS hosts, how many OS
> hosts, and how many ts2os connection/request.
> 
> I'd like to have it in a full proxy env.
> 
> btw: TS-316 maybe relate to your requirement too.
> https://issues.apache.org/jira/browse/TS-316
> 
> 
> 在 2010-12-09四的 01:18 -0300,Victor Lucero写道:
>> El 09-12-2010, a las 0:56, Leif Hedstrom escribió:
>> 
>>> On 12/08/2010 08:45 PM, Leif Hedstrom wrote:
>>>> On 12/08/2010 08:36 PM, Victor Lucero wrote:
>>>>> Hi.
>>>>> Im writing a plugin to implement Load balancing. im facing some problem 
>>>>> doing it with a remap plugin because its looks like when i alter new_host 
>>>>> its also alter the "host" header in the http petition (and i dont want 
>>>>> that)
>>>>> I need a way to alter the conection to Original Server and change the 
>>>>> ip(so i can select between the servers in the pool). but there is no hook 
>>>>> in this step.
>>>> 
>>>> 
>>>> You have two options:
>>> 
>>> 
>>> Well, there's a third option, I meant to say there are "two options" if you 
>>> want to do this as a remap plugin (which makes a fair amount of sense, 
>>> since you might want to easily configure this plugin per remap rule).
>>> 
>>> The third option is to use "trunk", which has a few changes to the hooks 
>>> and APIs. In particular, there are two useful hooks (one is merely renamed, 
>>> but still):
>>> 
>>>   TS_HTTP_PRE_REMAP_HOOK
>>>   TS_HTTP_POST_REMAP_HOOK
>>> 
>>> 
>> 
>> the problem in the remap plugin is that not every request end in OS and the 
>> balance will not get homogeneus.  
>> 
>> 
>>> In addition, there's a new, very useful API (when running as a reverse 
>>> proxy only):
>>> 
>>>   tsapi TSReturnCode TSSkipRemappingSet(TSHttpTxn txnp, int flag);
>>> 
>>> 
>>> All three of my "suggestions" probably suffers from the fact that changing 
>>> the destination "url" also affects the cache key (if the content is 
>>> cacheable). In most cases, that would be undesirable, so you should also 
>>> look into using this API to control the cache key:
>>> 
>>>   tsapi TSReturnCode TSCacheUrlSet(TSHttpTxn txnp, const char *url, int 
>>> length);
>>> 
>>> 
>>> As a side note, for real load balancing, we need a way to intercept all DNS 
>>> / hostDB lookups in a plugin. So, you'd do something like
>>> 
>>>   map http://www.example.com/  http://real.example.com/
>>> 
>>> 
>>> and when real.example.com is looked up in our hostDB / DNS (on every 
>>> request), you would intercept it with a plugin (new hook required, there's 
>>> no way to do this now afaik) that allows you to return an IP based on your 
>>> own code. It's unclear to me right now how such a hook would interact with 
>>> hostDB, and the existing code we have for marking IPs as down etc. (i.e. 
>>> it's important for the core to communicate connect failures to a plugin in 
>>> a new hook like this). It's something we should noodle about (I'll file a 
>>> bug later), it'd be great to get core changes in before v3.0.
>>> 
>>> Cheers,
>>> 
>> 
>> editing the response of the dns will do a better trick , also adding some 
>> health test code (in the plugin. nothing really complicated) and adding a 
>> hook near the connection to the OS for stats (also needed if i want to 
>> implement least weight algorithm.)
>> 
>> thanks.
>> 
>>> -- leif
>>> 
>> 
>> -Victor Lucero.
> 
> 

Reply via email to