session control @ nolinux day
DESCRIPTION
How to implement a session control system scalable and reliable with an open source stack.TRANSCRIPT
![Page 1: Session Control @ nolinux day](https://reader033.vdocuments.mx/reader033/viewer/2022052821/554a274cb4c9051b578b4a1a/html5/thumbnails/1.jpg)
SimultaneousAccess Control
with a full open source stack
Walter Traspadini @uollter
![Page 2: Session Control @ nolinux day](https://reader033.vdocuments.mx/reader033/viewer/2022052821/554a274cb4c9051b578b4a1a/html5/thumbnails/2.jpg)
non conventional architecture (?)
why redis ?
why flask ?
![Page 3: Session Control @ nolinux day](https://reader033.vdocuments.mx/reader033/viewer/2022052821/554a274cb4c9051b578b4a1a/html5/thumbnails/3.jpg)
Redis.io
Salvatore Sanfilippo@antirez
Sponsored by
Open Source
key-value store
no-sql ?((made in italy)
![Page 4: Session Control @ nolinux day](https://reader033.vdocuments.mx/reader033/viewer/2022052821/554a274cb4c9051b578b4a1a/html5/thumbnails/4.jpg)
Who is using Redis
![Page 5: Session Control @ nolinux day](https://reader033.vdocuments.mx/reader033/viewer/2022052821/554a274cb4c9051b578b4a1a/html5/thumbnails/5.jpg)
Redis.io
keys can expire
master-slave
in memory dataset persistence
Data Structure
- String
- Integer (mainly for counting)
- List
- Set
- Ordered set
- Hash stored list
![Page 6: Session Control @ nolinux day](https://reader033.vdocuments.mx/reader033/viewer/2022052821/554a274cb4c9051b578b4a1a/html5/thumbnails/6.jpg)
Don't do this !!
rs = redis.Redis()
rs.keys('*')- time complexity O(n)- 10^6 keys database in 40 msec.
- IT MAY RUIN PERFORMANCES
![Page 7: Session Control @ nolinux day](https://reader033.vdocuments.mx/reader033/viewer/2022052821/554a274cb4c9051b578b4a1a/html5/thumbnails/7.jpg)
Best practicesSADD SERVICES [QOL, S24, PROF]
HSET SERVICE:QOL expire 60HSET SERVICE:QOL max_count 1HSET SERVICE:QOL:bob max_count 3
ZADD ACTIVITY:QOL:bob:20121010 '14:50 Login' 1450ZADD ACTIVITY:QOL:bob:20121010 '15:15 Logout' 1515
ZRANGE ACTIVITY:QOL:bob:20121010 1200, 1600 O(log(N) + M) (N: # of elements in the sorted set. M: # of element returned)
list
objects
scores
![Page 8: Session Control @ nolinux day](https://reader033.vdocuments.mx/reader033/viewer/2022052821/554a274cb4c9051b578b4a1a/html5/thumbnails/8.jpg)
Flask
> micro-framework for python
> builtin server
> RESTful request dispatching
> WSGI compliant
> integrated support for unit testing
![Page 9: Session Control @ nolinux day](https://reader033.vdocuments.mx/reader033/viewer/2022052821/554a274cb4c9051b578b4a1a/html5/thumbnails/9.jpg)
...... easy .....
code [email protected]('/logout/<username>/<service>/<label>' , methods=['GET'])@jsonp.jsonpdef logout(username, service, label, device_type=None): user.sessions = g.r_server.get('USER:%s:%s:%s' %(username, service, label))) if user.sessions and int(user.sessions) > 0: g.r_server.delete(user.key()) return jsonify({'user': user.to_json(), 'error': messages.OK_NO_ERROR}) return jsonify({'error': messages.NOT_LOGGEDIN_ERROR, 'user': user.to_json()})
![Page 10: Session Control @ nolinux day](https://reader033.vdocuments.mx/reader033/viewer/2022052821/554a274cb4c9051b578b4a1a/html5/thumbnails/10.jpg)
..... siac .... api .....
/chack_access/EntroBol04/QOL/<fingerprint>
MMMD5 ( browser capabilities + browser plugins )
cf4ceeb4398b80132eeceadea0a2f9ee
/logout/EntroBol04/QOL/<fingerprint>
![Page 11: Session Control @ nolinux day](https://reader033.vdocuments.mx/reader033/viewer/2022052821/554a274cb4c9051b578b4a1a/html5/thumbnails/11.jpg)
headache
> does redis scale ?
> which is the failover policy ?
> what about clustering ?
![Page 12: Session Control @ nolinux day](https://reader033.vdocuments.mx/reader033/viewer/2022052821/554a274cb4c9051b578b4a1a/html5/thumbnails/12.jpg)
my early prototype .......
SIAC
REDISMASTER
REDISSLAVE
![Page 13: Session Control @ nolinux day](https://reader033.vdocuments.mx/reader033/viewer/2022052821/554a274cb4c9051b578b4a1a/html5/thumbnails/13.jpg)
spreecast http://www.spreecast.com/
![Page 14: Session Control @ nolinux day](https://reader033.vdocuments.mx/reader033/viewer/2022052821/554a274cb4c9051b578b4a1a/html5/thumbnails/14.jpg)
Apache ZooKeeper
Centralized service for maintaining:configuration information, naming, distributed synchronization
![Page 15: Session Control @ nolinux day](https://reader033.vdocuments.mx/reader033/viewer/2022052821/554a274cb4c9051b578b4a1a/html5/thumbnails/15.jpg)
.. the final solution .. <3 production
Redis
Redis Redis
SIAC SIAC
ZooKeeperCluster Monitor
Monitor
Redis Redis
![Page 16: Session Control @ nolinux day](https://reader033.vdocuments.mx/reader033/viewer/2022052821/554a274cb4c9051b578b4a1a/html5/thumbnails/16.jpg)
redis_failover ... for python ...
https://github.com/uolter/redis_failover
![Page 17: Session Control @ nolinux day](https://reader033.vdocuments.mx/reader033/viewer/2022052821/554a274cb4c9051b578b4a1a/html5/thumbnails/17.jpg)
....share the code Luke ....
![Page 18: Session Control @ nolinux day](https://reader033.vdocuments.mx/reader033/viewer/2022052821/554a274cb4c9051b578b4a1a/html5/thumbnails/18.jpg)
continuous integration as a service
![Page 19: Session Control @ nolinux day](https://reader033.vdocuments.mx/reader033/viewer/2022052821/554a274cb4c9051b578b4a1a/html5/thumbnails/19.jpg)
want to learn more ....
> Redis: http://redis.io> Video redis: http://vimeo.com/21539227> Flask: http://flask.pocoo.org> Spreecast & Redis Failover: http://engineering.speecast.com/spreecast-redis-failover> ZooKeeper: http://zookeeper.apache.org
![Page 20: Session Control @ nolinux day](https://reader033.vdocuments.mx/reader033/viewer/2022052821/554a274cb4c9051b578b4a1a/html5/thumbnails/20.jpg)
Walter Traspadini http://bit.ly/uolter @uollter