Make it durable

Make it durable

Bagian ini memperkenalkan penyimpanan objek.

OpenStack Object Storage (code-named swift) adalah perangkat lunak open-source yang memungkinkan Anda membuat penyimpanan data yang berlebihan dan terukur dengan menggunakan kumpulan server standar untuk menyimpan petabyte data yang dapat diakses. Ini adalah sistem penyimpanan jangka panjang untuk sejumlah besar data statis yang dapat Anda ambil, leverage, dan perbarui. Tidak seperti sistem penyimpanan tradisional lainnya yang Anda akses melalui sistem file, Anda mengakses Object Storage melalui API.

Object Storage API diatur di sekitar objek dan kontainer.

Mirip dengan model pemrograman UNIX, sebuah objek, seperti dokumen atau image, adalah "bag of bytes" yang berisi data. Anda menggunakan kontainer untuk mengelompokkan objek. Anda dapat menempatkan banyak benda di dalam kontainer, dan akun Anda dapat memiliki banyak kontainer.

Jika Anda memikirkan bagaimana Anda secara tradisional membuat apa yang Anda simpan dengan tahan lama, Anda dapat dengan cepat menyimpulkan bahwa menyimpan banyak salinan objek Anda pada sistem yang terpisah adalah strategi strategi yang bagus. Namun, mencatat banyak salinan itu sulit dilakukan, dan membangunnya ke dalam sebuah aplikasi membutuhkan logika yang rumit.

OpenStack Object Storage secara otomatis mereplikasi setiap objek setidaknya dua kali sebelum mengembalikan 'write success' ke panggilan API Anda. Strategi yang bagus adalah menyimpan tiga salinan objek, secara default, setiap saat, mereplikasi di seluruh sistem jika terjadi kegagalan perangkat keras, perawatan, pemadaman jaringan, atau jenis kerusakan lainnya. Strategi ini sangat cocok untuk pembuatan aplikasi. Anda bisa membuang barang (dump object) ke dalam penyimpanan objek dan tidak khawatir dengan pekerjaan tambahan yang diperlukan agar mereka tetap aman.

Gunakan Object Storage untuk menyimpan fractal

Aplikasi Fractal saat ini menggunakan sistem file lokal pada instance untuk menyimpan image yang dihasilkannya. Untuk sejumlah alasan, pendekatan ini tidak terukur atau awet.

Karena sistem file lokal adalah penyimpanan singkat, image fraktal hilang bersamaan dengan instance saat berakhir. Penyimpanan berbasis blok, dimana bagian Block Storage membahas, menghindari masalah itu, tapi seperti sistem file lokal, memerlukan administrasi untuk memastikan tidak terisi, dan segera diperhatikan jika disk gagal.

Layanan Object Storage mengelola banyak tugas yang biasanya dikelola oleh pemilik aplikasi. Layanan Object Storage menyediakan API terukur dan tahan lama yang dapat Anda gunakan untuk aplikasi fraktal, sehingga perlu diperhatikan rincian tingkat rendah tentang bagaimana objek disimpan dan direplikasi, dan bagaimana cara menumbuhkan storage pool. Object Storage menangani replikasi untuk Anda. Ini menyimpan banyak salinan dari setiap objek. Anda dapat menggunakan Object Storage API untuk mengembalikan objek, berdasarkan permintaan.

Pertama, pelajari cara menyambungkan ke Object Storage endpoint:

from __future__ import print_function
import hashlib
from shade import *

conn = openstack_cloud(cloud='myfavoriteopenstack')

Untuk mulai menyimpan objek, pertama kita harus membuat kontainer. Teleponmu fractals:

container_name = 'fractals'
container = conn.create_container(container_name)
print(container)

Anda harus melihat output seperti:

Munch({u'content-length': u'0', u'x-container-object-count': u'0',
u'accept-ranges': u'bytes', u'x-container-bytes-used': u'0',
u'x-timestamp': u'1463950178.11674', u'x-trans-id':
u'txc6262b9c2bc1445b9dfe3-00574277ff', u'date': u'Mon, 23 May 2016
03:24:47 GMT', u'content-type': u'text/plain; charset=utf-8'})

Anda sekarang dapat melihat penampung ini muncul dalam daftar semua kontainer di akun Anda:

print(conn.list_containers())

[Munch({u'count': 0, u'bytes': 0, u'name': u'fractals'}),
Munch({u'count': 0, u'bytes': 0, u'name': u'fractals_segments'})]

Langkah logis berikutnya adalah mengunggah sebuah objek. Temukan foto kambing secara online, beri nama goat.jpg, dan unggah ke kontainer Anda fractals:

file_path = 'goat.jpg'
object_name = 'an amazing goat'
container = conn.get_container(container_name)
object = conn.create_object(container=container_name, name=object_name, filename=file_path)

Daftar objek di kontainer Anda fractals untuk melihat apakah upload berhasil dilakukan. Kemudian, download file untuk memverifikasi bahwa md5sum adalah sama:

print(conn.list_objects(container_name))

[Munch({u'hash': u'd1408b5bf6510426db6e2bafc2f90854', u'last_modified':
u'2016-05-23T03:34:59.353480', u'bytes': 63654, u'name': u'an amazing
goat', u'content_type': u'application/octet-stream'})]
object = conn.get_object(container_name, object_name)
print(object)

print(hashlib.md5(open('goat.jpg', 'rb').read()).hexdigest())

d1408b5bf6510426db6e2bafc2f90854

Akhirnya, bersihkan dengan cara menghapus objek test:

conn.delete_object(container_name, object_name)

Munch({u'content-length': u'0', u'x-container-object-count': u'0',
u'accept-ranges': u'bytes', u'x-container-bytes-used': u'0',
u'x-timestamp': u'1463950178.11674', u'x-trans-id':
u'tx46c83fa41030422493110-0057427af3', u'date': u'Mon, 23 May 2016
03:37:23 GMT', u'content-type': u'text/plain; charset=utf-8'})

Sekarang, tidak ada lagi benda yang tersedia di container fractals`.

print(conn.list_objects(container_name))

[]

Cadangkan Fractal dari database pada Object Storage

Cadangkan gambar aplikasi Fractals, yang saat ini tersimpan di dalam database, di Object Storage.

Tempatkan image di kontainer fractals:

container_name = 'fractals'
print(conn.get_container(container_name))

Selanjutnya, cadangkan semua fraktal yang ada dari database ke swift container. Sebuah loop sederhana menangani hal itu:

Catatan

Ganti IP_API_1 dengan alamat IP dari instance API.

import base64
import cStringIO
import json
import requests

endpoint = 'http://IP_API_1'
params = { 'results_per_page': '-1' }
response = requests.get('%s/v1/fractal' % endpoint, params=params)
data = json.loads(response.text)
for fractal in data['objects']:
    r = requests.get('%s/fractal/%s' % (endpoint, fractal['uuid']), stream=True)
    with open(fractal['uuid'], 'wb') as f:
        for chunk in r.iter_content(chunk_size=1024):
            if chunk:
                f.write(chunk)
    conn.create_object(container=container_name, name=fractal['uuid'])

for object in conn.list_objects(container_name):
    print(object)

Catatan

Kode contoh menggunakan yang mengagumkan Requests library. Sebelum Anda mencoba menjalankan skrip sebelumnya, pastikan itu terinstal di sistem Anda.

Konfigurasikan aplikasi Fractal untuk menggunakan Object Storage

Peringatan

Saat ini, Anda tidak bisa langsung menyimpan image yang dihasilkan di OpenStack Object Storage. Silakan kunjungi kembali bagian ini lagi di masa mendatang.

Fitur tambahan

Hapus kontainer

Untuk menghapus sebuah kontainer, pertama-tama Anda harus menghapus semua objek dari kontainer. Jika tidak, operasi penghapusan akan gagal:

for object in conn.list_objects(container_name):
    conn.delete_object(container_name, object['name'])
conn.delete_container(container_name)

Peringatan

Tidak mungkin mengembalikan objek yang dihapus. Hati-hati.

Tambahkan metadata ke objek

Anda dapat menyelesaikan tugas lanjutan seperti mengunggah objek dengan metadata, seperti ditunjukkan pada contoh berikut. Untuk informasi lebih lanjut, lihat dokumentasi untuk SDK Anda.

Ini menambahkan "foo" key ke metadata yang memiliki nilai "bar".

Catatan

Swift metadata keys ditambahkan dengan "x-object-meta-" juga saat Anda mendapatkan objek dengan get_object (), untuk mendapatkan nilai metadata, key Anda akan menjadi "x-object-meta-foo".

metadata = {'foo': 'bar'}
conn.create_object(container=container_name, name=fractal['uuid'],
    metadata=metadata
)

Objek besar

Untuk efisiensi, sebagian besar instalasi Object Storage memperlakukan objek besar, > 5GB, berbeda dari objek yang lebih kecil.

Fungsi shade's create_object memiliki parameter "use_slo" (yang default true) yang akan memecah objek Anda menjadi objek yang lebih kecil untuk diunggah dan bergabung kembali dengannya jika diperlukan.

Langkah selanjutnya

Anda sekarang harus cukup yakin bekerja dengan Object Storage. Anda dapat menemukan lebih banyak informasi tentang Object Storage SDK di:

Atau, cobalah salah satu langkah tutorial berikut:

Creative Commons Attribution 3.0 License

Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.