[ เริ่มต้น | คุณสมบัติ | กรณีการใช้งาน | ตัวอย่าง | เปลี่ยนบันทึก / มีอะไรใหม่ / เวอร์ชัน | กลุ่มผู้ใช้ | แรงจูงใจ | การสาธิต | ประสิทธิภาพ | เปรียบเทียบ | ผู้ร่วมให้ข้อมูล | เกี่ยวกับ | ข่าว | ปลั๊กอิน | 中文介绍 ]
[ ภาพรวม API | สร้างและส่งงาน | ติดตามสถานะและตรวจสอบการตอบกลับ | การกำหนดค่า ]
ทวีตโดยผู้สร้าง Akka และนำเสนอใน [ สัปดาห์นี้ใน #Scala | OSChina - 2015 ติดอันดับ 100 ]
Parallec เป็นไลบรารี Java ไคลเอ็นต์แบบอะซิงก์ HTTP(S)/SSH/TCP/UDP/Ping แบบขนานที่รวดเร็วซึ่งใช้ Akka สามารถรวมและจัดการการตอบสนองของ API ได้ อย่างปรับขนาดได้ และส่งไป ได้ทุกที่ ด้วยการเขียนโค้ด 20 บรรทัด บริบทการตอบสนอง ที่สะดวกสบายเป็นพิเศษช่วยให้คุณสามารถส่งผ่านวัตถุใดๆ ก็ได้เมื่อจัดการกับการตอบสนอง ตอนนี้คุณสามารถดำเนินการเรียก API ที่ปรับขนาดได้ จากนั้นส่งข้อมูลรวมไปยังทุกที่ได้อย่างง่ายดายไปยังการค้นหาแบบยืดหยุ่น, kafka, MongoDB, กราไฟท์, memcached ฯลฯ การควบคุมการทำงานพร้อมกันในระดับงานที่ยืดหยุ่นโดยไม่ต้องสร้างพูลเธรด 1,000 เธรด Parallec หมายถึง Paralle l C lient (ออกเสียงว่า "เหมือนพารา") เยี่ยมชม www.parallec.io
ชมการสาธิต : การรวมการตอบสนอง HTTP ของเว็บเซิร์ฟเวอร์ 8,000 รายการ ไปยังหน่วยความจำใน 12 วินาที / ไปยัง ElasticSearch ใน 16 วินาที
ข้อความแสดงข้อผิดพลาดแบบรวม - ดีบักที่เป็นมิตรพร้อมการมองเห็นแบบเต็ม : มีปัญหาในการดีบักในสภาพแวดล้อมที่เกิดขึ้นพร้อมกันหรือไม่ ไม่มีอีกแล้ว! ข้อยกเว้น การหมดเวลา การติดตามสแต็ก คำขอที่ส่ง และเวลาที่ได้รับการตอบสนองทั้งหมดจะ ถูกบันทึกและรวมไว้ ในแผนผังการตอบสนอง มีอยู่ใน ParallelTask สำหรับการโพลทันทีหลังจากที่คุณดำเนินการงานแบบอะซิงโครนัส การหมดเวลาหลายระดับ (ผู้ปฏิบัติงาน/ผู้จัดการ) รับประกันว่างานจะกลับมาแม้จะเป็นคำขอ 100,000 รายการก็ตาม
กรณีการใช้งานจริง : ใช้กันอย่างแพร่หลายในซอฟต์แวร์โครงสร้างพื้นฐานในฐานะกลไกการสำรวจและการรวมกลุ่ม
ดาวน์โหลด JAR ล่าสุดหรือคว้าจาก Maven:
< dependency >
< groupId >io.parallec</ groupId >
< artifactId >parallec-core</ artifactId >
< version >0.10.6</ version >
</ dependency >
สแนปชอตของเวอร์ชันการพัฒนามีอยู่ในที่เก็บ snapshots
ของ Sonatype
หรือเกรเดิล:
compile 'io.parallec:parallec-core:0.10.6'
ตัวอย่าง 6 บรรทัด
ในตัวอย่างด้านล่าง เพียงเปลี่ยน allowanceHttpGet() เป็น waitSsh() , preparTcp() , preparUdp() , preparPing() ช่วยให้คุณสามารถดำเนินการ SSH/TCP/Ping แบบขนานได้ รายละเอียดโปรดอ้างอิงถึง Java Doc และโค้ดตัวอย่าง
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 () ); }
});
ตัวอย่าง 20 บรรทัด
เมื่อคุณได้เรียนรู้พื้นฐานแล้ว ลองดูวิธีการง่ายๆ ในการส่งต่อไคลเอ็นต์การค้นหาแบบยืดหยุ่นโดยใช้ บริบทการตอบสนอง ที่สะดวกเพื่อรวบรวมข้อมูลทุกที่ที่คุณต้องการ คุณยังสามารถส่งแฮชแมปไปยัง responseContext
บันทึกผลลัพธ์ที่ประมวลผลไปยังแมปในระหว่างที่ onCompleted
และใช้แมพภายนอกเพื่อทำงานต่อไป
...
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 ();
คำขอที่แตกต่างกันไปยังเป้าหมายเดียวกัน
ตอนนี้มาดู ความง่าย ในการใช้เทมเพลตคำขอเพื่อส่งคำขอที่แตกต่างกันหลายรายการไปยังเป้าหมายเดียวกัน อนุญาตให้เปลี่ยนตัวแปรได้ในเนื้อหาโพสต์ URL และส่วนหัว อ่านเพิ่มเติม..
pc . prepareHttpGet ( "/userdata/sample_weather_$ZIP.txt" )
. setReplaceVarMapToSingleTargetSingleVar ( "ZIP" ,
Arrays . asList ( "95037" , "48824" ), "www.parallec.io" )
. execute ( new ParallecResponseHandler () {...}...
รายละเอียดเพิ่มเติมโปรดตรวจสอบบันทึกการเปลี่ยนแปลง
0.10.x
ซึ่งเราใช้ในการผลิตasync-http-client
ที่ทันสมัยยิ่งขึ้น (ปัจจุบันใช้ AHC เวอร์ชัน 2.0.15
) คือ 0.20.0-SNAPSHOT
เวอร์ชันนี้ผ่านการทดสอบหน่วยอย่างครอบคลุมแต่ยังไม่ได้ใช้ในการผลิต เวอร์ชันนี้ ต้องใช้ JDK8 เนื่องจาก AHC 2.x และสามารถใช้ได้กับปลั๊กอิน parallec ที่มีเวอร์ชันเดียวกัน 0.20.0-SNAPSHOT
โปรดตรวจสอบรายละเอียด #37Parallec สร้างขึ้นจากนักแสดง Akka และ Async HTTP Client / Netty / Jsch ไลบรารีมุ่งเน้นไปที่ HTTP ในขณะเดียวกันก็เปิดใช้งานการสื่อสารที่ปรับขนาดได้ผ่าน SSH/Ping/TCP
ความครอบคลุมการทดสอบ 90%+ ช่วยให้มั่นใจได้ว่าคุณจะพบตัวอย่างของแต่ละคุณสมบัติอยู่เสมอ
ด้วยการตอบรับ บทเรียน และการปรับปรุงจากการใช้งานภายในและโอเพ่นซอร์สของ REST Commander ในปีที่ผ่านมา ตอนนี้เราได้ทำให้แกนหลักของ REST Commander เป็นไลบรารีแบบสแตนด์อโลนที่ใช้งานง่าย เราได้เพิ่มคุณสมบัติ ใหม่มากกว่า 15 รายการ เขียนโค้ดใหม่มากกว่า 70% พร้อม การครอบคลุมการทดสอบมากกว่า 90% เพื่อการใช้งานและการสนับสนุนที่มั่นใจ ครั้งนี้เรายังจัดโครงสร้างให้ดีขึ้นเพื่อให้การพัฒนาภายในส่วนใหญ่สามารถทำได้โดยตรงที่นี่
[ ดูการสาธิต ](https://www.youtube.com/watch?v=QcavegPMDms"การสาธิต Parallec - คลิกเพื่อดู!"): Parallec รวบรวมสถานะเว็บไซต์ 100 แห่งเพื่อค้นหาแบบยืดหยุ่นและแสดงภาพด้วยโค้ด 20 บรรทัด
ชมการสาธิตการโทร HTTP บนเซิร์ฟเวอร์ 8000 เครื่อง : การรวมการตอบสนอง HTTP ของเว็บเซิร์ฟเวอร์ 8,000 รายการ ไปยังหน่วยความจำใน 12 วินาที / ไปยัง ElasticSearch ใน 16 วินาที
[ ดูการสาธิต Ping ](https://www.youtube.com/watch?v=9m1TFuO1Mys"การสาธิต Parallec Ping เทียบกับ FPing - คลิกเพื่อดู!"): Parallec มี ความเร็ว 2 เท่า ของ FPing ที่ปรับแต่งอย่างดีที่สุดพร้อมผลลัพธ์ที่แม่นยำและเหมือนกัน ส่ง Ping ไปยังเซิร์ฟเวอร์ 8,000 เครื่องภายใน 11.1 วินาที รายละเอียดตรวจสอบได้ที่นี่
โปรดทราบว่าความเร็วจะแตกต่างกันไปขึ้นอยู่กับความเร็วเครือข่าย เวลาตอบสนองของ API เซิร์ฟเวอร์ที่ช้าที่สุด การหมดเวลา และการตั้งค่าการทำงานพร้อมกัน
เราดำเนินการ API การดำเนินการงานระยะไกลบนเซิร์ฟเวอร์ 3,000 เครื่องพร้อมการตอบสนองที่รวมอยู่ในการค้นหาแบบยืดหยุ่น ซึ่งแสดงเป็นภาพภายใน 15 วินาที โดยการเขียนโค้ด 25 บรรทัด
ด้วย API ที่เร็วกว่าอีกตัวหนึ่ง คุณสามารถเรียกเซิร์ฟเวอร์ 8,000 เครื่องในศูนย์ข้อมูลเดียวกันพร้อมการตอบสนองที่รวมอยู่ในหน่วยความจำภายใน 12 วินาที
Parallec 2.2 วินาทีเทียบกับ FPing 4.5 วินาทีบนเซิร์ฟเวอร์ 1500 แห่ง Parallec มีความเร็วเป็น 2 เท่าของ FPing (หลังจากการปรับจูนอย่างดีที่สุด: -i 1 -r 0 v3.12) ของการ Ping เซิร์ฟเวอร์ 1500 แห่ง ในขณะที่ได้รับผลลัพธ์ Ping เดียวกัน Parallec ปิงเซิร์ฟเวอร์ 8000 เครื่องภายใน 11.1 วินาทีอย่างรวดเร็ว
ตามปกติ อย่าพึ่งพาตัวเลขเหล่านี้และดำเนินการเปรียบเทียบของคุณเอง
ใน Parallec คุณสามารถจัดการการตอบสนองได้ทั้งใน Worker (ก่อนการรวม: ในแบบคู่ขนาน) หรือใน Manager (หลังการรวม: เธรดเดี่ยว) อ่านเพิ่มเติม..
ติดตามรีวิวงานอื่นๆ ที่เกี่ยวข้องได้ที่นี่
คุณสมบัติ | พาราเล็ค | ผู้บัญชาการส่วนที่เหลือ | เธรดพูล + ไคลเอ็นต์ Async |
---|---|---|---|
ไลบรารี่แบบฝังพร้อมอินเทอร์เฟซรูปแบบตัวสร้างที่ใช้งานง่าย | |||
แอปพลิเคชันพร้อมใช้งานพร้อมการส่งคำขอตามตัวช่วยสร้าง GUI และการรวมการตอบสนอง | |||
การควบคุมการทำงานพร้อมกันอย่างง่ายไม่ถูกจำกัดด้วยขนาดเธรด | |||
ตัวจัดการการตอบสนองทันทีโดยไม่ต้องรอการตอบกลับทั้งหมด | |||
ตัวกำหนดเวลางานที่ทราบความจุและการควบคุมความจุทั่วโลก | |||
เสรีภาพโดยรวมในการประมวลผลการตอบสนองและการรวม API: ตัวจัดการการตอบสนองและบริบทการตอบสนองแบบเสียบได้และทั่วไป | |||
ปลั๊กอิน 1 บรรทัดเพื่อเปิดใช้งานการตรวจสอบสิทธิ์ไคลเอ็นต์ SSL | |||
ความครอบคลุมการทดสอบ 90% | |||
โหลดโฮสต์เป้าหมายจากการสืบค้น CMS, เส้นทาง JSON, ข้อความ, รายการ, สตริงจาก URL/local | |||
การทำงานพร้อมกันและการประสานระดับงานสำหรับ Async API: ความคืบหน้าของงานโพลอัตโนมัติ | |||
การกำหนดค่าระดับงานเมื่อหมดเวลาและการแทนที่ Async HTTP Client | |||
การควบคุมงานแบบอะซิงก์และซิงค์พร้อมการสำรวจและยกเลิกความคืบหน้า | |||
SSH แบบขนานที่ปรับขนาดได้พร้อมรหัสผ่านและการเข้าสู่ระบบตามคีย์ | |||
ความสามารถในการปรับขนาดและความเร็วที่ได้รับการพิสูจน์แล้วบนโฮสต์เป้าหมายมากกว่า 100,000 รายการในสภาพแวดล้อมการใช้งานจริง | |||
เทมเพลตคำขอทั่วไปที่มีการแทนที่ตัวแปรสำหรับการส่งคำขอที่แตกต่างกันไปยังโฮสต์เป้าหมายเดียวกัน/ต่างกัน | |||
Ping ที่ปรับขนาดได้ด้วยการลองใหม่ | |||
TCP/UDP ที่ปรับขนาดได้พร้อมการหมดเวลาที่ไม่ได้ใช้งาน | |||
ตำแหน่งตัวจัดการที่ยืดหยุ่นได้ที่ผู้ปฏิบัติงาน (แบบขนาน) หรือเธรดผู้จัดการ | |||
การรวมการตอบสนองสองระดับนอกกรอบในรหัสสถานะ | |||
ตัดแต่งบันทึกการตอบสนองที่กำหนดค่าได้ในช่วงเวลา | |||
ยกเลิกงานในรายการโฮสต์เป้าหมาย |
เราขอขอบคุณอย่างสุดซึ้งผู้มีส่วนร่วมทุกคนสำหรับความพยายามของพวกเขา
Parallec ให้บริการแก่คุณโดย Yuanteng (Jeff) Pei และ Teng Song, Cloud Infrastructure & Platform Services (CIPS) ที่ eBay Inc. (ผู้เขียนต้นฉบับ)
รหัสที่ได้รับอนุญาตภายใต้ Apache License v2.0
© 2015-2017 มูลนิธิซอฟต์แวร์อีเบย์