มุมมองของชุมชน: ฉันเปลี่ยนจาก Java เป็น Go Blockchain Engineer ได้อย่างไร
คำนำ
ชื่อเรื่องรอง
ฉันได้ทำการพัฒนา Java ก่อนเข้าร่วม Bytom Chain ฉันรู้สึกลังเลเล็กน้อยเมื่อได้เห็น Go เป็นครั้งแรก และฉันกลัวว่าจะไม่สามารถผ่านการสัมภาษณ์ ด้วยเหตุนี้ การพิจารณาถึงความเชี่ยวชาญด้านภาษาจึงเป็นสิ่งที่จำเป็นจริงๆ ไม่สูงขนาดนั้น ฉันเข้าร่วม Bytom Chain สำเร็จ และภายในครึ่งเดือน ฉันเชี่ยวชาญ Go อย่างรวดเร็วและสามารถพัฒนาโปรเจ็กต์หลักได้
ภาษา Java มีข้อได้เปรียบในโปรเจกต์ที่พัฒนาแล้วขนาดใหญ่ แต่มีข้อบกพร่องมากมายในการพัฒนาบล็อกเชน เช่น ในการประมวลผลแบบคอร์รูทีน และตัวภาษา Java เองนั้นไม่ยืดหยุ่นเพียงพอ ฯลฯ แน่นอน เหตุผลหลักในการเลือก Go ก็คือ ความนิยมของบล็อกเชน
ชื่อเรื่องรอง
ภาษายอดนิยมของ Blockchain
สร้างสถิติเล็กน้อยเกี่ยวกับภาษาโปรแกรมที่ใช้โดยโครงการที่มีชื่อเสียงดังแสดงในรูปด้านล่าง:
เชนสาธารณะรุ่นเก่า เช่น Bitcoin และ Litecoin โดยทั่วไปใช้ C/C++ มากกว่า (ลองดูตอนนั้น ตอนที่ Go ยังไม่เริ่ม) และเชนสาธารณะรุ่นใหม่ เช่น Ethereum ซึ่งเป็นผู้นำของ กลุ่มพันธมิตร Hyperledger เริ่มใช้งานมากขึ้น การใช้ภาษา Go แน่นอนว่าเราเห็นว่าโมเมนตัมการพัฒนาของ Rust นั้นแข็งแกร่งมากเช่นกัน ในช่วง 2 ปีที่ผ่านมา เครือข่ายสาธารณะจำนวนมาก เช่น Polkadot และ Grin ได้เริ่มใช้ Rust ภาษาเพื่อการพัฒนา
ชื่อเรื่องรอง
ข้อดีของภาษา Go
ง่ายต่อการปรับใช้
การคอมไพล์ Go สร้างการเรียกทำงานแบบคงที่โดยไม่มีการพึ่งพาภายนอกนอกเหนือจาก glibc สิ่งนี้ทำให้การปรับใช้สะดวกอย่างยิ่ง: เฉพาะระบบพื้นฐานและเครื่องมือการจัดการและการตรวจสอบที่จำเป็นเท่านั้นในเครื่องเป้าหมาย และไม่ต้องกังวลเกี่ยวกับการพึ่งพาของแพ็คเกจและไลบรารีต่างๆ ที่แอปพลิเคชันต้องการ ซึ่งช่วยลดภาระในการบำรุงรักษาได้อย่างมาก . สามารถคอมไพล์เป็นรหัสเครื่องได้โดยตรงโดยไม่ต้องพึ่งไลบรารีอื่น เวอร์ชันของ glibc มีข้อกำหนดบางประการและการปรับใช้จะเสร็จสมบูรณ์โดยการโยนไฟล์ขึ้น
ประสิทธิภาพที่ยอดเยี่ยม
แม้ว่าจะไม่ดีเท่า C และ Java แต่ก็มักจะอยู่ในระดับที่สูงกว่าแอปพลิเคชัน Python แบบเนทีฟ และเหมาะสำหรับการเขียนธุรกิจที่เป็นคอขวด การใช้หน่วยความจำยังต่ำมาก
การทำงานพร้อมกันและช่องทาง
Goroutine และแชนเนลทำให้ง่ายต่อการเขียนซอฟต์แวร์เซิร์ฟเวอร์พร้อมกันสูง ในหลายกรณี ไม่จำเป็นต้องพิจารณากลไกการล็อกและปัญหาต่างๆ แอปพลิเคชัน Go เดียวยังสามารถใช้ CPU หลายคอร์ได้อย่างมีประสิทธิภาพ และประสิทธิภาพของการดำเนินการแบบขนานก็ดี
การออกแบบภาษาที่ดี
Go นั้นเรียบง่ายและง่ายต่อการเรียนรู้ จากมุมมองทางวิชาการ ภาษา Go นั้นธรรมดามากและไม่รองรับคุณสมบัติภาษาขั้นสูงมากมาย แต่จากมุมมองทางวิศวกรรม การออกแบบของ Go นั้นดีมาก: ข้อมูลจำเพาะนั้นเรียบง่ายและยืดหยุ่นเพียงพอ ด้วยความเรียบง่ายของ Go นักพัฒนา Python, Elixir, C++, Scala หรือ Java สามารถสร้างทีม Go ที่มีประสิทธิภาพได้ภายในหนึ่งเดือน
ไลบรารีและเครื่องมือมาตรฐาน
ปัจจุบัน Go มีไลบรารีในตัวจำนวนมาก โดยเฉพาะไลบรารีเครือข่ายที่ทรงพลังมาก ที่สำคัญกว่านั้น Go มาพร้อมกับห่วงโซ่เครื่องมือที่สมบูรณ์ ซึ่งช่วยปรับปรุงความสอดคล้องของการทำงานร่วมกันในทีมได้อย่างมาก ตัวอย่างเช่น gofmt เรียงพิมพ์โค้ด Go โดยอัตโนมัติ ซึ่งส่วนใหญ่ช่วยขจัดปัญหารูปแบบการจัดเรียงพิมพ์ที่ไม่สอดคล้องกันของโค้ดที่เขียนโดยคนอื่น กำหนดค่าเอดิเตอร์ให้เรียกใช้ gofmt โดยอัตโนมัติเมื่อแก้ไขไฟล์เก็บถาวร เพื่อให้คุณสามารถวางโค้ดได้ตามต้องการเมื่อเขียนโค้ด และโค้ดจะกลายเป็นโค้ดเรียงพิมพ์ที่ถูกต้องโดยอัตโนมัติเมื่อเก็บถาวร นอกจากนี้ยังมีเครื่องมือที่มีประโยชน์มากมาย เช่น gofix และ govet
ทีมที่ยอดเยี่ยม
ผู้สนับสนุนที่อยู่เบื้องหลังภาษา Go คือ Google ภาษานี้เพียงพอสำหรับการทดสอบในสถานการณ์ต่างๆ พร้อมกันนี้ ผู้ก่อตั้งยังเป็นบิดาของภาษา C และการพัฒนาและนวัตกรรมที่ตามมาสามารถคาดหวังได้
ไปโครงการที่ประสบความสำเร็จ
ภาษา Go ถูกนำมาใช้อย่างแพร่หลายในยุคคลาวด์ โดยเฉพาะอย่างยิ่งการเกิดขึ้นของผลิตภัณฑ์นักฆ่า เช่น Docker และ K8s ทำให้ภาษา Go กลายเป็นสถานที่ในโลกวิศวกรรม
นอกจากนี้ ภาษา Go ยังมีซอฟต์แวร์ที่ใช้งานได้สำเร็จมากมาย:
nsq: ระบบคิวข้อความโอเพ่นซอร์สของ Bitly มีประสิทธิภาพสูงมาก ปัจจุบัน พวกเขาประมวลผลข้อความหลายพันล้านข้อความทุกวัน
packer: ใช้สร้างไฟล์อิมเมจสำหรับแพลตฟอร์มต่างๆ เช่น VM, vbox, AWS เป็นต้น ผู้เขียนเป็นผู้เขียนคนจรจัด
skynet: กรอบการจัดตารางเวลาแบบกระจาย;
Doozer: เครื่องมือซิงโครไนซ์แบบกระจาย คล้ายกับ ZooKeeper;
Heka: ระบบประมวลผลบันทึกโอเพ่นซอร์ส mazila;
cbfs: Couchbase ระบบไฟล์แบบกระจายแบบโอเพ่นซอร์ส;
tsuru: แพลตฟอร์ม PAAS แบบโอเพ่นซอร์สซึ่งมีฟังก์ชันเหมือนกับ SAE ทุกประการ
พระเจ้า: ระบบแคชคล้ายกับ redis แต่รองรับการกระจายและปรับขนาดได้
gor: เครื่องมือดักจับและเล่นซ้ำเครือข่าย;
ชื่อเรื่องรอง
ช่องเชิงนิเวศและมาตรฐานโดยปริยาย
นอกจากการทำงานหนักที่ต้องใช้ในการตีเหล็กแล้ว ยังมีโอกาสและโชคชะตาบางอย่างที่ทำให้บล็อกเชนเลือกภาษา Go มาดูตัวแทนที่ประสบความสำเร็จมากที่สุดของเครือข่ายสาธารณะและกลุ่มเครือข่ายตั้งแต่ Blockchain 2.0, Ethereum และ Hyperledger Fabric ซึ่งทั้งหมดเลือกใช้ Go เป็นภาษาการพัฒนาชั้นนำโดยไม่มีข้อยกเว้น
อิทธิพลของ super blockchain ทั้งสองนี้เทียบไม่ได้กับโครงการทั่ว ๆ ไป พวกเขาไม่เพียงครอบครองช่องขนาดใหญ่ในระบบนิเวศเท่านั้นแต่ยังกำหนดมาตรฐานของ blockchain โดยปริยาย ไม่ว่าจะเป็นข่าวกรองในเครือข่ายสาธารณะทั้งสัญญาหรือ เทคโนโลยีของห่วงโซ่พันธมิตรสามารถข้าม Ethereum และ Fabric ได้ ดังนั้นสำหรับบริษัทที่ต้องการเลือกเทคโนโลยี blockchain วิธีที่เร็วที่สุดในการบรรลุเป้าหมายคืออะไร โดยธรรมชาติแล้ว การคัดลอกนวัตกรรมของทั้งสองโครงการนี้โดยตรง และทางลัดคือการใช้รหัสโอเพ่นซอร์สโดยตรงเพื่อแก้ไข จากนั้นโดยธรรมชาติ ภาษา Go จะกลายเป็นตัวเลือกแรกสำหรับผู้มาใหม่ มันไม่ง่ายเลยที่จะนำมันกลับมาใช้ใหม่ ภาษาอื่น และหากคุณเลือกนวัตกรรมบางอย่างแต่ไม่ใช่ภาษาที่พัฒนาแล้วก็จะขาดการสนับสนุนสำหรับห้องสมุดบางแห่ง ทำให้โครงการไม่สามารถดำเนินการได้
หลายคนไม่ต้องสงสัยเลยเกี่ยวกับอิทธิพลของ Ethereum แต่อันที่จริงแล้ว ไม่ควรประเมินอิทธิพลของ Fabric ที่มีต่อการใช้งานบล็อกเชนระดับองค์กรต่ำเกินไป:
Hyperledger Fabric เป็นเฟรมเวิร์กโปรโตคอลที่ใช้มากที่สุดในบรรดาเครือข่ายบล็อกเชนระดับองค์กรที่ปรับใช้ และ Hyperledger (ซึ่ง Fabric เป็นโปรโตคอลหลัก) เป็นเฟรมเวิร์กโปรโตคอลที่ได้รับการสนับสนุนโดยทั่วไปโดยผู้รวมระบบและแพลตฟอร์มการพัฒนาซอฟต์แวร์ ซึ่งคิดเป็น 53%
ในบรรดาหนังสือเทคโนโลยีบล็อกเชนทั้งหมด ข้อเท็จจริงที่ว่าหนังสือเกี่ยวกับไฮเปอร์เลดเจอร์เป็นที่นิยมมากที่สุดก็เป็นเครื่องยืนยันถึงอิทธิพลของไฮเปอร์เลดเจอร์ด้วยเช่นกัน
ชื่อเรื่องรอง
การฝึก Bytom ในภาษา Go
ในกระบวนการเลือกภาษาการเขียนโปรแกรม C, C++ และ Java ได้รับการพิจารณา แต่ C/C++ นั้นยากต่อการบำรุงรักษาสำหรับโปรเจกต์ขนาดใหญ่ และ Java ค่อนข้างยุ่งยาก ในตอนนี้ ภาษา Go ได้ฉายแววในบล็อกเชนแล้ว โครงการ ค่อย ๆ สร้างผลกระทบหลักของเทคโนโลยีและความสามารถจากนั้นตามแนวโน้มของการเลือกเทคโนโลยีจะช่วยลดการต่อต้านที่พบโดยโครงการ Bytom เริ่มต้นตามธรรมชาติ แน่นอน ในกระบวนการพัฒนาแบบค่อยเป็นค่อยไปเรายังรู้สึกถึงความสะดวกสบายที่มาจากการเลือก ไปภาษาและข้อได้เปรียบ
กรณีของ Go on Blockchain
ในทางเทคนิคแล้ว โหนด blockchain ต้องการหลายโมดูลเพื่อทำงานร่วมกันแบบอะซิงโครนัส ดังนั้น การทำงานพร้อมกันของภาษา Go และช่องทางต่างๆ จึงได้เปรียบมาก ลองดูตัวอย่างการตรวจสอบธุรกรรมต่อไปนี้:
เราสามารถใช้ Routine+Ch+WaitGroup เพื่อสร้างฟังก์ชันธุรกรรมการยืนยันพร้อมกันภายใน 30 บรรทัดของโค้ด ในกรณีของเซิร์ฟเวอร์ที่มีการกำหนดค่าสูง มันสามารถรันได้มากกว่า 100,000 TPS
เป็นผู้เชี่ยวชาญภาษา Go ได้อย่างง่ายดาย
ในแง่ของการทำงานร่วมกัน การเรียงพิมพ์โค้ด Go โดยอัตโนมัติผ่าน gofmt สามารถลดความแตกต่างของสไตล์โค้ดที่ส่งโดยสมาชิกในทีมหลักและแม้แต่นักพัฒนาชุมชน และปรับปรุงคุณภาพโดยรวมและความสามารถในการบำรุงรักษาของโครงการ
สรุป
ชื่อเรื่องรอง
สรุป


