Saya sering berfikir tentang banyak "soalan kenapa" teknikal semasa berjalan , kadang-kadang saya akan berfikir tentang masalah untuk masa yang lama, dan ia tidak selesai sehingga saya dapat meyakinkan diri saya tentang setiap titik masalah. Jadi saya ingin merakam pemikiran ini dan membentuk artikel, yang boleh digunakan sebagai siri baru. Anda mungkin tidak dapat melihat kod dalam artikel ini, tetapi anda boleh melihat sekilas beberapa masalah yang mudah diabaikan, serta "mengapa" masalah yang lebih mendalam.
Hari ini kami membawakan anda artikel pertama, mengapa Dubbo ditulis semula dalam Go?
Dubbo, yang dilahirkan di Alibaba dan sumber terbuka pada 2011, telah melalui 10 tahun. Pada 2019, ia telah ditulis semula dalam Go dan sumber terbuka Kini dua tahun kemudian, ia telah berkembang daripada versi V1.0.0 asal kepada V3.0.0, dengan kiraan bintang 3.8K setakat ini.
Seorang rakan sekerja pernah bertanya kepada saya mengapa projek "lama" seperti Dubbo perlu ditulis semula dalam Go Adakah ia mempunyai kepentingan praktikal
Izinkan saya bercakap tentang beberapa pendapat saya hari ini.
Saya fikir untuk menjawab soalan ini dengan baik, kita perlu bermula dengan niat asal Dubbo-go Ia memperkenalkan dirinya seperti ini di halaman utama github:
Terjemahan bahasa Cina rasmi ialah
Pelaksanaan bahasa Apache Dubbo Go, membina jambatan antara Java dan Golang, dan saling bersambung dengan gRPC /Ekosistem Dubbo Saling kendalian memimpin ekosistem Java untuk menikmati dividen teknologi era asal awan.
Biar saya menterjemahkannya dalam istilah orang awam: Dalam syarikat atau jabatan, sesetengah orang menggunakan versi Java Dubbo, dan sesetengah orang menggunakan Go kedua-duanya perlu berkomunikasi, jadi Dubbo-Go dicipta untuk menyelesaikan komunikasi masalah.
Jadi persoalan pertama ialah, mengapa syarikat menggunakan Java dan kemudian Go?
Untuk pilihan bahasa pengaturcaraan, dalam perniagaan Dalam syarikat, saya fikir perkara yang paling penting untuk dipertimbangkan ialah kecekapan, dan mata lain adalah sekunder. Kerana tujuan utama syarikat komersial adalah untuk mengaut keuntungan, tidak kira bahasa apa pun, asalkan ia boleh mendapat faedah yang sama pada kos yang paling rendah, ia adalah bahasa yang baik.
Kecekapan merangkumi beberapa aspek:
Melihat pada pilihan banyak syarikat komersial domestik, seperti Alibaba, mereka menganggap ini.
Pada zaman awal Alibaba, PHP telah digunakan Pertimbangan utama dalam memilih PHP adalah kecekapan pembangunan Walau bagaimanapun, dengan perkembangan perniagaan, prestasi PHP tidak dapat disokong, dan ia perlu diubah kepada a bahasa dengan kecekapan operasi yang tinggi.
Dengan kecekapan pengendalian yang tinggi, C/C++ secara semula jadi terlintas di fikiran, tetapi kecekapan pembangunan kedua-dua bahasa ini adalah rendah Titik keseimbangan mesti ditemui antara kecekapan pembangunan dan kecekapan operasi, jadi Alibaba memilih Java.
Apabila Alibaba secara rasmi menjawab tentang Zhihu mengapa mereka memilih Java, mereka mempertimbangkan perkara berikut terutamanya: prestasi, kesederhanaan dan kemudahan pembelajaran, ekologi yang kaya dan komuniti yang aktif
Utamakan prestasi dan permudahkan dan mudah dipelajari, ekologi yang kaya, dan komuniti aktif sebenarnya dirujuk sebagai kecekapan pembangunan. Dengan kelebihan inilah kecekapan pembangunan adalah tinggi.
Apabila Alibaba memilih Java, ia membangunkan sejumlah besar perisian tengah Java dan memupuk sejumlah besar bakat Java Oleh itu, syarikat lain juga merujuk kepada Alibaba apabila memilih teknologi, menyebabkan semakin banyak syarikat memilih Java.
Begitu juga dengan memilih Go Sesetengah syarikat muda mungkin menggunakan bahasa skrip seperti PHP dan Python pada peringkat awal Selepas mereka berkembang dan berkembang, mereka perlu menghadapi masalah yang sama seperti Alibaba : isu prestasi.
Go dikeluarkan pada tahun 2012, dan semua orang mempunyai pilihan lain Go mempunyai prestasi tinggi dan sangat mudah dan mudah untuk digunakan oleh syarikat baharu seperti ByteDance terutamanya menggunakan Go.
Jadi secara keseluruhannya, adalah munasabah untuk memilih Java atau Go, dan adalah munasabah untuk wujud.
Mengapa sesetengah syarikat memilih Java tetapi mahu menggunakan Go?
Ringkasnya, adalah munasabah untuk memilih Java atau Go Adalah munasabah untuk memilih kedua-duanya dalam syarikat Walaupun perkadarannya tidak besar, ia masih munasabah. Terdapat keperluan untuk komunikasi Java dan Go.
Pada masa awal, syarikat biasanya menggunakan satu perkhidmatan Apabila skala mencapai tahap tertentu dan aplikasi tunggal tidak dapat menyokong pembangunan perniagaan, ia akan memilih seni bina perkhidmatan mikro Pada masa ini Anda memerlukan rangka kerja RPC yang berguna.
Antara rangka kerja RPC yang boleh menyesuaikan diri dengan bahasa Java, Dubbo ialah sumber terbuka yang terawal di China dan sumber terbuka pada 2011.
Pesaing yang serupa seperti Spring Cloud adalah sumber terbuka pada tahun 2014, Weibo's Motan adalah sumber terbuka pada tahun 2017, gRPC silang bahasa adalah sumber terbuka pada tahun 2015 dan Thrift2 adalah sumber terbuka pada tahun 2007.
Hanya Thrift lebih awal daripadanya, tetapi Thrift hanyalah rangka kerja RPC, manakala Dubbo menyertakan keupayaan pengurusan perkhidmatan yang luar biasa, seperti pendaftaran dan penemuan perkhidmatan, pengimbangan beban, toleransi kesalahan, konfigurasi dinamik, dsb.
Boleh dikatakan bahawa rangka kerja Java RPC awal tiada pilihan.
Walaupun dalam era rangka kerja RPC berkembang pesat, dengan begitu banyak syarikat menggunakannya dan sokongan Alibaba, Dubbo masih mempunyai tempatnya.
Apabila syarikat memilih bahasa pengaturcaraan Java dan rangka kerja Dubbo (terdapat beberapa pilihan), dan kemudiannya ingin mencuba Go, atau beberapa perniagaan baharu atau jabatan baharu ingin mencuba Go Pada masa itu, mereka menghadapi masalah, bagaimana untuk berkomunikasi dengan Java's Dubbo dalam Go.
Memandangkan protokol Dubbo ialah protokol peribadi, kos untuk melaksanakannya semula dalam Go masih agak tinggi. Jadi Dubbo-Go wujud Dari perspektif ini, Dubbo-Go masih mempunyai nilai yang besar dalam komunikasi antara Java dan Go.
Jika anda menggunakan rangka kerja Dubbo, anda sering memerlukan get laluan Dubbo Untuk mendapatkan maklumat lanjut tentang get laluan Dubbo, anda boleh merujuk artikel saya: "The Evolution of Gerbang Perkhidmatan Mikro".
Dalam artikel ini, saya memperkenalkan secara terperinci latar belakang, kesukaran, pemilihan, reka bentuk, evolusi dan pengalaman perangkap gerbang Dubbo Di dalamnya, saya meluangkan banyak masa untuk memperkenalkan "Apa yang saya lakukan dengan kumpulan benang "Perjuangan", dalam Java, benang sangat berharga, tetapi jika get laluan Dubbo dipanggil serentak, satu permintaan mesti menduduki satu benang, yang akan mengakibatkan kegagalan serentak, dan apabila kumpulan benang penuh, ia akan menjejaskan permintaan lain.
Jadi penyelesaiannya adalah sama ada mengasingkan kumpulan benang atau menukar kepada panggilan tak segerak. Kumpulan benang terpencil hanya menyelesaikan masalah permintaan yang tidak menjejaskan satu sama lain, tetapi konkurensi masih tidak dipertingkatkan Penukaran kepada panggilan tak segerak boleh menyelesaikan masalah dengan sempurna, tetapi pengekodan terlalu rumit.
Coroutine Go hanya boleh menyelesaikan masalah ini Coroutine Go sangat ringan dan mempunyai kecekapan penjadualan yang lebih tinggi, jadi kami boleh menulis get laluan yang sangat cekap dengan kod mudah.
Sebagai contoh, anda boleh merasakan prestasi Nginx secara intuitif Semua orang tahu prestasi Nginx, tetapi jika ia dilaksanakan di Jawa, saya tidak tahu berapa banyak mesin yang diperlukan untuk mencapai prestasi Nginx. Walau bagaimanapun, Baidu menggunakan Go untuk menulis proksi terbalik Menggunakan BFE untuk menggantikan Nginx menunjukkan betapa keterlaluan prestasinya.
Untuk pengenalan dan prinsip coroutine, anda boleh merujuk artikel saya: "Menulis Golang selama setahun, mari bercakap tentang proses, benang dan coroutine".
Jadi pada gerbang Dubbo, Dubbo-Go juga menyediakan penyelesaian baharu Tuya Smart sudah mempunyai get laluan Dubbo-Go untuk kegunaan dalam talian, dan ia telah menjadi sumber terbuka sebagai Dubbo- go-. pixiu.
ServiceMesh secara beransur-ansur menjadi seni bina perkhidmatan mikro generasi seterusnya Go pastinya merupakan bahasa bintang yang bersinar di Mesh, sama ada K8S, Docker dan asas asli awan yang lain. Kemudahan ini semuanya ditulis dalam Go, dan kepantasan pembangunan Go dan keupayaan konkurensi tinggi coroutine menjadikannya bahasa pilihan untuk Mesh.
Berdasarkan perkara ini, Dubbo's Meshization dan Dubbo-Go juga telah membuka jalan untuk itu, DubboMesh masih dalam peringkat kecil, dan penyelesaian lengkap bukanlah sumber terbuka , jika seseorang Syarikat ingin mengambil jalan DubboMesh, dan Dubbo-Go mungkin juga salah satu perkara yang perlu mereka pertimbangkan.
Setelah berkata begitu banyak perkara, sudah tiba masanya untuk memberikan jawapan positif mengapa Dubbo perlu ditulis semula dalam Go Jawapan kepada soalan ini masih merupakan ayat rasmi: merapatkan jurang antara Jambatan Jawa dan Golang. Mengenai mengapa perlu "membina jambatan ini", rujuk gambar di bawah:
Atas ialah kandungan terperinci Mengapa Dubbo ditulis semula dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!