Du cache pour vos applications:
oui et sans Varnish
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/6947467/gopher.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/9091540/Screenshot_2021-11-09_at_00.10.52.png)
Slides 👉
![](https://s3.amazonaws.com/media-p.slid.es/imports/835108/QjJw20kG/QjJw20kG_001.png)
Sylvain Combraque
Smersh co-author pentest tool
Træfik helper
Cache-handler maintainer
Open-source contributor
@darkweak
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/5585364/1024px-Octicons-mark-github.svg.png)
@darkweak_dev
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/5593136/twitter.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/6947481/ZVbOcszq_400x400.jpg)
Bricks
🚀 100M req/j
🇫🇷 French tech
👷 jobs@bricksfounders.com
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/5593233/logo-2.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/5593232/logo.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/5593231/2000px-Go_Logo_Aqua.svg.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/5593229/1300px-Docker_container_engine_logo.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/8962371/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/9022589/Screenshot_2021-10-16_at_02.12.28.png)
🇫🇷 French tech
👷 rejoindre@nexflow.org
👷 wilfried.biston@nexflow.org
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/5593232/logo.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/5593229/1300px-Docker_container_engine_logo.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/5593228/1280px-React-icon.svg.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/9396974/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/9396977/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/9396988/Capture_d_écran_2022-03-10_à_11.03.40.png)
What does the cache word mean
- Save temporary data from a source
- Decrease the access time
A concrete example
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/8963226/Librarian.png)
A concrete example
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/8963226/Librarian.png)
Bonjour, j'aimerai savoir de quoi parle Harry Potter
Très bien, laissez-moi quelques secondes
A concrete example
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/8963091/Librarian.png)
A concrete example
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/8963226/Librarian.png)
C'est un roman fantastique qui traite de la magie
A concrete example
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/8963226/Librarian.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/8963224/Bald-man.png)
A concrete example
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/8963226/Librarian.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/8963225/publicdomainq-got.png)
A concrete example
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/8963226/Librarian.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/8963225/publicdomainq-got.png)
Bonjour, j'aimerai savoir de quoi parle Harry Potter
C'est un roman fantastique qui traite de la magie
A concrete example
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/8963226/Librarian.png)
In the IT world
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/8995455/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/9063429/pasted-from-clipboard.png)
Client
Interact with the cache
CDN provider
Reverse-proxy
Application
Client
Interact with the cache
CDN provider
Reverse-proxy
Application
HTTP headers Surrogate-keys, Cache-Tag, Edge-Cache-Tag, Cache-Tags
HTTP headers Cache-control, Expires, ETag
Ykeys, XKeys, internal system
internal system
Client
CDN provider
Reverse-proxy
Application
✅
Easy developer-level interactions
✅
✅
❌
❌
❌
❌
Application
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/8995525/Capture_d_écran_2021-10-08_à_00.28.32.png)
Application
Pros
Cons
- Own cache strategy
- Application context
- Re-implementation
- Language dependant
- Service storage dependant
- No cache directives handling
- Less performant than upper
- PHP pool used
- No CDN provider invalidation
Pros
Cons
- HTTP normalized cache system
- Service resolution
Between the reverse-proxy and the application
- Invalidation request
- Less CPU activity
- Inside the deployed stack/pod
- Language independent
- No PHP pool used
- No CDN provider invalidation
Inside the reverse-proxy
![](https://upload.wikimedia.org/wikipedia/commons/thumb/7/7e/Apache_Feather_Logo.svg/1200px-Apache_Feather_Logo.svg.png)
![](https://img.icons8.com/color/452/nginx.png)
![](https://caddyserver.com/resources/images/caddy-open-graph.jpg)
![](https://nordicapis.com/wp-content/uploads/tyk-logo.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/5593231/2000px-Go_Logo_Aqua.svg.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/8995550/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/8995554/pasted-from-clipboard.png)
Pros
Cons
- No service resolution
- Reverse-proxy dependant
- Invalidation request
- Outside the deployed stack
Inside the reverse-proxy
- No native CDN provider invalidation
What about GraphQL
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/9352240/pasted-from-clipboard.png)
GraphQL
RPC-like
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/7964425/1_odlr0di3IFkR9RxagoTL-g.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/7964426/1_9x2Kug-Ir7qewUKgwXu7Vw.png)
GraphQL
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/9352246/Screenshot_2022-02-20_at_23.39.26.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/9352247/Screenshot_2022-02-20_at_23.39.57.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/9352248/Screenshot_2022-02-20_at_23.40.22.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/9352249/Screenshot_2022-02-20_at_23.40.48.png)
GraphQL
{
me {
name
}
}
http://myapi/graphql?query={me{name}}
{
"query": "...",
"operationName": "...",
"variables": { "myVariable": "someValue", ... }
}
How to deal with that to cache the data
Has mutations ?
Generate a hash
Set hash as key part
GET-/my/graphql/endpoint?query={me{name}}
POST-/my/graphql/endpoint-{{ HASH }}
PUT-/my/graphql/endpoint-{{ HASH }}
DELETE-/my/graphql/endpoint-{{ HASH }}
Samples
Not really dry solution
Client-side solutions
urql
micro-graphql-react
Apollo
Section
Server-side solution
Feedbacks needed
I want a system to handle the CDN invalidation and the cache invalidation requests...
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/7683691/Capture_d_écran_2020-09-01_à_01.28.55.png)
github.com/darkweak/Souin
Leave a ⭐️ on Github
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/8995564/Capture_d_écran_2021-10-08_à_01.05.05.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/9436106/Screenshot_2022-03-24_at_15.48.46.png)
default_cache:
ttl: 10s
2 lines to configure
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/5613957/1200px-Logo_Cloudflare.svg.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/9000143/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/9000145/pasted-from-clipboard.png)
API & CDN
api:
souin: {}
cdn:
api_key: XXXX
provider: fastly
strategy: soft
Compatibility
![](https://upload.wikimedia.org/wikipedia/commons/thumb/7/7e/Apache_Feather_Logo.svg/1200px-Apache_Feather_Logo.svg.png)
![](https://img.icons8.com/color/452/nginx.png)
![](https://caddyserver.com/resources/images/caddy-open-graph.jpg)
![](https://nordicapis.com/wp-content/uploads/tyk-logo.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/9378947/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/9378951/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/9378953/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/9378965/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/9378966/pasted-from-clipboard.png)
One more thing
One more thing
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/5593253/API-platform.png)
composer require darkweak/souin-api-platform-bundle
One more thing
![](https://s3.amazonaws.com/media-p.slid.es/uploads/835108/images/5593253/API-platform.png)
https://github.com/api-platform/core/pull/4540
Thank you for your attention
![](https://media.giphy.com/media/LpiHFtzyFTqe3AaT33/giphy.gif)
Questions ?
![](https://media2.giphy.com/media/vdbrUjzrUEGly/giphy.gif)
Du cache pour vos applications, oui
By darkweak
Du cache pour vos applications, oui
- 414