Өнүккөн долбоор: реалдуу убакыт микросервиси
Жыйынтыктоочу долбоор: чыныгы трафикти көтөрө турган жана бир процесстен ашып масштабдалган тирүү лидерлер тактасынын бир бүтүн сервисин долбоорлоп куруу.
EventEmitter, асинхрондук киргизүү-чыгаруу, чөйрө аркылуу конфигурация, SQL жана тестирлөө -- эми бир жайгаштырыла турган бирдикке биригет. Биз реалдуу убакыт лидерлер тактасынын микросервисин курабыз: оюнчулар упайларын HTTP аркылуу жөнөтөт, сервис аларды заматта иреттейт, ал эми ар бир туташкан кардар тактанын чокусунун жаңырышын тирүүлөй WebSocket аркылуу көрөт -- сервис жүк тең салмактагычтын артында бир нече контейнер катары иштеп жатса да.
- реалдуу убакыт сервисинин архитектурасын тартып, анын ар бир бөлүгүн негиздей аласыз;
- Redis иреттелген көптүгүн SQLдеги ишенимдүү чындык булагынын алдында тез иреттөө кэши катары колдоно аласыз;
- WebSocket шлюзу аркылуу браузерлерге тирүү жаңылоолорду жөнөтө аласыз;
- ошол жаңылоолорду Redis Pub/Sub аркылуу бир нече нускага тарата аласыз;
- компромисстер жөнүндө чынчыл ой жүгүртө аласыз -- туруксуздук, эң көп бир жолу жеткирүү, жаңылоолорду бириктирүү;
- бүт системаны Docker Compose менен таңгактап, аны туура токтото аласыз.
1. Биз эмне курабыз
Онлайн оюн үчүн лидерлер тактасынын сервиси. Анын үч милдети бар, ал эми кызыктуу инженерия -- үчөөнү тең бир убакта, туура аткаруу:
- Упайды кабыл алуу: оюнчу жана мааниси менен
POST /scores. Бул ишенимдүү болушу керек -- кыйроо жөнөтүлгөн упайды жоготпошу керек. - Тез иреттөө: оюнчулардын санына карабай учурдагы алдыңкы ондукту туруктуу, миллисекунддан аз убакытта кайтаруу.
- Тирүү таратуу: тактаны караган ар бир браузер жаңы рейтингди секунддун үлүшүндө, сурамжылоосуз (polling) көрөт.
"Микросервис" деген сөз жөн гана бул бир так жоопкерчилиги (лидерлер тактасы) бар бир сервис экенин билдирет, өз маалымат сактагычтары менен сүйлөшөт жана өзүнчө жайгаштырылат. Ал ошондой эле аутентификация сервери же оюнчуларды тандоо сервиси болууга аракет кылбайт -- булар ал чакыра ала турган өзүнчө бирдиктер.
Эмне үчүн жөн гана SQL суроо-талап эмес? Сиз "алдыңкы 10ду" SELECT ... ORDER BY score DESC LIMIT 10 менен жооптой алмаксыз. Бул төмөн трафикте иштейт. Бирок секундасына миңдеген жазуу учурунда ар бир окууда өсүп жаткан тактаны иреттөө жана жаңы жыйынтыктарды миңдеген тирүү сокетке жөнөтүү -- дал ушул жерде жөнөкөй бир процесстик схема кулайт. Теманын калган бөлүгү -- профессионалдар мунун кантип алдын алары.