


Sepuluh Perbincangan tentang Pengaturcaraan Rangkaian Berprestasi Tinggi Linux
Sepuluh blog teknikal "Ten Talks on Linux High-Performance Network Programming" telah ditulis selama beberapa bulan, saya fikir saya akan menulis ringkasan untuk menyemak kerja saya dalam beberapa tahun yang lalu hampir 8 Walaupun saya menghabiskan banyak masa bekerja pada skru, saya masih belajar banyak daripada pengalaman saya dalam evolusi seni bina berprestasi tinggi, daripada penyertaan, pengoptimuman kepada reka bentuk akhir seni bina.
1. Reka bentuk terlebih dahulu atau evolusi perniagaan?
Semua orang sepatutnya mengalami proses projek dari 0 hingga 1. Saya ingin bertanya: Dalam banyak kes, adakah seni bina berkembang dengan perniagaan atau adakah ia direka lebih awal
Sesetengah orang mungkin telah mempelajari buku seni bina yang berkaitan Kebanyakan buku ini percaya bahawa seni bina berkembang dengan pembangunan perniagaan. Walau bagaimanapun, terdapat juga ramai arkitek yang menegaskan bahawa seni bina harus direka lebih awal. Di sini, saya tidak akan membuat kesimpulan buat masa ini, tetapi meneroka evolusi seni bina melalui pengalaman saya sendiri.
2. Daripada PHP kepada C++
2.1 Seni bina PHP yang ringkas
PHP, sebagai bahasa yang ringkas dan mudah, harus ada di semua jabatan kilang besar Pada masa itu, saya menggunakan dua bahasa untuk kerja: C++ dan PHP Menggunakan PHP untuk membangunkan fungsi adalah sangat pantas adalah banyak perpustakaan matang, jadi ia membentuk seni bina nginx Klasik
+php-fpm+memcache.
php seni bina
Di bawah seni bina semasa, ia bukan masalah besar untuk mesin 8c8g tunggal untuk menyokong 1000qps, jadi untuk perniagaan, ia pada masa ini kurang daripada 1wqps Jelas sekali, beberapa mesin lagi boleh menyokongnya. Mengenai reka bentuk lapisan cache, apabila redis belum dibangunkan dengan baik, memcache ialah komponen cache arus perdana pada masa itu, dan ia mudah untuk perniagaan dan dok dengan PHP. Namun, dengan perkembangan perniagaan, mengikut keluk pengiraan pada masa itu, ia mungkin mencapai 5wqps dalam masa setahun Adakah munasabah untuk menggunakan seni bina nginx + php-fpm + memcache Selepas perbincangan, matlamatnya adalah prestasi tinggi pada pelayan sisi, jadi kami memulakan perjalanan penemuan berprestasi tinggi.
Pada masa itu, untuk melaksanakan rangka kerja sisi pelayan berprestasi tinggi, orang ramai mencuba beberapa penyelesaian Salah satunya adalah menggunakan fungsi pemalam PHP untuk menyepadukan fungsi pelayan ke dalam bahasa skrip. Pendekatan ini mencapai matlamat prestasi tinggi pada tahap tertentu. Sebagai contoh, swole PHP kini merupakan hasil pembangunan kaedah ini.
pelayan-php
- Biasa dengan senario penggunaan sambungan PHP untuk mengelakkan perangkap
- Masalah kebocoran memori dalam penggunaan PHP itu sendiri
- Kos penyelesaian masalah apabila masalah berlaku Sebagai contoh, apabila masalah berlaku, kadangkala kita perlu memahami kod sumber PHP, tetapi dengan ratusan ribu baris kod, kos ini agak tinggi
- . PHP adalah mudah untuk digunakan Ini sebenarnya agak benar Dengan kebangkitan Docker, era yang berdiri sendiri sudah pasti akan berlalu.
- …
- Berdasarkan pemikiran dan analisis perkembangan perniagaan di atas, sebenarnya adalah lebih munasabah untuk kami melaksanakan sendiri pelayan atau menggunakan rangka kerja C++ sedia ada untuk melaksanakan satu set pelayan lapisan perniagaan Oleh itu, selepas pertimbangan, kami menerima pakai rangka kerja SPP syarikat . Seni binanya adalah seperti berikut:
Dapat dilihat bahawa SPP adalah seni bina pelbagai proses Seni binanya serupa dengan Nginx dan terbahagi kepada proses Proksi dan proses Pekerja, antaranya:
Proses proksi menggunakan handle_init untuk melakukan permulaan, handle_route dimajukan kepada proses pemprosesan pekerja yang ditentukan untuk pelaksanaan dan handle_input mengendalikan kemasukan paket permintaan
- Proses pekerja menggunakan handle_init untuk melakukan pemula, handle_process memproses pakej dan logik perniagaan serta pengembalian
- Selepas menggunakan seni bina C++, prestasi mesin tunggal dipertingkatkan secara langsung kepada 6kqps, yang pada asasnya memenuhi keperluan prestasi Ia boleh menyokong lebih banyak perniagaan pada mesin yang sama.
2.3 Memperkenalkan coroutine
Menggunakan C++ telah memenuhi keperluan prestasi, tetapi terdapat banyak masalah dalam kecekapan pembangunan, seperti mengakses redis Untuk mengekalkan prestasi tinggi perkhidmatan, logik kod menggunakan panggilan balik tak segerak, sama seperti berikut:
.... int ret = redis->GetString(k, getValueCallback) ...
GetValueCallback ialah fungsi panggil balik Jika terdapat banyak operasi io, panggilan balik di sini akan menjadi sangat menyusahkan Walaupun ia dirangkumkan dalam kaedah penyegerakan yang sama, ia akan menjadi sangat menyusahkan untuk dikendalikan pada masa itu std::async tidak diperkenalkan.
Sebaliknya, berdasarkan fakta bahawa qps berikutnya mungkin mencapai tahap 10~20w, coroutine akan mempunyai lebih banyak kelebihan dalam prestasi pemprosesan perkhidmatan multi-IO, jadi kami mula mengubah kaedah coroutine dan menggantikan semua tempat io dengan coroutines, untuk pembangunan perniagaan, kodnya menjadi seperti ini:
... int ret = redis->GetString(k, value) ...
Nilai ialah nilai pulangan yang boleh digunakan secara langsung Setelah terdapat io dalam kod, lapisan bawah akan menggantikan io dengan API coroutine Dengan cara ini, semua operasi io yang disekat akan menjadi primitif penyegerakan, struktur kod kecekapan pembangunan. Kedua-duanya telah banyak bertambah baik (untuk pelaksanaan coroutine khusus, sila rujuk siri artikel "Sepuluh Ceramah tentang Pengaturcaraan Rangkaian Berprestasi Tinggi Linux | Coroutines").
Coroutine
Masih tidak banyak perubahan dalam seni bina Pendekatan pelbagai proses + coroutine telah menyokong pembangunan perniagaan selama beberapa tahun Walaupun tiada pertumbuhan eksponen dalam prestasi, kami telah memperoleh lebih banyak pengalaman dalam penerokaan dan pemendakan berprestasi tinggi.
3. Asal awan
Perniagaan terus berkembang, dan jurutera sentiasa mengikuti konsep Cloud native yang paling canggih, sebagai titik teknologi yang popular dalam beberapa tahun kebelakangan ini, secara semula jadi tidak akan diabaikan, sebelum memasuki cloud native, jika pasukan anda tidak mempunyai a Konsep pembangunan DevOps, ini Ia akan menjadi satu proses yang menyakitkan yang memerlukan pembayaran balik hutang teknikal pada reka bentuk seni bina dan pemilihan rangka kerja.
3.1 Laksanakan konsep DevOps
Pada masa lalu, saya menganggap prestasi tinggi semasa membuat seni bina, dengan pemahaman saya tentang seni bina, saya mendapati prestasi tinggi hanyalah satu bidang reka bentuk seni bina yang kecil Jika anda ingin membina seni bina yang baik, anda memerlukan proses yang lebih tangkas konsep tadbir urus perkhidmatan
- Penyepaduan Berterusan: Pembangun menyepadukan kod ke dalam repositori kongsi berbilang kali sehari, dan setiap perubahan terpencil pada kod diuji serta-merta untuk mengesan dan mencegah isu penyepaduan
- Penghantaran Berterusan: Penghantaran Berterusan (CD) memastikan setiap versi kod yang diuji dalam repositori CI sedia untuk dikeluarkan
- Penyerahan berterusan: Ini termasuk penggunaan skala kelabu, keluaran biru-hijau, dsb. Tujuannya adalah untuk lelaran dengan cepat Selepas ujian penyepaduan yang agak lengkap, pengesahan skala kelabu boleh dicapai
- Penemuan perkhidmatan: Tukar perkhidmatan kepada perkhidmatan mikro untuk memudahkan panggilan antara perkhidmatan
- Rangka kerja RPC: Rangka kerja pelayan yang mengejar prestasi tinggi juga perlu mempertimbangkan sokongan komponen asas seperti pengehadan arus dan pemutus litar
- Sistem pemantauan: Bersepadu dengan Promethues, OpenTracing dan fungsi lain, ia boleh menemui masalah dalam talian dengan cepat dalam proses pembangunan tangkas
- Pengkontenaan: Untuk menyatukan alam sekitar dan mempertimbangkan senario asli awan terlebih dahulu, kontena adalah penting dalam proses pembangunan
- …
DevOps
3.2 Berbilang benang
Berdasarkan DevOps, digabungkan dengan rangka kerja Pelayan C++ di atas, kami mendapati bahawa pelbagai proses tidak lagi dapat memenuhi keperluan seni bina. Sebabnya adalah seperti berikut:
- Pelbagai proses tidak konsisten dengan konsep proses tunggal bekas Docker
- Proses pekerja mempunyai beban yang tidak sekata, cara menggunakan berbilang teras dengan lebih baik
- Bersambung dengan berkesan dengan sistem pemantauan
- Konfigurasi perniagaan dimuatkan berulang kali dan pusat konfigurasi perlu disesuaikan semula
- Adalah tidak munasabah untuk menggunakan pelbagai proses untuk menyediakan perkhidmatan stateful
- …
(1)Penyelidikan gRPC
gRPC
Pelayan Ia mempunyai ekosistem yang matang, pelbagai perisian tengah, menyokong berbilang bahasa, dll. Ia adalah pilihan yang baik untuk pembangunan perniagaan dari 0 hingga 1, tetapi ia menghadapi cabaran untuk migrasi perniagaan, seperti membangun. penemuan perkhidmatan penyesuaian Middleware anda sendiri, pusat konfigurasi, dsb., protokol transformasi mengikut pengekodan dan penyahkodan tersuai, cara menggabungkan coroutine, dsb., supaya ia dapat memuaskan sesetengah perniagaan, tetapi ia masih perlu disepadukan dengan lebih baik dengan RPC
Pelayan daripada komponen syarikat.
Kebetulan tRPC sedang dibangunkan dalam syarikat itu, kami mendapati ia pada asasnya memenuhi keperluan, jadi kami cuba menyesuaikan versi C++ tRPC kepada sistem kami pada peringkat awal pembangunan. rangka kerja RPC berprestasi tinggi telah dipindahkan dan digunakan dalam sistem perniagaan Kini, seni bina tRPC:
Berdasarkan pertimbangan dan pembangunan perniagaan di atas, kami mula cuba menyatukan rangka kerja Pelayan RPC berdasarkan prestasi tinggi untuk menyesuaikan diri dengan senario kepelbagaian RPC seterusnya, jadi kami melaksanakan set asas RPC
Pelayan yang menyesuaikan diri dengan Bingkai sistem perniagaan kami:
Seni bina baharu
Selepas melalui pemilihan dan transformasi di atas, perkhidmatan kami boleh disambungkan langkah demi langkah semasa migrasi ke k8s Perkhidmatan ini tidak perlu menjalani terlalu banyak transformasi untuk dijalankan pada platformnya, dan setiap platform yang disambungkan juga boleh. disokong sepenuhnya.
Nampaknya anda hanya boleh mengejar teknologi yang lebih baharu dan menunggu arah aliran seterusnya. Malah, terdapat lebih banyak cabaran pada masa ini disebabkan kemudahan awan dan pengembangan seni bina perkhidmatan migrasi, perkhidmatan perniagaan dan tahap logik yang tidak teratur menjadi semakin kompleks Pada masa yang sama, pautan hiliran yang bergantung pada perkhidmatan semakin lama dan lebih panjang Walaupun rangka kerja kami menyokong penjejakan pautan, semakin lama pautan, kebolehkawalan dan kestabilan perkhidmatan akan menjadi lebih teruk dan lebih teruk. lebih banyak akan dibazirkan sokongan manusia untuk ops harian.
Apa yang perlu dilakukan?…
Perlukah kita menggabungkan logik perniagaan dan memudahkan seni bina Masalahnya di sini ialah apabila logik perniagaan adalah kompleks, kitaran sering mengambil masa yang lama, dan dari perspektif kos, ia agak tinggi, dan faedahnya tidak terlalu besar
Sekiranya kita membangunkan semula seni bina baharu, mengekalkan seni bina yang reput seperti sedia ada atau meninggalkannya, dan menggunakan seni bina baharu untuk menyesuaikan diri dengan pembangunan seterusnya.
Atas ialah kandungan terperinci Sepuluh Perbincangan tentang Pengaturcaraan Rangkaian Berprestasi Tinggi Linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Pemulihan data sentiasa menjadi topik yang dipanaskan. Untuk berjaya memulihkan data dari peranti anda, anda harus tahu bagaimana ia menyimpan data. Anda boleh mempelajari perbezaan antara pemulihan RAID dan pemulihan cakera keras dari pos php.cn ini.

Adakah anda mengalami teks perkataan yang hilang semasa menaip? Beberapa huruf atau bahkan perenggan mungkin hilang dari dokumen anda. Apa yang salah dengannya? Dalam siaran ini dari laman web php.cn, kami akan melihat dengan lebih dekat perkataan yang memadamkan masalah teks secara automatik

Apabila anda cuba log masuk ke Overwatch 2, anda boleh menerima mesej ralat LC-208 dan ia menghalang permainan anda daripada menyambung ke pelayan permainan. Siaran ini dari Php.CN memperkenalkan cara membetulkan ralat Overwatch LC-208.

Umumnya, anda boleh dengan cepat mengakses dan mengedit fail Google Drive dari File Explorer. Walau bagaimanapun, kadang -kadang anda mungkin menghadapi masalah "Google Drive hilang dari File Explorer". Di sini siaran ini di php.cn memberitahu anda bagaimana untuk mendapatkan google drive untuk muncul i

Mengapa komputer saya di skrin selamat datang sekian lama? Bagaimana untuk memperbaiki skrin selamat datang Windows 7 perlahan? Jika anda masih menjalankan Windows 7 di PC anda dan memenuhi isu ini, anda berada di tempat yang betul dan pelbagai penyelesaian akan diberikan di sini oleh Php.Cn.

Mahu menggunakan alat pengurusan kata laluan terbina dalam-pengurus kelayakan untuk menguruskan kelayakan log masuk anda untuk web dan aplikasi? Bagaimana anda boleh membuka Pengurus Kredensial di Windows 11? Dalam siaran ini, Php.cn mengumpulkan pelbagai cara untuk mengakses utiliti ini, dan biarkan '

Microsft Defender Antivirus mempunyai ciri yang dipanggil Pengimbasan Berkala, yang boleh diaktifkan apabila anda telah memasang produk antivirus lain pada peranti Windows 11/10. Sekarang, jawatan ini dari php.cn mengajar anda bagaimana untuk membolehkan/melumpuhkan pengimbasan berkala di WI

Pernahkah anda menghadapi masalah "Hyperlink Excel tidak berfungsi"? Adakah anda tahu bagaimana menanganinya? Dalam jawatan ini dari php.cn, anda boleh mendapatkan beberapa penyelesaian yang layak untuk menyingkirkan masalah ini. Dan anda akan mengetahui alat pemulihan data profesional t


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

EditPlus versi Cina retak
Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

Versi Mac WebStorm
Alat pembangunan JavaScript yang berguna

Pelayar Peperiksaan Selamat
Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.

SublimeText3 versi Inggeris
Disyorkan: Versi Win, menyokong gesaan kod!

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa