Hacker News

Hari bakarreko C++ hari anitzeko Rust-ekin konektatu dugu

Hari bakarreko C++ hari anitzeko Rust-ekin konektatu dugu Interfazearen azterketa integral honek bere oinarrizko osagaien eta inplikazio zabalagoen azterketa zehatza eskaintzen du. Arlo nagusiak Eztabaidak honako hauek ditu ardatz: Nukleo meka...

6 min read Via antithesis.com

Mewayz Team

Editorial Team

Hacker News
Hona hemen SEO blogaren argitalpen osoa:

Hari bakarreko C++ hari anitzeko herdoilarekin konektatu dugu

Hari bakarreko C++ kodea hari anitzeko Rust-ekin konektatzea ez da posible bakarrik; sistema tradizionalak berridazketa osorik gabe modernizatzeko modurik praktikoenetako bat da. Mewayz-en erronka zehatz honi aurre egin genion 207 moduluko gure negozio-OS 138.000 erabiltzaileri zerbitzatzeko eskalatzean, eta emaitzek funtsean aldatu zuten sistemen elkarreragingarritasunari buruz dugun iritzia.

Zergatik konektatuko zenuke hari bakarreko C++ hari anitzeko herdoilarekin?

Ekoizpen-sistema gehienek urteetako borrokan probatutako C++ kodea daramate. Rust-en dena berridazteak erakargarria dirudi paperean, baina arrisku handia eta hilabeteetako ingeniaritza-denbora sartzen ditu. Ikuspegi pragmatikoa gehikuntzazko adopzioa da: lehendik dagoen C++ logika biltzea, aldiberekotasun handiko lan-kargak Rust-en jabetza eredura deskargatzen dituen bitartean.

Gure kasuan, negozio-logikako oinarrizko moduluak urteak daramatzaten hari bakarreko C++-n modu fidagarrian exekutatzen. Zeregin sekuentziala prozesatzea, dokumentuak sortzea eta finantza-kalkuluak kudeatzen zituzten. Baina gure erabiltzaile-basea 100 K baino gehiago hazi zenez, datuen prozesamendu paraleloa, APIen aldi berean kudeatzea eta partekatutako egoeraren kudeaketa segurua behar genuen. Rust-en Bidali eta Sync ezaugarriek konpilazio garaiko aldibereko bermeak eman zizkiguten C++-k eskuz egindako auditoria zabalik gabe eskaini ezingo lituzkeena.

Motibazio nagusia arriskua murriztea da. Funtzionatzen duena mantentzen duzu eta zer eskala gehitzen duzu, zure kode-oinarri osoa agian inoiz amaituko ez den migrazio batean apustu egin gabe.

Nola funtzionatzen du benetan FFI mugak?

C++ eta Rust-en arteko Foreign Function Interface (FFI) C-rekin bateragarriak diren funtzio sinaduren bidez funtzionatzen du. Rust-en kanpoko "C" blokeek C++-k zuzenean dei ditzakeen funtzioak erakusten dituzte, eta alderantziz. Erronka larria sortzen da Rust-en hari anitzeko exekuzio-denborak hari bakarreko C++ kodea segurtasunez deitu behar duenean.

Arkitektura dedikatu bat erabiliz konpondu dugu hau:

  • Thread-en mugatutako C++ exekutatzailea: C++ dei guztiak hari dedikatu bakar baten bidez bideratzen dira mezuak pasatzeko kanal bat erabiliz, hari bakarreko aldaezina ez dela inoiz urratzen ziurtatuz.
  • Rust zubi geruza asinkronikoa: Tokioko zereginek C++ exekutatzaileari bidaltzen diote lana eta itxaroten emaitzak bakarreko kanalen bidez, Rust aldea guztiz asinkronoa mantenduz.
  • Erakusle opakuaren kudeaketa: C++ objektuak Drop inplementatzen duten Rust egituretan biltzen dira, garbiketa deterministikoa egiteko, hizkuntza-mugan zehar memoria-ihesak saihestuz.
  • Serializazioa mugan: datu-egitura konplexuak FFI geruzan FlatBuffer-ekin seriatzen dira, egitura-diseinu hauskorra bat etortzea saihestuz eta alde bakoitzaren bilakaera independentea ahalbidetuz.
  • Izuaren isolamendua: Rust-en catch_unwind-k FFI sarrera-puntu guztiak biltzen ditu, izu batek hizkuntza-muga inoiz gaindi ez dezan, eta hori definitu gabeko portaera litzateke.

Eredu honek hari anitzeko Rust-en errendimendua eman zigun C++ logikaren fidagarritasunarekin, jatorrizko negozio-arauen lerro bakar bat berridatzi gabe.

Zeintzuk dira saihestu beharreko hutsunerik handienak?

Akats arriskutsuena C++ kodea hari segurua dela suposatzea da, ez dagoenean. Egoera globalak, aldagai estatikoek eta berriro sartzen ez diren liburutegi-deiek Rust-en konpilatzaileak detektatu ezin dituen datu-lasterketak eragingo dituzte FFI mugan zehar. Rust-en segurtasun-bermeak ez-segurua blokean gelditzen dira — barruan dagoen guztia zure ardura da.

💡 DID YOU KNOW?

Mewayz replaces 8+ business tools in one platform

CRM · Invoicing · HR · Projects · Booking · eCommerce · POS · Analytics. Free forever plan available.

Start Free →

Gakoa: Rust-ek memoriaren segurtasuna bermatzen du bere kodearen barruan, baina FFI muga bat C++-ra igarotzen duzun momentuan, C++-k dituen hari-segurtasun arazo guztiak heredatzen dituzu. Muga horren inguruko arkitekturak garrantzi handiagoa du haren bi aldeetako kodeak baino.

Beste hutsune arrunt bat bizitza osorako kudeaketa da. C++ objektuek ez dute parte hartzen Rust-en mailegu-kontrolean. Rust-ek erreferentzia bat botatzen badu C++-k oraindik erakuslea duen bitartean, diagnostikatzeko oso zailak diren erabilera-ondoko akatsak jasoko dituzu. Jabetza-semantika zorrotza ezarriz zuzendu dugu honi: C++ objektuak Rust-en bilgarri baten jabetzakoak dira beti, eta partekatutako sarbidea Arkuan oinarritutako erreferentzia-kontaketaren bidez pasatzen da Rust aldean.

Errendimenduaren arabera, FFI deiak gehiegizko gastuak sortzen ditu testuinguru-aldaketak eta serializazioak. Ahal den guztietan eragiketak multzokatzen ditugu, lan-elementuen ilara bat bidaltzen dugu C++ exekutatzaileari, hizkuntza ezberdinetako deiak egin beharrean.

Nola izan du ikuspegi honek ekoizpenean?

Gure plataforman arkitektura hibridoa zabaldu ondoren, hobekuntza zehatzak neurtu genituen. Eskaeren errendimendua 3,4 aldiz handitu da lehen C++ prozesamendu sekuentzialean botila-lepoa zuten moduluetarako. Buztan-latentzia (p99) % 61 jaitsi da, Rust-en exekuzio-denbora asinkronikoak eskaera independenteak aldi berean prozesatu ditzakeelako C++-k konputazio handiko zereginak bere hari dedikatuan kudeatzen zituen bitartean.

Garrantzitsuagoa dena, produkzioko lehen sei hilabeteetan aldiberekotasunarekin lotutako akatsik izan dugu. Hari-konfinamendu-ereduak egituraz ezinezkoa egin zuen C++ kodea hari anitzetatik deitzea, eta Rust-en motako sistemak datu-lasterketak eragotzi zituen bere mugaren aldean. Hau hobekuntza nabarmena izan zen gure aurreko planteamenduaren aldean.

Ingeniaritza taldeak iterazio-ziklo azkarragoak ere jakinarazi ditu. Ezaugarri berriak Rust-en eraiki daitezke aldibereko laguntza osoarekin, eta lehendik zeuden C++ moduluak aldatu gabe martxan jarraitzen zuten bitartean. Estrategia gehikuntza honek esan nahi du ez dugula inoiz arrisku handiko "big bang" migraziorik izan; hobekuntza egonkorra eta neurgarria besterik ez.

Ohiko galderak

Dei al dezake Rust-ek hari bakarreko C++ liburutegiei aldaketarik gabe?

Bai, baina liburutegi horretara dei guztiak hari bakar batetik egiten direla ziurtatu behar duzu. Eredu estandarra kanal baten bidez C++ dei guztiak serializatzen dituen exekutatzaile hari dedikatu bat sortzea da. Rust-en asinkronizazio-zereginek eskaerak bidaltzen dituzte eta erantzunen zain geratzen dira hari anitzeko exekuzio-denbora blokeatu gabe. C++ kodeak berak ez du aldaketarik behar — segurtasun-murriztapena Rust aldean erabat ezartzen da.

FFI gainkostua nahikoa esanguratsua al da aplikazioen errendimenduan eragina izateko?

FFI banakako deiak gutxieneko gainkostua dute, normalean 10 nanosegundo baino gutxiago funtzio dei soil baterako. Hala ere, datu-egitura konplexuen serializazioa eta mugan hari-sinkronizazioa gehitzen dira milaka dei zehatzak egiten badituzu. Bateatze eragiketak eta FlatBuffers edo Cap'n Proto bezalako kopiarik gabeko serializazio formatuak erabiltzeak gain-kostuak arbuiagarriak izaten ditu eskalan ere.

Gure C++ kode-basea berridatzi behar al dugu Rust-en interfazea jarri beharrean?

Talde gehienentzat, interfaze gehigarria da bide seguruena eta azkarragoa. Berridazketa osoak ingeniaritza-arriskua dakar ingeniaritza-arriskua amaitu arte, erabiltzaileari aurre egiteko baliorik gabe. Interfazeak hobekuntzak berehala bidaltzeko, Rust ikuspegia ekoizpenean balioztatzeko eta moduluak banan-banan migratzeko aukera ematen dizu, aldiberekotasunak eragin handiena ematen duen tokian oinarrituta. Berridatzi FFI muga mantentzeko kostuak berridazketa kostua gainditzen duten moduluak soilik.


Mewayz-en eskalatzen den azpiegiturak eraikitzen ditugu, bai teknikoki eta bai operatiboki. Gure 207 moduluko negozio-sistema eragileak 138.000 talderi laguntzen die lan-fluxu adimentsuak egiten 19 $/hilean hasita. Proiektuak kudeatzen, eragiketak automatizatzen edo zure negozioa handitzen ari zaren ala ez, Mewayz lan egiteko modura egokitzen da. Hasi doako proba app.mewayz.com helbidean eta ikusi zer egin dezakeen negozio-OS moderno batek zure taldearentzat.

Try Mewayz Free

All-in-one platform for CRM, invoicing, projects, HR & more. No credit card required.

Related Guide

HR Management Guide →

Manage your team effectively: employee profiles, leave management, payroll, and performance reviews.

Start managing your business smarter today

Join 30,000+ businesses. Free forever plan · No credit card required.

Ready to put this into practice?

Join 30,000+ businesses using Mewayz. Free forever plan — no credit card required.

Start Free Trial →

Ready to take action?

Start your free Mewayz trial today

All-in-one business platform. No credit card required.

Start Free →

14-day free trial · No credit card · Cancel anytime