Elasticsearch adalah mesin pencari RElasticsearchTful terdistribusi open source. Sebagai mesin pencarian dan analisis data terdistribusi, terukur, real-time, ia dapat dengan cepat menyimpan, mencari, dan menganalisis data dalam jumlah besar. Pada saat yang sama, Elasticsearch juga mendukung mesin dasar dengan aplikasi yang bertanggung jawab atas fungsi dan persyaratan pencarian, sehingga dapat diterapkan dalam banyak skenario berbeda.
Skenario penggunaan Elasticsearch di JD
Karena kinerja yang lebih tinggi dan ambang batas penggunaan yang lebih rendah, ada banyak skenario di JD yang menggunakan Elasticsearch.
Pada Juni 2015, JD mulai mengembangkan platform hosting Elasticsearch-JElasticsearch. Platform Jesse terutama bertanggung jawab atas pemeliharaan harian penyebaran klaster Elasticsearch, pemantauan operasi, migrasi data, manajemen otoritas, pengembangan plug-in, peningkatan klaster, dll.
Saat ini, cluster yang dikelola oleh platform Jieshi mencakup beberapa lini bisnis JD.com, serta banyak skenario aplikasi:
Lengkapi kueri data terstruktur dari database relasional
Aplikasi bisnis utama adalah permintaan data besar seperti komoditas, promosi, kupon, pesanan, kasir, logistik, rekonsiliasi, dan komentar. Persyaratan inti dari skenario ini adalah kinerja tinggi, stabilitas, dan ketersediaan tinggi. Beberapa skenario memiliki persyaratan pengambilan, yang biasanya digunakan untuk mempercepat database relasional. Sistem bisnis menyelesaikan sinkronisasi data melalui sinkronisasi binlog atau penulisan ganda bisnis.
Fungsi pencarian teks lengkap
Skenario aplikasi utama adalah aplikasi, keamanan, pengendalian risiko, transaksi dan log operasi lainnya, serta bagian dari pencarian produk JD.com. Skenario logging seperti itu memiliki persyaratan tulis yang tinggi, dan kinerja kueri yang relatif rendah serta persyaratan ketersediaan yang tinggi. Penulisan bisnis besar dapat mencapai puluhan juta per detik, dan penyimpanan dihitung dalam PB.
Skenario ini memiliki persyaratan yang relatif tinggi untuk disk dan memori. Oleh karena itu, JD.com juga telah membuat pengoptimalan yang sesuai untuk mengurangi konsumsi memori, meningkatkan penggunaan disk secara keseluruhan, dan menggunakan disk yang lebih murah untuk mengurangi biaya.
Mesin analisis data real-time untuk membentuk laporan statistik
Layanan aplikasi utama adalah berbagai analisis pesanan logistik, analisis data pesanan, potret pengguna, dll. Karena ada banyak garis lintang analisis data bisnis, analisis streaming seperti flink dan storm tidak cocok untuk beberapa skenario pelaporan, dan pemrosesan batch secara real-time telah menjadi masalah, sehingga Elasticsearch untuk analisis waktu nyata dekat telah menjadi pilihan bisnis ini.
Image1: Elasticsearch + ChubaoFS mendukung skenario aplikasi JD Mall
Dalam lima tahun menerapkan Elasticsearch, JD telah berubah dari beberapa skenario pertama menjadi mencakup berbagai lini bisnis, dari beberapa mesin pertama menjadi ribuan mesin saat ini dan ribuan klaster. Operasi dan pemeliharaan Tekanan juga mengikuti.
Saat ini, JD menghadapi masalah berikut saat mengoperasikan dan memelihara klaster ELasticsearch setiap hari:
- Pembacaan dan penulisan IO tidak merata, dan tekanan IO pada beberapa node sangat berat;
- Kapasitas penyimpanan node data dingin dibatasi pada penyimpanan maksimum dari satu mesin;
- Kegagalan node indeks setelah penutupan tidak dapat dipulihkan, yang menyebabkan risiko kehilangan data.
Untuk mengatasi masalah ini, JD telah menerapkan ChubaoFS. ChubaoFS adalah sistem file terdistribusi yang dikembangkan oleh JD.com yang memberikan kinerja tinggi, ketersediaan tinggi, skalabilitas, dan stabilitas untuk aplikasi cloud native. Tujuan awal desain ini adalah untuk menyediakan solusi penyimpanan persisten untuk cluster container JD. Ini juga dapat digunakan sebagai penyimpanan cloud umum Digunakan oleh sisi bisnis untuk membantu aplikasi stateful mewujudkan pemisahan komputasi dan penyimpanan.
ChubaoFS mendukung beberapa model baca dan tulis, mendukung multi-tenancy, dan kompatibel dengan semantik POSIX dan protokol S3. Setiap pod yang dirancang oleh ChubaoFS dapat berbagi volume penyimpanan, atau setiap pod dapat berbagi volume penyimpanan. Saat mesin fisik tempat container berada turun, data container dapat dijadwalkan secara bersamaan ke host lain bersama dengan container, untuk memastikan penyimpanan data yang andal .
Image2: Elasticsearch + ChubaoFS = Decouping Compute dari Storage
Evolusi manajemen contoh Elasticsearch
Manajemen instance Elasticsearch Jingdong juga merupakan proses eksplorasi konstan dan perayapan konstan.
Fase awal
Awalnya, penerapan kluster Elasticsearch Jingdong tidak memiliki arsitektur sama sekali. Konfigurasi kluster juga mengadopsi konfigurasi default. Mesin fisik memulai beberapa proses Elasticsearch. Sumber daya server digunakan bersama-sama di antara proses. Kluster digunakan untuk mengisolasi bisnis yang berbeda. Bentuknya menggunakan CPU server dan memori untuk dimanfaatkan sepenuhnya.
Image3: Penerapan mesin fisik
Ketika sistem berjalan untuk jangka waktu tertentu, kelemahan dari metode penerapan ini mulai terlihat.
- Instans mudah dipengaruhi oleh node lain, dan tidak ada cara efektif untuk menghindari masalah jitter bisnis yang penting.
- Memori mesin fisik ditempati oleh cache, dan startup instance yang baru dibuat membutuhkan waktu lama.
- Penyimpanan instans dibatasi oleh kapasitas disk satu mesin, dan migrasi data terjadi dari waktu ke waktu.
Fase isolasi kontainer
Karena mesin fisik secara langsung digunakan dengan Elasticsearch, itu tidak dapat mengelola CPU dan memori, dan setiap node memiliki pengaruh yang jelas satu sama lain, dan bahkan mempengaruhi stabilitas. Oleh karena itu, dalam menanggapi situasi di atas, JD telah membuat suatu metode penyempurnaan investigasi rencana perbaikan sumber daya.
Saat itu, ada dua metode isolasi sumber daya utama, kontainerisasi Docker dan mesin virtual.
Pada tahun 2016, teknologi kontainerisasi Docker telah terbentuk, tetapi teknologi virtualisasi relatif matang dengan jumlah alat yang besar dan ekosistem yang lengkap. Dibandingkan dengan isolasi resource mesin virtual, Docker tidak perlu mengimplementasikan virtualisasi hardware, tetapi hanya menggunakan cgroups untuk membatasi resource. Penggunaan sebenarnya masih merupakan resource dari mesin fisik, sehingga lebih efisien dalam hal pemanfaatan resource. Kami telah menguji menggunakan Dockerization Kehilangan kinerja terakhir relatif kecil dan hampir dapat diabaikan.
Docker adalah batas sumber daya. Docker tidak perlu memuat kernel sistem operasi selama startup dan dapat dimulai dalam milidetik. Start-up menghabiskan lebih sedikit sumber daya, dan dapat dimulai dan dihentikan dengan cepat. Selain itu, karena ini adalah jenis pembatasan sumber daya, ia hanya membatasi penggunaan maksimum tanpa mengisolasi minimum, sehingga virtualisasi dapat digunakan untuk membeli sumber daya secara berlebihan dan meningkatkan pemanfaatan sumber daya.
Dalam hal keuntungan mesin virtual, seperti keamanan, JD.com menggunakan platform berbagi sumber daya internal untuk menebusnya melalui manajemen proses atau fasilitas internal lainnya. Dengan cara ini, keuntungan asli dari isolasi sumber daya lengkap menjadi kerugian dalam memaksimalkan penggunaan sumber daya sistem internal.
Oleh karena itu, JD.com memilih metode penerapan dalam container yang relatif belum matang pada saat itu, dan menerapkan isolasi sumber daya Elasticsearcht di server:
Diagram penerapan Docker Image4
- Node data / data primer: Defaultnya adalah jvm50%, dan setengahnya dicadangkan untuk Lucene sebagai cache.
- Gateway / Master node: Kapasitas memori -2 digunakan sebagai memori jvm, dan 2G dicadangkan untuk pemantauan dan layanan lainnya.
- Layanan penting terikat langsung ke CPU untuk menghindari preemption resource sepenuhnya.
- Untuk bisnis umum, alokasi proporsional CPU dilakukan dengan menyesuaikan cpu-sharElasticsearch, cpu-period, dan cpu-quota.
- Karena keragaman mesin dalam lingkungan produksi, IO disk itu sendiri sangat berbeda. Selain itu, pembatasan IO akan menyebabkan penurunan yang serius pada kinerja baca dan tulis Elasticsearch. Untuk pertimbangan bisnis internal, JD tidak mengisolasi IO.
- Melalui isolasi wadah sederhana, preemption CPU ditingkatkan secara signifikan. Setelah memori sepenuhnya diisolasi, interaksi antara node dalam lingkungan produksi jarang terjadi (mesin dengan IO yang buruk akan memiliki pertentangan IO), dan transformasi metode penerapan menghasilkan manfaat aplikasi.
Fase instans tanpa status
Dengan pertumbuhan bisnis yang berkelanjutan, jumlah cluster dan sumber daya server yang dikonsumsi telah meningkat secara proporsional. Jumlah instance Elasticsearch di JD.com telah meningkat menjadi puluhan ribu, dan jumlah cluster yang dikelola telah berkembang pesat menjadi ribuan, dengan ukuran cluster mulai dari beberapa hingga puluhan.
Namun, tingkat pemanfaatan sumber daya secara keseluruhan relatif rendah. Tingkat pemanfaatan disk hanya sekitar 28%, dan rata-rata harian membaca dan menulis IO adalah 10-20M / detik (IO partisi log adalah 60-100M / detik). Alasan pemborosan resource adalah karena ukuran cluster umumnya kecil. Untuk memastikan persyaratan IO untuk permintaan baca dan tulis dalam keadaan darurat, kami biasanya mengalokasikan lebih banyak sumber daya surplus ke cluster, dan container yang dialokasikan oleh mesin fisik juga akan dikontrol pada tingkat tertentu. .
Mari kita asumsikan bahwa jika sejumlah besar IO server dapat dibagikan, maka dampak permintaan burst cluster pada IO sebenarnya dapat diabaikan. Berdasarkan asumsi ini dan kebutuhan mendesak untuk meningkatkan pemanfaatan disk, kami mempertimbangkan untuk memperkenalkan ChubaoFS yang disebarkan di dalam perusahaan sebagai penyimpanan dan menggunakan Elasticsearch sebagai contoh stateless untuk penyimpanan dan pemisahan komputasi.
Berkat ChubaoFS adalah sistem file universal yang dirancang untuk pemasangan cluster container berskala besar, kami dapat mengaksesnya dengan biaya hampir nol. Anda hanya perlu menginstal klien yang sesuai pada mesin fisik untuk menggunakan ChubaoFS sebagai sistem file lokal. Setelah integrasi, kami membuat serangkaian perbandingan tentang kinerja ChubaoFS.
Kami menggunakan alat uji tolok ukur elasticsearch Elasticsearchrally untuk melakukan uji tolok ukur pada Elasticsearch menggunakan disk lokal dan ChubaoFS masing-masing. Pengujian ini menggunakan 7 node elasticsearch dan 50 pecahan.
Parameter uji elasticsearchrally adalah sebagai berikut:
Salin kode
Elasticsearchrally --pipeline = benchmark-only \ - track = pmc \ - track-params = "number_of_replicas: $ {REPLICA_COUNT}, number_of_shards: $ {SHARD_COUNT}" \ - target-hosts = $ {TAR GET_HOSTS} \ - -report-file = $ {report_file}Di antara mereka, REPLICA_COUNT 0, 1, dan 2 masing-masing mewakili jumlah salinan yang berbeda; SHARD_COUNT adalah 50.
Dapat dilihat dari hasil pengujian bahwa setelah Elasticsearch mengintegrasikan ChubaoFS, dengan jumlah salinan yang berbeda, jarak antara kinerja benchmark indeks dan disk lokal sekitar 110% ~ 120%, dengan hanya sedikit penurunan; kinerja benchmark gabungan ada di replika > Pada 0, Elasticsearch menggunakan ChubaoFS lebih baik daripada disk lokal. Kinerja refElasticsearchh dan tolok ukur flush ChubaoFS tidak sebaik disk lokal.
Efek penggunaan saat ini
Setelah mengintegrasikan ChubaoFS, pertama-tama kami menjalankan dalam skala abu-abu untuk jangka waktu tertentu. Setelah hasil ditampilkan dengan baik, kami mengalihkan semua lapisan bawah dari semua kluster Elasticsearch dari JD Log ke ChubaoFS. Setelah peralihan, kami mencapai hasil yang lebih baik di bidang ini:
Sebelum mengadopsi ChubaoFS, kami menggunakan 500 mesin fisik, dan sekitar 80% dari kapasitas IO disk dari setiap mesin tidak aktif. Setelah mengadopsi ChubaoFS, ukuran cluster ChubaoFS adalah sekitar 50 unit, dan Elasticsearch dihosting di platform container perusahaan untuk mencapai skalabilitas elastis.
Setelah mengadopsi ChubaoFS, kita tidak perlu lagi khawatir tentang kegagalan hard disk mesin atau masalah beban baca dan tulis mesin yang tidak seimbang.
Karena lapisan bawah ChubaoFS memberikan dukungan penyalinan untuk file, Elasticsearch di lapisan bisnis menyetel salinan ke 0. Segmen asli menekan memori heap dan menyebabkan fenomena FullGC menjadi jelas. Setelah menyambungkan ke ChubaoFS, frekuensi GC berkurang secara signifikan.
Referensi
ChubaoFS JD Open Source Cloud Native Application Distributed File System
https://github.com/chubaofs/chubaofs
Situs web ChubaoFS:
https://www.chubao.io/
Makalah terkait desain ChubaoFS, termasuk dalam ACM SIGMOD 2019
CFS: Sistem File Terdistribusi untuk Platform Kontainer Skala Besar.
https://dl.acm.org/citation.cfm?doid=3299869.3314046
Dokumentasi
https://chubaofs.readthedocs.io/zh_CN/latElasticsearcht/
https://chubaofs.readthedocs.io/en/latElasticsearcht/
Pertukaran komunitas ChubaoFS:
Twitter: @ChubaoFS
Milis: chubaofs-maintainers@groups.io
Slack: chubaofs.slack.com
tentang Penulis
Wang Xingxing, arsitek departemen arsitektur platform penyimpanan komputasi ritel JD, dan kepala tim JD Elasticsearch, bergabung dengan JD pada tahun 2015. Saat ini, ia terutama bertanggung jawab atas pembangunan infrastruktur platform pemantauan cerdas JD Mall dan platform JD.
Zhang Liying, Duta Besar CNCF, manajer produk platform penyimpanan komputasi ritel JD, kontributor proyek sumber terbuka ChubaoFS.
- Pameran Perekrutan Talenta Muda Jinan "Di Udara" diadakan di perusahaan-perusahaan swasta ekonomi terkemuka Ji
- Menghancurkan perusahaan dan membuat lebih dari 300 orang menganggur. Bagaimana kami menanggapi serangan ransomware?
- Akan ada hujan lebat di Guizhou, Hunan, dan tempat-tempat lain, serta angin kencang dan debu di Gansu barat dan tempat-tempat lain
- Han Xiao, Manajer Umum Hummingbird View Cabang Shanghai: Inovasi "Titik, Garis, dan Permukaan" dalam Manajemen Bisnis Konferensi Pemimpin Ekonomi Baru WISE2020