Академический Документы
Профессиональный Документы
Культура Документы
www.octo.com - blog.octo.com
Table des
ma+ires
O1 Scaler naturellement ________________________________________________ 08-15
2
Les principes suivants sont utiles en tout cas pour rpondre aux diffrents enjeux de
vos applications.
IaaS CaaS PaaS BaaS SaaS
Services (OS, Services (OS, Services (OS, Services (OS, Services (OS,
middleware, middleware, middleware, middleware, middleware,
conteneur) conteneur) conteneur) conteneur) conteneur)
Dveloppement interne
Fourni dans loffre de cloud
Scaler
na+urel-
lement
10 1000 10M
100 1M 100M
OCTO > CLOUD READY APPS > SCALER
Scaler
Naturellement
SAPPUYER INTELLIGEMMENT
SUR LE CLOUD
nvisager en priorit lutilisation des services manags, nativement rsilients et scalables fournis
E
par les plateformes cloud: PaaS, services de persistance et de cache, BaaS
Patterns: SaaS (Ex. Salesforce, AWS RDS, AWS ElastiCache), PaaS (Ex. Heroku, AWS Lambda),
BaaS (Ex. Parse, Kumulos).
CONCEVOIR
POUR LA SCALABILIT
P our simplifier llasticit et ladaptation rapide la charge, lapplication doit embarquer des
mcanismes facilitant sa scalabilit.
L a scalabilit horizontale offre une approche plus extensible tout en contribuant viter les SPOF,
mme si elle est plus complexe mettre en uvre que la scalabilit verticale.
Il est prfrable de dplacer le traitement plutt que les donnes lorsquelles sont volumineuses.
Le cloud offre en effet la possibilit dallouer aisment des capacits de traitement en diffrentes
zones.
Patterns : Load balancer, sharding, shared nothing, microservices.
OCTO > CLOUD READY APPS > SCALER
Pattern
Microservices
Approche darchitecture de SI visant modulariser le SI en privilgiant des services plus petits,
ports chacun par une quipe ddie. Par opposition une approche plus intgre/monolithique,
une architecture en microservices :
C
larifie les responsabilits par la matrialisation des frontires.
L imite la complexit locale et ainsi fiabilise les dveloppements.
R
end les couplages plus faibles, ce qui facilite les changements et donc linnovation.
P
ermet dutiliser des technologies diffrentes.
A
utorise grer la scalabilit en permettant de la grer un niveau plus fin.
9 A
utorise grer la haute disponibilit un niveau plus fin.
Cette approche est toutefois plus exigeante en termes dorganisation, du fait de la ncessit de
coordonner les changements et les dploiements. Par ailleurs, les liens entre services augmentent
la complexit globale et leur mise en place peut tre coteuse.
EXEMPLE
Services offerts
par AWS
pour la scalabilit
1. Route 53 : Service de DNS qui peut tre 7. ElasticCache : Service de cache
utilis pour router le trafic au niveau DNS compatible avec les protocoles Redis et
entre plusieurs rgions, en dtectant au Memcached.
besoin si une rgion est indisponible.
10
8. S3 : Single Storage Service. Service de
2. ELB : Service permettant de rpartir stockage objet illimit grant des fichiers
la charge entre plusieurs instances AWS, dune taille allant jusqu 5TB (en septembre
en dtectant au besoin si lune delles est 2016).
indisponible.
9. CloudFront : Service de CDN (Content
3. Cloud Watch : Service de surveillance Delivery Network) proposant des points
des instances et applications qui permet de prsence sur toute la surface du globe
notamment de donner des alertes lAuto ce qui permet de diminuer la latence et
Scaling Group. de rduire les cots en servant un cache
HTTP depuis une localisation plus proche
4. Auto Scaling Group : Service permettant de lutilisateur.
daugmenter ou de rduire le nombre
dinstances AWS en fonction de mtriques
CloudWatch. Remarque:
La haute disponibilit et la scalablit
5. RDS : Relation Data Service. Service de ces services sont assures par la
manag de bases de donnes relationnelles. plateforme AWS.
Amazon CloudFront
1 9
Amazon Web / API
Route 53
shorturl web/core
web /
shorturl user /
data data transfer
4 7
11
CACHE
Auto Scaling Group Auto Scaling Group
Amazon
Elasticache
Business
logic
download managers
statistics
5
Amazon RDS
Auto Scaling Group Auto Scaling Group
3
App-generated
File Transfer data
stats for
Auto Scaling
8 workers Amazon
6
CloudWatch
App health
monitoring
Amazon S3
Auto Scaling Group
Amazon
DynamoDB Health Status
Notifications
OCTO > CLOUD READY APPS > SCALER
EXEMPLE
Implmentation
scalable
Au niveau du stockage de donnes vous les utiliser au mieux vous permet de choisir
concevez votre application en tenant la ressource la moins chre disponible
compte du sharding des donnes (1). Il ce moment prcis. Pour cela, vous devez
sagit du premier prrequis la scalabilit. penser votre application pour quelle soit
Les systmes de stockage actuels NoSQL capable dtre arrte et redmarre en
qui abstraient ce concept restent trs rares. plein traitement. AWS offre par exemple un
Leur optimisation ncessite dans tous les mcanisme denchres avec ses instances
cas de matriser ds la conception les choix Spot qui autorisent consommer de la
12
faits au niveau du sharding des donnes. puissance supplmentaire tant que son
prix est infrieur un seuil fix. Lorsque le
Supporter du load balancing (2) permet prix remonte, la machine est arrte sous
quune requte soit traite par une instance 2 minutes. La capacit de fast startup &
de lapplication, la requte suivante par graceful shutdown (5) est ici indispensable.
une seconde instance. De cette faon, vous
pourrez augmenter le nombre dinstances
pour grer plus de trafic. Cela impose une
gestion trs stricte des tats dans le code.
Pouvoir sexcuter sans faire dhypothse
sur son emplacement physique permet
enfin daller un cran plus loin en excutant
potentiellement linstance sur une autre
machine, voire dans un autre data-
center. Cest ce quon appelle la location
transparency (3). Je veux accder mon
fichier local, je veux lire les logs de cette
instance, ces rflexes doivent tre perdus.
Enfin, une application qui peut sexcuter
sur une machine de faible puissance, avec
de multiples curs disponibles, et qui sait
OCTO > CLOUD READY APPS > SCALER
1. Sharding :
Le sharding dcrit ainsi un ensemble
de techniques qui permettent de
rpartir les donnes sur plusieurs
machines pour assurer la scalabilit de
larchitecture.
2. Load balancer :
Composant rseau ou applicatif qui 2
rpartit les requtes sur diffrentes
instances de faon quilibrer la charge.
Amazon ELB est par exemple un service
de load balancing fourni par AWS.
3. Location transparency : 3 5
Mcanisme de dcouplage permettant A A
13
lmetteur de ne pas connatre la
localisation du rcepteur. Par exemple
DNS, reverse proxy
4. Shared Nothing :
Pattern darchitecture dans lequel A
les nuds dun systme distribu ne
partagent ni disque, ni mmoire et qui
ne prsente aucun point unique de
dfaillance (Single Point of Failure).
Assurer
sur la
14
quali+
de service
OCTO > CLOUD READY APPS > SCALER
15
OCTO > CLOUD READY APPS > QUALIT DE SERVICE
Assurer
sur la qualit de service
MESURER, APPRENDRE,
AMLIORER
ollecter des mesures dtailles tous les niveaux (systme, middleware, application) pour
C
connatre lexprience client (UX), lanalyser et lamliorer.
endre la performance visible et accessible tous les acteurs, dans le cadre dun programme de
R
performance en continu aux objectifs partags et explicites.
Patterns: Centralized monitoring, Correlation ID, Continuous performance.
16 CONCEVOIR
POUR LE SERVICE
R
echercher la simplicit et la maintenabilit : volutivit, exploitabilit, dployabilit.
A
ppliquer les patterns en fonction de besoins avrs.
T
enir compte des forces et faiblesses de lenvironnement (infrastructure, middlewares, services
cloud).
P
enser lutilisateur : soigner lUX en sattachant au ressenti du client, prvoir un mode dgrad
en cas dimprvu.
Patterns : KISS, Graceful degradation, Microservices.
Patterns
Centralized monitoring
Avec la possibilit dajouter et de retirer une instance de serveur tout moment, il est difficile de
consulter les logs locaux sur un grand nombre de machines. De plus, ces fichiers locaux peuvent
disparatre tout moment avec les instances associes, rendant la tche totalement impossible.
Il est donc ncessaire dsormais de centraliser lensemble des logs. Par exemple dans une stack
Elastic (Elasticsearch, Logstash et Kibana).
17
Continuous performance
Processus visant tester et mesurer la performance du systme de manire continue, du
dveloppement la production.
18
Graceful degradation
Adaptation automatique de lapplication une situation dgrade (perte dune partie de
linfrastructure, taille dcran de lutilisateur rduite, fonctionnalit non supporte par le navigateur
cible, bande passante rduite, etc.).
ERREUR
OCTO > CLOUD READY APPS > QUALIT DE SERVICE
Lambda architecture
Une architecture lambda combine deux types de traitements sur les donnes :
T
raitements batch , gnrant intervalles rguliers des rsultats prcalculs.
T
raitements temps rel , gnrant des rsultats la demande.
Cette combinaison permet de fournir des rsultats actualiss malgr des calculs potentiellement
coteux et des donnes dentre changeant rapidement.
Donnes Traitement
de prcalcul temps rel
Rsultat
temps rel
19
Batch Vue
de prcalcul prcalcule
Bulkhead
La dfaillance dun systme externe peut rapidement mettre en pril lensemble du service. Pour
lutter contre cela, le pattern bulkhead permet disoler les appels. la manire des caissons tanches
de bateau, il permet de protger le systme dune dfaillance localise qui se transformera en
dfaillance globale.
Un exemple dimplmentation de ce pattern est lutilisation de deux pools de connexions pour
quune saturation de lun nimpacte pas lautre.
(https://github.com/Netflix/Hystrix/wiki/How-it-Works#isolation)
OCTO > CLOUD READY APPS > QUALIT DE SERVICE
Bulkhead 1
Bulkhead 2
Bulkhead 3
Request collapsing
20 Pattern applicatif permettant de limiter le nombre dappels distants en regroupant plusieurs
requtes pour nen faire quune. Netflix Hystrix implmente ce pattern par exemple. Cela peut
servir limiter :
la charge rseau,
limpact dune latence rseau leve,
les cots dans le cadre de licences la requte.
Request 1
Response 1
Request 1+2+3
COLLAPSER
BACKEND
CLIENT
Request 2
Response 1+2+3
Response 2
Request 3
Response 3
OCTO > CLOUD READY APPS > QUALIT DE SERVICE
Request redundancy
Pattern qui consiste envoyer une mme requte plusieurs systmes distincts afin dutiliser le
rsultat de la rponse la plus rapide. Le but est doptimiser le temps de rponse. Google lutilise
par exemple pour son moteur de recherche.
Request 1
x BACKEND
"REDUNDER"
Request 1
CLIENT
Request 1 Backends
Response 1 BACKEND identiques
x
Request 1
BACKEND
x
21
Request queuing
Pattern applicatif consistant mettre les requtes en attente afin dviter une surcharge du systme.
Netflix Hystrix, par exemple, le permet ct client. Ce pattern permet un couplage asynchrone, donc
plus faible, des deux parties. Ainsi, les deux parties sont moins couples en termes de disponibilit,
ce qui peut permettre dabsorber des dfaillances ou de faciliter le dploiement de mises jour.
Request 1 Request 1
Request 2 Response 1
BACKEND
CLIENT
QUEUE
Response 1 Request 2
Response 2 Response 2
OCTO > CLOUD READY APPS > QUALIT DE SERVICE
Circuit breaker
En fonction dun certain nombre de critres derreur (timeout, nombre derreurs), ce pattern
permet de dsactiver lenvoi de requtes au Service 2 et de renvoyer immdiatement une rponse
alternative.
Il agit comme un proxy implmentant une machine tats (Ouvert, Passant (ferm), Semi-ouvert)
pour lapprentissage de ltat du service.
Service 1 Service 2
Rponse alternative
Rponse alternative
22 Rponse attendue
Service 1 Service 2
Rponse alternative
Rponse alternative
Idempotence
Une fois le service rtabli, la requte en chec peut potentiellement tre relance. Ceci nest
possible que Rponse attendue
si le Service 2 est capable dtre idempotent : n envois successifs de la mme
commande conduiront toujours au mme tat.
Il peut par exemple tre implment en conservant un identifiant unique pour chaque requte et
en ignorant les futures occurrences des requtes avec le mme identifiant.
Service 1 Service 2
23
Ajoute 23 au compte A Message dj trait,
le traitement nest pas rappliqu
99,99%
24
de dispo-
nibili+
OCTO > CLOUD READY APPS > QUALIT DE SERVICE
25
OCTO > CLOUD READY APPS > DISPONIBLIT
99,99%
de disponibilit
CONCEVOIR
POUR LA DISPONIBILIT
viter les points uniques de dfaillance SPOF (Single Point Of Failure).
D
iviser lapplication en composants faiblement coupls.
C
oncentrer les tats persistants dans quelques composants scalables.
P
rvoir et grer les erreurs pour matriser leur propagation tout en conservant les traces
pour analyse.
Patterns: APIs, Microservices, Asynchronous data exchanges, Bulkheads, Idempotence,
Health check.
26
COMPOSER
AVEC LES DFAILLANCES
A
ccepter quen environnement fortement distribu, la probabilit derreur ne soit plus ngligeable.
tre capable de dtecter un composant dfaillant, et instancier tout moment le ou les composants
de lapplication pour rpondre aux pannes et retrouver un comportement nominal ou un niveau
dgrad acceptable.
Patterns : Pets vs. Cattle, Timeouts, Circuit Breakers, Fast Startup and Graceful Shutdown, Design
For Failure.
prouver et entraner sa capacit grer les diffrents incidents de production pour une meilleure
ractivit lors des vritables incidents : crash dun processus, erreur systme, perte de serveur,
indisponibilit dune zone gographique du cloud, perte de lien rseau...
Patterns : Simian Army, Test dendurance, Test de robustesse.
OCTO > CLOUD READY APPS > DISPONIBLIT
Patterns
Service 1 Service 2
27
Timeout
Temps dattente maximal pour chaque appel.
Ce principe gnral peut tre implment en utilisant les patterns des chapitres prcdents.
Service 1 Service 2
OCTO > CLOUD READY APPS > DISPONIBLIT
ANMONE COW-346368
COW-670445
COW-543251
COW-104028
COW-418575
28 COW-546793
VS
VIOLETTE
OCTO > CLOUD READY APPS > DISPONIBLIT
Test dendurance
Test avec la charge cible du systme sur une longue dure afin didentifier les fuites de ressources
(ex. fuite mmoire).
Test de robustesse
Test avec la charge cible du systme durant lequel on dgrade volontairement une ressource afin
dprouver la robustesse du systme.
29
OCTO > CLOUD READY APPS > DISPONIBLIT
EXEMPLE
Exemple
dimplmentation
haute disponibilit
Votre application est dcoupe en micro- continent o un dploiement similaire
services, exposant chacun des API que peut tre ralis.
vous avez pris soin de rendre stateless et
en adquation avec les principes REST. Votre base de donnes est dploye sur
Ceci vous permet de pouvoir profiter sans RDS (2), une plateforme de Database
limites des outils de load balancing, de as a Service, qui offre nativement un
30
cache mcanisme de rplication.
Vous dployez votre application sur la Afin de garantir le dcouplage avec votre
plateforme IaaS Amazon EC2. Pour application, vous choisissez dimplmenter
atteindre une disponibilit de 99,99%: un pattern de communication asynchrone
au moyen de Amazon SQS. Celui-ci offre
Vous choisissez de dployer votre applica- une dcorrlation parfaite au prix dune
tion sur deux Availability Zones (AZ), qui plus grande complexit.
correspondent deux zones dun ou
plusieurs datacenters raisonnablement Aprs avoir tir profit au maximum des
espacs gographiquement pour quun possibilits des services AWS, limplmen-
incident ne les impacte pas simultanment. tation de patterns sera ncessaire pour
atteindre une disponibilit comme 99,99%.
Le composant ELB (3) vous permet Timeout et Circuit Breaker seront deux
de rpartir vos requtes vers les deux autres patterns applicatifs de haute dispo-
datacenters. La haute disponibilit de nibilit de type quick win.
ce service est directement assure par
AWS. Afin de lutiliser pleinement, votre Enfin, vous testez la robustesse de votre
application doit cependant exposer une systme en lanant un test grandeur nature
URL de health check (4). En fonction du (par exemple avec Simian Army (5)) qui va
retour de cette URL, le load balancer alatoirement supprimer vos instances
pourra bannir lune de vos instances. et sassurer que lapplication est toujours
fonctionnelle.
Le composant Route 53 permet doffrir
une garantie supplmentaire en tant
capable de rediriger le DNS sur un autre
OCTO > CLOUD READY APPS > DISPONIBLIT
4
your-app.com
Availibility zone 1 (route 53) Availibility zone 2
Instances Instances
API API
1
Autre 3
Microservice Amazon
SQS
5
2
Chaos
RDS Monkey
Multi-AZ RDS Multi-AZ RDS
Simian Army
Garan+ir
lin+grit
et la
32
scuri+
OCTO > CLOUD READY APPS > DISPONIBLIT
33
OCTO > CLOUD READY APPS > INTGRIT ET SCURIT
Garantir
lintgrit et la scurit
PLACER LA SCURIT
AU BON NIVEAU
amener la scurit au plus proche du service et sappuyer sur des systmes de fdration pour
R
pouvoir garantir la scurit en environnement ouvert.
rivilgier la propagation du commettant (principal propagation) ou la dlgation dautorisation
P
lutilisation de comptes de services gnriques.
Patterns: Delegated authorization, principal propagation.
CONSERVER
34
Patterns
Principal propagation
Mcanisme scuris permettant une application qui a authentifi un utilisateur de transmettre son
identit (le principal) un autre service.
35 1. Authentification.
2. Propagation du principal.
3. Validation du principal (ici il sagit dune dlgation dautorisation, le service 2 valide le principal
sur lidentity provider).
Service 1 Service 2
Principal
Principal
3
Identity provider
OCTO > CLOUD READY APPS > INTGRIT ET SCURIT
Event sourcing
Pattern applicatif dans lequel lensemble des modifications du systme sont stockes sous forme
dvnements qui, une fois agrgs, donnent une vision consolide. Conserver les vnements
permet leur rejeu et leur analyse.
36
WRITE READ
STOCK
Mapping Layer
Events Log
(list of events)
...
OCTO > CLOUD READY APPS > INTGRIT ET SCURIT
Correlation ID
Ajout dun identifiant dans chaque requte pour suivre une transaction de bout en bout dans le SI.
20160614T17:47:50ID=42WARNING
37
Eventual consistency
En franais cohrence terme, dsigne un modle dans lequel la cohrence nest garantie
qu la fin la fin tant relative votre cas dutilisation. Lexemple dimplmentation le
plus connu de ce modle est le protocole DNS dans lequel les adresses sont jour une fois
toutes les propagations termines. Ce modle est particulirement important pour un stockage
distribu dans lequel la cohrence ne peut pas tre dfinie en permanence du fait des dlais de
propagation et des potentielles indisponibilits dun nud.
Dpl yer
facilemen+
frquem-
38
men+
OCTO > CLOUD READY APPS > SCALER
39
RELEASE
OCTO > CLOUD READY APPS > DPLOYER
Dployer
facilement frquemment
AUTOMATISER POUR ALLER
PLUS VITE, SEREINEMENT
arantir la reproductibilit du dploiement en limitant lintervention humaine et en prouvant les
G
processus sur des environnements comparables la production, ds le dveloppement.
Patterns: Infrastructure as code, service discovery, containers.
DPLOYER
40
SANS ACCROC
G
arantir des changements de version plus transparents, jusquau Zero Downtime Deployment
au besoin, pour limiter au maximum les impacts nfastes sur les utilisateurs finaux tout en
apportant de la valeur.
P
artager les mmes mthodes, outils et objectifs du dveloppement la production.
Patterns : Tolerant reader, consumer driven contracts, multiversions services & backward
compatibility, feature flipping.
DPLOYER
TOUT LE TEMPS
Rduire le Time To Market et maximiser lagilit en livrant les fonctionnalits par petites itrations
frquentes.
Dsacraliser les mises en production.
Patterns : Infrastructure as code, strict separation of build and run stages, service discovery.
OCTO > CLOUD READY APPS > DPLOYER
Patterns
Infrastructure as code
Code dcrivant linfrastructure cible de manire rptable et automatiquement sans intervention
humaine. Cette pratique offre une approche centralise, raliste et versionnable de linfrastructure.
Les fournisseurs de cloud proposent gnralement leurs propres outils linstar de CloudFormation
pour Amazon, qui viennent largir un panel doutils open source tels Ansible, Chef, Puppet ou
encore Terraform.
41
Service discovery
Mcanisme denregistrement et de dcouverte des services. Dans une infrastructure dynamique o
les services naissent et meurent pour rpondre la charge, il est important de leur permettre de
senregistrer dynamiquement pour tre connus de tous. Plusieurs solutions sont rpandues dans
ce domaine telles que Consul, Zookeeper, ETCD ou encore Eureka qui est intgre au framework
Spring Cloud Netflix.
OCTO > CLOUD READY APPS > DPLOYER
42
Feature Flipping
Pattern applicatif permettant dactiver et de dsactiver une fonctionnalit chaud sans interruption
de service. Cela permet de dployer en production un composant sans en activer les nouvelles
fonctionnalits (pour des raisons lgales, pour les tester sur une population rduite, parce quelles
ne sont pas finalises, ). Des librairies permettent de faciliter la mise en uvre telle que FF4J en
Java qui apporte notamment une API et IHM pour contrler lactivation des fonctionnalits.
http://blog.octo.com/feature-flipping/
ON ON ON OFF
OCTO > CLOUD READY APPS > DPLOYER
Backward compatibility
Gestion de version consistant viter toute modification qui empcherait lancien client de
fonctionner. Par exemple, les API utilises par des clients mobiles natifs doivent souvent maintenir
plusieurs versions car les diffrents devices ne se mettent pas tous jour simultanment.
Multiversion Service
Lenjeu dun service est dtre capable dvoluer sans entraner de rgression pour les consommateurs
existants. La mise en place dun versioning sur lAPI permet, lors dvolutions majeures, dexposer
un nouveau service tout en maintenant lexistant. Ce pattern est lourd en termes dimplmentation
et il faut veiller ce que notamment les schmas de donnes restent compatibles pour les deux
API. Attention prvoir galement un dcommissionnement des versions au fur et mesure pour
pousser les consommateurs voluer et rduire la charge de dveloppement associe.
43
V1 V2 V1 V2
OCTO > CLOUD READY APPS > DPLOYER
Zero-Downtime Deployment
Dploiement dune application sans interruption de service
http://blog.octo.com/zero-downtime-deployment/.
44
Conteneur
Un conteneur est une image dune application et de ses dpendances. Un conteneur est plus lger
quune machine virtuelle tout en permettant une isolation entre applications et une faon simple de
dployer lapplication avec toutes ses dpendances.
Conteneur Docker
Init System
Userland (OS)
HOST KERNEL
SERVER
Docker Containerisation
Index des Patterns
Backward compatibility 43
Bulkhead 19, 20
Centralized monitoring 17
Circuit breaker 22
Continuous performance 18
Conteneur 44
Correlation ID 37
Delegated authorization 36
Design for failure 27
Event sourcing 36
Eventual consistency 37
Feature Flipping 42
Graceful degradation 18
45
Idempotence 23
Infrastructure as code 41
Kiss (Keep it simple, stupid) 23
Lambda architecture 19
Loi de Postel ou principe de robustesse 35
Microservices 09
Multiversion Service 43
Pets versus Cattle 28
Principal propagation 35
Read Your Write Consistency 37
Request collapsing 20
Request queuing 21
Request redundancy 21
Service discovery 41
Test dendurance 29
Test de robustesse 29
Timeout 27
Tolerant reader & consumer driven contract 42
Zero-Downtime Deployment 44
NOUS APPORTONS mthode
et expertise POUR, ENSEMBLE,
concevoir et repenser
LES APPLICA+IONS
SUR LE CLOUD
DU CODE A LA PRODUCTION.
NOUS GARANTISSONS AINSI,
srnit et excellence
PAR DES APPLICATIONS FIABLES,
PERFORMAN+ES
ET CONUES POUR tirer parti
des opportunits du cloud.
310
2 FILIALES
PRODUITS
COLLABORATEURS
38M de CA
2015 (+39%)
> So Paulo
ORGANISME DE FORMATION
> Sydney
Merci aux contributeurs :
Youri Antenor Habazac, Arnaud Btrmieux,
Marc Bojoly, Benjamin Brabant, Antonio Gomes
Rodrigues, Edouard Perret, Bormi Toch.