Бүтээгдэхүүн гаргахад тохиромжтой серверийн стекийг сонгох нь маш их жинтэй шийдвэр юм. Энэ сонголт нь зөвхөн анхны байршуулалтад төдийгүй таны програмын урт хугацааны дасан зохицох чадвар, үр ашигтай байдалд нөлөөлдөг. Хэрэв та ахлах хөгжүүлэгч эсвэл багаа удирдаж байгаа бол төслийнхөө өвөрмөц хэрэгцээнд тохирсон төгс тохирохыг олохын тулд хэл, хүрээний далайг шүүж, эдгээр архитектурын шийдвэрийн хариуцлагыг хүлээх хэрэгтэй. Энд байгаа таны даалгавар бол таны төсөл хөгжиж, өргөжин тэлэх тусам чухал сонголт хийх явдал юм.
Би Григорий Новиков, програм хангамжийн архитектурыг баримал хийж, хөгжүүлж байсан олон жилийн туршлагатай ахлах Backend хөгжүүлэгч. Би карьерынхаа туршид серверийн стек сонгох талаар олон чухал шийдвэрүүдтэй тулгарсан. Шийдвэр бүр нь өсөн нэмэгдэж буй төслийн шаардлагуудтай технологийг хэрхэн уялдуулах тухай миний ойлголтыг давхар нэмж өгсөн. Энэ нийтлэлд би таны төслийн одоогийн хэрэгцээнд нийцэх, цаашдын өсөлтийг нь дэмжих серверийн стекийг сонгоход тань туслах эдгээр шаргуу олсон ойлголтуудыг тантай хуваалцах болно. Таны төсөл өсөлт, уян хатан байдал, инновацийг бий болгоход бэлэн байгаа эсэхийг баталгаажуулж, амжилтанд хүрэх замыг нээж өгдөг технологийн шийдвэр гаргах нарийн ширийн зүйлийг надтай хамт судлахыг би таныг урьж байна.
Хэрэв та ахлах хөгжүүлэгч эсвэл багаа удирдаж байгаа бол төслийнхөө өвөрмөц хэрэгцээнд тохирсон төгс тохирохыг олохын тулд хэл, хүрээний далайг шүүж, эдгээр архитектурын шийдвэрийн хариуцлагыг хүлээх хэрэгтэй.
Хэдийгээр кодтой холбоогүй ч энэ зүйл маш чухал тул хамгийн түрүүнд хэлэлцэх ёстой. Бат бөх баримтжуулалт нь үр ашигтай хөгжүүлэлтийн тулгын чулуу юм, ялангуяа үйлчлүүлэгчийн хөгжүүлэлт болон програмын туршилтын тухайд. Баримт бичгийг автоматаар үүсгэх хэрэгслүүд нь энэ үйл явцад хувьсгал хийж, баримтжуулалт нь API-ийн хамгийн сүүлийн үеийн өөрчлөлттэй хөл нийлүүлэн алхаж, хөгжүүлэлтийн ажлын урсгалыг хялбарчилж, төслийн баримт бичгийг шинэчлэн байлгахад зарцуулдаг гар хүчин чармайлтыг багасгасан.
Хөгжүүлэгчийн ашиглах боломжтой хэрэгслүүдийн дотроос би Swagger-ийг олон талт байдал, өргөн хүрээнд нэвтрүүлэх, олон нийтийн хүчирхэг дэмжлэгийг санал болгож байна. Өөр нэг алдартай сонголт бол Redoc бөгөөд API баримт бичигт зориулсан сэтгэл татам, өөрчлөх боломжтой интерфэйсийг санал болгодог. Илүү өргөн хүрээтэй тохируулга шаарддаг төслүүдийн хувьд Apiary гэх мэт хэрэгслүүд нь баримт бичгийн чадавхитай зэрэгцэн уян хатан байдлыг хангадаг ч илүү анхдагч тохиргоог шаарддаг.
Аль ч хэрэгслийг сонгохоос үл хамааран зорилго нь тухайн хэрэгсэл өөрөө цаг хугацаа алдахгүйгээр үр дүнтэй байхын тулд баримт бичгийн үйл явцыг оновчтой болгох явдал юм. Төслийн өвөрмөц шаардлагад дасан зохицох уян хатан байдлыг санал болгохын зэрэгцээ гар аргаар баримтжуулах хүчин чармайлтыг багасгах шийдлийг сонгоорой.
Алдааг үр дүнтэй хянах нь таны програмын эрүүл мэндийг хадгалахад чухал ач холбогдолтой. Алдаа хянах үр дүнтэй интеграцчлалын хувьд би Jira болон Bugzilla зэрэг хэрэгслүүдийг ашигладаг бөгөөд хоёулаа баялаг функц, уян хатан чанараараа сайрхдаг. Жира нь ялангуяа олон хөгжүүлэлтийн орчинтой хүчирхэг интеграцийн чадварыг санал болгодог; Нөгөө талаас Bugzilla нь энгийн бөгөөд үр дүнтэй гэдгээрээ алдартай, ялангуяа алдааг шууд хянах нь нэн тэргүүнд тавигддаг нээлттэй эхийн төслүүдэд.
Энд танд нэг ойлголт байна: алдаа илрүүлэгчийг шуурхай мессенжер болон хувилбарын хяналтын системтэй нэгтгэх нь танай багийн хамтын ажиллагаа, үр ашгийг нэмэгдүүлэх болно. Жишээлбэл, Jira+Bitbucket комбинаци нь ажлын урсгалыг оновчтой болгож, хувилбарын хяналтын орчинд асуудалгүй хянах боломжийг олгодог. Энэхүү хослол нь кодын шинэчлэлт болон асуудлын шийдлүүд хоорондоо нягт уялдаатай, илүү хурдан давталт хийх, кодын чанарыг сайжруулах боломжийг олгодог ил тод, уян хатан хөгжүүлэх үйл явцыг хөнгөвчилдөг.
Өөр нэг хүчирхэг интеграци бол иж бүрэн хамтын ажиллагааны платформыг санал болгодог Mattermost+Focalboard юм. Энэ нь Mattermost-ийн шууд харилцааны ашиг тусыг Focalboard-ийн төсөл, даалгаврын удирдлагын чадавхитай хослуулж, багуудыг алдаа хянах талаар бодит цагийн шинэчлэлтүүдээр чадавхижуулж, нэгдсэн интерфэйсийн хүрээнд даалгавар, ажлын урсгалыг удирдах уян хатан байдлыг бий болгодог. Ийм интеграцчилал нь алдаа засах үйл явцыг оновчтой болгоод зогсохгүй илүү уялдаатай, уян хатан хөгжлийн орчныг бүрдүүлж, бүтээмж, төслийн үр дүнг дээшлүүлдэг.
Таны бүтээгдэхүүн барьж эхлэхэд та масштабыг нэмэгдүүлэх сорилттой тулгарах болно. Би зүгээр л хэрэглэгчдийн тоо нэмэгдэж байгаа гэсэн үг биш. Масштабтай болгох нь шинэ боломжуудыг тохируулах, өсөн нэмэгдэж буй мэдээллийн санг удирдах, кодын сан болон мэдээллийн баазын гүйцэтгэлийн түвшинг оновчтой байлгахад оршино. Энэ үед таны серверийн стек дээр сонгосон архитектур үнэхээр хэрэгжиж эхэлнэ.
Жишээлбэл, таны төслийг эхлүүлэхэд цул архитектурыг сонгох нь тэнцвэртэй арга мэт санагдаж магадгүй юм. Гэхдээ таны бүтээгдэхүүн өсөж, өөрчлөгдөхийн хэрээр хаана дутагдаж байгааг харж эхэлнэ. Микро үйлчилгээний архитектурт шилжих эсвэл өргөтгөх боломжтой үүлэн үйлчилгээг нэвтрүүлэх нь таны хэрэглээний янз бүрийн талыг илүү нарийн хянах боломжийг танд олгоно.
Өргөтгөх боломжтой серверийн стек шийдлүүдийн хувьд би Kubernetes, Docker зэрэг технологид тулгуурладаг. Эдгээр хэрэгслүүд нь үйлчилгээг бие даан өргөжүүлэх, байршуулалтыг үр дүнтэй удирдах, орчин тойрондоо нийцтэй байдлыг хангах уян хатан байдлыг танд олгоно. Цаашилбал, Amazon Web Services, Google Cloud, Microsoft Azure зэрэг үүлэн үйлчилгээ үзүүлэгчид таны масштабын аялалыг үнэхээр хялбаршуулж чадах гайхалтай удирдлагатай үйлчилгээг санал болгодог.
Өргөтгөх боломжтой архитектурыг сонгох нь өргөтгөх чадварын давуу талуудыг хуваарилагдсан системийг удирдах нарийн төвөгтэй байдлын хооронд тэнцвэржүүлнэ гэсэн үг юм. Эцсийн эцэст таны зорилго бол таны одоогийн хэрэгцээнд нийцсэн, ирээдүйн өсөлтийг зохицуулах уян хатан серверийн стекийг сонгох явдал юм.
Олон нийтийн дэмжлэг, нөөцийн хүртээмж, тэр ч байтугай аюулгүй байдлын функцууд гэх мэт өөр өөр давуу талуудтай програмчлалын хэл, хүрээний хувьд хомсдол байхгүй. Энэхүү олон талт байдал нь хөгжлийн нэн даруй тулгарч буй сорилтуудыг шийдвэрлэх төдийгүй аюулгүй байдал, өргөтгөх чадвар зэрэг төслийн урт хугацааны зорилгод нийцсэн шийдлүүдийг өргөн сонголттой болгох боломжийг олгодог.
Python, JavaScript зэрэг томоохон нийгэмлэгүүд болон арвин нөөцөөр дэмжигдсэн технологиуд болон тэдгээрийн Django эсвэл React зэрэг эдгээр хэл дээрх тус тусын хүрээнүүд нь баялаг мэдлэг, ашиглахад бэлэн кодын жишээг өгдөг. Энэ баялаг нь таны өмнө хэн нэгний шийдэж чадаагүй асуудалтай тулгарах магадлал багатай тул алдааг олж засварлахад зарцуулах цагийг эрс багасгадаг. Үүний эсрэгээр, шинэ эсвэл шинэ технологи нь ширээн дээр өвөрмөц давуу талыг авчирч болох ч хурдан шийдлийг олоход таныг илүү хэцүү үеийг даван туулах болно.
Өөр нэг чухал мөч бол аюулгүй байдал, ашиглах чадварыг тэнцвэржүүлэх явдал юм. Эх кодын хамгаалалт нь гол асуудал болж байгаа төслүүдийн хувьд хялбар ойлгомжгүй, аюулгүй савлагаатай хэл, технологийг ашиглах талаар бодож үзээрэй. Жишээлбэл, Java болон .NET нь кодыг бүдгэрүүлэх хэрэгсэл, экосистемийг бий болгосон. Docker гэх мэт контейнержуулалтын технологиуд энд бас туслах болно. Аппликешн болон түүний орчныг саванд хийж өгснөөр үйлчлүүлэгч таны код руу шууд хандахгүйгээр програмыг ажиллуулахад шаардлагатай бүх зүйлийг хүлээн авах болно. Энэ арга нь зөвхөн кодыг хамгаалахаас гадна байршуулах үйл явцыг хялбаршуулдаг.
Технологийн стекийг сонгохдоо зардлыг харгалзан үзэх нь чухал юм. Энэ нь зөвхөн анхны тохиргооны өртөгтэй холбоотой бөгөөд та системээ засварлах, өргөтгөхөд ямар зардал гарах талаар удаан хугацаанд бодох хэрэгтэй.
Нээлттэй эхийн технологиуд нь лицензийн төлбөрийг урьдчилж тэглэх сайхан давуу талыг өгдөг. Гарааны бизнес эсвэл бага төсөвтэй аливаа төслийн хувьд энэ нь томоохон урамшуулал байж болно. Нэмж дурдахад чадварлаг хөгжүүлэгчдийн асар их нөөц нь хөдөлмөрийн зардлыг илүү удирдахад тань туслах болно.
Нөгөөтэйгүүр, блокчэйн эсвэл дэвшилтэт мэдээллийн аналитик платформ гэх мэт илүү нарийн төвөгтэй, тусгай технологиуд нь илүү өндөр анхны хөрөнгө оруулалт шаарддаг. Гүйцэтгэл, аюулгүй байдлын хувьд мэдэгдэхүйц давуу талуудыг санал болгодог ч та өмчлөлийн нийт зардлыг төлөвлөсөн үр өгөөжтэй харьцуулах хэрэгтэй.
Цаашилбал, үүлэн үйлчилгээ нь биет дэд бүтцийн хэрэгцээг багасгахын зэрэгцээ өөрийн гэсэн өртөгтэй байдаг. Дээр дурдсан AWS, Google Cloud, Azure нь таны хэрэглээнд тохируулан өөрчлөх боломжтой үнийн янз бүрийн загваруудыг санал болгодог; Гэсэн хэдий ч болгоомжтой менежментгүйгээр эдгээр зардал нь таны төсөл өсөх тусам эргэлдэж болно.
Кодын үр ашигтай хүргэлтийг хангах нь голчлон Тасралтгүй интеграци/Тасралтгүй байршуулалт (CI/CD) дамжуулах шугамаар дамжуулан байршуулах үйл явцад анхаарлаа хандуулдаг. Энэ арга нь кодыг янз бүрийн орчинд автоматжуулах, хөгжүүлэлт, үйлдвэрлэлийн ажлын урсгалыг оновчтой болгохын ач холбогдлыг онцолж байна.
GitLab CI болон CircleCI зэрэг хэрэгслүүд нь туршилт, байршуулах үйл явцыг автоматжуулах найдвартай шийдлүүдийг санал болгодог. Нэмж дурдахад, Ansible, Terraform зэрэг скрипт бичих хэрэгслийг ашиглах нь энэхүү автоматжуулалтыг сайжруулж, кодоор дамжуулан дэд бүтцийг хангах, удирдах боломжийг олгодог.
Эдгээр технологиуд нь кодыг хөгжүүлэлтээс үйлдвэрлэл рүү нарийвчлалтай, найдвартай шилжүүлэхэд саадгүй дамжуулах шугамыг бий болгоход тусална. Эдгээр хэрэгслийг ажлын урсгалдаа нэгтгэснээр та хөгжлийн мөчлөгийг хурдасгах төдийгүй орчин тойрон дахь тогтвортой байдал, тогтвортой байдлыг хангах тогтолцоог бий болгодог.
Хөгжлийн орчныг бүрдүүлэх, удирдах нь аливаа төслийн амьдралын мөчлөгийн үндэс суурь боловч нарийн төвөгтэй тал юм. Өргөтгөх боломжтой, засвар үйлчилгээ хийх боломжтой орчинг зохион бүтээх нь ялангуяа DevOps-ийн тусгай мэргэжилтэнгүй багуудын хувьд хэцүү мэт санагдаж магадгүй юм.
Олон багуудын хувьд байгаль орчны менежментийн хамгийн сайн хандлагын талаарх асуултын хариулт нь үүлэнд суурилсан үйлчилгээ, контейнержуулалтыг ашиглахад оршдог. Дахин хэлэхэд AWS, Google Cloud болон Azure нь таны төслийн хэмжээ, нарийн төвөгтэй байдалд тохируулан өөрчилж болох олон төрлийн үйлчилгээг санал болгодог. Эдгээр платформууд нь дэд бүтцийн өргөн хүрээний менежмент шаардлагагүйгээр уян хатан, өргөтгөх боломжтой орчинг бий болгоход шаардлагатай хэрэгслүүдээр хангадаг. Цаашилбал, Docker, Kubernetes зэрэг технологийг нэвтрүүлснээр хөгжүүлэлт, туршилт, үйлдвэрлэлийн янз бүрийн үе шатуудад байршуулалтыг тогтвортой, найдвартай болгодог.
Үр дүнтэй, тохь тухтай орчинг бүрдүүлэх нь зөвхөн серверийн тохиргооны тухай биш харин хөгжүүлэгчдэд зориулсан дотоод орчны тохиргооны тухай юм. Энэ тал нь DevOps-ийн хувьд маш чухал, учир нь тэд ихэвчлэн орон нутагт төсөл эхлүүлэх үйл явцыг хялбарчлахын тулд скриптүүдийг боловсруулдаг. Гэсэн хэдий ч энэ даалгавар үргэлж хялбар байдаггүй. Жишээлбэл, .NET дээр локал орчныг бэлтгэх нь нэлээд төвөгтэй байж болох бөгөөд энэ нь сервер болон дотоод тохиргоог хялбаршуулах технологи, хэрэгслийг сонгох хэрэгцээг онцолж байна. Хөгжүүлэгчдийг орон нутгийн хөгжлийн үр ашигтай орчинд саадгүй нэвтрэх боломжийг хангах нь бүтээмжийг хадгалах, ажлын урсгалыг жигд явуулахад чухал ач холбогдолтой юм.
Төсөлдөө тохирох серверийн стекийг сонгох нь барилгын суурийг тавихтай адил юм: энэ нь анхааралтай авч үзэх, урьдчилан харах, одоогийн хэрэгцээ болон ирээдүйн өсөлтийн хоорондын тэнцвэрийг шаарддаг. Таны хийсэн сонголт бүр таны төслийн амжилт болон динамик технологийн орчинд дасан зохицож, цэцэглэн хөгжих чадварт нөлөөлдөг. Энэхүү нийтлэлээрээ би таныг эдгээр чухал шийдвэрүүдээр дамжуулан удирдан чиглүүлж, танд тулгарч буй нарийн төвөгтэй асуудлуудыг шийдвэрлэх ойлголтоор хангахыг зорьсон. Өнөөдөр олж авсан ойлголт тань таныг одоогийн болон ирээдүйн төслүүдээ амжилттай хэрэгжүүлэхэд тань зөв сонголт хийхэд тусална гэдэгт найдаж байна!
Зүүн Европт анхдагч гэж тэмдэглэгдсэн, массын туршилтанд зориулагдсан цоо шинэ худал детекторыг хөгжүүлэх явцад би хөгжүүлэлтийн багийн ахлагчийн хувьд серверийн стекийн сонголттой тулгарсан. Төслийн үндсэн шаардлагууд болох асар олон тооны микро үйлчилгээний холболтууд болон төрөл бүрийн мэдрэгчийн гаралтыг боловсруулах өргөн цар хүрээтэй файлын үйлдлүүд нь бат бөх боловч уян хатан арын шийдлийг шаарддаг.
Бид Python/Django, Go/Fiber зэрэг бусад өрсөлдөгчдөөс FastAPI-тэй Python-ийг сонгосон. Энэхүү шийдвэр нь FastAPI-ийн асинхрон програмчлалын дээд зэргийн дэмжлэгтэй холбоотой бөгөөд энэ нь төслийн эрчимтэй өгөгдөл боловсруулах хэрэгцээг үр дүнтэй шийдвэрлэх чухал онцлог юм. Django нь хүчирхэг хэдий ч синхрон шинж чанараараа хойш тавигдсан бөгөөд энэ нь бидний өндөр зэрэглэлийн болон бодит цагийн өгөгдөл боловсруулах шаардлагыг хангаж чадахгүй байв. Үүний нэгэн адил Go-г гүйцэтгэлээр нь үнэлдэг байсан ч эцэст нь FastAPI-ийн хурдацтай хөгжүүлэлтийн чадавхи болон Swagger баримт бичигт суурилсан дэмжлэгийг дэмжсэн нь бидний MVP-ийг хөгжүүлэх хатуу цаг хугацааны хувьд үнэлж баршгүй чухал байсан.
Үүний зэрэгцээ, төсөл нь вэб камерын холболтыг удирдах, янз бүрийн сувгаар видео урсгалыг чиглүүлэх чадвартай softcam функцийг бий болгохыг шаардсан. Хосгүй гүйцэтгэлийн хурд, платформ хоорондын нийцтэй байдлын ачаар C++ нь энэ даалгаварт сонгогдсон хэл болсон.
Энэхүү төсөл дээр бидний гаргасан шийдвэрүүд нь төслийн анхны амжилтыг дэмжээд зогсохгүй түүнийг тасралтгүй хөгжүүлэх, дасан зохицох бат бөх суурийг тавьсан юм.
Энэ төслийн хувьд би эхлээд Python болон Django-г сонгож, хурдан эхлүүлэхэд зайлшгүй шаардлагатай хурдацтай хөгжүүлэлтийн чадавхийг нь сонгосон. Энэхүү сонголт нь эхний үе шатанд үр дүнтэй болох нь батлагдсан бөгөөд ирцийн менежментийг сайжруулснаар клубын орлогыг нэмэгдүүлэхэд шууд хувь нэмэр оруулсан.
Төслийн цар хүрээ өргөжиж, ажилчдын удирдлага, аналитик, дотоод мессежийн систем зэрэг функцуудыг багтаасан тул Django-ийн нарийн төвөгтэй, зэрэгцээ процессуудыг зохицуулах хязгаарлалтууд тодорхой болсон. Энэхүү ухаарал нь намайг Go-г нэгтгэж, түүний goroutines болон Fasthttp-ийг дотоод мессенжерээ хөгжүүлэхэд ашиглахад хүргэсэн. Go-ийн зэрэгцээ даалгавруудыг удирдах гүйцэтгэл нь бидэнд CRM-ийн үйл ажиллагааг өргөжүүлэхэд тусалж, хамгийн бага зардалтайгаар өндөр гүйцэтгэлийг хадгалах боломжийг бидэнд олгосон.
Үндсэн функцүүдэд Django, өндөр гүйцэтгэлтэй бүрэлдэхүүн хэсгүүдэд Go-г ашиглах эрлийз технологийн аргыг ашиглах шийдвэр маш чухал байсан. Энэхүү стратеги нь надад хурдацтай хөгжил болон өргөтгөх чадварыг тэнцвэржүүлж, клубын өсөн нэмэгдэж буй хэрэгцээг хангахын тулд CRM-ийг хөгжүүлэх боломжийг олгосон.