Lint text, remove trailing space, order headers and lists
This commit is contained in:
parent
99d50325f5
commit
d27f2f837f
11 changed files with 129 additions and 144 deletions
|
@ -1,3 +1,5 @@
|
|||
# Assemblée Générale Constitutive
|
||||
|
||||
Le 13 janvier 2020 à 19 heures, les fondateurs de l'association
|
||||
Deuxfleurs se sont réunis en assemblée générale constitutive au 24 rue
|
||||
des Tanneurs à Rennes. Sont présents Adrien, Alex, Anaïs, Axelle,
|
||||
|
@ -25,12 +27,12 @@ Un débat s'instaure entre les membres de l'assemblée.
|
|||
Après quoi, personne ne demandant plus la parole, le président met
|
||||
successivement aux voix les délibérations suivantes.
|
||||
|
||||
### 1e délibération
|
||||
## 1e délibération
|
||||
|
||||
L'assemblée générale adopte les statuts dont le projet lui a été soumis.
|
||||
Cette délibération est adoptée à l'unanimité.
|
||||
|
||||
### 2e délibération
|
||||
## 2e délibération
|
||||
|
||||
L'assemblée générale constitutive désigne en qualité de premiers membres
|
||||
du conseil d'administration :
|
||||
|
|
|
@ -18,7 +18,6 @@ Pour en savoir plus, rendez-vous sur
|
|||
<a href="https://www.laquadrature.net/">La Quadrature du Net</a>
|
||||
et allez lire le manifeste <a href="https://chatons.org/fr/manifeste">des CHATONS</a>.
|
||||
|
||||
|
||||
### Nos objectifs
|
||||
|
||||
#### Des utilisateurs impliqués
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
|
||||
Store pile of bytes in your garage.
|
||||
|
||||
|
||||
## Context
|
||||
|
||||
Data storage is critical: it can lead to data loss if done badly and/or on hardware failure.
|
||||
|
@ -43,7 +42,6 @@ There was many attempts in research too. I am only thinking to [LBFS](https://pd
|
|||
- Cassandra (ScyllaDB) for metadata
|
||||
- Own system using consistent hashing for data chunks
|
||||
|
||||
|
||||
**Quentin:**
|
||||
|
||||
- pas d'erasure coding mais des checksums à côté des fichiers (ou dans les meta données)
|
||||
|
@ -67,15 +65,10 @@ _Remark 2_ Seafile idea has been stolen from this article: https://pdos.csail.mi
|
|||
|
||||
### Questions à résoudre
|
||||
|
||||
|
||||
1. est-ce que cassandra support de mettre certaines tables sur un SSD et d'autres sur un disque rotatif ?
|
||||
2. est-ce que cassandra/scylladb a un format de table on disk qui ne s'écroule pas complètement losque tu as des gros blobs ? (les devs de sqlite ont écrit tout un article pour dire que même avec leur lib qui est quand même sacrément optimisés, ils considèrent qu'à partir de je crois 4ko c'est plus efficace de mettre les blobs dans des fichiers séparés) - https://www.sqlite.org/intern-v-extern-blob.html
|
||||
3. Quelle taille de blocs ? L'idée c'est qu'on a quand même des liens en WAN avec des débits pas forcéments incroyables. Et ça serait bien que le temps de répliquer un bloc soit de l'ordre de la seconde maxi. En cas de retry, pour pouvoir mieux monitorer la progression, etc. Exoscale utilise 16Mo. LX propose 1Mo.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### Modules
|
||||
|
||||
- `membership/`: configuration, membership management (gossip of node's presence and status), ring generation --> what about Serf (used by Consul/Nomad) : https://www.serf.io/? Seems a huge library with many features so maybe overkill/hard to integrate
|
||||
|
@ -85,7 +78,6 @@ _Remark 2_ Seafile idea has been stolen from this article: https://pdos.csail.mi
|
|||
- `api/`: S3 API
|
||||
- `web/`: web management interface
|
||||
|
||||
|
||||
#### Metadata tables
|
||||
|
||||
**Objects:**
|
||||
|
@ -133,7 +125,6 @@ Workflow for PUT:
|
|||
6. Return success to the user
|
||||
7. Launch a background job to check and delete older versions
|
||||
|
||||
|
||||
Workflow for DELETE:
|
||||
|
||||
1. Check write permission (LDAP)
|
||||
|
@ -148,12 +139,10 @@ To delete a version:
|
|||
3. Delete all of the blocks from the blocks table
|
||||
4. Finally, delete the version from the objects table
|
||||
|
||||
|
||||
Known issue: if someone is reading from a version that we want to delete and the object is big, the read might be interrupted. I think it is ok to leave it like this, we just cut the connection if data disappears during a read.
|
||||
|
||||
("Soit P un problème, on s'en fout est une solution à ce problème")
|
||||
|
||||
|
||||
#### Block storage on disk
|
||||
|
||||
**Blocks themselves:**
|
||||
|
@ -194,7 +183,6 @@ Rebalancing: takes as argument the list of newly added nodes.
|
|||
|
||||
Only one balancing can be running at a same time. It can be restarted at the beginning with new parameters.
|
||||
|
||||
|
||||
#### Membership management
|
||||
|
||||
Two sets of nodes:
|
||||
|
@ -231,11 +219,9 @@ Number K of tokens per node: decided by the operator & stored in the operator's
|
|||
- Ping interval: 10 seconds
|
||||
- ??
|
||||
|
||||
|
||||
#### Links
|
||||
|
||||
- CDC: <https://www.usenix.org/system/files/conference/atc16/atc16-paper-xia.pdf>
|
||||
- Erasure coding: <http://web.eecs.utk.edu/~jplank/plank/papers/CS-08-627.html>
|
||||
- [Openstack Storage Concepts](https://docs.openstack.org/arch-design/design-storage/design-storage-concepts.html)
|
||||
- [RADOS](https://ceph.com/wp-content/uploads/2016/08/weil-rados-pdsw07.pdf)
|
||||
|
||||
- CDC: <https://www.usenix.org/system/files/conference/atc16/atc16-paper-xia.pdf>
|
||||
- Erasure coding: <http://web.eecs.utk.edu/~jplank/plank/papers/CS-08-627.html>
|
||||
- [Openstack Storage Concepts](https://docs.openstack.org/arch-design/design-storage/design-storage-concepts.html)
|
||||
- [RADOS](https://ceph.com/wp-content/uploads/2016/08/weil-rados-pdsw07.pdf)
|
||||
|
|
|
@ -30,38 +30,38 @@ Exemple : Ora/Viti en Polynésie française
|
|||
|
||||
FAI connus pour ne pas proposer d'IPv6 :
|
||||
|
||||
* SFR/FTTH
|
||||
* SFR/FTTH
|
||||
|
||||
#### IPv6 de mauvaisee qualité
|
||||
|
||||
*Ajouté explications à propos du tunneling*
|
||||
*Ajouter des explications à propos du tunneling*
|
||||
|
||||
#### Adresse IP publique dynamique
|
||||
|
||||
FAI connus pour proposer une adresse IP publique dynamique :
|
||||
|
||||
* Orange/ADSL (rotation quotidienne et à chaque resynchro)
|
||||
* Orange/FTTH (rotation ~1 fois/mois)
|
||||
* Orange/ADSL (rotation quotidienne et à chaque resynchro)
|
||||
* Orange/FTTH (rotation ~1 fois/mois)
|
||||
|
||||
### Autre
|
||||
|
||||
#### Blocage du port 25 en sortie (impossibilité d'héberger un serveur email)
|
||||
|
||||
* Débloquable chez Free/\* dans l'interface (gratuit)
|
||||
* Bloqué chez Orange/\* (sauf à passer sur une offre pro et encore...)
|
||||
* Débloqué chez SFR/FTTH
|
||||
* Débloqué chez Numéricable/Coaxial
|
||||
* Inconnu chez Bouygues/\*
|
||||
* Débloquable chez Free/\* dans l'interface (gratuit)
|
||||
* Bloqué chez Orange/\* (sauf à passer sur une offre pro et encore...)
|
||||
* Débloqué chez SFR/FTTH
|
||||
* Débloqué chez Numéricable/Coaxial
|
||||
* Inconnu chez Bouygues/\*
|
||||
|
||||
#### Reverse DNS
|
||||
|
||||
*Expliquer pourquoi c'est utile*
|
||||
|
||||
* Orange : Ne propose pas de configurer le reverse
|
||||
* SFR : Inconnu, probablement que non
|
||||
* Numéricable : Inconnu, probablement que non
|
||||
* Bouygues : Inconnu, probablement que non
|
||||
* Free : Oui mais service cassé dans certains cas (récupérations d'IPv4)
|
||||
* Orange : Ne propose pas de configurer le reverse
|
||||
* SFR : Inconnu, probablement que non
|
||||
* Numéricable : Inconnu, probablement que non
|
||||
* Bouygues : Inconnu, probablement que non
|
||||
* Free : Oui mais service cassé dans certains cas (récupérations d'IPv4)
|
||||
|
||||
## Chez vous
|
||||
|
||||
|
@ -75,15 +75,14 @@ Vous avez besoin du NAT hairpinning pour accéder aux services publics que vous
|
|||
|
||||
Routeurs connus pour avoir des problèmes de NAT hairpinning :
|
||||
|
||||
* Orange : Probablement toutes les box
|
||||
* Orange : Probablement toutes les box
|
||||
* Livebox 2 Sagem
|
||||
* Livebox 4 Sagemcom
|
||||
* Bouygues : Suspicions sur toutes les box
|
||||
* Free : 100% OK
|
||||
* Numéricable : Inconnu
|
||||
* SFR : Inconnu
|
||||
* Bouygues : Suspicions sur toutes les box
|
||||
* Free : 100% OK
|
||||
* Numéricable : Inconnu
|
||||
* SFR : Inconnu
|
||||
|
||||
#### Problèmes de qualité du routeur
|
||||
|
||||
*À compléter*
|
||||
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
Nous souhaiterions devenir un CHATON, pour ça il faudrait au moins :
|
||||
|
||||
- Avoir des backups sur les services "stables"
|
||||
- Avoir des performances satisfaisantes sur les services, actuellement ces services cochent les cases :
|
||||
- Avoir des backups sur les services "stables"
|
||||
- Avoir des performances satisfaisantes sur les services, actuellement ces services cochent les cases :
|
||||
- Jitsi
|
||||
- Riot/Matrix
|
||||
- CryptPad
|
||||
- Gitea
|
||||
- Avoir un modèle plus clair / écrire plus largement comment un membre peut nous rejoindre
|
||||
- Corriger les problèmes de robustesse simple de l'infrastructure :
|
||||
- Avoir un modèle plus clair / écrire plus largement comment un membre peut nous rejoindre
|
||||
- Corriger les problèmes de robustesse simple de l'infrastructure :
|
||||
- Ordonancement des services au boot
|
||||
- Nomad démarre avant que le réseau soit prêt
|
||||
- Consul démarre avant que le réseau soit prêt
|
||||
- GlusterFS n'a pas démarré quand le fstab est lu, donc la partition n'est pas montée
|
||||
- Reconfiguration du NAT / des ports dans le firewall
|
||||
- En cours via le développement de Diplonat
|
||||
- Compléter cette liste en lisant la charte du site web des chatons
|
||||
- Compléter cette liste en lisant la charte du site web des chatons
|
||||
|
|
|
@ -16,9 +16,9 @@ Ce n'est pas (trop) problématique, car le réseau interne n'est pas (supposé)
|
|||
On ne peut pas consommer les services internes d'une infrastructure A depuis une infrastructure B.
|
||||
Par exemple, on voudrait que le serveur LDAP géré par Quentin soit consommable par le serveur Git géré par Adrien, avec ces propriétés :
|
||||
|
||||
* sans qu'il soit exposé directement sur internet,
|
||||
* sans que la communication entre A et B puisse être espionnée,
|
||||
* sans que le service soit "attaché" à une machine en particulier.
|
||||
* sans qu'il soit exposé directement sur internet,
|
||||
* sans que la communication entre A et B puisse être espionnée,
|
||||
* sans que le service soit "attaché" à une machine en particulier.
|
||||
|
||||
## Difficultés techniques
|
||||
|
||||
|
@ -32,20 +32,20 @@ C'est particulièrement critique si on commence à faire du transfert de donnée
|
|||
|
||||
Cette complexité devrait être évitée à mon avis. Pour cela je propose de baser nos communications de cluster via IPv6 seulement pour pouvoir adresser tout le monde directement. Je propose d'éditer un cahier des charges de la configuration minimale qu'une personne doit remplir pour s'interconnecter à l'infrastructure Deuxfleurs. Voilà une ébauche :
|
||||
|
||||
- Avoir une IPv6 routable sur Internet
|
||||
- Ne pas avoir de filtrage de port imposé par son fournisseur d'accès (exception possible pour le port 25 en sortie...)
|
||||
- Avoir au minimum 1Go de RAM
|
||||
- Avoir un processeur x86
|
||||
- Avoir une IPv6 routable sur Internet
|
||||
- Ne pas avoir de filtrage de port imposé par son fournisseur d'accès (exception possible pour le port 25 en sortie...)
|
||||
- Avoir au minimum 1Go de RAM
|
||||
- Avoir un processeur x86
|
||||
|
||||
## Trouver un service et chiffrer systématiquement
|
||||
|
||||
Maintenant que toutes les machines de toutes les infrastructures peuvent toutes communiquer entre elles, il nous reste encore deux problèmes :
|
||||
- Les services ne sont pas attachés à une machine, et donc pas attachés à une adresse réseau
|
||||
- Le trafic passant en clair sur internet est supposé espionné
|
||||
- Les services ne sont pas attachés à une machine, et donc pas attachés à une adresse réseau
|
||||
- Le trafic passant en clair sur internet est supposé espionné
|
||||
|
||||
Il nous faut donc deux propriétés qui découlent directement de ces deux besoins :
|
||||
- Un moyen de permettre à un service C de communiquer avec un service D
|
||||
- Chiffrer systématiquement le traffic qui part sur internet
|
||||
- Un moyen de permettre à un service C de communiquer avec un service D
|
||||
- Chiffrer systématiquement le traffic qui part sur internet
|
||||
|
||||
Voici quelques solutions auxquelles je pense :
|
||||
|
||||
|
@ -71,7 +71,6 @@ On pourrait imaginer upgrader ce modèle en rajoutant une règle IPv6 dans le fi
|
|||
|
||||
Solution étudiée par TeDomum/ACID. Ils partent sur Wesher. Voici leur avis :
|
||||
|
||||
|
||||
> On s'est posé la question d'utiliser un service mesh plutôt qu'un mesh d'infrastructure. Et il se trouve que ça collait peu à notre besoin. Il y a trop de choses au-dessus pas conçues pour être à poil sur internet et qui rentreraient pas dans le service mesh.
|
||||
>
|
||||
> Consul est top si tu veux interconnecter des clusters k8s dans des régions différentes. Mais si tu fais un cluster étendu y'a trop de choses exposées par défaut sans tls ou sans authent sur le réseau d'infra k8s. Et trop de choses dans plein de techno où il attend une forme de l2 partagé ou une proximité réseau, même virtuelle, comme les acl par préfixe IP dans les solutions de stockage, l'allocation de préfixe d'adressage dans les ipam de la plupart des cni, etc.
|
||||
|
|
|
@ -13,16 +13,16 @@ Par contre Facebook Messenger impose Google Chrome/Chromium pour les visio de gr
|
|||
|
||||
D'où mes 2 suspicions :
|
||||
|
||||
- Firefox a un bug quelconque dans sa pile WebRTC déclenché par le mode conversation de groupe
|
||||
- Jitsi a un problème avec les déconnexions/changement de connexion/petit hoquets du réseau et n'arrive pas à se reconnecter. Ça pourrait être rendu pire à certain moment de la journée comme le soir où le réseau est plus sollicité. Et ce serait provoqué lors du reload on repasse de 3 à 2, en P2P donc puis de nouveau de 2 à 3.
|
||||
- Firefox a un bug quelconque dans sa pile WebRTC déclenché par le mode conversation de groupe
|
||||
- Jitsi a un problème avec les déconnexions/changement de connexion/petit hoquets du réseau et n'arrive pas à se reconnecter. Ça pourrait être rendu pire à certain moment de la journée comme le soir où le réseau est plus sollicité. Et ce serait provoqué lors du reload on repasse de 3 à 2, en P2P donc puis de nouveau de 2 à 3.
|
||||
|
||||
### Approfondissement
|
||||
|
||||
Avant d'aller plus loin, nous avons voulu prendre le temps d'identifier précisément les problèmes d'expérience utilisateurs et leur corrélation avec la plateforme de l'utilisateur (navigateur, OS).
|
||||
|
||||
Pour celà, nous avons suivi deux approches :
|
||||
1. Mener nos propres tests
|
||||
2. Chercher d'autres retours
|
||||
1. Mener nos propres tests
|
||||
2. Chercher d'autres retours
|
||||
|
||||
#### Mener nos propres tests
|
||||
|
||||
|
@ -31,9 +31,9 @@ Merci à Alex, Adrien et Maximilien pour leur participation.
|
|||
|
||||
Voilà les conclusions que nous avons tirées de nos tests :
|
||||
|
||||
- L'appel avec Firefox a déclenché le bug immédiatement, peu importe la version de Firefox ou de l'OS (firefox stable/nightly, fedora stable/beta, etc.)
|
||||
- Le passage de tout le monde sous Chrome/Chromium a permis d'avoir une conversation stable.
|
||||
- Adrien avait sa Livebox avec pare-feu configuré en mode "élevé" et a dû ajouter dans sa liste blanche les ports utilisés par Jitsi (`4443/tcp` et `10000/udp` au moment du test, seul un des deux a besoin d'être accessible)
|
||||
- L'appel avec Firefox a déclenché le bug immédiatement, peu importe la version de Firefox ou de l'OS (firefox stable/nightly, fedora stable/beta, etc.)
|
||||
- Le passage de tout le monde sous Chrome/Chromium a permis d'avoir une conversation stable.
|
||||
- Adrien avait sa Livebox avec pare-feu configuré en mode "élevé" et a dû ajouter dans sa liste blanche les ports utilisés par Jitsi (`4443/tcp` et `10000/udp` au moment du test, seul un des deux a besoin d'être accessible)
|
||||
|
||||
Nous avons donc demandé à Adrien quels étaient les ports ouverts par défaut dans le mode élevé de sa box :
|
||||
|
||||
|
@ -69,8 +69,8 @@ Apparemment une issue est dédiée en particulier au problème que nous rencontr
|
|||
Notre videobridge écoute donc sur les ports `8080/tcp` et `10000/udp`.
|
||||
|
||||
WebRTC fonctionne en deux étapes :
|
||||
- Des offres doivent être échangées via un serveur de signaling quelconque
|
||||
- Ensuite, ces offres servent à connecter des clients directement via un protocole TCP ou UDP avec un thin layer propre à WebRTC
|
||||
- Des offres doivent être échangées via un serveur de signaling quelconque
|
||||
- Ensuite, ces offres servent à connecter des clients directement via un protocole TCP ou UDP avec un thin layer propre à WebRTC
|
||||
|
||||
#### Le control plane de Jitsi : Prosody sur HTTPS via Bosh/XMPP
|
||||
|
||||
|
@ -86,8 +86,8 @@ Ainsi, le VideoBridge est une sorte de client WebRTC particulier, qui récolte e
|
|||
#### Le data plane de Jitsi : videobridge sur DTLS/SCTP via WebRTC
|
||||
|
||||
WebRTC utilise deux formats de paquets selon [Mozilla Developer Network|RTCDataChannel|DataFormat](https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel#Data_format) :
|
||||
- `UDP/DTLS/SCTP`
|
||||
- `TCP/DTLS/SCTP`
|
||||
- `UDP/DTLS/SCTP`
|
||||
- `TCP/DTLS/SCTP`
|
||||
|
||||
On a donc un format de données arbitraire encapsulé dans du SCTP lui-même encapsulé dans du DTLS.
|
||||
DTLS est prévu pour les datagrammes à l'origine, car WebRTC est prévu d'abord pour fonctionner sous UDP.
|
||||
|
|
Loading…
Reference in a new issue