Talaan ng nilalaman[Tago][Ipakita]
- 1. Ano ang ibig mong sabihin sa disenyo ng system?
- 2. Ano ang pinakamahalagang katangian ng isang taga-disenyo ng system?
- 3. Ano nga ba ang CAP theorem?
- 4. Ano ang naiintindihan mo sa load balancing?
- 5. Ano ang pagkakaiba sa pagitan ng asynchronous programming at parallel programming?
- 6. Ano ang pagkakaiba ng horizontal at vertical scaling?
- 7. Ano ang eksaktong ibig mong sabihin sa latency, throughput, at availability ng system?
- 8. Ano ang mga katangian ng ACID?
- 9. Ano nga ba ang sharding?
- 10. Ano ang CDN?
- 11. Bakit gumagamit ng CDN?
- 12. Ano ang pagkakaiba ng sharding at partitioning?
- 13. Ano nga ba ang caching?
- 14. Ano ang mga CDN edge server?
- 15. Ano ang iba't ibang mga pattern ng Consistency para sa disenyo ng system?
- 16. Ano ang ibig mong sabihin sa optimistic locking?
- 17. Ano nga ba ang ibig mong sabihin sa “leder election”?
- 18. Ano ang iyong diskarte para sa pagdidisenyo ng isang TinyURL-like URL shortening service?
- 19. Ano ang iyong diskarte sa pagdidisenyo ng twitter?
- 20. Lumikha ng newsfeed system para sa Facebook
- 21. Ano ang BASE property ng isang system?
- 22. Ano ang Load Balancing With IP Address Affinity Technique?
- 23. Ano nga ba ang mga algorithm ng Cache Replacement (o Eviction Policy)?
- 24. Ano nga ba ang ibig mong sabihin sa distributed transaction?
- 25. Ano nga ba ang gutom?
- Konklusyon
Bago ka magsimula, inirerekomenda naming basahin ang aming panimulang gabay sa Disenyo ng System upang i-refresh ang iyong pangunahing kaalaman.
Kapag nag-iinterbyu para sa isang posisyon na nangangailangan ng kaalaman sa disenyo ng system, mayroon kang pagkakataong pag-usapan ang iyong background at ipakita ang iyong kakayahang bumuo ng mga kumplikadong sistema.
Kapag nakikipag-usap sa isang potensyal na tagapag-empleyo, ang paraan ng pagpapahayag mo ng iyong kadalubhasaan ay maaaring makatulong sa iyo na ipakita na ikaw ay isang karampatang kandidato para sa posisyon.
Maaari kang maghanda para sa iyong pakikipanayam sa trabaho sa pamamagitan ng pag-aaral ng mga pangunahing konsepto ng disenyo at pag-iisip kung paano ka tutugon sa mga katanungan tungkol sa kanila. Tatalakayin namin ang ilang karaniwang mga tanong at sagot sa panayam sa disenyo ng system sa post na ito upang matulungan kang maghanda para sa iyong susunod na panayam.
1. Ano ang ibig mong sabihin sa disenyo ng system?
Ang proseso ng pagtatatag ng mga katangian ng system kabilang ang mga module, arkitektura, mga bahagi, at kanilang mga interface, at data batay sa paunang natukoy na pamantayan ay kilala bilang disenyo ng system.
Ito ay ang proseso ng pagtukoy, paglikha, at pagdidisenyo ng mga sistema upang matugunan ang mga partikular na layunin at layunin ng kumpanya o organisasyon. Ang disenyo ng system ay higit pa tungkol sa pagsusuri ng system, mga pattern ng arkitektura, mga API, mga pattern ng disenyo, at pagsasama-sama ng lahat ng ito kaysa sa tungkol sa coding.
2. Ano ang pinakamahalagang katangian ng isang taga-disenyo ng system?
- Pakikipag-ugnayan ng gumagamit
- Panlabas na tawag sa API
- Mga offline na proseso
3. Ano nga ba ang CAP theorem?
Ayon sa CAP (Consistency-Availability-Partition Tolerance) theorem, hindi masisiguro ng isang distributed system ang C, A, at P nang sabay-sabay. Maaari lamang itong maghatid ng dalawa sa tatlong mga kasiguruhan sa karamihan. Gumamit tayo ng isang distributed database system para tulungan tayong maunawaan ito.
- Consistency: Tinutukoy nito na ang data ay dapat manatiling pare-pareho sa sandaling makumpleto ang isang transaksyon sa database. Halimbawa, ang lahat ng mga query ay dapat magbalik ng parehong tugon pagkatapos ng pag-update ng database.
- Availability: Ang mga database ay dapat na available at tumutugon sa lahat ng oras.
- Pagpapaubaya sa Partisyon: Kahit na nagiging problema ang komunikasyon, dapat na patuloy na gumana ang sistema ng database.
4. Ano ang naiintindihan mo sa load balancing?
Mag-load balancing ay ang proseso ng mahusay na pagpapakalat ng papasok na trapiko sa hanay ng mga backend server. Ang mga ito ay tinutukoy bilang mga server pool. Ang mga modernong website ay binuo upang pangasiwaan ang milyun-milyong query mula sa mga customer at tumugon sa kanila nang mabilis at mapagkakatiwalaan. Higit pang mga server ang kakailanganin upang mahawakan ang mga kahilingang ito.
Sa kasong ito, kritikal na hatiin ang trapiko ng kahilingan nang mahusay sa bawat server upang maiwasan ang labis na pasanin sa kanila. Ang load balancer ay gumaganap bilang isang traffic cop, na humaharang sa mga kahilingan at niruruta ang mga ito sa mga available na server upang walang sinumang server ang labis na mabigatan, na posibleng makababa sa pagganap ng application.
5. Ano ang pagkakaiba sa pagitan ng asynchronous programming at parallel programming?
Kapag nagpatakbo ka ng anumang bagay nang asynchronous, ipinahihiwatig nito na hindi mo kailangang hintayin itong matapos bago ka magpatuloy sa ibang bagay. Ang paralelismo ay tumutukoy sa sabay-sabay na pagsasagawa ng maraming gawain.
Kapag maaari mong hatiin ang mga trabaho sa iba't ibang bahagi ng paggawa, epektibong gumagana ang paralelismo. Ang Async at Callback ay isang paraan (tool o mekanismo) upang kumatawan sa concurrency, ibig sabihin, isang pangkat ng mga entity na maaaring makipag-usap at magbahagi ng mga mapagkukunan.
6. Ano ang pagkakaiba ng horizontal at vertical scaling?
Ang pagdaragdag ng bagong kagamitan sa pag-compute sa isang network na nagpapalaganap ng pagpoproseso at pangangailangan ng memorya sa isang dispersed network ng mga device ay tinutukoy bilang horizontal scaling. Sa madaling sabi, ang mga bagong instance ng server ay idinaragdag sa kasalukuyang pool, at ang pagkarga ng trapiko ay mahusay na nakakalat sa pagitan ng mga device na ito.
Ang vertical scaling ay tumutukoy sa ideya ng pagpapalawak ng kapasidad ng mapagkukunan ng isang computer sa pamamagitan ng pagdaragdag ng RAM, mahusay na mga CPU, o paglipat sa isang bagong makina na may mas mataas na kapasidad. Maaaring tumaas ang functionality ng server nang hindi nangangailangan ng anumang mga pagbabago sa programming.
7. Ano ang eksaktong ibig mong sabihin sa latency, throughput, at availability ng system?
Ang pagganap ay isang mahalagang aspeto ng disenyo ng system dahil nakakatulong ito sa bilis at pagiging maaasahan ng aming mga serbisyo. Ang tatlong pinakamahalagang sukat sa pagganap ay ang mga sumusunod:
- Ang oras na kinakailangan upang maihatid ang isang mensahe sa millisecond ay tinatawag na latency.
- Ang dami ng data na matagumpay na nailipat sa pamamagitan ng isang system sa isang partikular na tagal ng panahon ay tinutukoy bilang throughput. Bits per second ang ginagamit para sukatin ito.
- Ang tagal ng oras na magagamit ang isang system upang tumugon sa mga query ay tinutukoy ng pagiging available nito. Ang System Uptime / (System Uptime+Downtime) ay ang formula para sa pagkalkula nito.
8. Ano ang mga katangian ng ACID?
- Atomicity: Tinitiyak nito na ang mga pagbabago sa database ay alinman sa lahat o wala.
- Consistency: Pare-pareho ang mga value ng data sa database.
- Isolation: Ito ay tumutukoy sa paghihiwalay ng dalawang transaksyon.
- Durability: Pinapanatili ang data kahit na nabigo ang server.
9. Ano nga ba ang sharding?
Ang Sharding ay ang pamamaraan ng paghahati ng malaking lohikal na dataset sa maraming database. Ito rin ay tumutukoy sa pahalang na paghahati ng data dahil ang data ay maiimbak sa ilang mga computer. Bilang resulta, ang isang nakabahaging database ay maaaring humawak ng higit pang mga query kaysa sa isang solong malaking computer.
10. Ano ang CDN?
Ang network ng paghahatid ng nilalaman ay isang pandaigdigang network ng mga computer na nagtutulungan upang mabilis na makapagbigay ng impormasyon sa Internet. Nagbibigay-daan ito sa mabilis na paghahatid ng mga elemento tulad ng mga HTML page, JavaScript file, stylesheet, larawan, at video na kinakailangan upang mag-load ng nilalaman sa Internet.
11. Bakit gumagamit ng CDN?
- Isinasaalang-alang ang mga static na mapagkukunan na bumubuo sa humigit-kumulang 80% ng isang website, ang paggamit ng CDN ay makabuluhang binabawasan ang strain sa pinagmulang server.
- Dahil may mas kaunting distansya sa paglalakbay, mas mabilis na ibibigay ang impormasyon sa mga may-ari ng website na may mga bisita mula sa maraming heyograpikong lugar.
- Ang mga gumagamit ng mga CDN ay nakikinabang din mula sa kakayahang mabilis na umakyat at pababa bilang tugon sa mga pagdagsa ng trapiko.
12. Ano ang pagkakaiba ng sharding at partitioning?
Database Sharding – Ang database sharding ay isang paraan ng paghahati ng isang dataset sa maraming database upang ito ay maimbak sa iba't ibang workstation. Ang mas malalaking dataset ay maaaring hatiin sa mas maliliit na chunks at maiimbak sa ilang data node, na nagpapataas ng kabuuang kapasidad ng storage ng system.
Sa pamamagitan ng pagpapakalat ng data sa maraming makina, ang isang nakabahaging database ay maaaring humawak ng higit pang mga query kaysa sa isang sistema.
Ang Database Partitioning ay ang proseso ng paghahati ng mga nakaimbak na object ng database (mga talahanayan, index, at view) sa magkakahiwalay na piraso. Upang madagdagan ang kakayahang kontrolin, pagganap, at kakayahang magamit, ang mga malalaking object ng database ay nahahati.
Sa ilang mga kaso, ang partitioning ay maaaring mapabuti ang bilis kapag nag-a-access ng partitioned data. Maaaring bawasan ng partitioning ang laki ng index at pataasin ang pagkakataong mahanap ang pinakakailangang mga index sa memorya sa pamamagitan ng pagkilos bilang isang nangungunang column sa mga index.
13. Ano nga ba ang caching?
Ang pag-cache ay ang pamamaraan ng pagpapanatili ng mga kopya ng file sa isang pansamantalang lugar ng imbakan na kilala bilang isang cache, na nagpapabilis sa pag-access ng data at nagpapababa ng latency ng site. Tanging isang tiyak na halaga ng data ang maaaring maimbak sa cache.
Bilang resulta, ang pagtukoy ng mga diskarte sa pag-update ng cache na pinaka-angkop para sa mga layunin ng negosyo ay kritikal.
14. Ano ang mga server ng gilid ng CDN?
Ang mga CDN server na nag-cache ng materyal na nakuha mula sa iyong pinagmulang server o storage cluster ay kilala bilang mga edge server. Ang punto ng presensya ay isang termino na kadalasang ginagamit upang ilarawan ang mga edge server (POP).
Ang mga server sa gilid ay pisikal na nakaposisyon sa isang POP. Sa POP na iyon, maaaring i-cache ang impormasyon ng maraming edge server.
Ang kakayahang magbigay ng mga seksyon ng isang website mula sa ilang mga lugar ay binabawasan ang distansya sa pagitan ng bisita at ng web server, na nagreresulta sa mas mababang latency. Nagagawa ng mga server ng gilid ng CDN ang tumpak na layuning ito.
15. Ano ang iba't ibang mga pattern ng Consistency para sa disenyo ng system?
Dapat makuha ng bawat read request ang pinakabagong nakasulat na data, ayon sa CAP theorem. Kapag maraming kopya ng data ang naa-access, nagiging mahirap ang pag-synchronize ng mga ito para makatanggap ang mga customer ng sariwang data sa tuluy-tuloy na batayan. Ang mga sumusunod ay ang mga posibleng pattern ng pagkakapare-pareho:
- Mahina ang pagkakapare-pareho: Kasunod ng pagsulat ng data, maaaring makuha o hindi makuha ng kahilingang basahin ang na-update na data. Ang antas ng katatagan ay mainam para sa mga real-time na application tulad ng VoIP, video chat, at multiplayer na paglalaro.
- Sa wakas na pagkakapare-pareho: Sa kalaunan ay titingnan ng Reads ang pinakabagong data sa loob ng millisecond pagkatapos maisulat ang data. Ang data ay nadoble nang asynchronous sa kasong ito. Ang mga DNS at email system ay mga halimbawa nito. Ito ay epektibong gumagana sa mga system na may mataas na kakayahang magamit.
- Malakas na pagkakapare-pareho: Kasunod ng pagsulat ng data, titingnan ng mga susunod na mambabasa ang pinakabagong data. Ang data ay kinopya nang sabay-sabay sa kasong ito. Ito ay mapapansin sa RDBMS at mga file system, na angkop para sa paglilipat ng data.
16. Ano ang ibig mong sabihin sa optimistic locking?
Ang optimistikong pag-lock ay isang mekanismo kung saan nagbabasa ka ng isang tala, nagtala ng numero ng bersyon (kabilang sa mga alternatibong paraan ang mga petsa, timestamp, o checksum/hash), at pagkatapos ay i-double check kung hindi nagbago ang bersyon bago ito isulat muli.
Kapag isinulat mo pabalik ang record, gagamitin mo ang bersyon para i-filter ang update para matiyak na atomic ito. (ibig sabihin, hindi nabago sa pagitan ng pag-check mo sa bersyon at kapag isinulat mo ang rekord sa disk) at i-update ang lahat nang sabay-sabay.
17. Ano nga ba ang ibig mong sabihin sa “leder election”?
Sa isang distributed system na may maraming server na nag-aambag sa availability ng application, maaaring may mga pagkakataon na isang server lang ang responsable para sa pag-update ng mga third-party na API, dahil maraming server ang maaaring magdulot ng mga isyu kapag ginagamit ang mga API.
Kilala ang server na ito bilang pangunahing server, at ang pamamaraan para sa pagpili nito ay kilala bilang halalan ng pinuno. Kapag nabigo ang lider server sa isang distributed system, dapat mapansin ng mga server ang pagkabigo at pumili ng bagong pinuno. Gamit ang consensus technique, ang diskarte na ito ay pinakaangkop para sa mataas na kakayahang magamit at malakas na pagkakapare-pareho ng mga aplikasyon.
18. Ano ang iyong diskarte para sa pagdidisenyo ng isang TinyURL-like URL shortening service?
Binabago ng TinyURL ang isang mahabang URL sa isang solong, natatanging maikling URL. Ang mga teknolohiyang ito ay maaari ding tumanggap ng maikling URL at ibalik ang kumpletong URL.
Ano ang ilan sa mga mahahalagang katangian?
- Gumawa ng URL na mas maikli kaysa sa orihinal.
- Panatilihin ang mas mahabang URL at palitan ito ng mas maikli.
- Payagan ang pag-redirect sa mga maikling URL.
- Ang mga maikling URL na may mga custom na pangalan ay sinusuportahan.
- Pangasiwaan ang ilang mga katanungan nang sabay-sabay.
Ano ang mga pinakalaganap na problema?
- Paano mo sinusubaybayan ang imbakan ng database?
- Ano ang mangyayari kung ang pag-load ng user ay lumampas sa mga inaasahan?
- Paano kung dalawang tao ang gumamit ng parehong custom na URL?
Isaalang-alang ang mga sumusunod na mungkahi:
- Ang pag-hash ay isang ideya na maaaring gamitin upang ikonekta ang luma at bagong mga URL.
- REST API ay maaaring gamitin upang mahawakan ang front-end na komunikasyon at balansehin ang mabigat na karga.
- Ang multithreading ay isang ideya na nagbibigay-daan sa iyong pangasiwaan ang ilang mga kahilingan nang sabay-sabay.
- Ang mga orihinal na URL ay nakaimbak sa mga database ng NoSQL.
19. Ano ang iyong diskarte sa pagdidisenyo ng twitter?
Mga Kinakailangang Ibinigay:
- Nagpapadala ng mga tweet
- Sinusundan ang iba pang mga gumagamit
- Tweet feed/newsfeed
- Nasusukat ang system
- Mabilis na nagload
- Ang sistema ay maaasahan
Maaari mong simulan ang pag-iisip ng iyong disenyo ng Twitter API kapag naitatag mo na ang pamantayan. Ganito ang lalabas:
Upang magsimula, i-sketch namin ang mga pangunahing endpoint ng API. Narito ang ilang halimbawa:
- sendTweet(mensahe)
- followUser(userID)
- unfollowUser(userID)
- getFeed(pahina)
Ang arkitektura na magbibigay-daan sa mga katangiang ito ay maaaring i-sketch out. Maaari tayong magsimula sa user na nagsumite ng kahilingan sa server. Maaari kaming mag-install ng mga karagdagang server ng API sa likod ng isang load balancer upang tulungan ang ruta ng mas malalaking antas ng trapiko upang matugunan ang pangangailangan sa scalability. Kakailanganin naming magdagdag ng database upang maimbak ang aming mga tweet ngayon.
Mahalagang tandaan na ang API na ibinibigay namin ay dapat na scalable. Upang gawing scalable ang serbisyong ito, maaari naming ipabasa ang isa sa aming mga API server mula sa isang hiwalay na cache para sa aming newsfeed. Habang ginagawa ito, dapat din kaming gumamit ng feed provider para panatilihing napapanahon ang aming feed cache.
20. Lumikha ng newsfeed system para sa Facebook
Ang newsfeed sa Facebook ay nagbibigay-daan sa mga user na makita kung ano ang nangyayari sa mga lupon ng kanilang mga kaibigan, mga paboritong pahina, at mga organisasyong kanilang sinundan.
Ano ang ilan sa mga mahahalagang katangian?
- Gumawa ng newsfeed batay sa mga post mula sa ibang mga entity ng system na sinusunod ng user.
- Maaaring gamitin ang teksto, mga larawan, audio, at video sa mga pag-post sa Newsfeed.
- Sa real-time, magdagdag ng bagong nilalaman sa newsfeed ng user.
Ano ang ilan sa mga pinakakaraniwang isyu?
- Paano kung matagal lumabas ang bagong post sa news feed?
- Maaari bang pamahalaan ng algorithm ang pagtaas ng aktibidad ng user?
- Anong mga post ang dapat unang ipakita sa news feed?
Isaalang-alang ang mga sumusunod na mungkahi:
- Suriin ang mekanismo ng fanout para sa pamamahagi ng mga post sa mga tagasubaybay.
- Suriin kung paano magagamit ang sharding upang mahusay na pangasiwaan ang mataas na load ng user.
- Hindi dapat ma-duplicate ang data ng feed ng user sa maraming server. Sa halip, maaaring gawin ang shading batay sa mga user ID.
21. Ano ang BASE property ng isang system?
Ang mga tampok ng BASE ay nasa lahat ng dako sa mga database ng NoSQL na kamakailan lamang ay lumitaw. Ang isang BASE system ay hindi nagbibigay ng pare-pareho, ayon sa CAP theorem. Ito ay isang ginawang acronym na tumutugma sa sumusunod na katangian ng CAP theorem ng isang system:
- Ang terminong "basically available" ay nangangahulugan na ang system ay magiging available sa lahat ng oras.
- Ang isang malambot na estado ay nangangahulugan na ang estado ng system ay maaaring mag-iba sa paglipas ng panahon, kahit na walang input na ibinigay. Ito ay dahil sa karamihan sa pagiging pare-pareho ng modelo.
- Dahil ang system ay hindi tumatanggap ng input sa panahong iyon, sa huli, ang pagkakapare-pareho ay nangangahulugan na ang system ay magiging pare-pareho sa paglipas ng panahon.
22. Ano ang Load Balancing With IP Address Affinity Technique?
Ang isa pang kilalang paraan ng pag-load ng pagbabalanse ay ang IP address affinity. Ang IP address ng kliyente ay konektado sa isang node ng server sa pamamaraang ito. Isang server node ang humahawak sa lahat ng mga kahilingan mula sa isang client IP address.
Ang pamamaraang ito ay simpleng ipatupad dahil ang IP address ay palaging naa-access sa header ng kahilingan sa HTTP at walang karagdagang mga setting ang kinakailangan. Kung malamang na na-deactivate ang cookies ng iyong mga kliyente, maaaring maging kapaki-pakinabang ang ganitong paraan ng pagbalanse ng load.
23. Ano nga ba ang mga algorithm ng Cache Replacement (o Eviction Policy)?
Ang mga algorithm ng cache (kilala rin bilang mga algorithm sa pagpapalit ng cache, mga patakaran sa pagpapalit ng cache, o mga patakaran sa pagpapaalis ng cache) ay mga tagubilin sa pag-optimize, o mga algorithm, na magagamit ng isang computer program o isang istrakturang pinapanatili ng hardware upang pamahalaan ang isang cache ng data na nakaimbak sa computer.
Pinapalakas ng pag-cache ang bilis sa pamamagitan ng pag-iimbak ng kamakailang ginamit o madalas na na-access na data sa mga rehiyon ng memorya na mas mabilis o mas murang ma-access kaysa sa tradisyonal na memory storage. Kapag puno na ang cache, dapat magpasya ang algorithm kung aling mga item ang aalisin upang makagawa ng lugar para sa mga bago.
24. Ano nga ba ang ibig mong sabihin sa distributed transaction?
Ang ibinahagi na transaksyon ay anumang pangyayari kung saan ang isang kaganapan ay nagdudulot ng pagbabago ng dalawa o higit pang natatanging pinagmumulan ng data na hindi maaaring gawin nang atomically.
Ito ay nagiging mas kumplikado sa mundo ng mga microservice dahil ang bawat serbisyo ay isang yunit ng trabaho, at kadalasan ay maraming mga serbisyo ang dapat magtulungan upang maging matagumpay ang isang negosyo.
25. Ano nga ba ang gutom?
Kapag ang isang thread ay hindi makakuha ng regular na access sa mga nakabahaging mapagkukunan, ito ay sinasabing nagugutom. Nangyayari ito kapag ang mga "matakaw" na mga thread o mga thread na may mas mataas na "priyoridad" ay ginagawang hindi naa-access ang mga nakabahaging mapagkukunan sa mahabang panahon.
Isaalang-alang ang isang bagay na nagbibigay ng isang naka-synchronize na paraan na madalas na late bumalik. Kung paulit-ulit na tinatawag ng isang thread ang paraang ito, ang iba pang mga thread na nangangailangan ng madalas na naka-synchronize na access sa parehong bagay ay madalas na ma-block.
Konklusyon
Ang sesyon ng brainstorming ay ang lahat ng kailangan ng pakikipanayam sa disenyo ng system. Natugunan namin ang pinakakaraniwang mga tanong sa pakikipanayam sa Disenyo ng System sa post na ito.
Ang isang komprehensibong pag-unawa sa paraan na iyong ginagawa kapag gumagawa ng isang partikular na sistema ay kritikal sa pagpasa sa isang panayam sa Disenyo ng System.
Mag-iwan ng Sagot