Мазмұны[Жасыру][Көрсету]
- 1. Жүйені жобалау дегенді қалай түсінесіз?
- 2. Жүйе конструкторының ең маңызды сипаттамалары қандай?
- 3. CAP теоремасы нақты қандай?
- 4. Жүктемені теңестіру дегенді қалай түсінесіз?
- 5. Асинхронды бағдарламалау мен параллельді бағдарламалаудың айырмашылығы неде?
- 6. Көлденең және тік масштабтаудың айырмашылығы неде?
- 7. Кідіріс, өткізу қабілеті және жүйенің қолжетімділігі дегенді нақты қалай түсінесіз?
- 8. ҚШЫЛДЫҚ қасиетке не жатады?
- 9. Шардинг дегеніміз не?
- 10. CDN дегеніміз не?
- 11. CDN не үшін қолданылады?
- 12. Бөлу мен бөлудің айырмашылығы неде?
- 13. Кэштеу дегеніміз не?
- 14. CDN шеткі серверлері дегеніміз не?
- 15. Жүйені жобалауға арналған Консистенция үлгілері қандай?
- 16. Оптимистік құлыптау дегенді қалай түсінесіз?
- 17. «Көшбасшыны сайлау» дегенді нақты қалай түсінесіз?
- 18. TinyURL тәрізді URL қысқарту қызметін жобалауға сіздің көзқарасыңыз қандай?
- 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. ҚШЫЛДЫҚ қасиетке не жатады?
- Атомдық: Бұл дерекқордағы өзгерістердің барлығы немесе ешқайсысы жоқ екеніне кепілдік береді.
- Жүйелілік: дерекқордағы деректер мәндері сәйкес келеді.
- Оқшаулау: бұл екі транзакцияның бөлінуін білдіреді.
- Тұрақтылық: сервер сәтсіз болса да деректер сақталады.
9. Шардинг дегеніміз не?
Sharding - үлкен логикалық деректер жиынтығын көптеген дерекқорларға бөлу әдісі. Бұл сонымен қатар көлденең деректерді бөлуге қатысты, себебі деректер бірнеше компьютерде сақталады. Нәтижесінде ортақ дерекқор бір үлкен компьютерге қарағанда көбірек сұрауларды өңдей алады.
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. TinyURL тәрізді URL қысқарту қызметін жобалауға сіздің көзқарасыңыз қандай?
TinyURL ұзын URL мекенжайын жалғыз, бірегей қысқа URL мекенжайына түрлендіреді. Бұл технологиялар қысқа URL мекенжайын қабылдап, толық URL мекенжайын қайтара алады.
Қандай маңызды қасиеттер бар?
- Түпнұсқадан қысқа URL мекенжайын жасаңыз.
- Ұзын URL мекенжайын сақтаңыз және оны қысқасымен ауыстырыңыз.
- Қысқа URL мекенжайларында қайта бағыттауға рұқсат беріңіз.
- Теңшелетін атаулары бар қысқа URL мекенжайларына қолдау көрсетіледі.
- Бір уақытта бірнеше сұрауларды өңдеңіз.
Ең көп кездесетін мәселелер қандай?
- Мәліметтер базасын сақтауды қалай қадағалайсыз?
- Пайдаланушы жүктемесі күткеннен асып кетсе не болады?
- Екі адам бірдей пайдаланушы URL мекенжайын пайдаланса ше?
Келесі ұсыныстарды қарастырыңыз:
- Хэшинг - ескі және жаңа URL мекенжайларын қосу үшін қолданылатын ұғым.
- REST API алдыңғы қатардағы байланысты өңдеу және ауыр жүктемені теңестіру үшін пайдалануға болады.
- Multithreading - бұл бірден бірнеше сұрауларды өңдеуге мүмкіндік беретін түсінік.
- Түпнұсқа URL мекенжайлары NoSQL дерекқорларында сақталады.
19. Твиттерді жобалауға сіздің көзқарасыңыз қандай?
Берілген талаптар:
- Твиттер жіберу
- Басқа пайдаланушыларға жазылу
- Tweet арнасы/жаңалықтар лентасы
- Жүйе масштабталады
- Тез жүктейді
- Жүйе сенімді
Шарттарды орнатқаннан кейін Twitter API дизайнын ойластыруға болады. Бұл келесідей көрінеді:
Бастау үшін API негізгі соңғы нүктелерінің сызбасын жасаймыз. Міне, бірнеше мысал:
- sendTweet(хабарлама)
- followUser(userID)
- қолданудан бас тарту(пайдаланушы идентификаторы)
- getFeed(бет)
Осы сипаттамаларға мүмкіндік беретін архитектураны содан кейін сызуға болады. Біз сервер сұрауын жіберетін пайдаланушыдан бастай аламыз. Біз кеңейту қажеттілігін қанағаттандыру үшін үлкен трафик деңгейлерін бағыттауға көмектесу үшін жүктеме теңестіргішінің артына қосымша API серверлерін орната аламыз. Бізге қазір твиттерімізді сақтау үшін дерекқорды қосу керек.
Біз ұсынатын API кеңейтілетін болуы керек екенін есте ұстаған жөн. Бұл қызметті ауқымды ету үшін API серверлерінің бірін жаңалықтар арнасының бөлек кэшінен оқуға болады. Бұл ретте арна кэшін жаңартып отыру үшін арна провайдерін де пайдалануымыз керек.
20. Facebook үшін жаңалықтар арнасын құру
Facebook-тегі жаңалықтар лентасы пайдаланушыларға достарының орталарында, сүйікті беттерінде және олар бақылаған ұйымдарда не болып жатқанын көруге мүмкіндік береді.
Маңызды сипаттар қандай?
- Пайдаланушы бақылайтын басқа жүйе нысандарының жазбалары негізінде жаңалықтар арнасын жасаңыз.
- Мәтінді, суреттерді, дыбысты және бейнені Newsfeed хабарламаларында пайдалануға болады.
- Нақты уақытта пайдаланушының жаңалықтар арнасына жаңа мазмұн қосыңыз.
Ең жиі кездесетін мәселелер қандай?
- Жаңа жазбаның жаңалықтар арнасында көрінуіне көп уақыт кетсе ше?
- Алгоритм пайдаланушы белсенділігінің өсуін басқара ала ма?
- Жаңалықтар лентасында бірінші кезекте қандай жазбалар көрсетілуі керек?
Келесі ұсыныстарды қарастырыңыз:
- Жазбаларды жазылушыларға таратуға арналған фанут механизмін қарастырыңыз.
- Жоғары пайдаланушы жүктемелерін тиімді өңдеу үшін бөлшектеуді қалай пайдалануға болатынын қарастырыңыз.
- Пайдаланушының арна деректері көптеген серверлерде қайталанбауы керек. Оның орнына пайдаланушы идентификаторлары негізінде бөлуге болады.
21. Жүйенің BASE қасиеті дегеніміз не?
BASE мүмкіндіктері жақында пайда болған NoSQL дерекқорларында кең таралған. BASE жүйесі CAP теоремасы бойынша жүйелілікті қамтамасыз етпейді. Бұл CAP теоремасының жүйенің келесі қасиетіне сәйкес келетін құрастырылған аббревиатура:
- «Негізінен қолжетімді» термині жүйенің барлық уақытта қол жетімді болатынын білдіреді.
- Жұмсақ күй жүйенің күйі ешқандай кіріс берілмесе де, уақыт өте өзгеретінін білдіреді. Бұл негізінен модельдің түпкілікті сәйкестігіне байланысты.
- Жүйе осы кезеңде кірісті қабылдамайтынын ескере отырып, түпкілікті жүйелілік жүйенің уақыт өте келе дәйекті болатынын білдіреді.
22. IP мекенжайының жақындығы техникасымен жүктемені теңестіру дегеніміз не?
Жүктемені теңестірудің тағы бір көрнекті әдісі - IP мекенжайының жақындығы. Клиенттің IP мекенжайы осы әдісте сервер түйінімен қосылады. Бір сервер түйіні клиенттің IP мекенжайынан келетін барлық сұрауларды өңдейді.
Бұл әдісті орындау оңай, өйткені IP мекенжайы HTTP сұрауының тақырыбында әрқашан қолжетімді және қосымша параметрлер қажет емес. Егер сіздің клиенттеріңізде cookie файлдары өшірілген болса, жүктемені теңестірудің бұл түрі тиімді болуы мүмкін.
23. Кэшті ауыстыру (немесе шығару саясаты) алгоритмдері дегеніміз не?
Кэш алгоритмдері (кэшті ауыстыру алгоритмдері, кэшті ауыстыру саясаты немесе кэшті шығару саясаты ретінде де белгілі) компьютерде сақталған деректердің кэшін басқару үшін компьютер бағдарламасы немесе аппараттық құрал қолдайтын құрылым пайдалана алатын оңтайландыру нұсқаулары немесе алгоритмдер болып табылады.
Кэштеу соңғы пайдаланылған немесе жиі қол жеткізілетін деректерді дәстүрлі жад жадына қарағанда қол жеткізу жылдамырақ немесе арзанырақ жад аймақтарында сақтау арқылы жылдамдықты арттырады. Кэш толы болғанда, алгоритм жаңаларына орын жасау үшін қай элементтерді жою керектігін шешуі керек.
24. Бөлінген транзакция дегенді нақты қалай түсінесіз?
Бөлінген транзакция – бір оқиға атомдық түрде жасалмайтын екі немесе одан да көп әртүрлі деректер көздерін өзгертуге әкелетін кез келген жағдай.
Микросервис әлемінде бұл әлдеқайда күрделене түседі, өйткені әрбір қызмет жұмыс бірлігі болып табылады және көбінесе бизнесті табысты ету үшін көптеген қызметтер бірлесіп жұмыс істеуі керек.
25. Нақты аштық дегеніміз не?
Жіп ортақ ресурстарға тұрақты қол жеткізе алмаса, ол аштық деп аталады. Бұл «ашкөз» ағындар немесе жоғарырақ «басымдығы» бар ағындар ортақ ресурстарды ұзақ уақыт бойы қолжетімсіз еткенде орын алады.
Жиі кеш қайтарылатын синхрондалған әдісті қамтамасыз ететін нысанды қарастырыңыз. Егер бір ағын осы әдісті қайта-қайта шақырса, сол нысанға жиі синхрондалған қатынасты қажет ететін басқа ағындар жиі блокталады.
қорытынды
Миға шабуыл сессиясы - бұл жүйені жобалау сұхбатының барлығы. Біз осы постта Жүйе дизайны бойынша ең көп кездесетін сұхбат сұрақтарын қарастырдық.
Белгілі бір жүйені құру кезінде қолданатын әдісті жан-жақты түсіну Жүйе дизайны бойынша сұхбаттан өту үшін өте маңызды..
пікір қалдыру