From 19078cd75c478da6e48e1faab34908dbc26feff2 Mon Sep 17 00:00:00 2001 From: Raj Patil Date: Mon, 19 Feb 2024 19:34:38 +0530 Subject: [PATCH] evening 0x21F6 --- Content/20230911115154-computer_science.org | 5 +- Content/20231213144411-database.org | 2 - Content/20231214110805-system.org | 2 + Content/20231227160414-devops.org | 30 +++++++- Content/20231227162344-computer_networks.org | 2 + Content/20240219144517-system_design.org | 65 ++++++++++++++++++ .../20240219150231-distributed_compute.org | 20 ++++++ ...40219150852-decentralized_applications.org | 7 ++ Content/20240219151152-protocol.org | 17 +++++ Content/images/basic_data_scale.png | Bin 0 -> 3590 bytes Content/images/devops.png | Bin 0 -> 6841 bytes 11 files changed, 144 insertions(+), 6 deletions(-) create mode 100644 Content/20240219144517-system_design.org create mode 100644 Content/20240219150231-distributed_compute.org create mode 100644 Content/20240219150852-decentralized_applications.org create mode 100644 Content/20240219151152-protocol.org create mode 100644 Content/images/basic_data_scale.png create mode 100644 Content/images/devops.png diff --git a/Content/20230911115154-computer_science.org b/Content/20230911115154-computer_science.org index 3ef9a2e..ecb8249 100644 --- a/Content/20230911115154-computer_science.org +++ b/Content/20230911115154-computer_science.org @@ -2,5 +2,8 @@ :ID: 6f9a4752-aa66-42cf-9b88-2e4fa2091511 :END: #+title: Computer Science -#+filetags: :tbp:cs: +#+filetags: :cs: + +* Sentinels +** [[id:a3d0278d-d7b7-47d8-956d-838b79396da7][Distributed Compute]] diff --git a/Content/20231213144411-database.org b/Content/20231213144411-database.org index 75184df..1a9d625 100644 --- a/Content/20231213144411-database.org +++ b/Content/20231213144411-database.org @@ -3,7 +3,6 @@ :END: #+title: DataBase #+filetags: :programming:data: - Towards managing [[id:d45dae92-5148-4220-b8dd-e4da80674053][data]] stores. Speaking formally, databases represent another layer of abstraction over a computer system's [[id:ea72d66a-8192-4cb2-a7be-b05ee928f814][filesystem]] that intend to provide convenient endpoints for tasks (like templated insertion, deletion, searches, etc) that would be performed with higher frequencies : they facilitate structured storage, pushing for reliability and efficiency. @@ -89,7 +88,6 @@ checkout : https://docs.digitalocean.com/glossary/acid/ - introduces delays for maintenance of data consistency ** Monitoring - Profiling processes, analysing frequency of certain queries, etc, help with better structuring the templates (index, schema, etc) to push for performance - - * Sentinels ** Entity Relation Diagrams :PROPERTIES: diff --git a/Content/20231214110805-system.org b/Content/20231214110805-system.org index 63cc8d0..c0c4c32 100644 --- a/Content/20231214110805-system.org +++ b/Content/20231214110805-system.org @@ -7,3 +7,5 @@ In a very generic sense: This captures of the notion of the collection of [[id:20240114T203601.390070][Entities]] and their [[id:20240114T204304.033004][Interactions]] +* Specifics +** [[id:314236f7-81ae-48b7-b62b-dc822119180e][System Design]] diff --git a/Content/20231227160414-devops.org b/Content/20231227160414-devops.org index b678d86..de7fab2 100644 --- a/Content/20231227160414-devops.org +++ b/Content/20231227160414-devops.org @@ -2,10 +2,34 @@ :ID: 58ea31e4-95ae-4c25-b475-c8686fe23817 :END: #+title: Devops -#+filetags: :tbp:meta:programming: +#+filetags: :meta:programming: A software development practice that promotes collaboration between development and operations, resulting in faster and more reliable software delivery. -* Article Cache - - https://www.kalzumeus.com/2010/12/12/staging-servers-source-control-deploy-workflows-and-other-stuff-nobody-teaches-you/ +Note that these two have somewhat conflicting priorities. Developers measure their progress via amount of patches, feature upgrades and version releases. +IT Operations, on the other hand, are repsonsible for stability and avoiding changes that break the deployement. The practices that enable the two cooperate are encompassed by the domain of Devops. + +To summarize: Devops is about .. +#+begin_quote +... bringing together people, processes and tools that enable business agility. +#+end_quote + +A generic Flow : + +#+begin_src mermaid :file images/devops.png :exports results + graph LR + A[IDEA] --> B + B[CODE] --> C + C[BUILD] --> D + D[DEPLOY] --> E + E[MANAGE] --> F[LEARN] + F --> A +#+end_src +#+RESULTS: +[[file:images/devops.png]] + + +* Resources +** blogs + - https://www.kalzumeus.com/2010/12/12/staging-servers-source-control-deploy-workflows-and-other-stuff-nobody-teaches-you/ diff --git a/Content/20231227162344-computer_networks.org b/Content/20231227162344-computer_networks.org index 1e2dc15..532151a 100644 --- a/Content/20231227162344-computer_networks.org +++ b/Content/20231227162344-computer_networks.org @@ -15,6 +15,8 @@ The OSI Layers: 5. Session 6. Presentation 7. Application + +The communication between any of the two layers across two computers is said to be compliant with the respective [[id:11d303f1-d337-4f51-b211-db435a9f2cd0][Protocol]] * Practical ** [[id:24f4040a-7c18-416a-8460-e69280d437bf][Internet]] diff --git a/Content/20240219144517-system_design.org b/Content/20240219144517-system_design.org new file mode 100644 index 0000000..3cdfa14 --- /dev/null +++ b/Content/20240219144517-system_design.org @@ -0,0 +1,65 @@ +:PROPERTIES: +:ID: 314236f7-81ae-48b7-b62b-dc822119180e +:END: +#+title: System Design +#+filetags: :cs: + +* Abstract + +This node cluster references all the technicalities that go into designing a system - this should as a good rounded tour of the practical aspects of computer science. + +An important aspect of system design is to be able to handle all the users that interact with the system. This usually calls for [[id:a3d0278d-d7b7-47d8-956d-838b79396da7][Distributed Systems]] + +System design is a problem oriented and not just limited to generical theoretical design patterns. + +* Design Factors +Factors that the designer needs to consider when designing a system: +** Availability + - on how available is the system (temporally speaking) +*** Key Terms and Calculations + - MTBF (Mean Time Between Failures): Average time a component works before failing. + - MTTR (Mean Time to Repair): Average time taken to fix a failed component and restore service. + - Availability is often expressed as a percentage, like this: Availability (%) = (MTBF / (MTBF + MTTR)) * 100 + +** Database Access + - when scaling, the data read/writes need to be correspondingly handled smartly rather than directing all of the requests to the main database. + - an intermediate module is deployed in such cases +** Concurrent Users + - the capability of the system to handle multiple users at the same time +** Manageability + - the ability to detect failures and to recover from them +** Reliability + - implication that the required task will be executed consistently (and correctly) even with increased loads + - an example would be a write on a globally distributed database network - it doesn't propogate throughout whole network at a point and data consistency can't be ensured without incurring a delay. +** Latency + - time to response : important factor in user experience + +** Cost + - more hardware isn't always feasible and tangible resources need to be managed smartly + +* Performance Vs Scalability + - Performance is about how fast or slow a system works for a single user + - Scalability is how well the system retains that performs for multiple concurrent users. + +Scalability needs to be pre-emptively considered as altering a poorly designed solution to handle concurrent experiences is challenging. + +Scalability applies to different aspects of a system like compute and [[id:2f67eca9-5076-4895-828f-de3655444ee2][database]] accesses for instance. + +* Data Access Scalability + +a basic webserver might be modelled like: + +#+begin_src mermaid :file images/basic_data_scale.png :exports results + graph LR + A[User] --> B[Application Server] + B --> C(Database) +#+end_src + +#+RESULTS: +[[file:images/basic_data_scale.png]] + +Such a system is susceptible to scale issues and quickly becomes unusable with increasing users. + +To explore the solution space for such and issue, looking into caches, indexes, queues, load-balancers and proxy-servers + +** Cache diff --git a/Content/20240219150231-distributed_compute.org b/Content/20240219150231-distributed_compute.org new file mode 100644 index 0000000..64bfb8f --- /dev/null +++ b/Content/20240219150231-distributed_compute.org @@ -0,0 +1,20 @@ +:PROPERTIES: +:ID: a3d0278d-d7b7-47d8-956d-838b79396da7 +:END: +#+title: Distributed Compute +#+filetags: :cs: + +As the scale of the problem that one wishes to solve increases, several computers need to be able to [[id:a4e712e1-a233-4173-91fa-4e145bd68769][coordinate]] to solve the problem at hand, efficiently and correctly. + +These "compute"rs might not even be the conventional computer that pops up in one's mind and might rather be a group of servers, database instances or several edge devices such as in [[id:3c0c2077-b24a-4f6b-b93f-f06c08f7b3e9][decentralized applications]]. + +The uniting feature of all distributed systems is that the workload is distributed on the constituent "compute"rs. + +Some basic advantages of distributed compute: + - efficiency increases if workload is distributed + - fault tolerance in case of workload redundancy + - execution modularity helps with debugging the specific module when an error arises rather than having to examine the whole code-base + +A few trade-offs incurred due to the above: + - latency increases due to the communication overhead + - poor system design can affect user experience diff --git a/Content/20240219150852-decentralized_applications.org b/Content/20240219150852-decentralized_applications.org new file mode 100644 index 0000000..f010dd7 --- /dev/null +++ b/Content/20240219150852-decentralized_applications.org @@ -0,0 +1,7 @@ +:PROPERTIES: +:ID: 3c0c2077-b24a-4f6b-b93f-f06c08f7b3e9 +:ROAM_ALIASES: dApps +:END: +#+title: Decentralized Applications +#+filetags: :cs: + diff --git a/Content/20240219151152-protocol.org b/Content/20240219151152-protocol.org new file mode 100644 index 0000000..76ac65c --- /dev/null +++ b/Content/20240219151152-protocol.org @@ -0,0 +1,17 @@ +:PROPERTIES: +:ID: 11d303f1-d337-4f51-b211-db435a9f2cd0 +:END: +#+title: Protocol +#+filetags: :meta: + +This is a decently overlaoded term that varies in connotations across domains. + +In the context of [[id:a4e712e1-a233-4173-91fa-4e145bd68769][Computer Networks]] for instance, these are the agreed upon standards that devices on a network communicate by (HTTP, TCP/IP, bitstreams in the physical layer) + + +Regardless of the specific context, protocols provide a predictable and organized way to enable: + + - Interoperability: Different entities (devices, organizations, individuals) can interact smoothly as long as they all follow the same protocol. + - Reliability: Well-defined protocols create consistency and minimize errors in communication or procedures. + - Efficiency: Standardization allows for optimizations within the guidelines of a protocol. + diff --git a/Content/images/basic_data_scale.png b/Content/images/basic_data_scale.png new file mode 100644 index 0000000000000000000000000000000000000000..c8f2b63163322e96e582826f08880997671c7134 GIT binary patch literal 3590 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 literal 0 HcmV?d00001 diff --git a/Content/images/devops.png b/Content/images/devops.png new file mode 100644 index 0000000000000000000000000000000000000000..322d15a688b34d5a92afbed06b2952e364db72f5 GIT binary patch literal 6841 zcmb7pbx>Q;yKSIA(BM+MxJ!XTks_s7OR)+Cg1fs*2wJ>IfkLsA0&S5%aR}}$gd)YY zSb^Y#qW5s`Z{EDQ|GasbOmZf&_dehL);epg^H%q{IvFt|F$e@A)6`Ja2Z3;Xf#a8i z1i)+eQJDtthU2BLt^%qUX5IpU7`-%Am0$Sh?#>6fQ)9!y`+JQ0cXmLXMA1`Z^h!xF zRJaRVFEyOZo?0iVz18}xD=wz+!J$3vz7L1&$1>j412&ALOZrjd*1rPs7@~;5NJ+s7&;f1FAKzNJyz>16PvNN|qhBz#bZwAs2wcLf^PSyu{&DN3-;{&GAStMJ7(xAj#l zc{ZA`b8v7J@rype;8IXhQtDZXO#yF|+(ZO&w_k8|n5(O*s-|->?8E|(RJ;h5+h3(- z@%!QMRf`%2d2AiCG{(Pk$BJslREs^uSa$auo|180M8PK?)qu*j46t*1gN>%a9z6f* z^8J54quqCLshjJGjX(M0;%$l&^b`LasUEj(aozdGlRkonB4VD)cl9rHu0=d{?($h< ze5#lnM^cNzyDdeYnc za)&hTPsczF9!-Tz&wxvww!?c2&PZf&L~@&=Y`(6GO=(Mz`lijbL^&8XowEXqm%&AQ zA@#Q6-uy7P# z98pevt(t1~z)`Xxj#UOh9E`uoT*Qn#;tw{Zj_#yb@XFRwNi$pAepvR!?`^#$Z0vjs ziR@#8DNpAw@Are1r%HHg``E&m%gV~8>Rgz-Wm&4LR~o;BWZ9763GdO3r#r{+`?It+ z2WOtW58A(3IQdlmUYF7JO-?C`e36<%CY zf@p4LvKz_k8U83o?FFm;U1;)}XfwG8wNQhoX4KU;m2N>CJmYk5(leuN=;GriQqVYK z3*K3WqBCMGAR6J|+_K?i_x5G?g1S07x7HK7I@kF)VdJ`P`u)p0b*+%Krd>X>K*>%V z?gLBXWP`p2XT?~LhfxY|;^f(!5@V}V8Q{5We)a~+Zt2nWf?sjCWhoN_vDnWA$9%`T z+j_4M5Se>bIf51`-e*=5<0L*H080S&$;e78D|Iy5n?uWp^n<8(9B)o0@yn1z`mSIY zdKc}w08SgnGnBHJ%%QYd8>DOlcNw|&qw&%V>3R4d`RwuMh*In>wUMqtHTn8a<%>xM zRG2C#$I|8=AuclnY$B4m2RgYt8hM=BnU|VafG?G&OHV;Zd|Zm1B{C#`sX`@aPFi|* zFuLgroe_iHt1+qr7Mi~bVt-$XW$eNqK6Jgu_>P^Bftgv=%}sP6_(T17_g8V!*@o2ndY#mhtf^hz7e((4lpTb>gPy(bpM3=iVu56VTzt?ttxDtw zQ~UwlEq>gcNXYOvfDv}O1K0o{mV#a74NyEd zq{qS$t1^f{D^&7Fa1>mg>?<_^fw zw=_u>$s{S!$yfX9yb(z&O!xTl<9o?bv!U-rpm8PL`a;HZE*Eb(%pVFfS~)0ms5Em$ z`(VnTR2j?lYhv5lg%vQAhr*!N98O`AKpizfCJE8kd1ki`oJtgmHTlswU*3yr(&@!B zwPX5OQ3Q*?=E+lYduG?9R-pZhP`HiJT87^OY0h?!ztM4a7a?@{U>ry)@DD}E?gQj; zA9`E#@oQVc*+tj0s~j}nR#h!A9}J>D9cnnSuw`s6j)VTvS3B}`Xide~nCW_YmBC}? zNjx3*Co|50=J%SE))frY4o8B-m>cKgIcXJf?H7t$6L4JM`XgVP8x}CKkIG#&&bPTaIiMYe6=vm z4?XfPck)YfMpRHWP9VwSJY+vkHF|BxWHt~xnK@UD;K$8>gf9`Nfk7fo3D z%lVSPVc8OPxP)vXMf&!-FGFy+ZD#chULkT6rjFRlYTy|*AIvB*I(gad~#A#ag`~=f=+WOH|%N|aFDnpNUEM09_Ey$f?f64`F;8<#aOsh?+TjbTN~u2PhD5QbE^j@4Q_Vt9LtI!AfMI;-QY$^) z+}x7RLZ}$qsa~l3vXy6_7;I|AAP>;wdtu{f=8bQZCA%1mnz3=tUf9iQc8?`d)&mI% z>VNFq`}H zg?V_02L`H;zXxz6VfzC%wso9Huq~4rUg`G4iFioGR0NdPT&dAb7FtNf0rS17F;M(1 zDusi-r-KveD|=97rY1)uqy(g;2TEy1?wMt)rtsy5+fyGKC_>@oQz7{+7!!408M?9CQIh5z2*M zrqsvJ5B&W_K$uyBJB}KHGCMn)PekPON)@4B1}KNB(5t|ftJ7HzQ^j-;L33Xncnb3_5*c#;SaEN!%JB<8k&o)2QlkJec61c5{gFk< zgYGHqi}nRIqHwG*pLGqI8H@Z7Mx~L2oFdRYT*e#_((>#fIo96VZ3=Sp3U%$fn+N`8 zn?+IaYHo~qTcP6=(>$d59ekX5MEWhOySloXJe^ogu1i&&^M6Xv1z$|p8rhMH@tod&$TtOP zJS6SVOGL?Kfg42T%#NFIS$VLiTT~$V-y@aZ&~Ms-pHn`w>XiI#5gXBo)@$@&Ox^_p zk`cf1DadL|o!;YPSxrp+8f;f!6W*gKBqb%KLN?DgzXQXgjl2BPLK5dgQF;DRC_s&| zKL1QK>k}cbex8#~6If5^?U^rraV`42Su~c4H`aZc(TybDkK)Ov5WlHwZ%R~H+S>3f zaow_35{sO9&9phvQ1|s~dWyqzE$%w!X?Rf)2f*{n#rprwyCGy`%RAFG{=2omtAenu z*@{2Mc^XCukec~pNOvuev!Tz(GCt7di(OGiQQsP zwEk)SyxK@&XfReCI{;0maIBSGSHfOoims@y4e=DbIP`ZLv2hOMcl&jMWcqpPRlSh3 zU~0bR_gR@EZZxGUstt9G?~7`BfhmggKOEq-f_R^}LDf&CZLJ2Rr=97wSIwOLz2{rR zPmoV(0LB2Cyweg{P*Xz<3a<6{@$tby%(X`33kV2MP3hmidUnCs%&DGKP*E{Vzj2Ti8$q! zrhpz@^IV>IZFZ8_P&}Gb*MaGO$2ryPSLtT`wZ2gb6BI!O7+b zMPL7Y-PW1oh8kEsU{EFV<-MLws?j#ndGUtIb!;f0KbQWDl3TNLyRr?#MDZ>yErLbP zw`wLcHr5{3d9FeH?-3;C&hH9nmtbWJz?5fFkItTc+IHtIq5ab6f4SJZ5XI$K)jTU5 zxwaxN-|#n2ye-^>@zgBp#^+hY1zH>pSZ!_jm@di#$bHj@hzJ?q9R^gPKRvm~xd`jL z*uQg|h^VB6k8Mke)I#gs$PP>Q~MG!_jw65 z&_G>xMnZ$M)>DvK8SmlYXP(f*Q>2$HwDilDPH>_RXfA@o)PEV@dAj<^dg|@`W}_G^ z^YD*s&PA%kXl|D(CT8aDgVnxw+1W%NpZ6(K0#^6_QIa$EdU#|cIneo$*CoOA-VbzS zy6_t=m#U}Q+EHqVjwJf}|2Z2Db7d z{{#_LvQDXTemgwhZW{Rg#Ho7m&3jf2_6{F*n20QizNB9h>21(_&qS8@ubIW}#x=8< zA#E_>&8Vn^I4vPA`nY~u=DL2%C!}T+@MYg}c>Tof;o?);mQma52>1Em#&~6m%N@m3 z>?7pB3X%$+Rd6}PGVNX9wn}NeNP07aY8q9J<=g)|@rZ5XpEQl}gmQa+qte?aiRZsEl*bxt^n$XmPrn~*Ta}cvT$`WDrf;jJpDC_?6#5lMh=xCo z=E>@ob*}gYYqbSdWiLsUCjA1d#=apd0HLYp;T!$#UU(%>Cp3TE<&oYTZH&yidJ6 z378t+j^K7e7bI)X3_9vI0itO`ZY0jh-^@Iu{chA=AkqHeOeM)47p!B=DM}CX#z8b4 zrnC|zrb2q~m6VZ?REsttlDOOYO_d(0(f^3n(r|Cj@RP zNfCRG6on~=uiWFmgTmnS&q;)Ml#F*++yPZ-)b3s2n*Os9ShVCvZXUPN0%C{5{ z9Ny3dv#K(%hJ&~~X%0vc9~xm4PkFJzKTeC*Q7t;kDlq>IXM}Qdxw!1mGt_;sP-$S_ ztYE#mtlg();sSD{xM{)wP9t~0DH9w@PO{Yf4c zZLVS%D_h91UcaP+gM)^)Ha>`1#vK$A5|YB@P!z8PoU%o(LJ%D;Yf3YNf!41FJ+{`L zI29CFV9mB7b0h8TpuoUDG~gK*7EGgMfg)$$dg%S-F8}kb5@gs-sLaRbjq#Gj0C7>{ z;Z(L9YH1uf$pFH?#`fojf?GP&s{#aW%gLni*)_H;dGT^xdUIz-H84;%cX+eUomkS+ zV5d9`((a4&;}}fUO;YA%4L!5CJT6gu;^HDq00!S9RO#MIW>b6=UVIxCg3f^8%zb}J znOPx_=IZJS1OjZ^&m3vao9n%$aQQdroC2j)W^;1%{>@V*Ow5H{A*d1 z-@A^^7VjTgv{hDp5J^eNg4R|RNDQa7Y~~QYGR1xen603pfdTL=DTUvG%8U(-BGf(3 z_AP=>r|nRE924SrBdJ~xr=DbGk z$;lb7>pu?}wX z@5EObj}^S_U)C@R=Cu@^A>Y!5X};{0-Vn_w{vUFW@Xwva=sz)_8!c?>ECQ2AQ~t#lJfN=tV+))v*)(gLW#8T*kVO-?Sq5AyW# zdY73Q1L)^JfBxLUvEk-UcR(v7jwAw_TVc`&C!rTvnrrm3cX8>-5Pa=^b$${%R#H-8 zHJtk}OTrFfJCc_O

}~#K2R?unI&%C)D1GU5HOeAhou(W>=UG0Vm!b+t_F?@dB7> zoNx33-??+gA`F1j=;C5>csR~nYtV13gqRqtrA7W2i$%1xu>tD;S z@S`%Y$UeX5iQm6BE`r?MDIhUjSP4nV$il*Vi;LH708IA;7J%#1$)}PMPGMm(fM19& z+tEMyjf8A*4zPVF4 XjjUw5-&Y3Qivnprd9GTaVh;Z=Pb2*m literal 0 HcmV?d00001