Historia ya VPS: Kutoka Mainframe hadi Cloud
Gundua jinsi mifumo ya time-sharing ya miaka ya 1960 ilivyounda teknolojia ya VPS ya leo. Fuatilia mabadiliko kutoka CTSS na Unix hadi matumizi ya kisasa ya KVM.
Asili ya VPS yako
Historia ya kompyuta kuanzia mifumo ya mainframe hadi cloud ni wazo la kupunguza gharama. Wazo hilo ni time-sharing: kuruhusu watu wengi kutumia mashine moja ya gharama kubwa kwa wakati mmoja, na kumpa kila mmoja mtazamo wa faragha wa mashine hiyo. Ilivumbuliwa karibu na mwaka 1960 kwa sababu kompyuta iligharimu pesa nyingi kuliko watu waliokuwa wakiitumia. Kila sehemu ya VPS unayokodisha leo ilijengwa kwa ajili ya tatizo hilo: utengano kati ya watumiaji, scheduler inayotoa muda wa CPU, hypervisor, na ankara inayohisabu saa za matumizi. Tatizo hilo halijawahi kuondoka. Vifaa vimekuwa vya bei nafuu, hivyo sehemu ambayo zamani ilihitaji ruzuku ya utafiti sasa inagharimu dola chache kwa mwezi.
1959 hadi 1961: kwa nini time-sharing ilivumbuliwa
Kompyuta katika miaka ya 1950 ilifanya kazi kwa mfumo wa batch. Uliingiza programu yako kwenye kadi, ukampa opereta rundo la kadi hizo, na kurudi baadaye kuchukua matokeo yaliyochapishwa. Herufi moja iliyokosewa kuandikwa ilikugharimu siku nzima. Mashine ilibaki ikifanya kazi, jambo ambalo ndilo lilikuwa lengo kuu, kwa sababu mashine kama IBM 7090 iligharimu mamilioni ya dola na muda wa watu waliokuwa wakiisubiri haukuonekana kwenye ankara yoyote.
Mnamo Januari 1959, John McCarthy aliwasilisha hoja kinyume katika memo moja huko MIT. Mashine inapaswa kumsubiri binadamu. Christopher Strachey alielezea aina ya time-sharing katika mkutano wa UNESCO mwaka huo huo, ingawa alimaanisha programu moja ikifanyiwa debugging wakati kazi nyingine zikiendelea, badala ya watu wengi kuandika kwa wakati mmoja. Akizungumza katika maadhimisho ya miaka 100 ya MIT mnamo 1961, McCarthy alikwenda mbali zaidi: kompyuta inaweza kuuzwa kama huduma ya umma, ikipimwa kama umeme.
Pingamizi wakati huo lilikuwa kwamba time-sharing inapoteza uwezo wa mashine. Kubadili kati ya watumiaji kunatumia cycles, na cycles ndizo zilizokuwa kitu cha gharama. Pingamizi hilo lilikuwa sahihi, na liliacha kuwa na maana, kwa sababu bei ya cycle ilishuka kwa miaka sitini wakati bei ya saa moja ya umakini wa binadamu haikushuka.
Mambo ambayo CTSS ililazimika kuvumbua
Kikundi cha Fernando Corbató katika Kituo cha Kompyuta cha MIT kilijenga Compatible Time-Sharing System (CTSS) ili kumaliza mjadala huo. Ilionyeshwa kwa mara ya kwanza mnamo Novemba 1961 kwenye IBM 709, ikihudumia watumiaji wanne, huku ikihamisha kazi ya kila mtumiaji kwenda kwenye drive yake ya mkanda wa sumaku (magnetic tape drive). "Compatible" ilimaanisha kuwa mashine hiyo bado ingeweza kuendesha mfumo wa zamani wa batch kwa nyuma, kwa sababu hakuna mtu anayenunua kompyuta inayofanya jambo jipya pekee.
Watumiaji wanne ni idadi ndogo. Orodha ya matatizo yaliyopaswa kutatuliwa ili kufikia hatua hiyo si ndogo, na ndiyo orodha ileile ambayo kernel yako inashughulika nayo hivi sasa. CTSS ilihitaji scheduler, ili kazi moja ndefu isizuie terminal nyingine yoyote. Ilihitaji ulinzi wa kumbukumbu (memory protection), ili programu inayokwama iathiri mtumiaji mmoja badala ya mfumo mzima. Ilihitaji hifadhi inayodumu baada ya mtumiaji kutoka (logout), ndiyo maana CTSS ilikuwa na moja ya mifumo ya kwanza ya faili ambayo mtumiaji wa kisasa angeitambua. Na ilihitaji nywila, ili mtumiaji mmoja asiweze kusoma faili za mtumiaji mwingine.
Badilisha majina ya sehemu hizo na utapata Linux box. Scheduler ni EEVDF, ambayo ilichukua nafasi ya CFS katika Linux 6.6. Ulinzi wa kumbukumbu ni MMU (memory management unit) inayopatia kila mchakato nafasi yake ya anwani ya mtandaoni (virtual address space). Hifadhi inayodumu baada ya logout ni home directory yako. Faili ya nywila bado inaitwa /etc/passwd.
Multics na huduma ya kompyuta
Mfumo uliofuata wa MIT ulikusudiwa kuwa huduma kama ile aliyoelezea McCarthy. Project MAC ilianza mwaka 1963, ikasaini mkataba wa GE-645 ya General Electric mnamo Agosti 1964, na kuchapisha makala za kwanza za Multics mwaka 1965. Jina hilo linaelezea hoja yenyewe: Multiplexed Information and Computing Service. Huduma, kama kitu unachonunua kwa saa.
Multics ilichukua muda mrefu zaidi kuliko ilivyopangwa. Mashine za mfano za GE-645 zilifika MIT na Bell Labs mnamo Januari 1967. Bell Labs ilijiondoa kwenye mradi huo mnamo Aprili 1969. Multics ilianza kutumiwa na wateja wa MIT Information Processing Center mnamo 1 Oktoba 1969, na ikaendelea kufanya kazi katika uzalishaji mahali fulani kwa miaka thelathini na moja. Mfumo wa mwisho wa Multics uliokuwa ukifanya kazi, katika Idara ya Ulinzi ya Kitaifa ya Kanada huko Halifax, Nova Scotia, uliwashwa mnamo 30 Oktoba 2000.
Multics mara nyingi huwekwa kwenye kundi la mifumo iliyofeli kwa sababu ilichelewa na kufanya kazi polepole. Msamiati wake unasema vinginevyo. Ilitupa mfumo wa faili wa kihierarkia wa saraka ndani ya saraka, orodha ya udhibiti wa ufikiaji (access control list) kwenye kila faili, kumbukumbu pepe iliyogawanywa (segmented virtual memory) iliyoruhusu programu kushughulikia faili kama vile ni kumbukumbu, na pete za ulinzi (protection rings) zilizopanga msimbo kulingana na kiwango cha uaminifu wake. Pete hizo bado zipo kwenye silicon iliyo mbele yako. Ring 0 kwa ajili ya kernel na ring 3 kwa ajili ya msimbo wa mtumiaji ni msamiati wa Multics, na uboreshaji wa vifaa (hardware virtualization) baadaye uliongeza hali chini ya ring 0 kwa ajili ya hypervisor, ambayo watu huiita kwa njia isiyo rasmi ring -1.
Unix: mfumo wa time-sharing kwenye mashine unayoweza kumudu
Kuondoka kwenye mradi wa Multics kulimwacha Ken Thompson katika Bell Labs bila mfumo aliopenda kuutumia. Mnamo mwaka 1969, alianza kuunda mfumo mdogo zaidi kwenye kompyuta ya PDP-7 iliyokuwa imetupwa. Mwongozo wa kwanza wa Unix Programmer's Manual una tarehe ya Novemba 1971, wakati ambapo kazi ilikuwa imehamishiwa kwenye PDP-11. Mnamo mwaka 1973, Thompson na Dennis Ritchie waliandika upya kernel kwa lugha ya C, ili mfumo uweze kuhamia kwenye vifaa vipya bila kulazimika kuandikwa upya kwa mkono.
Hiyo ndiyo sababu unachapa amri kwenye mfumo uliotokana na Unix na si uliotokana na Multics. Multics ilihitaji vifaa vilivyoundwa mahususi kwa ajili yake. Unix ilifanya kazi kwenye kifaa chochote kilichokuwa cha bei nafuu na kinachopatikana, na hiyo ikawa ndiyo sifa iliyoamua mafanikio yake.
Makala ya "The UNIX Time-Sharing System" iliyoandikwa na Ritchie na Thompson ilichapishwa katika Communications of the ACM mnamo Julai 1974. Makala hiyo inaelezea VPS yako: michakato (processes), mfumo mmoja wa faili wenye mpangilio wa daraja (hierarchical file system), faili kama mitiririko ya baiti (byte streams), fork, watumiaji na vikundi vyenye bits za ruhusa (permission bits), na shell ambayo ni programu ya kawaida badala ya kuwa sehemu ya kernel. Miaka hamsini na miwili baadaye, kiolesura hicho kimepanuliwa, lakini hakijawahi kubadilishwa.
Je, mainframes zilikuwa zikiendesha virtual machines kweli mnamo 1972?
Ndiyo, na hii ndiyo sehemu ya hadithi ambayo watu wengi huikosa. Wakati MIT ilipojenga Multics, Cambridge Scientific Center ya IBM ilishambulia lengo hilohilo kutoka upande mwingine. Badala ya mfumo mmoja wa uendeshaji kuhudumia watumiaji wengi, Robert Creasy na Les Comeau walijenga control program iliyompa kila mtumiaji kompyuta kamili iliyoigizwa. CP-40 ilianza uzalishaji mnamo Januari 1967. Kila mtumiaji alipata System/360 ya mtandaoni na kuendesha mfumo mdogo wa uendeshaji wa mtumiaji mmoja, CMS, ndani yake.
CP-40 ilibadilika kuwa CP-67 kwenye System/360-67 mnamo 1968, na IBM ilitangaza VM/370 mnamo 2 Agosti 1972. Hiyo ni hypervisor ya kibiashara, iliyouzwa kwa wateja wanaolipa, miaka hamsini na minne iliyopita. Control program iligawanya hardware halisi, na mifumo ya uendeshaji ya wageni iliendeshwa bila kubadilishwa ndani ya virtual machines zilizodhani kuwa zinamiliki mashine hiyo.
Nadharia ilikuja miaka miwili baadaye, katika toleo hilohilo la Julai 1974 la Communications of the ACM lililobeba makala ya Unix. Makala ya Gerald Popek na Robert Goldberg ya "Formal Requirements for Virtualizable Third Generation Architectures" iliweka wazi kile ambacho processor lazima ifanye ili iweze kuwa virtualisable. Kanuni kuu ni fupi. Kila maelekezo (instruction) yanayoweza kusoma au kubadilisha hali ya mashine lazima yafanye trap wakati mgeni anapoyatekeleza nje ya kernel mode, ili hypervisor ichukue udhibiti na kujibu kwa toleo la kibinafsi la hali hiyo ya mgeni huyo. Hii inaitwa trap and emulate. Hardware ya IBM ilitii kanuni hiyo.
Kwa nini kompyuta ndogo ilivunja mfumo wa awali
DEC ilizindua PDP-8 mnamo 22 Machi 1965 kwa takriban $18,000 ya mwaka 1965, ikiwa ndiyo kompyuta ndogo ya kwanza kuuzwa chini ya $20,000, na ilifanikiwa kuuza zaidi ya vitengo 50,000. Kisha, microprocessor ilishusha bei zaidi. Mara tu idara ilipoweza kununua mashine yake yenyewe, na baadaye mtu binafsi alipoweza kufanya hivyo, kugawana kompyuta moja kuu kulionekana kama tatizo lililokwisha kutatuliwa ambalo halikuhitaji ufumbuzi tena. Katika miaka ya 1980 na 1990, kompyuta zilihama kutoka kwenye vituo vikuu na kuingia kwenye meza za watu na kwenye racks za seva ndogo za x86.
Upotevu uliibuka tena kwa namna tofauti. Programu moja kwa kila seva ni rahisi kuielewa, lakini inaacha sehemu kubwa ya maunzi ikiwa haitumiki huku gharama za umeme na nafasi ya rack zikilipiwa kikamilifu. Hilo ni tatizo la CTSS kwa mara nyingine katika kiwango kipya, ambapo rasilimali ghali sasa ni chumba na umeme badala ya processor. Jibu lilikuwa ni lile lile la zamani. Gawana mashine.
Kwa nini ilikuwa vigumu kufanya virtualization ya x86?
Kwa sababu x86 ilivunja kanuni ya Popek na Goldberg. Katika kongamano la 9 la USENIX Security Symposium mnamo Agosti 2000, John Scott Robin na Cynthia Irvine walichunguza seti ya maelekezo ya Pentium na kugundua maelekezo kumi na saba ambayo husoma au kubadilisha hali ya upendeleo (privileged state) bila kutoa hitilafu wakati msimbo wa user-mode unapoendesha. popf ndio mfano wa kawaida. Ikiendeshwa katika user-mode, processor hupuuza kimya kimya biti ambazo programu hairuhusiwi kuzibadilisha, badala ya kutoa trap. Kwa hivyo, hypervisor iliyojengwa kwa mfumo wa trap and emulate haijui kuwa guest ilijaribu kufanya hivyo.
Majibu mawili yalitokea kabla ya maunzi (hardware) kurekebishwa. VMware, iliyoanzishwa mwaka 1998 kutokana na utafiti wa Disco wa Stanford, ilikagua msimbo wa kernel ya guest na kuandika upya maelekezo yaliyokuwa na shida kabla hayajatekelezwa, mbinu inayojulikana kama binary translation. Xen, kutoka Maabara ya Kompyuta ya Chuo Kikuu cha Cambridge, ilibadilisha guest yenyewe. Makala ya "Xen and the Art of Virtualization", iliyowasilishwa katika SOSP mnamo Oktoba 2003, ilielezea paravirtualisation: kernel ya guest iliyorekebishwa huita hypervisor kwa makusudi badala ya kuendesha maelekezo ambayo hypervisor haiwezi kuyaingilia.
Kisha maunzi yakarekebishwa, kwa njia ile ile ambayo IBM iliyatumia katika miaka ya 1960. Intel ilitoa VT-x kwenye mifano miwili ya Pentium 4 mnamo 14 Novemba 2005, na AMD ilitoa AMD-V mnamo Mei 2006. Zote mbili zinaongeza hali ya processor chini ya kernel ya guest, kwa hivyo guest huendesha kernel yake kwa kasi kamili huku hypervisor ikihifadhi udhibiti wa matukio inayoitaka. Hilo lilifanya hypervisor kuwa ndogo vya kutosha kuishi ndani ya mfumo wa kawaida wa uendeshaji, na KVM ya Avi Kivity katika Qumranet ilifanya hivyo hasa: iligeuza Linux kernel yenyewe kuwa hypervisor. KVM iliunganishwa kwa ajili ya Linux 2.6.20, iliyotolewa mnamo Februari 2007, na ndiyo inayotumiwa na sehemu kubwa ya VPS hosts leo.
Jinsi VPS ilivyopata jina lake
Mistari miwili iliungana mwanzoni mwa miaka ya 2000. Mstari wa kwanza ulikuwa mashine pepe (virtual machine) kamili kwenye x86, ambapo mgeni (guest) huwasha kernel yake yenyewe. Mstari wa pili ulikuwa uboreshaji wa mfumo wa uendeshaji (operating-system-level virtualization): kernel moja ya Linux inayoshirikiwa hugawanywa katika mazingira tofauti, kila moja ikiwa na mtumiaji wake wa root na jedwali lake la michakato (process table). Linux-VServer na Virtuozzo ya SWsoft zote zilionekana mwaka 2001, na SWsoft ilitoa sehemu ya Virtuozzo kama OpenVZ ya chanzo huria mwaka 2005. Neno "virtual private server" linatokana na upande huo wa familia, likiundwa kwa kulinganisha na virtual private network.
Amazon ilibadilisha ukodishaji kuwa ombi la API. S3 ilizinduliwa tarehe 14 Machi 2006, na EC2 ilifunguliwa kama beta ya umma yenye vikwazo tarehe 25 Agosti 2006 ikiwa na aina moja ya instance, ikikimbia kwenye Xen. Kununua nguvu ya kompyuta kuliacha kuwa mkataba na ofisi ya huduma na kuwa ombi linalorejea ndani ya dakika moja.
Mistari yote miwili bado ipo, na mgawanyiko huo bado unaamua unachoweza kufanya na seva unayokodisha. KVM VPS huwasha kernel yake yenyewe, kwa hivyo unaweza kupakia kernel modules na hata kuendesha hypervisor ndani ya VPS yako. Mpango unaotegemea container hushiriki kernel ya mwenyeji (host) na hauwezi kufanya hivyo. Miaka sitini ya historia iko nyuma ya mstari huo mmoja kwenye ukurasa wa bei, ndiyo maana inafaa kuelewa jinsi VPS, VM na VPC zinavyotofautiana kabla ya kuchagua moja.
Mambo yaliyobadilika kutoka kwa mainframe hadi VPS yako, na yale ambayo hayakubadilika
Mambo manne yamebadilika. Mashine haipo katika jengo lako. Terminal ni programu badala ya kuwa kipande cha samani. Kitengo unachokodisha ni kompyuta nzima yenye kernel yake yenyewe, badala ya akaunti kwenye mfumo wa uendeshaji wa mtu mwingine. Na bei imeshuka vya kutosha kiasi kwamba ununuzi ni malipo ya kadi badala ya mchakato wa manunuzi rasmi.
Utaratibu haukubadilika hata kidogo.
- Kikao chako cha ssh ni terminal ya time-sharing. Unapata login na shell, na scheduler huamua ni lini mchakato wako utaendeshwa.
- Isolation bado inatekelezwa na maunzi. MMU na viwango vya upendeleo vya processor hufanya kazi hiyo, kama vile CP-40 ilivyohitaji mwaka 1967.
- Bado unatozwa ada kwa sehemu ya mashine kulingana na muda uliopita, kama vile ofisi za huduma zilivyotoza kwa saa za muunganisho.
- Bado unahisi wapangaji wengine. Wakati host imezidiwa, guest yako husubiri CPU halisi, na Linux huripoti kusubiri huko kama CPU steal time kutoka kwa jirani mwenye kelele.
Hoja hiyo ya mwisho ndiyo muhtasari wa kweli wa historia nzima. Kushiriki mashine ni biashara. Ilikubalika mwaka 1961 kwa sababu kompyuta iligharimu zaidi ya watu, na inakubalika mwaka 2026 kwa sababu seva inayofanya kazi kwa asilimia kumi ya uwezo wake ni kupoteza pesa. Ikiwa ungependelea kusimama upande wa operator wa biashara hiyo, kuendesha Proxmox kwenye maunzi unayomiliki hukupa hypervisor na matatizo ya operator kwa pamoja.
Kumbuka uwiano huo. CTSS ilihudumia watumiaji wanne kwenye mashine iliyogharimu mamilioni ya dola za mwaka 1961 na kujaza chumba. VPS yako, kwa dola chache kwa mwezi mwaka 2026, ni kompyuta bora zaidi kuliko ile ambayo timu ya Corbató ilikuwa ikigawanya, na unayo peke yako. Sababu ya kuweza kuikodisha ni wazo la miaka sitini na mitano iliyopita ambalo hatimaye lilikutana na maunzi ya bei nafuu. Ikiwa unafanya maamuzi ya nini cha kuweka juu yake, anza na kile VPS inachokupa kihalisi na kisha vile watu wanavyoendesha kwenye VPS.
FAQ
Je, mfumo wa kwanza wa kompyuta wa time-sharing ulikuwa upi?
CTSS, yaani Compatible Time-Sharing System, ilijengwa na kikundi cha Fernando Corbató katika Kituo cha Kompyuta cha MIT. Ilionyeshwa kwa mara ya kwanza mnamo Novemba 1961 kwenye IBM 709 na ilihudumia watumiaji wanne, ambapo kila mmoja alihamishwa kwenye tape drive tofauti. Huduma ya kwanza ya time-sharing kwa ajili ya jamii nzima ilikuwa Dartmouth Time-Sharing System: mnamo 1 Mei 1964, John Kemeny na mwanafunzi mmoja programu walikimbiza programu za BASIC kwa wakati mmoja kwenye terminal mbili na wote walipata majibu sahihi.
Je, mashine pepe (virtual machines) ziligunduliwa kweli katika miaka ya 1960?
Ndiyo. Kituo cha Kisayansi cha Cambridge cha IBM kilianza kutumia CP-40 mnamo Januari 1967, kikimpa kila mtumiaji System/360 pepe kamili ikiwa na mfumo wa uendeshaji wa CMS ndani yake. CP-67 ilifuata mnamo 1968 kwenye System/360-67, na IBM ilitangaza VM/370 mnamo 2 Agosti 1972. Hizo ni hypervisor halisi zinazokimbiza mifumo ya uendeshaji ya wageni (guest operating systems) bila kuibadilisha, na ziliuzwa kibiashara miongo kadhaa kabla ya vifaa vya x86 kuweza kufanya jambo hilo.
Kwa nini ilikuwa vigumu kufanya virtualization kwenye x86 wakati mainframes hazikuwa na tatizo hilo?
Kanuni ya Popek na Goldberg ya 1974 inasema kila maelekezo (instruction) inayoweza kusoma au kubadilisha hali ya mashine lazima iwe na trap wakati mgeni anapoiendesha nje ya kernel mode. x86 ilivunja kanuni hiyo. Robin na Irvine walihesabu maelekezo kumi na saba ya Pentium ambayo hushindwa kimyakimya katika user mode badala ya kufanya trap, kwa hivyo hypervisor ya kawaida ya trap-and-emulate haiyaoni, na popf ndilo mfano wa kawaida. VMware ilitatua tatizo hilo kwa binary translation na Xen kwa paravirtualisation, hadi Intel VT-x mnamo Novemba 2005 na AMD-V mnamo Mei 2006 zilipoongeza hali ya maunzi (hardware mode) kwa ajili ya hypervisor.
Je, kukodisha VPS ni sawa na kuwa na akaunti ya time-sharing?
Mfumo wa malipo na tatizo la utengano (isolation) ni sawa. Kitengo kinachotumika ni tofauti. Mtumiaji wa time-sharing alipata akaunti kwenye mfumo wa uendeshaji ulioshirikiwa na kila mtu mwingine, kwa hivyo msimamizi alikuwa mtu fulani katika kituo cha kompyuta. KVM VPS inakupa mashine pepe yenye kernel yako mwenyewe na akaunti yako ya root, kwa hivyo msimamizi ni wewe. VPS inayotegemea container inakaa katikati ya hayo mawili, kwa sababu inashiriki kernel ya mwenyeji (host kernel) huku ikikupa root ndani ya mazingira yako mwenyewe.