di Penyimpanan data deret waktu Baidu skala besar (1) | Data deret waktu skenario pemantauan Dalam artikel tersebut, kami secara singkat memperkenalkan karakteristik data deret waktu adegan pemantauan Baidu, dan menganalisis harian Triliun Di bawah skala data yang besar, penyimpanan data deret waktu menghadapi banyak tantangan. Artikel ini akan memperkenalkan TSDB di Pemilihan skema dengan Model penyimpanan Praktek desain.
TSDB (Time Series Database) adalah database yang semakin populer. Dilihat dari tren populer dari berbagai database yang disediakan oleh DB-Engines pada tahun lalu, TSDB telah berkembang pesat pada tahun lalu, jauh melebihi jenis database lainnya.
Dua pilihan penyimpanan bawah
Untuk lebih beradaptasi dengan kebutuhan bisnis, kami memilih untuk mengembangkan TSDB sendiri. Karena data deret waktu berskala besar, kami perlu mempertimbangkan dengan cermat pemilihan penyimpanan yang mendasarinya. di Juta Di bawah skala indikator, MySQL dapat digunakan untuk memenuhi kebutuhan, seperti solusi penyimpanan yang mendasari sistem pemantauan open source Zabbix.
Dengan pesatnya perkembangan bisnis, skala data kami juga meningkat dari satu juta menjadi sepuluh juta sehingga saat ini Triliun Pada saat ini, database relasional tradisional menjadi semakin lemah. Beberapa solusi cluster yang kami coba belum meningkatkan latensi baca / tulis secara signifikan, dan skalabilitasnya hanya tidak memuaskan, yang memaksa kami untuk mencari solusi baru.
Periksa kembali persyaratan inti kami untuk sistem penyimpanan: Throughput tinggi, latensi rendah, skalabel . Untuk skenario pemantauan, model konsistensi yang kuat, mekanisme transaksi, dan kueri gabungan dari database relasional tidak menjadi fokus perhatian kami. Hilangnya satu titik data tidak memengaruhi tren keseluruhan indikator pemantauan, dan penundaan data sesekali dapat diterima.
Dalam dua tahun terakhir, proyek TSDB sumber terbuka terus bermunculan (lihat Gambar 2), dan banyak proyek unggulan juga menjadi objek penelitian dan pembelajaran kami. Kami menemukan bahwa proyek-proyek ini memiliki preferensi sendiri dalam pemilihan penyimpanan yang mendasarinya. Berikut beberapa:
- OpenTSDB : TSDB lama yang terkenal, penyimpanan yang mendasarinya awalnya hanya mendukung HBase, dan kemudian menambahkan dukungan untuk Cassandra
- InfluxDB : Berdasarkan mesin penyimpanan TSM yang dikembangkan sendiri, solusi cluster bukan open source
- KairosDB : Berasal dari OpenTSDB, HBase dipilih sebagai lapisan bawah pada tahap awal, dan Cassandra saat ini menjadi andalan, dan H2 juga didukung (untuk lingkungan non-produksi)
- Prometheus : Versi open source dari sistem pemantauan Google Borgmon, berdasarkan LevelDB dan penyimpanan lokal
Namun, apakah itu mesin penyimpanan TSM HBase, Cassandra, LevelDB atau InfluxDB, kesamaan yang penting adalah bahwa semuanya didasarkan pada LSM-pohon Implementasi (Log-Strutured Merge-tree, struktur log merge tree). Seperti yang ditunjukkan pada Gambar 3, struktur pohon LSM-tree bisa seperti mencetak log, menulis data secara berurutan dengan cara yang ditambahkan, dan terus-menerus menggabungkan blok data yang lebih kecil menjadi blok yang lebih besar, dan akhirnya mengumpulkan data Flash ke disk.
Apa signifikansi praktis menggunakan LSM-tree? Pada artikel sebelumnya, kami menyebutkan bahwa jumlah data pemantauan yang ditulis sangat besar (puluhan juta titik data per detik), dan waktu penyimpanan dapat mencapai beberapa tahun. Dari segi biaya, disk murah secara alami merupakan pilihan yang tepat. . Namun, struktur mekanis disk membuat performa I / O acaknya tidak memadai dalam menghadapi puluhan juta permintaan tulis per detik. LSM-tree dapat menggunakan buffer memori untuk mengubah penulisan acak dalam jumlah besar Tulisan berurutan batch , Sehingga jumlah penulisan yang dibawa oleh disk akhir sangat berkurang secara logaritmik Throughput tulis yang lebih baik .
Singkatnya, Database NoSQL Apakah pilihan yang lebih cocok. Di antara banyak database NoSQL, kami memilih HBase berdasarkan LSM, terutama untuk pertimbangan berikut:
- Throughput tinggi dan latensi rendah untuk memenuhi persyaratan performa baca / tulis
- Data disimpan dalam HDFS, mendukung banyak salinan yang berlebihan untuk memenuhi persyaratan keandalan
- Penyimpanan meja, model sederhana dan pengembangan bisnis yang nyaman
- Mendukung ekspansi horizontal, ekspansi linier, mampu beradaptasi dengan pertumbuhan bisnis
- Kode dewasa, komunitas aktif, dan kasus aplikasi ekstensif
Tiga desain penyimpanan berdasarkan HBase
Data dalam Tabel HBase sesuai dengan RowKey Data dapat didistribusikan dalam beberapa HRegion dengan arah baris, dan HRegion dapat didistribusikan pada node yang berbeda, sehingga selama data dapat didistribusikan secara merata di HRegion, keseimbangan beban penyimpanan dapat dicapai.
Sangat mudah untuk melihat bahwa desain RowKey adalah kunci dari load balancing. Jika desain RowKey tidak bagus, akan mudah untuk membentuk HRegion panas, yang menyebabkan node di mana ia akan kelebihan beban, dan kinerja klaster secara keseluruhan menurun.
Selanjutnya, kita akan fokus pada desain dua tabel paling penting di TSDB: tabel data dan tabel indeks dimensi. Yang pertama mendukung penyimpanan dan kueri semua data deret waktu, dan yang terakhir adalah dasar untuk kueri agregasi multi-dimensi.
1 lembar data
Seperti disebutkan di atas, rangkaian waktu pemantauan disusun sebagai berikut:
Deret waktu = objek yang dipantau + daftar label + item yang dipantau + titik data
Untuk kenyamanan penjelasan, bentuk ekspresi lain:
ts = (objek + tag) + metrik +
Bisa dilihat oleh objek + tag + metrik + stempel waktu Nilai titik data dapat ditempatkan secara unik. Untuk memanfaatkan fitur HBase secara penuh, kami meminjam dari OpenTSDB dan merancang RowKey sebagai berikut:
RowKey = entity_id + metric_id + timebase
entity_id Ini adalah nilai panjang tetap yang diperoleh dengan mencirikan objek dan tag. Urutan alami dari string asli setelah pencirian terganggu, sehingga RowKeys dapat didistribusikan secara relatif merata di HRegion yang berbeda.
metric_id Nilai hash dari string metrik juga memiliki panjang tetap.
timebase Stempel waktu Unix dibulatkan menjadi 1 jam (3600 detik), dan panjangnya ditetapkan menjadi 4 byte
Desain ini memiliki keunggulan sebagai berikut:
- Hash dari entity_id dan metric_id membuat data relatif merata
- Timebase ditempatkan di byte rendah RowKey, sehingga RowKey dari data deret waktu yang sama terus didistribusikan, yang dapat secara efisien melakukan pemindaian rentang waktu
- RowKey dengan panjang tetap mengurangi pemborosan ruang, dan desain awalan dapat memanfaatkan sepenuhnya mekanisme kompresi prefiks HBase untuk lebih menghemat ruang yang ditempati oleh RowKey
Baris yang diwakili oleh RowKey berisi 1 jam data. Titik data pada baris disimpan sesuai dengan offset waktu saat ini dalam 1 jam. Struktur tabel terakhir ditunjukkan pada Tabel 1:
Tabel indeks 2 dimensi
Dalam desain tabel data, tag dikodekan menjadi entity_id dengan panjang tetap. Pada saat yang sama, HBase tidak memiliki dukungan asli untuk pengindeksan. Hal ini membuat tidak mungkin menemukan entity_id yang sesuai melalui tag, dan karenanya tidak dapat memenuhi persyaratan pengambilan dan agregasi multi-dimensi dari data. Untuk tujuan ini, kami memperkenalkan tabel indeks untuk membuat pemetaan dari tag ke entity_id untuk mendukung pemfilteran data berdasarkan tag.
Seperti yang ditunjukkan pada Gambar 5, dengan menentukan a tag: k1 = v1 , Anda dapat menemukan semua entity_id1, entity_id2, dan entity_id3 yang berisi tag ini.
Struktur RowKey relatif sederhana:
RowKey = kunci + nilai
Entitas_id yang sesuai dengan indeks langsung disimpan sebagai Pengualifikasi Kolom, dan Nilai Kolom terkait dikosongkan. Struktur tabel terakhir:
Untuk menyimpulkan
Pemilihan penyimpanan yang mendasari dan desain model data adalah dua tautan dasar penting dalam desain TSDB. Yang pertama menentukan ide desain yang terakhir, dan desain yang terakhir memengaruhi desain dan implementasi fungsi lapisan atas. Keduanya terkait dengan desain arsitektur dan kinerja cluster. Kinerja sangat erat kaitannya. Namun, masih banyak link desain yang mempengaruhi performa dan kegunaan sistem. Artikel berikut akan secara bertahap memperkenalkan pembaca ke Baidu TSDB fitur dengan Arsitektur Praktik desain pada Tetap disini ~~
Jika Anda memiliki pertanyaan atau ingin tahu lebih banyak Penyimpanan data deret waktu Baidu skala besar Pertanyaan, selamat datang untuk meninggalkan pesan kepada kami!
- Manchester United mengalami pukulan berat lainnya: 5 raksasa Liga Inggris secara kolektif bersaing memperebutkan gelar, tetapi mereka berempat sebelumnya
- Xie Na benar-benar dimanjakan sebagai seorang putri, gaun berpayet hijau tua dengan sepatu hak tinggi, pinggangnya sangat eye-catching
- Adegan konyol di sepakbola Eropa! Penjaga gawang Su Chao menendang lawannya tapi pura-pura cedera, tapi tidak mengakuinya setelah itu
- Dia adalah istri Su Mingcheng dalam "It's All Very Good", mengenakan mantel pinggang dengan "celana rantai", penuh dengan perasaan feminin
- 30.000 orang menyaksikan pertempuran gila Bundesliga! Boom 6 gol dalam 36 menit + ciptakan keajaiban 41 tahun, ciptakan 1 ketegangan tertinggi
- La Liga dihancurkan! 5 raksasa secara kolektif melewatkan final perang Eropa, rekor malu 6 tahun lahir