Upgrade to Pro — share decks privately, control downloads, hide ads and more …

talk about ActiveCache

Ching Yi Chan
September 23, 2013

talk about ActiveCache

make a cache layer more active and self-managed

Ching Yi Chan

September 23, 2013
Tweet

More Decks by Ching Yi Chan

Other Decks in Technology

Transcript

  1. Cache For Web Application http request Web Handler Layer Business

    Logic Layer call some business logic very very busy business
  2. Cache For Web Application http request Web Handler Layer Business

    Logic Layer call some business logic http response compose the final output very very busy business
  3. Cache For Web Application http request Web Handler Layer Business

    Logic Layer call some business logic http response compose the final output very very busy business HOW LONG DOES THE CLIENT WAIT ?
  4. Cache For Web Application http request Web Handler Layer Business

    Logic Layer http response Cache Layer using cache to reduce the response time
  5. Cache For Web Application http request Web Handler Layer Business

    Logic Layer http response Cache Layer HIT CACHE
  6. Cache For Web Application http request Web Handler Layer Business

    Logic Layer http response Cache Layer MISS CACHE RUN IN THE BUSY WAY
  7. Cache Layer Cache is passive and only update by caller

    if foo in cache: return cache[foo] data = business(xyz) cache[foo] = data return data
  8. Cache Layer Data in the cache is expired eventually. if

    foo in cache: return cache[foo] else: # users should wait the data available do_something_with_expired..
  9. ACTIVE Cache Layer Data in the cache is updated eventually.

    if foo in active_cache: return active_cache[foo] data = active_cache({business, xyz}) return data
  10. The difference Passive Cache put the data into cache update

    the data by caller Active Cache put the update-method into cache update the data by itself
  11. ACTIVE Cache Layer POC in Java Web Using AspectJ add

    the advice to Business Logic foo(a, b, c, ...) Business Logic Layer waving the aop-advice learning how to invoke the business logic by keep the information about {instance, method signature and arguments} HIT CACHE forever refresh cache data automatically
  12. Active Cache Problem How does the key to define ?

    key(args of method) or ... How to design the cache updater and scheduler ? How to migrate the broken deserialiazation from the class definition change ?
  13. Cache Key Building methodA(userInfo, str, int, otherPojo) what does a

    user see ? it depends on userInfo how does data filter or sort ? key = signauure_ + args[0] + args[1] + args[...] => signature_UserInfo@a3a4a3a5_3_{a:3,b:3_} wtf, the key is so bad and never hit cache
  14. Cache Key Building => signature_UserInfo@a3a4a3a5_3_{a:3,b:3_} sometimes toString() is a not

    good enough treat userInfo as userInfo.getGroupId() or convert to the better key format => signature_1234567890_3_{a:3,b:3_}
  15. Cache Key Building => signature_OtherClass@a3a4a3a5_3_{a:3,b:3_} sometimes OtherClass no available getters

    the useful information is assigned by its constructor using AOP & mix-in ActiveCacheToString interface to provide alternative toString()
  16. Should I update it request from Http Client should not

    update request from Scheduler should update How to check the issue coming from ? check the stacktrace having javax.servlet.http.HttpServlet.service is request from Http Client.
  17. Handle the class definition change class definition changes will break

    everything when deserialization should change the cache storage pool, too DevOps should support to check the change happening