Kila siku, kila wakati wakati wa kazi yetu ya uhandisi, tunakutana na shida nyingi tofauti za ugumu na hali tofauti ambapo tunahitaji kufanya uamuzi au kuahirisha kwa sababu ya ukosefu wa data. Wakati wowote tunapounda huduma mpya, kujenga miundombinu, au hata kuunda michakato ya maendeleo, tunagusa ulimwengu mkubwa wa changamoto mbalimbali.
Ni changamoto, na pengine hata haiwezekani, kuorodhesha matatizo yote. Utakutana na baadhi ya masuala haya tu ikiwa unafanya kazi katika niche maalum. Kwa upande mwingine, kuna mengi ambayo sote lazima tuelewe jinsi ya kutatua, kwani ni muhimu kwa kujenga mifumo ya TEHAMA. Kwa uwezekano mkubwa, utakutana nao katika miradi yote.
Katika makala hii, nitashiriki uzoefu wangu na baadhi ya matatizo ambayo nimekutana nayo wakati wa kuunda programu za programu.
Tukiangalia katika Wikipedia, tutapata ufafanuzi ufuatao
Katika maendeleo ya programu yenye mwelekeo wa kipengele, wasiwasi wa kukata mtambuka ni vipengele vya programu vinavyoathiri moduli kadhaa, bila uwezekano wa kuingizwa katika mojawapo yao. Hoja hizi mara nyingi haziwezi kuoza kutoka kwa mfumo mzima katika muundo na utekelezaji, na zinaweza kusababisha kutawanyika (kurudia msimbo), kugongana (tegemezi kubwa kati ya mifumo), au zote mbili.
Inaelezea sana ni nini, lakini ninataka kupanua na kurahisisha kidogo:
Wasiwasi mtambuka ni dhana au sehemu ya mfumo/shirika inayoathiri (au 'kukata') sehemu nyingine nyingi.
Mifano bora zaidi ya maswala kama haya ni usanifu wa mfumo, ukataji miti, usalama, usimamizi wa shughuli, telemetry, muundo wa hifadhidata na kuna zingine nyingi. Tutaelezea mengi yao baadaye katika makala hii.
Kwenye kiwango cha msimbo, masuala mtambuka mara nyingi hutekelezwa kwa kutumia mbinu kama vile Aspect-Oriented Programming (AOP) , ambapo masuala haya yanapangwa katika vipengele tofauti vinavyoweza kutumika katika programu yote. Hii huweka mantiki ya biashara kutengwa na masuala haya, na kufanya msimbo kusomeka zaidi na kudumishwa.
Kuna njia nyingi zinazowezekana za jinsi ya kuainisha vipengele kwa kuvitenga na sifa tofauti kama vile upeo, saizi, utendakazi, umuhimu, lengo, na vingine, lakini katika makala haya, nitatumia uainishaji rahisi wa upeo. Kwa hili, ninamaanisha pale ambapo kipengele hiki mahususi kinaelekezwa iwe ni shirika zima, mfumo fulani, au kipengele maalum cha mfumo huo.
Kwa hivyo, nitagawanya vipengele kuwa Macro na Micro .
Kwa kipengele cha Macro ninamaanisha hasa mambo tunayofuata kwa mfumo mzima kama vile usanifu wa mfumo uliochaguliwa na muundo wake (monolithic, huduma ndogo, usanifu unaolenga huduma), mrundikano wa teknolojia, muundo wa shirika, n.k. Vipengele vingi vinahusiana hasa na kimkakati na kiwango cha juu. maamuzi.
Wakati huo huo, kipengele cha Micro kiko karibu zaidi na kiwango cha msimbo na maendeleo. Kwa mfano, ni mfumo gani unatumika kuingiliana na hifadhidata, muundo wa mradi wa folda na madarasa, au hata muundo maalum wa kitu.
Ingawa uainishaji huu si bora, husaidia kupanga uelewa wa matatizo yanayoweza kutokea na umuhimu na athari za suluhu tunazozitumia.
Katika nakala hii, lengo langu kuu litakuwa juu ya mambo ya jumla.
Nilipoanza tu kujifunza kuhusu usanifu wa programu, nilisoma makala nyingi za kuvutia kuhusu sheria ya Conway na athari zake kwa muundo wa shirika. Hasa huyu . Kwa hiyo, sheria hii inasema hivyo
Shirika lolote linalounda mfumo (unaofafanuliwa kwa upana) litatoa muundo ambao muundo wake ni nakala ya muundo wa mawasiliano wa shirika.
Sikuzote nimeamini kwamba dhana hii ni ya ulimwengu wote na inawakilisha Kanuni ya Dhahabu.
Kisha nikaanza kujifunza mbinu ya Eric Evans's Domain-Driven Design (DDD) ya mifumo ya modeli. Eric Evans anasisitiza umuhimu wa kitambulisho cha Muktadha Wenye Mipaka. Dhana hii inahusisha kugawanya muundo changamano wa kikoa katika sehemu ndogo, zinazoweza kudhibitiwa zaidi, kila moja ikiwa na maarifa yake machache. Mbinu hii husaidia katika mawasiliano bora ya timu, kwani inapunguza hitaji la maarifa ya kina ya kikoa kizima na kupunguza ubadilishaji wa muktadha, na hivyo kufanya mazungumzo kuwa bora zaidi. Kubadilisha muktadha ndio jambo baya zaidi na linalotumia rasilimali zaidi kuwahi kutokea. Hata kompyuta zinapambana nayo. Ingawa hakuna uwezekano wa kufikia kutokuwepo kabisa kwa ubadilishaji wa muktadha, nadhani hiyo ndio tunapaswa kujitahidi.
Kurudi kwa Sheria ya Conway, nimepata maswala kadhaa nayo.
Toleo la kwanza ambalo nimekumbana nalo na Sheria ya Conway, ambayo inapendekeza kwamba muundo wa mfumo unaonyesha muundo wa shirika, ni uwezekano wa kuunda Muktadha wenye Mipaka ngumu na wa kina. Utata huu hutokea wakati muundo wa shirika haujaoanishwa na mipaka ya kikoa, na hivyo kusababisha Miktadha yenye Mipaka ambayo inategemeana kwa kiasi kikubwa na iliyosheheni taarifa. Husababisha kubadili-muktadha mara kwa mara kwa timu ya ukuzaji.
Suala jingine ni kwamba istilahi za shirika huvuja hadi kiwango cha msimbo. Wakati miundo ya shirika inabadilika, inahitaji marekebisho ya codebase, kuteketeza rasilimali muhimu.
Kwa hivyo, kufuata Inverse Conway Maneuver husaidia kujenga mfumo na shirika linalohimiza usanifu wa programu unaohitajika. Walakini, ni muhimu kusema kwamba mbinu hii haitafanya kazi vizuri katika usanifu na miundo iliyotengenezwa tayari kwani mabadiliko katika hatua hii ni ya muda mrefu, lakini inafanya kazi sana katika uanzishaji kwani wao ni wepesi wa kuanzisha mabadiliko yoyote.
Mchoro huu au "anti-pattern" huendesha ujenzi wa mfumo bila usanifu wowote. Hakuna sheria, hakuna mipaka, na hakuna mkakati wa jinsi ya kudhibiti ugumu unaoepukika unaokua. Utata ni adui mkubwa zaidi katika safari ya kujenga mifumo ya programu.
Ili kuepuka kuunda aina hiyo ya mfumo, tunahitaji kufuata sheria na vikwazo maalum.
Kuna ufafanuzi mwingi wa Usanifu wa Programu. Ninawapenda wengi wao kwani wanashughulikia nyanja tofauti zake. Walakini, ili kuweza kufikiria juu ya usanifu, tunahitaji kuunda baadhi yao katika akili zetu. Na ni vyema kusema kwamba ufafanuzi huu unaweza kubadilika. Kwa hivyo, angalau kwa sasa, nina maelezo yafuatayo kwangu.
Usanifu wa Programu ni kuhusu maamuzi na chaguo unazofanya kila siku zinazoathiri mfumo uliojengwa.
Ili kufanya maamuzi unayohitaji kuwa nayo katika kanuni na mifumo ya "mfuko" wako wa kutatua matatizo yanayotokea, ni muhimu pia kusema kwamba kuelewa mahitaji ni muhimu katika kujenga kile ambacho biashara inahitaji. Hata hivyo, wakati mwingine mahitaji si ya uwazi au hata haijafafanuliwa, katika kesi hii, ni bora kusubiri kupata ufafanuzi zaidi au kutegemea uzoefu wako na kuamini intuition yako. Lakini hata hivyo, huwezi kufanya maamuzi ipasavyo ikiwa huna kanuni na mifumo ya kutegemea. Hapo ndipo ninapokuja kwa ufafanuzi wa Mtindo wa Usanifu wa Programu.
Mtindo wa Usanifu wa Programu ni seti ya kanuni na mifumo inayobainisha jinsi ya kuunda programu.
Kuna mitindo mingi tofauti ya usanifu inayozingatia pande tofauti za usanifu uliopangwa, na kutumia nyingi mara moja ni hali ya kawaida.
Kwa mfano, kama vile:
Usanifu wa monolithic
Muundo unaoendeshwa na kikoa
Kipengele-msingi
Huduma ndogo ndogo
Bomba na vichungi
Inaendeshwa na tukio
Microkernel
Inayoelekezwa kwa huduma
na kadhalika...
Bila shaka, wana faida na hasara zao, lakini jambo muhimu zaidi ambalo nimejifunza ni kwamba usanifu hubadilika hatua kwa hatua huku ukitegemea matatizo halisi. Kuanzia na usanifu wa monolithic ni chaguo bora kwa kupunguza matatizo ya uendeshaji, kuna uwezekano mkubwa kwamba usanifu huu utafaa mahitaji yako hata baada ya kufikia hatua ya Bidhaa-soko ya Fit (PMI) ya kujenga bidhaa. Kwa kiwango kikubwa, unaweza kufikiria kuelekea mbinu inayoendeshwa na tukio na huduma ndogo ndogo za kufikia utumaji huru, mazingira ya mrundikano wa teknolojia tofauti tofauti, na usanifu uliounganishwa kidogo (na uwazi kidogo kwa wakati huu kwa sababu ya asili ya mbinu zinazoendeshwa na tukio na ndogo ikiwa hizi zimepitishwa). Urahisi na ufanisi ni karibu na una athari kubwa kwa kila mmoja. Kwa kawaida, usanifu changamano huathiri kasi ya ukuzaji wa vipengele vipya, kuunga mkono na kudumisha vilivyopo, na kutoa changamoto kwa mageuzi asilia ya mfumo.
Hata hivyo, mifumo ngumu mara nyingi inahitaji usanifu tata na wa kina, ambao hauepukiki.
Kwa kweli, hii ni mada pana sana, na kuna mawazo mengi mazuri kuhusu jinsi ya kuunda na kujenga mifumo ya mageuzi ya asili. Kulingana na uzoefu wangu, nimepanga njia ifuatayo:
Pia ni muhimu kuelewa nambari na vipimo kama vile DAU (Watumiaji Wanaotumika Kila Siku), MAU (Watumiaji Wanaotumika Kila Mwezi), RPC (Ombi kwa Sekunde), na TPC (Muamala kwa Sekunde) kwani inaweza kukusaidia kufanya chaguo kwa sababu usanifu wa Watumiaji 100 wanaofanya kazi na watumiaji milioni 100 wanaofanya kazi ni tofauti.
Kama dokezo la mwisho, ningesema kwamba usanifu una athari kubwa kwa mafanikio ya bidhaa. Usanifu ulioundwa vibaya kwa bidhaa unahitajika katika kuongeza, ambayo inaweza kusababisha kutofaulu kwani wateja hawatasubiri unapoongeza mfumo, watachagua mshindani, kwa hivyo tunahitaji kuwa mbele ya kuongeza uwezo. Ingawa ninakubali kuwa wakati mwingine haiwezi kuwa njia konda, wazo ni kuwa na mfumo mbaya lakini ambao haujapimwa tayari. Kwa upande mwingine, kuwa na mfumo mgumu sana na ambao tayari umekuzwa bila wateja au mipango ya kupata wengi wao itakugharimu pesa kwenye biashara yako bure.
Kuchagua mrundikano wa teknolojia pia ni uamuzi wa kiwango kikubwa kwa kuwa huathiri uajiri, mitazamo ya mabadiliko ya asili ya mfumo, uboreshaji, na utendaji wa mfumo.
Hii ndio orodha ya mambo ya msingi ya kuchagua stack ya teknolojia:
Je, kuwa na rundo la teknolojia nyingi kunaweza kuathiri ukuaji wa biashara?
Kwa mtazamo mmoja, kuletea rundo moja zaidi kunaweza kuongeza uajiri wako, lakini kwa upande mwingine, huleta gharama za ziada za matengenezo kwa kuwa unahitaji kuhimili rafu zote mbili. Kwa hivyo, kama nilivyosema hapo awali, kwa maoni yangu, hitaji la ziada pekee linapaswa kuwa hoja ya kujumuisha safu nyingi za teknolojia.
Lakini ni nini kuhusu kanuni ya kuchagua chombo bora kwa tatizo fulani?
Wakati mwingine huna chaguo lingine ila kuleta zana mpya za kutatua tatizo fulani kulingana na mazingatio yale yale yaliyotajwa hapo juu, katika hali kama hizi, ni mantiki kuchagua suluhu bora.
Uundaji wa mifumo bila muunganisho wa hali ya juu kwa teknolojia maalum inaweza kuwa changamoto. Bado, ni muhimu kujitahidi kwa hali ambapo mfumo haujaunganishwa sana na teknolojia, na hautakufa ikiwa kesho, mfumo maalum au chombo kitakuwa hatarini au hata kuacha kutumika.
Jambo lingine muhimu la kuzingatia linahusiana na utegemezi wa chanzo-wazi na umiliki wa programu. Programu ya umiliki hukupa kubadilika kidogo na uwezekano wa kubinafsishwa. Bado, sababu hatari zaidi ni kufuli kwa muuzaji, ambapo unakuwa tegemezi kwa bidhaa za muuzaji, bei, masharti na ramani ya barabara. Hii inaweza kuwa hatari ikiwa muuzaji atabadilisha mwelekeo, kuongeza bei, au kuacha bidhaa. Programu huria hupunguza hatari hii, kwani huluki moja haidhibiti. Kuondoa hatua moja ya kushindwa katika ngazi zote ni ufunguo wa kujenga mifumo ya kuaminika ya ukuaji.
Pointi moja ya kutofaulu (SPOF) inarejelea sehemu yoyote ya mfumo ambayo, ikiwa itashindwa, itasababisha mfumo mzima kuacha kufanya kazi. Kuondoa SPOF katika viwango vyote ni muhimu kwa mfumo wowote unaohitaji upatikanaji wa juu. Kila kitu, ikiwa ni pamoja na ujuzi, wafanyakazi, vipengele vya mfumo, watoa huduma za wingu, na nyaya za mtandao, zinaweza kushindwa.
Kuna mbinu kadhaa za kimsingi ambazo tunaweza kutumia ili kuondoa alama moja za kutofaulu:
Katika nakala hii, tulishughulikia mambo kadhaa muhimu ya Macro na jinsi tunaweza kukabiliana na ugumu wao.
Asante kwa kusoma! Tuonane wakati ujao!