Объектное хранилище MinIO
Объектное хранилище MinIO

Объектное хранилище MinIO

1. Знакомство с MinIO

MinIO этона основеApache License v2.0Объекты соглашения об открытом исходном кодехранилище Служить。он совместим с амазонкойS3облакохранилище Служитьинтерфейс,Идеально подходит для хранения больших объемов неструктурированных данных.,Например, изображения, видео, файлы журналов, резервные данные, образы контейнеров/виртуальных машин и т. д.,Объектный файл может иметь любой размер.,Размер от нескольких Кб до максимум 5Т.

MinIOочень легкий Служить,Легко комбинируется с другими приложениями.,похожий NodeJS, Redis или MySQL


Официальная документация:

2. Три архитектуры развертывания MinIO

  • Режим одного хоста с одним жестким диском
  • Режим одного хоста с несколькими жесткими дисками
  • Распространение на несколько хостов и на несколько жестких дисков

3. Функции MinIO

  • Высокая производительность: как высокопроизводительный объект он может достигать скорости чтения 55 ГБ/с и скорости записи 35 ГБ/с при стандартных аппаратных условиях.
  • Расширяемый:другойMinIOКластеры могут образовывать федерации,и сформировать глобальное пространство имен,и в нескольких центрах обработки данных
  • облако Родной:контейнеризменять、на основеK8Sдоговоренность、Мультитенантная поддержка
  • Amazon S3совместимый:MinioиспользоватьAmazon S3 v2 / v4 API。МожетиспользоватьMinio SDK,Minio Client,AWS SDKиAWS CLIдоступMinioСлужитьустройство。
  • Можно состыковать с бэкэндхранилищем: КромеMinioсобственная файловая система,Также поддерживаетDASJBODsNAS、GoogleоблакохранилищеиAzure Blobхранилище。
  • SDKподдерживать: на основеMinioЛегкие функции,Он поддерживается SDK для таких языков, как Java, Python или Go.
  • Расчет лямбды: MinioСлужитьустройствочерез егосовместимыйAWS SNS / SQSуведомление о событии СлужитькурокLambdaФункция。поддерживать Целью является очередь сообщений.,нравитьсяKafka,NATS,AMQP,MQTT,Вебхуки и Elasticsearch,Redis,PostgresиMySQLждатьданные Библиотека。
  • Есть операционная страница
  • Простая функция: Этот принцип конструкции позволяетMinIOменьше подвержен ошибкам、Начни быстрее
  • поддерживатьстирающее кодирование:MinIOиспользоватьстирающее кодированиеChecksumдля предотвращения аппаратных ошибокитишинаданныезагрязнять。В конфигурации с наивысшим резервированием,Данные можно восстановить, даже если потеряно 1/2 диска!

4. Механизм хранения

Minioиспользоватьстирающее кодированиеerasure codeиКонтрольная суммаДаже если половина количества (N/2) жестких дисков будет утеряна, данные все равно можно восстановить.

 Стирающее кодирование — это математический алгоритм восстановления потерянных и поврежденных данных.


5. Докер, установка MinIO

 Вытащите изображение

Язык кода:javascript
копировать
docker pull minio/minio

 Позже проверьте, было ли изображение успешно извлечено.

Язык кода:javascript
копировать
docker images

 Запустите контейнер MinIO:

Язык кода:javascript
копировать
docker run \
  -p 9000:9000 \
  -p 9001:9001 \
  --name minio \
  -d --restart=always \
  -e "MINIO_ROOT_USER=admin" \
  -e "MINIO_ROOT_PASSWORD=admin123456" \
  -v /home/data:/data \
  -v /home/config:/root/.minio \
  minio/minio server /data --console-address ":9001"

  Просматриватьустройстводоступ:http://localhost:192.168.159.141:9000/minio/login

  Мы тамконтейнер Имя пользователя, указанное в команде запускаadmin,Парольadmin123456,Войдите сюда и нажмите, чтобы войти,Основной интерфейс выглядит следующим образом

 Вы можете увидеть здесь Ведра, потому что я создал их раньше.

6. Используйте Java-клиент для вызова MinIO.

Справочная документация:

https://docs.min.io/docs/java-client-api-reference.html

https://minio-java.min.io/

6.1 Введение зависимостей

 Добавьте следующие зависимости в свой собственный микросервисный модуль:

Язык кода:javascript
копировать
<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>8.2.0</version>
</dependency>

6.2 Добавьте файл конфигурации

Язык кода:javascript
копировать
minio:
  endpointUrl: http://192.168.159.141:9000
  accessKey: admin
  secreKey: admin123456
  bucketName: gmall

  Я написал файл конфигурации здесь, в центре конфигурации Nacos.

6.3 Создание контроллера FileUploadController

Язык кода:javascript
копировать
@Api(tags = «Контроллер загрузки файлов»)
@RestController
@RequestMapping("/admin/product")
public class FileUploadController {

    //Читаем конфигурацию в файле конфигурации
    @Value("${minio.endpointUrl}")
    private String endpointUrl;

    @Value("${minio.accessKey}")
    private String accessKey;

    @Value("${minio.secreKey}")
    private String secreKey;

    @Value("${minio.bucketName}")
    private String bucketName;

    @ApiOperation("Загрузка файла MinIO")
    @PostMapping("/fileUpload")
    public Result fileUpload(MultipartFile file) {
        String url="";

        try {
            // Создать клиентский объект minioClient
            MinioClient minioClient =
                    MinioClient.builder()
                            .endpoint(endpointUrl)
                            .credentials(accessKey, secreKey)
                            .build();

            // Определить, существует ли указанный сегмент
            boolean found =
                    minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
            if (!found) {
                // Если указанный бакет не существует, создайте его.
                minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
            } else {
                System.out.println("Bucket " + bucketName + " already exists.");
            }
            //Имя файла
            String fileName = System.currentTimeMillis() + UUID.randomUUID().toString();

            minioClient.putObject(
                    PutObjectArgs.builder().bucket(bucketName).object(fileName).stream(
                            file.getInputStream(), file.getSize(), -1)
                            .contentType(file.getContentType())
                            .build());

            //Соединяем путь к файлу
             url=endpointUrl+"/"+bucketName+"/"+fileName;
            System.out.println("Путь к изображению:"+url);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return Result.ok(url);
    }

}

Этот контроллер сначала проверяет наличие бакетов (сегментов хранения). Если нет, сначала создайте их, а затем выполните операцию загрузки файла. Наконец, нашему контроллеру необходимо вернуть путь доступа к изображению во внешний интерфейс.

6.4 Тестирование

 На самом деле, этот шаг в основном завершен. Я не буду включать последующий бизнес-код, а буду напрямую использовать Swagger UI, чтобы протестировать его и показать эффект.

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

  можно увидеть,dataСвойство возвращает наше изображениедоступпуть

 Мы получаем доступ к этому URL-адресу непосредственно в браузере.

  Как видите, проблем нет.

 Мы также можем найти изображение, которое мы только что загрузили в Buckets.


  Ладно, пока, Объектное хранилище Представлено базовое использование MinIO. Осталось написать злой код на базе собственного бизнеса.   На самом деле, если вам слишком сложно создать службу объектного хранения самостоятельно, я уже писал статьи об Alibaba Cloud OSS и Tencent Cloud OSS, и эти методы также очень удобны.

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