Portál AbcLinuxu, 5. května 2025 09:22
Používáme cyrus pop3/imap server proti databázi uživatelů a skupin uložených v LDAPu. Na největších instalacích (hostingové servery) čelíme výzvě zvýšovat výkon.
Problém je v tom, že NSCD (name service caching daemon), který slouží na caching passwd
, group
a host
lookupů necachuje volání getgrent(3)
.
Existuje patch, který to řeší pomocí souboru, který slouží jako cache, ale je takhle fuj.
Čili je potřeba to řešit nějak lépe. Jedna varianta, která se nám zamlouvá je použit memcached, třeba i proto, že když už by na serveru běžel, šlo by na něm cachovat i další záležitosti, a proto, že existují klientské knihovny pro řadu jazyků včetne C a Ruby.
Tento přistup má jeden problém: memcached jede nad TCP socketem a naprosto bez autentizace, čili je potřeba memcached nějak upravit, aby bylo možné řídit přístup do cache. Třeba tak, že by poslouchal na Unix socketu a tím bylo možné řídit přístup ke cache pomocí unix práv nebo ACL přímo na socketu.
První výsledky mé snahy -- zatím ošklivý, ale FUNKČNÍ patch pro memcached.c a na klientskou knihovnu v Ruby je k dispozici.
Použije se to takhle:
$ ../memcached-1.1.12.patched/memcached -s /tmp/test.sock -vv & [2] 23294 pie:martin:~/memcache/Ruby-MemCache-0.0.4.patched $ <3 server listening $ ruby -Ilib ex.rb File:/tmp/test.sock <7 new client connection <7 set foo:my_key 4 0 12 >7 STORED <7 set foo:other_key 4 0 15 >7 STORED <7 set foo:object_key 5 0 43 >7 STORED <7 get foo:14851 >7 END <7 set foo:14851 12 0 1 >7 STORED <7 get foo:my_key >7 sending key foo:my_key >7 END <7 get foo:object_key >7 sending key foo:object_key >7 END <7 connection closed. 4pie:martin:~/memcache/Ruby-MemCache-0.0.4.patched
Teď je potřeba:
1) patchnout klientskou knihovnu pro C - asi tuhle,
2) patchnout cyrus....
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.