SlideShare a Scribd company logo
1 of 40
Download to read offline
March 2018
Spring Session Redis
Oded Shopen
Why, How and Production Considerations

Information Security Level 2 – Sensitive
© 2017 – Proprietary & Confidential Information of Amdocs2
About Me
▪Oded Shopen
▪Software Architect @ Amdocs Israel
▪Working on Event-Driven, Cloud Native Microservices
▪🤓 Redis Geek
▪http://odedia.org
▪@odedia on twitter

Information Security Level 2 – Sensitive
© 2017 – Proprietary & Confidential Information of Amdocs3
Why?

Information Security Level 2 – Sensitive
© 2017 – Proprietary & Confidential Information of Amdocs4
Why Spring Session?
▪Once upon a time, there was the servlet container. And it was good…
Tomcat 🍪 123-456 = David

Information Security Level 2 – Sensitive
© 2017 – Proprietary & Confidential Information of Amdocs5
Why Spring Session?
Tomcat
🍪 123-456 = David
Tomcat Tomcat
Load Balancer
🍪 789-111 = Larry

Information Security Level 2 – Sensitive
© 2017 – Proprietary & Confidential Information of Amdocs6
Why Spring Session?
🍪 123-456 = ?
Tomcat Tomcat
Load Balancer
🍪 789-111 = Larry

Information Security Level 2 – Sensitive
© 2017 – Proprietary & Confidential Information of Amdocs7
Why Spring Session?
😞

Information Security Level 2 – Sensitive
© 2017 – Proprietary & Confidential Information of Amdocs8
Why Spring Session?
Tomcat Tomcat
Load Balancer
Tomcat Tomcat
Tomcat Tomcat
Tomcat Tomcat
Tomcat Tomcat
Tomcat Tomcat
Tomcat
Tomcat
Tomcat
Tomcat
Tomcat
Tomcat

Information Security Level 2 – Sensitive
© 2017 – Proprietary & Confidential Information of Amdocs9
Why Spring Session?
Jetty Tomcat
Load Balancer
Jetty Tomcat
Tomcat Tomcat
Tomcat Tomcat
Tomcat Tomcat
Jetty Tomcat
Tomcat
Tomcat
Tomcat
Tomcat
Tomcat
Tomcat

Information Security Level 2 – Sensitive
© 2017 – Proprietary & Confidential Information of Amdocs10
Why Spring Session?
Tomcat
Session Data

Information Security Level 2 – Sensitive
© 2017 – Proprietary & Confidential Information of Amdocs11
Why Spring Session?
Tomcat
Tomcat
Tomcat
Tomcat
Tomcat
Tomcat
Jetty
Session Data

Information Security Level 2 – Sensitive
© 2017 – Proprietary & Confidential Information of Amdocs12
Why Spring Session?
▪Replaces the built-in HttpSession with another implementation
▪Transparent drop-in replacement when using Spring Boot
▪Makes your servers truly stateless
▪Sessions survive application restarts
▪No need for Load Balancer sticky sessions
▪Conforms to the cloud-native apps 12-factor principals

Information Security Level 2 – Sensitive
© 2017 – Proprietary & Confidential Information of Amdocs13
Twelve-factor processes are stateless
and share-nothing. 
Any data that needs to persist must be
stored in a stateful backing service,
typically a database.

Information Security Level 2 – Sensitive
© 2017 – Proprietary & Confidential Information of Amdocs14
Why Spring Session Redis?
https://docs.spring.io/spring-session/docs/1.3.1.RELEASE/reference/html5/

Information Security Level 2 – Sensitive
© 2017 – Proprietary & Confidential Information of Amdocs15
Why Spring Session Redis?
▪The application requires frequent, fast access to the session
▪A fast database is critical
▪Redis is really fast
▪No user experience degradation by externalizing the session to Redis
▪Sessions needs to expire after some time
▪Redis expiring keys are a great solution
▪With sharding and clustering, Redis scales when your user base scales

Information Security Level 2 – Sensitive
© 2017 – Proprietary & Confidential Information of Amdocs16
How?

Information Security Level 2 – Sensitive
© 2017 – Proprietary & Confidential Information of Amdocs17
Demo
https://github.com/odedia/spring-session-redis-sample

Information Security Level 2 – Sensitive
© 2017 – Proprietary & Confidential Information of Amdocs18
Production
Considerations

Information Security Level 2 – Sensitive
© 2017 – Proprietary & Confidential Information of Amdocs19
#1 Be Prepared to Scale
▪At the very minimum, use a master/slave setup

Information Security Level 2 – Sensitive
© 2017 – Proprietary & Confidential Information of Amdocs20
#1 Be Prepared to Scale
▪Consider sharding your sessions in a Redis Cluster
▪RedisLabs + DNS Proxy will hide the cluster topology and let you focus on
a simple configuration on the client side
▪No need to configure sentinels
Node 1
Node 2
Node 3
Proxyspring.redis.url=proxy:6379
spring.redis.sentinel.master=MasterNode
spring.redis.sentinel.nodes=Node1:6379,Node2:6379,Node3:6379

Information Security Level 2 – Sensitive
© 2017 – Proprietary & Confidential Information of Amdocs21
#2 Pool Settings
▪ Spring Data Redis uses a JedisConnectionFactory with the following defaults:
spring.redis.pool.max-active=8
spring.redis.pool.max-idle=8
spring.redis.pool.max-wait=-1
spring.redis.pool.min-idle=0
spring.redis.timeout=0
▪ Behind the scenes - an Apache Commons GenericObjectPool.
▪ Use max-active based on your tomcat/jetty threads.
▪ Use max-wait based on your setup
▪ Too high - all tomcat threads can get stuck, waiting
▪ Too low - your consumers may get errors
▪ Use min-idle of at least 8 to offset “sudden load” issues (such as mass login on a business day).
▪ Set spring.redis.timeout to a reasonably low number (such as 1000ms)
▪ Too high - your connection pool can become full quickly.
▪ Too low - your consumers may get errors

Information Security Level 2 – Sensitive
© 2017 – Proprietary & Confidential Information of Amdocs22
#3 Server-Side Metrics
▪Spring Boot Actuator provides a production-ready monitoring metrics.
▪Simply add spring-boot-starter-actuator to your gradle/maven dependencies
▪/metrics endpoint provides valuable monitoring data
▪However, Spring Data Redis is not available…
▪Luckily, actuator is extensible!
▪https://github.com/nysd/spring-boot-redis-metrics

Information Security Level 2 – Sensitive
© 2017 – Proprietary & Confidential Information of Amdocs23
#4 Monitor Redis
▪Redislabs monitoring dashboards provide
excellent visibility to identify issues, as we’ll soon
see.
▪If you use open source and monitor yourself 

on-prem, keep in mind that Redis is a single-
threaded database.
▪A 2-core virtual machine would report 50%
CPU utilization
▪However, redis itself might be at 100% at that
time
▪Monitor the process, not the VM

Information Security Level 2 – Sensitive
© 2017 – Proprietary & Confidential Information of Amdocs24
#5 Please Monitor Responsibly
▪Be careful how you monitor…
▪KEYS * runs over all the keys in the DB. Your DB is unresponsive until operation is over!
▪SMEMBERS returns all keys in a given set. Some sets may contain all keys in the system.
▪In our use case, we kept track of all logins from a certain vendor, which is pretty
much O(n) cardinality, so same as KEYS command
▪SCARD simply returns the size of a given set with cardinality of O(1), so it can be used
safely in production
▪ SCARD “spring:session:index:org.springframework.session.FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME:UI_USERS"
▪INFO provides valuable information (such as instantaneous_ops_per_sec) and can be
safely used in production.

Information Security Level 2 – Sensitive
© 2017 – Proprietary & Confidential Information of Amdocs25

Information Security Level 2 – Sensitive
© 2017 – Proprietary & Confidential Information of Amdocs26

Information Security Level 2 – Sensitive
© 2017 – Proprietary & Confidential Information of Amdocs27
#6 Inside Spring Session Redis
▪What happens when your system is completely idle (0 users)?
▪You would expect redis to be idle as well
▪However…

Information Security Level 2 – Sensitive
© 2017 – Proprietary & Confidential Information of Amdocs28
#6 Inside Spring Session Redis
▪Multiple logins using:
▪for ((i=1;i<=10000000;i++)); 

do curl -s -u gateway:password localhost:8080/user >/dev/null;
done
▪One would expect consistent load on 

redis, but in reality, we got:

Information Security Level 2 – Sensitive
© 2017 – Proprietary & Confidential Information of Amdocs29
#6 Inside Spring Session Redis

Information Security Level 2 – Sensitive
© 2017 – Proprietary & Confidential Information of Amdocs30
#6 Inside Spring Session Redis
▪Time to dig into the code… (thanks, open source!)
▪Inside RedisOperationsSessionRepository:

@Scheduled(cron = "${spring.session.cleanup.cron.expression:0 * * * * *}")
public void cleanupExpiredSessions() {
this.expirationPolicy.cleanExpiredSessions();
}
▪cleanupExpiredSessions() would loop over expired keys, delete them, and “touch”
them to make sure they are immediately deleted.
▪This means that by default, every minute on the minute, Spring will call delete on every
expired key in Redis.

Information Security Level 2 – Sensitive
© 2017 – Proprietary & Confidential Information of Amdocs31
#6 Inside Spring Session Redis
▪Why? Redis can self-expire keys just fine, thank you very much
▪The main reason:
▪Spring wants to conduct cleanup activities when a session is expired.
▪The API exposes SessionDeletedEvent and SessionExpiredEvent to let the
program cleanup a user’s session (close web sockets, notify SSO server etc.)
▪Spring needs the session details available when the cleanup activity is
performed

Information Security Level 2 – Sensitive
© 2017 – Proprietary & Confidential Information of Amdocs32
#6 Inside Spring Session Redis
▪To solve this issue, two separate keys are managed for each session
▪An “expiration notification” key expires after 30 minutes
▪The actual session details key expires 5 minutes later
HMSET spring:session:sessions:33fdd1b6-b496-4b33-9f7d-df96679d32fe creationTime
1404360000000 
maxInactiveInterval 1800 
lastAccessedTime 1404360000000 
sessionAttr:attrName someAttrValue 
sessionAttr2:attrName someAttrValue2
EXPIRE spring:session:sessions:33fdd1b6-b496-4b33-9f7d-df96679d32fe 2100
APPEND spring:session:sessions:expires:33fdd1b6-b496-4b33-9f7d-df96679d32fe ""
EXPIRE spring:session:sessions:expires:33fdd1b6-b496-4b33-9f7d-df96679d32fe 1800
SADD spring:session:expirations:1439245080000 expires:33fdd1b6-b496-4b33-9f7d-
df96679d32fe
EXPIRE spring:session:expirations1439245080000 2100

Information Security Level 2 – Sensitive
© 2017 – Proprietary & Confidential Information of Amdocs33
#6 Inside Spring Session Redis
▪Redis guarantees expired keys would be passively cleaned, but makes no
guarantees on when
▪Spring Session Redis wants to make sure the “expire” key is expired within the 5
minutes window.
▪For this reason, the cronjob updates the expired keys every minute
▪But, there is a risk here…

Information Security Level 2 – Sensitive
© 2017 – Proprietary & Confidential Information of Amdocs
#6 Inside Spring Session Redis
34
Tomcat
Tomcat
Tomcat
Tomcat
Tomcat
Tomcat
Jetty
Session Data

Information Security Level 2 – Sensitive
© 2017 – Proprietary & Confidential Information of Amdocs35
#6 Inside Spring Session Redis
Session Data
Tomcat
Tomcat
Tomcat
Tomcat
Tomcat
Tomcat
Jetty

Information Security Level 2 – Sensitive
© 2017 – Proprietary & Confidential Information of Amdocs36
#6 Inside Spring Session Redis
▪To recap:
▪Every minute, each server tries to delete all “expires” keys.
▪A lot of redundant calls, since only the first instance would actually achieve this
purpose.
▪Redis would then notify every instance that the “expires” key was deleted.
▪Every instance would then connect to Redis to get the session details about the
expiring session to handle the expiration.
▪A little bit of math:
▪100 servers * 2500 expiring sessions = 500,000 access at the same second
▪The more you scale, the bigger the problem

Information Security Level 2 – Sensitive
© 2017 – Proprietary & Confidential Information of Amdocs37
#6 Inside Spring Session Redis
Solutions:
▪ If you don’t care about session expiration events, set the cron job to an impossible value such as
February 31st:



spring.session.cleanup.cron.expression=0 0 5 31 2 ?
▪ You can also disable registering to those expiration and deletion events. Note that all servers need to
disable the registering for this to work:



@EnableRedisHttpSession
public class RedisOperationsSessionRepositoryConfigNoOp {
@Bean
public static ConfigureRedisAction configureRedisAction() {
return ConfigureRedisAction.NO_OP;
}
}

Information Security Level 2 – Sensitive
© 2017 – Proprietary & Confidential Information of Amdocs38
#6 Inside Spring Session Redis
▪If you do care about session expiration events, set only a specific instance(s)
to handle those events.
▪On all other servers, disable receiving the events:

@EnableRedisHttpSession
public class RedisOperationsSessionRepositoryConfigNoListener {
@Bean
public RedisMessageListenerContainer redisMessageListenerContainer(
RedisConnectionFactory connectionFactory,
RedisOperationsSessionRepository messageListener) {
return new RedisMessageListenerContainer();
}
}

Information Security Level 2 – Sensitive
© 2017 – Proprietary & Confidential Information of Amdocs39
To Recap
▪Be prepared to scale
▪Monitor well, monitor with caution
▪Open source rocks 🤟. Get involved! Tweak the
framework for your own use case.
Thank you
http://odedia.org

More Related Content

What's hot

RedisConf18 - Redis Memory Optimization
RedisConf18 - Redis Memory OptimizationRedisConf18 - Redis Memory Optimization
RedisConf18 - Redis Memory OptimizationRedis Labs
 
Lightning Talk: What You Need to Know Before You Shard in 20 Minutes
Lightning Talk: What You Need to Know Before You Shard in 20 MinutesLightning Talk: What You Need to Know Before You Shard in 20 Minutes
Lightning Talk: What You Need to Know Before You Shard in 20 MinutesMongoDB
 
RedisConf18 - Active-Active Geo-Distributed Apps with Redis CRDTs (conflict f...
RedisConf18 - Active-Active Geo-Distributed Apps with Redis CRDTs (conflict f...RedisConf18 - Active-Active Geo-Distributed Apps with Redis CRDTs (conflict f...
RedisConf18 - Active-Active Geo-Distributed Apps with Redis CRDTs (conflict f...Redis Labs
 
RedisConf18 - Fail-Safe Starvation-Free Durable Priority Queues in Redis
RedisConf18 - Fail-Safe Starvation-Free Durable Priority Queues in RedisRedisConf18 - Fail-Safe Starvation-Free Durable Priority Queues in Redis
RedisConf18 - Fail-Safe Starvation-Free Durable Priority Queues in RedisRedis Labs
 
Druid in Spot Instances
Druid in Spot InstancesDruid in Spot Instances
Druid in Spot InstancesImply
 
Leveraging DNS to Surface Attacker Activity
Leveraging DNS to Surface Attacker ActivityLeveraging DNS to Surface Attacker Activity
Leveraging DNS to Surface Attacker ActivitySqrrl
 
Running Analytics at the Speed of Your Business
Running Analytics at the Speed of Your BusinessRunning Analytics at the Speed of Your Business
Running Analytics at the Speed of Your BusinessRedis Labs
 
Splunk: Druid on Kubernetes with Druid-operator
Splunk: Druid on Kubernetes with Druid-operatorSplunk: Druid on Kubernetes with Druid-operator
Splunk: Druid on Kubernetes with Druid-operatorImply
 
Add Redis to Postgres to Make Your Microservices Go Boom!
Add Redis to Postgres to Make Your Microservices Go Boom!Add Redis to Postgres to Make Your Microservices Go Boom!
Add Redis to Postgres to Make Your Microservices Go Boom!Dave Nielsen
 
Red Hat Storage Day New York - Red Hat Gluster Storage: Historical Tick Data ...
Red Hat Storage Day New York - Red Hat Gluster Storage: Historical Tick Data ...Red Hat Storage Day New York - Red Hat Gluster Storage: Historical Tick Data ...
Red Hat Storage Day New York - Red Hat Gluster Storage: Historical Tick Data ...Red_Hat_Storage
 
Cold Storage That Isn't Glacial (Joshua Hollander, Protectwise) | Cassandra S...
Cold Storage That Isn't Glacial (Joshua Hollander, Protectwise) | Cassandra S...Cold Storage That Isn't Glacial (Joshua Hollander, Protectwise) | Cassandra S...
Cold Storage That Isn't Glacial (Joshua Hollander, Protectwise) | Cassandra S...DataStax
 
Apache Druid Design and Future prospect
Apache Druid Design and Future prospectApache Druid Design and Future prospect
Apache Druid Design and Future prospectc-bslim
 
Overcoming Barriers of Scaling Your Database
Overcoming Barriers of Scaling Your DatabaseOvercoming Barriers of Scaling Your Database
Overcoming Barriers of Scaling Your DatabaseScyllaDB
 
Red Hat Storage Day Boston - Persistent Storage for Containers
Red Hat Storage Day Boston - Persistent Storage for Containers Red Hat Storage Day Boston - Persistent Storage for Containers
Red Hat Storage Day Boston - Persistent Storage for Containers Red_Hat_Storage
 
10 Ways to Scale with Redis - LA Redis Meetup 2019
10 Ways to Scale with Redis - LA Redis Meetup 201910 Ways to Scale with Redis - LA Redis Meetup 2019
10 Ways to Scale with Redis - LA Redis Meetup 2019Dave Nielsen
 
What's Next for Google's BigTable
What's Next for Google's BigTableWhat's Next for Google's BigTable
What's Next for Google's BigTableSqrrl
 
10 Ways to Scale Your Website Silicon Valley Code Camp 2019
10 Ways to Scale Your Website Silicon Valley Code Camp 201910 Ways to Scale Your Website Silicon Valley Code Camp 2019
10 Ways to Scale Your Website Silicon Valley Code Camp 2019Dave Nielsen
 
Redis Streams plus Spark Structured Streaming
Redis Streams plus Spark Structured StreamingRedis Streams plus Spark Structured Streaming
Redis Streams plus Spark Structured StreamingDave Nielsen
 
RedisConf18 - Redis at LINE - 25 Billion Messages Per Day
RedisConf18 - Redis at LINE - 25 Billion Messages Per DayRedisConf18 - Redis at LINE - 25 Billion Messages Per Day
RedisConf18 - Redis at LINE - 25 Billion Messages Per DayRedis Labs
 

What's hot (20)

RedisConf18 - Redis Memory Optimization
RedisConf18 - Redis Memory OptimizationRedisConf18 - Redis Memory Optimization
RedisConf18 - Redis Memory Optimization
 
Lightning Talk: What You Need to Know Before You Shard in 20 Minutes
Lightning Talk: What You Need to Know Before You Shard in 20 MinutesLightning Talk: What You Need to Know Before You Shard in 20 Minutes
Lightning Talk: What You Need to Know Before You Shard in 20 Minutes
 
RedisConf18 - Active-Active Geo-Distributed Apps with Redis CRDTs (conflict f...
RedisConf18 - Active-Active Geo-Distributed Apps with Redis CRDTs (conflict f...RedisConf18 - Active-Active Geo-Distributed Apps with Redis CRDTs (conflict f...
RedisConf18 - Active-Active Geo-Distributed Apps with Redis CRDTs (conflict f...
 
RedisConf18 - Fail-Safe Starvation-Free Durable Priority Queues in Redis
RedisConf18 - Fail-Safe Starvation-Free Durable Priority Queues in RedisRedisConf18 - Fail-Safe Starvation-Free Durable Priority Queues in Redis
RedisConf18 - Fail-Safe Starvation-Free Durable Priority Queues in Redis
 
Containerized Storage
Containerized StorageContainerized Storage
Containerized Storage
 
Druid in Spot Instances
Druid in Spot InstancesDruid in Spot Instances
Druid in Spot Instances
 
Leveraging DNS to Surface Attacker Activity
Leveraging DNS to Surface Attacker ActivityLeveraging DNS to Surface Attacker Activity
Leveraging DNS to Surface Attacker Activity
 
Running Analytics at the Speed of Your Business
Running Analytics at the Speed of Your BusinessRunning Analytics at the Speed of Your Business
Running Analytics at the Speed of Your Business
 
Splunk: Druid on Kubernetes with Druid-operator
Splunk: Druid on Kubernetes with Druid-operatorSplunk: Druid on Kubernetes with Druid-operator
Splunk: Druid on Kubernetes with Druid-operator
 
Add Redis to Postgres to Make Your Microservices Go Boom!
Add Redis to Postgres to Make Your Microservices Go Boom!Add Redis to Postgres to Make Your Microservices Go Boom!
Add Redis to Postgres to Make Your Microservices Go Boom!
 
Red Hat Storage Day New York - Red Hat Gluster Storage: Historical Tick Data ...
Red Hat Storage Day New York - Red Hat Gluster Storage: Historical Tick Data ...Red Hat Storage Day New York - Red Hat Gluster Storage: Historical Tick Data ...
Red Hat Storage Day New York - Red Hat Gluster Storage: Historical Tick Data ...
 
Cold Storage That Isn't Glacial (Joshua Hollander, Protectwise) | Cassandra S...
Cold Storage That Isn't Glacial (Joshua Hollander, Protectwise) | Cassandra S...Cold Storage That Isn't Glacial (Joshua Hollander, Protectwise) | Cassandra S...
Cold Storage That Isn't Glacial (Joshua Hollander, Protectwise) | Cassandra S...
 
Apache Druid Design and Future prospect
Apache Druid Design and Future prospectApache Druid Design and Future prospect
Apache Druid Design and Future prospect
 
Overcoming Barriers of Scaling Your Database
Overcoming Barriers of Scaling Your DatabaseOvercoming Barriers of Scaling Your Database
Overcoming Barriers of Scaling Your Database
 
Red Hat Storage Day Boston - Persistent Storage for Containers
Red Hat Storage Day Boston - Persistent Storage for Containers Red Hat Storage Day Boston - Persistent Storage for Containers
Red Hat Storage Day Boston - Persistent Storage for Containers
 
10 Ways to Scale with Redis - LA Redis Meetup 2019
10 Ways to Scale with Redis - LA Redis Meetup 201910 Ways to Scale with Redis - LA Redis Meetup 2019
10 Ways to Scale with Redis - LA Redis Meetup 2019
 
What's Next for Google's BigTable
What's Next for Google's BigTableWhat's Next for Google's BigTable
What's Next for Google's BigTable
 
10 Ways to Scale Your Website Silicon Valley Code Camp 2019
10 Ways to Scale Your Website Silicon Valley Code Camp 201910 Ways to Scale Your Website Silicon Valley Code Camp 2019
10 Ways to Scale Your Website Silicon Valley Code Camp 2019
 
Redis Streams plus Spark Structured Streaming
Redis Streams plus Spark Structured StreamingRedis Streams plus Spark Structured Streaming
Redis Streams plus Spark Structured Streaming
 
RedisConf18 - Redis at LINE - 25 Billion Messages Per Day
RedisConf18 - Redis at LINE - 25 Billion Messages Per DayRedisConf18 - Redis at LINE - 25 Billion Messages Per Day
RedisConf18 - Redis at LINE - 25 Billion Messages Per Day
 

Similar to Redis Day TLV 2018 - Spring Session Redis

Webinar: Cloud Data Masking - Tips to Test Software Securely
Webinar: Cloud Data Masking - Tips to Test Software Securely Webinar: Cloud Data Masking - Tips to Test Software Securely
Webinar: Cloud Data Masking - Tips to Test Software Securely Skytap Cloud
 
The Sysdig Secure DevOps Platform
The Sysdig Secure DevOps PlatformThe Sysdig Secure DevOps Platform
The Sysdig Secure DevOps PlatformAshnikbiz
 
Securing Big Data at rest with encryption for Hadoop, Cassandra and MongoDB o...
Securing Big Data at rest with encryption for Hadoop, Cassandra and MongoDB o...Securing Big Data at rest with encryption for Hadoop, Cassandra and MongoDB o...
Securing Big Data at rest with encryption for Hadoop, Cassandra and MongoDB o...Big Data Spain
 
Security practices in OpenShift
Security practices in OpenShiftSecurity practices in OpenShift
Security practices in OpenShiftNenad Bogojevic
 
Implementing and Troubleshooting EdgeSight
Implementing and Troubleshooting EdgeSightImplementing and Troubleshooting EdgeSight
Implementing and Troubleshooting EdgeSightDavid McGeough
 
OSMC 2019 | Use Cloud services & features in your redundant Icinga2 Environme...
OSMC 2019 | Use Cloud services & features in your redundant Icinga2 Environme...OSMC 2019 | Use Cloud services & features in your redundant Icinga2 Environme...
OSMC 2019 | Use Cloud services & features in your redundant Icinga2 Environme...NETWAYS
 
Chris Homer - Moving the entire stack to k8s within a year – lessons learned
Chris Homer - Moving the entire stack to k8s within a year – lessons learnedChris Homer - Moving the entire stack to k8s within a year – lessons learned
Chris Homer - Moving the entire stack to k8s within a year – lessons learnedDariia Seimova
 
Q Con New York 2015 Presentation - Conjur
Q Con New York 2015 Presentation - ConjurQ Con New York 2015 Presentation - Conjur
Q Con New York 2015 Presentation - Conjurconjur_inc
 
Enumerating Active Directory: Lateral Movement and Privilege Escalation
Enumerating Active Directory: Lateral Movement and Privilege EscalationEnumerating Active Directory: Lateral Movement and Privilege Escalation
Enumerating Active Directory: Lateral Movement and Privilege EscalationSylvain Cortes
 
Using Vault to decouple MySQL Secrets
Using Vault to decouple MySQL SecretsUsing Vault to decouple MySQL Secrets
Using Vault to decouple MySQL SecretsDerek Downey
 
PHP challenge on PaaS
PHP challenge on PaaSPHP challenge on PaaS
PHP challenge on PaaSBoaz Ziniman
 
Aspirin as a Service: Using the Cloud to Cure Security Headaches
Aspirin as a Service: Using the Cloud to Cure Security HeadachesAspirin as a Service: Using the Cloud to Cure Security Headaches
Aspirin as a Service: Using the Cloud to Cure Security HeadachesPriyanka Aash
 
How to hack Citrix (So, You Just Inherited Someone Else's Citrix Environment....
How to hack Citrix (So, You Just Inherited Someone Else's Citrix Environment....How to hack Citrix (So, You Just Inherited Someone Else's Citrix Environment....
How to hack Citrix (So, You Just Inherited Someone Else's Citrix Environment....Denis Gundarev
 
Cloud stack troubleshooting
Cloud stack troubleshooting Cloud stack troubleshooting
Cloud stack troubleshooting AlexTian
 
Database security best_practices
Database security best_practicesDatabase security best_practices
Database security best_practicesTarik Essawi
 
RSA 2015 Realities of Private Cloud Security
RSA 2015 Realities of Private Cloud SecurityRSA 2015 Realities of Private Cloud Security
RSA 2015 Realities of Private Cloud SecurityScott Carlson
 
BSides Portland - Attacking Azure Environments with PowerShell
BSides Portland - Attacking Azure Environments with PowerShellBSides Portland - Attacking Azure Environments with PowerShell
BSides Portland - Attacking Azure Environments with PowerShellKarl Fosaaen
 

Similar to Redis Day TLV 2018 - Spring Session Redis (20)

Webinar: Cloud Data Masking - Tips to Test Software Securely
Webinar: Cloud Data Masking - Tips to Test Software Securely Webinar: Cloud Data Masking - Tips to Test Software Securely
Webinar: Cloud Data Masking - Tips to Test Software Securely
 
50 tips50minutes
50 tips50minutes50 tips50minutes
50 tips50minutes
 
The Sysdig Secure DevOps Platform
The Sysdig Secure DevOps PlatformThe Sysdig Secure DevOps Platform
The Sysdig Secure DevOps Platform
 
Securing Big Data at rest with encryption for Hadoop, Cassandra and MongoDB o...
Securing Big Data at rest with encryption for Hadoop, Cassandra and MongoDB o...Securing Big Data at rest with encryption for Hadoop, Cassandra and MongoDB o...
Securing Big Data at rest with encryption for Hadoop, Cassandra and MongoDB o...
 
Security practices in OpenShift
Security practices in OpenShiftSecurity practices in OpenShift
Security practices in OpenShift
 
Implementing and Troubleshooting EdgeSight
Implementing and Troubleshooting EdgeSightImplementing and Troubleshooting EdgeSight
Implementing and Troubleshooting EdgeSight
 
OSMC 2019 | Use Cloud services & features in your redundant Icinga2 Environme...
OSMC 2019 | Use Cloud services & features in your redundant Icinga2 Environme...OSMC 2019 | Use Cloud services & features in your redundant Icinga2 Environme...
OSMC 2019 | Use Cloud services & features in your redundant Icinga2 Environme...
 
Chris Homer - Moving the entire stack to k8s within a year – lessons learned
Chris Homer - Moving the entire stack to k8s within a year – lessons learnedChris Homer - Moving the entire stack to k8s within a year – lessons learned
Chris Homer - Moving the entire stack to k8s within a year – lessons learned
 
Q Con New York 2015 Presentation - Conjur
Q Con New York 2015 Presentation - ConjurQ Con New York 2015 Presentation - Conjur
Q Con New York 2015 Presentation - Conjur
 
Enumerating Active Directory: Lateral Movement and Privilege Escalation
Enumerating Active Directory: Lateral Movement and Privilege EscalationEnumerating Active Directory: Lateral Movement and Privilege Escalation
Enumerating Active Directory: Lateral Movement and Privilege Escalation
 
Using Vault to decouple MySQL Secrets
Using Vault to decouple MySQL SecretsUsing Vault to decouple MySQL Secrets
Using Vault to decouple MySQL Secrets
 
PHP challenge on PaaS
PHP challenge on PaaSPHP challenge on PaaS
PHP challenge on PaaS
 
Redis acc
Redis accRedis acc
Redis acc
 
Enhancing MySQL Security
Enhancing MySQL SecurityEnhancing MySQL Security
Enhancing MySQL Security
 
Aspirin as a Service: Using the Cloud to Cure Security Headaches
Aspirin as a Service: Using the Cloud to Cure Security HeadachesAspirin as a Service: Using the Cloud to Cure Security Headaches
Aspirin as a Service: Using the Cloud to Cure Security Headaches
 
How to hack Citrix (So, You Just Inherited Someone Else's Citrix Environment....
How to hack Citrix (So, You Just Inherited Someone Else's Citrix Environment....How to hack Citrix (So, You Just Inherited Someone Else's Citrix Environment....
How to hack Citrix (So, You Just Inherited Someone Else's Citrix Environment....
 
Cloud stack troubleshooting
Cloud stack troubleshooting Cloud stack troubleshooting
Cloud stack troubleshooting
 
Database security best_practices
Database security best_practicesDatabase security best_practices
Database security best_practices
 
RSA 2015 Realities of Private Cloud Security
RSA 2015 Realities of Private Cloud SecurityRSA 2015 Realities of Private Cloud Security
RSA 2015 Realities of Private Cloud Security
 
BSides Portland - Attacking Azure Environments with PowerShell
BSides Portland - Attacking Azure Environments with PowerShellBSides Portland - Attacking Azure Environments with PowerShell
BSides Portland - Attacking Azure Environments with PowerShell
 

More from Redis Labs

Redis Day Bangalore 2020 - Session state caching with redis
Redis Day Bangalore 2020 - Session state caching with redisRedis Day Bangalore 2020 - Session state caching with redis
Redis Day Bangalore 2020 - Session state caching with redisRedis Labs
 
Protecting Your API with Redis by Jane Paek - Redis Day Seattle 2020
Protecting Your API with Redis by Jane Paek - Redis Day Seattle 2020Protecting Your API with Redis by Jane Paek - Redis Day Seattle 2020
Protecting Your API with Redis by Jane Paek - Redis Day Seattle 2020Redis Labs
 
The Happy Marriage of Redis and Protobuf by Scott Haines of Twilio - Redis Da...
The Happy Marriage of Redis and Protobuf by Scott Haines of Twilio - Redis Da...The Happy Marriage of Redis and Protobuf by Scott Haines of Twilio - Redis Da...
The Happy Marriage of Redis and Protobuf by Scott Haines of Twilio - Redis Da...Redis Labs
 
SQL, Redis and Kubernetes by Paul Stanton of Windocks - Redis Day Seattle 2020
SQL, Redis and Kubernetes by Paul Stanton of Windocks - Redis Day Seattle 2020SQL, Redis and Kubernetes by Paul Stanton of Windocks - Redis Day Seattle 2020
SQL, Redis and Kubernetes by Paul Stanton of Windocks - Redis Day Seattle 2020Redis Labs
 
Rust and Redis - Solving Problems for Kubernetes by Ravi Jagannathan of VMwar...
Rust and Redis - Solving Problems for Kubernetes by Ravi Jagannathan of VMwar...Rust and Redis - Solving Problems for Kubernetes by Ravi Jagannathan of VMwar...
Rust and Redis - Solving Problems for Kubernetes by Ravi Jagannathan of VMwar...Redis Labs
 
Redis for Data Science and Engineering by Dmitry Polyakovsky of Oracle
Redis for Data Science and Engineering by Dmitry Polyakovsky of OracleRedis for Data Science and Engineering by Dmitry Polyakovsky of Oracle
Redis for Data Science and Engineering by Dmitry Polyakovsky of OracleRedis Labs
 
Practical Use Cases for ACLs in Redis 6 by Jamie Scott - Redis Day Seattle 2020
Practical Use Cases for ACLs in Redis 6 by Jamie Scott - Redis Day Seattle 2020Practical Use Cases for ACLs in Redis 6 by Jamie Scott - Redis Day Seattle 2020
Practical Use Cases for ACLs in Redis 6 by Jamie Scott - Redis Day Seattle 2020Redis Labs
 
Moving Beyond Cache by Yiftach Shoolman Redis Labs - Redis Day Seattle 2020
Moving Beyond Cache by Yiftach Shoolman Redis Labs - Redis Day Seattle 2020Moving Beyond Cache by Yiftach Shoolman Redis Labs - Redis Day Seattle 2020
Moving Beyond Cache by Yiftach Shoolman Redis Labs - Redis Day Seattle 2020Redis Labs
 
Leveraging Redis for System Monitoring by Adam McCormick of SBG - Redis Day S...
Leveraging Redis for System Monitoring by Adam McCormick of SBG - Redis Day S...Leveraging Redis for System Monitoring by Adam McCormick of SBG - Redis Day S...
Leveraging Redis for System Monitoring by Adam McCormick of SBG - Redis Day S...Redis Labs
 
JSON in Redis - When to use RedisJSON by Jay Won of Coupang - Redis Day Seatt...
JSON in Redis - When to use RedisJSON by Jay Won of Coupang - Redis Day Seatt...JSON in Redis - When to use RedisJSON by Jay Won of Coupang - Redis Day Seatt...
JSON in Redis - When to use RedisJSON by Jay Won of Coupang - Redis Day Seatt...Redis Labs
 
Highly Available Persistent Session Management Service by Mohamed Elmergawi o...
Highly Available Persistent Session Management Service by Mohamed Elmergawi o...Highly Available Persistent Session Management Service by Mohamed Elmergawi o...
Highly Available Persistent Session Management Service by Mohamed Elmergawi o...Redis Labs
 
Anatomy of a Redis Command by Madelyn Olson of Amazon Web Services - Redis Da...
Anatomy of a Redis Command by Madelyn Olson of Amazon Web Services - Redis Da...Anatomy of a Redis Command by Madelyn Olson of Amazon Web Services - Redis Da...
Anatomy of a Redis Command by Madelyn Olson of Amazon Web Services - Redis Da...Redis Labs
 
Building a Multi-dimensional Analytics Engine with RedisGraph by Matthew Goos...
Building a Multi-dimensional Analytics Engine with RedisGraph by Matthew Goos...Building a Multi-dimensional Analytics Engine with RedisGraph by Matthew Goos...
Building a Multi-dimensional Analytics Engine with RedisGraph by Matthew Goos...Redis Labs
 
RediSearch 1.6 by Pieter Cailliau - Redis Day Bangalore 2020
RediSearch 1.6 by Pieter Cailliau - Redis Day Bangalore 2020RediSearch 1.6 by Pieter Cailliau - Redis Day Bangalore 2020
RediSearch 1.6 by Pieter Cailliau - Redis Day Bangalore 2020Redis Labs
 
RedisGraph 2.0 by Pieter Cailliau - Redis Day Bangalore 2020
RedisGraph 2.0 by Pieter Cailliau - Redis Day Bangalore 2020RedisGraph 2.0 by Pieter Cailliau - Redis Day Bangalore 2020
RedisGraph 2.0 by Pieter Cailliau - Redis Day Bangalore 2020Redis Labs
 
RedisTimeSeries 1.2 by Pieter Cailliau - Redis Day Bangalore 2020
RedisTimeSeries 1.2 by Pieter Cailliau - Redis Day Bangalore 2020RedisTimeSeries 1.2 by Pieter Cailliau - Redis Day Bangalore 2020
RedisTimeSeries 1.2 by Pieter Cailliau - Redis Day Bangalore 2020Redis Labs
 
RedisAI 0.9 by Sherin Thomas of Tensorwerk - Redis Day Bangalore 2020
RedisAI 0.9 by Sherin Thomas of Tensorwerk - Redis Day Bangalore 2020RedisAI 0.9 by Sherin Thomas of Tensorwerk - Redis Day Bangalore 2020
RedisAI 0.9 by Sherin Thomas of Tensorwerk - Redis Day Bangalore 2020Redis Labs
 
Rate-Limiting 30 Million requests by Vijay Lakshminarayanan and Girish Koundi...
Rate-Limiting 30 Million requests by Vijay Lakshminarayanan and Girish Koundi...Rate-Limiting 30 Million requests by Vijay Lakshminarayanan and Girish Koundi...
Rate-Limiting 30 Million requests by Vijay Lakshminarayanan and Girish Koundi...Redis Labs
 
Three Pillars of Observability by Rajalakshmi Raji Srinivasan of Site24x7 Zoh...
Three Pillars of Observability by Rajalakshmi Raji Srinivasan of Site24x7 Zoh...Three Pillars of Observability by Rajalakshmi Raji Srinivasan of Site24x7 Zoh...
Three Pillars of Observability by Rajalakshmi Raji Srinivasan of Site24x7 Zoh...Redis Labs
 
Solving Complex Scaling Problems by Prashant Kumar and Abhishek Jain of Myntr...
Solving Complex Scaling Problems by Prashant Kumar and Abhishek Jain of Myntr...Solving Complex Scaling Problems by Prashant Kumar and Abhishek Jain of Myntr...
Solving Complex Scaling Problems by Prashant Kumar and Abhishek Jain of Myntr...Redis Labs
 

More from Redis Labs (20)

Redis Day Bangalore 2020 - Session state caching with redis
Redis Day Bangalore 2020 - Session state caching with redisRedis Day Bangalore 2020 - Session state caching with redis
Redis Day Bangalore 2020 - Session state caching with redis
 
Protecting Your API with Redis by Jane Paek - Redis Day Seattle 2020
Protecting Your API with Redis by Jane Paek - Redis Day Seattle 2020Protecting Your API with Redis by Jane Paek - Redis Day Seattle 2020
Protecting Your API with Redis by Jane Paek - Redis Day Seattle 2020
 
The Happy Marriage of Redis and Protobuf by Scott Haines of Twilio - Redis Da...
The Happy Marriage of Redis and Protobuf by Scott Haines of Twilio - Redis Da...The Happy Marriage of Redis and Protobuf by Scott Haines of Twilio - Redis Da...
The Happy Marriage of Redis and Protobuf by Scott Haines of Twilio - Redis Da...
 
SQL, Redis and Kubernetes by Paul Stanton of Windocks - Redis Day Seattle 2020
SQL, Redis and Kubernetes by Paul Stanton of Windocks - Redis Day Seattle 2020SQL, Redis and Kubernetes by Paul Stanton of Windocks - Redis Day Seattle 2020
SQL, Redis and Kubernetes by Paul Stanton of Windocks - Redis Day Seattle 2020
 
Rust and Redis - Solving Problems for Kubernetes by Ravi Jagannathan of VMwar...
Rust and Redis - Solving Problems for Kubernetes by Ravi Jagannathan of VMwar...Rust and Redis - Solving Problems for Kubernetes by Ravi Jagannathan of VMwar...
Rust and Redis - Solving Problems for Kubernetes by Ravi Jagannathan of VMwar...
 
Redis for Data Science and Engineering by Dmitry Polyakovsky of Oracle
Redis for Data Science and Engineering by Dmitry Polyakovsky of OracleRedis for Data Science and Engineering by Dmitry Polyakovsky of Oracle
Redis for Data Science and Engineering by Dmitry Polyakovsky of Oracle
 
Practical Use Cases for ACLs in Redis 6 by Jamie Scott - Redis Day Seattle 2020
Practical Use Cases for ACLs in Redis 6 by Jamie Scott - Redis Day Seattle 2020Practical Use Cases for ACLs in Redis 6 by Jamie Scott - Redis Day Seattle 2020
Practical Use Cases for ACLs in Redis 6 by Jamie Scott - Redis Day Seattle 2020
 
Moving Beyond Cache by Yiftach Shoolman Redis Labs - Redis Day Seattle 2020
Moving Beyond Cache by Yiftach Shoolman Redis Labs - Redis Day Seattle 2020Moving Beyond Cache by Yiftach Shoolman Redis Labs - Redis Day Seattle 2020
Moving Beyond Cache by Yiftach Shoolman Redis Labs - Redis Day Seattle 2020
 
Leveraging Redis for System Monitoring by Adam McCormick of SBG - Redis Day S...
Leveraging Redis for System Monitoring by Adam McCormick of SBG - Redis Day S...Leveraging Redis for System Monitoring by Adam McCormick of SBG - Redis Day S...
Leveraging Redis for System Monitoring by Adam McCormick of SBG - Redis Day S...
 
JSON in Redis - When to use RedisJSON by Jay Won of Coupang - Redis Day Seatt...
JSON in Redis - When to use RedisJSON by Jay Won of Coupang - Redis Day Seatt...JSON in Redis - When to use RedisJSON by Jay Won of Coupang - Redis Day Seatt...
JSON in Redis - When to use RedisJSON by Jay Won of Coupang - Redis Day Seatt...
 
Highly Available Persistent Session Management Service by Mohamed Elmergawi o...
Highly Available Persistent Session Management Service by Mohamed Elmergawi o...Highly Available Persistent Session Management Service by Mohamed Elmergawi o...
Highly Available Persistent Session Management Service by Mohamed Elmergawi o...
 
Anatomy of a Redis Command by Madelyn Olson of Amazon Web Services - Redis Da...
Anatomy of a Redis Command by Madelyn Olson of Amazon Web Services - Redis Da...Anatomy of a Redis Command by Madelyn Olson of Amazon Web Services - Redis Da...
Anatomy of a Redis Command by Madelyn Olson of Amazon Web Services - Redis Da...
 
Building a Multi-dimensional Analytics Engine with RedisGraph by Matthew Goos...
Building a Multi-dimensional Analytics Engine with RedisGraph by Matthew Goos...Building a Multi-dimensional Analytics Engine with RedisGraph by Matthew Goos...
Building a Multi-dimensional Analytics Engine with RedisGraph by Matthew Goos...
 
RediSearch 1.6 by Pieter Cailliau - Redis Day Bangalore 2020
RediSearch 1.6 by Pieter Cailliau - Redis Day Bangalore 2020RediSearch 1.6 by Pieter Cailliau - Redis Day Bangalore 2020
RediSearch 1.6 by Pieter Cailliau - Redis Day Bangalore 2020
 
RedisGraph 2.0 by Pieter Cailliau - Redis Day Bangalore 2020
RedisGraph 2.0 by Pieter Cailliau - Redis Day Bangalore 2020RedisGraph 2.0 by Pieter Cailliau - Redis Day Bangalore 2020
RedisGraph 2.0 by Pieter Cailliau - Redis Day Bangalore 2020
 
RedisTimeSeries 1.2 by Pieter Cailliau - Redis Day Bangalore 2020
RedisTimeSeries 1.2 by Pieter Cailliau - Redis Day Bangalore 2020RedisTimeSeries 1.2 by Pieter Cailliau - Redis Day Bangalore 2020
RedisTimeSeries 1.2 by Pieter Cailliau - Redis Day Bangalore 2020
 
RedisAI 0.9 by Sherin Thomas of Tensorwerk - Redis Day Bangalore 2020
RedisAI 0.9 by Sherin Thomas of Tensorwerk - Redis Day Bangalore 2020RedisAI 0.9 by Sherin Thomas of Tensorwerk - Redis Day Bangalore 2020
RedisAI 0.9 by Sherin Thomas of Tensorwerk - Redis Day Bangalore 2020
 
Rate-Limiting 30 Million requests by Vijay Lakshminarayanan and Girish Koundi...
Rate-Limiting 30 Million requests by Vijay Lakshminarayanan and Girish Koundi...Rate-Limiting 30 Million requests by Vijay Lakshminarayanan and Girish Koundi...
Rate-Limiting 30 Million requests by Vijay Lakshminarayanan and Girish Koundi...
 
Three Pillars of Observability by Rajalakshmi Raji Srinivasan of Site24x7 Zoh...
Three Pillars of Observability by Rajalakshmi Raji Srinivasan of Site24x7 Zoh...Three Pillars of Observability by Rajalakshmi Raji Srinivasan of Site24x7 Zoh...
Three Pillars of Observability by Rajalakshmi Raji Srinivasan of Site24x7 Zoh...
 
Solving Complex Scaling Problems by Prashant Kumar and Abhishek Jain of Myntr...
Solving Complex Scaling Problems by Prashant Kumar and Abhishek Jain of Myntr...Solving Complex Scaling Problems by Prashant Kumar and Abhishek Jain of Myntr...
Solving Complex Scaling Problems by Prashant Kumar and Abhishek Jain of Myntr...
 

Recently uploaded

State of the Smart Building Startup Landscape 2024!
State of the Smart Building Startup Landscape 2024!State of the Smart Building Startup Landscape 2024!
State of the Smart Building Startup Landscape 2024!Memoori
 
Intro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджераIntro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджераMark Opanasiuk
 
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdfThe Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdfFIDO Alliance
 
Portal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russePortal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russe中 央社
 
Your enemies use GenAI too - staying ahead of fraud with Neo4j
Your enemies use GenAI too - staying ahead of fraud with Neo4jYour enemies use GenAI too - staying ahead of fraud with Neo4j
Your enemies use GenAI too - staying ahead of fraud with Neo4jNeo4j
 
Oauth 2.0 Introduction and Flows with MuleSoft
Oauth 2.0 Introduction and Flows with MuleSoftOauth 2.0 Introduction and Flows with MuleSoft
Oauth 2.0 Introduction and Flows with MuleSoftshyamraj55
 
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdfHow Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdfFIDO Alliance
 
ADP Passwordless Journey Case Study.pptx
ADP Passwordless Journey Case Study.pptxADP Passwordless Journey Case Study.pptx
ADP Passwordless Journey Case Study.pptxFIDO Alliance
 
Google I/O Extended 2024 Warsaw
Google I/O Extended 2024 WarsawGoogle I/O Extended 2024 Warsaw
Google I/O Extended 2024 WarsawGDSC PJATK
 
(Explainable) Data-Centric AI: what are you explaininhg, and to whom?
(Explainable) Data-Centric AI: what are you explaininhg, and to whom?(Explainable) Data-Centric AI: what are you explaininhg, and to whom?
(Explainable) Data-Centric AI: what are you explaininhg, and to whom?Paolo Missier
 
Tales from a Passkey Provider Progress from Awareness to Implementation.pptx
Tales from a Passkey Provider  Progress from Awareness to Implementation.pptxTales from a Passkey Provider  Progress from Awareness to Implementation.pptx
Tales from a Passkey Provider Progress from Awareness to Implementation.pptxFIDO Alliance
 
Continuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
Continuing Bonds Through AI: A Hermeneutic Reflection on ThanabotsContinuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
Continuing Bonds Through AI: A Hermeneutic Reflection on ThanabotsLeah Henrickson
 
Long journey of Ruby Standard library at RubyKaigi 2024
Long journey of Ruby Standard library at RubyKaigi 2024Long journey of Ruby Standard library at RubyKaigi 2024
Long journey of Ruby Standard library at RubyKaigi 2024Hiroshi SHIBATA
 
1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT
1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT
1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPTiSEO AI
 
Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...
Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...
Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...Skynet Technologies
 
FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...
FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...
FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...FIDO Alliance
 
Harnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptx
Harnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptxHarnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptx
Harnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptxFIDO Alliance
 
Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...FIDO Alliance
 
Collecting & Temporal Analysis of Behavioral Web Data - Tales From The Inside
Collecting & Temporal Analysis of Behavioral Web Data - Tales From The InsideCollecting & Temporal Analysis of Behavioral Web Data - Tales From The Inside
Collecting & Temporal Analysis of Behavioral Web Data - Tales From The InsideStefan Dietze
 
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...marcuskenyatta275
 

Recently uploaded (20)

State of the Smart Building Startup Landscape 2024!
State of the Smart Building Startup Landscape 2024!State of the Smart Building Startup Landscape 2024!
State of the Smart Building Startup Landscape 2024!
 
Intro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджераIntro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджера
 
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdfThe Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
 
Portal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russePortal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russe
 
Your enemies use GenAI too - staying ahead of fraud with Neo4j
Your enemies use GenAI too - staying ahead of fraud with Neo4jYour enemies use GenAI too - staying ahead of fraud with Neo4j
Your enemies use GenAI too - staying ahead of fraud with Neo4j
 
Oauth 2.0 Introduction and Flows with MuleSoft
Oauth 2.0 Introduction and Flows with MuleSoftOauth 2.0 Introduction and Flows with MuleSoft
Oauth 2.0 Introduction and Flows with MuleSoft
 
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdfHow Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
 
ADP Passwordless Journey Case Study.pptx
ADP Passwordless Journey Case Study.pptxADP Passwordless Journey Case Study.pptx
ADP Passwordless Journey Case Study.pptx
 
Google I/O Extended 2024 Warsaw
Google I/O Extended 2024 WarsawGoogle I/O Extended 2024 Warsaw
Google I/O Extended 2024 Warsaw
 
(Explainable) Data-Centric AI: what are you explaininhg, and to whom?
(Explainable) Data-Centric AI: what are you explaininhg, and to whom?(Explainable) Data-Centric AI: what are you explaininhg, and to whom?
(Explainable) Data-Centric AI: what are you explaininhg, and to whom?
 
Tales from a Passkey Provider Progress from Awareness to Implementation.pptx
Tales from a Passkey Provider  Progress from Awareness to Implementation.pptxTales from a Passkey Provider  Progress from Awareness to Implementation.pptx
Tales from a Passkey Provider Progress from Awareness to Implementation.pptx
 
Continuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
Continuing Bonds Through AI: A Hermeneutic Reflection on ThanabotsContinuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
Continuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
 
Long journey of Ruby Standard library at RubyKaigi 2024
Long journey of Ruby Standard library at RubyKaigi 2024Long journey of Ruby Standard library at RubyKaigi 2024
Long journey of Ruby Standard library at RubyKaigi 2024
 
1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT
1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT
1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT
 
Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...
Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...
Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...
 
FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...
FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...
FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...
 
Harnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptx
Harnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptxHarnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptx
Harnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptx
 
Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...
 
Collecting & Temporal Analysis of Behavioral Web Data - Tales From The Inside
Collecting & Temporal Analysis of Behavioral Web Data - Tales From The InsideCollecting & Temporal Analysis of Behavioral Web Data - Tales From The Inside
Collecting & Temporal Analysis of Behavioral Web Data - Tales From The Inside
 
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
 

Redis Day TLV 2018 - Spring Session Redis

  • 1. March 2018 Spring Session Redis Oded Shopen Why, How and Production Considerations
  • 2. 
Information Security Level 2 – Sensitive © 2017 – Proprietary & Confidential Information of Amdocs2 About Me ▪Oded Shopen ▪Software Architect @ Amdocs Israel ▪Working on Event-Driven, Cloud Native Microservices ▪🤓 Redis Geek ▪http://odedia.org ▪@odedia on twitter
  • 3. 
Information Security Level 2 – Sensitive © 2017 – Proprietary & Confidential Information of Amdocs3 Why?
  • 4. 
Information Security Level 2 – Sensitive © 2017 – Proprietary & Confidential Information of Amdocs4 Why Spring Session? ▪Once upon a time, there was the servlet container. And it was good… Tomcat 🍪 123-456 = David
  • 5. 
Information Security Level 2 – Sensitive © 2017 – Proprietary & Confidential Information of Amdocs5 Why Spring Session? Tomcat 🍪 123-456 = David Tomcat Tomcat Load Balancer 🍪 789-111 = Larry
  • 6. 
Information Security Level 2 – Sensitive © 2017 – Proprietary & Confidential Information of Amdocs6 Why Spring Session? 🍪 123-456 = ? Tomcat Tomcat Load Balancer 🍪 789-111 = Larry
  • 7. 
Information Security Level 2 – Sensitive © 2017 – Proprietary & Confidential Information of Amdocs7 Why Spring Session? 😞
  • 8. 
Information Security Level 2 – Sensitive © 2017 – Proprietary & Confidential Information of Amdocs8 Why Spring Session? Tomcat Tomcat Load Balancer Tomcat Tomcat Tomcat Tomcat Tomcat Tomcat Tomcat Tomcat Tomcat Tomcat Tomcat Tomcat Tomcat Tomcat Tomcat Tomcat
  • 9. 
Information Security Level 2 – Sensitive © 2017 – Proprietary & Confidential Information of Amdocs9 Why Spring Session? Jetty Tomcat Load Balancer Jetty Tomcat Tomcat Tomcat Tomcat Tomcat Tomcat Tomcat Jetty Tomcat Tomcat Tomcat Tomcat Tomcat Tomcat Tomcat
  • 10. 
Information Security Level 2 – Sensitive © 2017 – Proprietary & Confidential Information of Amdocs10 Why Spring Session? Tomcat Session Data
  • 11. 
Information Security Level 2 – Sensitive © 2017 – Proprietary & Confidential Information of Amdocs11 Why Spring Session? Tomcat Tomcat Tomcat Tomcat Tomcat Tomcat Jetty Session Data
  • 12. 
Information Security Level 2 – Sensitive © 2017 – Proprietary & Confidential Information of Amdocs12 Why Spring Session? ▪Replaces the built-in HttpSession with another implementation ▪Transparent drop-in replacement when using Spring Boot ▪Makes your servers truly stateless ▪Sessions survive application restarts ▪No need for Load Balancer sticky sessions ▪Conforms to the cloud-native apps 12-factor principals
  • 13. 
Information Security Level 2 – Sensitive © 2017 – Proprietary & Confidential Information of Amdocs13 Twelve-factor processes are stateless and share-nothing.  Any data that needs to persist must be stored in a stateful backing service, typically a database.
  • 14. 
Information Security Level 2 – Sensitive © 2017 – Proprietary & Confidential Information of Amdocs14 Why Spring Session Redis? https://docs.spring.io/spring-session/docs/1.3.1.RELEASE/reference/html5/
  • 15. 
Information Security Level 2 – Sensitive © 2017 – Proprietary & Confidential Information of Amdocs15 Why Spring Session Redis? ▪The application requires frequent, fast access to the session ▪A fast database is critical ▪Redis is really fast ▪No user experience degradation by externalizing the session to Redis ▪Sessions needs to expire after some time ▪Redis expiring keys are a great solution ▪With sharding and clustering, Redis scales when your user base scales
  • 16. 
Information Security Level 2 – Sensitive © 2017 – Proprietary & Confidential Information of Amdocs16 How?
  • 17. 
Information Security Level 2 – Sensitive © 2017 – Proprietary & Confidential Information of Amdocs17 Demo https://github.com/odedia/spring-session-redis-sample
  • 18. 
Information Security Level 2 – Sensitive © 2017 – Proprietary & Confidential Information of Amdocs18 Production Considerations
  • 19. 
Information Security Level 2 – Sensitive © 2017 – Proprietary & Confidential Information of Amdocs19 #1 Be Prepared to Scale ▪At the very minimum, use a master/slave setup
  • 20. 
Information Security Level 2 – Sensitive © 2017 – Proprietary & Confidential Information of Amdocs20 #1 Be Prepared to Scale ▪Consider sharding your sessions in a Redis Cluster ▪RedisLabs + DNS Proxy will hide the cluster topology and let you focus on a simple configuration on the client side ▪No need to configure sentinels Node 1 Node 2 Node 3 Proxyspring.redis.url=proxy:6379 spring.redis.sentinel.master=MasterNode spring.redis.sentinel.nodes=Node1:6379,Node2:6379,Node3:6379
  • 21. 
Information Security Level 2 – Sensitive © 2017 – Proprietary & Confidential Information of Amdocs21 #2 Pool Settings ▪ Spring Data Redis uses a JedisConnectionFactory with the following defaults: spring.redis.pool.max-active=8 spring.redis.pool.max-idle=8 spring.redis.pool.max-wait=-1 spring.redis.pool.min-idle=0 spring.redis.timeout=0 ▪ Behind the scenes - an Apache Commons GenericObjectPool. ▪ Use max-active based on your tomcat/jetty threads. ▪ Use max-wait based on your setup ▪ Too high - all tomcat threads can get stuck, waiting ▪ Too low - your consumers may get errors ▪ Use min-idle of at least 8 to offset “sudden load” issues (such as mass login on a business day). ▪ Set spring.redis.timeout to a reasonably low number (such as 1000ms) ▪ Too high - your connection pool can become full quickly. ▪ Too low - your consumers may get errors
  • 22. 
Information Security Level 2 – Sensitive © 2017 – Proprietary & Confidential Information of Amdocs22 #3 Server-Side Metrics ▪Spring Boot Actuator provides a production-ready monitoring metrics. ▪Simply add spring-boot-starter-actuator to your gradle/maven dependencies ▪/metrics endpoint provides valuable monitoring data ▪However, Spring Data Redis is not available… ▪Luckily, actuator is extensible! ▪https://github.com/nysd/spring-boot-redis-metrics
  • 23. 
Information Security Level 2 – Sensitive © 2017 – Proprietary & Confidential Information of Amdocs23 #4 Monitor Redis ▪Redislabs monitoring dashboards provide excellent visibility to identify issues, as we’ll soon see. ▪If you use open source and monitor yourself 
 on-prem, keep in mind that Redis is a single- threaded database. ▪A 2-core virtual machine would report 50% CPU utilization ▪However, redis itself might be at 100% at that time ▪Monitor the process, not the VM
  • 24. 
Information Security Level 2 – Sensitive © 2017 – Proprietary & Confidential Information of Amdocs24 #5 Please Monitor Responsibly ▪Be careful how you monitor… ▪KEYS * runs over all the keys in the DB. Your DB is unresponsive until operation is over! ▪SMEMBERS returns all keys in a given set. Some sets may contain all keys in the system. ▪In our use case, we kept track of all logins from a certain vendor, which is pretty much O(n) cardinality, so same as KEYS command ▪SCARD simply returns the size of a given set with cardinality of O(1), so it can be used safely in production ▪ SCARD “spring:session:index:org.springframework.session.FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME:UI_USERS" ▪INFO provides valuable information (such as instantaneous_ops_per_sec) and can be safely used in production.
  • 25. 
Information Security Level 2 – Sensitive © 2017 – Proprietary & Confidential Information of Amdocs25
  • 26. 
Information Security Level 2 – Sensitive © 2017 – Proprietary & Confidential Information of Amdocs26
  • 27. 
Information Security Level 2 – Sensitive © 2017 – Proprietary & Confidential Information of Amdocs27 #6 Inside Spring Session Redis ▪What happens when your system is completely idle (0 users)? ▪You would expect redis to be idle as well ▪However…
  • 28. 
Information Security Level 2 – Sensitive © 2017 – Proprietary & Confidential Information of Amdocs28 #6 Inside Spring Session Redis ▪Multiple logins using: ▪for ((i=1;i<=10000000;i++)); 
 do curl -s -u gateway:password localhost:8080/user >/dev/null; done ▪One would expect consistent load on 
 redis, but in reality, we got:
  • 29. 
Information Security Level 2 – Sensitive © 2017 – Proprietary & Confidential Information of Amdocs29 #6 Inside Spring Session Redis
  • 30. 
Information Security Level 2 – Sensitive © 2017 – Proprietary & Confidential Information of Amdocs30 #6 Inside Spring Session Redis ▪Time to dig into the code… (thanks, open source!) ▪Inside RedisOperationsSessionRepository:
 @Scheduled(cron = "${spring.session.cleanup.cron.expression:0 * * * * *}") public void cleanupExpiredSessions() { this.expirationPolicy.cleanExpiredSessions(); } ▪cleanupExpiredSessions() would loop over expired keys, delete them, and “touch” them to make sure they are immediately deleted. ▪This means that by default, every minute on the minute, Spring will call delete on every expired key in Redis.
  • 31. 
Information Security Level 2 – Sensitive © 2017 – Proprietary & Confidential Information of Amdocs31 #6 Inside Spring Session Redis ▪Why? Redis can self-expire keys just fine, thank you very much ▪The main reason: ▪Spring wants to conduct cleanup activities when a session is expired. ▪The API exposes SessionDeletedEvent and SessionExpiredEvent to let the program cleanup a user’s session (close web sockets, notify SSO server etc.) ▪Spring needs the session details available when the cleanup activity is performed
  • 32. 
Information Security Level 2 – Sensitive © 2017 – Proprietary & Confidential Information of Amdocs32 #6 Inside Spring Session Redis ▪To solve this issue, two separate keys are managed for each session ▪An “expiration notification” key expires after 30 minutes ▪The actual session details key expires 5 minutes later HMSET spring:session:sessions:33fdd1b6-b496-4b33-9f7d-df96679d32fe creationTime 1404360000000 maxInactiveInterval 1800 lastAccessedTime 1404360000000 sessionAttr:attrName someAttrValue sessionAttr2:attrName someAttrValue2 EXPIRE spring:session:sessions:33fdd1b6-b496-4b33-9f7d-df96679d32fe 2100 APPEND spring:session:sessions:expires:33fdd1b6-b496-4b33-9f7d-df96679d32fe "" EXPIRE spring:session:sessions:expires:33fdd1b6-b496-4b33-9f7d-df96679d32fe 1800 SADD spring:session:expirations:1439245080000 expires:33fdd1b6-b496-4b33-9f7d- df96679d32fe EXPIRE spring:session:expirations1439245080000 2100
  • 33. 
Information Security Level 2 – Sensitive © 2017 – Proprietary & Confidential Information of Amdocs33 #6 Inside Spring Session Redis ▪Redis guarantees expired keys would be passively cleaned, but makes no guarantees on when ▪Spring Session Redis wants to make sure the “expire” key is expired within the 5 minutes window. ▪For this reason, the cronjob updates the expired keys every minute ▪But, there is a risk here…
  • 34. 
Information Security Level 2 – Sensitive © 2017 – Proprietary & Confidential Information of Amdocs #6 Inside Spring Session Redis 34 Tomcat Tomcat Tomcat Tomcat Tomcat Tomcat Jetty Session Data
  • 35. 
Information Security Level 2 – Sensitive © 2017 – Proprietary & Confidential Information of Amdocs35 #6 Inside Spring Session Redis Session Data Tomcat Tomcat Tomcat Tomcat Tomcat Tomcat Jetty
  • 36. 
Information Security Level 2 – Sensitive © 2017 – Proprietary & Confidential Information of Amdocs36 #6 Inside Spring Session Redis ▪To recap: ▪Every minute, each server tries to delete all “expires” keys. ▪A lot of redundant calls, since only the first instance would actually achieve this purpose. ▪Redis would then notify every instance that the “expires” key was deleted. ▪Every instance would then connect to Redis to get the session details about the expiring session to handle the expiration. ▪A little bit of math: ▪100 servers * 2500 expiring sessions = 500,000 access at the same second ▪The more you scale, the bigger the problem
  • 37. 
Information Security Level 2 – Sensitive © 2017 – Proprietary & Confidential Information of Amdocs37 #6 Inside Spring Session Redis Solutions: ▪ If you don’t care about session expiration events, set the cron job to an impossible value such as February 31st:
 
 spring.session.cleanup.cron.expression=0 0 5 31 2 ? ▪ You can also disable registering to those expiration and deletion events. Note that all servers need to disable the registering for this to work:
 
 @EnableRedisHttpSession public class RedisOperationsSessionRepositoryConfigNoOp { @Bean public static ConfigureRedisAction configureRedisAction() { return ConfigureRedisAction.NO_OP; } }
  • 38. 
Information Security Level 2 – Sensitive © 2017 – Proprietary & Confidential Information of Amdocs38 #6 Inside Spring Session Redis ▪If you do care about session expiration events, set only a specific instance(s) to handle those events. ▪On all other servers, disable receiving the events:
 @EnableRedisHttpSession public class RedisOperationsSessionRepositoryConfigNoListener { @Bean public RedisMessageListenerContainer redisMessageListenerContainer( RedisConnectionFactory connectionFactory, RedisOperationsSessionRepository messageListener) { return new RedisMessageListenerContainer(); } }
  • 39. 
Information Security Level 2 – Sensitive © 2017 – Proprietary & Confidential Information of Amdocs39 To Recap ▪Be prepared to scale ▪Monitor well, monitor with caution ▪Open source rocks 🤟. Get involved! Tweak the framework for your own use case.