Successfully reported this slideshow.
A LA DECOUVERTE D EZPLATFORM / EZSTUDIO
USER MEETING EZ + VARNISH
www.ez.no
En chiffres
Skien
New York Lisbon
Paris
Oslo
Tokyo
Lion
Cologne
Katowice
45.000+
Membres
80 employés
250.000+
In...
www.ez.no
Nos clients
DÉCOUVREZ EZPLATFORM / EZSTUDIO
WHY WE DITCHED OUR LEGACY FRAMEWORK FOR SYMFONY
- A JOURNEY TO SYMFONY2 (FULL STACK)
ezplatform.com
eZ Platform
ezplatform.com
eZ Platform
ezplatform.com
eZ Platform
© https://unsplash.com/photos/osSryggkso4
ezplatform.com
eZ Platform - API
www.ez.no
www.ez.no
eZ Platform – Type de contenu
FieldTypeName
www.ez.no
eZ Platform - Versions
www.ez.no
eZ Platform – Statut des contenus
www.ez.no
eZ Platform - Multilangues
Locations ?
www.ez.no
eZ Platform – Top Locations
www.ez.no
eZ Platform – Multiple emplacements
SiteAccess ?
www.ez.no
eZ Platform – SiteAccess
Fourni plusieurs sites en une seule installation
• Même contenu, différentes langues
• ...
www.ez.no
eZ Platform –Configuration des accès
• URI http://www.example.com/fre
• Host http://www.example.com
• Port http:...
www.ez.no
eZ Platform – Exemple de SiteAccess
HTTP Cache ?
www.ez.no
eZ Platform – Headers !
Varnish
{cache|project|plus|software}
Guillaume Quintard
guillaume@varni.sh
Varnish Cache
- Serveur de cache HTTP
- Open-source
- Rapide, très rapide
- Extrêmement flexible
- Géré par Varnish Project
Varnish Software
- Créateur de Varnish Cache
- ~40 en Europe + USA
- Maintient Varnish Cache Plus
- Vend l’offre Varnish P...
Points d’architecture
- VCL: Configuration Language
- VMODS: MODules
- VSL: Shared Log
- 2 CVE (mineures) en 10 ans
VCL
VCL
sub vcl_recv {
if (req.url ~ “^/admin/”) {
return (pass);
}
}
Points d’architecture
- VCL: Configuration Language
- VMODS: MODules
- VSL: Shared Log
- 2 CVE (mineures) en 10 ans
Varnish Custom Statistics
Guillaume Quintard
guillaume@varni.sh
VCS: bases
- Basé sur le VSL et ZMQ
- Regroupe les requêtes par
tag+période
- Plusieurs tags par requêtes
- Par instance, ...
API: liste
GET /all:
{
"keys": [
"URL/repo.varnish-cache.org/debian/dists/jessie/varnish-3.0/i18n/Translation-fr.gz",
"URL...
API: recherche
GET /match/HOST:
{
"keys": [
"HOST/old.varnish-cache.org",
"HOST/planet.varnish-cache.org",
"HOST/repo.varn...
API: stats
GET key/HOST%2Flists.varnish-
cache.org:
{
"HOST/lists.varnish-cache.org": [
{
"timestamp": "2016-04-15T10:02:0...
Insertion de tag
import std;
sub vcl_recv {
std.log(“vcs-key: URL/” + req.url)
if (req.url ~ “^/admin/”) {
std.log(“vcs-ke...
Application
Coté Varnish
sub vcl_deliver {
if (resp.http.x-vcs == "true") {
std.log("vcs-key: ART-" +
resp.http.x-vcs-title +
"@" + re...
A/B testing
Guillaume Quintard
guillaume@varni.sh
Au delà du buzzword
Méthodologie:
1.Définir deux variantes (A et B) d’un
élément.
2.Séparer les utilisateurs en deux
group...
Points de friction
Méthodologie:
1.Définir deux variantes (A et B) d’un
élément.
2.Séparer les utilisateurs en deux
groupe...
Version simplifée
- Varnish attribue les groupes A/B
suivant un ratio X/Y.
- On peut enregistrer les accès à TOUS
les obje...
Coté Varnish: groupe
sub vcl_deliver {
if (cookie.get("abgroup") == "A" || req.http.x-group == "A") {
set req.http.x-group...
Coté Varnish: cookies
sub vcl_deliver {
header.append(resp.http.set-cookie,
"abgroup=" + req.http.x-group +
"; Expires=" +...
Coté Varnish: accès
sub vcl_deliver {
std.log(“vcs-key: access“ + req.http.x-group);
}
Résultats
Il reste à comparer:
50/50
et
accessA/accessB
Bash, mon amour
n() {
curl http://127.0.0.1:8888/key/$1 -s| 
jq ".[][1].n_req";
}
echo $(n accessA) / $(n accessB) | bc -l
QUESTIONS ?
DEMO
UserGroup Varnish - eZ
UserGroup Varnish - eZ
Prochain SlideShare
Chargement dans…5
×

UserGroup Varnish - eZ

375 vues

Publié le

UserGroup présentant les produits eZ Platform, eZ Studio, Varnish Cache et Varnish Cache Statistics

Publié dans : Internet
  • Soyez le premier à commenter

UserGroup Varnish - eZ

  1. 1. A LA DECOUVERTE D EZPLATFORM / EZSTUDIO USER MEETING EZ + VARNISH
  2. 2. www.ez.no En chiffres Skien New York Lisbon Paris Oslo Tokyo Lion Cologne Katowice 45.000+ Membres 80 employés 250.000+ Installations 200+ Partneraires 5M+ Téléchargements Des utilisateurs dans 160 pays Commercial Open Source
  3. 3. www.ez.no Nos clients
  4. 4. DÉCOUVREZ EZPLATFORM / EZSTUDIO WHY WE DITCHED OUR LEGACY FRAMEWORK FOR SYMFONY - A JOURNEY TO SYMFONY2 (FULL STACK)
  5. 5. ezplatform.com eZ Platform
  6. 6. ezplatform.com eZ Platform
  7. 7. ezplatform.com eZ Platform
  8. 8. © https://unsplash.com/photos/osSryggkso4
  9. 9. ezplatform.com eZ Platform - API
  10. 10. www.ez.no
  11. 11. www.ez.no eZ Platform – Type de contenu FieldTypeName
  12. 12. www.ez.no eZ Platform - Versions
  13. 13. www.ez.no eZ Platform – Statut des contenus
  14. 14. www.ez.no eZ Platform - Multilangues
  15. 15. Locations ?
  16. 16. www.ez.no eZ Platform – Top Locations
  17. 17. www.ez.no eZ Platform – Multiple emplacements
  18. 18. SiteAccess ?
  19. 19. www.ez.no eZ Platform – SiteAccess Fourni plusieurs sites en une seule installation • Même contenu, différentes langues • Contenu partiel • Différents contenus pour différents sites ( ex: usine à site, plateforme de blog, … )
  20. 20. www.ez.no eZ Platform –Configuration des accès • URI http://www.example.com/fre • Host http://www.example.com • Port http://www.example.com:81 • HostText http://www.example.com
  21. 21. www.ez.no eZ Platform – Exemple de SiteAccess
  22. 22. HTTP Cache ?
  23. 23. www.ez.no eZ Platform – Headers !
  24. 24. Varnish {cache|project|plus|software} Guillaume Quintard guillaume@varni.sh
  25. 25. Varnish Cache - Serveur de cache HTTP - Open-source - Rapide, très rapide - Extrêmement flexible - Géré par Varnish Project
  26. 26. Varnish Software - Créateur de Varnish Cache - ~40 en Europe + USA - Maintient Varnish Cache Plus - Vend l’offre Varnish Plus incluant VCP, outils, packaging, support, conseil et formations.
  27. 27. Points d’architecture - VCL: Configuration Language - VMODS: MODules - VSL: Shared Log - 2 CVE (mineures) en 10 ans
  28. 28. VCL
  29. 29. VCL sub vcl_recv { if (req.url ~ “^/admin/”) { return (pass); } }
  30. 30. Points d’architecture - VCL: Configuration Language - VMODS: MODules - VSL: Shared Log - 2 CVE (mineures) en 10 ans
  31. 31. Varnish Custom Statistics Guillaume Quintard guillaume@varni.sh
  32. 32. VCS: bases - Basé sur le VSL et ZMQ - Regroupe les requêtes par tag+période - Plusieurs tags par requêtes - Par instance, ou par cluster - API REST pour accèder aux valeurs
  33. 33. API: liste GET /all: { "keys": [ "URL/repo.varnish-cache.org/debian/dists/jessie/varnish-3.0/i18n/Translation-fr.gz", "URL/repo.varnish-cache.org/ubuntu/dists/lucid/varnish-3.0/i18n/Translation-pt_BR.gz", "URL/repo.varnish-cache.org/ubuntu/dists/utopic/varnish-4.0/i18n/Translation-en.gz", "URL/repo.varnish-cache.org/ubuntu/dists/jessie/varnish-4.0/i18n/Translation-en", "URL/repo.varnish-cache.org/debian/dists/precise/varnish-4.1/binary-i386/?C=D;O=D", ...
  34. 34. API: recherche GET /match/HOST: { "keys": [ "HOST/old.varnish-cache.org", "HOST/planet.varnish-cache.org", "HOST/repo.varnish-cache.org:80", "HOST/varnish-cache.org", "HOST/repo.varnish-cache.org", "HOST/www.varnish-cache.org", "HOST/lists.varnish-cache.org", ...
  35. 35. API: stats GET key/HOST%2Flists.varnish- cache.org: { "HOST/lists.varnish-cache.org": [ { "timestamp": "2016-04-15T10:02:00+00", "n_req": 1, "n_req_uniq": "NaN", "n_miss": 0, "avg_restarts": 0.000000, "n_bodybytes": 0, "ttfb_miss": "NaN", "ttfb_hit": 0.000082, "resp_1xx": 0, "resp_2xx": 0, "resp_3xx": 1, "resp_4xx": 0, "resp_5xx": 0 }, ...
  36. 36. Insertion de tag import std; sub vcl_recv { std.log(“vcs-key: URL/” + req.url) if (req.url ~ “^/admin/”) { std.log(“vcs-key: ADMIN”); return (pass); } }
  37. 37. Application
  38. 38. Coté Varnish sub vcl_deliver { if (resp.http.x-vcs == "true") { std.log("vcs-key: ART-" + resp.http.x-vcs-title + "@" + resp.http.x-vcs-image + "@http://" + req.http.host + regsub(req.url, "?.*", "") ); } }
  39. 39. A/B testing Guillaume Quintard guillaume@varni.sh
  40. 40. Au delà du buzzword Méthodologie: 1.Définir deux variantes (A et B) d’un élément. 2.Séparer les utilisateurs en deux groupes (A et B) et livrer à chaque groupe la variante correspondante. 3.Choisir la meilleure variante.
  41. 41. Points de friction Méthodologie: 1.Définir deux variantes (A et B) d’un élément. 2.Séparer les utilisateurs en deux groupes (A et B) et livrer à chaque groupe la variante correspondante. 3.Choisir la meilleure variante.
  42. 42. Version simplifée - Varnish attribue les groupes A/B suivant un ratio X/Y. - On peut enregistrer les accès à TOUS les objets, et calculer le ratio X’/Y’ Il suffit de comparer X/Y et X’/Y’.
  43. 43. Coté Varnish: groupe sub vcl_deliver { if (cookie.get("abgroup") == "A" || req.http.x-group == "A") { set req.http.x-group = "A"; } else if (cookie.get("abgroup") == "B" || req.http.x-group == "B") { set req.http.x-group = "B"; } else if (std.random(0, 100) < 50) { set req.http.x-group = "A"; } else { set req.http.x-group = "B"; } }
  44. 44. Coté Varnish: cookies sub vcl_deliver { header.append(resp.http.set-cookie, "abgroup=" + req.http.x-group + "; Expires=" + cookie.format_rfc1123(now, 1h) + "; httpOnly"); }
  45. 45. Coté Varnish: accès sub vcl_deliver { std.log(“vcs-key: access“ + req.http.x-group); }
  46. 46. Résultats Il reste à comparer: 50/50 et accessA/accessB
  47. 47. Bash, mon amour n() { curl http://127.0.0.1:8888/key/$1 -s| jq ".[][1].n_req"; } echo $(n accessA) / $(n accessB) | bc -l
  48. 48. QUESTIONS ? DEMO

×