[RADIATOR] A few tips on performance and high availabilty

Anders Bandholm Anders.Bandholm at uni-c.dk
Mon Dec 3 10:17:50 CST 2012


Hi list!

We have been running Radiator for several purposes for around 5 years,
and I would like to share a few tricks that we have learned...


Memcached
---------

Memcached is distributed cache, with a simple Perl-api. We run an instance
of memcached on each Radius-server. We use it for several things:

  * We use it in a PostAuthHook for rejecting users with too many login
    failures (to prevent brute-force password guessing)

  * We cache certain SOAP-calls. Since Radiator is single-threaded, fast
    answers from backends is imperative as you probably know. We use
    memcached in a "defensive" way: We always make the SOAP-call first,
    but with a low timeout (0.1 sec) If the call times out, we use the
    cache - if not we save the result to the cache.

  * we have started a service for our customers (Danish schools) where
    they get alerts by email when user up- or download exceeds certain
    thresholds. This is handled by summing up bytes from accounting
    records in a PostProcessingHook. The counters for each user is kept
    in memcached.

It seems to me that memcached is a perfect companion for Radiator!

Memcached is of course not a database, and if you shut down one of
the memcached instances you will lose part of your cache. But for the
purposes above it works very well.

The Perl module is Cache::Memcached.

If you run Linux memcached is probably packaged for you - on Debian/Ubuntu
you need packages like these:

    memcached
    libcache-memcached-perl
    libmemcached-tools


Two other tricks
----------------

 1) We have started using Gearman to make it possible for the main radii
    to offload certain slow things to other servers. As explained above
    our radii keep track of user up/downloads through acct-records, and
    when a certain limit is reached we send email alerts to the relevant
    admin. But we don't want Radiator itself to send the email - we submit
    a job through Gearman (Perl: Gearman::Client and Gearman::Worker)
    This is a very promising technology and I expect we will use it more
    in the future.

 2) Simple trick - probably used by many of you: We have the client list
    in an Oracle database, but since the database is sometimes down
    for maintenance, we generate static file-based client-lists every
    10 minutes instead, and reload Radiator when they change. If Oracle
    is down, Radiator does not suffer. (The 10 minutes interval is
    overkill for most installations ;-)


Cheers,
Anders
-- 
Anders Bandholm, UNI-C, Aarhus
  Anders.Bandholm at uni-c.dk       (+45) 8937-6645       Fax: (+45) 8937-6677
  PGP: id=0x0DD38396; fp=9FDE 3B13 6CA3 BD03 7BF1  7062 E694 D295 0DD3 8396


More information about the radiator mailing list