[Server-devel] Apache proxy CRCsync
Alex Wulms
alex.wulms at scarlet.be
Mon Mar 23 17:05:57 EDT 2009
Hi Toby,
I did not have much time last week to work on the project but want to continue
again this week. I have been thinking about the integration between the
standard cache module of apache and the crccache_client cache-handler module.
At this moment, the cache module unfortunately does not invoke crccache_client
for most dynamic pages; the web/application servers indicate that those pages
are not cacheable, either by setting an expiry time in the past or by setting
appropriate cache-control headers or a combination of the two. And the cache
module respects that, as a good http-citizen. But the whole idea of crccache
is that those pages should be stored by crccache_client anyway but get
refetched and then delta'd by the crccache_client/crccache_server chain on
the next request.
So one way or another crccache_client/crccache_server should trick the cache
module into caching those dynamic pages.
I see two potential ways to make this happen:
Option 1)
crccache_client (or crccache_server?) modifies the cache related response
headers before returning the response back to the cache module. It would
modify the headers in such a way that the cache module would decide that the
page must be cached but revalidated at the next request. This would require
no modifications to the cache module but I do consider it a not-so-clean
hack, because we would have to reverse engineer the cache module to
understand when to modify the headers and when not to modify the headers.
Which is obviously fragile because future enhancements to the cache module
could potentially break such logic.
Option 2)
We introduce some new header(s) that crccache can inject in the response to
indicate to the cache module that the pages will be cached by a delta/crcsync
aware cache handler. And then we adapt the cache module itself to understand
this new header and to cache normally-not-cachable pages if this header is
present (and send them for revalidation to the crccache handler upon next
request). I see this as a cleaner solution. Though, before immediately
starting to implement this solution, I believe that it should be analysed
into a little bit more detail. Especially with respect to the future, when
crccache will talk to some servers that are crcsync aware and can directly
handle the encoding themselves while crccache will at the same time also
still talk to many current-gen servers that do not know this http extension.
What are your thoughts on this subject?
Thanks and kind regards,
Alex
Op maandag 16 maart 2009, schreef Toby Collett:
> Great to hear you got it running, unfortunately I only have about a two
> week head start on you with regard to the apache front, so I am sure lots
> of things will get neater as we go along.
>
> 2009/3/16 Alex Wulms <alex.wulms at scarlet.be>
>
> > Hi Toby,
> >
> > I managed to get it working on my PC under suse 11.1 with apache 2.2.10.
> >
> > When I configured a dedicated debug log per virtual server, I noticed
> > that the
> > crccache_client and crccache_server modules were both invoked in both
> > virtual
> > servers. Judging from the error log you sent me, that is also the case on
> > your server.
> >
> > I have made following changes to fix the situation:
> >
> > 1) Move the 'CacheEnable crccache_client' directive (for the 'default'
> > virtual
> > server) inside the <VirtualHost> tag. Apparently it is applied globally
> > as long as it is outside the <VirtualHost> tag, regardless of the config
> > file in
> > which it appears.
>
> Seems like a sensible change.
>
> > 2) Introduce a new directive 'CRCCacheServer on'.
> > This directive is checked by mod_crccache_server in the
> > crccache_server_header_parser_handler.
> > It is specified in the <VirtualHost> tag of the upstream_proxy of the
> > virtual
> > server.
> > Apparently modules get loaded globally and functions like
> > the ..._header_parser_handler get invoked for each virtual server, so
> > they must check themselves if they should be enabled or disabled in a
> > given virtual server. I found this through google, which pointed me to a
> > forum where somebody else had faced a similar problem.
>
> Makes sense
>
> > I also realize why I only found cached files
> > under /var/cache/apache2/mod_crccache_server and not under ..._client.
> > It is because the crccache_client.conf and crccache_server.conf file both
> > use
> > the parameter CacheRoot to store the cache directory. These parameters
> > are apparently also global. The fact that they are in two different
> > config files
> > does not automagically store them in a module specific namespace. So I
> > have renamed the parameters to differentiate between the client and the
> > server module.
>
> Actually only the client end should need the CacheRoot at all, the server
> side doesnt need caching at all. You could configure a standard apache
> cache if you wanted, but it probably wont gain much.
>
> > I have also noticed that, although the server module reads these
> > parameters,
> > they actually don't get used by the current code. Are they there due to
> > copy&paste reasons or are they already there for future enhancements, in
> > order to cache stuff temporary on the server side?
>
> Just copy and paste I guess, I think I left them there so I can something
> to base other parameters on if we need them server side.
>
> > I have pushed my changes to the repository. Please review them. I'm still
> > new
> > to Apache development so I might have misinterpreted some things.
> >
> > Thanks and kind regards,
> > Alex
More information about the Server-devel
mailing list