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.
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 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.
Peringatan
Saat ini, Anda tidak bisa langsung menyimpan image yang dihasilkan di OpenStack Object Storage. Silakan kunjungi kembali bagian ini lagi di masa mendatang.
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.
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
)
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.
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:
Block Storage: Migrasikan database untuk memblokir penyimpanan, atau gunakan komponen basis data as-a-service.
Orchestration: Automatically orchestrate your application.
Jaringan: Learn about complex networking.
Saran bagi pengembang baru untuk operasi: Get advice about operations.
Going crazy: Pelajari beberapa hal gila yang mungkin tidak Anda pikirkan untuk dilakukan;)
Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.