A New Hope for Object Storage: R2 enters open beta

Au mois de septembre, nous avons annoncé que nous étions en train de développer notre propre solution de stockage d'objets : Cloudflare R2. Le service R2 constitue notre réponse aux frais de trafic sortant exorbitants imposés par les fournisseurs de cloud actuels. Il permet aux développeurs de stocker autant de données qu'ils le souhaitent, sans se soucier des coûts liés à l'accès à ces dernières.

Les réactions à cette annonce se sont avérées extrêmement positives.

  • Les factures de cloud des développeurs indépendants se révélaient trop modestes pour leur permettre de négocier des frais de trafic sortant équitables auprès des fournisseurs. Ces frais constituaient le poste le plus élevé sur leurs factures et étranglaient ainsi les projets annexes des développeurs, de même que les nouvelles entreprises qu'ils tentaient de bâtir.
  • Les grandes entreprises avaient relégué le stockage multicloud (et, par extension, le multicloud lui-même) au rang de chimère. Elles se sont adressées à nous avec enthousiasme, afin de nous présenter de nouveaux produits intégrant les données aux entreprises partenaires.
  • Les organisations de recherche à but non lucratif dépensaient des fortunes en frais de trafic sortant dans le seul but de partager des données d'expérimentation les unes avec les autres. Ces frais avaient des répercussions réelles sur leur capacité à collaborer. Ils encourageaient ainsi le cloisonnement des recherches, tout en limitant les expériences et les analyses que les organisations pouvaient réaliser.

Cloudflare a pour objectif de contribuer à bâtir un Internet meilleur. Le réseau Internet bénéficie aujourd'hui d'un outil bien mérité, car la solution R2 est désormais en bêta ouverte.

Les clients en libre-service peuvent activer le service R2 dans le tableau de bord Cloudflare. Les titulaires de comptes Enterprise, quant à eux, peuvent contacter leur CSM afin de procéder à leur intégration.

API internes et externes

La solution R2 dispose de deux API : une API uniquement accessible depuis Workers, que nous appelons l'API In-Worker (intra-Worker), et une API compatible S3, qui expose votre compartiment au sein d'une URL se présentant sous la forme compartiment.compte.r2storage.com. Vous devrez en outre vous authentifier avant d'effectuer des requêtes au service R2. En effet, les compartiments R2 sont privés par défaut.

API In-Worker

Dans le cadre de l'API In-Worker, un compartiment est « lié » à un Worker spécifique, qui peut alors exécuter des opérations PUT, GET, DELETE et LIST sur ce dernier.

API compatible S3

Pour l'API compatible S3, l'authentification s'effectue de la même manière que sur S3 : en analysant une URL R2 selon le processus SigV4. Le processus SigV4 signe les requêtes à l'aide d'une clé secrète afin de les authentifier auprès du service R2. Cette opération implique que l'accès public à la solution R2 par Internet n'est aujourd'hui possible qu'en hébergeant un Worker, en le connectant à R2 et en routant les requêtes via ce dernier.

Le moyen le plus simple de tester l'API compatible S3 consiste à utiliser un client S3. Le SDK boto3 constitue l'un des clients S3 les plus populaires.

Dans Python, copiez le script suivant et renseignez les account_id, access_key, et secret_access_key avec les identifiants de votre compte R2.

main.py
import boto3

s3 = boto3.resource('s3',
  endpoint_url = 'https://<accountid>.r2.cloudflarestorage.com',
  aws_access_key_id = '<access_key_id>',
  aws_secret_access_key = '<access_key_secret>'
)

print('Buckets:')
for bucket in s3.buckets.all():
  print(' - ', bucket.name)

bucket = s3.Bucket('my-bucket-name')

print('Objects:')
for item in bucket.objects.all():
  print(' - ', item.key)

Fonctionnalités

La solution R2 prend en charge l'ensemble des fonctionnalités de base de S3 (créer/lire/mettre à jour/supprimer) par l'intermédiaire de ses deux API.

Pendant la période de la bêta ouverte, nous prévoyons que le service R2 soutienne 1 000 opérations GET par seconde et 100 opérations PUT par seconde, pour chaque compartiment. Le service R2 prend en charge les objets jusqu'à une taille d'environ 5 To, avec des éléments individuels limités à 5 Go de données.

La solution R2 assure un accès fortement cohérent aux données. Une fois une opération PUT confirmée par le service R2, les opérations GET à venir reflètent toujours la nouvelle paire clé/valeur. La suppression d'un compartiment constitue l'unique exception à ce schéma. En effet, le compartiment peut continuer à exister pendant une brève période après la suppression et ainsi permettre les opérations de lecture/écriture.

Tarification

L'annonce initiale de la solution R2 mentionnait des tarifs préliminaires. L'un de nos objectifs principaux concernant R2 consistait à proposer un service aux développeurs qui ne pouvaient pas négocier de réductions notables auprès des fournisseurs de cloud. À cette fin, nous annonçons également un niveau de tarification perpétuellement gratuit, qui permettra aux développeurs de commencer à travailler sur R2 sans débourser un centime.

La facturation du service R2 dépend du volume total de données stockées et du type d'opérations exécutées sur ces dernières :

  • Le stockage est proposé au prix de 0,015 USD par Go et par mois.
  • Les opérations de classe A (dont les opérations de lecture/écriture) coûtent 4,50 USD par million.
  • Les opérations de classe B sont facturées 0,36 USD par million.

Les opérations de classe A ont tendance à impliquer une mutation d'état, comme la création d'un compartiment, l'énumération des objets au sein d'un compartiment ou l'écriture d'un objet. Les opérations de classe B, quant à elles, tendent à lire un état existant (par exemple, la lecture d'un objet depuis un compartiment). Vous trouverez plus d'informations sur la tarification, ainsi qu'une liste complète des types d'opérations, dans les documents.

Bien entendu, la solution R2 ne facture aucuns frais de bande passante sortante. Vous pouvez accéder à votre compartiment autant que vous le souhaitez.

Le niveau de tarification perpétuellement gratuit inclut ce qui suit :

  • 10 Go/mois de données stockées.
  • 1 000 000 d'opérations de classe A par mois.
  • 1 000 000 d'opérations de classe B par mois.

L'utilisation du service R2 dans le cadre du niveau gratuit se réinitialise chaque mois. Elle sera néanmoins facturée pendant la phase de bêta ouverte.

Développements à venir

Nous avons passé les six derniers mois en bêta fermée, à développer notre solution de stockage avec un certain nombre de partenaires de conception. Soutenue par la fonctionnalité Durable Objects, l'architecture novatrice du service R2 propose à la fois une disponibilité élevée et des performances cohérentes.

Nous avons déjà effectué de gros progrès sur la solution R2, mais il nous reste encore beaucoup à bâtir ces prochains mois.

Amélioration des performances

Notre priorité principale consiste à améliorer les performances et la fiabilité. Nous avons redirigé notre utilisation interne et les demandes de nos partenaires de conception vers la solution R2, mais rien ne remplace le trafic de production réel.

Pendant la période de la bêta ouverte, le service R2 pourra soutenir 1 000 opérations GET par seconde et 100 opérations PUT par seconde, pour chaque compartiment. Nous envisagerons de relever ces limites lorsque nous nous serons familiarisés avec le fonctionnement du système. N'hésitez pas à nous contacter si vous avez des besoins plus élevés en la matière !

Vous ne verrez pas de sélecteur de région lors de la création d'un compartiment. Notre vision pour la solution R2 s'articule autour d'un stockage automatiquement distribué à l'échelle mondiale, dans le cadre duquel le service R2 place, en toute fluidité, chaque objet au sein de la région de stockage la plus proche de l'origine de la requête. À l'heure actuelle, R2 stocke principalement les données en Amérique du Nord. Ce mode opératoire pourrait cependant entraîner des latences élevées lors de l'accès au contenu depuis d'autres régions. Avant d'ajouter une fonctionnalité de migration automatique des objets existants entre les régions, nous chercherons tout d'abord à répondre à ce problème en ajoutant des régions supplémentaires au sein desquelles les objets pourront être créés. Sur le même principe que ce que nous avons conçu avec les restrictions de juridiction pour Durable Objects, nous établirons des limitations quant à l'endroit où un compartiment R2 place les données afin de respecter les diverses législations en matière de confidentialité.

Élargissement de l'ensemble de fonctionnalités de la solution R2

Nous nous attellerons ensuite à l'extension des capacités du service R2, au-delà des fonctionnalités de base de l'API S3. À court terme, nous nous concentrerons sur les points suivants :

  • Prise en charge des TTL (durées de vie), afin que les données puissent être automatiquement supprimées des compartiments au fil du temps.
  • Prise en charge des compartiments publics, afin qu'un compartiment puisse être exposé à Internet sans nécessité de rédiger un Worker.
  • Prise en charge des URL présignées, afin de déléguer les accès en lecture/écriture d'une clé spécifique à un jeton.
  • Intégration au cache de Cloudflare, afin d'assurer la mise à l'échelle des requêtes de lecture et la distribution mondiale des données.

Si vous avez d'autres requêtes de fonctionnalités supplémentaires à formuler que celles qui figurent dans la liste ci-dessus, n'hésitez pas à nous en faire part ! Rejoignez notre Discord et partagez avec nous (sur le canal r2-open-beta) ce dont vous avez besoin pour faire du service R2 votre nouvelle solution de stockage d'objets sans frais de trafic sortant.