Hacker News

Биз бир жиптүү C++ менен көп жиптүү Rust интерфейсин түздүк

Биз бир жиптүү C++ менен көп жиптүү Rust интерфейсин түздүк Интерфейстердин бул комплекстүү талдоосу анын негизги компоненттерин жана кеңири кесепеттерин деталдуу изилдөөнү сунуш кылат. Фокустун негизги багыттары Талкуунун борбору: Негизги механизм...

1 min read Via antithesis.com

Mewayz Team

Editorial Team

Hacker News
Бул жерде толук SEO блог посту:

Биз бир жиптүү C++ менен көп жиптүү дат менен интерфейстедик

Бир жиптүү C++ кодун көп жиптүү Rust менен интерфейстештирүү гана мүмкүн эмес — бул эски системаларды толук кайра жазуусуз модернизациялоонун эң практикалык жолдорунун бири. Mewayzте биз 207 модулдук бизнес ОСти 138 000 колдонуучуну тейлөөгө масштабдашканда дал ушул көйгөйдү чечтик жана натыйжалар системалардын өз ара иштешүүсү жөнүндө көз карашыбызды түп тамырынан бери өзгөрттү.

Эмне үчүн сиз бир жиптүү C++ менен көп жиптүү Rust интерфейсин колдоносуз?

Көпчүлүк өндүрүштүк системалар көп жылдык согушта сыналган C++ кодун алып жүрүшөт. Rust'та баарын кайра жазуу кагазда жагымдуу угулат, бирок бул чоң тобокелдикти жана инженердик убакытты талап кылат. Прагматикалык мамиле кадамдуу кабыл алуу болуп саналат — учурдагы C++ логикасын ороп, ошол эле учурда оор жүктөрдү Rust'тун менчик моделине түшүрүү.

Биздин учурда, негизги бизнес-логикалык модулдар бир нече жыл бою C++ тилинде ишенимдүү иштеп келген. Алар тапшырмаларды ырааттуу иштетүү, документтерди түзүү жана каржылык эсептөөлөрдү жүргүзүштү. Бирок биздин колдонуучу базабыз 100 миңден ашкандыктан, бизге параллелдүү маалыматтарды иштетүү, бир эле учурда API иштетүү жана коопсуз жалпы мамлекеттик башкаруу керек болду. Rust'тун Жөнөтүү жана Sync сапаттары бизге компиляция убактысынын тең келүү кепилдиктерин берди, бул C++ кеңири кол менен текшерүүсүз сунуштай албайт.

Негизги түрткү тобокелдикти азайтуу болуп саналат. Эч качан бүтпөй турган миграцияда бардык коддук базаңызды ойнобостон, сиз иштегенди сактап, кандай шкалаларды кошосуз.

ФФИ чек арасы чындыгында кантип иштейт?

<б> C++ жана Rust ортосундагы Чет өлкөлүк функция интерфейси (FFI) C-шайкеш функция кол тамгалары аркылуу иштейт. Rust's extern "C" блоктору C++ түз чакыра ала турган функцияларды ачып берет жана тескерисинче. Орчундуу маселе Rust'тун көп агымдуу иштөө убактысы бир агымдуу C++ кодун коопсуз түрдө чакырышы керек болгондо пайда болот.

Биз муну атайын архитектуранын жардамы менен чечтик:

  • Жип менен чектелген C++ аткаруучусу: Бардык C++ чалуулары билдирүү өткөрүү каналын колдонуу менен бир арналган жип аркылуу өткөрүлөт, бул бир жиптүү инвариант эч качан бузулбасын камсыз кылат.
  • Rust асинхрондуу көпүрө катмары: Tokio тапшырмалары C++ аткаруучусуна ишти тапшырат жана Rust тарабын толугу менен асинхрондуу сактап, бир жолу каналдар аркылуу күтөт натыйжалар.
  • Тунук эмес көрсөткүчтү башкаруу: C++ объекттери детерминисттик тазалоо үчүн Drop ишке ашырган Rust структураларына оролуп, тил чегинен эс тутумдун агып кетишинин алдын алат.
  • Чек арадагы сериалдаштыруу: Татаал маалымат структуралары FFI катмарында FlatBuffers'ге сериялаштырылып, морт структуралардын түзүлүшүнүн дал келишин болтурбай, ар бир тараптын көз карандысыз эволюциясын камсыз кылат.
  • Паник-обочолонуу: Rust'тун catch_unwind ар бир FFI кирүү чекиттерин ороп, паника эч качан тилдин чегин кесип өтпөйт, бул аныкталбаган жүрүм-турум болуп калат.

Бул үлгү бизге далилденген C++ логикасынын ишенимдүүлүгү менен көп жиптүү Rust өткөрүү жөндөмдүүлүгүн берди — баштапкы бизнес эрежелеринин бир да сабын кайра жазбастан.

Эң чоң тузактар кайсылар?

Эң коркунучтуу жаңылыштык - бул C++ кодун жип үчүн коопсуз эмес деп эсептөө. Глобалдык абал, статикалык өзгөрмөлөр жана кайра кирбеген китепкана чалуулары Rust'тун компилятору FFI чек арасы аркылуу аныктай албаган маалыматтар жарышын жаратат. Rust'тун коопсуздугу unsafe блогунда токтоп калышына кепилдик берет — ичиндеги бардык нерсе сиздин жоопкерчилигиңизде.

Негизги түшүнүк: Rust өзүнүн кодунун алкагында эстутумдун коопсуздугун кепилдейт, бирок C++ тилкесинде FFI чек арасын кесип өткөндө, сиз C++ менен болгон жиптин коопсуздугу көйгөйүн мурастап каласыз. Бул чек аранын айланасындагы архитектура анын эки тарабындагы коддон да маанилүү.

💡 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 →

Дагы бир жалпы тузак - бул өмүр бою башкаруу. C++ объекттери Rust's карызды текшерүүчүгө катышпайт. Эгер C++ көрсөткүчтү кармап турганда Rust шилтемени түшүрсө, анда сиз диагностикалоо өтө кыйын болгон колдонуудан кийинки мүчүлүштүктөрдү аласыз. Биз муну катуу менчиктин семантикасын колдонуу менен чечтик: C++ объекттери ар дайым так бир Rust пакетине таандык жана бөлүшүлгөн кирүү Rust тарабындагы Arc негизиндеги шилтемени эсептөө аркылуу өтөт.

Аткаруу жагынан, ашыкча FFI чалуулары контекстти которуудан жана сериялаштыруудан кошумча чыгымдарды жаратат. Мүмкүн болушунча биз операцияларды пакеттеп, жекече тилдер аралык чалууларды жасоонун ордуна C++ аткаруучусуна жумуш элементтеринин кезегин жөнөтөбүз.

Бул ыкма өндүрүштө кандай ишке ашты?

Платформабызда гибриддик архитектураны жайылткандан кийин, биз конкреттүү жакшыртууларды өлчөгөнбүз. Мурда ырааттуу C++ иштетүүдө кыйынчылык жараткан модулдар үчүн суроо-талап өткөрүү жөндөмдүүлүгү 3,4 эсеге көбөйдү. Rust'тун синхрондуу иштөө убактысы көз карандысыз суроо-талаптарды бир эле учурда иштетип, C++ өзүнүн арналган жипинде эсептөө оор тапшырмаларды аткара алгандыктан, күтүү убактысы (p99) 61% төмөндөдү.

Баарынан да маанилүүсү, өндүрүштүн биринчи алты айында бизде нөлдүк параллелдүүлүккө байланыштуу мүчүлүштүктөр болгон. Жипти камоо үлгүсү C++ кодун бир нече жиптен чакырууну структуралык жактан мүмкүн эмес кылды, ал эми Rust типтеги системасы чек аранын тарабында маалымат жарыштарын алдын алды. Бул бир чейрек ичинде үч жарыш шартын жараткан мутекстер менен C++ тилкесин кошууга аракет кылган мурунку мамилебизге караганда олуттуу жакшырышты.

Инженердик топ дагы тезирээк итерация циклдерин билдирди. Жаңы функцияларды Rust программасында толук параллелдүү колдоо менен курууга болот, ал эми учурдагы C++ модулдары эч кандай өзгөртүүсүз иштей берген. Бул кошумча стратегия бизде эч качан жогорку кооптуу "чоң жарылуу" миграциясы болгон эмес — жөн гана туруктуу, өлчөнө турган жакшыруу дегенди билдирет.

Көп берилүүчү суроолор

Руст бир жиптүү C++ китепканаларын өзгөртүүсүз чакыра алабы?

Ооба, бирок сиз ошол китепканага бардык чалуулар бир жиптен болушун камсыз кылышыңыз керек. Стандарттык үлгү канал аркылуу бардык C++ чалууларын сериалдаштыруучу атайын аткаруучу жипти түзүү болуп саналат. Rust'тун асинхрондуу тапшырмалары суроо-талаптарды тапшырат жана көп жиптүү иштөө убактысын бөгөттөбөй жоопторду күтөт. C++ кодунун өзү эч кандай өзгөртүүнү талап кылбайт — коопсуздук чектөөсү толугу менен Rust тарабында аткарылат.

FFI кошумча чыгымдары колдонмонун иштешине таасир эте тургандай олуттуубу?

Жеке FFI чалуулары минималдуу кошумча чыгымга ээ — адатта жөнөкөй функцияга чалуу үчүн 10 наносекунддан аз. Бирок, эгер сиз миңдеген кылдат чалууларды жасасаңыз, татаал маалымат структураларын сериялаштыруу жана чек арадагы жипти синхрондоштуруу кошулат. Топтоо операциялары жана FlatBuffers же Cap'n Proto сыяктуу нөлдүк көчүрмө форматтарын колдонуу, масштабда болсо дагы, ашыкча чыгымды анчалык деле жокко чыгарат.

Интерфейсациянын ордуна C++ код базасын Rustта кайра жазышыбыз керекпи?

Көпчүлүк командалар үчүн кошумча интерфейс коопсуз жана тезирээк жол. Толук кайра жазуу инженердик тобокелдиктин айларын киргизет, аягына чейин колдонуучу эч кандай мааниге ээ эмес. Интерфейсинг жакшыртууларды дароо жөнөтүүгө, өндүрүштө Rust ыкмасын ырастоого жана кооптуулугу эң көп таасир берген жерге жараша модулдарды бирден көчүрүүгө мүмкүндүк берет. FFI чектерин сактоонун баасы кайра жазуу баасынан ашкан модулдарды гана кайра жазыңыз.


Mewayzте биз масштабдуу инфраструктураны курабыз — техникалык жактан да, эксплуатациялык жактан да. Биздин 207 модулдук бизнес ОС 138,000 командага айына $19дан баштап акылдуу иш процесстерин жүргүзүүгө жардам берет. Долбоорлорду башкарып жатасызбы, операцияларды автоматташтырасызбы же бизнесиңизди масштабдуу кылып жатасызбы, Mewayz сиздин иштөө ыкмасына ылайыкташат. app.mewayz.com сайтында бекер сынагыңызды баштаңыз жана заманбап бизнес ОС сиздин командаңыз үчүн эмне кыла аларын көрүңүз.