State of the Instance - November 2022
I'll start off with this: It's been one hell of a month for Mastodon Canada.
Introduction
The instance grew from less than 60 users to what is now 24 500 users in the span of just two weeks. It went from an experiment to a service demanding significant infrastructure, moderation, and governance. I want to offer a warm welcome to everyone and thanks for their patience as I bolstered Mastodon Canada with the necessary server capacity to handle the load.
Infrastructure
Mastodon Canada is hosted by DigitalOcean* in their TOR1 data centre. Many have rightfully questioned my decision to use DigitalOcean instead of a serverless option like AWS or Azure. I calculated the cost of this option, and it would cost Mastodon Canada approximately 33% more than a stateful option. I'm also very aware that Amazon is a union buster and this is fundamentally against my views on labour.
* Links to DigitalOcean are paid affiliate links that help support Mastodon Canada.
As it stands, Mastodon Canada is hosted across a staggering fifteen (15) servers:
- 1x load balancer (capable of up to 1000 requests per second)
- 4x Puma servers (serve the website)
- 2x Sidekiq servers (process jobs eg. follows, favourites, boosts, etc)
- 1x PostgreSQL server (long-term memory)
- 1x Redis server (short-term memory)
- 1x news.mstdn.ca (the website you're on now)
- 1x postal.mstdn.ca (future-state mail server to replace MailGun)
- 1x api.mstdn.ca (serves live data, used in timelines and notifications)
- S3-based storage: as of writing, serving 578 GB of photos, videos, etc.
Managing Growth
It was difficult to "skate to where the puck is going" this month in terms of server demands. The instance went from being hosted on a sole server to breaking off PostgreSQL and Redis into their own dedicated servers. Individual servers were then scaled with more processing power and memory until it was clear that breaking out each of the three components of Mastodon onto their own servers was critical.
We had a significant downtime on the morning of Friday, November 25th. I provided a post-mortem, but ultimately the cause was a result of what was two weeks of getting ~3 hours of sleep per night resulting in a grave oversight. For this, I humbly apologize and commit to you that this never happens again.
I'm proud (and cautious) to say that Mastodon Canada is in a stable state as of the early hours of November 26th. As we are now, the instance is capable of serving 240 requests per second. As of writing, we average 180 requests per second at peak. This is now quickly scalable.
Resilience and Security
We have important obligations to the Mastodon Covenant that endeavour to guarantee instance resilience:
- Active moderation against racism, sexism, homophobia and transphobia
- Daily backups
- At least one other person with emergency access to the server infrastructure
- Commitment to give users at least 3 months of advance warning in case of shutting down
I'll write more about point 1 below in "Moderation and Governance".
Point 2: The PostgreSQL and Redis databases are backed up in full daily and write-ahead logs are maintained to allow me to restore any point in time within the previous seven days. Updates are automatically applied weekly. Compute nodes are backed up weekly and are retained for four weeks. Before any maintenance, I create a live snapshot in the event something goes wrong.
Point 3: Certain moderators have access to "break-the-glass" credentials for DigitalOcean which allows them full unfettered access to the Mastodon Canada infrastructure in the event I'm hit by a bus. More development to come on this.
Point 4: It's clear through the financials I'll share later that I have a strong mandate to maintain Mastodon Canada into the future. As long as funding allows, you have my guarantee that Mastodon Canada will continue to operate well into the future.
Moderation and Governance
I'm thrilled to welcome @jace, @erin, and @Pheneatis to the moderation team this month. The selection was made based on community contribution and the talents and skills they could bring to the role.
Jace, who finds Calgary home, has been instrumental with his gorgeous graphics including the tusked flagbearer icon and the Instance Thumbnail. If you've seen the TV Show "The Great North", it really reminds me of it. He's actually a long-time lost friend! I first met him in 2007 in the provincial honour choir, the Alberta Youth Choir.
Erin, from the great city of Ottawa, brings unique and important considerations to the team with her extensive background in Social Work. Her lived experiences in working with marginalized and equity-seeking communities are critical in circling our square.
Stéphanie (AKA Pheneatis), heralds from Quebec City, offers her incredible bilingual talents to the team so we can best represent both the English and French-speaking community and officially landmarks Mastodon Canada as a genuinely bilingual Mastodon instance.
Moderation Statistics
As of writing, our hardworking moderation team has actioned exactly 400 reports. Some of these originated here, others have been forwarded from other instances. I've worked with the team on the 20 appeals received (when someone disagrees with our action), approving five of them. We accept that we're not always going to get it right the first time. For our first month and while still getting our feet under us, I'd say a 1% error rate isn't half bad.
Financing and Fundraising
It's no secret that I had great hesitation setting up a dedicated PayPal account and posting that donation link on November 9th. It was becoming increasingly clear to me that backing Mastodon Canada with the resources it demanded was growing well outside of what I could finance myself. I grappled with soliciting donations knowing how unstable the instance was.
I work in IT, mainly on Windows Server. Linux, however, is where I started with SysOps and where I tend to land when making personal operating system decisions. Let me be clear: I've learned a lot this month. You'll see above - this month wasn't cheap, so let's talk about each line item.
Donations and Sponsorship
As you'll see in the Revenue and Expense Report below, the support for Mastodon Canada has been nothing short of breathtaking. It humbled me that 376 of you feel that our community is worthy of your hard-earned dollars. The average donation was $28.50 with the largest donation being $500 and the smallest being $1. Whether you were on either end of this, I genuinely thank you for your contribution to help keep Mastodon Canada online.
The CIRA sponsorship is included in this line because it would be inappropriate for me to share the specific dollar amount of anyone's contribution.
For transparency, I have not donated to Mastodon Canada as I believe my SysOps work is payment in kind. I've also asked our volunteer moderators to cancel their subscriptions if they had one.
Expenses
Let's get into the meat (or meat substitute) and potatoes:
PayPal: I looked at Buy Me a Coffee (which I've used before and liked), Patreon, and others and found that PayPal was actually the least expensive option with about 3.8% in fees.
DigitalOcean:
This is where all the magic happens. I took special care to break out all of the various services Mastodon Canada takes advantage of from this service provider.
Our block storage (all the photos, gifs, and videos everyone uploads) is growing. If it were hosted on Amazon S3, the data transfer costs alone would be nearly $1000 alone.
The Managed Databases cost doesn't reflect an entire month's use - which should remain a fixed $180/mo.
The Compute Nodes are the front end of the web app, and all of the transaction processing takes place. Think of them being a restaurant's front-of-house and the databases being the back-of-house. This is scaleable to demand and I actually intend to par it down slightly.
The Load Balancer cost is fixed and is important to make sure all the Compute Nodes get an equal share of the load. It also serves as an important layer of security as this is one of two of the only public endpoints for Mastodon Canada.
GoDaddy: Mastodon Canada has two domains, the well-known mstdn.ca and the lesser-known mastdn.ca. Due to some complexities with CloudFlare and DigitalOcean's Spaces CDN, we needed a second domain to serve block storage. This is an annual cost.
Cloudflare: This is a critical piece of security and resiliency infrastructure for us. It saved 550GB of traffic (not including the ~11TB of media served from block storage) from having to be served from the Compute Nodes, saving us 47% on that DigitalOcean cost alone. It also blocks malicious traffic and, conveniently, Russian traffic as a whole too. Cloudflare has a free tier. Unfortunately, we outgrew that this month.
MailGun: It serves as our email provider, which cost $0 until Mastodon Canada grew. We can set up the same service in-house for one-tenth of the cost of MailGun as it stands... So we will.
Mastodon Developer Donation: This line goes without saying. Mastodon Canada strives to be good stewards of open-source development and has a moral obligation to support the project our community is built upon.
Into the Future
The future is bright for Mastodon Canada. Presently, we have 112 subscription donors amounting to ~$700/mo after PayPal takes their 3-4% cut. This covers the lion's share of the monthly costs. The remainder is critical for our longevity. "They" always say to have six months of rent saved up just in case.
Some one-time costs coming up will include consulting with a digital media lawyer to make sure that our legal house is in good repair. Specifically, I want to make sure that our Terms of Service and Privacy Policy are compliant with industry standards and federal requirements. I'm in talks with our contact at CIRA for suggestions.
It's well known that I do not enjoy that I'm the sole decision-maker for Mastodon Canada. I'm working to understand the requirements of forming our first board, i.e. what's required for the first filing, how the first AGM operates without a returning President and Secretary, and how I'm worked into the board either as elected President or in some other formal capacity responsible for service delivery. Everyone who has expressed interest in being involved in governance has had their toots bookmarked so I can go back and pull from them. I can't promise that this will happen in December being it's the holiday season.
Some things on the roadmap include setting up a PeerTube instance for verified content creators looking to share their videos with Mastodon Canada. This was initially spurred by Emergency Physician and friend Dr. Shazma Mithani in mind with her "Shift P[ER]spectives" series.
I've been really careful where I use possessive pronouns in this report to you. All of us have a stake in Mastodon Canada. I can't emphasize enough that I'm deeply humbled that you've chosen to put your trust in the community and ultimately, me. Thank you to all the donors, and CIRA, for your support and thank you to the community for making Mastodon Canada a truly wonderful place to be. If you feel compelled to contribute to the community, you can do so here.
État de l’instance — Novembre 2022
Pour commencer… le dernier mois a été vraiment intense pour Mastodon Canada.
Introduction
L’instance est passée de moins de 60 membres à environ 24 500 membres en deux semaines seulement. Cette simple expérience est devenue un service nécessitant une grande infrastructure, des services de modération et une structure de gouvernance. Je tiens à souhaiter la bienvenue à tout le monde et à vous remercier de votre patience pendant que je m’occupais à ajouter les serveurs nécessaires pour que Mastodon Canada puisse survivre à la nouvelle charge.
Infrastructure
Mastodon Canada est hébergé par DigitalOcean* dans son centre de données TOR1. De nombreuses personnes m’ont demandé, à juste titre, pourquoi j’avais choisi DigitalOcean au lieu d’une option sans serveur, comme AWS ou Azure. J’ai calculé les coûts, et ceux-ci seraient environ 33 % plus élevés avec une option dynamique. De plus, je n’oublie pas qu’Amazon déteste les syndicats et je m’oppose complètement à cette façon de traiter la main-d'oeuvre.
*Les liens menant à DigitalOcean sont des liens affiliés qui soutiennent Mastodon Canada.
Pour l’instant, Mastodon Canada est hébergé sur un nombre impressionnant de quinze serveurs :
- un répartiteur de charge (capable de traiter jusqu’à 1000 demandes par seconde);
- quatre serveurs Puma (pour le site Web);
- deux serveurs Sidekiq (pour traiter les services, p. ex. les demandes de suivi, les favoris et les partages);
- un serveur PostgreSQL (mémoire à long terme);
- un serveur Redis (mémoire à court terme);
- news.mstdn.ca (le site Web sur lequel vous vous trouvez en ce moment);
- postal.mstdn.ca (le serveur de courriel envisagé pour remplacer MailGun);
- api.mstdn.ca (pour les données en temps réel, les fils et les notifications);
- une solution de stockage S3 : en ce moment, pour 578 Go de photos, de vidéos, etc.
Gestion de la croissance
Ce mois-ci, il était difficile « de prédire l’avenir » en ce qui concerne les demandes de serveur. L’instance est passée d’un seul serveur à une séparation de PostgreSQL et de Redis dans leurs propres serveurs dédiés. Les serveurs individuels ont ensuite été renforcés avec plus de puissance de traitement et de mémoire jusqu’à ce qu’il devienne évident qu’il était essentiel de séparer chacune des trois composantes de Mastodon dans leurs propres serveurs.
Le matin du vendredi 25 novembre, il y a eu une panne importante. J’ai écrit une analyse rétrospective (en anglais), mais, en fin de compte, la panne a été causée par une grave omission de ma part après avoir dormi à peine trois heures par nuit pendant deux semaines. Je m’en excuse avec humilité et je vous promets que cela n’arrivera plus jamais.
C’est avec fierté (et prudence) que je peux dire que Mastodon Canada est stable depuis le matin du 26 novembre. Et, maintenant, l’instance pour traiter 240 demandes par seconde. En ce moment, on reçoit en moyenne 180 demandes par seconde aux heures de pointe. Je pourrai aussi rapidement en augmenter la capacité.
Résilience et sécurité
Nous avons des obligations importantes en lien avec le contrat de serveur Mastodon (en anglais), qui vise à garantir la résilience de l’instance :
- Modération active contre le racisme, le sexisme, l’homophobie et la transphobie
- Sauvegardes quotidiennes
- Au moins une autre personne possédant un accès d’urgence à l’infrastructure du serveur
- Engagement d’informer les membres d’une fermeture de l’instance au moins trois mois à l’avance
Je préciserai le premier point sous « Modération et gouvernance ».
Point 2 : Une copie de sauvegarde complète des bases de données PostgreSQL et Redis est effectuée quotidiennement et les journaux de transactions (write-ahead logs) sont maintenus à jour de façon à me permettre de retourner à n’importe quel moment dans les sept jours précédents. Chaque semaine, les mises à jour sont effectuées automatiquement. Une copie de sauvegarde des nœuds de traitement est effectuée chaque semaine et est conservée pendant quatre semaines. Avant tout travail d’entretien, je crée un instantané en direct au cas où il y aurait des problèmes.
Point 3 : Certains modérateurs ont accès aux justificatifs « en cas d’urgence » de DigitalOcean. Ceux-ci leur donneraient un accès complet à l’infrastructure de Mastodon Canada si jamais je me faisais frapper par un autobus. J’aurai bientôt d’autres nouvelles à ce sujet.
Point 4 : En regardant les états financiers (ci-dessous), il est évident que je possède un mandat clair lorsqu’il s’agit de m’occuper de Mastodon Canada à long terme. Tant et aussi longtemps que le financement me le permettra, vous avez ma parole que Mastodon Canada survivra.
Modération et gouvernance
C’est avec un grand plaisir que j’accueille @jace, @erin et @Pheneatis dans l’équipe de modération ce mois-ci. Ils ont été choisis en raison de leur contribution à la communauté ainsi que des talents et compétences dont ils font preuve.
Jace, qui habite à Calgary, a joué un rôle essentiel grâce à la création de nos images magnifiques, y compris notre icône à défenses, porteuse d’un drapeau, et la vignette de l’instance. La vignette me rappelle l’émission de télévision « The Great North ». Il est en fait un ancien ami que j’avais perdu de vue! Je l’ai rencontré en 2007 dans notre chorale provinciale des jeunes, soit l’Alberta Youth Choir.
Erin, de la belle ville d’Ottawa, apporte un point de vue unique et important à l’équipe grâce à sa grande expérience en travail social. Ses antécédents de travail avec les communautés marginalisées et en quête d’équité sont essentiels pour réussir l’impossible.
Stéphanie (ou Pheneatis), nous vient de la ville de Québec (mais habite maintenant à Ottawa). Elle nous offre ses incroyables talents linguistiques pour que nous puissions bien représenter les communautés anglophones et francophones. Mastodon Canada est donc officiellement et réellement une instance bilingue.
Statistiques de modération
Au moment où j’écris ce message, les membres assidus de l’équipe de modération ont traité exactement 400 demandes. Certaines publications ont été signalées dans notre instance, et d’autres d’ailleurs. J’ai collaboré avec l’équipe pour répondre aux 20 appels reçus (lorsqu’une personne est en désaccord avec notre décision). Nous en avons approuvé cinq. Nous savons que nous ne prendrons pas toujours les bonnes décisions du premier coup. Mais, pour notre premier mois, alors que nous apprenons toujours, je dirais qu’un pourcentage d’erreur de 1 % n’est pas si mal.
Financement
Ce n’est pas un secret : j’ai hésité longtemps avant de créer un compte PayPal et de publier le lien pour recevoir des dons le 9 novembre. Il devenait de plus en plus clair que je ne pouvais plus financer moi-même les ressources requises pour m’occuper de Mastodon Canada. J’avais du mal à demander des dons alors que je savais à quel point l’instance était instable.
Je travaille dans le domaine de la TI, surtout sur Windows. J’ai toutefois commencé les opérations de systèmes sur Linux et j’ai tendance à y retourner lorsque je prends des décisions personnelles liées au système d’exploitation. Laissez-moi être clair : j’ai appris énormément ce mois-ci. Comme vous le voyez, le dernier mois a été coûteux. Passons en revue chaque ligne.
Dons et parrainage
Comme l’indique le Rapport des revenus et des dépenses, le soutien pour Mastodon Canada a été tout simplement stupéfiant. C’est avec humilité que j’annonce que 376 d’entre vous pensent que notre communauté mérite certains de vos dollars durement gagnés. En moyenne, les dons s’élevaient à 28,50 $. Le don le plus élevé était de 500 $ et le don le moins élevé était de 1 $. Peu importe où vous vous trouvez sur cette échelle, je tiens à vous remercier sincèrement. C’est grâce à vous que Mastodon Canada est toujours en ligne.
J’ai inclus le parrainage de CIRA avec les dons puisque je trouvais inapproprié de dévoiler le montant précis d’une contribution.
À des fins de transparence, je n’ai pas fait de don à Mastodon Canada puisque je considère mon travail comme un paiement en nature. J’ai aussi demandé à nos modérateurs bénévoles de mettre fin à leurs dons.
Dépenses
Passons à l’essentiel :
PayPal : J’ai pensé à Buy Me a Coffee (que j’ai déjà utilisé et aimé), Patreon et d’autres sites. Toutefois, j’ai découvert que PayPal était l’option la moins coûteuse avec des frais d’environ 3,8 %.
DigitalOcean : C’est ici que toute la magie opère. J’ai pris le temps de bien séparer tous les divers services de ce fournisseur dont profite Mastodon Canada. Notre stockage par blocs (les photos, les GIF et les vidéos téléchargés par tous) s’agrandit. Si on utilisait Amazon S3, les coûts liés au transfert de données s’élèveraient à plus de 1000 $. Les coûts liés aux bases de données gérées ne reflètent pas un mois complet — ils devraient rester à 180 $ par mois. Les nœuds de traitement constituent l’élément frontal de l’application Web, où le traitement des transactions a lieu. Dans un restaurant, il s’agirait du service d’hôtellerie, alors que les bases de données seraient la cuisine. Cet élément est ajustable et j’envisage en fait de le réduire quelque peu. Les coûts liés au répartiteur de charge sont fixes. Cet élément est important pour s’assurer que tous les nœuds de traitement reçoivent une charge égale. Il représente également une couche de sécurité importante; il s’agit en effet d’un des deux seuls nœuds finaux publics de Mastodon Canada.
GoDaddy : Mastodon Canada possède deux domaines : celui que vous connaissez, mstdn.ca, et aussi mastdn.ca. On a besoin d’un deuxième domaine pour le stockage par blocs en raison de certaines complexités liées à CloudFlare et aux espaces de RDC de DigitalOcean. Il s’agit d’un coût annuel.
Cloudflare : Il s’agit d’un élément essentiel de sécurité et de résilience des infrastructures pour nous. Grâce à lui, nous avons pu éliminer 550 Go de trafic (sans inclure les quelque 11 To de médias traités par le stockage par blocs) à traiter par les nœuds de traitement, une économie de 47 % des coûts liés à DigitalOcean. Il bloque également le trafic malveillant et, par bonheur, l’ensemble du trafic russe. Cloudflare offre un certain service gratuit. Malheureusement, nous avons dépassé la limite ce mois-ci.
MailGun : Il s’agit de notre fournisseur de courriels et était gratuit avant la croissance de Mastodon Canada. On peut offrir ce même service à l’interne pour un dixième des coûts de MailGun… alors c’est ce qu’on fera.
Don au développeur de Mastodon : Ce don va de soi. Mastodon Canada tient à soutenir le développement de source libre et a l’obligation morale d’appuyer le projet à partir duquel notre communauté est bâtie.
Notre avenir
Mastodon Canada a un bel avenir. En ce moment, nous avons 112 dons mensuels, d’une valeur d’environ 700 $ (après les 3 à 4 % payés à PayPal). Cela couvre la majorité des coûts mensuels. Le reste est essentiel pour assurer notre longévité. « On » dit toujours qu’il faut avoir l’équivalent de six mois d’épargne, au cas où.
Certains coûts ponctuels prévus comprennent la consultation d’un avocat spécialisé en médias numériques pour nous assurer que notre cadre juridique est adéquat. Plus précisément, je veux m’assurer que nos conditions d’utilisation et notre politique de confidentialité respectent les normes de l’industrie et les exigences du gouvernement fédéral. Je discute avec notre personne-ressource de CIRA pour obtenir des suggestions.
C’est bien connu que je n’aime vraiment pas être le seul à prendre des décisions pour Mastodon Canada. Je me renseigne sur les exigences visant la mise sur pied de notre premier conseil, soit ce qui est requis pour la première demande, comment fonctionne une première assemblée générale annuelle sans présidence ni secrétariat, et mon rôle sur le comité (président élu ou tout autre rôle officiel responsable de l’offre de services). Toutes les personnes ayant exprimé leur intérêt dans un rôle de gouvernance se trouvent dans mon marque-pages; je ne vous oublie pas! En raison du temps des fêtes, je ne peux pas vous promettre que cela se fera en décembre.
Parmi les plans, je veux créer une instance PeerTube pour les créateurs de contenu vérifiés qui veulent partager leurs vidéos avec Mastodon Canada. J’ai eu l’idée en pensant à la série « Shift P[ER]spectives » de l’urgentologue Shazma Mithani, qui est aussi une amie.
J’ai essayé de faire attention à l’utilisation de pronoms possessifs en rédigeant ce rapport. Nous sommes tous investis dans Mastodon Canada. Je ne dirai jamais assez à quel point je suis honoré que vous ayez choisi de faire confiance à cette communauté et, en fin de compte, à moi. Merci à tous les donateurs et à CIRA. Merci pour votre soutien et merci à la communauté. Grâce à vous, Mastodon Canada est un endroit absolument incroyable. Si vous souhaitez contribuer à l’instance, cliquez ici.