CubeFS — новое поколение облачной системы хранения данных
CubeFS — новое поколение облачной системы хранения данных

CubeFS Это новое поколение облачной системы хранения данных, которая поддерживает S3、HDFS и POSIX и другие протоколы доступа, поддерживающие два механизма хранения: мультирепликацию и стирающее кодирование, предоставляющие пользователям мультиарендность, много AZ развертыватьи по регионамкопироватьждатьмногодобрыйхарактеристика。

CubeFS Как облачный роднойиз распределенной складской платформы,Обеспечивает много доступ к протоколу,Поэтому сценарии его применения также очень широки.,В этом разделе кратко представлены несколько типичных сценариев применения.

  • большойданныеанализировать:совместимый HDFS протокол,Предоставляет единую основу для экологии Hadoop (например, Spark, Hive).,Обеспечьте неограниченное пространство и большую пропускную способность для вычислительного механизма.
  • Глубокое обучение/машинное обучение: как распределенная параллельная файловая система, поддерживающая AI Обучение, модельхранилище и распространение, IO Ускорение и другие потребности.
  • Совместное использование контейнеровхранилище:Кластеры контейнеров могут зеркально отображать контейнеры.из Конфигурацияискусствофайл или начальная загрузкаданныехранилищесуществовать CubeFS Включенные, существующие контейнеры считываются в реальном времени во время пакетной загрузки. много Pod пройти через CubeFS Общая настойчивостьданные,существовать Pod В случае сбоя возможно быстрое аварийное переключение.
  • данные Библиотека&промежуточное программное обеспечение:дляданные Библиотека Такие приложения, как MySQL、ElasticSearch、ClickHouse обеспечивает высокий уровень параллелизма、Служба облачных дисков с низкой задержкой,Достичь полного разделения хранения и вычислений.
  • существуют онлайн-сервисы: для существования онлайн-бизнеса (например, рекламы、нажмите поток、Поиск) или конечному пользователю из диаграммы、искусство、Обеспечить высокую надежность аудио и видео контента.、бюджетныйизобъектхранилище Служить。
  • Традиция NAS На облаке: замените строку Вниз Традиция локальной хранилища и НАН, помогите IT Бизнес переходит в облако.

характеристика

CubeFS Имеет множество многохарактеристик, в том числе:

многопротокол

Совместимый S3, POSIX, HDFS и другие типы могут иметь доступ к протоколу, и протоколы могут взаимодействовать друг с другом.

  • POSIX совместимый:совместимый POSIX Интерфейс делает разработку приложений верхнего уровня чрезвычайно простой, такой же удобной, как использование локальной файловой системы. Кроме того, CubeFS расслаблен при реализации POSIX Семантикаиз Учет требований согласованностиискусствокускии Юаньискусствокускидействоватьизпроизводительность。
  • объектхранилищесовместимый:совместимый AWS из S3 Объект хранилищепротокол, пользователи могут использовать собственный из Amazon S3 SDK управлять CubeFS серединаизресурс.
  • Hadoop протоколсовместимый:совместимый Hadoop FileSystem Интерфейс протокола, который могут использовать пользователи CubeFS заменить HDFS делает бизнес верхнего уровня нечувствительным.

двойной двигатель

Поддерживает два механизма: многократное копирование и стирающее кодирование. Пользователи могут гибко выбирать в соответствии с бизнес-сценариями.

  • механизм хранения много реплик: зеркальные отношения между репликами,Обеспечьте согласованность между репликами за счет строгой согласованности,Пользователи могут гибко настраивать различное количество реплик в зависимости от сценариев применения.
  • Механизм хранилища кода стирания: механизм кода стирания имеет высокую надежность.、Высокая доступность、бюджетный、поддерживатьдогонятьбольшойшкала(EB)изхарактеристика,По разным AZ Модель может гибко выбирать режим стирающего кодирования.

много арендатор

поддерживатьмного арендаторуправлять,Обеспечьте детализированную политику изоляции клиентов.

Расширяемый

Распределенные службы хранения данных масштаба PB или EB можно легко построить, а каждый модуль можно расширять горизонтально.

высокая производительность

Поддержка многоуровневого кэша,Специальная оптимизация для небольших файлов,поддерживатьмногодобрыйвысокая производительностьизкопироватьпротокол

  • Юаньданныеуправлять:Юаньданныекластердля Память Юаньданныехранилище,существоватьдизайн Использовать два B-Tree(inodeBTree и dentryBTree) для управления индексом, тем самым улучшая производительность доступа к данным элемента;
  • Строго согласованная реплика протокола :CubeFS В зависимости от метода записи файла используются разные методы обеспечения согласованности между копиями. (если файлы записаны по порядку, а для оптимизации будет использован основной и резервный копироватьпротокол) IO Пропускная способность; еслида использует на, когда произвольная запись перезаписывает существующее содержимое файла. основе Multi-Raft изкопироватьпротокол, чтобы обеспечить надежную согласованность данных);
  • многоуровень кэша:стирающее кодированиерулон Поддержка многоуровневого кэшаспособность ускорения,Ориентация на горячие точки,Обеспечьте более высокую производительность доступа к данным:
  • Локальный кэш: можно найти в Client На той же машине развернуть BlockCache Компонент, использующий локальный диск в качестве локального кэша. Может читать локально напрямую, минуя сеть. Cache, Однако емкость ограничена локальным диском;
  • Глобальный кеш: использование компонентов реплики DataNode Постройте распределенную глобальную систему Cache, Например, общаться с компьютерным залом можно через клиент развертывания. SSD Диск из DataNode как глобальный cache, относительно местного cache, Нужно пройти через сеть, Но да имеет большую емкость, Емкость можно динамически расширять и уменьшать, а количество копий можно регулировать.

облачный родной

CubeFS можно быстро использовать в Kubernetes на основе плагина CSI.

общая архитектура

общий CubeFS Подсистемой метаданных (Metadata Подсистема), подсистема данных (Data Subsystem)и Узел управления связи (Master) и Object Gateway (Object Gateway). Подсистема), которую можно передать POSIX/HDFS/S3 Интерфейс для доступа к сохраненным данным.

Узел управления ресурсами

Много Master Он состоит из узлов и отвечает за асинхронную обработку различных типов задач, таких как управление фрагментами данных и метаданных (включая создание, удаление, обновление и проверку согласованности и т. д.), проверку состояния работоспособности узлов данных или узлов метаданных. а также сохранение и управление информацией об объеме ожидания.

Master Узлов может быть много, количество узлов равно проходу. через Raft Алгоритм обеспечивает согласованность метаданных и сохраняется до RocksDB середина.

подсистема метаданных

Много Meta Node Состав узла, много фрагментов данных (мета Partition)и Raft Пример (на основе Multi-Raft протокол репликации), каждый фрагмент метаданных представляет собой Inode Метаданные диапазона, которые содержат две памяти. B-Tree дерево: индексный дескриптор BTree и dentry BTree。

Требуется как минимум 3 экземпляра метаданных, поддерживается горизонтальное расширение.

Подсистема данных

Разделена на подсистему реплики и подсистему стирающего кодирования.,Обе подсистемы могут хранить существующее одновременно.,Вы также можете сохранить их отдельно:

  • Подсистема реплик состоит из DataNode композиция,Каждый узел управляет набором фрагментов данных.,многоузловые изданные шарды составляют группу реплик;
  • Подсистема стирающего кодирования (Blobstore) в основном состоит из BlobNode модулькомпозиция,Каждый узел управляет набором блоков данных.,Многоузловые изданные блоки составляют полосу кода стирания.

Узлы данных поддерживают горизонтальное расширение.

объектная подсистема

Зависит отобъектузел(ObjectNode)композиция,Совместимый стандарт предусмотрен S3 Доступ к протоколам семантического доступа можно получить через Amazon S3 SDK или есть s3cmd и другие инструменты для доступа к ресурсам хранения.

рулон

Логично из концепции,Состоит из множества данныхидированных осколков.,С точки зрения клиента,рулон можно рассматривать как экземпляр файловой системы, к которому может получить доступ контейнер. С точки зрения объектхранилищеиз,Рулон соответствует ведру. Рулон можно монтировать в существумного контейнера.,делатьискусствокуски Могут быть доступны одновременно различным клиентам.。

Установить

CubeFS из Установить Есть много способов, в том числе Docker、YUM Подожди, раз уж мы здесь прямо Kubernetes используется,поэтому мы можем пройти Helm Приходить Установить CubeFS, каждый компонент будет напрямую использовать хост-сеть, используйте hostPath Сопоставьте диск с контейнером середина.

Развертывание CubeFS в кластере Kubernetes может осуществляться в соответствии с архитектурой, показанной на рисунке ниже:

CubeFS в настоящее время состоит из следующих четырех частей:

  • Master:Узел управления Службы, отвечающие за поддержание всего кластера метаинформации, развертывание StatefulSet ресурс.
  • DataNode:данныехранилищеузел,Необходимость монтирования большого количества дисков, отвечающих за файлы данных в фактическом хранилище.,развертыватьдля DaemonSet ресурс.
  • MetaNode:Юаньданныеузел,Отвечает за всю метаинформацию файла.,развертыватьдля DaemonSet ресурс.
  • ObjectNode:Ответственный за конверсию S3 Протокол обеспечивает возможности хранения объектов, сервисы без отслеживания состояния, развертывание для Deployment ресурс.

Перед развертыванием нам необходимо иметь кластер Kubernetes как минимум с 3 узлами (желательно более 4 для аварийного восстановления), а версия кластера должна быть больше или равна 1,15.

Язык кода:javascript
копировать
$ kubectl get nodes
NAME     STATUS   ROLES           AGE   VERSION
master   Ready    control-plane   46d   v1.28.7
node1    Ready    <none>          46d   v1.28.7
node2    Ready    <none>          46d   v1.28.7

Во-первых, нам нужно пометить узлы собственными метками, чтобы указать роль, которую эта машина будет играть в кластере CubeFS:

Поскольку у нас здесь всего 3 узла, нам нужно, чтобы эти узлы выполняли некоторые общие роли.

  • Master Узлов, не менее трех, рекомендуется нечетное количество:
Язык кода:javascript
копировать
kubectl label node master component.cubefs.io/master=enabled
kubectl label node node1 component.cubefs.io/master=enabled
kubectl label node node2 component.cubefs.io/master=enabled
  • MetaNode узел данных элемента, по крайней мере 3 Индивидуальное, нечетное или четное не имеет значения:
Язык кода:javascript
копировать
kubectl label node master component.cubefs.io/metanode=enabled
kubectl label node node1 component.cubefs.io/metanode=enabled
kubectl label node node2 component.cubefs.io/metanode=enabled
  • Datanode узел данных, по крайней мере 3 Индивидуальное, нечетное или четное не имеет значения:
Язык кода:javascript
копировать
kubectl label node master component.cubefs.io/datanode=enabled
kubectl label node node1 component.cubefs.io/datanode=enabled
kubectl label node node2 component.cubefs.io/datanode=enabled
  • ObjectNode объектхранилищеузел,Можно отметить по необходимости,Если функция хранилища объектов не требуется, можно обойтись и без этого компонента:
Язык кода:javascript
копировать
kubectl label node node1 component.cubefs.io/objectnode=enabled
kubectl label node node2 component.cubefs.io/objectnode=enabled
  • CSI компонент для использования в Kubernetes используется в CubeFS требует наличия развертывания на всех узлах:
Язык кода:javascript
копировать
kubectl label node node1 component.cubefs.io/csi=enabled
kubectl label node node2 component.cubefs.io/csi=enabled

CubeFS Установка будет передаваться на основе этих тегов nodeSelector Сопоставьте, а затем создайте соответствующий Pod。

Далее мы можем пройти Helm Приходить Установить CubeFS , сначала нам нужно CubeFS из Helm Chart Скачать на локальный:

Язык кода:javascript
копировать
git clone https://github.com/cubefs/cubefs-helm
cd cubefs-helm

Затем настройте его в соответствии со своей средой. values Файл, например Внизлапшадаa simpleiz values документ:

Язык кода:javascript
копировать
# cubefs-values.yaml
component:
  master: true
  datanode: true
  metanode: true
  objectnode: false
  client: false
  csi: true
  monitor: false
  ingress: true

image:
  # 3.3.0 версия появится раньше /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found ошибка
  server: cubefs/cfs-server:v3.3.0
  client: cubefs/cfs-client:v3.3.0
  csi_driver: cnych/cubefs-cfs-csi-driver:3.2.0.150.0
  csi_provisioner: cnych/csi-provisioner:v2.2.2
  csi_attacher: cnych/csi-attacher:v3.4.0
  csi_resizer: cnych/csi-resizer:v1.3.0
  driver_registrar: cnych/csi-node-driver-registrar:v2.5.0

master:
  # The replicas of master component, at least 3, recommend to be an odd number
  replicas: 3
  tolerations:
    - key: "node-role.kubernetes.io/control-plane"
      operator: "Exists"
      effect: "NoSchedule"
  resources:
    enabled: true
    requests:
      memory: "512Mi"
      cpu: "500m"
    limits:
      memory: "512Mi"
      cpu: "500m"

metanode:
  total_mem: "4000000000"
  tolerations:
    - key: "node-role.kubernetes.io/control-plane"
      operator: "Exists"
      effect: "NoSchedule"
  resources:
    enabled: true
    requests:
      memory: "512Mi"
      cpu: "500m"
    limits:
      memory: "512Mi"
      cpu: "500m"

datanode:
  # DataNode Чтобы использовать из-диск, вы можете смонтировать многоблок
  # Формат: Точка монтирования: зарезервированное пространство
  # Зарезервированное место: Единичный байт, когда оставшееся пространство на диске меньше этого значения, данные на диск больше не записываются.
  disks:
    - /data0:10000000000
  tolerations:
    - key: "node-role.kubernetes.io/control-plane"
      operator: "Exists"
      effect: "NoSchedule"
  resources:
    enabled: true
    requests:
      memory: "512Mi"
      cpu: "500m"
    limits:
      memory: "512Mi"
      cpu: "500m"

csi:
  driverName: csi.cubefs.com
  logLevel: error
  kubeletPath: /var/lib/kubelet
  controller:
    tolerations: []
    nodeSelector:
      component.cubefs.io/csi: "enabled"
  node:
    tolerations: []
    nodeSelector:
      component.cubefs.io/csi: "enabled"
    resources:
      enabled: true
      requests:
        memory: "512Mi"
        cpu: "500m"
      limits:
        memory: "512Mi"
        cpu: "500m"

  storageClass:
    setToDefault: false
    reclaimPolicy: "Delete"

# CSI Конфигурация клиента
provisioner:
  # Kubelet из Главный каталог
  kubelet_path: /var/lib/kubelet

Затем используйте следующую команду для развертывания CubeFS:

Язык кода:javascript
копировать
helm upgrade --install cubefs -n cubefs-system ./cubefs-helm/cubefs -f cubefs-values.yaml --create-namespace

После завершения развертывания вы можете использовать команду kubectl get pods -n cubefs-system Подождите, пока статус всех компонентов изменится на Running Вот и все:

Язык кода:javascript
копировать
$ kubectl get pods -n cubefs-system
NAME                                  READY   STATUS     RESTARTS   AGE
cfs-csi-controller-66cdbb664f-pqkp6   4/4     Running    0          28m
cfs-csi-node-966t9                    2/2     Running    0          25m
cfs-csi-node-9f4ts                    2/2     Running    0          25m
datanode-4zfhc                        1/1     Running    0          28m
datanode-blc8w                        1/1     Running    0          28m
datanode-ldj72                        1/1     Running    0          28m
master-0                              1/1     Running    0          28m
master-1                              1/1     Running    0          23m
master-2                              1/1     Running    0          23m
metanode-5csgt                        1/1     Running    0          7m31s
metanode-jvqnl                        1/1     Running    0          7m31s
metanode-vpjtj                        1/1     Running    0          7m31s

Ключевые журналы каждого компонента будут выводиться на стандартный вывод контейнера.

Кроме того, StorageClass объект, который можно передать kubectl get sc Проверять:

Язык кода:javascript
копировать
$ kubectl get sc
NAME         PROVISIONER                                   RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
cfs-sc       csi.cubefs.com                                Delete          Immediate           true                   29m

тест

Теперь существование нашего Понятного доступноиз StorageClass объект, вы можете создать следующий PVC возражать против теста CubeFS функция складирования. Как показал Вниз:

Язык кода:javascript
копировать
# cubefs-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: cubefs-pvc
  namespace: default
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: cfs-sc

Выше PVC В объекте, который мы передаем storageClassName Задается с помощью из StorageClass Имя, вот оно cfs-sc,Это имя необходимо, и мы создали его раньше из StorageClass Название такое же, поэтому оно будет основано на cubefs-sc Определите параметры для создания хранилищерулона. Когда мы пишем существовать pvc yaml В основном обращайте внимание на параметры:

  • metadata.name:pvc из названия, может быть изменено по мере необходимости, то же самое namespace Вниз pvc имядатолькоиз,Нет двух одинаковыхизимя。
  • metadata.namespace:pvc Местосуществоватьизпространство имена, измените при необходимости
  • spec.resources.request.storage:pvc Размер емкости.
  • storageClassName:этотда storage class изName. если Хотите узнать, какие сейчас кластеры класс хранения, вы можете передать команду kubectl get sc Приходить Проверять。

Примените это прямо здесь yaml Файл Вот и все:

Язык кода:javascript
копировать
kubectl apply -f cubefs-pvc.yaml

После выполнения команды вы можете передать команду kubectl get pvc -n пространство имен чтобы просмотреть соответствующий pvc из Статус, Ожидание Представитель ждет, Связанный Это значит, что творение прошло успешно.

Язык кода:javascript
копировать
$ kubectl get pvc
NAME         STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
cubefs-pvc   Bound    pvc-53cc95b7-8a05-43f8-8903-f1c6f7b11c05   5Gi        RWO            cfs-sc         3s

если PVC из Статус всегда был В ожидании вы можете проверить причину с помощью команды:

Язык кода:javascript
копировать
kubectl describe pvc -n пространство имен PVC имя

если Сообщение об ошибке не очевидноили Не могу видетьошибка,тогда вы можете использовать kubectl logs Сначала проверьте связанные команды csi controller pod Внутри csi-provisioner Сообщение об ошибке контейнера,csi-provisioner да k8s и csi driver Из среднего моста очень много информации имеется в журнале Проверять.

если csi-provisioner Если конкретную проблему невозможно найти в журнале, используйте kubectl exec Просмотр связанных команд csi controller pod Внутри cfs-driver контейнеризбревно,этоизбревнопомещатьсуществоватьконтейнер Внутри /cfs/logs Вниз.

Недоступно здесь Kubectl logs Связанные команды дапотому что cfs-driver изLog не выводит на стандартный вывод, хотя некоторые другие аналогичны csi-provisioner из sidecar Контейнер из журнала выводится на стандартный вывод, поэтому его можно использовать kubectl logs Просмотр связанных команд。

Понятно PVC Затем подключите Вниз и можете существовать монтировать на указывает каталог. Например, у нас есть пример, показанный в Вниз:

Язык кода:javascript
копировать
# cfs-csi-demo.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: cfs-csi-demo
  namespace: default
spec:
  selector:
    matchLabels:
      app: cfs-csi-demo-pod
  template:
    metadata:
      labels:
        app: cfs-csi-demo-pod
    spec:
      nodeSelector:
        component.cubefs.io/csi: enabled
      containers:
        - name: cfs-csi-demo
          image: nginx:1.17.9
          imagePullPolicy: "IfNotPresent"
          ports:
            - containerPort: 80
              name: "http-server"
          volumeMounts:
            - mountPath: "/usr/share/nginx/html"
              mountPropagation: HostToContainer
              name: mypvc
      volumes:
        - name: mypvc
          persistentVolumeClaim:
            claimName: cubefs-pvc

Выше Список ресурсовсерединамы будемимядля cubefs-pvc из PVC монтировать на cfs-csi-demo контейнер Внутри /usr/share/nginx/html Вниз.

Также создайте этот список ресурсов напрямую.

Язык кода:javascript
копировать
kubectl apply -f cfs-csi-demo.yaml

После создания можно пройти kubectl get pods Проверять Pod из Статус:

Язык кода:javascript
копировать
$ kubectl get pods -owide
NAME                                      READY   STATUS    RESTARTS       AGE   IP           NODE    NOMINATED NODE   READINESS GATES
cfs-csi-demo-5d456c8d97-sjsvw             1/1     Running   0              78s   10.0.1.85    node1   <none>           <none>

Мы можем перейти непосредственно к /usr/share/nginx/html Файл записи каталога в тест CubeFS функция хранения:

Язык кода:javascript
копировать
$ kubectl exec -it cfs-csi-demo-5d456c8d97-sjsvw -- /bin/bash
root@cfs-csi-demo-5d456c8d97-sjsvw:/# echo "Hello, CubeFS" > /usr/share/nginx/html/index.html
root@cfs-csi-demo-5d456c8d97-sjsvw:/#

Тогда мы можем преобразовать это Pod удалитьреконструкция,Затем Проверятьда Есть ли ещеэтотдокумент:

Язык кода:javascript
копировать
$ kubectl delete pod cfs-csi-demo-5d456c8d97-sjsvw
$ kubectl get pods
NAME                                      READY   STATUS    RESTARTS       AGE
cfs-csi-demo-5d456c8d97-c245z             1/1     Running   0              3m22s
$ kubectl exec -it cfs-csi-demo-5d456c8d97-c245z -- ls /usr/share/nginx/html
index.html
$ kubectl exec -it cfs-csi-demo-5d456c8d97-c245z -- cat /usr/share/nginx/html/index.html
Hello, CubeFS

если можно увидеть Hello, CubeFS Это означает CubeFS Изхранилище функционирует нормально.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose