[ Memulai | Fitur | Kasus Penggunaan | Sampel | Ubah Log / Yang Baru / Versi | Grup Pengguna | Motivasi | Demo | Kinerja | Bandingkan | Kontributor | Tentang | Berita | Pengaya | 中文介绍 ]
[Ikhtisar API | Hasilkan & Kirim Tugas | Lacak Status & Periksa Tanggapan | Konfigurasi ]
Di-tweet oleh Pencipta Akka & Ditampilkan di [ Minggu Ini di #Scala | OSChina - 100 Teratas 2015]
Parallec adalah pustaka java klien HTTP(S)/SSH/TCP/UDP/Ping async paralel cepat berdasarkan Akka. Gabungkan dan tangani respons API secara skalabel dan kirimkan ke mana saja dengan menulis 20 baris kode. Konteks respons yang sangat nyaman memungkinkan Anda memasukkan/keluar objek apa pun saat menangani respons. Sekarang Anda dapat melakukan panggilan API yang dapat diskalakan, lalu dengan mudah meneruskan data gabungan di mana saja ke pencarian elastis, kafka, MongoDB, grafit, memcached, dll. Kontrol konkurensi tingkat tugas yang fleksibel tanpa membuat kumpulan thread 1.000 thread. Parallec berarti Paralle l C lient (diucapkan "Para-like"). Kunjungi www.parallec.io
Tonton Demo : 8.000 agregasi respons HTTP server web ke memori dalam 12 detik / ke ElasticSearch dalam 16 detik.
Pesan kesalahan gabungan - Ramah debug dengan visibilitas penuh : Mengalami masalah saat melakukan debug di lingkungan bersamaan? Tidak lagi! Semua pengecualian, batas waktu, pelacakan tumpukan, permintaan terkirim, dan waktu respons diterima ditangkap dan dikumpulkan dalam peta respons. Ini tersedia di ParallelTask untuk polling tepat setelah Anda menjalankan tugas secara asinkron. Batas waktu multi-level (pekerja/manajer) menjamin tugas kembali bahkan untuk 100.000 permintaan.
Kasus Penggunaan Produksi : banyak digunakan dalam perangkat lunak infrastruktur sebagai mesin polling dan agregasi
Donwload JAR terbaru atau ambil dari Maven:
< dependency >
< groupId >io.parallec</ groupId >
< artifactId >parallec-core</ artifactId >
< version >0.10.6</ version >
</ dependency >
Snapshot versi pengembangan tersedia di repositori snapshots
Sonatype.
atau Gradle:
compile 'io.parallec:parallec-core:0.10.6'
Contoh 6 Baris
Pada contoh di bawah, cukup dengan mengubah prepHttpGet() menjadi prepSsh() , prepTcp() , prepUdp() , prepPing() memungkinkan Anda melakukan SSH/TCP/Ping secara paralel. Detailnya silakan lihat Dokumen Java dan Kode Contoh.
import io . parallec . core .*;
import java . util . Map ;
ParallelClient pc = new ParallelClient ();
pc . prepareHttpGet ( "" ). setTargetHostsFromString ( "www.google.com www.ebay.com www.yahoo.com" )
. execute ( new ParallecResponseHandler () {
public void onCompleted ( ResponseOnSingleTask res ,
Map < String , Object > responseContext ) {
System . out . println ( res . toString () ); }
});
Contoh 20 Baris
Sekarang setelah Anda mempelajari dasar-dasarnya, lihat betapa mudahnya meneruskan klien pencarian elastis menggunakan konteks respons yang mudah untuk mengumpulkan data di mana pun Anda suka. Anda juga dapat meneruskan peta hash ke responseContext
, menyimpan hasil yang diproses ke peta selama onCompleted
, dan menggunakan peta di luar untuk pekerjaan lebih lanjut.
...
import org . elasticsearch . client . Client ;
import static org . elasticsearch . node . NodeBuilder .*;
ParallelClient pc = new ParallelClient ();
org . elasticsearch . node . Node node = nodeBuilder (). node (); //elastic client initialize
HashMap < String , Object > responseContext = new HashMap < String , Object >();
responseContext . put ( "Client" , node . client ());
pc . prepareHttpGet ( "" )
. setConcurrency ( 1000 ). setResponseContext ( responseContext )
. setTargetHostsFromLineByLineText ( "http://www.parallec.io/userdata/sample_target_hosts_top100_old.txt" , HostsSourceType . URL )
. execute ( new ParallecResponseHandler () {
public void onCompleted ( ResponseOnSingleTask res ,
Map < String , Object > responseContext ) {
Map < String , Object > metricMap = new HashMap < String , Object >();
metricMap . put ( "StatusCode" , res . getStatusCode (). replaceAll ( " " , "_" ));
metricMap . put ( "LastUpdated" , PcDateUtils . getNowDateTimeStrStandard ());
metricMap . put ( "NodeGroupType" , "Web100" );
Client client = ( Client ) responseContext . get ( "Client" );
client . prepareIndex ( "local" , "parallec" , res . getHost ()). setSource ( metricMap ). execute ();
}
});
node . close (); pc . releaseExternalResources ();
Permintaan Berbeda untuk Target yang Sama
Sekarang lihat betapa mudahnya menggunakan templat permintaan untuk mengirim beberapa permintaan berbeda ke target yang sama. Penggantian variabel diperbolehkan di badan postingan, url, dan header. Baca selengkapnya..
pc . prepareHttpGet ( "/userdata/sample_weather_$ZIP.txt" )
. setReplaceVarMapToSingleTargetSingleVar ( "ZIP" ,
Arrays . asList ( "95037" , "48824" ), "www.parallec.io" )
. execute ( new ParallecResponseHandler () {...}...
Lebih jelasnya silahkan cek Change Log.
0.10.x
, yang kami gunakan dalam produksi.async-http-client
yang lebih mutakhir (saat ini menggunakan AHC versi 2.0.15
) adalah 0.20.0-SNAPSHOT
. Versi ini telah lulus uji unit komprehensif tetapi belum digunakan dalam produksi. Versi ini memerlukan JDK8 karena AHC 2.x dan dapat digunakan dengan plugin parallec dengan versi yang sama 0.20.0-SNAPSHOT
, detailnya silakan periksa #37.Parallec dibangun di atas aktor Akka dan Async HTTP Client/Netty/Jsch. Perpustakaan berfokus pada HTTP sekaligus memungkinkan komunikasi terukur melalui SSH/Ping/TCP.
90%+ Cakupan pengujian memastikan Anda selalu menemukan contoh dari setiap fitur.
Dengan masukan, pelajaran, dan perbaikan dari penggunaan internal dan sumber terbuka REST Commander tahun lalu, kini kami menjadikan inti REST Commander sebagai perpustakaan mandiri yang mudah digunakan. Kami menambahkan 15+ fitur baru , menulis ulang 70%+ kode, dengan cakupan pengujian 90%+ untuk penggunaan dan kontribusi yang percaya diri. Kali ini kami juga menyusunnya dengan lebih baik sehingga sebagian besar pengembangan internal bisa langsung dilakukan di sini.
[ Tonton Demo ](https://www.youtube.com/watch?v=QcavegPMDms"Demo Parallec - Klik untuk Menonton!"): Parallec Menggabungkan 100 status situs web ke penelusuran elastis dan divisualisasikan dengan 20 baris kode.
Tonton Demo Panggilan HTTP di 8000 Server : 8.000 agregasi respons HTTP server web ke memori dalam 12 detik / ke ElasticSearch dalam 16 detik.
[ Tonton Demo Ping ](https://www.youtube.com/watch?v=9m1TFuO1Mys"Parallec Ping vs FPing demo - Klik untuk Menonton!"): Parallec adalah 2x Kecepatan FPing yang disetel dengan upaya terbaik dengan hasil akurat yang sama dan melakukan ping ke 8000 server dalam 11,1 detik, detailnya periksa di sini.
Perhatikan bahwa kecepatan bervariasi berdasarkan kecepatan jaringan, waktu respons API, server paling lambat, batas waktu, dan pengaturan konkurensi.
Kami melakukan API eksekusi tugas jarak jauh di 3.000 server dengan respons yang dikumpulkan ke pencarian elastis, divisualisasikan dalam 15 detik, dengan menulis 25 baris kode.
Dengan API lain yang lebih cepat, panggilan ke 8.000 server di pusat data yang sama dengan respons dikumpulkan dalam memori dalam 12 detik.
Parallec 2,2 detik vs FPing 4,5 detik di 1500 server. Parallec adalah 2x kecepatan FPing (setelah upaya terbaik penyetelan: -i 1 -r 0 v3.12) melakukan ping ke 1500 server sambil mendapatkan hasil ping yang sama. Parallec melakukan ping ke 8000 server dalam 11,1 detik dengan mudah.
Seperti biasa, jangan mengandalkan angka-angka ini dan lakukan tolok ukur Anda sendiri.
Di Parallec, Anda dapat menangani respons di Worker (sebelum agregasi: secara paralel) atau di Manajer (setelah agregasi: thread tunggal). Baca selengkapnya..
Untuk ulasan pekerjaan terkait lainnya, silakan kunjungi di sini.
Fitur | Paralel | Komandan REST | Kumpulan Thread + Klien Async |
---|---|---|---|
Pustaka tertanam dengan antarmuka pola pembangun yang intuitif | |||
Aplikasi siap pakai dengan pengiriman permintaan berbasis wizard GUI dan agregasi respons | |||
Kontrol konkurensi sederhana tidak dibatasi oleh ukuran thread | |||
Penangan respons segera tanpa menunggu semua respons kembali | |||
Penjadwal tugas yang sadar kapasitas dan kontrol kapasitas global | |||
Kebebasan total dalam pemrosesan respons dan agregasi API: Penangan respons dan konteks respons yang dapat dicolokkan dan umum | |||
Plugin 1 baris untuk mengaktifkan autentikasi Klien SSL | |||
Cakupan Tes 90%. | |||
Muat host target dari kueri CMS, Jalur JSON, teks, daftar, string dari URL/lokal | |||
Konkurensi dan orkestrasi tingkat tugas untuk API Async: kemajuan tugas polling otomatis | |||
Konfigurasi tingkat tugas pada batas waktu dan penggantian Klien HTTP Async | |||
Kontrol tugas asinkron dan sinkron dengan jajak pendapat dan pembatalan kemajuan | |||
SSH Paralel yang Dapat Diskalakan dengan kata sandi dan login berbasis kunci | |||
Skalabilitas dan kecepatan yang terbukti pada 100.000+ host target di lingkungan Produksi | |||
Templat permintaan umum dengan penggantian variabel untuk mengirimkan permintaan berbeda ke host target yang sama/berbeda | |||
Ping yang Dapat Diskalakan dengan Percobaan Ulang | |||
TCP/UDP yang dapat diskalakan dengan batas waktu idle | |||
Lokasi pengendali yang fleksibel di thread pekerja (secara paralel) atau manajer | |||
Agregasi respons dua tingkat yang unik pada kode status | |||
Pemangkasan log respons yang dapat dikonfigurasi pada interval | |||
Batalkan tugas pada daftar host target |
Kami sangat berterima kasih kepada semua kontributor atas upaya mereka.
Parallec disajikan kepada Anda oleh Yuanteng (Jeff) Pei dan Teng Song, Cloud Infrastructure & Platform Services (CIPS) di eBay Inc. (penulis asli)
Kode dilisensikan di bawah Lisensi Apache v2.0
© 2015-2017 Yayasan Perangkat Lunak eBay