Змест[Схаваць][Паказаць]
- 1. Што вы маеце на ўвазе пад дызайнам сістэмы?
- 2. Якія найбольш важныя характарыстыкі канструктара сістэмы?
- 3. Што такое тэарэма CAP?
- 4. Што вы разумееце пад балансаваннем нагрузкі?
- 5. У чым розніца паміж асінхронным праграмаваннем і паралельным?
- 6. У чым розніца паміж гарызантальным і вертыкальным маштабаваннем?
- 7. Што менавіта вы маеце на ўвазе пад затрымкай, прапускной здольнасцю і даступнасцю сістэмы?
- 8. Што такое ACID ўласцівасці?
- 9. Што такое шардынг?
- 10. Што такое CDN?
- 11. Навошта выкарыстоўваць CDN?
- 12. У чым розніца паміж шардынгам і падзелам?
- 13. Што такое кэшаванне?
- 14. Што такое памежныя серверы CDN?
- 15. Якія існуюць розныя шаблоны ўзгодненасці для праектавання сістэмы?
- 16. Што вы маеце на ўвазе пад аптымістычнай блакіроўкай?
- 17. Што менавіта вы маеце на ўвазе пад «выбарамі лідэра»?
- 18. Які ваш падыход да распрацоўкі службы скарачэння URL-адрасоў, падобнай на TinyURL?
- 19. Які ваш падыход да распрацоўкі твітэра?
- 20. Стварыце сістэму стужкі навін для Facebook
- 21. Што такое ўласцівасць BASE сістэмы?
- 22. Што такое балансіроўка нагрузкі з дапамогай тэхнікі прыналежнасці IP-адрасоў?
- 23. Што такое алгарытмы замены кэша (або палітыкі высялення)?
- 24. Што менавіта вы маеце на ўвазе пад размеркаванай транзакцыяй?
- 25. Што такое галаданне?
- заключэнне
Перш чым пачаць, мы рэкамендуем прачытаць наш уводнае кіраўніцтва па дызайне сістэмы каб аднавіць фундаментальныя веды.
Падчас інтэрв'ю на пасаду, якая патрабуе ведаў аб сістэмным дызайне, у вас ёсць шанец расказаць пра свой вопыт і прадэманстраваць сваю здольнасць распрацоўваць складаныя сістэмы.
Калі вы размаўляеце з патэнцыяльным працадаўцам, тое, як вы выказваеце свой вопыт, можа дапамагчы вам прадэманстраваць, што вы кампетэнтны кандыдат на гэтую пасаду.
Вы можаце падрыхтавацца да гутаркі, вывучыўшы асноўныя канцэпцыі дызайну і падумаўшы, як вы будзеце адказваць на запыты пра іх. У гэтай публікацыі мы разгледзім некалькі тыповых пытанняў і адказаў на інтэрв'ю па дызайне сістэмы, каб дапамагчы вам падрыхтавацца да наступнага інтэрв'ю.
1. Што вы маеце на ўвазе пад дызайнам сістэмы?
Працэс устанаўлення характарыстык сістэмы, уключаючы модулі, архітэктуру, кампаненты і іх інтэрфейсы, а таксама дадзеныя на аснове загадзя вызначаных крытэрыяў, вядомы як праектаванне сістэмы.
Гэта працэс вызначэння, стварэння і праектавання сістэм для дасягнення канкрэтных мэтаў і задач кампаніі або арганізацыі. Дызайн сістэмы - гэта больш пра аналіз сістэмы, архітэктурныя шаблоны, API, шаблоны праектавання і склейванне ўсяго гэтага разам, чым пра кадаванне.
2. Якія найбольш важныя характарыстыкі канструктара сістэмы?
- Узаемадзеянне карыстальніка
- Знешні выклік API
- Аўтаномныя працэсы
3. Што такое тэарэма CAP?
Згодна з тэарэмай CAP (Consistency-Availability-Partition Tolerance), размеркаваная сістэма не можа забяспечыць C, A і P адначасова. Ён можа даць не больш за два з трох гарантый. Давайце скарыстаемся сістэмай размеркаванай базы дадзеных, каб дапамагчы нам зразумець гэта.
- Узгодненасць: гэта вызначае, што даныя павінны заставацца паслядоўнымі пасля завяршэння транзакцыі базы дадзеных. Напрыклад, усе запыты павінны вяртаць аднолькавы адказ пасля абнаўлення базы дадзеных.
- Даступнасць: Базы даных павінны быць даступныя і хутка рэагаваць у любы час.
- Дапушчальнасць да раздзелаў: нават калі сувязь становіцца праблематычнай, сістэма базы дадзеных павінна працягваць працаваць.
4. Што вы разумееце пад балансаваннем нагрузкі?
Балансаванне нагрузкі гэта працэс эфектыўнага размеркавання ўваходнага трафіку сярод набору бэкэнд-сервераў. Яны называюцца пуламі сервераў. Сучасныя вэб-сайты створаны для апрацоўкі мільёнаў запытаў кліентаў і хуткага і надзейнага адказу на іх. Для задавальнення гэтых патрабаванняў спатрэбіцца больш сервераў.
У гэтым выпадку вельмі важна эфектыўна падзяліць трафік запытаў паміж кожным серверам, каб пазбегнуць іх празмернай нагрузкі. Балансір нагрузкі функцыянуе як даішнік, перахопліваючы запыты і накіроўваючы іх паміж даступнымі серверамі, каб ні адзін сервер не быў перагружаны, што патэнцыйна пагаршае прадукцыйнасць прыкладання.
5. У чым розніца паміж асінхронным праграмаваннем і паралельным?
Калі вы запускаеце што-небудзь асінхронна, гэта азначае, што вам не трэба чакаць, пакуль гэта скончыцца, перш чым вы зможаце перайсці да чагосьці іншага. Паралелізм мае на ўвазе адначасовае выкананне многіх задач.
Калі вы можаце разбіць заданні на розныя часткі працы, паралелізм працуе эфектыўна. Асінхронныя і зваротныя выклікі - гэта сродак (інструмент або механізм) для прадстаўлення паралелізму, г.зн. групы аб'ектаў, якія могуць мець зносіны і сумесна выкарыстоўваць рэсурсы.
6. У чым розніца паміж гарызантальным і вертыкальным маштабаваннем?
Даданне новага вылічальнага абсталявання ў сетку, якое размяркоўвае патрабаванні да апрацоўкі і памяці ў разрозненай сетцы прылад, называецца гарызантальным маштабаваннем. Прасцей кажучы, новыя асобнікі сервера дадаюцца ў бягучы пул, і нагрузка трафіка эфектыўна размяркоўваецца паміж гэтымі прыладамі.
Вертыкальнае маштабаванне адносіцца да паняцця пашырэння ёмістасці рэсурсаў аднаго кампутара шляхам дадання аператыўнай памяці, эфектыўных працэсараў або пераходу на новую машыну з большай ёмістасцю. Функцыянальнасць сервера можа быць павялічана без неабходнасці змены праграм.
7. Што менавіта вы маеце на ўвазе пад затрымкай, прапускной здольнасцю і даступнасцю сістэмы?
Прадукцыйнасць з'яўляецца важным аспектам праектавання сістэмы, паколькі яна спрыяе хуткасці і надзейнасці нашых паслуг. Тры найбольш важныя паказчыкі эфектыўнасці наступныя:
- Час, неабходны для дастаўкі аднаго паведамлення ў мілісекундах, называецца затрымкай.
- Колькасць даных, паспяхова перададзеных праз сістэму за пэўны перыяд часу, называецца прапускной здольнасцю. Для яго вымярэння выкарыстоўваюцца біты ў секунду.
- Колькасць часу, даступная сістэме для рэагавання на запыты, вызначаецца яе даступнасцю. Час бесперабойнай працы сістэмы / (Час бесперабойнай працы сістэмы + Час прастою) - гэта формула для яго разліку.
8. Што такое ACID ўласцівасці?
- Atomicity: гэта гарантуе, што змены базы дадзеных альбо ўсе, альбо ніякія.
- Адпаведнасць: значэнні даных у базе даных адпавядаюць.
- Ізаляцыя: гэта адносіцца да падзелу дзвюх транзакцый.
- Трываласць: Даныя захоўваюцца, нават калі сервер выходзіць з ладу.
9. Што такое шардынг?
Шардынг - гэта метад падзелу вялізнага лагічнага набору даных на мноства баз дадзеных. Гэта таксама адносіцца да гарызантальнага падзелу дадзеных, таму што дадзеныя будуць захоўвацца на некалькіх кампутарах. У выніку агульная база дадзеных можа апрацоўваць больш запытаў, чым адзін велізарны кампутар.
10. Што такое CDN?
Сетка дастаўкі кантэнту - гэта сусветная сетка камп'ютараў, якія супрацоўнічаюць для хуткага прадастаўлення інфармацыі ў Інтэрнэце. Гэта дазваляе хуткую дастаўку такіх элементаў, як HTML-старонкі, файлы JavaScript, табліцы стыляў, выявы і відэа, неабходныя для загрузкі інтэрнэт-кантэнту.
11. Навошта выкарыстоўваць CDN?
- Улічваючы, што статычныя рэсурсы складаюць каля 80% вэб-сайта, прыняцце CDN значна зніжае нагрузку на зыходны сервер.
- Паколькі адлегласць для падарожжа меншая, інфармацыя будзе прадастаўляцца хутчэй уладальнікам вэб-сайтаў, у якіх ёсць наведвальнікі з многіх геаграфічных рэгіёнаў.
- Карыстальнікі CDN таксама атрымліваюць выгаду ад магчымасці хуткага маштабавання ўверх і ўніз у адказ на скокі трафіку.
12. У чым розніца паміж шардынгам і падзелам?
Шардынг базы даных – Шардынг базы даных - гэта метад падзелу аднаго набору даных на мноства баз даных, каб яго можна было захоўваць на розных працоўных станцыях. Вялікія наборы даных можна разбіць на меншыя кавалкі і захоўваць у некалькіх вузлах даных, павялічваючы агульную ёмістасць захоўвання ў сістэме.
Размяркоўваючы даныя па многіх машынах, агульная база дадзеных можа апрацоўваць больш запытаў, чым адна сістэма.
Раздзяленне базы дадзеных - гэта працэс падзелу захаваных аб'ектаў базы дадзеных (табліц, індэксаў і відаў) на асобныя часткі. Для павышэння кіравальнасці, прадукцыйнасці і даступнасці вялікія аб'екты базы дадзеных разбіваюцца на раздзелы.
У некаторых выпадках раздзяленне можа палепшыць хуткасць доступу да разбітых даных. Раздзяленне можа паменшыць памер індэкса і павялічыць шанец знайсці найбольш неабходныя індэксы ў памяці, дзейнічаючы як вядучы слупок у індэксах.
13. Што такое кэшаванне?
Кэшаванне - гэта метад захоўвання копій файлаў у часовым сховішчы, вядомым як кэш, які паскарае доступ да даных і памяншае затрымку сайта. Толькі пэўны аб'ём дадзеных можа захоўвацца ў кэшы.
У выніку вызначэнне метадаў абнаўлення кэша, якія найбольш падыходзяць для бізнес-задач, мае вырашальнае значэнне.
14. Што такое межавыя серверы CDN?
Серверы CDN, якія кэшуюць матэрыялы, атрыманыя з вашага зыходнага сервера або кластара захоўвання, вядомыя як краявыя серверы. Кропка прысутнасці - гэта тэрмін, які часта выкарыстоўваецца для апісання памежных сервераў (POP).
Памежныя серверы фізічна размешчаны ў POP. Пры гэтым POP інфармацыя можа кэшавацца многімі краявымі серверамі.
Магчымасць прадастаўлення раздзелаў вэб-сайта з некалькіх месцаў памяншае адлегласць паміж наведвальнікам і вэб-серверам, што прыводзіць да меншай затрымкі. Гранічныя серверы CDN дасягаюць гэтай дакладнай мэты.
15. Якія існуюць розныя шаблоны ўзгодненасці для праектавання сістэмы?
Згодна з тэарэмай CAP, кожны запыт на чытанне павінен атрымліваць апошнія запісаныя даныя. Калі даступна шмат копій даных, іх сінхранізацыя так, каб кліенты пастаянна атрымлівалі свежыя даныя, становіцца складанай задачай. Ніжэй прыведзены магчымыя мадэлі паслядоўнасці:
- Слабая ўзгодненасць: пасля запісу даных запыт на чытанне можа або не можа атрымаць абноўленыя даныя. Гэты ўзровень стабільнасці ідэальна падыходзіць для прыкладанняў у рэжыме рэальнага часу, такіх як VoIP, відэачат і шматкарыстальніцкія гульні.
- Канчатковая ўзгодненасць: чытанне ў канчатковым выніку праглядае самыя свежыя даныя на працягу мілісекунд пасля іх запісу. У гэтым выпадку дадзеныя дубліруюцца асінхронна. Прыкладамі гэтага з'яўляюцца сістэмы DNS і электроннай пошты. Гэта эфектыўна працуе ў сістэмах з высокай даступнасцю.
- Моцная ўзгодненасць: пасля запісу даных будучыя чытачы будуць праглядаць самыя свежыя даныя. Дадзеныя ў гэтым выпадку капіююцца сінхронна. Гэта можна назіраць у RDBMS і файлавых сістэмах, якія падыходзяць для перадачы даных.
16. Што вы маеце на ўвазе пад аптымістычнай блакіроўкай?
Аптымістычная блакіроўка - гэта механізм, пры якім вы чытаеце запіс, адзначаеце нумар версіі (альтэрнатыўныя спосабы ўключаюць даты, пазнакі часу або кантрольныя сумы/хэшы), а затым яшчэ раз правяраеце, што версія не змянілася, перш чым запісваць яе назад.
Калі вы запісваеце запіс назад, вы выкарыстоўваеце версію для фільтрацыі абнаўлення, каб пераканацца, што яно атамарнае. (г.зн. не быў зменены паміж момантам праверкі версіі і запісам запісу на дыск) і абнавіць усё адразу.
17. Што менавіта вы маеце на ўвазе пад «выбарамі лідэра»?
У размеркаванай сістэме са шматлікімі серверамі, якія спрыяюць даступнасці прыкладання, могуць быць выпадкі, калі толькі адзін сервер адказвае за абнаўленне старонніх API, паколькі некалькі сервераў могуць выклікаць праблемы пры выкарыстанні API.
Гэты сервер вядомы як асноўны сервер, а працэдура яго выбару - выбары лідэра. Калі вядучы сервер выходзіць з ладу ў размеркаванай сістэме, серверы павінны заўважыць збой і выбраць новага лідэра. Выкарыстоўваючы тэхніку кансенсусу, гэты падыход лепш за ўсё падыходзіць для прыкладанняў высокай даступнасці і моцнай узгодненасці.
18. Які ваш падыход да распрацоўкі службы скарачэння URL-адрасоў, падобнай на TinyURL?
TinyURL ператварае доўгі URL у адзіны, унікальны кароткі URL. Гэтыя тэхналогіі могуць таксама прымаць кароткі URL і вяртаць поўны URL.
Якія некаторыя з найважнейшых якасцей?
- Зрабіце URL-адрас карацейшым за арыгінал.
- Захавайце больш доўгі URL і заменіце яго карацейшым.
- Дазволіць перанакіраванне ў кароткіх URL.
- Падтрымліваюцца кароткія URL-адрасы з уласнымі назвамі.
- Апрацоўваць некалькі запытаў адначасова.
Якія праблемы найбольш распаўсюджаныя?
- Як вы адсочваеце захоўванне базы дадзеных?
- Што адбудзецца, калі загрузка карыстальнікаў перавысіць чаканні?
- Што рабіць, калі два чалавекі выкарыстоўваюць адзін і той жа карыстацкі URL?
Разгледзім наступныя прапановы:
- Хэшаванне - гэта паняцце, якое можна выкарыстоўваць для злучэння старых і новых URL-адрасоў.
- REST API можа выкарыстоўвацца для апрацоўкі інтэрфейснай сувязі і балансавання вялікай нагрузкі.
- Шматструменнасць - гэта паняцце, якое дазваляе апрацоўваць некалькі запытаў адначасова.
- Арыгінальныя URL-адрасы захоўваюцца ў базах дадзеных NoSQL.
19. Які ваш падыход да распрацоўкі твітэра?
Дадзеныя патрабаванні:
- Адпраўка твітаў
- Сачыце за іншымі карыстальнікамі
- Стужка твітаў/стужка навін
- Сістэма маштабуецца
- Хутка загружаецца
- Сістэма надзейная
Вы можаце пачаць прыдумляць свой дызайн Twitter API, калі ўсталюеце крытэрыі. Вось як гэта будзе выглядаць:
Для пачатку мы накідаем асноўныя канчатковыя кропкі API. Вось некалькі прыкладаў:
- адправіць твіт (паведамленне)
- followUser(ID карыстальніка)
- unfollowUser(ID карыстальніка)
- getFeed(старонка)
Архітэктура, якая дазволіць гэтыя характарыстыкі, можа быць накідана. Мы можам пачаць з карыстальніка, які адпраўляе запыт на сервер. Мы можам усталяваць дадатковыя серверы API за балансірам нагрузкі, каб дапамагчы маршрутызаваць большы ўзровень трафіку для задавальнення патрэбнасці ў маштабаванасці. Зараз нам трэба будзе дадаць базу дадзеных для захоўвання нашых твітаў.
Важна памятаць, што API, які мы прапануем, павінен быць маштабаваным. Каб зрабіць гэтую паслугу маштабаванай, мы можам мець адзін з нашых API-сервераў для чытання з асобнага кэша для нашай стужкі навін. Робячы гэта, мы таксама павінны выкарыстоўваць пастаўшчыка стужкі, каб падтрымліваць наш кэш стужкі ў актуальным стане.
20. Стварыце сістэму стужкі навін для Facebook
Стужка навін у Facebook дазваляе карыстальнікам бачыць, што адбываецца ў колах іх сяброў, на любімых старонках і ў арганізацыях, за якімі яны сочаць.
Якія асноўныя характарыстыкі?
- Стварыце стужку навін на аснове паведамленняў іншых аб'ектаў сістэмы, за якімі сочыць карыстальнік.
- Тэкст, выявы, аўдыё і відэа можна выкарыстоўваць у паведамленнях у стужцы навін.
- У рэжыме рэальнага часу дадавайце свежы кантэнт у стужку навін карыстальніка.
Якія найбольш распаўсюджаныя праблемы?
- Што рабіць, калі новая публікацыя доўга не з'яўляецца ў стужцы навін?
- Ці можа алгарытм кіраваць усплёскам актыўнасці карыстальнікаў?
- Якія пасты павінны паказвацца ў стужцы навін першымі?
Разгледзім наступныя прапановы:
- Вывучыце механізм разветвления для распаўсюджвання паведамленняў сярод падпісчыкаў.
- Вывучыце, як шардынг можна выкарыстоўваць для эфектыўнай апрацоўкі вялікай нагрузкі карыстальнікаў.
- Дадзеныя стужкі карыстальніка не павінны дублявацца на шматлікіх серверах. Замест гэтага шардынг можна рабіць на аснове ідэнтыфікатараў карыстальнікаў.
21. Што такое ўласцівасць BASE сістэмы?
Функцыі BASE паўсюдна прысутнічаюць у базах дадзеных NoSQL, якія нядаўна з'явіліся. Згодна з тэарэмай CAP, сістэма BASE не забяспечвае ўзгодненасці. Гэта прыдуманая абрэвіятура, якая адпавядае наступнай уласцівасці сістэмы тэарэмы CAP:
- Тэрмін «у асноўным даступны» азначае, што сістэма будзе даступная ўвесь час.
- Мяккі стан азначае, што стан сістэмы можа змяняцца з цягам часу, нават калі не падаецца ўвод. Гэта звязана ў асноўным з канчатковай паслядоўнасцю мадэлі.
- Улічваючы, што сістэма не атрымлівае ўваходных дадзеных на працягу гэтага перыяду, канчатковая ўзгодненасць азначае, што сістэма стане ўзгодненай з часам.
22. Што такое балансіроўка нагрузкі з дапамогай тэхнікі прыналежнасці IP-адрасоў?
Яшчэ адзін вядомы метад балансіроўкі нагрузкі - прыналежнасць IP-адрасоў. У гэтым метадзе IP-адрас кліента злучаны з вузлом сервера. Адзін вузел сервера апрацоўвае ўсе запыты з IP-адраса кліента.
Гэты метад просты ў рэалізацыі, паколькі IP-адрас заўсёды даступны ў загалоўку HTTP-запыту і ніякіх дадатковых налад не патрабуецца. Калі вашы кліенты могуць мець адключаныя файлы cookie, гэтая форма балансавання нагрузкі можа быць выгаднай.
23. Што такое алгарытмы замены кэша (або палітыкі высялення)?
Алгарытмы кэш-памяці (таксама вядомыя як алгарытмы замены кэш-памяці, палітыкі замены кэш-памяці або палітыкі выключэння кэш-памяці) - гэта інструкцыі па аптымізацыі або алгарытмы, якія камп'ютарная праграма або структура, якая падтрымліваецца апаратным забеспячэннем, могуць выкарыстоўваць для кіравання кэшам даных, якія захоўваюцца на камп'ютары.
Кэшаванне павышае хуткасць, захоўваючы нядаўна выкарыстоўваныя або часта даступныя дадзеныя ў рэгіёнах памяці, доступ да якіх больш хуткі або менш дарагі, чым традыцыйнае сховішча памяці. Калі кэш запоўнены, алгарытм павінен вырашыць, якія элементы выдаліць, каб вызваліць месца для новых.
24. Што менавіта вы маеце на ўвазе пад размеркаванай транзакцыяй?
Размеркаваная транзакцыя - гэта любая акалічнасць, пры якой адна падзея выклікае змяненне дзвюх або больш розных крыніц даных, якія не могуць быць зафіксаваны атамарна.
У свеце мікрасэрвісаў усё становіцца нашмат складаней, бо кожны сэрвіс - гэта адзінка працы, і часцей за ўсё шматлікія сэрвісы павінны супрацоўнічаць, каб зрабіць бізнес паспяховым.
25. Што такое галаданне?
Калі паток не можа атрымаць рэгулярны доступ да агульных рэсурсаў, кажуць, што ён галадае. Гэта адбываецца, калі «прагныя» патокі або патокі з больш высокім «прыярытэтам» робяць агульныя рэсурсы недаступнымі на працяглы перыяд часу.
Разгледзім аб'ект, які забяспечвае сінхранізаваны метад, які часта вяртаецца са спазненнем. Калі адзін паток паўторна выклікае гэты метад, іншыя патокі, якія патрабуюць частага сінхранізаванага доступу да таго ж аб'екта, часта будуць блакіравацца.
заключэнне
Мазгавы штурм - гэта ўсё, што прадугледжвае сумоўе па распрацоўцы сістэмы. У гэтай публікацыі мы разгледзелі найбольш распаўсюджаныя пытанні інтэрв'ю па дызайне сістэмы.
Поўнае разуменне метаду, які вы выкарыстоўваеце пры стварэнні пэўнай сістэмы, вельмі важна для праходжання сумоўя па дызайне сістэмы.
Пакінуць каментар