Hacker News

Discord: Ko ha ako fakaekeeke 'i he fakahoko 'o e optimization .

Discord: Ko ha ako fakaekeeke 'i he fakahoko 'o e optimization . Ko e ‘analaiso kakato ko eni ‘o e ta‘efemahino‘akí ‘okú ne ‘omai ‘a e sivi fakaikiiki ‘o hono ngaahi konga tefitó mo e ngaahi ‘uhinga lahi ange. Ngaahi Feitu'u Tefito 'o e Tokanga ʻOku fakatefito ʻa e fealēleaʻakí ʻi he: Ngaahi founga tefito mo e p...

13 min read Via newsletter.fullstack.zip

Mewayz Team

Editorial Team

Hacker News

Fakafepaki: Ko ha Ako Fakaekeeke 'i he Fakalelei'i 'o e Fakahoko

'Oku tu'u 'a e fononga'anga 'o e fakahoko 'o e Discord ko e taha 'o e ngaahi sipinga fakaako lahi taha 'i he 'enisinia polokalama fakakomipiuta fakaonopooni, 'o fakahaa'i 'a e founga 'e lava ke scale ai ha tu'unga mei he lau afe ki he laui teau miliona 'o e kau faka'aonga'i 'o 'ikai feilaulau'i 'a e vave pe falala'anga. 'I hono sivisivi'i 'o e ngaahi tu'utu'uni faka'enisinia 'a e Discord — mei he ngaahi hiki 'o e database ki he taimi mo'oni 'o e fekau 'o e 'atakai — 'e lava ke to'o 'e he ngaahi pisinisi 'a e ngaahi founga kuo fakamo'oni'i ki hono langa 'o e ngaahi tu'unga 'oku nau fakahoko 'i he malumalu 'o e 'omi.

Ko e hā ʻa e Ngaahi Founga Tefito ʻoku Fakamālohiʻi ai ʻa e Fakahoko ʻo e Power Discord ʻi he Siakale?

Ko e ngaahi langa fakalakalaka 'o e Discord 'oku langa ia 'i ha filosofia 'o e ngaahi fefakatau'aki faka'enisinia fakakaukau'i. Na'e 'uluaki langa 'i he Python mo e MongoDB, na'e vave 'a e fetaulaki 'a e tu'unga mo e ngaahi bottlenecks 'i he pa 'a hono tu'unga faka'aonga'i. Na'e fai 'e he timi 'enisinia ha tu'utu'uni faka'aati mahu'inga: hiki mei ha monolithic stack ki ha 'aati 'oku fakatefito 'i he ngaue, 'o lava ai 'a e ngaahi konga fakafo'ituitui ke scale tau'ataina.

'I he uho 'o e fakahoko 'o e Discord ko 'ene faka'aonga'i 'o e Elixir mo e misini virtual 'o e Erlang BEAM ki hono layer fekau taimi mo'oni. Na'e taumu'a-langa 'a e BEAM VM ki he concurrent, ngaahi sisitemi 'oku kataki'i 'a e hala — ko e me'a tofu pe 'oku fie ma'u 'e ha tu'unga 'oku ne tokanga'i 'a e ngaahi fekau 'e laui piliona 'i he 'aho. Lolotonga iá, na'e faifai pea toe tohi 'a e layer API 'o e Discord 'i he 'ume'umea, 'o 'oatu 'a e malu 'o e manatu mo e ofi-zero-'olunga 'o e fakahoko 'oku 'ikai lava ke fakafehoanaki 'e he Python 'i he me'afua.

Ko e ola ko ha sisitemi 'oku tauhi ai 'a e ngaahi fehokotaki'anga WebSocket taimi tatau 'e laui miliona mo e ngaahi taimi 'o e tu'uaki 'o e fekau 'o e sub-50ms, na'a mo e lolotonga 'o e tumutumu 'o hono faka'aonga'i. Na'e 'ikai ko ha fakatu'utamaki 'eni — ko e ola ia 'o e iterative profiling, 'ilo'i 'o e bottleneck, mo e ngaahi tohi fakataumu'a 'o e ngaahi konga 'o e sisitemi 'oku mafasia taha.

Na'e anga fefe hono solova 'e he Discord 'a hono bottleneck 'o e Database 'iloa taha?

Ko e taha 'o e ngaahi pole 'enisinia 'o e Discord 'oku fakatohi fakapule'anga lahi taha na'e kau ai 'a e Cassandra, 'a e tufaki'anga fakamatala na'a ne ngaue'aki ke tauhi 'a e hisitōlia 'o e fekau. 'I he tupulaki 'a e tu'unga, lau latency degraded lahi — 'ikai koe'uhi ko Cassandra ko ha fili kovi, ka koe'uhi ko e ngaahi founga 'o hono faka'aonga'i 'o e Discord kuo liliu fakalukufua. Ko e ngaahi vahevahe vela, 'a ia ko ha lahi ta'efakatatau 'o e lau 'oku fakatefito 'i he ngaahi nodes 'o e fakamatala pau, na'e fakatupu 'e he ngaahi slowdowns ta'ealafakafuofua'i.

Ko e tali 'a e timi 'enisinia ko ha hiki faka'ilonga ki he ScyllaDB, ko ha fakamatala 'oku fe'unga mo e Cassandra 'oku tohi 'i he C++. Na'e fakasi'isi'i 'e he hiki 'a e p99 lau 'a e latency mei he 40-125ms ki lalo ki he milliseconds fika 'e taha 'i he ngaahi me'a lahi taha. Ko e me'a 'oku mahu'inga ange, na'a ne fakasi'isi'i 'a e faingata'a fakangaue 'o hono pule'i 'o e kulupu, fakatau'ataina'i 'a e ngaahi ma'u'anga tokoni faka'enisinia ke tokanga taha ki he fakalakalaka 'o e ngaahi fotunga kae 'ikai ko e tamate afi 'o e ngaahi langa fakalakalaka.

"Ko e optimization fakahoko lelei taha 'oku 'ikai ko e taimi kotoa pe 'oku fakatekinikale lahi taha — ko e taha ia 'oku ne fakasi'isi'i 'a e faingata'a lolotonga hono fakafepaki'i fakahangatonu 'a e bottleneck 'oku ne fakatupu 'a e mamahi 'a e tokotaha ngaue." — Ko ha tefito'i mo'oni 'oku fakamo'oni'i 'e he talanoa 'o e hiki 'o e database 'a e Discord.

'Oku fakahaa'i 'e he keisi ko 'eni ha lesoni mahu'inga ki ha fa'ahinga tu'unga tupulaki: 'e lava ke hoko 'a e me'angaue totonu ki he siteisi 'e taha 'o e tupulaki ko e me'angaue hala ki he hoko mai. Ko e hokohoko atu 'o e benchmarking mo e loto fie hiki 'oku 'ikai ko ha faka'ilonga ia 'o e palani kovi — ko e faka'ilonga ia 'o e matu'otu'a faka'enisinia.

Ko e hā ha ngaahi lēsoni fakahoko ʻo e māmani moʻoní ʻe lava ke fakaʻaongaʻi ʻe he ngaahi pisinisí?

Na'e 'ikai ke teolosia ma'a 'a e fononga'anga 'o e optimization 'a e Discord — na'a ne fakatupu ha seti 'o e ngaahi founga ngaue replicable 'oku faka'aonga'i ki ha fa'ahinga pisinisi 'oku fakalele 'e he polokalama fakakomipiuta. Ko e ngaahi me'akai 'oku ngaue'aki lahi taha 'oku kau ai 'a e:

💡 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 →
  • Profile kimu'a pea toki fakalelei'i: Na'e 'ilo'i ma'u pe 'e he Discord 'a e ngaahi bottlenecks pau 'o fakafou 'i he fua kae 'ikai ko e fakakaukau, 'o ta'ofi 'a e feinga maumau 'i he ngaahi hala 'oku 'ikai mahu'inga.
  • Fili 'a e ngaahi lea 'o e concurrency-'uluaki ki he ngaahi ngaue mamafa 'o e I/O: Ko e hiki ki he Elixir ki he fekau 'o e routing na'e fakasi'isi'i lahi 'a e CPU 'i 'olunga 'i hono fakafehoanaki ki he ngaahi sipinga 'o e filo-ki he-fehokotaki'anga.
  • Decouple 'a e tanaki'anga mei he compute: 'I hono fakamavahe'i 'o e tanaki'anga 'o e fekau mei he layer 'o e tu'uaki taimi mo'oni, Na'e faka'ata 'e he Discord 'a e layer takitaha ke fua tau'ataina 'o makatu'unga 'i hono sipinga 'o e kavenga pau.
  • 'Ufi'ufi 'a e hiki fakautuutu 'i he big-bang rewrites: Na'e hiki 'a e ngaahi sisitemi mahu'inga 'i he sevesi ki he sevesi, fakasi'isi'i 'a e fakatu'utamaki mo faka'ata 'a e hokohoko atu 'o e fakamo'oni 'o e ngaahi ma'u'anga tokoni 'o e fakahoko ngaue.
  • 'Inivesi 'i he observability vave: Ko e malava 'a e Discord ke 'ilo'i 'a e ngaahi regressions na'e tupu vave ia mei ha 'inivesi loloto 'i he tufaki'anga 'o e muimui'i, ngaahi dashboards metrics, mo e ngaahi langa fakalakalaka fakatokanga na'e langa kimu'a pea toki hoko 'a e ngaahi faingata'a.

'Oku anga fefe 'a e fakafehoanaki 'a e Founga 'a e Discord ki he Ngaahi Founga Kehe 'a e Ngaahi Ngaue'anga?

'Oku kehekehe 'uhinga 'a e sipinga 'o e fakalelei'i 'o e Discord mo e founga kuo fakaofiofi ai 'a e ngaahi tu'unga hange ko e Slack mo e Microsoft Teams ki he ngaahi pole tatau. Slack, hange ko 'eni, leaned lahi ki ha Node.js-fakava'e 'i he stack mo e pule'i 'o e WebSocket 'i he layer 'o e tohi kole, tali 'a e manatu ma'olunga ange 'i he 'olunga 'i he fetongi 'o e maheni 'a e developer. Ngaahi timi, poupou'i 'e he ngaahi langa fakalakalaka 'o e Microsoft 'a e Azure, na'a nau to'o ha founga 'o e kautaha-'uluaki — fakamu'omu'a 'a e talangofua mo e fakataha'i 'o e laulahi 'i he fakahoko 'o e raw latency.

Ko e me'a na'e fakafaikehekehe'i 'aki 'a e Discord ko 'ene loto fiemalie ke 'ave 'a e ngaahi tekinolosia 'oku si'isi'i ange 'a e ngaahi me'a lahi — Elixir, Rust, ScyllaDB — 'i he taimi na'e fakahaa'i ai 'a e ngaahi tekinolosia ko ia 'oku fe'unga lelei ange ki he ngaahi palopalema pau. Ko e founga pragmatic ko 'eni kae 'ikai ko e founga fakakaukau ki he fili 'o e tekinolosia na'e fakatupu 'e he ngaahi ma'u'anga tokoni 'oku lava ke fua 'o 'ikai fie ma'u ha toe tohi 'o e tu'unga fakalukufua 'i ha taimi pe 'e taha.

Ki he ngaahi pisinisi 'oku nau sivi'i 'enau ngaahi tu'unga 'o e tu'unga, 'Oku fakakikihi fefeka 'a e sipinga 'o e Discord ki he "fakalakalaka 'oku fakalele 'e he resume" — fili 'a e ngaahi tekinolosia ki honau ongoongoa 'o e ngaue'anga kae 'ikai ko 'enau fe'unga mo e palopalema. Ko e fehu'i 'oku 'ikai 'aupito "ko e ha 'oku manakoa?" ka ko e "ko e hā ʻokú ne solova ʻa e fakangatangata fakahoko pau ko ʻení?"

Ko e hā ha fakamoʻoni fakaʻepisitolo ʻokú ne fakamoʻoniʻi ʻoku ngāue ʻa e ngaahi founga fakaleleiʻi ʻo e Discord?

Ko e ngaahi ola 'o e ngaahi tu'utu'uni faka'enisinia 'a e Discord 'oku fakatohi pea 'oku lava ke fua. Hili 'a e hiki 'a e ScyllaDB, Na'e lipooti 'e he Discord ha fakasi'isi'i 'o e 10x 'i he lau 'o e node lolotonga ia 'oku fakalelei'i 'i he taimi tatau 'a e latency. Na'e faka'auha 'e he Rust API rewrite 'a e ngaahi fa'ahinga kotoa 'o e ngaahi bugs fekau'aki mo e manatu lolotonga hono fakasi'isi'i 'o e taimi tali 'o e ngaue. Ko hono tu'uaki 'o e fekau 'i he me'afua 'oku ngaue ma'u pe ia 'i lalo 'i he 50ms threshold na'a mo e lolotonga 'o e ngaahi me'a lalahi 'o e va'inga — ngaahi momeniti na'e fakamafasia'i kimu'a 'a e sisitemi ki hono ngaahi fakangatangata.

'I he 2023, Na'e fakahoko 'e he Discord 'a e miniti 'e 4 piliona 'o e fetu'utaki le'o faka'aho 'i he ngaahi seva 'oku laka hake 'i he 19 miliona 'oku ngaue. 'Oku 'ikai ko ha ngaahi metrics vanity 'eni — ko e fakamo'oni ia ko e ngaahi tu'utu'uni faka'aati na'e fai 'i he malumalu 'o e 'enisinia 'oku ne fakatupu 'a e ngaahi lelei 'o e fakahoko 'o e tu'uloa, compounding 'i he taimi.

Ngaahi Fehuʻi ʻoku Faʻa ʻEke

Ko e hā naʻe hiki ai ʻa e Discord mei he Python ki he Rust ki hono laʻi API?

'Oku fakangatangata 'e he loka faka'uhinga fakamamani lahi 'o e Python (GIL) 'a 'ene malava ke fakahoko 'a e code concurrent mo'oni, 'o fakatupu 'a e ngaahi silingí 'o e throughput na'e hoko 'o fakautuutu 'a e palopalema 'i he tupulaki 'a e lahi 'o e kole API 'a e Discord. Na'e 'oatu 'e he 'ume'umea 'a e ola 'o e developer fakafehoanaki ki he ngaahi sisitemi-levolo 'o e code 'o 'ikai ha taimi lele 'i 'olunga, ngaahi tu'u 'o e tanaki 'o e veve, pe ngaahi fakangatangata 'o e concurrency 'o e Python — 'o fakatupu ha la'i API na'e fakatou vave ange mo lahi ange 'a e predictable 'i he lalo kavenga.

Ko e hā ʻa e fehalaaki lahi taha ʻoku fai ʻe he ngaahi tuʻunga ʻo e fakaleleiʻi ʻo e fakahoko ngāué ʻi he meʻafuá?

Ko e fehalaaki angamaheni taha ko e optimizing vave mo e lahi kae 'ikai ko e fakataumu'a ki he pau, fua 'o e bottleneck 'oku ne fakatupu 'a e faka'auha. 'Oku ola lelei taha 'a e 'enisinia fakahoko 'i he taimi 'oku fakalele ai 'e he fakamatala profiling mo e metrics 'o e user-uesia. Na'e lavame'a ma'u pe 'a e Discord 'aki hono 'ilo'i 'a e fakangatangata 'o e uesia ma'olunga taha 'e taha — latency 'o e fakamatala, API throughput, WebSocket concurrency — pea solova ia 'o fakatefito kimu'a pea toki hiki ki he hoko mai.

'E lava fēfē ke faka'aonga'i 'e ha tu'unga 'i he tu'unga pisinisi 'a e ngaahi lesoni fakahoko 'o e Discord 'o 'ikai ha ngaahi ma'u'anga tokoni 'enisinia 'o e kautaha?

'Oku scale hifo 'a e ngaahi tefito'i mo'oni 'i he ola lelei. 'E lava ke fakahoko 'e ha fa'ahinga tu'unga observability tooling, ngaahi faka'osinga 'o e fakamatala 'i he malumalu 'o e kavenga mo'oni, pea fai 'a e ngaahi tu'utu'uni fakautuutu 'o e stack 'o makatu'unga 'i he fakamatala kae 'ikai ko e defaults. Ko e ngaahi tu'unga kotoa pe 'i he taha 'oku nau abstract 'a e faingata'a 'o e ngaahi langa fakalakalaka — tokanga'i 'o e caching, fetu'utaki taimi mo'oni, mo e tauhi 'o e fakamatala 'i he tu'unga 'o e tu'unga — 'oku faka'ata 'e he ngaahi pisinisi tupulaki ke nau ma'u 'aonga mei he optimized 'o e 'atakai 'o 'ikai fie ma'u ke nau toe langa ia 'e kinautolu.

'Oku fakamo'oni'i 'e he ako fakaekeeke 'o e fakahoko 'o e optimization 'o e Discord 'oku a'usia 'a e me'afua tu'uloa 'o fakafou 'i he ngaahi tu'utu'uni faka'ata 'oku fakakaukau'i, 'oku fakalele 'e he fakamatala — 'ikai 'aki hono lī 'o e ngaahi ma'u'anga tokoni ki he ngaahi palopalema. Pe 'oku ke fakalele ha tu'unga fetu'utaki pe ko ha sisitemi ngaue pisinisi multi-module, 'Oku tatau pe 'a e ngaahi tefito'i mo'oni: fua ta'etuku, decouple fakapotopoto, pea fili 'a e ngaahi me'angaue 'oku fe'unga mo e palopalema mo'oni.

Kapau 'oku kumi ho'o pisinisi ki ha tu'unga 'oku ne faka'aonga'i 'a e ngaahi tefito'i mo'oni ko 'eni mei he puha — tokanga'i 'a e fakahoko, scalability, mo e faingata'a 'o e ngaue koe'uhi ke ke lava 'o tokanga taha ki he tupulaki — 'aho kefakatotolo'i 'a e Mewayz. 'I he 207 modules fakataha'i, 138,000+ kau faka'aonga'i, mo e ngaahi palani 'oku kamata 'i he $19/mahina pe, 'Oku langa 'a e Mewayz ke fakafuofua'i 'aki ho'o pisinisi mei he 'aho 'uluaki.

Ko e hā naʻe hiki ai ʻa e Discord mei he Python ki he Rust ki hono API 'Oku fakangatangata 'e he Python 'a e loka faka'uhinga fakamamani lahi (GIL) 'a 'ene malava ke fakahoko 'a e code concurrent mo'oni, 'o fakatupu 'a e ngaahi silingí 'a ia na'e hoko 'o fakautuutu 'a e palopalema 'i he tupulaki 'a e Discord 'a e API kole productivity offer systemle. runtime 'i 'olunga, ngaahi tu'u 'o e tanaki 'o e veve, pe ngaahi fakangatangata 'o e concurrency 'o e Python \u2014 'o fakatupu ha la'i API"}},{"@type":"Fehu'i","hingoa":"Ko e hā 'a e fehalaaki lahi taha 'o e fakahokohoko 'o e ngaahi tu'unga 'oku fai 'i he me'afua?" vave mo e lahi kae 'ikai ko e fakataumu'a 'a e pau, fua 'a e bottleneck 'oku ne fakatupu 'a e faka'auha 'o e 'enisinia 'o e fakahoko 'oku ola lelei taha 'i he taimi 'oku fakalele ai 'e he fakamatala 'o e profiling mo e metrics 'o e tokotaha faka'aonga'i-uesia 'oku lavame'a ma'u pe 'aki hono faka'ilonga'i 'o e fakangatangata 'o e ma'olunga taha-uesia 'e taha \u2014 database latency, API2014. sp"}},{"@fa'ahinga":"Fehu'i","hingoa":"'E lava fēfē ke faka'aonga'i 'e ha tu'unga 'o e tu'unga pisinisi 'a e ngaahi lesoni fakahoko 'o e Discord 'o 'ikai ha ngaahi ma'u'anga tokoni 'enisinia 'o e kautaha?","acceptedAnswer":{"@fa'ahinga":Tali","text":"Ko e ngaahi tefito'i mo'oni reload hifo 'a e tu'unga 'o e servability 'oku lava ke fakahoko 'a e ola lelei. ngaahi tu'utu'uni 'o e stack fakalahi 'o makatu'unga 'i he fakamatala kae 'ikai ko e ngaahi tu'unga 'o e ngaahi tu'unga kotoa pe 'i he taha 'oku abstract 'a e faingata'a 'o e ngaahi langa fakalakalaka \u2014 tokanga'i 'o e caching, fetu'utaki taimi mo'oni, mo e tauhi 'o e fakamatala 'i he tu'unga 'o e tu'unga \u2014 faka'ata 'a e ngaahi pisinisi tupulaki ke ma'u 'aonga mei he optimi"}}]}

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