Posts in category ‘Cache’.
Caching System: Internals
One of the latest implemented features of CppCMS is a caching system.
Each cached entry is stored using:
- Unique key that defines the entry
- An actual data
- Entry lifetime period.
- The set of triggers — this is a feature that is not available in many cache system like memcached.
For example: main page that displays 5 recent posts may have a key main_page and triggers: post_123, post_124, … , post_128. More then that, each time, during page build, when you fetch some cached data, like a sidebar or set of options, their sets of triggers are automatically added to the set of triggers of the page you build.
For example, when the page is created and sidebar block is fetched from cache all its triggers are automatically added: if sidebar depends of options, then trigger sidebar and options will be automatically added to triggers of main_page.
Thus, when certain trigger is risen, all pages that depends on it are automatically trashed. This makes a cache system quite powerful and easy to control correct data representation.
The developer is expected to create a rational model of data/triggers that represent the relations between parts of internal data and rise these triggers when committing changes to database.
more...API Changes and mod-prefork
There have been lot of work in recent weeks in order to make deep internal changes in the framework. Now they include:
- Transparent support of 3 web server APIs: fastcgi, cgi and scgi.
- Support of new mod prefork that allows safer management of worker processes.
- Implementation of a cache that is shared between forked processes.
CppCMS vs WordPress
Setup
I had compared two blog systems: this one and WordPress 2.5 with a patched WP-Cache-2 addon. I used following configuration:
- Web Server lighttpd 1.4.13
- Interface FastCGI
- PHP 5.2
- Bytecode cacher: XCache 1.2.1
- Database MySQL 5.0
- Caching for WP: WP-Cache-2 with an additional performance patch
- Hardware: AMD Athlon XP 64bit, 1G RAM
- OS: Linux, Debian Etch 64bit.
I prepared two blogs that were filled up with 1000 articles each. Each article had 10 comments, all the articles were organized in 10 categories in each blog.
more...Patch For WP-Cache-2 plugin
I'm going to run a heavy benchmarks comparing WordPress – the blog system I know very well, with CppCMS based blog – the system I had written.
The new caching system that was developed for CppCMS is quite smart, it stores the entry pages twice: original and gzip compressed. On heavy loads, this allows serving pages significantly faster because only thing that should be done is to push html or compressed html page directly from the cache. Otherwise, gzip compression (even fastest) would take lots of resources and reduces a preformace of the system.
When it comes to benchmarks, I had discovered that WP-Cache-2 plugin does the job well, but it caches only html version of the file, thus, even if the page is cached it still must pass a compression by Apache’s mod_deflate or by PHP engine itself.
I had patched this plugin and now it stores two versions of same page: an original and compressed. and was able to get 60% performace improvement.
- WordPress native plugin: 450 requests per second
- WordPress patched plugin: 720 requests per second
So after this patch I can feel that the benchmarks would be proper, because without it this would be incorrect to compare time required for fetching a cache with the time required for compressing entry page.
Links:
N.B.: The full benchmarks coming soon
The Roadmap to The First Beta Version of CppCMS
After quite a long period of development I had decided to get prepared to first public beta release of CppCMS.
The major components of this blog and the framework I want to introduce in first beta are following:
- Implementation of Django style templates inheritance, filters (done 70%)
- Introduce powerful cache system (done 100%)
- Replace SOCI by LibDBI (done 100%)
- Improve blog: true markdown, LaTeX equations, categories etc. (done 100%)
- Write Documentation (done 20%)
- Migrate my Hebrew blog from Word Press to CppCMS (done 100%)
There are lots of work to do, but CppCMS now looks much mature then before.
more...