<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://homeostasis.scs.carleton.ca/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Cdelahou</id>
	<title>Soma-notes - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://homeostasis.scs.carleton.ca/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Cdelahou"/>
	<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php/Special:Contributions/Cdelahou"/>
	<updated>2026-04-24T11:59:54Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_8&amp;diff=19045</id>
		<title>DistOS 2014W Lecture 8</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_8&amp;diff=19045"/>
		<updated>2014-04-22T18:58:22Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: /* Class Discussion: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==NFS and AFS (Jan 30)==&lt;br /&gt;
&lt;br /&gt;
* [http://homeostasis.scs.carleton.ca/~soma/distos/2008-02-11/sandberg-nfs.pdf Russel Sandberg et al., &amp;quot;Design and Implementation of the Sun Network Filesystem&amp;quot; (1985)]&lt;br /&gt;
* [http://homeostasis.scs.carleton.ca/~soma/distos/2008-02-11/howard-afs.pdf John H. Howard et al., &amp;quot;Scale and Performance in a Distributed File System&amp;quot; (1988)]&lt;br /&gt;
&lt;br /&gt;
==NFS==&lt;br /&gt;
Group 1:&lt;br /&gt;
&lt;br /&gt;
1) per operation traffic.&lt;br /&gt;
&lt;br /&gt;
2) rpc based. Easy with which to program but a very [http://www.joelonsoftware.com/articles/LeakyAbstractions.html leaky abstraction].&lt;br /&gt;
&lt;br /&gt;
3) unreliable&lt;br /&gt;
&lt;br /&gt;
Group 2:&lt;br /&gt;
&lt;br /&gt;
1) designed to share disks over a network, not files&lt;br /&gt;
&lt;br /&gt;
2) more UNIX like. They tried to maintain unix file semantics on the client and server side.&lt;br /&gt;
&lt;br /&gt;
3) portable. It was meant to work (as a server) across many FS types.&lt;br /&gt;
&lt;br /&gt;
4) used UDP: if request dropped, just request again.&lt;br /&gt;
&lt;br /&gt;
5) it is not minimize network traffic.&lt;br /&gt;
&lt;br /&gt;
6) used VNODE, VFS as transparent interfaces to local disks.&lt;br /&gt;
&lt;br /&gt;
7) not have much hardware equipment&lt;br /&gt;
&lt;br /&gt;
8) later versions took on features of AFS&lt;br /&gt;
&lt;br /&gt;
9) stateless protocol conflicts with files being stateful by nature.&lt;br /&gt;
&lt;br /&gt;
Group 3:&lt;br /&gt;
&lt;br /&gt;
1) cache assumption invalid.&lt;br /&gt;
&lt;br /&gt;
2) no dedicated locking mechanism. They couldn&#039;t decide on which locking strategy to use, so they left it up to the users of NFS to use their own separate locking service.&lt;br /&gt;
&lt;br /&gt;
3) bad security&lt;br /&gt;
&lt;br /&gt;
Other:&lt;br /&gt;
* Client mounts full FS. No common namespace.&lt;br /&gt;
* Hostname lookup and address binding happens at mount&lt;br /&gt;
&lt;br /&gt;
==AFS==&lt;br /&gt;
&lt;br /&gt;
Group 1&lt;br /&gt;
&lt;br /&gt;
1) design for 5000 to 10000 clients&lt;br /&gt;
&lt;br /&gt;
2) high integrity.&lt;br /&gt;
&lt;br /&gt;
Group 2&lt;br /&gt;
&lt;br /&gt;
1) designed to share files over a network, not disks. It is one FS.&lt;br /&gt;
&lt;br /&gt;
2) better scalability&lt;br /&gt;
&lt;br /&gt;
3) better security (Kerberos).&lt;br /&gt;
&lt;br /&gt;
4) minimize network traffic.&lt;br /&gt;
&lt;br /&gt;
5) less UNIX like&lt;br /&gt;
&lt;br /&gt;
6) plugin authentication&lt;br /&gt;
&lt;br /&gt;
7) needs more kernel storage due to complex commands&lt;br /&gt;
&lt;br /&gt;
8) inode concept replaced with fid&lt;br /&gt;
&lt;br /&gt;
Group 3&lt;br /&gt;
&lt;br /&gt;
1) cache assumption valid&lt;br /&gt;
&lt;br /&gt;
2) locking&lt;br /&gt;
&lt;br /&gt;
3) good security.&lt;br /&gt;
&lt;br /&gt;
Other:&lt;br /&gt;
* Caches full files locally on open. Sends diffs on close.&lt;br /&gt;
&lt;br /&gt;
==Class Discussion:== &lt;br /&gt;
&lt;br /&gt;
Capturing some of Anil&#039;s Observations about NFS and AFS: &lt;br /&gt;
* The reason why NFS does not try to share at block level instead of file level is that sharing at block level is complicated from the implementation point of view. &lt;br /&gt;
* NFS use UDP as the transport protocol since UDP being a stateless protocol is in-line with the NFS design philosophy of not maintaining state information.  &lt;br /&gt;
* Security and unreliability issues in NFS are an implication of using RPC. &lt;br /&gt;
** RPC is a nice way for programming but RPC is not designed for networks (where flakiness is an inherent characteristic) which is better explained by the analogy that you never expect from a programming point of view your function call to fail(not to return) because of communication error.  &lt;br /&gt;
* AFS designers considered network as a bottle neck and tried to reduce the number of chatter over network by using caching.&lt;br /&gt;
** &#039;open&#039; and &#039;close&#039; operations in AFS were critical&lt;br /&gt;
**  the &#039;close&#039; operation assumes importance to the same proportions of a &#039;commit&#039; operation in a well-designed database system. &lt;br /&gt;
* The security model of AFS is interesting in that rather than going for the UNIX access list based implementation AFS used a single sign on system based on Kerberos. &lt;br /&gt;
** cool thing about Kerberos is that idea of using tickets to get access.&lt;br /&gt;
* Irrespective of having better features compared to NFS, AFS did not get widely adopted. The reason for this was that the administrative mechanism for AFS was complex and it required highly trained/skilled people to setup AFS and it also required quite a number of day’s effort to set it up and maintain.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_21&amp;diff=19033</id>
		<title>DistOS 2014W Lecture 21</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_21&amp;diff=19033"/>
		<updated>2014-04-20T02:57:39Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: /* Naiad */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Presentation ==&lt;br /&gt;
&lt;br /&gt;
=== Marking ===&lt;br /&gt;
&lt;br /&gt;
* marked mostly on presentation, not content&lt;br /&gt;
* basically we want to communicate the basic structure of the paper, and do so in a way that isn&#039;t boring&lt;br /&gt;
&lt;br /&gt;
=== Content ===&lt;br /&gt;
&lt;br /&gt;
* concrete, not &amp;quot;head in the clouds&amp;quot;&lt;br /&gt;
* present the area&lt;br /&gt;
* compare and contrast the papers&lt;br /&gt;
* 10 minutes talk, 5 minutes feedback&lt;br /&gt;
* basic argument&lt;br /&gt;
* basic references&lt;br /&gt;
&lt;br /&gt;
=== Form ===&lt;br /&gt;
&lt;br /&gt;
* show the work we&#039;ve done on paper&lt;br /&gt;
* try to get feedback&lt;br /&gt;
* think of it as a rough draft&lt;br /&gt;
* try to get people to read the paper&lt;br /&gt;
* enthusiasm&lt;br /&gt;
* powerpoints are easier&lt;br /&gt;
* don&#039;t read slides&lt;br /&gt;
* no whole sentences on slides&lt;br /&gt;
* look at talks by Mark Shuttleworth&lt;br /&gt;
&lt;br /&gt;
== MapReduce ==&lt;br /&gt;
&lt;br /&gt;
A clever observation that a simple solution could solve most distributed problems.  It&#039;s all about programming to an abstraction that is efficiently parallelizable.  Note that it&#039;s not actually a simple solution, because it sits atop a mountain of code.  It requires something like BigTable which requires something like GFS, which requires something like Chubby. Despite this, it allows for programmers to easily do distributed computation using a simple framework that hides the messy details of parrallelization.&lt;br /&gt;
&lt;br /&gt;
* Restricted programming model&lt;br /&gt;
* Interestingly large scale problems can be implemented with this&lt;br /&gt;
* Easy to program, powerful for certain classes of problems, it scales well.&lt;br /&gt;
* MapReduce job model is VERY limited though. You can&#039;t do things like  simulations.&lt;br /&gt;
* MapReduce is problem specific. &lt;br /&gt;
** Naiad is less problem specific and allows you to do more.&lt;br /&gt;
&lt;br /&gt;
Programming to an abstraction that is efficiently parllel. We have learnt all about infrastructure until now. &lt;br /&gt;
Classic OS abstractions were about files. Now we used programming abstraction.&lt;br /&gt;
&lt;br /&gt;
Example: word frequency in a document.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== How does it work? ===&lt;br /&gt;
&lt;br /&gt;
* Two steps. Map and Reduce. The user writes theses.&lt;br /&gt;
** Map takes a single input key-value pair (eg. a named document) and converts it to an intermediate (k,v) representation. A list of new key-values.&lt;br /&gt;
** Reduce: Take the intermediate representation and merge the values.&lt;br /&gt;
&lt;br /&gt;
=== Implementation ===&lt;br /&gt;
&lt;br /&gt;
* Uses commodity HW and GFS.&lt;br /&gt;
* Master/Slave relationship amongst machines. Master delegates tasks to slaves.&lt;br /&gt;
* Intermediate representation saved as files.&lt;br /&gt;
* Many MapReduce jobs can happen in sequence.&lt;br /&gt;
&lt;br /&gt;
== Naiad ==&lt;br /&gt;
&lt;br /&gt;
Where MapReduce was suited for a specific family of solutions, Naiad tries to generalize the solution to apply parallelization to a much wider family.  Naiad supports MapReduce style solutions, but also many other solutions.  However, the tradeoff was simplicity.  It&#039;s like we took MapReduce and took away its low barrier to entry.  The idea is to create a constrained graph that can easily be parallelized.&lt;br /&gt;
&lt;br /&gt;
* More complicated than Map Reduce&lt;br /&gt;
* Talks about Timely dataflow graphs &lt;br /&gt;
* Its all about Graph algorithms - Graph abstraction&lt;br /&gt;
* Restrictions on graphs so that they can be mapped to parllel computation&lt;br /&gt;
* How to fit anything to this model is a big question. &lt;br /&gt;
* More general than map reduce.&lt;br /&gt;
&lt;br /&gt;
* After reading the MapReduce paper, you could easily write a map reduce job. After reading the Naiad, you can&#039;t. Naiad is super complicated. &lt;br /&gt;
* Their model is super complicated. It doesn&#039;t minimize our cognitive load.&lt;br /&gt;
* Doesn&#039;t scale at all. After about 40 nodes, there is no improvement in performance. MapReduce can scale to thousands of nodes and scales forever.&lt;br /&gt;
* Nobody wants to use it because the abstraction is complicated.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_21&amp;diff=19032</id>
		<title>DistOS 2014W Lecture 21</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_21&amp;diff=19032"/>
		<updated>2014-04-20T02:50:40Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: Niad&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Presentation ==&lt;br /&gt;
&lt;br /&gt;
=== Marking ===&lt;br /&gt;
&lt;br /&gt;
* marked mostly on presentation, not content&lt;br /&gt;
* basically we want to communicate the basic structure of the paper, and do so in a way that isn&#039;t boring&lt;br /&gt;
&lt;br /&gt;
=== Content ===&lt;br /&gt;
&lt;br /&gt;
* concrete, not &amp;quot;head in the clouds&amp;quot;&lt;br /&gt;
* present the area&lt;br /&gt;
* compare and contrast the papers&lt;br /&gt;
* 10 minutes talk, 5 minutes feedback&lt;br /&gt;
* basic argument&lt;br /&gt;
* basic references&lt;br /&gt;
&lt;br /&gt;
=== Form ===&lt;br /&gt;
&lt;br /&gt;
* show the work we&#039;ve done on paper&lt;br /&gt;
* try to get feedback&lt;br /&gt;
* think of it as a rough draft&lt;br /&gt;
* try to get people to read the paper&lt;br /&gt;
* enthusiasm&lt;br /&gt;
* powerpoints are easier&lt;br /&gt;
* don&#039;t read slides&lt;br /&gt;
* no whole sentences on slides&lt;br /&gt;
* look at talks by Mark Shuttleworth&lt;br /&gt;
&lt;br /&gt;
== MapReduce ==&lt;br /&gt;
&lt;br /&gt;
A clever observation that a simple solution could solve most distributed problems.  It&#039;s all about programming to an abstraction that is efficiently parallelizable.  Note that it&#039;s not actually a simple solution, because it sits atop a mountain of code.  It requires something like BigTable which requires something like GFS, which requires something like Chubby. Despite this, it allows for programmers to easily do distributed computation using a simple framework that hides the messy details of parrallelization.&lt;br /&gt;
&lt;br /&gt;
* Restricted programming model&lt;br /&gt;
* Interestingly large scale problems can be implemented with this&lt;br /&gt;
* Easy to program, powerful for certain classes of problems, it scales well.&lt;br /&gt;
* MapReduce job model is VERY limited though. You can&#039;t do things like  simulations.&lt;br /&gt;
* MapReduce is problem specific. &lt;br /&gt;
** Naiad is less problem specific and allows you to do more.&lt;br /&gt;
&lt;br /&gt;
Programming to an abstraction that is efficiently parllel. We have learnt all about infrastructure until now. &lt;br /&gt;
Classic OS abstractions were about files. Now we used programming abstraction.&lt;br /&gt;
&lt;br /&gt;
Example: word frequency in a document.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== How does it work? ===&lt;br /&gt;
&lt;br /&gt;
* Two steps. Map and Reduce. The user writes theses.&lt;br /&gt;
** Map takes a single input key-value pair (eg. a named document) and converts it to an intermediate (k,v) representation. A list of new key-values.&lt;br /&gt;
** Reduce: Take the intermediate representation and merge the values.&lt;br /&gt;
&lt;br /&gt;
=== Implementation ===&lt;br /&gt;
&lt;br /&gt;
* Uses commodity HW and GFS.&lt;br /&gt;
* Master/Slave relationship amongst machines. Master delegates tasks to slaves.&lt;br /&gt;
* Intermediate representation saved as files.&lt;br /&gt;
* Many MapReduce jobs can happen in sequence.&lt;br /&gt;
&lt;br /&gt;
== Naiad ==&lt;br /&gt;
&lt;br /&gt;
Where MapReduce was suited for a specific family of solutions, Naiad tries to generalize the solution to apply parallelization to a much wider family.  Naiad supports MapReduce style solutions, but also many other solutions.  However, the tradeoff was simplicity.  It&#039;s like we took MapReduce and took away its low barrier to entry.  The idea is to create a constrained graph that can easily be parallelized.&lt;br /&gt;
&lt;br /&gt;
* More complicated than Map Reduce&lt;br /&gt;
* Talks about Timely dataflow graphs &lt;br /&gt;
* Its all about Graph algorithms - Graph abstraction&lt;br /&gt;
* Restrictions on graphs so that they can be mapped to parllel computation&lt;br /&gt;
* How to fit anything to this model is a big question. &lt;br /&gt;
* More general than map reduce.&lt;br /&gt;
&lt;br /&gt;
* After reading the MapReduce paper, you could easily write a map reduce job. After reading the Naiad, you can&#039;t. Naiad is super complicated. &lt;br /&gt;
* Their model is super complicated. It doesn&#039;t minimize our cognitive load.&lt;br /&gt;
* Doesn&#039;t scale at all. After about 40 nodes, there is no improvement in performance. MapReduce can scale to thousands of nodes and scales forever.&lt;br /&gt;
* Nobody wants to use it because the abstraction sucks.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_21&amp;diff=19031</id>
		<title>DistOS 2014W Lecture 21</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_21&amp;diff=19031"/>
		<updated>2014-04-20T02:43:08Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: More on M/R&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Presentation ==&lt;br /&gt;
&lt;br /&gt;
=== Marking ===&lt;br /&gt;
&lt;br /&gt;
* marked mostly on presentation, not content&lt;br /&gt;
* basically we want to communicate the basic structure of the paper, and do so in a way that isn&#039;t boring&lt;br /&gt;
&lt;br /&gt;
=== Content ===&lt;br /&gt;
&lt;br /&gt;
* concrete, not &amp;quot;head in the clouds&amp;quot;&lt;br /&gt;
* present the area&lt;br /&gt;
* compare and contrast the papers&lt;br /&gt;
* 10 minutes talk, 5 minutes feedback&lt;br /&gt;
* basic argument&lt;br /&gt;
* basic references&lt;br /&gt;
&lt;br /&gt;
=== Form ===&lt;br /&gt;
&lt;br /&gt;
* show the work we&#039;ve done on paper&lt;br /&gt;
* try to get feedback&lt;br /&gt;
* think of it as a rough draft&lt;br /&gt;
* try to get people to read the paper&lt;br /&gt;
* enthusiasm&lt;br /&gt;
* powerpoints are easier&lt;br /&gt;
* don&#039;t read slides&lt;br /&gt;
* no whole sentences on slides&lt;br /&gt;
* look at talks by Mark Shuttleworth&lt;br /&gt;
&lt;br /&gt;
== MapReduce ==&lt;br /&gt;
&lt;br /&gt;
A clever observation that a simple solution could solve most distributed problems.  It&#039;s all about programming to an abstraction that is efficiently parallelizable.  Note that it&#039;s not actually a simple solution, because it sits atop a mountain of code.  It requires something like BigTable which requires something like GFS, which requires something like Chubby. Despite this, it allows for programmers to easily do distributed computation using a simple framework that hides the messy details of parrallelization.&lt;br /&gt;
&lt;br /&gt;
* Restricted programming model&lt;br /&gt;
* Interestingly large scale problems can be implemented with this&lt;br /&gt;
* Easy to program, powerful for certain classes of problems, it scales well.&lt;br /&gt;
* MapReduce job model is VERY limited though. You can&#039;t do things like  simulations.&lt;br /&gt;
* MapReduce is problem specific. &lt;br /&gt;
** Naiad is less problem specific and allows you to do more.&lt;br /&gt;
&lt;br /&gt;
Programming to an abstraction that is efficiently parllel. We have learnt all about infrastructure until now. &lt;br /&gt;
Classic OS abstractions were about files. Now we used programming abstraction.&lt;br /&gt;
&lt;br /&gt;
Example: word frequency in a document.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== How does it work? ===&lt;br /&gt;
&lt;br /&gt;
* Two steps. Map and Reduce. The user writes theses.&lt;br /&gt;
** Map takes a single input key-value pair (eg. a named document) and converts it to an intermediate (k,v) representation. A list of new key-values.&lt;br /&gt;
** Reduce: Take the intermediate representation and merge the values.&lt;br /&gt;
&lt;br /&gt;
=== Implementation ===&lt;br /&gt;
&lt;br /&gt;
* Uses commodity HW and GFS.&lt;br /&gt;
* Master/Slave relationship amongst machines. Master delegates tasks to slaves.&lt;br /&gt;
* Intermediate representation saved as files.&lt;br /&gt;
* Many MapReduce jobs can happen in sequence.&lt;br /&gt;
&lt;br /&gt;
== Naiad ==&lt;br /&gt;
&lt;br /&gt;
Where MapReduce was suited for a specific family of solutions, Naiad tries to generalize the solution to apply parallelization to a much wider family.  Naiad supports MapReduce style solutions, but also many other solutions.  However, the tradeoff was simplicity.  It&#039;s like we took MapReduce and took away its low barrier to entry.  The idea is to create a constrained graph that can easily be parallelized.&lt;br /&gt;
* Complicated than Map Reduce&lt;br /&gt;
* Talks about Timely dataflow graphs &lt;br /&gt;
* Its all about Graph algorithms - Graph abstraction&lt;br /&gt;
* Restrictions on graphs so that they can be mapped to parllel computation&lt;br /&gt;
* How to fit anything to this model is a big question. &lt;br /&gt;
* More general than map reduce &lt;br /&gt;
* Not very useful.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_21&amp;diff=19030</id>
		<title>DistOS 2014W Lecture 21</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_21&amp;diff=19030"/>
		<updated>2014-04-20T02:40:45Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: MapReduce stuff&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Presentation ==&lt;br /&gt;
&lt;br /&gt;
=== Marking ===&lt;br /&gt;
&lt;br /&gt;
* marked mostly on presentation, not content&lt;br /&gt;
* basically we want to communicate the basic structure of the paper, and do so in a way that isn&#039;t boring&lt;br /&gt;
&lt;br /&gt;
=== Content ===&lt;br /&gt;
&lt;br /&gt;
* concrete, not &amp;quot;head in the clouds&amp;quot;&lt;br /&gt;
* present the area&lt;br /&gt;
* compare and contrast the papers&lt;br /&gt;
* 10 minutes talk, 5 minutes feedback&lt;br /&gt;
* basic argument&lt;br /&gt;
* basic references&lt;br /&gt;
&lt;br /&gt;
=== Form ===&lt;br /&gt;
&lt;br /&gt;
* show the work we&#039;ve done on paper&lt;br /&gt;
* try to get feedback&lt;br /&gt;
* think of it as a rough draft&lt;br /&gt;
* try to get people to read the paper&lt;br /&gt;
* enthusiasm&lt;br /&gt;
* powerpoints are easier&lt;br /&gt;
* don&#039;t read slides&lt;br /&gt;
* no whole sentences on slides&lt;br /&gt;
* look at talks by Mark Shuttleworth&lt;br /&gt;
&lt;br /&gt;
== MapReduce ==&lt;br /&gt;
&lt;br /&gt;
A clever observation that a simple solution could solve most distributed problems.  It&#039;s all about programming to an abstraction that is efficiently parallelizable.  Note that it&#039;s not actually a simple solution, because it sits atop a mountain of code.  It requires something like BigTable which requires something like GFS, which requires something like Chubby. Despite this, it allows for programmers to easily do distributed computation using a simple framework that hides the messy details of parrallelization.&lt;br /&gt;
&lt;br /&gt;
* Restricted programming model&lt;br /&gt;
* Interestingly large scale problems can be implemented with this&lt;br /&gt;
* Easy to program, powerful for certain classes, it scales like no ones business. &lt;br /&gt;
* Kind of empoweraged model&lt;br /&gt;
Programming to an abstraction that is efficiently parllel. We have learnt all about infrastructure until now. &lt;br /&gt;
Classic OS abstractions were about files. Now we used programming abstraction.&lt;br /&gt;
&lt;br /&gt;
Example: word frequency in a document.&lt;br /&gt;
&lt;br /&gt;
=== How does it work? ===&lt;br /&gt;
&lt;br /&gt;
* Two steps. Map and Reduce. The user writes theses.&lt;br /&gt;
** Map takes a single input key-value pair (eg. a named document) and converts it to an intermediate (k,v) representation. A list of new key-values.&lt;br /&gt;
** Reduce: Take the intermediate representation and merge the values.&lt;br /&gt;
&lt;br /&gt;
=== Implementation ===&lt;br /&gt;
&lt;br /&gt;
* Uses commodity HW and GFS.&lt;br /&gt;
* Master/Slave relationship amongst machines. Master delegates tasks to slaves.&lt;br /&gt;
* Intermediate representation saved as files.&lt;br /&gt;
* Many MapReduce jobs can happen in sequence.&lt;br /&gt;
&lt;br /&gt;
== Naiad ==&lt;br /&gt;
&lt;br /&gt;
Where MapReduce was suited for a specific family of solutions, Naiad tries to generalize the solution to apply parallelization to a much wider family.  Naiad supports MapReduce style solutions, but also many other solutions.  However, the tradeoff was simplicity.  It&#039;s like we took MapReduce and took away its low barrier to entry.  The idea is to create a constrained graph that can easily be parallelized.&lt;br /&gt;
* Complicated than Map Reduce&lt;br /&gt;
* Talks about Timely dataflow graphs &lt;br /&gt;
* Its all about Graph algorithms - Graph abstraction&lt;br /&gt;
* Restrictions on graphs so that they can be mapped to parllel computation&lt;br /&gt;
* How to fit anything to this model is a big question. &lt;br /&gt;
* More general than map reduce &lt;br /&gt;
* Not very useful.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_20&amp;diff=19029</id>
		<title>DistOS 2014W Lecture 20</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_20&amp;diff=19029"/>
		<updated>2014-04-20T02:04:52Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: Added a few other points for Comet.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Cassandra ==&lt;br /&gt;
&lt;br /&gt;
Cassandra is essentially running a BigTable interface on top of a Dynamo infrastructure.  BigTable uses GFS&#039; built-in replication and Chubby for locking.  Cassandra uses gossip algorithms (similar to Dynamo): [http://dl.acm.org/citation.cfm?id=1529983 Scuttlebutt].  &lt;br /&gt;
&lt;br /&gt;
=== A brief look at Open Source ===&lt;br /&gt;
&lt;br /&gt;
Initialy Anil talked about google versus facebook approach to technologies. &lt;br /&gt;
* Google developed its technology internally and used for competitive advantage. &lt;br /&gt;
* Facebook developed its technology in open source manner. They needed to create an open source community to keep up.&lt;br /&gt;
* He talked little bit about licences. With GPL3 you have to provide code with binary. In AGPL additional service also be given with source code.&lt;br /&gt;
&lt;br /&gt;
While discussing Hbase versus Cassandra discussed why two projects with same notion are supported? Apache as a community. For any tool in CS, particularly software tools, its actually important to have more than one good implementation. Only time it doesn&#039;t happen because of market realities. &lt;br /&gt;
&lt;br /&gt;
Hadoop is a set of technologies that represent the open source equivalent of&lt;br /&gt;
Google&#039;s infrastructure&lt;br /&gt;
* Cassandra -&amp;gt; ???&lt;br /&gt;
* HBase -&amp;gt; BigTable&lt;br /&gt;
* HDFS -&amp;gt; GFS&lt;br /&gt;
* Zookeeper -&amp;gt; Chubby&lt;br /&gt;
&lt;br /&gt;
=== Back to Cassandra ===&lt;br /&gt;
&lt;br /&gt;
* Cassandra is basically you take a key value store system like Dynamo and then  you extend to look like BigTable.&lt;br /&gt;
* Not just a key value store. It is a multi dimensional map. You can look up  different columns, etc. The data is more structured than a Key-Value store.&lt;br /&gt;
* In a key value store, you can only look up the key. Cassandra is much richer  than this.&lt;br /&gt;
&lt;br /&gt;
Bigtable vs. Cassandra:&lt;br /&gt;
* Bigtable and Cassandra exposes similar APIs.&lt;br /&gt;
* Cassandra seems to be lighter weight.&lt;br /&gt;
* Bigtable depends on GFS. Cassandra depends on server&#039;s file system. Anil feels cassandra cluster is easy to setup. &lt;br /&gt;
* Bigtable is designed for stream oriented batch processing . Cassandra is for handling online/realtime/highspeed stuff.&lt;br /&gt;
&lt;br /&gt;
Schema design is explained in inbox example. It does not give clarity about how table will look like. Anil thinks they store lot data with messages which makes table crappy.&lt;br /&gt;
	&lt;br /&gt;
Apache Zookeeper is used for distributed configuration. It will also bootstrap and configure a new node. It is similar to Chubby. Zookeeper is for node level information. The Gossip protocol is more about key partitioning information and distributing that information amongst nodes. &lt;br /&gt;
&lt;br /&gt;
Cassandra uses a modified version of the Accrual Failure Detector. The idea of an Accrual Failure Detection is that failure detection module emits a value which represents a suspicion level for each of monitored nodes. The idea is to express the value of phi� on a scale that is dynamically adjusted to react network and load conditions at the monitored nodes.&lt;br /&gt;
&lt;br /&gt;
Files are written to disk in an sequential way and are never mutated. This way, reading a file does not require locks. Garbage collection takes care of deletion.&lt;br /&gt;
&lt;br /&gt;
Cassandra writes in an immutable way like functional programming. There is no assignment in functional programming. It tries to eliminate side effects. Data is just binded you associate a name with a value. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cassandra - &lt;br /&gt;
* Uses consistent hashing (like most DHTs)&lt;br /&gt;
* Lighter weight &lt;br /&gt;
* All most of the readings are part of Apache&lt;br /&gt;
* More designed for online updates for interactive lower latency &lt;br /&gt;
* Once they write to disk they only read back&lt;br /&gt;
* Scalable multi master database with no single point of failure&lt;br /&gt;
* Reason for not giving out the complete detail on the table schema&lt;br /&gt;
* Probably not just inbox search&lt;br /&gt;
* All data in one row of a table &lt;br /&gt;
* Its not a key-value store. Big blob of data. &lt;br /&gt;
* Gossip based protocol - Scuttlebutt. Every node is aware of overy other.&lt;br /&gt;
* Fixed circular ring &lt;br /&gt;
* Consistency issue not addressed at all. Does writes in an immutable way. Never change them. &lt;br /&gt;
&lt;br /&gt;
Older style network protocol - token rings&lt;br /&gt;
What sort of computational systems avoid changing data?&lt;br /&gt;
Systems talking about implementing functional like semantics.&lt;br /&gt;
&lt;br /&gt;
== Comet ==&lt;br /&gt;
&lt;br /&gt;
The major idea behind Comet is triggers/callbacks.  There is an extensive literature in extensible operating systems, basically adding code to the operating system to better suit my application.  &amp;quot;Generally, extensible systems suck.&amp;quot; -[[User:Soma]] This was popular before operating systems were open source.&lt;br /&gt;
&lt;br /&gt;
[https://www.usenix.org/conference/osdi10/comet-active-distributed-key-value-store The presentation video of Comet]&lt;br /&gt;
&lt;br /&gt;
Comet seeks to greatly expand the application space for key-value storage systems through application-specific customization.Comet storage object is a &amp;lt;key,value&amp;gt; pair.Each Comet node stores a collection of active storage objects (ASOs) that consist of a key, a value, and a set of handlers. Comet handlers run as a result of timers or storage operations, such as get or put, allowing an ASO to take dynamic, application-specific actions to customize its behaviour. Handlers are written in a simple sandboxed extension language, providing properties of safety and isolation.ASO can modify its environment, monitor its execution,and make dynamic decisions about its state.&lt;br /&gt;
&lt;br /&gt;
Researchers try to provide the ability to extend a DHT without requiring a substantial investment of effort to modify its implementation.They try to implement to isolation and safety using restricting system access,restricting resource consumption and restricting within-Comet communication.&lt;br /&gt;
&lt;br /&gt;
* Provids callbacks (aka. Database triggers)&lt;br /&gt;
* Provides DHT platform that is extensible at the application level&lt;br /&gt;
* Uses Lua&lt;br /&gt;
* Provided extensibility in an untrusted environment. Dynamo, by contrast, was extensible but only in a trusted environment.&lt;br /&gt;
* Why do we care? We don&#039;t really. Why would you want this extensibility? You wouldn&#039;t. It isn&#039;t worth the cost. Current systems currently have an allowance for tuneability.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
&lt;br /&gt;
* if someone wants to understand the consistent hashing in detail, here is a blog which explains it really well, this blog has other great posts in the field of distributed system as well -&lt;br /&gt;
http://loveforprogramming.quora.com/Distributed-Systems-Part-1-A-peek-into-consistent-hashing *&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_20&amp;diff=19028</id>
		<title>DistOS 2014W Lecture 20</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_20&amp;diff=19028"/>
		<updated>2014-04-20T01:44:18Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: Removed line breaks&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Cassandra ==&lt;br /&gt;
&lt;br /&gt;
Cassandra is essentially running a BigTable interface on top of a Dynamo infrastructure.  BigTable uses GFS&#039; built-in replication and Chubby for locking.  Cassandra uses gossip algorithms (similar to Dynamo): [http://dl.acm.org/citation.cfm?id=1529983 Scuttlebutt].  &lt;br /&gt;
&lt;br /&gt;
=== A brief look at Open Source ===&lt;br /&gt;
&lt;br /&gt;
Initialy Anil talked about google versus facebook approach to technologies. &lt;br /&gt;
* Google developed its technology internally and used for competitive advantage. &lt;br /&gt;
* Facebook developed its technology in open source manner. They needed to create an open source community to keep up.&lt;br /&gt;
* He talked little bit about licences. With GPL3 you have to provide code with binary. In AGPL additional service also be given with source code.&lt;br /&gt;
&lt;br /&gt;
While discussing Hbase versus Cassandra discussed why two projects with same notion are supported? Apache as a community. For any tool in CS, particularly software tools, its actually important to have more than one good implementation. Only time it doesn&#039;t happen because of market realities. &lt;br /&gt;
&lt;br /&gt;
Hadoop is a set of technologies that represent the open source equivalent of&lt;br /&gt;
Google&#039;s infrastructure&lt;br /&gt;
* Cassandra -&amp;gt; ???&lt;br /&gt;
* HBase -&amp;gt; BigTable&lt;br /&gt;
* HDFS -&amp;gt; GFS&lt;br /&gt;
* Zookeeper -&amp;gt; Chubby&lt;br /&gt;
&lt;br /&gt;
=== Back to Cassandra ===&lt;br /&gt;
&lt;br /&gt;
* Cassandra is basically you take a key value store system like Dynamo and then  you extend to look like BigTable.&lt;br /&gt;
* Not just a key value store. It is a multi dimensional map. You can look up  different columns, etc. The data is more structured than a Key-Value store.&lt;br /&gt;
* In a key value store, you can only look up the key. Cassandra is much richer  than this.&lt;br /&gt;
&lt;br /&gt;
Bigtable vs. Cassandra:&lt;br /&gt;
* Bigtable and Cassandra exposes similar APIs.&lt;br /&gt;
* Cassandra seems to be lighter weight.&lt;br /&gt;
* Bigtable depends on GFS. Cassandra depends on server&#039;s file system. Anil feels cassandra cluster is easy to setup. &lt;br /&gt;
* Bigtable is designed for stream oriented batch processing . Cassandra is for handling online/realtime/highspeed stuff.&lt;br /&gt;
&lt;br /&gt;
Schema design is explained in inbox example. It does not give clarity about how table will look like. Anil thinks they store lot data with messages which makes table crappy.&lt;br /&gt;
	&lt;br /&gt;
Apache Zookeeper is used for distributed configuration. It will also bootstrap and configure a new node. It is similar to Chubby. Zookeeper is for node level information. The Gossip protocol is more about key partitioning information and distributing that information amongst nodes. &lt;br /&gt;
&lt;br /&gt;
Cassandra uses a modified version of the Accrual Failure Detector. The idea of an Accrual Failure Detection is that failure detection module emits a value which represents a suspicion level for each of monitored nodes. The idea is to express the value of phi� on a scale that is dynamically adjusted to react network and load conditions at the monitored nodes.&lt;br /&gt;
&lt;br /&gt;
Files are written to disk in an sequential way and are never mutated. This way, reading a file does not require locks. Garbage collection takes care of deletion.&lt;br /&gt;
&lt;br /&gt;
Cassandra writes in an immutable way like functional programming. There is no assignment in functional programming. It tries to eliminate side effects. Data is just binded you associate a name with a value. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cassandra - &lt;br /&gt;
* Uses consistent hashing (like most DHTs)&lt;br /&gt;
* Lighter weight &lt;br /&gt;
* All most of the readings are part of Apache&lt;br /&gt;
* More designed for online updates for interactive lower latency &lt;br /&gt;
* Once they write to disk they only read back&lt;br /&gt;
* Scalable multi master database with no single point of failure&lt;br /&gt;
* Reason for not giving out the complete detail on the table schema&lt;br /&gt;
* Probably not just inbox search&lt;br /&gt;
* All data in one row of a table &lt;br /&gt;
* Its not a key-value store. Big blob of data. &lt;br /&gt;
* Gossip based protocol - Scuttlebutt. Every node is aware of overy other.&lt;br /&gt;
* Fixed circular ring &lt;br /&gt;
* Consistency issue not addressed at all. Does writes in an immutable way. Never change them. &lt;br /&gt;
&lt;br /&gt;
Older style network protocol - token rings&lt;br /&gt;
What sort of computational systems avoid changing data?&lt;br /&gt;
Systems talking about implementing functional like semantics.&lt;br /&gt;
&lt;br /&gt;
== Comet ==&lt;br /&gt;
&lt;br /&gt;
The major idea behind Comet is triggers/callbacks.  There is an extensive literature in extensible operating systems, basically adding code to the operating system to better suit my application.  &amp;quot;Generally, extensible systems suck.&amp;quot; -[[User:Soma]]&lt;br /&gt;
&lt;br /&gt;
[https://www.usenix.org/conference/osdi10/comet-active-distributed-key-value-store The presentation video of Comet]&lt;br /&gt;
&lt;br /&gt;
Comet seeks to greatly expand the application space for key-value storage systems through application-specific customization.Comet storage object is a &amp;lt;key,value&amp;gt; pair.Each Comet node stores a collection of active storage objects (ASOs) that consist of a key, a value, and a set of handlers. Comet handlers run as a result of timers or storage operations, such as get or put, allowing an ASO to take dynamic, application-specific actions to customize its behaviour. Handlers are written in a simple sandboxed extension language, providing properties of safety and isolation.ASO can modify its environment, monitor its execution,and make dynamic decisions about its state.&lt;br /&gt;
&lt;br /&gt;
Researchers try to provide the ability to extend a DHT without requiring a substantial investment of effort to modify its implementation.They try to implement to isolation and safety using restricting system access,restricting resource consumption and restricting within-Comet communication.&lt;br /&gt;
&lt;br /&gt;
* if someone wants to understand the consistent hashing in detail, here is a blog which explains it really well, this blog has other great posts in the field of distributed system as well -&lt;br /&gt;
http://loveforprogramming.quora.com/Distributed-Systems-Part-1-A-peek-into-consistent-hashing *&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_20&amp;diff=19027</id>
		<title>DistOS 2014W Lecture 20</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_20&amp;diff=19027"/>
		<updated>2014-04-20T01:43:11Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: Added Cassandra stuff. Fixed and cleaned up some english.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Cassandra ==&lt;br /&gt;
&lt;br /&gt;
Cassandra is essentially running a BigTable interface on top of a Dynamo infrastructure.  BigTable uses GFS&#039; built-in replication and Chubby for locking.  Cassandra uses gossip algorithms (similar to Dynamo): [http://dl.acm.org/citation.cfm?id=1529983 Scuttlebutt].  &lt;br /&gt;
&lt;br /&gt;
=== A brief look at Open Source ===&lt;br /&gt;
&lt;br /&gt;
Initialy Anil talked about google versus facebook approach to technologies. &lt;br /&gt;
* Google developed its technology internally and used for competitive advantage. &lt;br /&gt;
* Facebook developed its technology in open source manner. They needed to create an open source community to keep up.&lt;br /&gt;
* He talked little bit about licences. With GPL3 you have to provide code with binary. In AGPL additional service also be given with source code.&lt;br /&gt;
&lt;br /&gt;
While discussing Hbase versus Cassandra discussed why two projects with same notion are supported? Apache as a community. For any tool in CS, particularly software tools, its actually important to have more than one good implementation. Only time it doesn&#039;t happen because of market realities. &lt;br /&gt;
&lt;br /&gt;
Hadoop is a set of technologies that represent the open source equivalent of&lt;br /&gt;
Google&#039;s infrastructure&lt;br /&gt;
* Cassandra -&amp;gt; ???&lt;br /&gt;
* HBase -&amp;gt; BigTable&lt;br /&gt;
* HDFS -&amp;gt; GFS&lt;br /&gt;
* Zookeeper -&amp;gt; Chubby&lt;br /&gt;
&lt;br /&gt;
=== Back to Cassandra ==&lt;br /&gt;
&lt;br /&gt;
* Cassandra is basically you take a key value store system like Dynamo and then&lt;br /&gt;
  you extend to look like BigTable.&lt;br /&gt;
* Not just a key value store. It is a multi dimensional map. You can look up&lt;br /&gt;
  different columns, etc. The data is more structured than a Key-Value store.&lt;br /&gt;
* In a key value store, you can only look up the key. Cassandra is much richer&lt;br /&gt;
  than this.&lt;br /&gt;
&lt;br /&gt;
Bigtable vs. Cassandra:&lt;br /&gt;
* Bigtable and Cassandra exposes similar APIs.&lt;br /&gt;
* Cassandra seems to be lighter weight.&lt;br /&gt;
* Bigtable depends on GFS. Cassandra depends on server&#039;s file system. Anil feels cassandra cluster is easy to setup. &lt;br /&gt;
* Bigtable is designed for stream oriented batch processing . Cassandra is for handling online/realtime/highspeed stuff.&lt;br /&gt;
&lt;br /&gt;
Schema design is explained in inbox example. It does not give clarity about how table will look like. Anil thinks they store lot data with messages which makes table crappy.&lt;br /&gt;
	&lt;br /&gt;
Apache Zookeeper is used for distributed configuration. It will also bootstrap and configure a new node. It is similar to Chubby. Zookeeper is for node level information. The Gossip protocol is more about key partitioning information and distributing that information amongst nodes. &lt;br /&gt;
&lt;br /&gt;
Cassandra uses a modified version of the Accrual Failure Detector. The idea of an Accrual Failure Detection is that failure detection module emits a value which represents a suspicion level for each of monitored nodes. The idea is to express the value of phi� on a scale that is dynamically adjusted to react network and load conditions at the monitored nodes.&lt;br /&gt;
&lt;br /&gt;
Files are written to disk in an sequential way and are never mutated. This way, reading a file does not require locks. Garbage collection takes care of deletion.&lt;br /&gt;
&lt;br /&gt;
Cassandra writes in an immutable way like functional programming. There is no assignment in functional programming. It tries to eliminate side effects. Data is just binded you associate a name with a value. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cassandra - &lt;br /&gt;
* Uses consistent hashing (like most DHTs)&lt;br /&gt;
* Lighter weight &lt;br /&gt;
* All most of the readings are part of Apache&lt;br /&gt;
* More designed for online updates for interactive lower latency &lt;br /&gt;
* Once they write to disk they only read back&lt;br /&gt;
* Scalable multi master database with no single point of failure&lt;br /&gt;
* Reason for not giving out the complete detail on the table schema&lt;br /&gt;
* Probably not just inbox search&lt;br /&gt;
* All data in one row of a table &lt;br /&gt;
* Its not a key-value store. Big blob of data. &lt;br /&gt;
* Gossip based protocol - Scuttlebutt. Every node is aware of overy other.&lt;br /&gt;
* Fixed circular ring &lt;br /&gt;
* Consistency issue not addressed at all. Does writes in an immutable way. Never change them. &lt;br /&gt;
&lt;br /&gt;
Older style network protocol - token rings&lt;br /&gt;
What sort of computational systems avoid changing data?&lt;br /&gt;
Systems talking about implementing functional like semantics.&lt;br /&gt;
&lt;br /&gt;
== Comet ==&lt;br /&gt;
&lt;br /&gt;
The major idea behind Comet is triggers/callbacks.  There is an extensive literature in extensible operating systems, basically adding code to the operating system to better suit my application.  &amp;quot;Generally, extensible systems suck.&amp;quot; -[[User:Soma]]&lt;br /&gt;
&lt;br /&gt;
[https://www.usenix.org/conference/osdi10/comet-active-distributed-key-value-store The presentation video of Comet]&lt;br /&gt;
&lt;br /&gt;
Comet seeks to greatly expand the application space for key-value storage systems through application-specific customization.Comet storage object is a &amp;lt;key,value&amp;gt; pair.Each Comet node stores a collection of active storage objects (ASOs) that consist of a key, a value, and a set of handlers. Comet handlers run as a result of timers or storage operations, such as get or put, allowing an ASO to take dynamic, application-specific actions to customize its behaviour. Handlers are written in a simple sandboxed extension language, providing properties of safety and isolation.ASO can modify its environment, monitor its execution,and make dynamic decisions about its state.&lt;br /&gt;
&lt;br /&gt;
Researchers try to provide the ability to extend a DHT without requiring a substantial investment of effort to modify its implementation.They try to implement to isolation and safety using restricting system access,restricting resource consumption and restricting within-Comet communication.&lt;br /&gt;
&lt;br /&gt;
* if someone wants to understand the consistent hashing in detail, here is a blog which explains it really well, this blog has other great posts in the field of distributed system as well -&lt;br /&gt;
http://loveforprogramming.quora.com/Distributed-Systems-Part-1-A-peek-into-consistent-hashing *&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_20&amp;diff=19026</id>
		<title>DistOS 2014W Lecture 20</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_20&amp;diff=19026"/>
		<updated>2014-04-19T22:52:50Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: Added periods, bullets, and spaces&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Cassandra ==&lt;br /&gt;
&lt;br /&gt;
Cassandra is essentially running a BigTable interface on top of a Dynamo infrastructure.  BigTable uses GFS&#039; built-in replication and Chubby for locking.  Cassandra uses gossip algorithms: [http://dl.acm.org/citation.cfm?id=1529983 Scuttlebutt].  &lt;br /&gt;
&lt;br /&gt;
Initialy Anil talked about google versus facebook approach to technologies. Google developed its technology internally and used for competitive advantage. Facebook developed its technology in open source manner. He talked little bit about licences. Gpl 3 you have to provide code with binary. In AGPL additional service also be given with source code.&lt;br /&gt;
&lt;br /&gt;
While discussing Hbase versus Cassandra discussed why two projects with same notion are supported?Apache as a community. For any tool in CS particularly software tools, its actually important to have more than one good implementation. Only time it doesn&#039;t happen because of market realities. &lt;br /&gt;
&lt;br /&gt;
Bigtable and Cassandra exposes similar apis. Bigtable needs GFS. Cassandra depends on server&#039;s file system. Anil feels cassandra cluster is easy to setup. Bigtable is designed for batch updates. Cassandra is for handling realtime stuff.&lt;br /&gt;
	&lt;br /&gt;
Schema design is explained in inbox example.It does not give clarity about how table will look like. Anil thinks they store lot data with messages which makes table crappy.&lt;br /&gt;
	&lt;br /&gt;
Cassandra is design for high speed access and online operation.&lt;br /&gt;
	&lt;br /&gt;
Apache Zookeeper is used for distributed configuration. Zookeeper is similar to chubby. Zookeeper is for node level information. Gossip is more about key partitioning.Zookeeper is for configuration of new node.&lt;br /&gt;
&lt;br /&gt;
Cassandra uses a modified version of the Accrual Failure Detector. The idea of an Accrual Failure Detection is that failure detection module emits a value which represents a suspicion level for each of monitored nodes. The idea is to express the value of phi� on a scale that is dynamically adjusted to react network and load conditions at the monitored nodes.&lt;br /&gt;
&lt;br /&gt;
Cassandra writes in immutable way like functional programming. There is no assignment in functional programming. It tries to eliminate side effects. Data is just binded you associate a name with a value. Garbage collection.&lt;br /&gt;
&lt;br /&gt;
Casandra - &lt;br /&gt;
* GFS type cluster which big table depends on &lt;br /&gt;
* Lighter weight &lt;br /&gt;
* All most of the readings are part of Apache&lt;br /&gt;
* More designed for online updates for interactive lower latency &lt;br /&gt;
* Once they write to disk they only read back&lt;br /&gt;
* Scalable multi master database with no single point of failure&lt;br /&gt;
* Reason for not giving out the complete detail on the table schema&lt;br /&gt;
* Probably not just inbox search&lt;br /&gt;
* All data in one row of a table &lt;br /&gt;
* Its not a key-value store. Big blob of data. &lt;br /&gt;
* Gossip based protocol - Scuttlebutt&lt;br /&gt;
* Fixed circular ring &lt;br /&gt;
* Consistency issue not addressed at all. Does writes in an immutable way. Never change them. &lt;br /&gt;
&lt;br /&gt;
Older style network protocol - token rings&lt;br /&gt;
What sort of computational systems avoid changing data?&lt;br /&gt;
Systems talking about implementing functional like semantics.&lt;br /&gt;
&lt;br /&gt;
== Comet ==&lt;br /&gt;
&lt;br /&gt;
The major idea behind Comet is triggers/callbacks.  There is an extensive literature in extensible operating systems, basically adding code to the operating system to better suit my application.  &amp;quot;Generally, extensible systems suck.&amp;quot; -[[User:Soma]]&lt;br /&gt;
&lt;br /&gt;
[https://www.usenix.org/conference/osdi10/comet-active-distributed-key-value-store The presentation video of Comet]&lt;br /&gt;
&lt;br /&gt;
Comet seeks to greatly expand the application space for key-value storage systems through application-specific customization.Comet storage object is a &amp;lt;key,value&amp;gt; pair.Each Comet node stores a collection of active storage objects (ASOs) that consist of a key, a value, and a set of handlers. Comet handlers run as a result of timers or storage operations, such as get or put, allowing an ASO to take dynamic, application-specific actions to customize its behaviour. Handlers are written in a simple sandboxed extension language, providing properties of safety and isolation.ASO can modify its environment, monitor its execution,and make dynamic decisions about its state.&lt;br /&gt;
&lt;br /&gt;
Researchers try to provide the ability to extend a DHT without requiring a substantial investment of effort to modify its implementation.They try to implement to isolation and safety using restricting system access,restricting resource consumption and restricting within-Comet communication.&lt;br /&gt;
&lt;br /&gt;
* if someone wants to understand the consistent hashing in detail, here is a blog which explains it really well, this blog has other great posts in the field of distributed system as well -&lt;br /&gt;
http://loveforprogramming.quora.com/Distributed-Systems-Part-1-A-peek-into-consistent-hashing *&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_19&amp;diff=19025</id>
		<title>DistOS 2014W Lecture 19</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_19&amp;diff=19025"/>
		<updated>2014-04-19T22:45:41Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: /* Consider the following */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Dynamo ==&lt;br /&gt;
&lt;br /&gt;
* Key value-store.&lt;br /&gt;
* Query model: key-value only&lt;br /&gt;
* Highly available, always writable.&lt;br /&gt;
* Guarantee Service Level Agreements (SLA).&lt;br /&gt;
* 0-hop DHT: it has direct link to the destination. Has complete view of system locally. No dynamic routing.&lt;br /&gt;
* Dynamo sacrifices consistency under certain failure scenarios.&lt;br /&gt;
* Consistent hashing to partition key-space: the output range of a hash function is treated as a fixed circular space or “ring”.&lt;br /&gt;
* Key-space is linear and the nodes partition it.&lt;br /&gt;
* ”Virtual Nodes”: Each server can be responsible for more than one virtual node.&lt;br /&gt;
* Each data item is replicated at N hosts.&lt;br /&gt;
* “preference list”: The list of nodes that is responsible for storing a particular key.&lt;br /&gt;
* Sacrifice strong consistency for availability.&lt;br /&gt;
** Eventual consistency.&lt;br /&gt;
* Decentralized, P2P, limited administration.&lt;br /&gt;
* it work with 100 servers,it is not more big.&lt;br /&gt;
* Application/client specific conflict resolution.&lt;br /&gt;
* Designed to be flexible&lt;br /&gt;
** &amp;quot;Tuneable consistency&amp;quot;&lt;br /&gt;
** Pluggable local persistence: DBD, MySQL.&lt;br /&gt;
&lt;br /&gt;
Amazon&#039;s motivating use case is that at no point, in a customer&#039;s shopping cart, should any newly added item be dropped. Dynamo should be highly available and always writeable.&lt;br /&gt;
&lt;br /&gt;
Amazon has an service oriented architecture. A response to a client is a composite of many services, so SLA&#039;s were a HUGE consideration when designing Dynamo. Amazon needed low latency and high availability to ensure a good user experience when aggregating all the services together.&lt;br /&gt;
&lt;br /&gt;
Traditional RDBMS emphasise ACID compliance. Amazon found that ACID compliancy lead to systems with far less availability. It&#039;s hard to have consistency and availability both at the same time. See [http://en.wikipedia.org/wiki/CAP_theorem CAP Theorem]. Dynamo can, and usually does sacrifice consistency for availability. They use the terms &amp;quot;eventual consistency&amp;quot; and &amp;quot;tunable consistency&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Key range is partitioned according to consistent hashing algorithm,which treats the output range as a fixed circular space or “ring”. Any time a new node joins in, it takes a token which decides its position on the ring. Every node becomes owner of key range which is in between itself and the previous node on the ring, so anytime a node comes in or leaves it only affects its neighbor nodes. Dynamo has this notion of virtual node, where a machine actually can host more than one node and hence allows to adjust the load according to the machine&#039;s capability. &lt;br /&gt;
&lt;br /&gt;
Dynamo uses replication to provide availability, each key-value is distributed to N-1 node (N can be configured by the application that uses Dynamo).&lt;br /&gt;
&lt;br /&gt;
Each node has a complete view of the network. A node knows the key-range that every node supports.  Any time a node joins, the gossip based protocols are used to inform every node about the key range changes. This allows for Dynamo to be a 0-hop network. 0-hop means it is logically 0 hop network. IP routing is still be required to actually physically get to the node. This 0-hop approach is different from typical distributed hash tables where routing and hops are used to find the node responsible for a key (eg. Tapestry). Dynamo can do this because the system is deployed on trusted, fully known, networks.&lt;br /&gt;
&lt;br /&gt;
Dynamo is deployed on trusted networks (ie. for amazon&#039;s internal applications. It doesn&#039;t have to worry about making the system secure. Compare this to Oceanstore.&lt;br /&gt;
&lt;br /&gt;
When compared to BigTable, Dynamo typically scales to hundreds of servers, not thousands. That is not to say that Dynamo can not scale, we need to understand the difference between the use cases for BigTable and Dynamo.&lt;br /&gt;
&lt;br /&gt;
Any &amp;quot;write&amp;quot; that is done on any replica is never held off to serialize the updates to maintain consistency, it will eventually try to reconcile the difference between two different versions( based on the logs) if it can not do so, the conflict resolution is left to the client application which would read data from Dynamo(If there are more than versions of a replica, all the versions along with the log is passed to client and client should reconcile the changes)&lt;br /&gt;
&lt;br /&gt;
== Bigtable ==&lt;br /&gt;
&lt;br /&gt;
* BigTable is a distributed storage system for managing structured data.&lt;br /&gt;
* Designed to scale to a very large size&lt;br /&gt;
* More focused on consistency than Dynamo.&lt;br /&gt;
&lt;br /&gt;
* A BigTable is a sparse, distributed persistent multi-dimensional sorted map.&lt;br /&gt;
* Column oriented DB.&lt;br /&gt;
** Streaming chunks of columns is easier than streaming entire rows.&lt;br /&gt;
&lt;br /&gt;
* Data Model: rows made up of column families.&lt;br /&gt;
** Eg. Row: the page URL. Column families would either be the content, or the set of inbound links.&lt;br /&gt;
** Each column in a column family has copies. Timestamped.&lt;br /&gt;
&lt;br /&gt;
* Tablets: Large tables broken into tablets at row boundaries and each raw Tablet holds contiguous range of sorted rows.&lt;br /&gt;
** Immutable b/c of GFS. Deletion happens via garbage collection.&lt;br /&gt;
&lt;br /&gt;
* An SSTable provides a persistent,ordered immutable map from keys to values, where both keys and values are arbitrary byte strings.&lt;br /&gt;
* Metadata operations: Create/delete tables, column families, change metadata.&lt;br /&gt;
&lt;br /&gt;
===Implementation:===&lt;br /&gt;
&lt;br /&gt;
* Centralized, hierchy.&lt;br /&gt;
* Three major components: client library, one master server, many tablet servers.&lt;br /&gt;
&lt;br /&gt;
* Master server&lt;br /&gt;
** Assigns tablets to tablet server.&lt;br /&gt;
** Detects tablet additions and removals&lt;br /&gt;
** garbage collection on GFS.&lt;br /&gt;
&lt;br /&gt;
* Tablet Servers&lt;br /&gt;
** holds tablet locations.&lt;br /&gt;
** Manages multiple tablets (thousands per tablet server)&lt;br /&gt;
** Handles I/O.&lt;br /&gt;
&lt;br /&gt;
* Client Library&lt;br /&gt;
** What devs use.&lt;br /&gt;
** Caches tablet locations&lt;br /&gt;
&lt;br /&gt;
=== Consider the following ===&lt;br /&gt;
&lt;br /&gt;
Can big table be used in a shopping cart type of scenario, where low latency and availability are the main focus. Can it be used like Dynamo? Yes, it can, but not as well. Big Table would have more latency because it was designed for Data procession and was not designed to work under such a scenario. Dynamo was designed for different use cases. There is no one solution that can solve all the problems in the world of distributed file systems, there is no silver bullet, no - one size fits all. File systems are usually designed for specific use cases and they work best for them, later if the need be they can be molded to work on other scenarios as well and they may provide good enough performance for the later added goals as well but they would work best for the use cases,which were the targets in the beginnings.&lt;br /&gt;
&lt;br /&gt;
* BigTable -&amp;gt; Highly consistent, Data Processing, Map Reduce, semi structured store&lt;br /&gt;
* Dynamo -&amp;gt; High availability, low latency, key-value store&lt;br /&gt;
&lt;br /&gt;
== General talk ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Read the introduction and conclusion for each paper and think about cases in the paper more than look to how the author solve the problem.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_19&amp;diff=19024</id>
		<title>DistOS 2014W Lecture 19</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_19&amp;diff=19024"/>
		<updated>2014-04-19T22:45:08Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: Added big table stuff, cleaned everything up.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Dynamo ==&lt;br /&gt;
&lt;br /&gt;
* Key value-store.&lt;br /&gt;
* Query model: key-value only&lt;br /&gt;
* Highly available, always writable.&lt;br /&gt;
* Guarantee Service Level Agreements (SLA).&lt;br /&gt;
* 0-hop DHT: it has direct link to the destination. Has complete view of system locally. No dynamic routing.&lt;br /&gt;
* Dynamo sacrifices consistency under certain failure scenarios.&lt;br /&gt;
* Consistent hashing to partition key-space: the output range of a hash function is treated as a fixed circular space or “ring”.&lt;br /&gt;
* Key-space is linear and the nodes partition it.&lt;br /&gt;
* ”Virtual Nodes”: Each server can be responsible for more than one virtual node.&lt;br /&gt;
* Each data item is replicated at N hosts.&lt;br /&gt;
* “preference list”: The list of nodes that is responsible for storing a particular key.&lt;br /&gt;
* Sacrifice strong consistency for availability.&lt;br /&gt;
** Eventual consistency.&lt;br /&gt;
* Decentralized, P2P, limited administration.&lt;br /&gt;
* it work with 100 servers,it is not more big.&lt;br /&gt;
* Application/client specific conflict resolution.&lt;br /&gt;
* Designed to be flexible&lt;br /&gt;
** &amp;quot;Tuneable consistency&amp;quot;&lt;br /&gt;
** Pluggable local persistence: DBD, MySQL.&lt;br /&gt;
&lt;br /&gt;
Amazon&#039;s motivating use case is that at no point, in a customer&#039;s shopping cart, should any newly added item be dropped. Dynamo should be highly available and always writeable.&lt;br /&gt;
&lt;br /&gt;
Amazon has an service oriented architecture. A response to a client is a composite of many services, so SLA&#039;s were a HUGE consideration when designing Dynamo. Amazon needed low latency and high availability to ensure a good user experience when aggregating all the services together.&lt;br /&gt;
&lt;br /&gt;
Traditional RDBMS emphasise ACID compliance. Amazon found that ACID compliancy lead to systems with far less availability. It&#039;s hard to have consistency and availability both at the same time. See [http://en.wikipedia.org/wiki/CAP_theorem CAP Theorem]. Dynamo can, and usually does sacrifice consistency for availability. They use the terms &amp;quot;eventual consistency&amp;quot; and &amp;quot;tunable consistency&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Key range is partitioned according to consistent hashing algorithm,which treats the output range as a fixed circular space or “ring”. Any time a new node joins in, it takes a token which decides its position on the ring. Every node becomes owner of key range which is in between itself and the previous node on the ring, so anytime a node comes in or leaves it only affects its neighbor nodes. Dynamo has this notion of virtual node, where a machine actually can host more than one node and hence allows to adjust the load according to the machine&#039;s capability. &lt;br /&gt;
&lt;br /&gt;
Dynamo uses replication to provide availability, each key-value is distributed to N-1 node (N can be configured by the application that uses Dynamo).&lt;br /&gt;
&lt;br /&gt;
Each node has a complete view of the network. A node knows the key-range that every node supports.  Any time a node joins, the gossip based protocols are used to inform every node about the key range changes. This allows for Dynamo to be a 0-hop network. 0-hop means it is logically 0 hop network. IP routing is still be required to actually physically get to the node. This 0-hop approach is different from typical distributed hash tables where routing and hops are used to find the node responsible for a key (eg. Tapestry). Dynamo can do this because the system is deployed on trusted, fully known, networks.&lt;br /&gt;
&lt;br /&gt;
Dynamo is deployed on trusted networks (ie. for amazon&#039;s internal applications. It doesn&#039;t have to worry about making the system secure. Compare this to Oceanstore.&lt;br /&gt;
&lt;br /&gt;
When compared to BigTable, Dynamo typically scales to hundreds of servers, not thousands. That is not to say that Dynamo can not scale, we need to understand the difference between the use cases for BigTable and Dynamo.&lt;br /&gt;
&lt;br /&gt;
Any &amp;quot;write&amp;quot; that is done on any replica is never held off to serialize the updates to maintain consistency, it will eventually try to reconcile the difference between two different versions( based on the logs) if it can not do so, the conflict resolution is left to the client application which would read data from Dynamo(If there are more than versions of a replica, all the versions along with the log is passed to client and client should reconcile the changes)&lt;br /&gt;
&lt;br /&gt;
== Bigtable ==&lt;br /&gt;
&lt;br /&gt;
* BigTable is a distributed storage system for managing structured data.&lt;br /&gt;
* Designed to scale to a very large size&lt;br /&gt;
* More focused on consistency than Dynamo.&lt;br /&gt;
&lt;br /&gt;
* A BigTable is a sparse, distributed persistent multi-dimensional sorted map.&lt;br /&gt;
* Column oriented DB.&lt;br /&gt;
** Streaming chunks of columns is easier than streaming entire rows.&lt;br /&gt;
&lt;br /&gt;
* Data Model: rows made up of column families.&lt;br /&gt;
** Eg. Row: the page URL. Column families would either be the content, or the set of inbound links.&lt;br /&gt;
** Each column in a column family has copies. Timestamped.&lt;br /&gt;
&lt;br /&gt;
* Tablets: Large tables broken into tablets at row boundaries and each raw Tablet holds contiguous range of sorted rows.&lt;br /&gt;
** Immutable b/c of GFS. Deletion happens via garbage collection.&lt;br /&gt;
&lt;br /&gt;
* An SSTable provides a persistent,ordered immutable map from keys to values, where both keys and values are arbitrary byte strings.&lt;br /&gt;
* Metadata operations: Create/delete tables, column families, change metadata.&lt;br /&gt;
&lt;br /&gt;
===Implementation:===&lt;br /&gt;
&lt;br /&gt;
* Centralized, hierchy.&lt;br /&gt;
* Three major components: client library, one master server, many tablet servers.&lt;br /&gt;
&lt;br /&gt;
* Master server&lt;br /&gt;
** Assigns tablets to tablet server.&lt;br /&gt;
** Detects tablet additions and removals&lt;br /&gt;
** garbage collection on GFS.&lt;br /&gt;
&lt;br /&gt;
* Tablet Servers&lt;br /&gt;
** holds tablet locations.&lt;br /&gt;
** Manages multiple tablets (thousands per tablet server)&lt;br /&gt;
** Handles I/O.&lt;br /&gt;
&lt;br /&gt;
* Client Library&lt;br /&gt;
** What devs use.&lt;br /&gt;
** Caches tablet locations&lt;br /&gt;
&lt;br /&gt;
=== Consider the following ===&lt;br /&gt;
&lt;br /&gt;
Can big table be used in a shopping cart type of scenario, where low latency and availability are the main focus. Can it be used like Dynamo? Yes, it can, but not as well. Big Table would have more latency because it was designed for Data procession and was not designed to work under such a scenario. Dynamo was designed for different use cases. There is no one solution that can solve all the problems in the world of distributed file systems, there is no silver bullet, no - one size fits all. File systems are usually designed for specific use cases and they work best for them, later if the need be they can be molded to work on other scenarios as well and they may provide good enough performance for the later added goals as well but they would work best for the use cases,which were the targets in the beginnings.&lt;br /&gt;
&lt;br /&gt;
BigTable -&amp;gt; Highly consistent, Data Processing, Map Reduce, semi structured store&lt;br /&gt;
Dynamo -&amp;gt; High availability, low latency, key-value store&lt;br /&gt;
&lt;br /&gt;
== General talk ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Read the introduction and conclusion for each paper and think about cases in the paper more than look to how the author solve the problem.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_19&amp;diff=19023</id>
		<title>DistOS 2014W Lecture 19</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_19&amp;diff=19023"/>
		<updated>2014-04-19T18:21:21Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: Added a line about P2P and decentrlization.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Dynamo ==&lt;br /&gt;
&lt;br /&gt;
* Key value-store.&lt;br /&gt;
* Query model: key-value only&lt;br /&gt;
* Highly available, always writable.&lt;br /&gt;
* Guarantee Service Level Agreements (SLA).&lt;br /&gt;
* 0-hop DHT: it has direct link to the destination. Has complete view of system locally. No dynamic routing.&lt;br /&gt;
* Dynamo sacrifices consistency under certain failure scenarios.&lt;br /&gt;
* Consistent hashing to partition key-space: the output range of a hash function is treated as a fixed circular space or “ring”.&lt;br /&gt;
* Key-space is linear and the nodes partition it.&lt;br /&gt;
* ”Virtual Nodes”: Each server can be responsible for more than one virtual node.&lt;br /&gt;
* Each data item is replicated at N hosts.&lt;br /&gt;
* “preference list”: The list of nodes that is responsible for storing a particular key.&lt;br /&gt;
* Sacrifice strong consistency for availability.&lt;br /&gt;
** Eventual consistency.&lt;br /&gt;
* Decentralized, P2P, limited administration.&lt;br /&gt;
* it work with 100 servers,it is not more big.&lt;br /&gt;
* Application/client specific conflict resolution.&lt;br /&gt;
* Designed to be flexible&lt;br /&gt;
** &amp;quot;Tuneable consistency&amp;quot;&lt;br /&gt;
** Pluggable local persistence: DBD, MySQL.&lt;br /&gt;
&lt;br /&gt;
Amazon&#039;s motivating use case is that at no point, in a customer&#039;s shopping cart, should any newly added item be dropped. Dynamo should be highly available and always writeable.&lt;br /&gt;
&lt;br /&gt;
Amazon has an service oriented architecture. A response to a client is a composite of many services, so SLA&#039;s were a HUGE consideration when designing Dynamo. Amazon needed low latency and high availability to ensure a good user experience when aggregating all the services together.&lt;br /&gt;
&lt;br /&gt;
Traditional RDBMS emphasise ACID compliance. Amazon found that ACID compliancy lead to systems with far less availability. It&#039;s hard to have consistency and availability both at the same time. See [http://en.wikipedia.org/wiki/CAP_theorem CAP Theorem]. Dynamo can, and usually does sacrifice consistency for availability. They use the terms &amp;quot;eventual consistency&amp;quot; and &amp;quot;tunable consistency&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Key range is partitioned according to consistent hashing algorithm,which treats the output range as a fixed circular space or “ring”. Any time a new node joins in, it takes a token which decides its position on the ring. Every node becomes owner of key range which is in between itself and the previous node on the ring, so anytime a node comes in or leaves it only affects its neighbor nodes. Dynamo has this notion of virtual node, where a machine actually can host more than one node and hence allows to adjust the load according to the machine&#039;s capability. &lt;br /&gt;
&lt;br /&gt;
Dynamo uses replication to provide availability, each key-value is distributed to N-1 node (N can be configured by the application that uses Dynamo).&lt;br /&gt;
&lt;br /&gt;
Each node has a complete view of the network. A node knows the key-range that every node supports.  Any time a node joins, the gossip based protocols are used to inform every node about the key range changes. This allows for Dynamo to be a 0-hop network. 0-hop means it is logically 0 hop network. IP routing is still be required to actually physically get to the node. This 0-hop approach is different from typical distributed hash tables where routing and hops are used to find the node responsible for a key (eg. Tapestry). Dynamo can do this because the system is deployed on trusted, fully known, networks.&lt;br /&gt;
&lt;br /&gt;
Dynamo is deployed on trusted networks (ie. for amazon&#039;s internal applications. It doesn&#039;t have to worry about making the system secure. Compare this to Oceanstore.&lt;br /&gt;
&lt;br /&gt;
When compared to BigTable, Dynamo typically scales to hundreds of servers, not thousands. That is not to say that Dynamo can not scale, we need to understand the difference between the use cases for BigTable and Dynamo.&lt;br /&gt;
&lt;br /&gt;
Any &amp;quot;write&amp;quot; that is done on any replica is never held off to serialize the updates to maintain consistency, it will eventually try to reconcile the difference between two different versions( based on the logs) if it can not do so, the conflict resolution is left to the client application which would read data from Dynamo(If there are more than versions of a replica, all the versions along with the log is passed to client and client should reconcile the changes)&lt;br /&gt;
&lt;br /&gt;
== Bigtable ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* BigTable is a distributed storage system for managing structured data.&lt;br /&gt;
* Designed to scale to a very large size&lt;br /&gt;
* it stores the column together ,the raw is web pages and the column is the contents.&lt;br /&gt;
* Each pages have incoming links &lt;br /&gt;
* A BigTable is a sparse, distributed persistent multi-dimensional sorted map.&lt;br /&gt;
* it have a many columns and it is look as table.&lt;br /&gt;
* Each raw has arbitrary column.&lt;br /&gt;
* It is multi-dimension map.&lt;br /&gt;
* An SSTable provides a persistent,ordered immutable map from keys to values, where both keys and values are arbitrary byte strings.&lt;br /&gt;
* Large tables broken into tablets at row boundaries and each raw Tablet holds contiguous range of rows.&lt;br /&gt;
* Metadata operations: Create/delete tables, column families, change metadata.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The question to consider is- can big table be used in a shopping cart type of scenario, where latency and availability are the main focus( or to rephrase the question- can big table be used in place of dynamo and vice- versa ). The answer is- it can be but it wouldn&#039;t be as good as dynamo at latency parameter, Dynamo would probably do a lot better than big table but the reason is that big table was not designed to work under such a scenario, its use cases were different. There is no one solution that can solve all the problems in the world of distributed file systems, there is no silver bullet, no - one size fits all. file systems are usually designed for specific use cases and they work best for them, later if the need be they can be molded to work on other scenarios as well and they may provide good enough performance for the later added goals as well but they would work best for the use cases,which were the targets in the beginnings.&lt;br /&gt;
&lt;br /&gt;
== General talk ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Read the introduction and conclusion for each paper and think about cases in the paper more than look to how the author solve the problem.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_19&amp;diff=19022</id>
		<title>DistOS 2014W Lecture 19</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_19&amp;diff=19022"/>
		<updated>2014-04-19T18:19:04Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: Added a ton of stuff to Dynamo. Rewrote a lot of paragraphs to proper english.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Dynamo ==&lt;br /&gt;
&lt;br /&gt;
* Key value-store.&lt;br /&gt;
* Query model: key-value only&lt;br /&gt;
* Highly available, always writable.&lt;br /&gt;
* Guarantee Service Level Agreements (SLA).&lt;br /&gt;
* 0-hop DHT: it has direct link to the destination. Has complete view of system locally. No dynamic routing.&lt;br /&gt;
* Dynamo sacrifices consistency under certain failure scenarios.&lt;br /&gt;
* Consistent hashing to partition key-space: the output range of a hash function is treated as a fixed circular space or “ring”.&lt;br /&gt;
* Key-space is linear and the nodes partition it.&lt;br /&gt;
* ”Virtual Nodes”: Each server can be responsible for more than one virtual node.&lt;br /&gt;
* Each data item is replicated at N hosts.&lt;br /&gt;
* “preference list”: The list of nodes that is responsible for storing a particular key.&lt;br /&gt;
* Sacrifice strong consistency for availability.&lt;br /&gt;
** Eventual consistency.&lt;br /&gt;
* it work with 100 servers,it is not more big.&lt;br /&gt;
* Application/client specific conflict resolution.&lt;br /&gt;
* Designed to be flexible&lt;br /&gt;
** &amp;quot;Tuneable consistency&amp;quot;&lt;br /&gt;
** Pluggable local persistence: DBD, MySQL.&lt;br /&gt;
&lt;br /&gt;
Amazon&#039;s motivating use case is that at no point, in a customer&#039;s shopping cart, should any newly added item be dropped. Dynamo should be highly available and always writeable.&lt;br /&gt;
&lt;br /&gt;
Amazon has an service oriented architecture. A response to a client is a composite of many services, so SLA&#039;s were a HUGE consideration when designing Dynamo. Amazon needed low latency and high availability to ensure a good user experience when aggregating all the services together.&lt;br /&gt;
&lt;br /&gt;
Traditional RDBMS emphasise ACID compliance. Amazon found that ACID compliancy lead to systems with far less availability. It&#039;s hard to have consistency and availability both at the same time. See [http://en.wikipedia.org/wiki/CAP_theorem CAP Theorem]. Dynamo can, and usually does sacrifice consistency for availability. They use the terms &amp;quot;eventual consistency&amp;quot; and &amp;quot;tunable consistency&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Key range is partitioned according to consistent hashing algorithm,which treats the output range as a fixed circular space or “ring”. Any time a new node joins in, it takes a token which decides its position on the ring. Every node becomes owner of key range which is in between itself and the previous node on the ring, so anytime a node comes in or leaves it only affects its neighbor nodes. Dynamo has this notion of virtual node, where a machine actually can host more than one node and hence allows to adjust the load according to the machine&#039;s capability. &lt;br /&gt;
&lt;br /&gt;
Dynamo uses replication to provide availability, each key-value is distributed to N-1 node (N can be configured by the application that uses Dynamo).&lt;br /&gt;
&lt;br /&gt;
Each node has a complete view of the network. A node knows the key-range that every node supports.  Any time a node joins, the gossip based protocols are used to inform every node about the key range changes. This allows for Dynamo to be a 0-hop network. 0-hop means it is logically 0 hop network. IP routing is still be required to actually physically get to the node. This 0-hop approach is different from typical distributed hash tables where routing and hops are used to find the node responsible for a key (eg. Tapestry). Dynamo can do this because the system is deployed on trusted, fully known, networks.&lt;br /&gt;
&lt;br /&gt;
Dynamo is deployed on trusted networks (ie. for amazon&#039;s internal applications. It doesn&#039;t have to worry about making the system secure. Compare this to Oceanstore.&lt;br /&gt;
&lt;br /&gt;
When compared to BigTable, Dynamo typically scales to hundreds of servers, not thousands. That is not to say that Dynamo can not scale, we need to understand the difference between the use cases for BigTable and Dynamo.&lt;br /&gt;
&lt;br /&gt;
Any &amp;quot;write&amp;quot; that is done on any replica is never held off to serialize the updates to maintain consistency, it will eventually try to reconcile the difference between two different versions( based on the logs) if it can not do so, the conflict resolution is left to the client application which would read data from Dynamo(If there are more than versions of a replica, all the versions along with the log is passed to client and client should reconcile the changes)&lt;br /&gt;
&lt;br /&gt;
== Bigtable ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* BigTable is a distributed storage system for managing structured data.&lt;br /&gt;
* Designed to scale to a very large size&lt;br /&gt;
* it stores the column together ,the raw is web pages and the column is the contents.&lt;br /&gt;
* Each pages have incoming links &lt;br /&gt;
* A BigTable is a sparse, distributed persistent multi-dimensional sorted map.&lt;br /&gt;
* it have a many columns and it is look as table.&lt;br /&gt;
* Each raw has arbitrary column.&lt;br /&gt;
* It is multi-dimension map.&lt;br /&gt;
* An SSTable provides a persistent,ordered immutable map from keys to values, where both keys and values are arbitrary byte strings.&lt;br /&gt;
* Large tables broken into tablets at row boundaries and each raw Tablet holds contiguous range of rows.&lt;br /&gt;
* Metadata operations: Create/delete tables, column families, change metadata.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The question to consider is- can big table be used in a shopping cart type of scenario, where latency and availability are the main focus( or to rephrase the question- can big table be used in place of dynamo and vice- versa ). The answer is- it can be but it wouldn&#039;t be as good as dynamo at latency parameter, Dynamo would probably do a lot better than big table but the reason is that big table was not designed to work under such a scenario, its use cases were different. There is no one solution that can solve all the problems in the world of distributed file systems, there is no silver bullet, no - one size fits all. file systems are usually designed for specific use cases and they work best for them, later if the need be they can be molded to work on other scenarios as well and they may provide good enough performance for the later added goals as well but they would work best for the use cases,which were the targets in the beginnings.&lt;br /&gt;
&lt;br /&gt;
== General talk ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Read the introduction and conclusion for each paper and think about cases in the paper more than look to how the author solve the problem.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_18&amp;diff=19018</id>
		<title>DistOS 2014W Lecture 18</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_18&amp;diff=19018"/>
		<updated>2014-04-19T02:01:39Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: Added more Tapestry stuff. Cleaned up the page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Distributed Hash Tables (March 18)==&lt;br /&gt;
&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Distributed_hash_table Wikipedia&#039;s article on Distributed Hash Tables]&lt;br /&gt;
* [http://pdos.csail.mit.edu/~strib/docs/tapestry/tapestry_jsac03.pdf Zhao et al, &amp;quot;Tapestry: A Resilient Global-Scale Overlay for Service Deployment&amp;quot; (JSAC 2003)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Distributed Hash Table Overview ==&lt;br /&gt;
&lt;br /&gt;
A Distributed Hash Table (DHT) is a fast lookup structure of &amp;lt;key,value&amp;gt; pairs,&lt;br /&gt;
distributed across many nodes in a network.  Keys are hashed to generate the &lt;br /&gt;
index at which the value can be found.  Depending on the nature of the hash &lt;br /&gt;
function, typically, only exact queries may be returned.  &lt;br /&gt;
&lt;br /&gt;
Usually, each node has a partial view of &lt;br /&gt;
the hash table, as opposed to a full replica. They don&#039;t know exactly which other node is responsible for a given key.  This has given rise to a number &lt;br /&gt;
of different routing techniques:&lt;br /&gt;
* A centralized server may maintain a list of all keys and associated nodes at which the value can be found.  This method involves a single point of failure.&lt;br /&gt;
** eg. Napster&lt;br /&gt;
* Flooding: Each node may query all connected nodes.  This method has performance and scalability shortcomings but had the benefit of being decentralized.&lt;br /&gt;
** eg. Gnutella&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Consistent_hashing Consistent Hashing] The keyspace can be partitioned such that nodes will maintain the values for keys that hash to similar indices (e.g., within a certain hamming distance). Given a query, nodes do not know specifically on which node a key is located, but they do know a few nodes (a proper subset of the network) located &amp;quot;closer&amp;quot; to the key. The query then continues onto the closest node. This seems to be the most popular technique for DHTs. It&#039;s biggest benefit is that nodes can be added and removed without notifying every other node on the network.&lt;br /&gt;
** eg. Tapestry&lt;br /&gt;
&lt;br /&gt;
==Tapestry:==&lt;br /&gt;
Tapestry is an overlay network which makes use of a DHT to provide routing for&lt;br /&gt;
distributed applications.  Similar to IP routing, not all nodes need to be &lt;br /&gt;
directly connected to each other: they can query a subset of neighbours for&lt;br /&gt;
information about which nodes are responsible for certain parts of the keyspace.&lt;br /&gt;
Routing is performed in such a way that nodes are aware of their &#039;&#039;distance&#039;&#039;&lt;br /&gt;
to the object being queried.  Hence objects can be located with low latency&lt;br /&gt;
without the need to migrate actual object data between nodes. &lt;br /&gt;
&lt;br /&gt;
Tapestry was built for Oceanstore. Oceanstore was built for the open internet. Nodes would be constantly added and removed. Chances are, the network topology would change. That&#039;s why you&#039;d need a dynamic routing system.&lt;br /&gt;
&lt;br /&gt;
* Decentralized and P2P. Self organizing.&lt;br /&gt;
* Distributed.&lt;br /&gt;
* Simple key-value store.&lt;br /&gt;
* look up table contains : key and value&lt;br /&gt;
* DNS as tree but Tapestry as hercically structured.&lt;br /&gt;
* How does the information flow? Each node has a neighbour table which that contains the neighbour&#039;s number.&lt;br /&gt;
** From initialization, each node has a locally optimal routing table that it maintains&lt;br /&gt;
** Routing happens digit by digit&lt;br /&gt;
&lt;br /&gt;
* Tapestry API:&lt;br /&gt;
** have four operations called PublishObject, UnpublishObject, RouteToObject, RouteToNode.&lt;br /&gt;
** each node has ID and each endpoint object has a GUID (Globally unique identifier).&lt;br /&gt;
&lt;br /&gt;
* Tapestry look like operating system.&lt;br /&gt;
** it has two models,one is built on UDP protocol and the other on TCP protocol.&lt;br /&gt;
&lt;br /&gt;
Fun fact, it is now called [http://current.cs.ucsb.edu/projects/chimera/ Chimera].&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_18&amp;diff=19017</id>
		<title>DistOS 2014W Lecture 18</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_18&amp;diff=19017"/>
		<updated>2014-04-19T01:31:05Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: Added info about DHT&amp;#039;s and tapestry&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Distributed Hash Tables (March 18)==&lt;br /&gt;
&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Distributed_hash_table Wikipedia&#039;s article on Distributed Hash Tables]&lt;br /&gt;
* [http://pdos.csail.mit.edu/~strib/docs/tapestry/tapestry_jsac03.pdf Zhao et al, &amp;quot;Tapestry: A Resilient Global-Scale Overlay for Service Deployment&amp;quot; (JSAC 2003)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Distributed Hash Table Overview ==&lt;br /&gt;
&lt;br /&gt;
A Distributed Hash Table (DHT) is a fast lookup structure of &amp;lt;key,value&amp;gt; pairs,&lt;br /&gt;
distributed across many nodes in a network.  Keys are hashed to generate the &lt;br /&gt;
index at which the value can be found.  Depending on the nature of the hash &lt;br /&gt;
function, typically, only exact queries may be returned.  &lt;br /&gt;
&lt;br /&gt;
Usually, each node has a partial view of &lt;br /&gt;
the hash table, as opposed to a full replica. They don&#039;t know exactly which other node is responsible for a given key.  This has given rise to a number &lt;br /&gt;
of different routing techniques:&lt;br /&gt;
* A centralized server may maintain a list of all keys and associated nodes at which the value can be found.  This method involves a single point of failure. &lt;br /&gt;
** eg. Napster&lt;br /&gt;
* Flooding: Each node may query all connected nodes.  This method has performance and scalability shortcomings but had the benefit of being decentralized.&lt;br /&gt;
** eg. Gnutella&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Consistent_hashing Consistent Hashing] The keyspace can be partitioned such that nodes will maintain the values for keys that hash to similar indices (e.g., within a certain hamming distance). Given a query, nodes do not know specifically on which node a key is located, but they do know a few nodes (a proper subset of the network) located &amp;quot;closer&amp;quot; to the key. The query then continues onto the closest node.&lt;br /&gt;
** eg. Tapestry&lt;br /&gt;
&lt;br /&gt;
==Tapestry:==&lt;br /&gt;
Tapestry is an overlay network which makes use of a DHT to provide routing for&lt;br /&gt;
distributed applications.  Similar to IP routing, not all nodes need to be &lt;br /&gt;
directly connected to each other: they can query a subset of neighbours for&lt;br /&gt;
information about which nodes are responsible for certain parts of the keyspace.&lt;br /&gt;
Routing is performed in such a way that nodes are aware of their &#039;&#039;distance&#039;&#039;&lt;br /&gt;
to the object being queried.  Hence objects can be located with low latency&lt;br /&gt;
without the need to migrate actual object data between nodes.  Tapestry has been used in some academic applications such as OceanStore.&lt;br /&gt;
&lt;br /&gt;
**Tapestry&lt;br /&gt;
* Distributed .&lt;br /&gt;
* Simple key-value store.&lt;br /&gt;
* using DHT ( distributed hash table).&lt;br /&gt;
* look up table contains : key and value&lt;br /&gt;
* DNS as tree but Tapestry as hercically structure.&lt;br /&gt;
&lt;br /&gt;
**More dtails about Tapestry:&lt;br /&gt;
** how the information flow?&lt;br /&gt;
* each nod has neighbour table which that contains the node neighbour number.&lt;br /&gt;
&lt;br /&gt;
** Tapestry API:&lt;br /&gt;
* have four operations called &lt;br /&gt;
* each node has ID and each endpoint has GUID (Globally unique identifier).&lt;br /&gt;
&lt;br /&gt;
**Tapestry look like operating system.&lt;br /&gt;
* it has two models,one is built on UDP protocol and the other on TCP protocol.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_16&amp;diff=19016</id>
		<title>DistOS 2014W Lecture 16</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_16&amp;diff=19016"/>
		<updated>2014-04-19T00:33:43Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: /* Keywords */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Public Resource Computing&lt;br /&gt;
&lt;br /&gt;
== Outline for upcoming lectures ==&lt;br /&gt;
&lt;br /&gt;
All the papers that would be covered in upcoming lectures have been posted on Wiki. These papers will be more difficult in comparison to the papers we have covered so far, so we should be prepared to allot more time for studying these papers and come prepared in class. We may abandon the way of discussing the papers in group and instead everyone would ask the questions about what,they did not understand from paper so it would allow us to discuss the technical detail better.&lt;br /&gt;
Professor will not be taking the next class, instead our TA would discuss the two papers on how to conduct a literature survey, which should help with our projects. &lt;br /&gt;
The rest of the papers will deal with many closely related systems. In particular, we will be looking at distributed hash tables and systems that use distributed hash tables.&lt;br /&gt;
&lt;br /&gt;
After looking at the material from today, we will also be looking at how we can get the kind of distribution that we get with public resource computing, but with greater flexibility.&lt;br /&gt;
&lt;br /&gt;
== Project proposal==&lt;br /&gt;
There were 11 proposals and out of which professor found 4 to be in the state of getting accepted and has graded them 10/10. professor has mailed to everyone with the feedback about the project proposal so that we can incorporate those comments and submit the project proposals by coming Saturday ( the extended deadline). the deadline has been extended so that every one can work out the flaws in their proposal and get the best grades (10/10).&lt;br /&gt;
Project Presentation are to be held on 1st and 3rd april. People who got 10/10 should be ready to present on Tuesday as they are ahead and better prepared for it, there should be 6 presentation on Tuesday and rest on Thursday.   &lt;br /&gt;
Under-grad will have their final exam on 24th April. 24th April is also the date to turn-in the final project report.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Public Resource Computing (March 11)==&lt;br /&gt;
&lt;br /&gt;
* Anderson et al., &amp;quot;SETI@home: An Experiment in Public-Resource Computing&amp;quot; (CACM 2002) [http://dx.doi.org/10.1145/581571.581573 (DOI)] [http://dl.acm.org.proxy.library.carleton.ca/citation.cfm?id=581573 (Proxy)]&lt;br /&gt;
* Anderson, &amp;quot;BOINC: A System for Public-Resource Computing and Storage&amp;quot; (Grid Computing 2004) [http://dx.doi.org/10.1109/GRID.2004.14 (DOI)] [http://ieeexplore.ieee.org.proxy.library.carleton.ca/stamp/stamp.jsp?tp=&amp;amp;arnumber=1382809 (Proxy)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Keywords ===&lt;br /&gt;
BOINC &amp;amp; SETI@Home: Lowered entry barriers, master/slave relationship, work units, [Embarrassingly_parallel http://en.wikipedia.org/wiki/Embarrassingly_parallel], inverted use-cases, gamification, redundant computing, consentual bot nets, centralized authority, untrusted clients, replication as reliability, exponential backoff, limited server reliability engineering.&lt;br /&gt;
&lt;br /&gt;
Embarrassingly parallel: ease of parallization, communication to computation ratio, discrete work units, abstractions help, map reduce.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The paper assigned for readings were on SETI and BOINC. BOINC is the system SETI is built upon, there are other projects running on the same system like Folding@home etc. In particular, we want to discuss the following:&lt;br /&gt;
What is public resource computing? How does public resource computing relate to the various computational models and systems that we have seen this semester? How are they similar in design, purpose, and technologies? How is it different?&lt;br /&gt;
 &lt;br /&gt;
The main purpose of public resource computing was to have a universally accessible, easy-to-use, way of sharing resources. This is interesting as it differs from some of the systems we have looked at that deal with the sharing of information rather than resources. &lt;br /&gt;
&lt;br /&gt;
For computational parallelism, you need a highly parallel problem. SETI@home and folding@home give examples of such problems. In public resource computing, particularly with the BOINC system, you divide the problem into work units. People voluntarily install the clients on their machines, running the program to work on work units that are sent to their clients in return for credits. &lt;br /&gt;
&lt;br /&gt;
In the past, it has been institutions, such as universities, running services with other people connecting in to use said service. Public resource computing turns this use case on its head, having the institutiton (e.g., the university) being the one using the service while other people are contributing to said service voluntarily. In the files systems we have covered so far, people would want access to the files stored in a network system, here a system wants to access people&#039;s machines to utilize the processing power of their machine. &lt;br /&gt;
&lt;br /&gt;
Since they are contributing voluntarily, how do you make these users care about the system if something were to happen? The gamification of the system causes many users to become invested in the system. People are doing work for credits and those with the most credits are showcased as major contributors. They can also see the amount of resources (e.g., process cycles) they have devoted to the cause on the GUI of the installed client. When the client produces results for the work unit it was processing, it sends the result to the server.&lt;br /&gt;
&lt;br /&gt;
Important to the design of the BOINC platform is that it was easily deployed by scientists (ie. non IT specialists). It was meant to lower the entry barrier for the types of scientific computing that lent itself to being embarrassingly parallel. The platform used a simple design with commodity software (PHP, Python, MySQL).&lt;br /&gt;
&lt;br /&gt;
For fault tolerance, such as malicious clients or faulty processors, redundant computing is done. Work units are processed multiple times.&lt;br /&gt;
Work units are later taken off of the clients as dictated by the following two cases:&lt;br /&gt;
# They receive the number of results, &#039;&#039;&#039;n&#039;&#039;&#039;, for a certain work unit, they take the answer that the majority gave.&lt;br /&gt;
# They have transmitted a work unit &#039;&#039;&#039;m&#039;&#039;&#039; times and have not gotten back the n expected responses. &lt;br /&gt;
It should be noted that, in doing this, it is possible that some work units are never processed. The probability of this happening can be reduced by increasing the value of &#039;&#039;&#039;m&#039;&#039;&#039;, though.&lt;br /&gt;
&lt;br /&gt;
In the case of SETI@Home, the amount of available work units is fixed. The system scales by increasing the amount of redundant computing. If more clients join the system, they just end up getting the same work units.&lt;br /&gt;
&lt;br /&gt;
=== Comparison to Botnets ===&lt;br /&gt;
So, given all this, how would we generally define public resource computing/public interest computing? It is essentially using the public as a resource--you are voluntarily giving up your extra compute cycles for projects (this is a little like donating blood--public resource computing is a vampire). Looking at public resource computing like this, we can contrast it with a botnet. What is the difference? Both system are utilizing client machines to perform/aid in some task. &lt;br /&gt;
&lt;br /&gt;
The answer: consent.&lt;br /&gt;
&lt;br /&gt;
You are consensually contributing to a project rather than being (unknowingly) forced to. Other differences are the ends/resources that you want as well as reliability. With a botnet, you can trust that a higher proportion of your users are following your commands exactly (as they have no idea they are performing them). Whereas, in public resource computing, how can you guarantee that clients are doing what you want? You can&#039;t. You can only verify the results.&lt;br /&gt;
  &lt;br /&gt;
=== General Comparisons ===&lt;br /&gt;
Basic Comparison with other File systems, we have covered so far -&lt;br /&gt;
&lt;br /&gt;
# Inverted use cases. In the files systems we have covered so far, clients would want access to the files stored in a network system, here a system wants to access clients&#039; machines to utilize the processing power of their machine. There is an inverted flow.&lt;br /&gt;
# In other file systems it was about many clients sharing the data, here it is more about sharing the processing power. In Folding@home, the system can store some of its data at client&#039;s storage but that is not the public resource computing&#039;s main focus.&lt;br /&gt;
# It is nothing like systems like OceanStore where there is no centralized authority, in BOINC the master/slave relationship between the centralized server and the clients installed across users&#039; machine can still be visualized and it is more like GFS in that sense because GFS also had a centralized metadata server.&lt;br /&gt;
# Public resource systems are like BOTNETs but people install these clients with consent and there is no need for communication between the clients ( it is not peer to peer network). It could be made to communicate at peer to peer level but it would risk security as clients are not trusted in the network&lt;br /&gt;
# Skype was modelled much like a public resource computing network (before Microsoft took over). The whole model of Skype was that the infrastructure just ran on the computers of those who had downloaded the clients (like a consensual botnet). Once a person downloaded the client, they would be a part of this system. As with public resource computing, you would donate some of your resources in order to support the distributed infrastructure. It was also not assumed that everyone was reliable, but would assume that some people are reliable some of the time. The network would choose super nodes to act as routers. These super nodes would be the machines with higher reliability and better processing powers. After MS&#039; takeover the supernodes have been centralized and the election of supernodes functionality has been removed from the system.&lt;br /&gt;
&lt;br /&gt;
=== Trust Model and Fault Tolerance ===&lt;br /&gt;
&lt;br /&gt;
In this central model, you have a central resource and distribute work to clients who process the work and send back results. Once they do, you can send them more work. In this model, can you trust the client to complete the computation successfully? The answer is not necessarily--there could be untrustworthy clients sending back rubbish answers.&lt;br /&gt;
&lt;br /&gt;
So, how does SETI address the questions of fault tolerance ? They use replication for reliability and redundant computing. Work units are assigned to multiple clients and the results that are returned to server can be analyzed to find the outliers in order to detect the malicious users but that addresses the situations of fault tolerance from client perspective. &lt;br /&gt;
&lt;br /&gt;
However, SETI has a centralized server, which can go down and when it does, it uses exponential back off to push back the clients and ask them to wait before sending the result again. But, whenever a server comes back up many clients may try to access the server at once and may crash the server once again--essentially, the server will have manufactured its own DDOS attack due to the server&#039;s own inadequacies. The Exponential back-off approach is similar to the one adopted in resolving the TCP congestion.  &lt;br /&gt;
&lt;br /&gt;
It can be noted that there is almost no reliability engineering here, though. These are just standard servers running with one backup that is manually failed over to. This can give an idea of how asymmetric the relationship is. &lt;br /&gt;
&lt;br /&gt;
One reason that this might be is to look at the actual service and who is running it. Reliability for a service is high when a high amount of people use the service and, hence, would be upset were the service to go down. In this case, it&#039;s the university using the service and clients are helping out by providing resources. If the service goes down, it is the university&#039;s fault and they can individually deal with it. It is interesting to compare this strategy to highly reliable systems like Ceph or Oceanstore, which could recover the data in case a node crashes.&lt;br /&gt;
&lt;br /&gt;
The idea of redundancy relates to Oceanstore a little, but how would Oceanstore map onto this idea of public resource computing? In place of the Oceanstore metadata cluster, there is a central server. In place of the data store, there are machines doing computation. Specifically, mapping on this model of public resource computing is the notion of having one central thing and a bunch of outlying nodes. This is very much a master/slave relationship, though it is a voluntary one. In this relationship, CPU cycles are cheap, but bandwidth is expensive, hence showing why work units are sent infrequently. The storage is in-between--sometimes data is pushed to the clients. When this is done, the resemblance of public resource computing to Oceanstore is stronger.&lt;br /&gt;
&lt;br /&gt;
=== Embarrassingly Parallell ===&lt;br /&gt;
&lt;br /&gt;
When you are doing parallel computations, you have to do a mixture of computation and communication. You&#039;re doing computation separately, but you always have to do some communication. But, how much communication do you have to do for every unit of computation? In some cases, there are many dependencies meaning that a high amount of communication is required (e.g., weather system simulations).&lt;br /&gt;
&lt;br /&gt;
Embarrassingly parallel means that a given problem requires a minimum of communication between the pieces of work. This typically means that you have a bunch of data that you want to analyze, and it&#039;s all independent. Due to this, you can just split up and distribute the work for analysis. In an embarrassingly parallel problem, computations are trivial, due to the minimum of communication, as the more processors you add, the faster the system will run. However, problems that are not embarrassingly parallel, the system can actually slow down when more processors are added as more communication is required. With distributed systems, you either need to accept communications costs or modify abstractions to allow you to get closer to an embarrassingly parallel system. Since speedup is trivial when the problem is embarrassingly parallel, you don&#039;t get much praise for doing it.&lt;br /&gt;
&lt;br /&gt;
SETI is an example of an &amp;quot;embarrassingly parallel&amp;quot; workload. The inherent nature of the problem lends itself to be divided into work-units and be computed in-parallel without any need to consolidate the results. It is called &amp;quot;embarrassingly parallel&amp;quot; because there is little to no effort required to distribute the work load in parallel.  &lt;br /&gt;
&lt;br /&gt;
One more example of &amp;quot;embarrassingly parallel&amp;quot; in what we have covered so far could be web-indexing in GFS. Any file system that we have discussed so far, which doesn&#039;t trust the clients can be modelled to work as public sharing system.&lt;br /&gt;
&lt;br /&gt;
Note: Public resource computing is also very similar to mapreduce, which we will be discussing later in the course. Make sure to keep public resource computing in mind when we reach this.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_16&amp;diff=19015</id>
		<title>DistOS 2014W Lecture 16</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_16&amp;diff=19015"/>
		<updated>2014-04-18T22:06:39Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: Keywords. Added a few paragraphs.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Public Resource Computing&lt;br /&gt;
&lt;br /&gt;
== Outline for upcoming lectures ==&lt;br /&gt;
&lt;br /&gt;
All the papers that would be covered in upcoming lectures have been posted on Wiki. These papers will be more difficult in comparison to the papers we have covered so far, so we should be prepared to allot more time for studying these papers and come prepared in class. We may abandon the way of discussing the papers in group and instead everyone would ask the questions about what,they did not understand from paper so it would allow us to discuss the technical detail better.&lt;br /&gt;
Professor will not be taking the next class, instead our TA would discuss the two papers on how to conduct a literature survey, which should help with our projects. &lt;br /&gt;
The rest of the papers will deal with many closely related systems. In particular, we will be looking at distributed hash tables and systems that use distributed hash tables.&lt;br /&gt;
&lt;br /&gt;
After looking at the material from today, we will also be looking at how we can get the kind of distribution that we get with public resource computing, but with greater flexibility.&lt;br /&gt;
&lt;br /&gt;
== Project proposal==&lt;br /&gt;
There were 11 proposals and out of which professor found 4 to be in the state of getting accepted and has graded them 10/10. professor has mailed to everyone with the feedback about the project proposal so that we can incorporate those comments and submit the project proposals by coming Saturday ( the extended deadline). the deadline has been extended so that every one can work out the flaws in their proposal and get the best grades (10/10).&lt;br /&gt;
Project Presentation are to be held on 1st and 3rd april. People who got 10/10 should be ready to present on Tuesday as they are ahead and better prepared for it, there should be 6 presentation on Tuesday and rest on Thursday.   &lt;br /&gt;
Under-grad will have their final exam on 24th April. 24th April is also the date to turn-in the final project report.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Public Resource Computing (March 11)==&lt;br /&gt;
&lt;br /&gt;
* Anderson et al., &amp;quot;SETI@home: An Experiment in Public-Resource Computing&amp;quot; (CACM 2002) [http://dx.doi.org/10.1145/581571.581573 (DOI)] [http://dl.acm.org.proxy.library.carleton.ca/citation.cfm?id=581573 (Proxy)]&lt;br /&gt;
* Anderson, &amp;quot;BOINC: A System for Public-Resource Computing and Storage&amp;quot; (Grid Computing 2004) [http://dx.doi.org/10.1109/GRID.2004.14 (DOI)] [http://ieeexplore.ieee.org.proxy.library.carleton.ca/stamp/stamp.jsp?tp=&amp;amp;arnumber=1382809 (Proxy)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Keywords ===&lt;br /&gt;
BOINC &amp;amp; SETI@Home: Lowered entry barriers, master/slave relationship, work units, [Embarrassingly_parallel http://en.wikipedia.org/wiki/Embarrassingly_parallel], inverted use-cases, gamification, redundant computing, consentual bot nets, centralized authority, untrusted clients, replication as reliability, exponential backoff, limited server reliability engineering.&lt;br /&gt;
&lt;br /&gt;
Embarrassingly parallel: easy of parallization, communication to computation ratio, discrete work units, abstractions help, map reduce.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The paper assigned for readings were on SETI and BOINC. BOINC is the system SETI is built upon, there are other projects running on the same system like Folding@home etc. In particular, we want to discuss the following:&lt;br /&gt;
What is public resource computing? How does public resource computing relate to the various computational models and systems that we have seen this semester? How are they similar in design, purpose, and technologies? How is it different?&lt;br /&gt;
 &lt;br /&gt;
The main purpose of public resource computing was to have a universally accessible, easy-to-use, way of sharing resources. This is interesting as it differs from some of the systems we have looked at that deal with the sharing of information rather than resources. &lt;br /&gt;
&lt;br /&gt;
For computational parallelism, you need a highly parallel problem. SETI@home and folding@home give examples of such problems. In public resource computing, particularly with the BOINC system, you divide the problem into work units. People voluntarily install the clients on their machines, running the program to work on work units that are sent to their clients in return for credits. &lt;br /&gt;
&lt;br /&gt;
In the past, it has been institutions, such as universities, running services with other people connecting in to use said service. Public resource computing turns this use case on its head, having the institutiton (e.g., the university) being the one using the service while other people are contributing to said service voluntarily. In the files systems we have covered so far, people would want access to the files stored in a network system, here a system wants to access people&#039;s machines to utilize the processing power of their machine. &lt;br /&gt;
&lt;br /&gt;
Since they are contributing voluntarily, how do you make these users care about the system if something were to happen? The gamification of the system causes many users to become invested in the system. People are doing work for credits and those with the most credits are showcased as major contributors. They can also see the amount of resources (e.g., process cycles) they have devoted to the cause on the GUI of the installed client. When the client produces results for the work unit it was processing, it sends the result to the server.&lt;br /&gt;
&lt;br /&gt;
Important to the design of the BOINC platform is that it was easily deployed by scientists (ie. non IT specialists). It was meant to lower the entry barrier for the types of scientific computing that lent itself to being embarrassingly parallel. The platform used a simple design with commodity software (PHP, Python, MySQL).&lt;br /&gt;
&lt;br /&gt;
For fault tolerance, such as malicious clients or faulty processors, redundant computing is done. Work units are processed multiple times.&lt;br /&gt;
Work units are later taken off of the clients as dictated by the following two cases:&lt;br /&gt;
# They receive the number of results, &#039;&#039;&#039;n&#039;&#039;&#039;, for a certain work unit, they take the answer that the majority gave.&lt;br /&gt;
# They have transmitted a work unit &#039;&#039;&#039;m&#039;&#039;&#039; times and have not gotten back the n expected responses. &lt;br /&gt;
It should be noted that, in doing this, it is possible that some work units are never processed. The probability of this happening can be reduced by increasing the value of &#039;&#039;&#039;m&#039;&#039;&#039;, though.&lt;br /&gt;
&lt;br /&gt;
In the case of SETI@Home, the amount of available work units is fixed. The system scales by increasing the amount of redundant computing. If more clients join the system, they just end up getting the same work units.&lt;br /&gt;
&lt;br /&gt;
=== Comparison to Botnets ===&lt;br /&gt;
So, given all this, how would we generally define public resource computing/public interest computing? It is essentially using the public as a resource--you are voluntarily giving up your extra compute cycles for projects (this is a little like donating blood--public resource computing is a vampire). Looking at public resource computing like this, we can contrast it with a botnet. What is the difference? Both system are utilizing client machines to perform/aid in some task. &lt;br /&gt;
&lt;br /&gt;
The answer: consent.&lt;br /&gt;
&lt;br /&gt;
You are consensually contributing to a project rather than being (unknowingly) forced to. Other differences are the ends/resources that you want as well as reliability. With a botnet, you can trust that a higher proportion of your users are following your commands exactly (as they have no idea they are performing them). Whereas, in public resource computing, how can you guarantee that clients are doing what you want? You can&#039;t. You can only verify the results.&lt;br /&gt;
  &lt;br /&gt;
=== General Comparisons ===&lt;br /&gt;
Basic Comparison with other File systems, we have covered so far -&lt;br /&gt;
&lt;br /&gt;
# Inverted use cases. In the files systems we have covered so far, clients would want access to the files stored in a network system, here a system wants to access clients&#039; machines to utilize the processing power of their machine. There is an inverted flow.&lt;br /&gt;
# In other file systems it was about many clients sharing the data, here it is more about sharing the processing power. In Folding@home, the system can store some of its data at client&#039;s storage but that is not the public resource computing&#039;s main focus.&lt;br /&gt;
# It is nothing like systems like OceanStore where there is no centralized authority, in BOINC the master/slave relationship between the centralized server and the clients installed across users&#039; machine can still be visualized and it is more like GFS in that sense because GFS also had a centralized metadata server.&lt;br /&gt;
# Public resource systems are like BOTNETs but people install these clients with consent and there is no need for communication between the clients ( it is not peer to peer network). It could be made to communicate at peer to peer level but it would risk security as clients are not trusted in the network&lt;br /&gt;
# Skype was modelled much like a public resource computing network (before Microsoft took over). The whole model of Skype was that the infrastructure just ran on the computers of those who had downloaded the clients (like a consensual botnet). Once a person downloaded the client, they would be a part of this system. As with public resource computing, you would donate some of your resources in order to support the distributed infrastructure. It was also not assumed that everyone was reliable, but would assume that some people are reliable some of the time. The network would choose super nodes to act as routers. These super nodes would be the machines with higher reliability and better processing powers. After MS&#039; takeover the supernodes have been centralized and the election of supernodes functionality has been removed from the system.&lt;br /&gt;
&lt;br /&gt;
=== Trust Model and Fault Tolerance ===&lt;br /&gt;
&lt;br /&gt;
In this central model, you have a central resource and distribute work to clients who process the work and send back results. Once they do, you can send them more work. In this model, can you trust the client to complete the computation successfully? The answer is not necessarily--there could be untrustworthy clients sending back rubbish answers.&lt;br /&gt;
&lt;br /&gt;
So, how does SETI address the questions of fault tolerance ? They use replication for reliability and redundant computing. Work units are assigned to multiple clients and the results that are returned to server can be analyzed to find the outliers in order to detect the malicious users but that addresses the situations of fault tolerance from client perspective. &lt;br /&gt;
&lt;br /&gt;
However, SETI has a centralized server, which can go down and when it does, it uses exponential back off to push back the clients and ask them to wait before sending the result again. But, whenever a server comes back up many clients may try to access the server at once and may crash the server once again--essentially, the server will have manufactured its own DDOS attack due to the server&#039;s own inadequacies. The Exponential back-off approach is similar to the one adopted in resolving the TCP congestion.  &lt;br /&gt;
&lt;br /&gt;
It can be noted that there is almost no reliability engineering here, though. These are just standard servers running with one backup that is manually failed over to. This can give an idea of how asymmetric the relationship is. &lt;br /&gt;
&lt;br /&gt;
One reason that this might be is to look at the actual service and who is running it. Reliability for a service is high when a high amount of people use the service and, hence, would be upset were the service to go down. In this case, it&#039;s the university using the service and clients are helping out by providing resources. If the service goes down, it is the university&#039;s fault and they can individually deal with it. It is interesting to compare this strategy to highly reliable systems like Ceph or Oceanstore, which could recover the data in case a node crashes.&lt;br /&gt;
&lt;br /&gt;
The idea of redundancy relates to Oceanstore a little, but how would Oceanstore map onto this idea of public resource computing? In place of the Oceanstore metadata cluster, there is a central server. In place of the data store, there are machines doing computation. Specifically, mapping on this model of public resource computing is the notion of having one central thing and a bunch of outlying nodes. This is very much a master/slave relationship, though it is a voluntary one. In this relationship, CPU cycles are cheap, but bandwidth is expensive, hence showing why work units are sent infrequently. The storage is in-between--sometimes data is pushed to the clients. When this is done, the resemblance of public resource computing to Oceanstore is stronger.&lt;br /&gt;
&lt;br /&gt;
=== Embarrassingly Parallell ===&lt;br /&gt;
&lt;br /&gt;
When you are doing parallel computations, you have to do a mixture of computation and communication. You&#039;re doing computation separately, but you always have to do some communication. But, how much communication do you have to do for every unit of computation? In some cases, there are many dependencies meaning that a high amount of communication is required (e.g., weather system simulations).&lt;br /&gt;
&lt;br /&gt;
Embarrassingly parallel means that a given problem requires a minimum of communication between the pieces of work. This typically means that you have a bunch of data that you want to analyze, and it&#039;s all independent. Due to this, you can just split up and distribute the work for analysis. In an embarrassingly parallel problem, computations are trivial, due to the minimum of communication, as the more processors you add, the faster the system will run. However, problems that are not embarrassingly parallel, the system can actually slow down when more processors are added as more communication is required. With distributed systems, you either need to accept communications costs or modify abstractions to allow you to get closer to an embarrassingly parallel system. Since speedup is trivial when the problem is embarrassingly parallel, you don&#039;t get much praise for doing it.&lt;br /&gt;
&lt;br /&gt;
SETI is an example of an &amp;quot;embarrassingly parallel&amp;quot; workload. The inherent nature of the problem lends itself to be divided into work-units and be computed in-parallel without any need to consolidate the results. It is called &amp;quot;embarrassingly parallel&amp;quot; because there is little to no effort required to distribute the work load in parallel.  &lt;br /&gt;
&lt;br /&gt;
One more example of &amp;quot;embarrassingly parallel&amp;quot; in what we have covered so far could be web-indexing in GFS. Any file system that we have discussed so far, which doesn&#039;t trust the clients can be modelled to work as public sharing system.&lt;br /&gt;
&lt;br /&gt;
Note: Public resource computing is also very similar to mapreduce, which we will be discussing later in the course. Make sure to keep public resource computing in mind when we reach this.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_16&amp;diff=19014</id>
		<title>DistOS 2014W Lecture 16</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_16&amp;diff=19014"/>
		<updated>2014-04-18T21:29:07Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: Typos&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Public Resource Computing&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Outline for upcoming lectures ==&lt;br /&gt;
&lt;br /&gt;
All the papers that would be covered in upcoming lectures have been posted on Wiki. These papers will be more difficult in comparison to the papers we have covered so far, so we should be prepared to allot more time for studying these papers and come prepared in class. We may abandon the way of discussing the papers in group and instead everyone would ask the questions about what,they did not understand from paper so it would allow us to discuss the technical detail better.&lt;br /&gt;
Professor will not be taking the next class, instead our TA would discuss the two papers on how to conduct a literature survey, which should help with our projects. &lt;br /&gt;
The rest of the papers will deal with many closely related systems. In particular, we will be looking at distributed hash tables and systems that use distributed hash tables.&lt;br /&gt;
&lt;br /&gt;
After looking at the material from today, we will also be looking at how we can get the kind of distribution that we get with public resource computing, but with greater flexibility.&lt;br /&gt;
&lt;br /&gt;
== Project proposal==&lt;br /&gt;
There were 11 proposals and out of which professor found 4 to be in the state of getting accepted and has graded them 10/10. professor has mailed to everyone with the feedback about the project proposal so that we can incorporate those comments and submit the project proposals by coming Saturday ( the extended deadline). the deadline has been extended so that every one can work out the flaws in their proposal and get the best grades (10/10).&lt;br /&gt;
Project Presentation are to be held on 1st and 3rd april. People who got 10/10 should be ready to present on Tuesday as they are ahead and better prepared for it, there should be 6 presentation on Tuesday and rest on Thursday.   &lt;br /&gt;
Under-grad will have their final exam on 24th April. 24th April is also the date to turn-in the final project report.&lt;br /&gt;
&lt;br /&gt;
== Public Resource Computing  ==&lt;br /&gt;
&lt;br /&gt;
The paper assigned for readings were on SETI and BOINC. BOINC is the system SETI is built upon, there are other projects running on the same system like Folding@home etc. In particular, we want to discuss the following:&lt;br /&gt;
What is public resource computing? How does public resource computing relate to the various computational models and systems that we have seen this semester? How are they similar in design, purpose, and technologies? How is it different?&lt;br /&gt;
 &lt;br /&gt;
The main purpose of public resource computing was to have a universally accessible, easy-to-use, way of sharing resources. This is interesting as it differs from some of the systems we have looked at that deal with the sharing of information rather than resources. &lt;br /&gt;
&lt;br /&gt;
For computational parallelism, you need a highly parallel problem. SETI@home and folding@home give examples of such problems. In public resource computing, particularly with the BOINC system, you divide the problem into work units. People voluntarily install the clients on their machines, running the program to work on work units that are sent to their clients in return for credits. In the past, it has been institutions, such as universities, running services with other people connecting in to use said service. Public resource computing turns this use case on its head, having the institutiton (e.g., the university) being the one using the service while other people are contributing to said service voluntarily. In the files systems we have covered so far, people would want access to the files stored in a network system, here a system wants to access people&#039;s machines to utilize the processing power of their machine. &lt;br /&gt;
&lt;br /&gt;
Since they are contributing voluntarily, how do you make these users care about the system if something were to happen? The gamification of the system causes many users to become invested in the system. People are doing work for credits and those with the most credits are showcased as major contributors. They can also see the amount of resources (e.g., process cycles) they have devoted to the cause on the GUI of the installed client. When the client produces results for the work unit it was processing, it sends the result to the server.&lt;br /&gt;
&lt;br /&gt;
For fault tolerance, such as malicious clients or faulty processors, redundant computing is done. Work units are processed multiple times.&lt;br /&gt;
Work units are later taken off of the clients as dictated by the following two cases:&lt;br /&gt;
# They receive the number of results, &#039;&#039;&#039;n&#039;&#039;&#039;, for a certain work unit, they take the answer that the majority gave.&lt;br /&gt;
# They have transmitted a work unit &#039;&#039;&#039;m&#039;&#039;&#039; times and have not gotten back the n expected responses. &lt;br /&gt;
It should be noted that, in doing this, it is possible that some work units are never processed. The probability of this happening can be reduced by increasing the value of &#039;&#039;&#039;m&#039;&#039;&#039;, though.&lt;br /&gt;
&lt;br /&gt;
=== General Discussion ===&lt;br /&gt;
So, given all this, how would we generally define public resource computing/public interest computing? It is essentially using the public as a resource--you are voluntarily giving up your extra compute cycles for projects (this is a little like donating blood--public resource computing is a vampire). Looking at public resource computing like this, we can contrast it with a botnet. What is the difference? Both system are utilizing client machines to perform/aid in some task. The answer: consent. You are consensually contributing to a project rather than being (unknowingly) forced to. Other differences are the ends/resources that you want as well as reliability. With a botnet, you can trust that a higher proportion of your users are following your commands exactly (as they have no idea they are performing them). Whereas, in public resource computing, how can you guarantee that clients are doing what you want?&lt;br /&gt;
  &lt;br /&gt;
=== Comparisons ===&lt;br /&gt;
Basic Comparison with other File systems , we have covered so far -&lt;br /&gt;
&lt;br /&gt;
# Use-Cases have been turned on their head. In the files systems we have covered so far, People would want access to the files stored in a network system, here a system wants to access people&#039;s machines to utilize the processing power of their machine.&lt;br /&gt;
# In other file systems it was about many clients sharing the data, here it is more about sharing the processing power. In Folding@home, the system can store some of its data at client&#039;s storage but that is not the public resource computing&#039;s main focus.&lt;br /&gt;
# It is nothing like systems like OceanStore where there is no centralized authority, in BOINC the master/slave relationship between the centralized server and the clients installed across users&#039; machine can still be visualized and it is more like GFS in that sense because GFS also had a centralized metadata server.&lt;br /&gt;
# Public resource systems are like BOTNETs but people install these clients with consent and there is no need for communication between the clients ( it is not peer to peer network). It could be made to communicate at peer to peer level but it would risk security as clients are not trusted in the network&lt;br /&gt;
# Skype was modelled much like a public resource computing network (before Microsoft took over). The whole model of Skype was that the infrastructure just ran on the computers of those who had downloaded the clients (like a consensual botnet). Once a person downloaded the client, they would be a part of this system. As with public resource computing, you would donate some of your resources in order to support the distributed infrastructure. It was also not assumed that everyone was reliable, but would assume that some people are reliable some of the time. The network would choose super nodes to act as routers. These super nodes would be the machines with higher reliability and better processing powers. After MS&#039; takeover the supernodes have been centralized and the election of supernodes functionality has been removed from the system.&lt;br /&gt;
&lt;br /&gt;
=== Trust Model and Fault Tolerance ===&lt;br /&gt;
&lt;br /&gt;
In this central model, you have a central resource and distribute work to clients who proess the work and send back results. Once they do, you can send them more work. In this model, can you trust the client to complete the computation successfully? The answer is not necessarily--there could be untrustworthy clients sending back rubbish answers.&lt;br /&gt;
&lt;br /&gt;
So, how does SETI address the questions of fault tolerance ? They use replication for reliability and redundant computing. Work units are assigned to multiple clients and the results that are returned to server can be analyzed to find the outliers in order to detect the malicious users but that addresses the situations of fault tolerance from client perspective. &lt;br /&gt;
&lt;br /&gt;
However, SETI has a centralized server, which can go down and when it does, it uses exponential back off to push back the clients and ask them to wait before sending the result again. But, whenever a server comes back up many clients may try to access the server at once and may crash the server once again--essentially, the server will have manufactured its own DDOS attack due to the server&#039;s own inadequacies. The Exponential back-off approach is similar to the one adopted in resolving the TCP congestion.  &lt;br /&gt;
&lt;br /&gt;
It can be noted that there is almost no reliability engineering here, though. These are just standard servers running with one backup that is manually failed over to. This can give an idea of how asymmetric the relationship is. &lt;br /&gt;
&lt;br /&gt;
One reason that this might be is to look at the actual service and who is running it. Reliability for a service is high when a high amount of people use the service and, hence, would be upset were the service to go down. In this case, it&#039;s the university using the service and clients are helping out by providing resources. If the service goes down, it is the university&#039;s fault and they can individually deal with it. It is interesting to compare this strategy to highly reliable systems like Ceph or Oceanstore, which could recover the data in case a node crashes.&lt;br /&gt;
&lt;br /&gt;
The idea of redundancy relates to Oceanstore a little, but how would Oceanstore map onto this idea of public resource computing? In place of the Oceanstore metadata cluster, there is a central server. In place of the data store, there are machines doing computation. Specifically, mapping on this model of public resource computing is the notion of having one central thing and a bunch of outlying nodes. This is very much a master/slave relationship, though it is a voluntary one. In this relationship, CPU cycles are cheap, but bandwidth is expensive, hence showing why work units are sent infrequently. The storage is in-between--sometimes data is pushed to the clients. When this is done, the resemblance of public resource computing to Oceanstore is stronger.&lt;br /&gt;
&lt;br /&gt;
=== Embarrassingly Parallell ===&lt;br /&gt;
&lt;br /&gt;
When you are doing parallel computations, you have to do a mixture of computation and communication. You&#039;re doing computation separately, but you always have to do some communication. But, how much communication do you have to do for every unit of computation? In some cases, there are many dependencies meaning that a high amount of communication is required (e.g., weather system simulations).&lt;br /&gt;
&lt;br /&gt;
Embarrassingly parallel means that a given problem requires a minimum of communication between the pieces of work. This typically means that you have a bunch of data that you want to analyze, and it&#039;s all independent. Due to this, you can just split up and distribute the work for analysis. In an embarrassingly parallel problem, computations are trivial, due to the minimum of communication, as the more processors you add, the faster the system will run. However, problems that are not embarrassingly parallel, the system can actually slow down when more processors are added as more communication is required. With distributed systems, you either need to accept communications costs or modify abstractions to allow you to get closer to an embarrassingly parallel system. Since speedup is trivial when the problem is embarrassingly parallel, you don&#039;t get much praise for doing it.&lt;br /&gt;
&lt;br /&gt;
SETI is an example of an &amp;quot;embarrassingly parallel&amp;quot; workload. The inherent nature of the problem lends itself to be divided into work-units and be computed in-parallel without any need to consolidate the results. It is called &amp;quot;embarrassingly parallel&amp;quot; because there is little to no effort required to distribute the work load in parallel.  &lt;br /&gt;
&lt;br /&gt;
One more example of &amp;quot;embarrassingly parallel&amp;quot; in what we have covered so far could be web-indexing in GFS. Any file system that we have discussed so far, which doesn&#039;t trust the clients can be modelled to work as public sharing system.&lt;br /&gt;
&lt;br /&gt;
Note: Public resource computing is also very similar to mapreduce, which we will be discussing later in the course. Make sure to keep public resource computing in mind when we reach this.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=User:Cdelahou&amp;diff=19013</id>
		<title>User:Cdelahou</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=User:Cdelahou&amp;diff=19013"/>
		<updated>2014-04-18T20:18:08Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;quot;I have no idea where I am or what I&#039;m doing here. What&#039;s my name? Are you my mommy?&amp;quot; - Christian Delahousse&lt;br /&gt;
&lt;br /&gt;
Fourth year CS student. Took [[Operating Systems (Fall 2012)]] and [[Distributed_OS:_Winter_2014]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://christian.delahousse.ca Christian Delahousse]&lt;br /&gt;
&lt;br /&gt;
^^^^^^^^^^^^^&lt;br /&gt;
We call that SEO juice.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_15&amp;diff=19012</id>
		<title>DistOS 2014W Lecture 15</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_15&amp;diff=19012"/>
		<updated>2014-04-18T20:16:56Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: added linebreak&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Designing Exercise&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Can we do any kind of distributed system without crypto? We can&#039;t trust crypto...&lt;br /&gt;
&lt;br /&gt;
What are the main features we need to consider for such a system ? &lt;br /&gt;
*Limited Sharing&lt;br /&gt;
*Integrity&lt;br /&gt;
*Availability&lt;br /&gt;
&lt;br /&gt;
Perhaps probabilistically...&lt;br /&gt;
&lt;br /&gt;
Want to be able to put data in, have it distributed, and be able to get it out on some other machine. This kind of sharing would need identification or authentication process.&lt;br /&gt;
&lt;br /&gt;
Availability: &amp;quot;distribute the crap out of it&amp;quot;, doesn&#039;t need crypto. No corruption of data. &lt;br /&gt;
&lt;br /&gt;
Integrity: hashing, but we assume hashes can be forged. If we want to know that we got the same file, then simply send each other the file and compare.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Big Takeaway&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Everything you do with crypto is a refinement of what you can already do in&lt;br /&gt;
weaker forms with weaker assumptions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note on Project Proposal&#039;&#039;&#039; &lt;br /&gt;
* Date has been extended until next week. As Prof said some of the proposals are not completely up to mark.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_15&amp;diff=19011</id>
		<title>DistOS 2014W Lecture 15</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_15&amp;diff=19011"/>
		<updated>2014-04-18T20:16:36Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: Added big takeaway&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Designing Exercise&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Can we do any kind of distributed system without crypto? We can&#039;t trust crypto...&lt;br /&gt;
&lt;br /&gt;
What are the main features we need to consider for such a system ? &lt;br /&gt;
*Limited Sharing&lt;br /&gt;
*Integrity&lt;br /&gt;
*Availability&lt;br /&gt;
&lt;br /&gt;
Perhaps probabilistically...&lt;br /&gt;
&lt;br /&gt;
Want to be able to put data in, have it distributed, and be able to get it out on some other machine. This kind of sharing would need identification or authentication process.&lt;br /&gt;
&lt;br /&gt;
Availability: &amp;quot;distribute the crap out of it&amp;quot;, doesn&#039;t need crypto. No corruption of data. &lt;br /&gt;
&lt;br /&gt;
Integrity: hashing, but we assume hashes can be forged. If we want to know that we got the same file, then simply send each other the file and compare.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Big Takeaway&#039;&#039;&#039;&lt;br /&gt;
Everything you do with crypto is a refinement of what you can already do in&lt;br /&gt;
weaker forms with weaker assumptions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note on Project Proposal&#039;&#039;&#039; &lt;br /&gt;
* Date has been extended until next week. As Prof said some of the proposals are not completely up to mark.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_14&amp;diff=19010</id>
		<title>DistOS 2014W Lecture 14</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_14&amp;diff=19010"/>
		<updated>2014-04-18T20:13:30Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: added stuff, move stuff around.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=OceanStore=&lt;br /&gt;
&lt;br /&gt;
* [http://homeostasis.scs.carleton.ca/~soma/distos/fall2008/oceanstore-sigplan.pdf John Kubiatowicz et al., &amp;quot;OceanStore: An Architecture for Global-Scale Persistent Storage&amp;quot; (2000)]&lt;br /&gt;
* [http://homeostasis.scs.carleton.ca/~soma/distos/fall2008/fast2003-pond.pdf Sean Rhea et al., &amp;quot;Pond: the OceanStore Prototype&amp;quot; (2003)]&lt;br /&gt;
* [http://oceanstore.cs.berkeley.edu/info/overview.html Project Overview]&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
Highly available, universally available, utility business model, untrusted servers, nomadic data, promiscuous caching, immutable version-based archival storage, highly persistent, pond, tapestry (DHT), broken dreams.&lt;br /&gt;
&lt;br /&gt;
==What is the dream?==&lt;br /&gt;
The dream was to create a persistent storage system that had high availability and was universally accessibly--a global, ubiquitous persistent data storage solution. OceanStore was meant to be utility managed by multiple parties, with no one party having total control/monopoly over the system. &lt;br /&gt;
&lt;br /&gt;
The basic assumption made by the designers of OceanStore, however, was that none of the servers could be trusted. It would be built over the open internet. To support this, the system held only opaque/encrypted data. As such, the system could be used for more than files (e.g., for whole databases). &lt;br /&gt;
&lt;br /&gt;
The second basic assumption was that the system utilized nomadic data. Information was divorced from a physical location. Information was stored and replicated everywhere. It used promiscuous caching to cache information near its users. This is unlike with NFS and AFS where only specific servers cache the data.&lt;br /&gt;
&lt;br /&gt;
To support the goal of high availability, there was a high amount of redundancy and fault-tolerance. For high persistence, everything was archived--nothing was ever truly deleted. This can be likened to working in version control with &amp;quot;Commits&amp;quot;. This is possibly due to the realization that the easier it is to delete things, the easier it is to lose things.&lt;br /&gt;
&lt;br /&gt;
==Why did the dream die?==&lt;br /&gt;
&lt;br /&gt;
The biggest reason that caused the OceanStore dream to die was the assumption of mistrusting all the actors--everything else they did was right. This assumption, however, caused the system to become needlessly complicated as they had to rebuild &#039;&#039;everything&#039;&#039; to accommodate this assumption. This was also unrealistic as this is not an assumption that is generally made (i.e., it is normally assumed that at least some of the actors can be trusted). &lt;br /&gt;
&lt;br /&gt;
Other successful distributed systems are built on a more trusted model. Every node in Dynamo, BigTable, etc. is trusted. In short, the solution that accommodates untrusted actors assumption is just too expensive.&lt;br /&gt;
&lt;br /&gt;
=== Technology ===&lt;br /&gt;
As outlined above, the trust model (read: fundamentally untrusted model) is the most attractive feature which ultimately killed it. The untrusted assumption introduced a huge burden on the system, forcing technical limitations which made OceanStore uncompetitive in comparison to other solutions. It is just much more easy and convenient to trust a given system. It should be noted that every system is compromisable, despite this mistrust. &lt;br /&gt;
&lt;br /&gt;
The public key system also reduces usability--if a user loses their key, they are completely out of luck and would need to acquire a new key. This also means that, if you wanted to remove their access over an object, you would have to re-encrypt the object with a new key and provide that key to said user, who would then have access to the object.&lt;br /&gt;
&lt;br /&gt;
With regards to the security, there is no security mechanism on the server side. The server can not know who is accessing the data. On the economic side, the economic model is unconvincing with the way it is defined. The authors suggest that a collection of companies will host OceanStore servers and consumers will buy capacity (not unlike web-hosting today).&lt;br /&gt;
&lt;br /&gt;
===Use Cases===&lt;br /&gt;
A subset of the features outlined for OceanStore already exist. For example, Blackberry and Google offer similar groupware services (eg. email, contact lists, etc.) These current services are owned by one company, however, not many providers. You can also not sell back your services as a user (e.g., you can&#039;t sell your extra storage back to the utility).&lt;br /&gt;
&lt;br /&gt;
==Pond: What insights?==&lt;br /&gt;
In short: they actually built it! However, due to the untrusted assumption, they can&#039;t assume the use of any infrastructure, causing them to rebuild &#039;&#039;everything&#039;&#039;! It was built over the internet with Tapestry (dynamic routing) and GUID for object identification (object naming scheme).&lt;br /&gt;
&lt;br /&gt;
==Benchmarks==&lt;br /&gt;
In short: the system had really good read speed, really bad write speed. Absolutely everything is expensive and there is high latency.&lt;br /&gt;
&lt;br /&gt;
===Storage overhead===&lt;br /&gt;
One general question was how much are they increasing the storage needed to implement their storage model? The answer: a factor of 4.8x the space is needed (you&#039;ll have 1/5th the storage). While this is expensive, it does have a good value as your data is backed up, replicated, etc. However, it does cause one to consider how important it is to make an update as you burn more storage space as more updates are made. &lt;br /&gt;
&lt;br /&gt;
===Update performance===&lt;br /&gt;
None of the data is mutated--it is diffed and archived (ie. a &amp;quot;commit). You are essentially creating a new version of an object and then distributing that object to all nodes.&lt;br /&gt;
&lt;br /&gt;
==Other stuff==&lt;br /&gt;
&#039;&#039;&#039;Byzantine fault tolerance&#039;&#039;&#039;&lt;br /&gt;
* Byzantine fault tolerance has the assumption that there are malicious actors in your system.&lt;br /&gt;
* byzantine fault tolerant network replicates the data in such a way that even if m nodes out of total n nodes,in a network,fail, you would still be able to recover the whole data. but as you increase the value of number m, the required network messages to be exchanges also increases, so there is a tradeoff.&lt;br /&gt;
* You are assuming certain actors are malicious.&lt;br /&gt;
&#039;&#039;&#039;Bitcoin&#039;&#039;&#039;&lt;br /&gt;
* Trusted vs Untrusted.&lt;br /&gt;
* It is considered to be untrusted but it takes huge amount of trust when exchanges are made.&lt;br /&gt;
&lt;br /&gt;
==What&#039;s worth salvaging from the dream?==&lt;br /&gt;
Some of the good things that we can salvage are using spare resources in other locations. It can also be noted that similar routing systems are used in large peer to peer systems.&lt;br /&gt;
&lt;br /&gt;
==How to read a research paper==&lt;br /&gt;
# Start with the Introduction to figure out what the problem is.&lt;br /&gt;
# See/read through the related work/background for context of the paper.&lt;br /&gt;
# Go to the conclusion and focus on the results (i.e., figure out what they actually did).&lt;br /&gt;
# Fill in the gaps by reading specific parts of the body.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_14&amp;diff=18715</id>
		<title>DistOS 2014W Lecture 14</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_14&amp;diff=18715"/>
		<updated>2014-03-04T16:24:33Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: ADded more info for rest of class&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=OceanStore=&lt;br /&gt;
&lt;br /&gt;
==What is the dream?==&lt;br /&gt;
* High availabitility, universally accessible.&lt;br /&gt;
* Utility managed by multiple parties.&lt;br /&gt;
* Highly redundant, fault tolerant&lt;br /&gt;
* Basic assumption was that servers would NOT be trusted.&lt;br /&gt;
&lt;br /&gt;
* Highly persistent&lt;br /&gt;
** Everything archived&lt;br /&gt;
** Everything saved, nothing deleted. &amp;quot;Commits&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Service was untrusted&lt;br /&gt;
** Held opaque/encrypted data.&lt;br /&gt;
* Would have been used for more than files. (eg. DB&#039;s, etc.)&lt;br /&gt;
&lt;br /&gt;
==Why did the dream die?==&lt;br /&gt;
&lt;br /&gt;
* Biggest reason it died was it&#039;s assumption of mistrusting the actors.&lt;br /&gt;
** Everything else they did was right.&lt;br /&gt;
* Other successful distributed systems are built on a more trusted model.&lt;br /&gt;
&lt;br /&gt;
=== Technology ===&lt;br /&gt;
* The trust model is the most attractive feature which ultimately killed it.&lt;br /&gt;
** The untrusted assumption was a huge burden on the system. Forced technical limitations made them uncompetitive.&lt;br /&gt;
** It is just easier to trust a given system. More convenient.&lt;br /&gt;
** Every system is compromisable despite this mistrust&lt;br /&gt;
* Pub key system reduces usability&lt;br /&gt;
** If you loose your key, you&#039;re S.O.L.&lt;br /&gt;
*security&lt;br /&gt;
**there is no security mechanism in servers side.&lt;br /&gt;
**can not now who access the data&lt;br /&gt;
*economic side&lt;br /&gt;
**The economic model is unconvincing as defined.  The authors suggest that a collection of companies will host OceanStore servers, and consumers will buy capacity (not unlike web-hosting of today).&lt;br /&gt;
&lt;br /&gt;
===Use Cases===&lt;br /&gt;
* Subset of the features already exist&lt;br /&gt;
** Blackberry and Google offer similar services.&lt;br /&gt;
** These current services owned by one company, not many providers.&lt;br /&gt;
** Can not sell back your services as a user.&lt;br /&gt;
*** ex. Can not sell your extra storage back to the utility.&lt;br /&gt;
&lt;br /&gt;
==Pond: What insights?==&lt;br /&gt;
&lt;br /&gt;
* They actually built it.&lt;br /&gt;
* Can&#039;t assume the use of any infrastructure, so they rebuild everything!&lt;br /&gt;
** Built over the internet.&lt;br /&gt;
** Tapestry (routing).&lt;br /&gt;
** GUID for object indentification. Object naming scheme.&lt;br /&gt;
&lt;br /&gt;
==Benchmarks==&lt;br /&gt;
* Really good read speed, really bad write speed.&lt;br /&gt;
&lt;br /&gt;
===Storage overhead===&lt;br /&gt;
* How much are they increasing the storage needed to implement their storage model.&lt;br /&gt;
* Factor of 4.8x the space needed (you&#039;ll have 1/5th the  storage)&lt;br /&gt;
* Expensive, but good value (data is backed up, replicated, etc..)&lt;br /&gt;
&lt;br /&gt;
===Update performance===&lt;br /&gt;
* No data is mutated. It is diffed and archived.&lt;br /&gt;
* Creating a new version of an object and distributing that object.&lt;br /&gt;
&lt;br /&gt;
===Benchmarks in a nutshell===&lt;br /&gt;
* Everything is expensive!&lt;br /&gt;
* High latency&lt;br /&gt;
&lt;br /&gt;
==Other stuff==&lt;br /&gt;
* Byzantine fault tolerance&lt;br /&gt;
** Assuming certain actors are malicious&lt;br /&gt;
&lt;br /&gt;
==What&#039;s worth salvaging from the dream?==&lt;br /&gt;
* Using spare resources in other locations.&lt;br /&gt;
&lt;br /&gt;
==How to read a research paper==&lt;br /&gt;
* Start with Intro&lt;br /&gt;
** Figure out what the problem is&lt;br /&gt;
* then see the related work for context&lt;br /&gt;
* then go to conclusion. Focus on results.&lt;br /&gt;
* then fill in the gaps by reading specific parts of the body&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_14&amp;diff=18714</id>
		<title>DistOS 2014W Lecture 14</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_14&amp;diff=18714"/>
		<updated>2014-03-04T16:15:42Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: Cleaned up some stuff a bit.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=OceanStore=&lt;br /&gt;
&lt;br /&gt;
==What is the dream?==&lt;br /&gt;
* High availabitility, universally accessible.&lt;br /&gt;
* Utility managed by multiple parties.&lt;br /&gt;
* Highly redundant, fault tolerant&lt;br /&gt;
* Basic assumption was that servers would NOT be trusted.&lt;br /&gt;
&lt;br /&gt;
* Highly persistent&lt;br /&gt;
** Everything archived&lt;br /&gt;
** Everything saved, nothing deleted. &amp;quot;Commits&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Service was untrusted&lt;br /&gt;
** Held opaque/encrypted data.&lt;br /&gt;
* Would have been used for more than files. (eg. DB&#039;s, etc.)&lt;br /&gt;
&lt;br /&gt;
==Why did the dream die?==&lt;br /&gt;
&lt;br /&gt;
=== Technology ===&lt;br /&gt;
* The trust model is the most attractive feature which ultimately killed it.&lt;br /&gt;
** The untrusted assumption was a huge burden on the system. Forced technical limitations made them uncompetitive.&lt;br /&gt;
** It is just easier to trust a given system. More convenient.&lt;br /&gt;
** Every system is compromisable despite this mistrust&lt;br /&gt;
* Pub key system reduces usability&lt;br /&gt;
** If you loose your key, you&#039;re S.O.L.&lt;br /&gt;
*security&lt;br /&gt;
**there is no security mechanism in servers side.&lt;br /&gt;
**can not now who access the data&lt;br /&gt;
*economic side&lt;br /&gt;
**The economic model is unconvincing as defined.  The authors suggest that a collection of companies will host OceanStore servers, and consumers will buy capacity (not unlike web-hosting of today).&lt;br /&gt;
&lt;br /&gt;
===Use Cases===&lt;br /&gt;
* Subset of the features already exist&lt;br /&gt;
** Blackberry and Google offer similar services.&lt;br /&gt;
** These current services owned by one company, not many providers.&lt;br /&gt;
** Can not sell back your services as a user.&lt;br /&gt;
*** ex. Can not sell your extra storage back to the utility.&lt;br /&gt;
&lt;br /&gt;
==Pond: What insights?==&lt;br /&gt;
&lt;br /&gt;
* They actually built it.&lt;br /&gt;
* Can&#039;t assume the use of any infrastructure, so they rebuild everything!&lt;br /&gt;
** Built over the internet.&lt;br /&gt;
** Tapestry (routing).&lt;br /&gt;
** GUID for object indentification. Object naming scheme.&lt;br /&gt;
&lt;br /&gt;
==Benchmarks==&lt;br /&gt;
* Really good read speed, really bad write speed.&lt;br /&gt;
&lt;br /&gt;
===Storage overhead===&lt;br /&gt;
* How much are they increasing the storage needed to implement their storage model.&lt;br /&gt;
* Factor of 4.8x the space needed (you&#039;ll have 1/5th the  storage)&lt;br /&gt;
* Expensive, but good value (data is backed up, replicated, etc..)&lt;br /&gt;
&lt;br /&gt;
===Update performance===&lt;br /&gt;
* No data is mutated. It is diffed and archived.&lt;br /&gt;
* Creating a new version of an object and distributing that object.&lt;br /&gt;
&lt;br /&gt;
===Benchmarks in a nutshell===&lt;br /&gt;
* Everything is expensive!&lt;br /&gt;
* High latency&lt;br /&gt;
&lt;br /&gt;
==Other stuff==&lt;br /&gt;
* Byzantine fault tolerance&lt;br /&gt;
** Assuming certain actors are malicious&lt;br /&gt;
&lt;br /&gt;
==What&#039;s worth salvaging from the dream?==&lt;br /&gt;
* Using spare resources in other locations.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_14&amp;diff=18711</id>
		<title>DistOS 2014W Lecture 14</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_14&amp;diff=18711"/>
		<updated>2014-03-04T16:05:38Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: Initial dump&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=OceanStore=&lt;br /&gt;
&lt;br /&gt;
==What is the dream?==&lt;br /&gt;
* High availabitility, universally available.&lt;br /&gt;
* Utility managed by multiple parties&lt;br /&gt;
* Highly redundant, fault tolerant&lt;br /&gt;
* Basic assumption was that servers would NOT be trusted.&lt;br /&gt;
&lt;br /&gt;
* Highly persistent&lt;br /&gt;
** Effective archival&lt;br /&gt;
** Everything saved, nothing deleted. &amp;quot;Commits&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Service was untrusted&lt;br /&gt;
** Held opaque data.&lt;br /&gt;
* Would be used for more than files. DB&#039;s, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Why did the dream die?==&lt;br /&gt;
&lt;br /&gt;
=== Technology ===&lt;br /&gt;
* The trust model is the most attractive feature which ultimately killed it.&lt;br /&gt;
** The untrusted assumption was a huge burden on the system. Forced technical&lt;br /&gt;
   limitations Made them uncompetitive.&lt;br /&gt;
** It is just easier to trust a given system&lt;br /&gt;
** Every system is compromisable despite this mistrust&lt;br /&gt;
* Pub key system reduces usability&lt;br /&gt;
** If you loose your key, you&#039;re S.O.L.&lt;br /&gt;
&lt;br /&gt;
===Use Cases===&lt;br /&gt;
* Subset of the features already exist&lt;br /&gt;
** Black berry. Google.&lt;br /&gt;
** Current services owned by one company, not many providers.&lt;br /&gt;
** Can not sell back your services as a user.&lt;br /&gt;
*** ex. Can not sell your extra storage back to the utility.&lt;br /&gt;
&lt;br /&gt;
==Pond: What insights?==&lt;br /&gt;
&lt;br /&gt;
* They actually built it.&lt;br /&gt;
&lt;br /&gt;
* Can&#039;t assume the use of any infrastructure, so they rebuild everything!&lt;br /&gt;
** Built over the internet.&lt;br /&gt;
** Tapestry&lt;br /&gt;
** GUID for object indentification. Object naming scheme.&lt;br /&gt;
&lt;br /&gt;
==Benchmarks==&lt;br /&gt;
* Really good read speed, really bad write speed.&lt;br /&gt;
&lt;br /&gt;
===Storage overhead===&lt;br /&gt;
* How much are they increasing the storage needed to implement their storage model.&lt;br /&gt;
* Factor of 4.8x the space needed (you&#039;ll have 1/5th the  storage)&lt;br /&gt;
* Expensive, but good value (data is backed up, replicated, etc..)&lt;br /&gt;
&lt;br /&gt;
==Update performance==&lt;br /&gt;
* No data is mutated. It is diffed and archived.&lt;br /&gt;
* Creating a new version of an object and distributing that object.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Other stuff==&lt;br /&gt;
* Byzantine fault tolerance&lt;br /&gt;
** Assuming certain actors are malicious&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_5&amp;diff=18670</id>
		<title>DistOS 2014W Lecture 5</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_5&amp;diff=18670"/>
		<updated>2014-02-24T02:16:43Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: Added stuff about the alto compared to the NLS system&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=The Mother of all Demos (Jan. 21)=&lt;br /&gt;
&lt;br /&gt;
* [http://www.dougengelbart.org/firsts/dougs-1968-demo.html Doug Engelbart Institute, &amp;quot;Doug&#039;s 1968 Demo&amp;quot;]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/The_Mother_of_All_Demos Wikipedia&#039;s page on &amp;quot;The Mother of all Demos&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Anil set the theme of the discussion for the week as - to try and understand what the early visionaries/researchers wanted the computer to be and what it has become. Putting in other words what was considered fundamental those days and where those stands today. It is to be noted that features that were easier to implement using simple mechanisms were carried forward where as the ones which demanded more complex systems or the one which were found out to add not much value in the near feature were pegged down in the order. In the same context following observations were made: (1) truly distributed computational infrastructure really makes sense only when we have something to distribute (2) use cases drive the large distributed systems, a good example is The Web. Another key observation from Anil was that there was always a Utopian aspect to the early systems be it NLS, ARPANET or Alto. One good example is that security aspects were never considered essential in those systems assuming them to operate in a trusted environment. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; Operating system&lt;br /&gt;
: The software that turns the computer you have into the one you want (Anil)&lt;br /&gt;
&lt;br /&gt;
* What sort of computer did we want to have?&lt;br /&gt;
* What sort of abstractions did they want to be easy? Hard?&lt;br /&gt;
* What could we build with the internet (not just WAN, but also LAN)?&lt;br /&gt;
* Most dreams people had of their computers smacked into the wall of reality.&lt;br /&gt;
&lt;br /&gt;
= MOAD review in groups =&lt;br /&gt;
&lt;br /&gt;
* Chorded keyboard unfortunately obscure, partly because the attendees disagreed with the long-term investment of training the user.&lt;br /&gt;
* View control → hyperlinking system, but in a lightweight (more like nanoweight) markup language.&lt;br /&gt;
* Ad-hoc ticketing system&lt;br /&gt;
* Ad-hoc messaging system&lt;br /&gt;
** Used on a time-sharing systme with shared storage,&lt;br /&gt;
* Primitive revision control system&lt;br /&gt;
* Different vocabulary:&lt;br /&gt;
** Bug and bug smear (mouse and trail)&lt;br /&gt;
** Point rather than click&lt;br /&gt;
&lt;br /&gt;
= Class review =&lt;br /&gt;
&lt;br /&gt;
* Doug died Jul 2 2013&lt;br /&gt;
* Doug himself called it an “online system”, rather than offline composition of code using card punchers as was common in the day.&lt;br /&gt;
* What became of the tech:&lt;br /&gt;
** Chorded keyboards:&lt;br /&gt;
*** Exist but obscure&lt;br /&gt;
** Pre-ARPANET network:&lt;br /&gt;
*** Time-sharing mainframe&lt;br /&gt;
*** 13 workstations&lt;br /&gt;
*** Telephone and television circuit&lt;br /&gt;
** Mouse&lt;br /&gt;
*** “I sometimes apologize for calling it a mouse”&lt;br /&gt;
** Collaborative document editing integrated with screen sharing&lt;br /&gt;
** Videoconferencing&lt;br /&gt;
*** Part of the vision, but more for the demo at the time,&lt;br /&gt;
** Hyperlinks&lt;br /&gt;
*** The web on a mainframe&lt;br /&gt;
** Languages&lt;br /&gt;
*** Metalanguages&lt;br /&gt;
**** “Part and parcel of their entire vision of augmenting human intelligence.”&lt;br /&gt;
**** You must teach the computer about the language you are using.&lt;br /&gt;
**** They were the use case. It was almost designed more for augmenting programmer intelligence rather than human intelligence.&lt;br /&gt;
*** It was normal for the time to build new languages (domain-specific) for new systems. Nowadays, we standardize on one but develop large APIs, at the expense of conciseness. We look for short-term benefits; we minimize programmer effort.&lt;br /&gt;
*** Compiler compiler&lt;br /&gt;
** Freeze-pane&lt;br /&gt;
** Folding—Zoomable UI (ZUI)&lt;br /&gt;
*** Lots of systems do it, but not the default&lt;br /&gt;
*** Much easier to just present everything.&lt;br /&gt;
** Technologies the required further investment got left behind.&lt;br /&gt;
* The NLS had little to no security&lt;br /&gt;
** There was a minimal notion of a user&lt;br /&gt;
** There was a utopian aspect. Meanwhile, the Mac had no utopian aspect. Data exchange was through floppies. Any network was small, local, ad-hoc, and among trusted peers.&lt;br /&gt;
** The system wasn&#039;t envisioned to scale up to masses of people who didn&#039;t trust each other.&lt;br /&gt;
** How do you enforce secrecy.&lt;br /&gt;
* Part of the reason for lack of adoption of some of the tech was hardware. We can posit that a bigger reason would be infrastructure.&lt;br /&gt;
* Differentiate usability of system from usability of vision&lt;br /&gt;
** What was missing was the polish, the ‘sexiness’, and the intuitiveness of later systems like the Apple II and the Lisa.&lt;br /&gt;
** The usability of the later Alto is still less than commercial systems.&lt;br /&gt;
*** The word processor was modal, which is apt to confuse unmotivated and untrained users.&lt;br /&gt;
* In the context of the Mother of All Demos, the Alto doesn&#039;t seem entirely revolutionary. Xerox PARC raided his team. They almost had a GUI; rather they had what we call today a virtual console, with a few things above.&lt;br /&gt;
* What happens with visionaries that present a big vision is that the spectators latch onto specific aspects.&lt;br /&gt;
* To be comfortable with not adopting the vision, one must ostracize the visionary. People pay attention to things that fit into their world view.&lt;br /&gt;
* Use cases of networking have changed little, though the means did&lt;br /&gt;
* Fundamentally a resource-sharing system; everything is shared, unlike later systems where you would need to explicitly do so. Resources shared fundamentally sense to share: documents, printers, etc.&lt;br /&gt;
* Resource sharing was never enough. &#039;&#039;&#039;Information-sharing&#039;&#039;&#039; was the focus.&lt;br /&gt;
&lt;br /&gt;
“Mother of all demos” is nickname for Engelbart who could make the computers help humans become smarter. &lt;br /&gt;
&lt;br /&gt;
*More interesting in this works that:&lt;br /&gt;
&amp;quot;His idea included seeing computing devices as a means to communicate and retrieve information, rather than just crunch numbers. This idea is represented in NLS”On-Line system”.&lt;br /&gt;
&lt;br /&gt;
*Some information about  NLS system:&lt;br /&gt;
1) NLS was a revolutionary computer collaboration system from the 1960s. &lt;br /&gt;
2) Designed by Douglas Engelbart and implemented by researchers at the Augmentation Research Center (ARC) at the Stanford Research Institute (SRI). &lt;br /&gt;
3) The NLS system was the first to employ the practical use of :&lt;br /&gt;
  a) hypertext links,&lt;br /&gt;
  b) the mouse, &lt;br /&gt;
  c) raster-scan video monitors, &lt;br /&gt;
  d) information organized by relevance, &lt;br /&gt;
  e) screen windowing, &lt;br /&gt;
  f) presentation programs, &lt;br /&gt;
  g) and other modern computing concepts.&lt;br /&gt;
&lt;br /&gt;
= Alto review =&lt;br /&gt;
&lt;br /&gt;
* Fundamentally a personal computer&lt;br /&gt;
* Applications:&lt;br /&gt;
** Drawing program with curves and arcs for drawing&lt;br /&gt;
** Hardware design tools (mostly logic boards)&lt;br /&gt;
** Time server&lt;br /&gt;
* Less designed for reading than the NLS. More designed around paper. Xerox had a laser printer, and you would read what you printed. Hypertext was deprioritized, unlike the NLS vision had focused on what could not be expressed on paper.&lt;br /&gt;
* Xerox had almost an obsession with making documents print beautifully.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Alto vs NLS =&lt;br /&gt;
NLS and Alto both had text processing, drawing, programming environments, some form of email (communication). Alto had WYSIWYG everything.&lt;br /&gt;
&lt;br /&gt;
Alto not built on a mainframe. NLS &#039;resource sharing&#039; was based around the mainframe. Alto had the idea of sharing via the network (ie. printer server).&lt;br /&gt;
&lt;br /&gt;
Alto focused a lot less on &#039;hypertext&#039;. Less about navigating deep information.  It used the paper metaphor. It implemented existing metaphors and adapted them to the PC. Alto people came from a culture that really valued printed paper.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_7&amp;diff=18669</id>
		<title>DistOS 2014W Lecture 7</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_7&amp;diff=18669"/>
		<updated>2014-02-24T00:43:29Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: Merged Simon&amp;#039;s and others notes together. Significant change&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Project ==&lt;br /&gt;
&lt;br /&gt;
We discussed moving the proposal due date back a week. We also discussed spending the class prior to that date discussing the primary papers people had chosen in order to provide preliminary feedback. Anil spent some time going through the papers from OSDI12 and discussing which ones would make good projects and why.&lt;br /&gt;
&lt;br /&gt;
* Pick a primary paper.&lt;br /&gt;
* Find papers that cite that paper, papers it cites, etc. to collect a body of related work.&lt;br /&gt;
* Don&#039;t just give a history, tell a story!&lt;br /&gt;
* Do not try to summarize papers.&lt;br /&gt;
* Try to identify a pattern, a common ground between the papers&lt;br /&gt;
* Tell a story that connects several papers in the topic you choose&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pick a conference (usenix is pretty systems oriented, maybe Lisa), go through their papers and find something interesting.&lt;br /&gt;
&lt;br /&gt;
Examples from OSDI 2012:&lt;br /&gt;
* datacenter (filesystems for doing X, heat management, etc...)&lt;br /&gt;
* web stuff&lt;br /&gt;
* distributed shared memory&lt;br /&gt;
* distributed network I/O infrastructure&lt;br /&gt;
* distributed databases (potentially)&lt;br /&gt;
* anonymity systems&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==UNIX and Plan 9 (Jan. 28)==&lt;br /&gt;
&lt;br /&gt;
* [http://homeostasis.scs.carleton.ca/~soma/distos/fall2008/unix.pdf Dennis M. Ritchie and Ken Thompson, &amp;quot;The UNIX Time-Sharing System&amp;quot; (1974)]&lt;br /&gt;
* [http://homeostasis.scs.carleton.ca/~soma/distos/2014w/presotto-plan9.pdf Presotto et. al, Plan 9, A Distributed System (1991)]&lt;br /&gt;
* [http://homeostasis.scs.carleton.ca/~soma/distos/2014w/pike-plan9.pdf Pike et al., Plan 9 from Bell Labs (1995)]&lt;br /&gt;
&lt;br /&gt;
== Unix and Plan 9 ==&lt;br /&gt;
&lt;br /&gt;
* Multics was a complex system which was bad because it was used less, slower, etc...&lt;br /&gt;
* Multics was not for end users, it was designed to support &amp;quot;utility computing&amp;quot; wherein computation was a service to be charged for&lt;br /&gt;
&lt;br /&gt;
UNIX was built as &amp;quot;a castrated version of Multics&amp;quot;, which was a very complex system. Multics was, arguably, so far ahead of its time that we are only just achieving their ambitions now. Unix was much more modest, and therefore much more achievable and successful. Just enough infrastructure to avoid reinventing the wheel. Just a couple of programmers making something for their own use.&lt;br /&gt;
&lt;br /&gt;
* Just enough infrastructure to run my programs&lt;br /&gt;
* It was really just supposed to be used by programmers&lt;br /&gt;
* &amp;quot;By programmers for programmers&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Unix was not designed as product or commercial entity at all. It was licensed out because AT&amp;amp;T was under severe antitrust scrutiny at the time.&lt;br /&gt;
&lt;br /&gt;
They wanted few, simple abstractions so they made everything a file. The only difference amongst most files was that you could use seek on some and not on others. Berkeley promptly broke this abstraction by introducing sockets for networking.&lt;br /&gt;
&lt;br /&gt;
Plan 9 finally introduced networking using the right abstractions, but was too late. Arguably the reason the BSD folks didn&#039;t use the file abstraction was because of the difference in reliability. SUN microsystems licensed Berkeley Unix and commercialized it. Files are generally reliable, and failures with them are catastrophic so many applications simply didn&#039;t include logic to handle such IO errors. Networks are much less reliable and applications have to be able to deal gracefully with timeouts and other errors.&lt;br /&gt;
&lt;br /&gt;
In Anil&#039;s opinion Plan 9&#039;s design of using file abstraction to represent Network wasn&#039;t a good design idea. The reason being file I/O breaking is uncommon but Network has an inherent flakiness and loss of connectivity is normal in networks. Using file system abstractions to represent Network doesn&#039;t properly takes care of the flakiness inherent in the Network. Put in other words Network doesn&#039;t have the reliability characteristics of mass storage and how to deal with this fact while using the file abstraction to deal with network was a major question which was left unanswered by the Plan 9 designers. Things that have different failure modes require different APIs. Anil also added that Plan 9 was a elegant attempt at representing everything using file abstraction but they were trying too hard with this approach as pointed out above. &lt;br /&gt;
&lt;br /&gt;
In distributed systems the best approach to use is - if things have different semantics then they should have abstractions that reflect their characteristics, the APIs should reflect their characteristics rather than hide it away and try to pretend or treat them as if they were having characteristics of something else in an attempt towards too much generalizations.&lt;br /&gt;
&lt;br /&gt;
Plan 9 implemented procfs, a directory that listed all processes as files. This was later adopted by Linux.&lt;br /&gt;
&lt;br /&gt;
In Anil&#039;s opinion another reason why Plan 9 was not widely adopted was that it was a bit late to the scene, by the time Plan 9 came out in the 90s systems running UNIX with networking was widely adopted driven by the success of Internet.&lt;br /&gt;
&lt;br /&gt;
Another valuable point Anil mentioned was that for a technology to get adopted and become successful it should serve or address a niche area for which there are no successful incumbents. There should be a champion use for the technology. Any tech won&#039;t continue existing just because it is cool.&lt;br /&gt;
&lt;br /&gt;
Tangent about programming languages: C was for system programming. Java was for enterprise programming.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_8&amp;diff=18668</id>
		<title>DistOS 2014W Lecture 8</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_8&amp;diff=18668"/>
		<updated>2014-02-23T23:48:12Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: More NFS details.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==NFS and AFS (Jan 30)==&lt;br /&gt;
&lt;br /&gt;
* [http://homeostasis.scs.carleton.ca/~soma/distos/2008-02-11/sandberg-nfs.pdf Russel Sandberg et al., &amp;quot;Design and Implementation of the Sun Network Filesystem&amp;quot; (1985)]&lt;br /&gt;
* [http://homeostasis.scs.carleton.ca/~soma/distos/2008-02-11/howard-afs.pdf John H. Howard et al., &amp;quot;Scale and Performance in a Distributed File System&amp;quot; (1988)]&lt;br /&gt;
&lt;br /&gt;
==NFS==&lt;br /&gt;
Group 1:&lt;br /&gt;
&lt;br /&gt;
1) per operation traffic.&lt;br /&gt;
&lt;br /&gt;
2) rpc based. Easy with which to program but a very [http://www.joelonsoftware.com/articles/LeakyAbstractions.html leaky abstraction].&lt;br /&gt;
&lt;br /&gt;
3) unreliable&lt;br /&gt;
&lt;br /&gt;
Group 2:&lt;br /&gt;
&lt;br /&gt;
1) designed to share disks over a network, not files&lt;br /&gt;
&lt;br /&gt;
2) more UNIX like. They tried to maintain unix file semantics on the client and server side.&lt;br /&gt;
&lt;br /&gt;
3) portable. It was meant to work (as a server) across many FS types.&lt;br /&gt;
&lt;br /&gt;
4) used UDP: if request dropped, just request again.&lt;br /&gt;
&lt;br /&gt;
5) it is not minimize network traffic.&lt;br /&gt;
&lt;br /&gt;
6) used VNODE, VFS as transparent interfaces to local disks.&lt;br /&gt;
&lt;br /&gt;
7) not have much hardware equipment&lt;br /&gt;
&lt;br /&gt;
8) later versions took on features of AFS&lt;br /&gt;
&lt;br /&gt;
9) stateless protocol conflicts with files being stateful by nature.&lt;br /&gt;
&lt;br /&gt;
Group 3:&lt;br /&gt;
&lt;br /&gt;
1) cache assumption invalid.&lt;br /&gt;
&lt;br /&gt;
2) no dedicated locking mechanism. They couldn&#039;t decide on which locking strategy to use, so they left it up to the users of NFS to use their own separate locking service.&lt;br /&gt;
&lt;br /&gt;
3) bad security&lt;br /&gt;
&lt;br /&gt;
Other:&lt;br /&gt;
* Client mounts full FS. No common namespace.&lt;br /&gt;
* Hostname lookup and address binding happens at mount&lt;br /&gt;
&lt;br /&gt;
==AFS==&lt;br /&gt;
&lt;br /&gt;
Group 1&lt;br /&gt;
&lt;br /&gt;
1) design for 5000 to 10000 clients&lt;br /&gt;
&lt;br /&gt;
2) high integrity.&lt;br /&gt;
&lt;br /&gt;
Group 2&lt;br /&gt;
&lt;br /&gt;
1) designed to share files over a network, not disks. It is one FS.&lt;br /&gt;
&lt;br /&gt;
2) better scalability&lt;br /&gt;
&lt;br /&gt;
3) better security (Kerberos).&lt;br /&gt;
&lt;br /&gt;
4) minimize network traffic.&lt;br /&gt;
&lt;br /&gt;
5) less UNIX like&lt;br /&gt;
&lt;br /&gt;
6) plugin authentication&lt;br /&gt;
&lt;br /&gt;
7) needs more kernel storage due to complex commands&lt;br /&gt;
&lt;br /&gt;
8) inode concept replaced with fid&lt;br /&gt;
&lt;br /&gt;
Group 3&lt;br /&gt;
&lt;br /&gt;
1) cache assumption valid&lt;br /&gt;
&lt;br /&gt;
2) locking&lt;br /&gt;
&lt;br /&gt;
3) good security.&lt;br /&gt;
&lt;br /&gt;
Other:&lt;br /&gt;
* Caches full files locally on open. Sends diffs on close.&lt;br /&gt;
&lt;br /&gt;
==Class Discussion:== &lt;br /&gt;
&lt;br /&gt;
Capturing some of Anil&#039;s Observations about NFS and AFS: &lt;br /&gt;
* The reason why NFS does not try to share at block level instead of file level is that sharing at block level is complicated from the implementation point of view. &lt;br /&gt;
* NFS use UDP as the transport protocol since UDP being a stateless protocol is in-line with the NFS design philosophy of not maintaining state information.  &lt;br /&gt;
* Security and unreliability issues in NFS are an implication of using RPC. &lt;br /&gt;
** RPC is a nice way for programming but RPC is not designed for networks (where flakiness is an inherent characteristic) which is better explained by the analogy that you never expect from a programming point of view your function call to fail(not to return) because of communication error.  *AFS designers considered network as a bottle neck and tried to reduce the number of chatter over network by using caching.&lt;br /&gt;
** &#039;open&#039; and &#039;close&#039; operations in AFS were critical&lt;br /&gt;
**  the &#039;close&#039; operation assumes importance to the same proportions of a &#039;commit&#039; operation in a well-designed database system. &lt;br /&gt;
* The security model of AFS is interesting in that rather than going for the UNIX access list based implementation AFS used a single sign on system based on Kerberos. &lt;br /&gt;
** cool thing about Kerberos is that idea of using tickets to get access.&lt;br /&gt;
* Irrespective of having better features compared to NFS, AFS did not get widely adopted. The reason for this was that the administrative mechanism for AFS was complex and it required highly trained/skilled people to setup AFS and it also required quite a number of day’s effort to set it up and maintain.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_8&amp;diff=18667</id>
		<title>DistOS 2014W Lecture 8</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_8&amp;diff=18667"/>
		<updated>2014-02-23T23:44:56Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: Added a few details.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==NFS and AFS (Jan 30)==&lt;br /&gt;
&lt;br /&gt;
* [http://homeostasis.scs.carleton.ca/~soma/distos/2008-02-11/sandberg-nfs.pdf Russel Sandberg et al., &amp;quot;Design and Implementation of the Sun Network Filesystem&amp;quot; (1985)]&lt;br /&gt;
* [http://homeostasis.scs.carleton.ca/~soma/distos/2008-02-11/howard-afs.pdf John H. Howard et al., &amp;quot;Scale and Performance in a Distributed File System&amp;quot; (1988)]&lt;br /&gt;
&lt;br /&gt;
==NFS==&lt;br /&gt;
Group 1:&lt;br /&gt;
&lt;br /&gt;
1) per operation traffic.&lt;br /&gt;
&lt;br /&gt;
2) rpc based. Easy with which to program but a very [http://www.joelonsoftware.com/articles/LeakyAbstractions.html leaky abstraction].&lt;br /&gt;
&lt;br /&gt;
3) unreliable&lt;br /&gt;
&lt;br /&gt;
Group 2:&lt;br /&gt;
&lt;br /&gt;
1) designed to share disks over a network, not files&lt;br /&gt;
&lt;br /&gt;
2) more UNIX like. They tried to maintain unix file semantics on the client and server side.&lt;br /&gt;
&lt;br /&gt;
3) portable. It was meant to work (as a server) across many FS types.&lt;br /&gt;
&lt;br /&gt;
4) used UDP: if request dropped, just request again.&lt;br /&gt;
&lt;br /&gt;
5) it is not minimize network traffic.&lt;br /&gt;
&lt;br /&gt;
6) used VNODE, VFS as transparent interfaces to local disks.&lt;br /&gt;
&lt;br /&gt;
7) not have much hardware equipment&lt;br /&gt;
&lt;br /&gt;
8) later versions took on features of AFS&lt;br /&gt;
&lt;br /&gt;
9) stateless protocol conflicts with files being stateful by nature.&lt;br /&gt;
&lt;br /&gt;
Group 3:&lt;br /&gt;
&lt;br /&gt;
1) cache assumption invalid.&lt;br /&gt;
&lt;br /&gt;
2) no dedicated locking mechanism. They couldn&#039;t decide on which locking strategy to use, so they left it up to the users of NFS to use their own separate locking service.&lt;br /&gt;
&lt;br /&gt;
3) bad security&lt;br /&gt;
&lt;br /&gt;
==AFS==&lt;br /&gt;
&lt;br /&gt;
Group 1&lt;br /&gt;
&lt;br /&gt;
1) design for 5000 to 10000 clients&lt;br /&gt;
&lt;br /&gt;
2) high integrity.&lt;br /&gt;
&lt;br /&gt;
Group 2&lt;br /&gt;
&lt;br /&gt;
1) designed to share files over a network, not disks. It is one FS.&lt;br /&gt;
&lt;br /&gt;
2) better scalability&lt;br /&gt;
&lt;br /&gt;
3) better security (Kerberos).&lt;br /&gt;
&lt;br /&gt;
4) minimize network traffic.&lt;br /&gt;
&lt;br /&gt;
5) less UNIX like&lt;br /&gt;
&lt;br /&gt;
6) plugin authentication&lt;br /&gt;
&lt;br /&gt;
7) needs more kernel storage due to complex commands&lt;br /&gt;
&lt;br /&gt;
8) inode concept replaced with fid&lt;br /&gt;
&lt;br /&gt;
Group 3&lt;br /&gt;
&lt;br /&gt;
1) cache assumption valid&lt;br /&gt;
&lt;br /&gt;
2) locking&lt;br /&gt;
&lt;br /&gt;
3) good security.&lt;br /&gt;
&lt;br /&gt;
Other:&lt;br /&gt;
* Caches full files locally on open. Sends diffs on close.&lt;br /&gt;
&lt;br /&gt;
==Class Discussion:== &lt;br /&gt;
&lt;br /&gt;
Capturing some of Anil&#039;s Observations about NFS and AFS: &lt;br /&gt;
* The reason why NFS does not try to share at block level instead of file level is that sharing at block level is complicated from the implementation point of view. &lt;br /&gt;
* NFS use UDP as the transport protocol since UDP being a stateless protocol is in-line with the NFS design philosophy of not maintaining state information.  &lt;br /&gt;
* Security and unreliability issues in NFS are an implication of using RPC. &lt;br /&gt;
** RPC is a nice way for programming but RPC is not designed for networks (where flakiness is an inherent characteristic) which is better explained by the analogy that you never expect from a programming point of view your function call to fail(not to return) because of communication error.  *AFS designers considered network as a bottle neck and tried to reduce the number of chatter over network by using caching.&lt;br /&gt;
** &#039;open&#039; and &#039;close&#039; operations in AFS were critical&lt;br /&gt;
**  the &#039;close&#039; operation assumes importance to the same proportions of a &#039;commit&#039; operation in a well-designed database system. &lt;br /&gt;
* The security model of AFS is interesting in that rather than going for the UNIX access list based implementation AFS used a single sign on system based on Kerberos. &lt;br /&gt;
** cool thing about Kerberos is that idea of using tickets to get access.&lt;br /&gt;
* Irrespective of having better features compared to NFS, AFS did not get widely adopted. The reason for this was that the administrative mechanism for AFS was complex and it required highly trained/skilled people to setup AFS and it also required quite a number of day’s effort to set it up and maintain.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_8&amp;diff=18666</id>
		<title>DistOS 2014W Lecture 8</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_8&amp;diff=18666"/>
		<updated>2014-02-23T23:40:06Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: Filled in a buncha information about NFS&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==NFS and AFS (Jan 30)==&lt;br /&gt;
&lt;br /&gt;
* [http://homeostasis.scs.carleton.ca/~soma/distos/2008-02-11/sandberg-nfs.pdf Russel Sandberg et al., &amp;quot;Design and Implementation of the Sun Network Filesystem&amp;quot; (1985)]&lt;br /&gt;
* [http://homeostasis.scs.carleton.ca/~soma/distos/2008-02-11/howard-afs.pdf John H. Howard et al., &amp;quot;Scale and Performance in a Distributed File System&amp;quot; (1988)]&lt;br /&gt;
&lt;br /&gt;
==NFS==&lt;br /&gt;
Group 1:&lt;br /&gt;
&lt;br /&gt;
1) per operation traffic.&lt;br /&gt;
&lt;br /&gt;
2) rpc based. Easy with which to program but a very [http://www.joelonsoftware.com/articles/LeakyAbstractions.html leaky abstraction].&lt;br /&gt;
&lt;br /&gt;
3) unreliable&lt;br /&gt;
&lt;br /&gt;
Group 2:&lt;br /&gt;
&lt;br /&gt;
1) designed to share disks over a network, not files&lt;br /&gt;
&lt;br /&gt;
2) more UNIX like. They tried to maintain unix file semantics on the client and server side.&lt;br /&gt;
&lt;br /&gt;
3) portable. It was meant to work (as a server) across many FS types.&lt;br /&gt;
&lt;br /&gt;
4) used UDP: if request dropped, just request again.&lt;br /&gt;
&lt;br /&gt;
5) it is not minimize network traffic.&lt;br /&gt;
&lt;br /&gt;
6) used VNODE, VFS as transparent interfaces to local disks.&lt;br /&gt;
&lt;br /&gt;
7) not have much hardware equipment&lt;br /&gt;
&lt;br /&gt;
8) later versions took on features of AFS&lt;br /&gt;
&lt;br /&gt;
9) stateless protocol conflicts with files being stateful by nature.&lt;br /&gt;
&lt;br /&gt;
Group 3:&lt;br /&gt;
&lt;br /&gt;
1) cache assumption invalid.&lt;br /&gt;
&lt;br /&gt;
2) no dedicated locking mechanism. They couldn&#039;t decide on which locking strategy to use, so they left it up to the users of NFS to use their own separate locking service.&lt;br /&gt;
&lt;br /&gt;
3) bad security&lt;br /&gt;
&lt;br /&gt;
==AFS==&lt;br /&gt;
&lt;br /&gt;
Group 1&lt;br /&gt;
&lt;br /&gt;
1) design for 5000 clients&lt;br /&gt;
&lt;br /&gt;
2) high integrity.&lt;br /&gt;
&lt;br /&gt;
Group 2&lt;br /&gt;
&lt;br /&gt;
1) designed to share files over a network, not disks&lt;br /&gt;
&lt;br /&gt;
2) better scalability&lt;br /&gt;
&lt;br /&gt;
3) better security.&lt;br /&gt;
&lt;br /&gt;
4) minimize network traffic.&lt;br /&gt;
&lt;br /&gt;
5) less UNIX like&lt;br /&gt;
&lt;br /&gt;
6) plugin authentication&lt;br /&gt;
&lt;br /&gt;
7) needs more kernel storage due to complex commands&lt;br /&gt;
&lt;br /&gt;
8) inode concept replaced with fid&lt;br /&gt;
&lt;br /&gt;
Group 3&lt;br /&gt;
&lt;br /&gt;
1) cache assumption valid&lt;br /&gt;
&lt;br /&gt;
2) locking&lt;br /&gt;
&lt;br /&gt;
3) good security.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Class Discussion:== &lt;br /&gt;
&lt;br /&gt;
Capturing some of Anil&#039;s Observations about NFS and AFS: &lt;br /&gt;
* The reason why NFS does not try to share at block level instead of file level is that sharing at block level is complicated from the implementation point of view. &lt;br /&gt;
* NFS use UDP as the transport protocol since UDP being a stateless protocol is in-line with the NFS design philosophy of not maintaining state information.  &lt;br /&gt;
* Security and unreliability issues in NFS are an implication of using RPC. &lt;br /&gt;
** RPC is a nice way for programming but RPC is not designed for networks (where flakiness is an inherent characteristic) which is better explained by the analogy that you never expect from a programming point of view your function call to fail(not to return) because of communication error.  *AFS designers considered network as a bottle neck and tried to reduce the number of chatter over network by using caching.&lt;br /&gt;
** &#039;open&#039; and &#039;close&#039; operations in AFS were critical&lt;br /&gt;
**  the &#039;close&#039; operation assumes importance to the same proportions of a &#039;commit&#039; operation in a well-designed database system. &lt;br /&gt;
* The security model of AFS is interesting in that rather than going for the UNIX access list based implementation AFS used a single sign on system based on Kerberos. &lt;br /&gt;
** cool thing about Kerberos is that idea of using tickets to get access.&lt;br /&gt;
* Irrespective of having better features compared to NFS, AFS did not get widely adopted. The reason for this was that the administrative mechanism for AFS was complex and it required highly trained/skilled people to setup AFS and it also required quite a number of day’s effort to set it up and maintain.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_8&amp;diff=18665</id>
		<title>DistOS 2014W Lecture 8</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_8&amp;diff=18665"/>
		<updated>2014-02-23T23:28:27Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: Group 1 no longer exists&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==NFS and AFS (Jan 30)==&lt;br /&gt;
&lt;br /&gt;
* [http://homeostasis.scs.carleton.ca/~soma/distos/2008-02-11/sandberg-nfs.pdf Russel Sandberg et al., &amp;quot;Design and Implementation of the Sun Network Filesystem&amp;quot; (1985)]&lt;br /&gt;
* [http://homeostasis.scs.carleton.ca/~soma/distos/2008-02-11/howard-afs.pdf John H. Howard et al., &amp;quot;Scale and Performance in a Distributed File System&amp;quot; (1988)]&lt;br /&gt;
&lt;br /&gt;
==NFS==&lt;br /&gt;
Group 1:&lt;br /&gt;
&lt;br /&gt;
1) per operating traffic&lt;br /&gt;
&lt;br /&gt;
2) rpc based&lt;br /&gt;
&lt;br /&gt;
3) unreliable&lt;br /&gt;
&lt;br /&gt;
Group 2:&lt;br /&gt;
&lt;br /&gt;
1) designed to share disks over a network, not files&lt;br /&gt;
&lt;br /&gt;
2) more UNIX like&lt;br /&gt;
&lt;br /&gt;
3) portable&lt;br /&gt;
&lt;br /&gt;
4) use UDP&lt;br /&gt;
&lt;br /&gt;
5) it is not minimize network traffic.&lt;br /&gt;
&lt;br /&gt;
6) used VNODE&lt;br /&gt;
&lt;br /&gt;
7) not have much hardware equipment&lt;br /&gt;
&lt;br /&gt;
8) later versions took on features of AFS&lt;br /&gt;
&lt;br /&gt;
9) stateless protocol conflicts with files being state-full by nature.&lt;br /&gt;
&lt;br /&gt;
Group 3:&lt;br /&gt;
&lt;br /&gt;
1) cache assumption invalid.&lt;br /&gt;
&lt;br /&gt;
2) no locking&lt;br /&gt;
&lt;br /&gt;
3) bad security&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==AFS==&lt;br /&gt;
&lt;br /&gt;
Group 1&lt;br /&gt;
&lt;br /&gt;
1) design for 5000 clients&lt;br /&gt;
&lt;br /&gt;
2) high integrity.&lt;br /&gt;
&lt;br /&gt;
Group 2&lt;br /&gt;
&lt;br /&gt;
1) designed to share files over a network, not disks&lt;br /&gt;
&lt;br /&gt;
2) better scalability&lt;br /&gt;
&lt;br /&gt;
3) better security.&lt;br /&gt;
&lt;br /&gt;
4) minimize network traffic.&lt;br /&gt;
&lt;br /&gt;
5) less UNIX like&lt;br /&gt;
&lt;br /&gt;
6) plugin authentication&lt;br /&gt;
&lt;br /&gt;
7) needs more kernel storage due to complex commands&lt;br /&gt;
&lt;br /&gt;
8) inode concept replaced with fid&lt;br /&gt;
&lt;br /&gt;
Group 3&lt;br /&gt;
&lt;br /&gt;
1) cache assumption valid&lt;br /&gt;
&lt;br /&gt;
2) locking&lt;br /&gt;
&lt;br /&gt;
3) good security.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Class Discussion:== &lt;br /&gt;
&lt;br /&gt;
Capturing some of Anil&#039;s Observations about NFS and AFS: &lt;br /&gt;
* The reason why NFS does not try to share at block level instead of file level is that sharing at block level is complicated from the implementation point of view. &lt;br /&gt;
* NFS use UDP as the transport protocol since UDP being a stateless protocol is in-line with the NFS design philosophy of not maintaining state information.  &lt;br /&gt;
* Security and unreliability issues in NFS are an implication of using RPC. &lt;br /&gt;
** RPC is a nice way for programming but RPC is not designed for networks (where flakiness is an inherent characteristic) which is better explained by the analogy that you never expect from a programming point of view your function call to fail(not to return) because of communication error.  *AFS designers considered network as a bottle neck and tried to reduce the number of chatter over network by using caching.&lt;br /&gt;
** &#039;open&#039; and &#039;close&#039; operations in AFS were critical&lt;br /&gt;
**  the &#039;close&#039; operation assumes importance to the same proportions of a &#039;commit&#039; operation in a well-designed database system. &lt;br /&gt;
* The security model of AFS is interesting in that rather than going for the UNIX access list based implementation AFS used a single sign on system based on Kerberos. &lt;br /&gt;
** cool thing about Kerberos is that idea of using tickets to get access.&lt;br /&gt;
* Irrespective of having better features compared to NFS, AFS did not get widely adopted. The reason for this was that the administrative mechanism for AFS was complex and it required highly trained/skilled people to setup AFS and it also required quite a number of day’s effort to set it up and maintain.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_8&amp;diff=18664</id>
		<title>DistOS 2014W Lecture 8</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_8&amp;diff=18664"/>
		<updated>2014-02-23T23:28:00Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: Combined all AFS and NFS parts together. Groups don&amp;#039;t matter.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==NFS and AFS (Jan 30)==&lt;br /&gt;
&lt;br /&gt;
* [http://homeostasis.scs.carleton.ca/~soma/distos/2008-02-11/sandberg-nfs.pdf Russel Sandberg et al., &amp;quot;Design and Implementation of the Sun Network Filesystem&amp;quot; (1985)]&lt;br /&gt;
* [http://homeostasis.scs.carleton.ca/~soma/distos/2008-02-11/howard-afs.pdf John H. Howard et al., &amp;quot;Scale and Performance in a Distributed File System&amp;quot; (1988)]&lt;br /&gt;
&lt;br /&gt;
==Group 1==&lt;br /&gt;
&lt;br /&gt;
==NFS==&lt;br /&gt;
Group 1:&lt;br /&gt;
&lt;br /&gt;
1) per operating traffic&lt;br /&gt;
&lt;br /&gt;
2) rpc based&lt;br /&gt;
&lt;br /&gt;
3) unreliable&lt;br /&gt;
&lt;br /&gt;
Group 2:&lt;br /&gt;
&lt;br /&gt;
1) designed to share disks over a network, not files&lt;br /&gt;
&lt;br /&gt;
2) more UNIX like&lt;br /&gt;
&lt;br /&gt;
3) portable&lt;br /&gt;
&lt;br /&gt;
4) use UDP&lt;br /&gt;
&lt;br /&gt;
5) it is not minimize network traffic.&lt;br /&gt;
&lt;br /&gt;
6) used VNODE&lt;br /&gt;
&lt;br /&gt;
7) not have much hardware equipment&lt;br /&gt;
&lt;br /&gt;
8) later versions took on features of AFS&lt;br /&gt;
&lt;br /&gt;
9) stateless protocol conflicts with files being state-full by nature.&lt;br /&gt;
&lt;br /&gt;
Group 3:&lt;br /&gt;
&lt;br /&gt;
1) cache assumption invalid.&lt;br /&gt;
&lt;br /&gt;
2) no locking&lt;br /&gt;
&lt;br /&gt;
3) bad security&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==AFS==&lt;br /&gt;
&lt;br /&gt;
Group 1&lt;br /&gt;
&lt;br /&gt;
1) design for 5000 clients&lt;br /&gt;
&lt;br /&gt;
2) high integrity.&lt;br /&gt;
&lt;br /&gt;
Group 2&lt;br /&gt;
&lt;br /&gt;
1) designed to share files over a network, not disks&lt;br /&gt;
&lt;br /&gt;
2) better scalability&lt;br /&gt;
&lt;br /&gt;
3) better security.&lt;br /&gt;
&lt;br /&gt;
4) minimize network traffic.&lt;br /&gt;
&lt;br /&gt;
5) less UNIX like&lt;br /&gt;
&lt;br /&gt;
6) plugin authentication&lt;br /&gt;
&lt;br /&gt;
7) needs more kernel storage due to complex commands&lt;br /&gt;
&lt;br /&gt;
8) inode concept replaced with fid&lt;br /&gt;
&lt;br /&gt;
Group 3&lt;br /&gt;
&lt;br /&gt;
1) cache assumption valid&lt;br /&gt;
&lt;br /&gt;
2) locking&lt;br /&gt;
&lt;br /&gt;
3) good security.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Class Discussion:== &lt;br /&gt;
&lt;br /&gt;
Capturing some of Anil&#039;s Observations about NFS and AFS: &lt;br /&gt;
* The reason why NFS does not try to share at block level instead of file level is that sharing at block level is complicated from the implementation point of view. &lt;br /&gt;
* NFS use UDP as the transport protocol since UDP being a stateless protocol is in-line with the NFS design philosophy of not maintaining state information.  &lt;br /&gt;
* Security and unreliability issues in NFS are an implication of using RPC. &lt;br /&gt;
** RPC is a nice way for programming but RPC is not designed for networks (where flakiness is an inherent characteristic) which is better explained by the analogy that you never expect from a programming point of view your function call to fail(not to return) because of communication error.  *AFS designers considered network as a bottle neck and tried to reduce the number of chatter over network by using caching.&lt;br /&gt;
** &#039;open&#039; and &#039;close&#039; operations in AFS were critical&lt;br /&gt;
**  the &#039;close&#039; operation assumes importance to the same proportions of a &#039;commit&#039; operation in a well-designed database system. &lt;br /&gt;
* The security model of AFS is interesting in that rather than going for the UNIX access list based implementation AFS used a single sign on system based on Kerberos. &lt;br /&gt;
** cool thing about Kerberos is that idea of using tickets to get access.&lt;br /&gt;
* Irrespective of having better features compared to NFS, AFS did not get widely adopted. The reason for this was that the administrative mechanism for AFS was complex and it required highly trained/skilled people to setup AFS and it also required quite a number of day’s effort to set it up and maintain.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_8&amp;diff=18663</id>
		<title>DistOS 2014W Lecture 8</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_8&amp;diff=18663"/>
		<updated>2014-02-23T23:24:16Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: Removed unused group 4. Formatted discussion&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==NFS and AFS (Jan 30)==&lt;br /&gt;
&lt;br /&gt;
* [http://homeostasis.scs.carleton.ca/~soma/distos/2008-02-11/sandberg-nfs.pdf Russel Sandberg et al., &amp;quot;Design and Implementation of the Sun Network Filesystem&amp;quot; (1985)]&lt;br /&gt;
* [http://homeostasis.scs.carleton.ca/~soma/distos/2008-02-11/howard-afs.pdf John H. Howard et al., &amp;quot;Scale and Performance in a Distributed File System&amp;quot; (1988)]&lt;br /&gt;
&lt;br /&gt;
==Group 1==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NFS:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1) per operating traffic&lt;br /&gt;
&lt;br /&gt;
2) rpc based&lt;br /&gt;
&lt;br /&gt;
3) unreliable&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;AFS:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1) design for 5000 clients&lt;br /&gt;
&lt;br /&gt;
2) high integrity.&lt;br /&gt;
&lt;br /&gt;
==Group 2==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NFS:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1) designed to share disks over a network, not files&lt;br /&gt;
&lt;br /&gt;
2) more UNIX like&lt;br /&gt;
&lt;br /&gt;
3) portable&lt;br /&gt;
&lt;br /&gt;
4) use UDP&lt;br /&gt;
&lt;br /&gt;
5) it is not minimize network traffic.&lt;br /&gt;
&lt;br /&gt;
6) used VNODE&lt;br /&gt;
&lt;br /&gt;
7) not have much hardware equipment&lt;br /&gt;
&lt;br /&gt;
8) later versions took on features of AFS&lt;br /&gt;
&lt;br /&gt;
9) stateless protocol conflicts with files being state-full by nature.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;AFS:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1) designed to share files over a network, not disks&lt;br /&gt;
&lt;br /&gt;
2) better scalability&lt;br /&gt;
&lt;br /&gt;
3) better security.&lt;br /&gt;
&lt;br /&gt;
4) minimize network traffic.&lt;br /&gt;
&lt;br /&gt;
5) less UNIX like&lt;br /&gt;
&lt;br /&gt;
6) plugin authentication&lt;br /&gt;
&lt;br /&gt;
7) needs more kernel storage due to complex commands&lt;br /&gt;
&lt;br /&gt;
8) inode concept replaced with fid&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Group 3==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NFS:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1) cache assumption invalid.&lt;br /&gt;
&lt;br /&gt;
2) no locking&lt;br /&gt;
&lt;br /&gt;
3) bad security&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;AFS:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1) cache assumption valid&lt;br /&gt;
&lt;br /&gt;
2) locking&lt;br /&gt;
&lt;br /&gt;
3) good security.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Class Discussion:== &lt;br /&gt;
&lt;br /&gt;
Capturing some of Anil&#039;s Observations about NFS and AFS: &lt;br /&gt;
* The reason why NFS does not try to share at block level instead of file level is that sharing at block level is complicated from the implementation point of view. &lt;br /&gt;
* NFS use UDP as the transport protocol since UDP being a stateless protocol is in-line with the NFS design philosophy of not maintaining state information.  &lt;br /&gt;
* Security and unreliability issues in NFS are an implication of using RPC. &lt;br /&gt;
** RPC is a nice way for programming but RPC is not designed for networks (where flakiness is an inherent characteristic) which is better explained by the analogy that you never expect from a programming point of view your function call to fail(not to return) because of communication error.  *AFS designers considered network as a bottle neck and tried to reduce the number of chatter over network by using caching.&lt;br /&gt;
** &#039;open&#039; and &#039;close&#039; operations in AFS were critical&lt;br /&gt;
**  the &#039;close&#039; operation assumes importance to the same proportions of a &#039;commit&#039; operation in a well-designed database system. &lt;br /&gt;
* The security model of AFS is interesting in that rather than going for the UNIX access list based implementation AFS used a single sign on system based on Kerberos. &lt;br /&gt;
** cool thing about Kerberos is that idea of using tickets to get access.&lt;br /&gt;
* Irrespective of having better features compared to NFS, AFS did not get widely adopted. The reason for this was that the administrative mechanism for AFS was complex and it required highly trained/skilled people to setup AFS and it also required quite a number of day’s effort to set it up and maintain.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_10&amp;diff=18662</id>
		<title>DistOS 2014W Lecture 10</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_10&amp;diff=18662"/>
		<updated>2014-02-23T19:50:56Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: Clean up some more and added info about the interface and random accesss stuff&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==GFS and Ceph (Feb. 4)==&lt;br /&gt;
* [http://research.google.com/archive/gfs-sosp2003.pdf Sanjay Ghemawat et al., &amp;quot;The Google File System&amp;quot; (SOSP 2003)]&lt;br /&gt;
* [http://www.usenix.org/events/osdi06/tech/weil.html Weil et al., Ceph: A Scalable, High-Performance Distributed File System (OSDI 2006)].&lt;br /&gt;
&lt;br /&gt;
== GFS ==&lt;br /&gt;
GFS is a distributed file system designed specifically for Google&#039; needs and they made two assumption while designing GFS:&lt;br /&gt;
&lt;br /&gt;
# Most of the Data is written in the form of appends ( write at the end of a file).&lt;br /&gt;
# Data read from the files is read in a streaming sort of way ( read lot of data in the form of sequential access).&lt;br /&gt;
&lt;br /&gt;
Because of this, they decided to lay emphasis on better performance for sequential access. These two assumption are also the reason because of which they chose to keep the chunk size so huge (64 MB). You can easily read large blocks if you get rid of random access. Once data is written, it is rarely written &#039;&#039;&#039;over&#039;&#039;&#039; using random access.&lt;br /&gt;
&lt;br /&gt;
* Very different design because of the workload that it is designed for:&lt;br /&gt;
** Because of the number of small files that have to be indexed for the web, it is no longer practical to have a file system that stores these individually. Too much overhead. Easier to store millions of objects as large files. Punts problem to userspace, incl. record delimitation.&lt;br /&gt;
* Don&#039;t care about latency&lt;br /&gt;
** surprising considering it&#039;s Google, the guys who change the TCP IW standard recommendations for latency.&lt;br /&gt;
* Mostly seeking (sequentially) through entire file.&lt;br /&gt;
* Paper from 2003, mentions still using 100BASE-T links.&lt;br /&gt;
* Data-heavy, metadata light. Contacting the metadata server is a rare event.&lt;br /&gt;
* Consider hardware failures as normal operating conditions:&lt;br /&gt;
** uses commodity hardware&lt;br /&gt;
** All the replication (!)&lt;br /&gt;
** Data checksumming&lt;br /&gt;
* Performance degrades for small random access workload; use other filesystem.&lt;br /&gt;
* Path of least resistance to scale, not to do something super CS-smart.&lt;br /&gt;
* Google used to re-index every month, swapping out indexes. Now, it&#039;s much more online. GFS is now just a layer to support a more dynamic layer.&lt;br /&gt;
* The paper seems to lack any mention of security. This FS probably could only exist on a trusted network.&lt;br /&gt;
* Implements interface similar to POSIX, but not the full standard.&lt;br /&gt;
** &#039;&#039;&#039;create, delete, open, close, read, write&#039;&#039;&#039;&lt;br /&gt;
** Unique operations too: &#039;&#039;&#039;snapshot&#039;&#039;&#039; which is low cost file duplication and &#039;&#039;&#039;record append&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== How other filesystems compare to GFS and Ceph ==&lt;br /&gt;
&lt;br /&gt;
* Other File Systems: AFS, NFS, Plan 9, traditional Unix&lt;br /&gt;
&lt;br /&gt;
* Data and metadata are held together.&lt;br /&gt;
** They did not optimize for different access patterns:&lt;br /&gt;
*** Data → big, long transfers&lt;br /&gt;
*** Metadata → small, low latency&lt;br /&gt;
** Can&#039;t scale separately&lt;br /&gt;
&lt;br /&gt;
* Designed for lower latency&lt;br /&gt;
&lt;br /&gt;
* (Mostly) designed for POSIX semantics&lt;br /&gt;
** how the requirements that lead to the ‘standard’ evolved&lt;br /&gt;
&lt;br /&gt;
* Assumed that a file is a fraction of the size of a server&lt;br /&gt;
** eg. files on a Unix system were meant to be text files.&lt;br /&gt;
** Huge files spread over many servers not even in the cards for NFS&lt;br /&gt;
** Meant for small problems, not web-scale&lt;br /&gt;
*** Google has a copy of the publicly accessible internet&lt;br /&gt;
**** Their strategy is to copy the internet to index it&lt;br /&gt;
**** Insane → insane filesystem&lt;br /&gt;
**** One file may span multiple servers&lt;br /&gt;
&lt;br /&gt;
* Even mainframes, scale-up solutions, ultra-reliable systems, with data sets bigger than RAM don&#039;t have the scale of GFS or CEPH.&lt;br /&gt;
&lt;br /&gt;
* Point-to-point access; much less load-balancing, even in AFS&lt;br /&gt;
** One server to service multiple clients.&lt;br /&gt;
** Single point of entry, single point of failure, bottleneck&lt;br /&gt;
&lt;br /&gt;
* Less focus on fault tolerance&lt;br /&gt;
** No notion of data replication.&lt;br /&gt;
&lt;br /&gt;
* Reliability was a property of the host, not the network&lt;br /&gt;
&lt;br /&gt;
==Ceph==&lt;br /&gt;
&lt;br /&gt;
* Ceph is crazy and tries to do everything&lt;br /&gt;
* GFS was very specifically designed to work in a limited scenario, under certain specific conditions, whereas CEPH is sort of generic solution- for how to build a scalable distributed file system&lt;br /&gt;
&lt;br /&gt;
* Achieves high performance, relaibility and availabily through three design features: decoupled data and metadata, dynamically distributed meta data, reliable autonomic distributed object storage.&lt;br /&gt;
** Decoupled data and meta data: Metadata operations (open, close) happen to metadata clusters, clients interact directly with OSD&#039;s for IO.&lt;br /&gt;
** Distributed Meta Data:  Meta data operations make up a lot of work load. Ceph distributes this workload to many Meta Data Servers (MDS) to maintail a file hierarchy.&lt;br /&gt;
** automic object storage: OSD&#039;s organise amongst themselves, taking advantage of their onboard CPU and Memory. Ceph delegates datamigration, replication, failure detection, recovery, to the cluster of OSDs.&lt;br /&gt;
&lt;br /&gt;
* Distributed Meta Data&lt;br /&gt;
** Unlike GFS&lt;br /&gt;
** Clusters of MDSes.&lt;br /&gt;
** Utilizes Dynamic Subtree partitioning: Dynamically mapped subtrees of directories to MDSes. Workloads for every subtree are monitored. Subtrees assigned to MDSes accordingly, in a coarse way.&lt;br /&gt;
&lt;br /&gt;
* Near-Posix like interface: selectively extend interface while relaxing consistency semantics.&lt;br /&gt;
** ex: &#039;&#039;readdirplus&#039;&#039; is an extension which optimizes for a common sequence of operations: &#039;&#039;readdir&#039;&#039; followed by multiple &#039;&#039;stats&#039;&#039;. This requires brief caching to improve performance which may let small concurrent changes to go unnoticed.&lt;br /&gt;
* Object Storage Devices (OSDs) have some intelligence (unlike GFS), and autonomously distribute the data, rather than being controlled by a master.&lt;br /&gt;
** Uses EBOFS (instead of ext3). Implemented in user space to avoid dealing with kernel issues. Aggressively schedules disk writes.&lt;br /&gt;
** Uses hashing in the distribution process to &#039;&#039;&#039;uniformly&#039;&#039;&#039; distribute data&lt;br /&gt;
** The actual algorithm for distributing data is as follows:&lt;br /&gt;
*** file + offset → hash(object ID) → CRUSH(placement group) → OSD&lt;br /&gt;
** Each client has knowledge of the entire storage network&lt;br /&gt;
** Tracks failure groups (same breaker, switch, etc.), hot data, etc.&lt;br /&gt;
** Number of replicas is changeable on the fly, but the placement group is not&lt;br /&gt;
*** For example, if every client on the planet is accessing the same file, you can scale out for that data.&lt;br /&gt;
** You don&#039;t ask where to go, you just go, which makes this very scalable&lt;br /&gt;
&lt;br /&gt;
Any distributed file system that aims to be scalable, need to cut down the number of messages floating around, instead of the actual data transfer, which is what Ceph aims to do with the CRUSH function. basically Client or OSD just need to be aware of this CRUSH algorithm(function) and they can find the location of a file on their own (instead of asking a master server about it), so basically it eliminates the traditional File allocation list approach. &lt;br /&gt;
&lt;br /&gt;
* CRUSH is sufficiently advanced to be called magic.&lt;br /&gt;
** O(log n) of the size of the data&lt;br /&gt;
** CPUs stupidly fast, so the above is of minimal overhead&lt;br /&gt;
*** the network, despite being fast, has latency, etc. &lt;br /&gt;
*** Computation scales much better than communication.&lt;br /&gt;
&lt;br /&gt;
* Storage is composed of variable-length atoms&lt;br /&gt;
&lt;br /&gt;
= Class Discussion = &lt;br /&gt;
&lt;br /&gt;
== File Size ==&lt;br /&gt;
In Anil’s opinion “how file system size compares to the server storage size?” is a key parameter that distinguishes GFS, NFS designs from the early file systems NFS, AFS, Plan 9. In the early files system designs, file system size was a fraction of the server storage size where as in GFS and Ceph the file system size can be of several times magnitude than that of the server. &lt;br /&gt;
&lt;br /&gt;
== Segue on drives and sequential access following GFS section ==&lt;br /&gt;
&lt;br /&gt;
* Structure of GFS does match some other modern systems:&lt;br /&gt;
** Hard drives are like parallel tapes, very suited for streaming.&lt;br /&gt;
** Flash devices are log-structured too, but have an abstracting firmware.&lt;br /&gt;
*** They do erasure in bulk, in the &#039;&#039;&#039;background&#039;&#039;&#039;. &lt;br /&gt;
*** Used to be we needed specialized FS for [http://en.wikipedia.org/wiki/Memory_Technology_Device MTDs] to get better performance; though now we have better micro-controllers in some embedded systems to abstract away the hardware.&lt;br /&gt;
* Architectures that start big, often end up in the smallest things.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lookups vs hashing ==&lt;br /&gt;
One key aspect in the Ceph design is the attempt to replace communication with computation by using hashing based mechanism CRUSH. Following line from Anil epitomizes the general approach that is followed in the field of Computer Science “If one abstraction does not work stick another one in”.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_10&amp;diff=18661</id>
		<title>DistOS 2014W Lecture 10</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_10&amp;diff=18661"/>
		<updated>2014-02-23T19:39:36Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: woops. sequential =&amp;gt; random&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==GFS and Ceph (Feb. 4)==&lt;br /&gt;
* [http://research.google.com/archive/gfs-sosp2003.pdf Sanjay Ghemawat et al., &amp;quot;The Google File System&amp;quot; (SOSP 2003)]&lt;br /&gt;
* [http://www.usenix.org/events/osdi06/tech/weil.html Weil et al., Ceph: A Scalable, High-Performance Distributed File System (OSDI 2006)].&lt;br /&gt;
&lt;br /&gt;
== GFS ==&lt;br /&gt;
GFS is a distributed file system designed specifically for Google&#039; needs and they made two assumption while designing GFS:&lt;br /&gt;
&lt;br /&gt;
# Most of the Data is written in the form of appends ( write at the end of a file) &lt;br /&gt;
# Data read from the files is read in a streaming sort of way ( read lot of data in the form of sequential access). &lt;br /&gt;
&lt;br /&gt;
Because of this, they decided to lay emphasis on better performance for sequential access. These two assumption are also the reason because of which they chose to keep the chunk size so huge (64 MB). You can easily read large blocks if you get rid of random access.&lt;br /&gt;
&lt;br /&gt;
* Very different design because of the workload that it is designed for:&lt;br /&gt;
** Because of the number of small files that have to be indexed for the web, it is no longer practical to have a file system that stores these individually. Too much overhead. Punts problem to userspace, incl. record delimitation.&lt;br /&gt;
* Don&#039;t care about latency, surprising considering it&#039;s Google, the guys who change the TCP IW standard recommendations for latency.&lt;br /&gt;
* Mostly seeking (sequentially) through entire file.&lt;br /&gt;
* Paper from 2003, mentions still using 100BASE-T links.&lt;br /&gt;
* Data-heavy, metadata light. Contacting the metadata server is a rare event.&lt;br /&gt;
* Consider hardware failures as normal operating conditions:&lt;br /&gt;
** uses commodity hardware&lt;br /&gt;
** All the replication (!)&lt;br /&gt;
** Data checksumming&lt;br /&gt;
* Performance degrades for small random access workload; use other filesystem.&lt;br /&gt;
* Path of least resistance to scale, not to do something super CS-smart.&lt;br /&gt;
* Google used to re-index every month, swapping out indexes. Now, it&#039;s much more online. GFS is now just a layer to support a more dynamic layer.&lt;br /&gt;
* The paper seems to lack any mention of security. This FS probably could only exist on a trusted network.&lt;br /&gt;
&lt;br /&gt;
== How other filesystems compare to GFS and Ceph ==&lt;br /&gt;
&lt;br /&gt;
* Other File Systems: AFS, NFS, Plan 9, traditional Unix&lt;br /&gt;
&lt;br /&gt;
* Data and metadata are held together.&lt;br /&gt;
** They did not optimize for different access patterns:&lt;br /&gt;
*** Data → big, long transfers&lt;br /&gt;
*** Metadata → small, low latency&lt;br /&gt;
** Can&#039;t scale separately&lt;br /&gt;
&lt;br /&gt;
* Designed for lower latency&lt;br /&gt;
&lt;br /&gt;
* (Mostly) designed for POSIX semantics&lt;br /&gt;
** how the requirements that lead to the ‘standard’ evolved&lt;br /&gt;
&lt;br /&gt;
* Assumed that a file is a fraction of the size of a server&lt;br /&gt;
** eg. files on a Unix system were meant to be text files.&lt;br /&gt;
** Huge files spread over many servers not even in the cards for NFS&lt;br /&gt;
** Meant for small problems, not web-scale&lt;br /&gt;
*** Google has a copy of the publicly accessible internet&lt;br /&gt;
**** Their strategy is to copy the internet to index it&lt;br /&gt;
**** Insane → insane filesystem&lt;br /&gt;
**** One file may span multiple servers&lt;br /&gt;
&lt;br /&gt;
* Even mainframes, scale-up solutions, ultra-reliable systems, with data sets bigger than RAM don&#039;t have the scale of GFS or CEPH.&lt;br /&gt;
&lt;br /&gt;
* Point-to-point access; much less load-balancing, even in AFS&lt;br /&gt;
** One server to service multiple clients.&lt;br /&gt;
** Single point of entry, single point of failure, bottleneck&lt;br /&gt;
&lt;br /&gt;
* Less focus on fault tolerance&lt;br /&gt;
** No notion of data replication.&lt;br /&gt;
&lt;br /&gt;
* Reliability was a property of the host, not the network&lt;br /&gt;
&lt;br /&gt;
==Ceph==&lt;br /&gt;
&lt;br /&gt;
* Ceph is crazy and tries to do everything&lt;br /&gt;
* GFS was very specifically designed to work in a limited scenario, under certain specific conditions, whereas CEPH is sort of generic solution- for how to build a scalable distributed file system&lt;br /&gt;
&lt;br /&gt;
* Achieves high performance, relaibility and availabily through three design features: decoupled data and metadata, dynamically distributed meta data, reliable autonomic distributed object storage.&lt;br /&gt;
** Decoupled data and meta data: Metadata operations (open, close) happen to metadata clusters, clients interact directly with OSD&#039;s for IO.&lt;br /&gt;
** Distributed Meta Data:  Meta data operations make up a lot of work load. Ceph distributes this workload to many Meta Data Servers (MDS) to maintail a file hierarchy.&lt;br /&gt;
** automic object storage: OSD&#039;s organise amongst themselves, taking advantage of their onboard CPU and Memory. Ceph delegates datamigration, replication, failure detection, recovery, to the cluster of OSDs.&lt;br /&gt;
&lt;br /&gt;
* Distributed Meta Data&lt;br /&gt;
** Unlike GFS&lt;br /&gt;
** Clusters of MDSes.&lt;br /&gt;
** Utilizes Dynamic Subtree partitioning: Dynamically mapped subtrees of directories to MDSes. Workloads for every subtree are monitored. Subtrees assigned to MDSes accordingly, in a coarse way.&lt;br /&gt;
&lt;br /&gt;
* Near-Posix like interface: selectively extend interface while relaxing consistency semantics.&lt;br /&gt;
** ex: &#039;&#039;readdirplus&#039;&#039; is an extension which optimizes for a common sequence of operations: &#039;&#039;readdir&#039;&#039; followed by multiple &#039;&#039;stats&#039;&#039;. This requires brief caching to improve performance which may let small concurrent changes to go unnoticed.&lt;br /&gt;
* Object Storage Devices (OSDs) have some intelligence (unlike GFS), and autonomously distribute the data, rather than being controlled by a master.&lt;br /&gt;
** Uses EBOFS (instead of ext3). Implemented in user space to avoid dealing with kernel issues. Aggressively schedules disk writes.&lt;br /&gt;
** Uses hashing in the distribution process to &#039;&#039;&#039;uniformly&#039;&#039;&#039; distribute data&lt;br /&gt;
** The actual algorithm for distributing data is as follows:&lt;br /&gt;
*** file + offset → hash(object ID) → CRUSH(placement group) → OSD&lt;br /&gt;
** Each client has knowledge of the entire storage network&lt;br /&gt;
** Tracks failure groups (same breaker, switch, etc.), hot data, etc.&lt;br /&gt;
** Number of replicas is changeable on the fly, but the placement group is not&lt;br /&gt;
*** For example, if every client on the planet is accessing the same file, you can scale out for that data.&lt;br /&gt;
** You don&#039;t ask where to go, you just go, which makes this very scalable&lt;br /&gt;
&lt;br /&gt;
Any distributed file system that aims to be scalable, need to cut down the number of messages floating around, instead of the actual data transfer, which is what Ceph aims to do with the CRUSH function. basically Client or OSD just need to be aware of this CRUSH algorithm(function) and they can find the location of a file on their own (instead of asking a master server about it), so basically it eliminates the traditional File allocation list approach. &lt;br /&gt;
&lt;br /&gt;
* CRUSH is sufficiently advanced to be called magic.&lt;br /&gt;
** O(log n) of the size of the data&lt;br /&gt;
** CPUs stupidly fast, so the above is of minimal overhead&lt;br /&gt;
*** the network, despite being fast, has latency, etc. &lt;br /&gt;
*** Computation scales much better than communication.&lt;br /&gt;
&lt;br /&gt;
* Storage is composed of variable-length atoms&lt;br /&gt;
&lt;br /&gt;
= Class Discussion = &lt;br /&gt;
&lt;br /&gt;
== File Size ==&lt;br /&gt;
In Anil’s opinion “how file system size compares to the server storage size?” is a key parameter that distinguishes GFS, NFS designs from the early file systems NFS, AFS, Plan 9. In the early files system designs, file system size was a fraction of the server storage size where as in GFS and Ceph the file system size can be of several times magnitude than that of the server. &lt;br /&gt;
&lt;br /&gt;
== Segue on drives and sequential access following GFS section ==&lt;br /&gt;
&lt;br /&gt;
* Structure of GFS does match some other modern systems:&lt;br /&gt;
** Hard drives are like parallel tapes, very suited for streaming.&lt;br /&gt;
** Flash devices are log-structured too, but have an abstracting firmware.&lt;br /&gt;
*** They do erasure in bulk, in the &#039;&#039;&#039;background&#039;&#039;&#039;. &lt;br /&gt;
*** Used to be we needed specialized FS for [http://en.wikipedia.org/wiki/Memory_Technology_Device MTDs] to get better performance; though now we have better micro-controllers in some embedded systems to abstract away the hardware.&lt;br /&gt;
* Architectures that start big, often end up in the smallest things.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lookups vs hashing ==&lt;br /&gt;
One key aspect in the Ceph design is the attempt to replace communication with computation by using hashing based mechanism CRUSH. Following line from Anil epitomizes the general approach that is followed in the field of Computer Science “If one abstraction does not work stick another one in”.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_10&amp;diff=18660</id>
		<title>DistOS 2014W Lecture 10</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_10&amp;diff=18660"/>
		<updated>2014-02-23T19:25:44Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: Added line about EBOFS&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==GFS and Ceph (Feb. 4)==&lt;br /&gt;
* [http://research.google.com/archive/gfs-sosp2003.pdf Sanjay Ghemawat et al., &amp;quot;The Google File System&amp;quot; (SOSP 2003)]&lt;br /&gt;
* [http://www.usenix.org/events/osdi06/tech/weil.html Weil et al., Ceph: A Scalable, High-Performance Distributed File System (OSDI 2006)].&lt;br /&gt;
&lt;br /&gt;
== GFS ==&lt;br /&gt;
GFS is a distributed file system designed specifically for Google&#039; needs and they made two assumption while designing GFS:&lt;br /&gt;
&lt;br /&gt;
# Most of the Data is written in the form of appends ( write at the end of a file) &lt;br /&gt;
# Data read from the files is read in a streaming sort of way ( read lot of data in the form of sequential access). &lt;br /&gt;
&lt;br /&gt;
Because of this, they decided to lay emphasis on better performance for sequential access. These two assumption are also the reason because of which they chose to keep the chunk size so huge (64 MB). You can easily read large blocks if you get rid of sequential access.&lt;br /&gt;
&lt;br /&gt;
* Very different design because of the workload that it is designed for:&lt;br /&gt;
** Because of the number of small files that have to be indexed for the web, it is no longer practical to have a file system that stores these individually. Too much overhead. Punts problem to userspace, incl. record delimitation.&lt;br /&gt;
* Don&#039;t care about latency, surprising considering it&#039;s Google, the guys who change the TCP IW standard recommendations for latency.&lt;br /&gt;
* Mostly seeking (sequentially) through entire file.&lt;br /&gt;
* Paper from 2003, mentions still using 100BASE-T links.&lt;br /&gt;
* Data-heavy, metadata light. Contacting the metadata server is a rare event.&lt;br /&gt;
* Consider hardware failures as normal operating conditions:&lt;br /&gt;
** uses commodity hardware&lt;br /&gt;
** All the replication (!)&lt;br /&gt;
** Data checksumming&lt;br /&gt;
* Performance degrades for small random access workload; use other filesystem.&lt;br /&gt;
* Path of least resistance to scale, not to do something super CS-smart.&lt;br /&gt;
* Google used to re-index every month, swapping out indexes. Now, it&#039;s much more online. GFS is now just a layer to support a more dynamic layer.&lt;br /&gt;
* The paper seems to lack any mention of security. This FS probably could only exist on a trusted network.&lt;br /&gt;
&lt;br /&gt;
== How other filesystems compare to GFS and Ceph ==&lt;br /&gt;
&lt;br /&gt;
* Other File Systems: AFS, NFS, Plan 9, traditional Unix&lt;br /&gt;
&lt;br /&gt;
* Data and metadata are held together.&lt;br /&gt;
** They did not optimize for different access patterns:&lt;br /&gt;
*** Data → big, long transfers&lt;br /&gt;
*** Metadata → small, low latency&lt;br /&gt;
** Can&#039;t scale separately&lt;br /&gt;
&lt;br /&gt;
* Designed for lower latency&lt;br /&gt;
&lt;br /&gt;
* (Mostly) designed for POSIX semantics&lt;br /&gt;
** how the requirements that lead to the ‘standard’ evolved&lt;br /&gt;
&lt;br /&gt;
* Assumed that a file is a fraction of the size of a server&lt;br /&gt;
** eg. files on a Unix system were meant to be text files.&lt;br /&gt;
** Huge files spread over many servers not even in the cards for NFS&lt;br /&gt;
** Meant for small problems, not web-scale&lt;br /&gt;
*** Google has a copy of the publicly accessible internet&lt;br /&gt;
**** Their strategy is to copy the internet to index it&lt;br /&gt;
**** Insane → insane filesystem&lt;br /&gt;
**** One file may span multiple servers&lt;br /&gt;
&lt;br /&gt;
* Even mainframes, scale-up solutions, ultra-reliable systems, with data sets bigger than RAM don&#039;t have the scale of GFS or CEPH.&lt;br /&gt;
&lt;br /&gt;
* Point-to-point access; much less load-balancing, even in AFS&lt;br /&gt;
** One server to service multiple clients.&lt;br /&gt;
** Single point of entry, single point of failure, bottleneck&lt;br /&gt;
&lt;br /&gt;
* Less focus on fault tolerance&lt;br /&gt;
** No notion of data replication.&lt;br /&gt;
&lt;br /&gt;
* Reliability was a property of the host, not the network&lt;br /&gt;
&lt;br /&gt;
==Ceph==&lt;br /&gt;
&lt;br /&gt;
* Ceph is crazy and tries to do everything&lt;br /&gt;
* GFS was very specifically designed to work in a limited scenario, under certain specific conditions, whereas CEPH is sort of generic solution- for how to build a scalable distributed file system&lt;br /&gt;
&lt;br /&gt;
* Achieves high performance, relaibility and availabily through three design features: decoupled data and metadata, dynamically distributed meta data, reliable autonomic distributed object storage.&lt;br /&gt;
** Decoupled data and meta data: Metadata operations (open, close) happen to metadata clusters, clients interact directly with OSD&#039;s for IO.&lt;br /&gt;
** Distributed Meta Data:  Meta data operations make up a lot of work load. Ceph distributes this workload to many Meta Data Servers (MDS) to maintail a file hierarchy.&lt;br /&gt;
** automic object storage: OSD&#039;s organise amongst themselves, taking advantage of their onboard CPU and Memory. Ceph delegates datamigration, replication, failure detection, recovery, to the cluster of OSDs.&lt;br /&gt;
&lt;br /&gt;
* Distributed Meta Data&lt;br /&gt;
** Unlike GFS&lt;br /&gt;
** Clusters of MDSes.&lt;br /&gt;
** Utilizes Dynamic Subtree partitioning: Dynamically mapped subtrees of directories to MDSes. Workloads for every subtree are monitored. Subtrees assigned to MDSes accordingly, in a coarse way.&lt;br /&gt;
&lt;br /&gt;
* Near-Posix like interface: selectively extend interface while relaxing consistency semantics.&lt;br /&gt;
** ex: &#039;&#039;readdirplus&#039;&#039; is an extension which optimizes for a common sequence of operations: &#039;&#039;readdir&#039;&#039; followed by multiple &#039;&#039;stats&#039;&#039;. This requires brief caching to improve performance which may let small concurrent changes to go unnoticed.&lt;br /&gt;
* Object Storage Devices (OSDs) have some intelligence (unlike GFS), and autonomously distribute the data, rather than being controlled by a master.&lt;br /&gt;
** Uses EBOFS (instead of ext3). Implemented in user space to avoid dealing with kernel issues. Aggressively schedules disk writes.&lt;br /&gt;
** Uses hashing in the distribution process to &#039;&#039;&#039;uniformly&#039;&#039;&#039; distribute data&lt;br /&gt;
** The actual algorithm for distributing data is as follows:&lt;br /&gt;
*** file + offset → hash(object ID) → CRUSH(placement group) → OSD&lt;br /&gt;
** Each client has knowledge of the entire storage network&lt;br /&gt;
** Tracks failure groups (same breaker, switch, etc.), hot data, etc.&lt;br /&gt;
** Number of replicas is changeable on the fly, but the placement group is not&lt;br /&gt;
*** For example, if every client on the planet is accessing the same file, you can scale out for that data.&lt;br /&gt;
** You don&#039;t ask where to go, you just go, which makes this very scalable&lt;br /&gt;
&lt;br /&gt;
Any distributed file system that aims to be scalable, need to cut down the number of messages floating around, instead of the actual data transfer, which is what Ceph aims to do with the CRUSH function. basically Client or OSD just need to be aware of this CRUSH algorithm(function) and they can find the location of a file on their own (instead of asking a master server about it), so basically it eliminates the traditional File allocation list approach. &lt;br /&gt;
&lt;br /&gt;
* CRUSH is sufficiently advanced to be called magic.&lt;br /&gt;
** O(log n) of the size of the data&lt;br /&gt;
** CPUs stupidly fast, so the above is of minimal overhead&lt;br /&gt;
*** the network, despite being fast, has latency, etc. &lt;br /&gt;
*** Computation scales much better than communication.&lt;br /&gt;
&lt;br /&gt;
* Storage is composed of variable-length atoms&lt;br /&gt;
&lt;br /&gt;
= Class Discussion = &lt;br /&gt;
&lt;br /&gt;
== File Size ==&lt;br /&gt;
In Anil’s opinion “how file system size compares to the server storage size?” is a key parameter that distinguishes GFS, NFS designs from the early file systems NFS, AFS, Plan 9. In the early files system designs, file system size was a fraction of the server storage size where as in GFS and Ceph the file system size can be of several times magnitude than that of the server. &lt;br /&gt;
&lt;br /&gt;
== Segue on drives and sequential access following GFS section ==&lt;br /&gt;
&lt;br /&gt;
* Structure of GFS does match some other modern systems:&lt;br /&gt;
** Hard drives are like parallel tapes, very suited for streaming.&lt;br /&gt;
** Flash devices are log-structured too, but have an abstracting firmware.&lt;br /&gt;
*** They do erasure in bulk, in the &#039;&#039;&#039;background&#039;&#039;&#039;. &lt;br /&gt;
*** Used to be we needed specialized FS for [http://en.wikipedia.org/wiki/Memory_Technology_Device MTDs] to get better performance; though now we have better micro-controllers in some embedded systems to abstract away the hardware.&lt;br /&gt;
* Architectures that start big, often end up in the smallest things.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lookups vs hashing ==&lt;br /&gt;
One key aspect in the Ceph design is the attempt to replace communication with computation by using hashing based mechanism CRUSH. Following line from Anil epitomizes the general approach that is followed in the field of Computer Science “If one abstraction does not work stick another one in”.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_10&amp;diff=18659</id>
		<title>DistOS 2014W Lecture 10</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_10&amp;diff=18659"/>
		<updated>2014-02-23T19:09:51Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: More on distributed meta data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==GFS and Ceph (Feb. 4)==&lt;br /&gt;
* [http://research.google.com/archive/gfs-sosp2003.pdf Sanjay Ghemawat et al., &amp;quot;The Google File System&amp;quot; (SOSP 2003)]&lt;br /&gt;
* [http://www.usenix.org/events/osdi06/tech/weil.html Weil et al., Ceph: A Scalable, High-Performance Distributed File System (OSDI 2006)].&lt;br /&gt;
&lt;br /&gt;
== GFS ==&lt;br /&gt;
GFS is a distributed file system designed specifically for Google&#039; needs and they made two assumption while designing GFS:&lt;br /&gt;
&lt;br /&gt;
# Most of the Data is written in the form of appends ( write at the end of a file) &lt;br /&gt;
# Data read from the files is read in a streaming sort of way ( read lot of data in the form of sequential access). &lt;br /&gt;
&lt;br /&gt;
Because of this, they decided to lay emphasis on better performance for sequential access. These two assumption are also the reason because of which they chose to keep the chunk size so huge (64 MB). You can easily read large blocks if you get rid of sequential access.&lt;br /&gt;
&lt;br /&gt;
* Very different design because of the workload that it is designed for:&lt;br /&gt;
** Because of the number of small files that have to be indexed for the web, it is no longer practical to have a file system that stores these individually. Too much overhead. Punts problem to userspace, incl. record delimitation.&lt;br /&gt;
* Don&#039;t care about latency, surprising considering it&#039;s Google, the guys who change the TCP IW standard recommendations for latency.&lt;br /&gt;
* Mostly seeking (sequentially) through entire file.&lt;br /&gt;
* Paper from 2003, mentions still using 100BASE-T links.&lt;br /&gt;
* Data-heavy, metadata light. Contacting the metadata server is a rare event.&lt;br /&gt;
* Consider hardware failures as normal operating conditions:&lt;br /&gt;
** uses commodity hardware&lt;br /&gt;
** All the replication (!)&lt;br /&gt;
** Data checksumming&lt;br /&gt;
* Performance degrades for small random access workload; use other filesystem.&lt;br /&gt;
* Path of least resistance to scale, not to do something super CS-smart.&lt;br /&gt;
* Google used to re-index every month, swapping out indexes. Now, it&#039;s much more online. GFS is now just a layer to support a more dynamic layer.&lt;br /&gt;
* The paper seems to lack any mention of security. This FS probably could only exist on a trusted network.&lt;br /&gt;
&lt;br /&gt;
== How other filesystems compare to GFS and Ceph ==&lt;br /&gt;
&lt;br /&gt;
* Other File Systems: AFS, NFS, Plan 9, traditional Unix&lt;br /&gt;
&lt;br /&gt;
* Data and metadata are held together.&lt;br /&gt;
** They did not optimize for different access patterns:&lt;br /&gt;
*** Data → big, long transfers&lt;br /&gt;
*** Metadata → small, low latency&lt;br /&gt;
** Can&#039;t scale separately&lt;br /&gt;
&lt;br /&gt;
* Designed for lower latency&lt;br /&gt;
&lt;br /&gt;
* (Mostly) designed for POSIX semantics&lt;br /&gt;
** how the requirements that lead to the ‘standard’ evolved&lt;br /&gt;
&lt;br /&gt;
* Assumed that a file is a fraction of the size of a server&lt;br /&gt;
** eg. files on a Unix system were meant to be text files.&lt;br /&gt;
** Huge files spread over many servers not even in the cards for NFS&lt;br /&gt;
** Meant for small problems, not web-scale&lt;br /&gt;
*** Google has a copy of the publicly accessible internet&lt;br /&gt;
**** Their strategy is to copy the internet to index it&lt;br /&gt;
**** Insane → insane filesystem&lt;br /&gt;
**** One file may span multiple servers&lt;br /&gt;
&lt;br /&gt;
* Even mainframes, scale-up solutions, ultra-reliable systems, with data sets bigger than RAM don&#039;t have the scale of GFS or CEPH.&lt;br /&gt;
&lt;br /&gt;
* Point-to-point access; much less load-balancing, even in AFS&lt;br /&gt;
** One server to service multiple clients.&lt;br /&gt;
** Single point of entry, single point of failure, bottleneck&lt;br /&gt;
&lt;br /&gt;
* Less focus on fault tolerance&lt;br /&gt;
** No notion of data replication.&lt;br /&gt;
&lt;br /&gt;
* Reliability was a property of the host, not the network&lt;br /&gt;
&lt;br /&gt;
==Ceph==&lt;br /&gt;
&lt;br /&gt;
* Ceph is crazy and tries to do everything&lt;br /&gt;
* GFS was very specifically designed to work in a limited scenario, under certain specific conditions, whereas CEPH is sort of generic solution- for how to build a scalable distributed file system&lt;br /&gt;
&lt;br /&gt;
* Achieves high performance, relaibility and availabily through three design features: decoupled data and metadata, dynamically distributed meta data, reliable autonomic distributed object storage.&lt;br /&gt;
** Decoupled data and meta data: Metadata operations (open, close) happen to metadata clusters, clients interact directly with OSD&#039;s for IO.&lt;br /&gt;
** Distributed Meta Data:  Meta data operations make up a lot of work load. Ceph distributes this workload to many Meta Data Servers (MDS) to maintail a file hierarchy.&lt;br /&gt;
** automic object storage: OSD&#039;s organise amongst themselves, taking advantage of their onboard CPU and Memory. Ceph delegates datamigration, replication, failure detection, recovery, to the cluster of OSDs.&lt;br /&gt;
&lt;br /&gt;
* Distributed Meta Data&lt;br /&gt;
** Unlike GFS&lt;br /&gt;
** Clusters of MDSes.&lt;br /&gt;
** Utilizes Dynamic Subtree partitioning: Dynamically mapped subtrees of directories to MDSes. Workloads for every subtree are monitored. Subtrees assigned to MDSes accordingly, in a coarse way.&lt;br /&gt;
&lt;br /&gt;
* Near-Posix like interface: selectively extend interface while relaxing consistency semantics.&lt;br /&gt;
** ex: &#039;&#039;readdirplus&#039;&#039; is an extension which optimizes for a common sequence of operations: &#039;&#039;readdir&#039;&#039; followed by multiple &#039;&#039;stats&#039;&#039;. This requires brief caching to improve performance which may let small concurrent changes to go unnoticed.&lt;br /&gt;
* Unlike GFS, the Object Storage Devices (OSDs) have some intelligence, and autonomously distribute the data, rather than being controlled by a master.&lt;br /&gt;
** Uses hashing in the distribution process to &#039;&#039;&#039;uniformly&#039;&#039;&#039; distribute data&lt;br /&gt;
** The actual algorithm for distributing data is as follows:&lt;br /&gt;
*** file + offset → hash(object ID) → CRUSH(placement group) → OSD&lt;br /&gt;
** Each client has knowledge of the entire storage network&lt;br /&gt;
** Tracks failure groups (same breaker, switch, etc.), hot data, etc.&lt;br /&gt;
** Number of replicas is changeable on the fly, but the placement group is not&lt;br /&gt;
*** For example, if every client on the planet is accessing the same file, you can scale out for that data.&lt;br /&gt;
** You don&#039;t ask where to go, you just go, which makes this very scalable&lt;br /&gt;
&lt;br /&gt;
Any distributed file system that aims to be scalable, need to cut down the number of messages floating around, instead of the actual data transfer, which is what Ceph aims to do with the CRUSH function. basically Client or OSD just need to be aware of this CRUSH algorithm(function) and they can find the location of a file on their own (instead of asking a master server about it), so basically it eliminates the traditional File allocation list approach. &lt;br /&gt;
&lt;br /&gt;
* CRUSH is sufficiently advanced to be called magic.&lt;br /&gt;
** O(log n) of the size of the data&lt;br /&gt;
** CPUs stupidly fast, so the above is of minimal overhead&lt;br /&gt;
*** the network, despite being fast, has latency, etc. &lt;br /&gt;
*** Computation scales much better than communication.&lt;br /&gt;
&lt;br /&gt;
* Storage is composed of variable-length atoms&lt;br /&gt;
&lt;br /&gt;
= Class Discussion = &lt;br /&gt;
&lt;br /&gt;
== File Size ==&lt;br /&gt;
In Anil’s opinion “how file system size compares to the server storage size?” is a key parameter that distinguishes GFS, NFS designs from the early file systems NFS, AFS, Plan 9. In the early files system designs, file system size was a fraction of the server storage size where as in GFS and Ceph the file system size can be of several times magnitude than that of the server. &lt;br /&gt;
&lt;br /&gt;
== Segue on drives and sequential access following GFS section ==&lt;br /&gt;
&lt;br /&gt;
* Structure of GFS does match some other modern systems:&lt;br /&gt;
** Hard drives are like parallel tapes, very suited for streaming.&lt;br /&gt;
** Flash devices are log-structured too, but have an abstracting firmware.&lt;br /&gt;
*** They do erasure in bulk, in the &#039;&#039;&#039;background&#039;&#039;&#039;. &lt;br /&gt;
*** Used to be we needed specialized FS for [http://en.wikipedia.org/wiki/Memory_Technology_Device MTDs] to get better performance; though now we have better micro-controllers in some embedded systems to abstract away the hardware.&lt;br /&gt;
* Architectures that start big, often end up in the smallest things.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lookups vs hashing ==&lt;br /&gt;
One key aspect in the Ceph design is the attempt to replace communication with computation by using hashing based mechanism CRUSH. Following line from Anil epitomizes the general approach that is followed in the field of Computer Science “If one abstraction does not work stick another one in”.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_10&amp;diff=18658</id>
		<title>DistOS 2014W Lecture 10</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_10&amp;diff=18658"/>
		<updated>2014-02-23T18:49:25Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: POSIX w/relaxing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==GFS and Ceph (Feb. 4)==&lt;br /&gt;
* [http://research.google.com/archive/gfs-sosp2003.pdf Sanjay Ghemawat et al., &amp;quot;The Google File System&amp;quot; (SOSP 2003)]&lt;br /&gt;
* [http://www.usenix.org/events/osdi06/tech/weil.html Weil et al., Ceph: A Scalable, High-Performance Distributed File System (OSDI 2006)].&lt;br /&gt;
&lt;br /&gt;
== GFS ==&lt;br /&gt;
GFS is a distributed file system designed specifically for Google&#039; needs and they made two assumption while designing GFS:&lt;br /&gt;
&lt;br /&gt;
# Most of the Data is written in the form of appends ( write at the end of a file) &lt;br /&gt;
# Data read from the files is read in a streaming sort of way ( read lot of data in the form of sequential access). &lt;br /&gt;
&lt;br /&gt;
Because of this, they decided to lay emphasis on better performance for sequential access. These two assumption are also the reason because of which they chose to keep the chunk size so huge (64 MB). You can easily read large blocks if you get rid of sequential access.&lt;br /&gt;
&lt;br /&gt;
* Very different design because of the workload that it is designed for:&lt;br /&gt;
** Because of the number of small files that have to be indexed for the web, it is no longer practical to have a file system that stores these individually. Too much overhead. Punts problem to userspace, incl. record delimitation.&lt;br /&gt;
* Don&#039;t care about latency, surprising considering it&#039;s Google, the guys who change the TCP IW standard recommendations for latency.&lt;br /&gt;
* Mostly seeking (sequentially) through entire file.&lt;br /&gt;
* Paper from 2003, mentions still using 100BASE-T links.&lt;br /&gt;
* Data-heavy, metadata light. Contacting the metadata server is a rare event.&lt;br /&gt;
* Consider hardware failures as normal operating conditions:&lt;br /&gt;
** uses commodity hardware&lt;br /&gt;
** All the replication (!)&lt;br /&gt;
** Data checksumming&lt;br /&gt;
* Performance degrades for small random access workload; use other filesystem.&lt;br /&gt;
* Path of least resistance to scale, not to do something super CS-smart.&lt;br /&gt;
* Google used to re-index every month, swapping out indexes. Now, it&#039;s much more online. GFS is now just a layer to support a more dynamic layer.&lt;br /&gt;
* The paper seems to lack any mention of security. This FS probably could only exist on a trusted network.&lt;br /&gt;
&lt;br /&gt;
== How other filesystems compare to GFS and Ceph ==&lt;br /&gt;
&lt;br /&gt;
* Other File Systems: AFS, NFS, Plan 9, traditional Unix&lt;br /&gt;
&lt;br /&gt;
* Data and metadata are held together.&lt;br /&gt;
** They did not optimize for different access patterns:&lt;br /&gt;
*** Data → big, long transfers&lt;br /&gt;
*** Metadata → small, low latency&lt;br /&gt;
** Can&#039;t scale separately&lt;br /&gt;
&lt;br /&gt;
* Designed for lower latency&lt;br /&gt;
&lt;br /&gt;
* (Mostly) designed for POSIX semantics&lt;br /&gt;
** how the requirements that lead to the ‘standard’ evolved&lt;br /&gt;
&lt;br /&gt;
* Assumed that a file is a fraction of the size of a server&lt;br /&gt;
** eg. files on a Unix system were meant to be text files.&lt;br /&gt;
** Huge files spread over many servers not even in the cards for NFS&lt;br /&gt;
** Meant for small problems, not web-scale&lt;br /&gt;
*** Google has a copy of the publicly accessible internet&lt;br /&gt;
**** Their strategy is to copy the internet to index it&lt;br /&gt;
**** Insane → insane filesystem&lt;br /&gt;
**** One file may span multiple servers&lt;br /&gt;
&lt;br /&gt;
* Even mainframes, scale-up solutions, ultra-reliable systems, with data sets bigger than RAM don&#039;t have the scale of GFS or CEPH.&lt;br /&gt;
&lt;br /&gt;
* Point-to-point access; much less load-balancing, even in AFS&lt;br /&gt;
** One server to service multiple clients.&lt;br /&gt;
** Single point of entry, single point of failure, bottleneck&lt;br /&gt;
&lt;br /&gt;
* Less focus on fault tolerance&lt;br /&gt;
** No notion of data replication.&lt;br /&gt;
&lt;br /&gt;
* Reliability was a property of the host, not the network&lt;br /&gt;
&lt;br /&gt;
==Ceph==&lt;br /&gt;
&lt;br /&gt;
* Ceph is crazy and tries to do everything&lt;br /&gt;
* GFS was very specifically designed to work in a limited scenario, under certain specific conditions, whereas CEPH is sort of generic solution- for how to build a scalable distributed file system&lt;br /&gt;
&lt;br /&gt;
* Achieves high performance, relaibility and availabily through three design features: decoupled data and metadata, dynamically distributed meta data, reliable autonomic distributed object storage.&lt;br /&gt;
** Decoupled data and meta data: Metadata operations (open, close) happen to metadata clusters, clients interact directly with OSD&#039;s for IO.&lt;br /&gt;
** Distributed Meta Data:  Meta data operations make up a lot of work load. Ceph distributes this workload to many Meta Data Servers (MDS) to maintail a file hierarchy.&lt;br /&gt;
** automic object storage: OSD&#039;s organise amongst themselves, taking advantage of their onboard CPU and Memory. Ceph delegates datamigration, replication, failure detection, recovery, to the cluster of OSDs.&lt;br /&gt;
&lt;br /&gt;
* Unlike GFS, distributes metadata, not just for read-only copies&lt;br /&gt;
* Near-Posix like interface: selectively extend interface while relaxing consistency semantics.&lt;br /&gt;
** ex: &#039;&#039;readdirplus&#039;&#039; is an extension which optimizes for a common sequence of operations: &#039;&#039;readdir&#039;&#039; followed by multiple &#039;&#039;stats&#039;&#039;. This requires brief caching to improve performance which may let small concurrent changes to go unnoticed.&lt;br /&gt;
* Unlike GFS, the Object Storage Devices (OSDs) have some intelligence, and autonomously distribute the data, rather than being controlled by a master.&lt;br /&gt;
** Uses hashing in the distribution process to &#039;&#039;&#039;uniformly&#039;&#039;&#039; distribute data&lt;br /&gt;
** The actual algorithm for distributing data is as follows:&lt;br /&gt;
*** file + offset → hash(object ID) → CRUSH(placement group) → OSD&lt;br /&gt;
** Each client has knowledge of the entire storage network&lt;br /&gt;
** Tracks failure groups (same breaker, switch, etc.), hot data, etc.&lt;br /&gt;
** Number of replicas is changeable on the fly, but the placement group is not&lt;br /&gt;
*** For example, if every client on the planet is accessing the same file, you can scale out for that data.&lt;br /&gt;
** You don&#039;t ask where to go, you just go, which makes this very scalable&lt;br /&gt;
&lt;br /&gt;
Any distributed file system that aims to be scalable, need to cut down the number of messages floating around, instead of the actual data transfer, which is what Ceph aims to do with the CRUSH function. basically Client or OSD just need to be aware of this CRUSH algorithm(function) and they can find the location of a file on their own (instead of asking a master server about it), so basically it eliminates the traditional File allocation list approach. &lt;br /&gt;
&lt;br /&gt;
* CRUSH is sufficiently advanced to be called magic.&lt;br /&gt;
** O(log n) of the size of the data&lt;br /&gt;
** CPUs stupidly fast, so the above is of minimal overhead&lt;br /&gt;
*** the network, despite being fast, has latency, etc. &lt;br /&gt;
*** Computation scales much better than communication.&lt;br /&gt;
&lt;br /&gt;
* Storage is composed of variable-length atoms&lt;br /&gt;
&lt;br /&gt;
= Class Discussion = &lt;br /&gt;
&lt;br /&gt;
== File Size ==&lt;br /&gt;
In Anil’s opinion “how file system size compares to the server storage size?” is a key parameter that distinguishes GFS, NFS designs from the early file systems NFS, AFS, Plan 9. In the early files system designs, file system size was a fraction of the server storage size where as in GFS and Ceph the file system size can be of several times magnitude than that of the server. &lt;br /&gt;
&lt;br /&gt;
== Segue on drives and sequential access following GFS section ==&lt;br /&gt;
&lt;br /&gt;
* Structure of GFS does match some other modern systems:&lt;br /&gt;
** Hard drives are like parallel tapes, very suited for streaming.&lt;br /&gt;
** Flash devices are log-structured too, but have an abstracting firmware.&lt;br /&gt;
*** They do erasure in bulk, in the &#039;&#039;&#039;background&#039;&#039;&#039;. &lt;br /&gt;
*** Used to be we needed specialized FS for [http://en.wikipedia.org/wiki/Memory_Technology_Device MTDs] to get better performance; though now we have better micro-controllers in some embedded systems to abstract away the hardware.&lt;br /&gt;
* Architectures that start big, often end up in the smallest things.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lookups vs hashing ==&lt;br /&gt;
One key aspect in the Ceph design is the attempt to replace communication with computation by using hashing based mechanism CRUSH. Following line from Anil epitomizes the general approach that is followed in the field of Computer Science “If one abstraction does not work stick another one in”.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_10&amp;diff=18657</id>
		<title>DistOS 2014W Lecture 10</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_10&amp;diff=18657"/>
		<updated>2014-02-23T18:32:33Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: Added more overview information.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==GFS and Ceph (Feb. 4)==&lt;br /&gt;
* [http://research.google.com/archive/gfs-sosp2003.pdf Sanjay Ghemawat et al., &amp;quot;The Google File System&amp;quot; (SOSP 2003)]&lt;br /&gt;
* [http://www.usenix.org/events/osdi06/tech/weil.html Weil et al., Ceph: A Scalable, High-Performance Distributed File System (OSDI 2006)].&lt;br /&gt;
&lt;br /&gt;
== GFS ==&lt;br /&gt;
GFS is a distributed file system designed specifically for Google&#039; needs and they made two assumption while designing GFS:&lt;br /&gt;
&lt;br /&gt;
# Most of the Data is written in the form of appends ( write at the end of a file) &lt;br /&gt;
# Data read from the files is read in a streaming sort of way ( read lot of data in the form of sequential access). &lt;br /&gt;
&lt;br /&gt;
Because of this, they decided to lay emphasis on better performance for sequential access. These two assumption are also the reason because of which they chose to keep the chunk size so huge (64 MB). You can easily read large blocks if you get rid of sequential access.&lt;br /&gt;
&lt;br /&gt;
* Very different design because of the workload that it is designed for:&lt;br /&gt;
** Because of the number of small files that have to be indexed for the web, it is no longer practical to have a file system that stores these individually. Too much overhead. Punts problem to userspace, incl. record delimitation.&lt;br /&gt;
* Don&#039;t care about latency, surprising considering it&#039;s Google, the guys who change the TCP IW standard recommendations for latency.&lt;br /&gt;
* Mostly seeking (sequentially) through entire file.&lt;br /&gt;
* Paper from 2003, mentions still using 100BASE-T links.&lt;br /&gt;
* Data-heavy, metadata light. Contacting the metadata server is a rare event.&lt;br /&gt;
* Consider hardware failures as normal operating conditions:&lt;br /&gt;
** uses commodity hardware&lt;br /&gt;
** All the replication (!)&lt;br /&gt;
** Data checksumming&lt;br /&gt;
* Performance degrades for small random access workload; use other filesystem.&lt;br /&gt;
* Path of least resistance to scale, not to do something super CS-smart.&lt;br /&gt;
* Google used to re-index every month, swapping out indexes. Now, it&#039;s much more online. GFS is now just a layer to support a more dynamic layer.&lt;br /&gt;
* The paper seems to lack any mention of security. This FS probably could only exist on a trusted network.&lt;br /&gt;
&lt;br /&gt;
== How other filesystems compare to GFS and Ceph ==&lt;br /&gt;
&lt;br /&gt;
* Other File Systems: AFS, NFS, Plan 9, traditional Unix&lt;br /&gt;
&lt;br /&gt;
* Data and metadata are held together.&lt;br /&gt;
** They did not optimize for different access patterns:&lt;br /&gt;
*** Data → big, long transfers&lt;br /&gt;
*** Metadata → small, low latency&lt;br /&gt;
** Can&#039;t scale separately&lt;br /&gt;
&lt;br /&gt;
* Designed for lower latency&lt;br /&gt;
&lt;br /&gt;
* (Mostly) designed for POSIX semantics&lt;br /&gt;
** how the requirements that lead to the ‘standard’ evolved&lt;br /&gt;
&lt;br /&gt;
* Assumed that a file is a fraction of the size of a server&lt;br /&gt;
** eg. files on a Unix system were meant to be text files.&lt;br /&gt;
** Huge files spread over many servers not even in the cards for NFS&lt;br /&gt;
** Meant for small problems, not web-scale&lt;br /&gt;
*** Google has a copy of the publicly accessible internet&lt;br /&gt;
**** Their strategy is to copy the internet to index it&lt;br /&gt;
**** Insane → insane filesystem&lt;br /&gt;
**** One file may span multiple servers&lt;br /&gt;
&lt;br /&gt;
* Even mainframes, scale-up solutions, ultra-reliable systems, with data sets bigger than RAM don&#039;t have the scale of GFS or CEPH.&lt;br /&gt;
&lt;br /&gt;
* Point-to-point access; much less load-balancing, even in AFS&lt;br /&gt;
** One server to service multiple clients.&lt;br /&gt;
** Single point of entry, single point of failure, bottleneck&lt;br /&gt;
&lt;br /&gt;
* Less focus on fault tolerance&lt;br /&gt;
** No notion of data replication.&lt;br /&gt;
&lt;br /&gt;
* Reliability was a property of the host, not the network&lt;br /&gt;
&lt;br /&gt;
==Ceph==&lt;br /&gt;
&lt;br /&gt;
* Ceph is crazy and tries to do everything&lt;br /&gt;
* GFS was very specifically designed to work in a limited scenario, under certain specific conditions, whereas CEPH is sort of generic solution- for how to build a scalable distributed file system&lt;br /&gt;
&lt;br /&gt;
* Achieves high performance, relaibility and availabily through three design features: decoupled data and metadata, dynamically distributed meta data, reliable autonomic distributed object storage.&lt;br /&gt;
** Decoupled data and meta data: Metadata operations (open, close) happen to metadata clusters, clients interact directly with OSD&#039;s for IO.&lt;br /&gt;
** Distributed Meta Data:  Meta data operations make up a lot of work load. Ceph distributes this workload to many Meta Data Servers (MDS) to maintail a file hierarchy.&lt;br /&gt;
** automic object storage: OSD&#039;s organise amongst themselves, taking advantage of their onboard CPU and Memory. Ceph delegates datamigration, replication, failure detection, recovery, to the cluster of OSDs.&lt;br /&gt;
&lt;br /&gt;
* Unlike GFS, distributes metadata, not just for read-only copies&lt;br /&gt;
* Near-Posix like interface: selectively extend interface while relaxing consistency semantics. &lt;br /&gt;
* Unlike GFS, the Object Storage Devices (OSDs) have some intelligence, and autonomously distribute the data, rather than being controlled by a master.&lt;br /&gt;
** Uses hashing in the distribution process to &#039;&#039;&#039;uniformly&#039;&#039;&#039; distribute data&lt;br /&gt;
** The actual algorithm for distributing data is as follows:&lt;br /&gt;
*** file + offset → hash(object ID) → CRUSH(placement group) → OSD&lt;br /&gt;
** Each client has knowledge of the entire storage network&lt;br /&gt;
** Tracks failure groups (same breaker, switch, etc.), hot data, etc.&lt;br /&gt;
** Number of replicas is changeable on the fly, but the placement group is not&lt;br /&gt;
*** For example, if every client on the planet is accessing the same file, you can scale out for that data.&lt;br /&gt;
** You don&#039;t ask where to go, you just go, which makes this very scalable&lt;br /&gt;
&lt;br /&gt;
Any distributed file system that aims to be scalable, need to cut down the number of messages floating around, instead of the actual data transfer, which is what Ceph aims to do with the CRUSH function. basically Client or OSD just need to be aware of this CRUSH algorithm(function) and they can find the location of a file on their own (instead of asking a master server about it), so basically it eliminates the traditional File allocation list approach. &lt;br /&gt;
&lt;br /&gt;
* CRUSH is sufficiently advanced to be called magic.&lt;br /&gt;
** O(log n) of the size of the data&lt;br /&gt;
** CPUs stupidly fast, so the above is of minimal overhead&lt;br /&gt;
*** the network, despite being fast, has latency, etc. &lt;br /&gt;
*** Computation scales much better than communication.&lt;br /&gt;
&lt;br /&gt;
* Storage is composed of variable-length atoms&lt;br /&gt;
&lt;br /&gt;
= Class Discussion = &lt;br /&gt;
&lt;br /&gt;
== File Size ==&lt;br /&gt;
In Anil’s opinion “how file system size compares to the server storage size?” is a key parameter that distinguishes GFS, NFS designs from the early file systems NFS, AFS, Plan 9. In the early files system designs, file system size was a fraction of the server storage size where as in GFS and Ceph the file system size can be of several times magnitude than that of the server. &lt;br /&gt;
&lt;br /&gt;
== Segue on drives and sequential access following GFS section ==&lt;br /&gt;
&lt;br /&gt;
* Structure of GFS does match some other modern systems:&lt;br /&gt;
** Hard drives are like parallel tapes, very suited for streaming.&lt;br /&gt;
** Flash devices are log-structured too, but have an abstracting firmware.&lt;br /&gt;
*** They do erasure in bulk, in the &#039;&#039;&#039;background&#039;&#039;&#039;. &lt;br /&gt;
*** Used to be we needed specialized FS for [http://en.wikipedia.org/wiki/Memory_Technology_Device MTDs] to get better performance; though now we have better micro-controllers in some embedded systems to abstract away the hardware.&lt;br /&gt;
* Architectures that start big, often end up in the smallest things.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lookups vs hashing ==&lt;br /&gt;
One key aspect in the Ceph design is the attempt to replace communication with computation by using hashing based mechanism CRUSH. Following line from Anil epitomizes the general approach that is followed in the field of Computer Science “If one abstraction does not work stick another one in”.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_10&amp;diff=18656</id>
		<title>DistOS 2014W Lecture 10</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_10&amp;diff=18656"/>
		<updated>2014-02-21T22:03:23Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: linebreak&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==GFS and Ceph (Feb. 4)==&lt;br /&gt;
* [http://research.google.com/archive/gfs-sosp2003.pdf Sanjay Ghemawat et al., &amp;quot;The Google File System&amp;quot; (SOSP 2003)]&lt;br /&gt;
* [http://www.usenix.org/events/osdi06/tech/weil.html Weil et al., Ceph: A Scalable, High-Performance Distributed File System (OSDI 2006)].&lt;br /&gt;
&lt;br /&gt;
== GFS ==&lt;br /&gt;
GFS is a distributed file system designed specifically for Google&#039; needs and they made two assumption while designing GFS:&lt;br /&gt;
&lt;br /&gt;
# Most of the Data is written in the form of appends ( write at the end of a file) &lt;br /&gt;
# Data read from the files is read in a streaming sort of way ( read lot of data in the form of sequential access). &lt;br /&gt;
&lt;br /&gt;
Because of this, they decided to lay emphasis on better performance for sequential access. These two assumption are also the reason because of which they chose to keep the chunk size so huge (64 MB). You can easily read large blocks if you get rid of sequential access.&lt;br /&gt;
&lt;br /&gt;
* Very different design because of the workload that it is designed for:&lt;br /&gt;
** Because of the number of small files that have to be indexed for the web, it is no longer practical to have a file system that stores these individually. Too much overhead. Punts problem to userspace, incl. record delimitation.&lt;br /&gt;
* Don&#039;t care about latency, surprising considering it&#039;s Google, the guys who change the TCP IW standard recommendations for latency.&lt;br /&gt;
* Mostly seeking (sequentially) through entire file.&lt;br /&gt;
* Paper from 2003, mentions still using 100BASE-T links.&lt;br /&gt;
* Data-heavy, metadata light. Contacting the metadata server is a rare event.&lt;br /&gt;
* Consider hardware failures as normal operating conditions:&lt;br /&gt;
** uses commodity hardware&lt;br /&gt;
** All the replication (!)&lt;br /&gt;
** Data checksumming&lt;br /&gt;
* Performance degrades for small random access workload; use other filesystem.&lt;br /&gt;
* Path of least resistance to scale, not to do something super CS-smart.&lt;br /&gt;
* Google used to re-index every month, swapping out indexes. Now, it&#039;s much more online. GFS is now just a layer to support a more dynamic layer.&lt;br /&gt;
* The paper seems to lack any mention of security. This FS probably could only exist on a trusted network.&lt;br /&gt;
&lt;br /&gt;
== How other filesystems compare to GFS and Ceph ==&lt;br /&gt;
&lt;br /&gt;
* Other File Systems: AFS, NFS, Plan 9, traditional Unix&lt;br /&gt;
&lt;br /&gt;
* Data and metadata are held together.&lt;br /&gt;
** They did not optimize for different access patterns:&lt;br /&gt;
*** Data → big, long transfers&lt;br /&gt;
*** Metadata → small, low latency&lt;br /&gt;
** Can&#039;t scale separately&lt;br /&gt;
&lt;br /&gt;
* Designed for lower latency&lt;br /&gt;
&lt;br /&gt;
* (Mostly) designed for POSIX semantics&lt;br /&gt;
** how the requirements that lead to the ‘standard’ evolved&lt;br /&gt;
&lt;br /&gt;
* Assumed that a file is a fraction of the size of a server&lt;br /&gt;
** eg. files on a Unix system were meant to be text files.&lt;br /&gt;
** Huge files spread over many servers not even in the cards for NFS&lt;br /&gt;
** Meant for small problems, not web-scale&lt;br /&gt;
*** Google has a copy of the publicly accessible internet&lt;br /&gt;
**** Their strategy is to copy the internet to index it&lt;br /&gt;
**** Insane → insane filesystem&lt;br /&gt;
**** One file may span multiple servers&lt;br /&gt;
&lt;br /&gt;
* Even mainframes, scale-up solutions, ultra-reliable systems, with data sets bigger than RAM don&#039;t have the scale of GFS or CEPH.&lt;br /&gt;
&lt;br /&gt;
* Point-to-point access; much less load-balancing, even in AFS&lt;br /&gt;
** One server to service multiple clients.&lt;br /&gt;
** Single point of entry, single point of failure, bottleneck&lt;br /&gt;
&lt;br /&gt;
* Less focus on fault tolerance&lt;br /&gt;
** No notion of data replication.&lt;br /&gt;
&lt;br /&gt;
* Reliability was a property of the host, not the network&lt;br /&gt;
&lt;br /&gt;
==Ceph==&lt;br /&gt;
&lt;br /&gt;
* Ceph is crazy and tries to do everything&lt;br /&gt;
* GFS was very specifically designed to work in a limited scenario, under certain specific conditions, whereas CEPH is sort of generic solution- for how to build a scalable distributed file system&lt;br /&gt;
* Unlike GFS, distributes metadata, not just for read-only copies&lt;br /&gt;
* Unlike GFS, the OSDs have some intelligence, and autonomously distribute the data, rather than being controlled by a master.&lt;br /&gt;
** Uses hashing in the distribution process to &#039;&#039;&#039;uniformly&#039;&#039;&#039; distribute data&lt;br /&gt;
** The actual algorithm for distributing data is as follows:&lt;br /&gt;
*** file + offset → hash(object ID) → CRUSH(placement group) → OSD&lt;br /&gt;
** Each client has knowledge of the entire storage network&lt;br /&gt;
** Tracks failure groups (same breaker, switch, etc.), hot data, etc.&lt;br /&gt;
** Number of replicas is changeable on the fly, but the placement group is not&lt;br /&gt;
*** For example, if every client on the planet is accessing the same file, you can scale out for that data.&lt;br /&gt;
** You don&#039;t ask where to go, you just go, which makes this very scalable&lt;br /&gt;
&lt;br /&gt;
Any distributed file system that aims to be scalable, need to cut down the number of messages floating around, instead of the actual data transfer, which is what Ceph aims to do with the CRUSH function. basically Client or OSD just need to be aware of this CRUSH algorithm(function) and they can find the location of a file on their own (instead of asking a master server about it), so basically it eliminates the traditional File allocation list approach. &lt;br /&gt;
&lt;br /&gt;
* CRUSH is sufficiently advanced to be called magic.&lt;br /&gt;
** O(log n) of the size of the data&lt;br /&gt;
** CPUs stupidly fast, so the above is of minimal overhead&lt;br /&gt;
*** the network, despite being fast, has latency, etc. &lt;br /&gt;
*** Computation scales much better than communication.&lt;br /&gt;
&lt;br /&gt;
* Storage is composed of variable-length atoms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Class Discussion = &lt;br /&gt;
&lt;br /&gt;
== File Size ==&lt;br /&gt;
In Anil’s opinion “how file system size compares to the server storage size?” is a key parameter that distinguishes GFS, NFS designs from the early file systems NFS, AFS, Plan 9. In the early files system designs, file system size was a fraction of the server storage size where as in GFS and Ceph the file system size can be of several times magnitude than that of the server. &lt;br /&gt;
&lt;br /&gt;
== Segue on drives and sequential access following GFS section ==&lt;br /&gt;
&lt;br /&gt;
* Structure of GFS does match some other modern systems:&lt;br /&gt;
** Hard drives are like parallel tapes, very suited for streaming.&lt;br /&gt;
** Flash devices are log-structured too, but have an abstracting firmware.&lt;br /&gt;
*** They do erasure in bulk, in the &#039;&#039;&#039;background&#039;&#039;&#039;. &lt;br /&gt;
*** Used to be we needed specialized FS for [http://en.wikipedia.org/wiki/Memory_Technology_Device MTDs] to get better performance; though now we have better micro-controllers in some embedded systems to abstract away the hardware.&lt;br /&gt;
* Architectures that start big, often end up in the smallest things.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lookups vs hashing ==&lt;br /&gt;
One key aspect in the Ceph design is the attempt to replace communication with computation by using hashing based mechanism CRUSH. Following line from Anil epitomizes the general approach that is followed in the field of Computer Science “If one abstraction does not work stick another one in”.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_10&amp;diff=18655</id>
		<title>DistOS 2014W Lecture 10</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_10&amp;diff=18655"/>
		<updated>2014-02-21T22:02:58Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: /* GFS */ Added a few tid bits.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==GFS and Ceph (Feb. 4)==&lt;br /&gt;
* [http://research.google.com/archive/gfs-sosp2003.pdf Sanjay Ghemawat et al., &amp;quot;The Google File System&amp;quot; (SOSP 2003)]&lt;br /&gt;
* [http://www.usenix.org/events/osdi06/tech/weil.html Weil et al., Ceph: A Scalable, High-Performance Distributed File System (OSDI 2006)].&lt;br /&gt;
&lt;br /&gt;
== GFS ==&lt;br /&gt;
GFS is a distributed file system designed specifically for Google&#039; needs and they made two assumption while designing GFS:&lt;br /&gt;
&lt;br /&gt;
# Most of the Data is written in the form of appends ( write at the end of a file) &lt;br /&gt;
# Data read from the files is read in a streaming sort of way ( read lot of data in the form of sequential access). &lt;br /&gt;
&lt;br /&gt;
Because of this, they decided to lay emphasis on better performance for sequential access. These two assumption are also the reason because of which they chose to keep the chunk size so huge (64 MB). You can easily read large blocks if you get rid of sequential access.&lt;br /&gt;
&lt;br /&gt;
* Very different design because of the workload that it is designed for:&lt;br /&gt;
** Because of the number of small files that have to be indexed for the web, it is no longer practical to have a file system that stores these individually. Too much overhead. Punts problem to userspace, incl. record delimitation.&lt;br /&gt;
* Don&#039;t care about latency, surprising considering it&#039;s Google, the guys who change the TCP IW standard recommendations for latency.&lt;br /&gt;
* Mostly seeking (sequentially) through entire file.&lt;br /&gt;
* Paper from 2003, mentions still using 100BASE-T links.&lt;br /&gt;
* Data-heavy, metadata light. Contacting the metadata server is a rare event.&lt;br /&gt;
* Consider hardware failures as normal operating conditions:&lt;br /&gt;
** uses commodity hardware&lt;br /&gt;
** All the replication (!)&lt;br /&gt;
** Data checksumming&lt;br /&gt;
* Performance degrades for small random access workload; use other filesystem.&lt;br /&gt;
* Path of least resistance to scale, not to do something super CS-smart.&lt;br /&gt;
* Google used to re-index every month, swapping out indexes. Now, it&#039;s much more online. GFS is now just a layer to support a more dynamic layer.&lt;br /&gt;
* The paper seems to lack any mention of security. This FS probably could only&lt;br /&gt;
exist on a trusted network.&lt;br /&gt;
&lt;br /&gt;
== How other filesystems compare to GFS and Ceph ==&lt;br /&gt;
&lt;br /&gt;
* Other File Systems: AFS, NFS, Plan 9, traditional Unix&lt;br /&gt;
&lt;br /&gt;
* Data and metadata are held together.&lt;br /&gt;
** They did not optimize for different access patterns:&lt;br /&gt;
*** Data → big, long transfers&lt;br /&gt;
*** Metadata → small, low latency&lt;br /&gt;
** Can&#039;t scale separately&lt;br /&gt;
&lt;br /&gt;
* Designed for lower latency&lt;br /&gt;
&lt;br /&gt;
* (Mostly) designed for POSIX semantics&lt;br /&gt;
** how the requirements that lead to the ‘standard’ evolved&lt;br /&gt;
&lt;br /&gt;
* Assumed that a file is a fraction of the size of a server&lt;br /&gt;
** eg. files on a Unix system were meant to be text files.&lt;br /&gt;
** Huge files spread over many servers not even in the cards for NFS&lt;br /&gt;
** Meant for small problems, not web-scale&lt;br /&gt;
*** Google has a copy of the publicly accessible internet&lt;br /&gt;
**** Their strategy is to copy the internet to index it&lt;br /&gt;
**** Insane → insane filesystem&lt;br /&gt;
**** One file may span multiple servers&lt;br /&gt;
&lt;br /&gt;
* Even mainframes, scale-up solutions, ultra-reliable systems, with data sets bigger than RAM don&#039;t have the scale of GFS or CEPH.&lt;br /&gt;
&lt;br /&gt;
* Point-to-point access; much less load-balancing, even in AFS&lt;br /&gt;
** One server to service multiple clients.&lt;br /&gt;
** Single point of entry, single point of failure, bottleneck&lt;br /&gt;
&lt;br /&gt;
* Less focus on fault tolerance&lt;br /&gt;
** No notion of data replication.&lt;br /&gt;
&lt;br /&gt;
* Reliability was a property of the host, not the network&lt;br /&gt;
&lt;br /&gt;
==Ceph==&lt;br /&gt;
&lt;br /&gt;
* Ceph is crazy and tries to do everything&lt;br /&gt;
* GFS was very specifically designed to work in a limited scenario, under certain specific conditions, whereas CEPH is sort of generic solution- for how to build a scalable distributed file system&lt;br /&gt;
* Unlike GFS, distributes metadata, not just for read-only copies&lt;br /&gt;
* Unlike GFS, the OSDs have some intelligence, and autonomously distribute the data, rather than being controlled by a master.&lt;br /&gt;
** Uses hashing in the distribution process to &#039;&#039;&#039;uniformly&#039;&#039;&#039; distribute data&lt;br /&gt;
** The actual algorithm for distributing data is as follows:&lt;br /&gt;
*** file + offset → hash(object ID) → CRUSH(placement group) → OSD&lt;br /&gt;
** Each client has knowledge of the entire storage network&lt;br /&gt;
** Tracks failure groups (same breaker, switch, etc.), hot data, etc.&lt;br /&gt;
** Number of replicas is changeable on the fly, but the placement group is not&lt;br /&gt;
*** For example, if every client on the planet is accessing the same file, you can scale out for that data.&lt;br /&gt;
** You don&#039;t ask where to go, you just go, which makes this very scalable&lt;br /&gt;
&lt;br /&gt;
Any distributed file system that aims to be scalable, need to cut down the number of messages floating around, instead of the actual data transfer, which is what Ceph aims to do with the CRUSH function. basically Client or OSD just need to be aware of this CRUSH algorithm(function) and they can find the location of a file on their own (instead of asking a master server about it), so basically it eliminates the traditional File allocation list approach. &lt;br /&gt;
&lt;br /&gt;
* CRUSH is sufficiently advanced to be called magic.&lt;br /&gt;
** O(log n) of the size of the data&lt;br /&gt;
** CPUs stupidly fast, so the above is of minimal overhead&lt;br /&gt;
*** the network, despite being fast, has latency, etc. &lt;br /&gt;
*** Computation scales much better than communication.&lt;br /&gt;
&lt;br /&gt;
* Storage is composed of variable-length atoms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Class Discussion = &lt;br /&gt;
&lt;br /&gt;
== File Size ==&lt;br /&gt;
In Anil’s opinion “how file system size compares to the server storage size?” is a key parameter that distinguishes GFS, NFS designs from the early file systems NFS, AFS, Plan 9. In the early files system designs, file system size was a fraction of the server storage size where as in GFS and Ceph the file system size can be of several times magnitude than that of the server. &lt;br /&gt;
&lt;br /&gt;
== Segue on drives and sequential access following GFS section ==&lt;br /&gt;
&lt;br /&gt;
* Structure of GFS does match some other modern systems:&lt;br /&gt;
** Hard drives are like parallel tapes, very suited for streaming.&lt;br /&gt;
** Flash devices are log-structured too, but have an abstracting firmware.&lt;br /&gt;
*** They do erasure in bulk, in the &#039;&#039;&#039;background&#039;&#039;&#039;. &lt;br /&gt;
*** Used to be we needed specialized FS for [http://en.wikipedia.org/wiki/Memory_Technology_Device MTDs] to get better performance; though now we have better micro-controllers in some embedded systems to abstract away the hardware.&lt;br /&gt;
* Architectures that start big, often end up in the smallest things.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lookups vs hashing ==&lt;br /&gt;
One key aspect in the Ceph design is the attempt to replace communication with computation by using hashing based mechanism CRUSH. Following line from Anil epitomizes the general approach that is followed in the field of Computer Science “If one abstraction does not work stick another one in”.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_3&amp;diff=18654</id>
		<title>DistOS 2014W Lecture 3</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_3&amp;diff=18654"/>
		<updated>2014-02-21T21:56:58Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: added link to paper and title&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==The Early Internet (Jan. 14)==&lt;br /&gt;
&lt;br /&gt;
* [https://homeostasis.scs.carleton.ca/~soma/distos/2014w/kahn1972-resource.pdf Robert E. Kahn, &amp;quot;Resource-Sharing Computer Communications Networks&amp;quot; (1972)]  [http://dx.doi.org/10.1109/PROC.1972.8911 (DOI)]&lt;br /&gt;
* [https://archive.org/details/ComputerNetworks_TheHeraldsOfResourceSharing Computer Networks: The Heralds of Resource Sharing (1972)] - video&lt;br /&gt;
&lt;br /&gt;
== Questions to consider: ==&lt;br /&gt;
* What were the purposes envisioned for computer networks?  How do those compare with the uses they are put to today?&lt;br /&gt;
* What sort of resources were shared?  What resources are shared today?&lt;br /&gt;
* What network architecture did they envision?  Do we still have the same architecture?&lt;br /&gt;
* What surprised you about this paper?&lt;br /&gt;
* What was unclear?&lt;br /&gt;
&lt;br /&gt;
==Group 1==&lt;br /&gt;
* video was mostly a summary of Kahn&#039;s paper&lt;br /&gt;
* process migration through different zones of air traffic control&lt;br /&gt;
* &amp;quot;distributed OS&amp;quot; meant something different than we normally think about, because many people would log in remotely to a single machine, it is very much like cloud infrastructure that we talk about today&lt;br /&gt;
* alto paper makes reference to Kahn&#039;s paper, and the alto designers had the foresight to see that networks like arpanet would be necessary&lt;br /&gt;
* would it be useful to have a co-processor responsible for maintaining shared resources even today?  Like the IMPs of the arpanet?  Today, computers are usually so fast it doesn&#039;t really matter.&lt;br /&gt;
&lt;br /&gt;
=== Questions ===&lt;br /&gt;
&lt;br /&gt;
* What were the purposes envisioned for computer networks?&lt;br /&gt;
** big computation, storage, resource sharing - &amp;quot;having a library on a hard disk&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* How do those compare with the uses they are put to today?&lt;br /&gt;
** those things are being done, but mostly communication like instant messaging, email&lt;br /&gt;
&lt;br /&gt;
* What sort of resources were shared?&lt;br /&gt;
** databases, CPU time&lt;br /&gt;
&lt;br /&gt;
* What resources are shared today?&lt;br /&gt;
** mostly storage&lt;br /&gt;
&lt;br /&gt;
* What network architecture did they envision?  &lt;br /&gt;
** they had a checksum and acknowledge on each packet&lt;br /&gt;
** the IMPs were the network interface and the routers&lt;br /&gt;
** packet-switching&lt;br /&gt;
&lt;br /&gt;
* Do we still have the same architecture?&lt;br /&gt;
** packet-switching definitely won&lt;br /&gt;
** no, now IP doesn&#039;t checksum or acknowledge, but TCP has end-to-end checksum and acknowledge&lt;br /&gt;
** Kahn went on to learn from the errors of arpanet to design TCP/IP&lt;br /&gt;
** the job of network interface and router have been decoupled&lt;br /&gt;
&lt;br /&gt;
* What surprised you about this paper?&lt;br /&gt;
** everything&lt;br /&gt;
** how they were able to do this&lt;br /&gt;
** a network interface card and router was the size of a fridge&lt;br /&gt;
** high-level languages&lt;br /&gt;
** bootstrap protocol, bootstrapping an application&lt;br /&gt;
** primitive computers&lt;br /&gt;
** desktop publishing&lt;br /&gt;
** the logistics of running a cable from one university to another&lt;br /&gt;
** how old the idea of distributed operating systems is&lt;br /&gt;
&lt;br /&gt;
* What was unclear?&lt;br /&gt;
** much of the more technical specifications, but we mostly skipped over those&lt;br /&gt;
&lt;br /&gt;
==Group 2==&lt;br /&gt;
1. The main purpose of early networks was resource sharing. Abstraction for transmission. Message reliability was a by-product. The underlying idea is the same.&lt;br /&gt;
&lt;br /&gt;
2. Specialized Hardware/software and information sharing. super set of sharing.&lt;br /&gt;
&lt;br /&gt;
3. AD-HOC routing, it was TCP without saying it. Largely unchanged today.&lt;br /&gt;
&lt;br /&gt;
==Group 3==&lt;br /&gt;
===Envisioned computer network purposes===&lt;br /&gt;
* Improving reliability of services, due to redundant resource sets&lt;br /&gt;
* Resource sharing&lt;br /&gt;
* Usage modes:t&lt;br /&gt;
** Users can use a remote terminal, from a remote office or home, to access those resources.&lt;br /&gt;
** Would allow centralization of resources, to improve ease of management and do away with inefficiencies&lt;br /&gt;
* Allow specialization of various sites. rather than each site trying to do it all&lt;br /&gt;
* Distributed simulations (notably air traffic control)&lt;br /&gt;
&lt;br /&gt;
Information-sharing is still relevant today, especially in research and large simulations. Remote access has mostly devolved into a specialized need.&lt;br /&gt;
&lt;br /&gt;
===Resources shared===&lt;br /&gt;
* Computing resources (especially expensive mainframes)&lt;br /&gt;
* Data sets&lt;br /&gt;
&lt;br /&gt;
===Network architecture===&lt;br /&gt;
* A primitive layered architecture&lt;br /&gt;
* Dedicated routing functions&lt;br /&gt;
* Various topologies:&lt;br /&gt;
** star&lt;br /&gt;
** loop&lt;br /&gt;
** bus&lt;br /&gt;
* Primarily (packet|mesage)-switched&lt;br /&gt;
** Circuit-switching too expensive and has large setup times&lt;br /&gt;
** Doesn&#039;t require committing resources&lt;br /&gt;
* Primitive flow control and buffering&lt;br /&gt;
* Predates proper congestion control such as Van Jacobsen&#039;s slow start&lt;br /&gt;
* Ad-hoc routing or based on something similar to RIP&lt;br /&gt;
* Anticipation of elephants and mice latency issues&lt;br /&gt;
* Unlike modern internet, error control and retransmission at every step&lt;br /&gt;
&lt;br /&gt;
The architecture today is similar, but the link-layer is very different: use of Ethernet and ATM. The modern internet is a collection of autonomous systems, not a single network. Routing propogation is now large-scale, and semi-automated (e.g., BGP externally, IS-IS and OSPF internally)&lt;br /&gt;
&lt;br /&gt;
===Surprising aspects===&lt;br /&gt;
&lt;br /&gt;
===Unclear portions===&lt;br /&gt;
* Weird packet format: Page 1400 (4 of PDF): “Node 6, discovering the message is for itself,&lt;br /&gt;
  replaces the destination address by the source address&lt;br /&gt;
&lt;br /&gt;
==Group 4==&lt;br /&gt;
&lt;br /&gt;
* What were the purposes envisioned for computer networks? How do those compare with the uses they are put to today?&lt;br /&gt;
&lt;br /&gt;
Networks were envisioned as providing remote access to other computers, because useful resources such as computing power, large databases, and non-portable software were local to a particular computer, not themselves shared over the network.&lt;br /&gt;
&lt;br /&gt;
Today, we use networks mostly for sharing data, although with services like Amazon AWS, we&#039;re starting to share computing resources again.  We&#039;re also moving to support collaboration (e.g. Google Docs, GitHub, etc.).&lt;br /&gt;
&lt;br /&gt;
* What sort of resources were shared? What resources are shared today?&lt;br /&gt;
&lt;br /&gt;
Computing power was the key resource being shared; today, it&#039;s access to data.  (See above.)&lt;br /&gt;
&lt;br /&gt;
* What network architecture did they envision? Do we still have the same architecture?&lt;br /&gt;
&lt;br /&gt;
Surprisingly, yes: modern networks have substantially similar architecures to the ones described in these papers.  &lt;br /&gt;
Packet-switched networks are now ubiquitous.  We no longer bother with circuit-switching even for telephony, in contrast to the assumption that non-network data would continue to use the circuit-switched common-carrier network.  &lt;br /&gt;
&lt;br /&gt;
* What surprised you about this paper?&lt;br /&gt;
&lt;br /&gt;
We were surprised by the accuracy of the predictions given how early the paper was written — even things like electronic banking.  Also surprising were technological advances since the paper was written, such as data transfer speeds (we have networks that are faster than the integrated bus in the Alto), and the predicted resolution requirements (which we are nowhere near meeting).  The amount of detail in the description of the &#039;mouse pointing device&#039; was interesting too.&lt;br /&gt;
&lt;br /&gt;
* What was unclear? &lt;br /&gt;
&lt;br /&gt;
Nothing significant; we&#039;re looking at these with the benefit of hindsight.&lt;br /&gt;
&lt;br /&gt;
==Summary of the discussion from lecture==&lt;br /&gt;
Anil&#039;s view is that even these days we can imagine Computer Networks as more of a resource sharing platform. For example when we access the web or search Google we are making use of the resource sharing facilitated by the Internet(Network of interconnected Computer Networks). It&#039;s not possible to put 20,000 computers in our basements’, instead the Internet facilitates access to computing power/databases which are built of hundred thousands of computers. In fact Google and other popular search engines has a local copy of the entire web in their data centers, centralized copy of a large distributed system. Kind of a contradictory phenomenon if you think about in terms of the design goals of the distributed system. &lt;br /&gt;
&lt;br /&gt;
Another important takeaway from the discussion was the point that &amp;quot;Early to market/ first player&amp;quot; with a new product/solution to a niche problem and the one which offer solutions based on simple mechanisms as opposed to one relying on complex mechanism gets adopted faster. Classic example is the Internet. ARPANET which was supposed to be an academic research project which was based on simple mechanisms, open and first of its kind got adopted widely and evolved in to the Internet as we see it today. It is to note that this approach is not without its own drawbacks example being the security aspects were not factored in while designing the ARPANET since it was intended to be a network between trusted parties, which was fine then. But when ARPANET evolved in to the Internet, security aspect was one area which required a major focus on. In Silicon Valley the focus is on being the &amp;quot;first player&amp;quot; in a niche market to meet that objective often simple framework/mechanisms are used. In doing so there is also a possibility of leaving out some components which can turn out to be a vital missing link, recent example being security flaw in &#039;snapchat&#039; that lead to user data being exposed.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_4&amp;diff=18653</id>
		<title>DistOS 2014W Lecture 4</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_4&amp;diff=18653"/>
		<updated>2014-02-21T21:54:55Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: added link to paper and title&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==The Alto (Jan. 16)==&lt;br /&gt;
&lt;br /&gt;
* [https://homeostasis.scs.carleton.ca/~soma/distos/2014w/alto.pdf Thacker et al., &amp;quot;Alto: A Personal computer&amp;quot; (1979)]  ([https://archive.org/details/bitsavers_xeroxparcttoAPersonalComputer_6560658 archive.org])&lt;br /&gt;
&lt;br /&gt;
Discussions on the Alto&lt;br /&gt;
&lt;br /&gt;
==CPU, Memory, Disk==&lt;br /&gt;
&lt;br /&gt;
====CPU====&lt;br /&gt;
&lt;br /&gt;
The general hardware architecture of the CPU was biased towards the user, meaning that a greater focus was put on IO capabilities and less focus was put on computational power (arithmetic etc). There were two levels of task-switching; the CPU provided sixteen fixed-priority tasks with hardware interrupts, each of which was permanently assigned to a piece of hardware. Only one of these tasks (the lowest-priority) was dedicated to the user. This task actually ran a virtualized BCPL machine (a C-like language); the user had no access at all to the underlying microcode. Other languages could be emulated as well.&lt;br /&gt;
&lt;br /&gt;
====Memory====&lt;br /&gt;
&lt;br /&gt;
The Alto started with 64K of 16-bit words of memory and eventually grew to 256K words. However, the higher memory was not accessible except through special tricks, similar to the way that memory above 4GB is not accessible today on 32-bit systems without special tricks.&lt;br /&gt;
&lt;br /&gt;
====Task Switching====&lt;br /&gt;
&lt;br /&gt;
One thing that was confusing was that they refer to tasks both as the 16 fixed hardware tasks and the many software tasks that could be multiplexed onto the lowest-priority of those hardware tasks. In either case, task switching was cooperative; until a task gave up control by running a specific instruction, no other task could run. From a modern perspective this looks like a major security problem, since malicious software could simply never relinquish the CPU. However, the fact that hardware was first-class in this sense (with full access to the CPU and memory) made the hardware simpler because much of the complexity could be done in software. Perhaps the first hints of what we now think of as drivers?&lt;br /&gt;
&lt;br /&gt;
====Disk and Filesystem====&lt;br /&gt;
&lt;br /&gt;
To make use of disk controller read,write,truncate,delete and etc. commands were made available.To reduce the risk of global damage structural information was saved to label in each page.hints mechanism was also a available using directory get where file resides in disk.file integrity a was check using seal bit and label.&lt;br /&gt;
&lt;br /&gt;
==Ethernet, Networking protocols==&lt;br /&gt;
Although the original motive of Alto as a personal computer was to serve the needs of a single user, it was figured out that communicating with other Alto’s/computers would facilitate resource sharing – for collaboration and economic reasons. The main design objectives for the computer network connecting personal computers (Altos) were:&lt;br /&gt;
&lt;br /&gt;
Data transmission speed: Bandwidth which should at least match the memory bus speed to give the end user a consistent notion that the resources accessed over the network should also have the same latency as compared to resource accessed within the computer&lt;br /&gt;
&lt;br /&gt;
Size of network: Capability to connect large number of nodes together&lt;br /&gt;
&lt;br /&gt;
Reliability: Once the user starts to use resources/service over a network it is vital to ensure that the network is reliable enough so that the user gets the quality of service required.&lt;br /&gt;
&lt;br /&gt;
Alto uses a general packet transport system which can be thought of as a set of standard communication protocols towards facilitating interoperability. &lt;br /&gt;
&lt;br /&gt;
The key element enabling the communication system between Alto and other computers was the Ethernet, a Layer 2 protocol and mechanism developed in-house at Xerox by Robert Metcalf et al. Following are the characteristics of the Ethernet – Broadcast, packet-switched network with bandwidth – 3Mbits/sec which can connect 256 computers together, and allows up have a distance of 1 Km between two connected nodes. Another important aspect of Ethernet was new nodes/computers could be added/removed/powered-on/powered-off from the network without disturbing the already existing network communications. Since Ethernet offered only best effort service without guarantees for an error free service, towards achieving reliable communication over it a hierarchy of layered communication protocols were implemented in Alto.&lt;br /&gt;
&lt;br /&gt;
Alto had the capability to act as a gateway connecting different networks together. Xerox had a “Xerox Internet” consisting of several hundred computers, 25 networks and 20 gateways providing internet service back in 1979. &lt;br /&gt;
&lt;br /&gt;
Ethernet communications system had two components – Ethernet controller and transceiver. Ethernet controller performed the encoding/decoding, buffering and micromachine interfacing functionalities whereas the transceiver deals with the transmission/reception of bits, which operated in half-duplex mode. &lt;br /&gt;
&lt;br /&gt;
One important different with respect to the design of the Ethernet controller task as opposed to the ones for display and disk were that there were no periodic events to wake this task up instead a S-group instruction was used to set a flip flop in Ethernet hardware which was used to wake up the Ethernet controller task. Also the Ethernet used interrupt based mechanism used to indicate completion since the packet reception/transmission happens asynchronously. Ethernet microcode implements a packet filtering mechanism which checks for the reception of (1) destined for the host (2) broadcast packets. It can also operate in a promiscuous mode with host address set to zero receiving all packets, which can be used for debugging purposes.&lt;br /&gt;
&lt;br /&gt;
Ethernet had no security mechanism built into it. Since Ethernet was a collision domain an exponential backoff algorithm was implemented towards avoiding collisions (which occurs when two Ethernet transmitters tries to use the ether at the same time).&lt;br /&gt;
&lt;br /&gt;
==Graphics, Mouse, Printing==&lt;br /&gt;
&lt;br /&gt;
===Graphics===&lt;br /&gt;
&lt;br /&gt;
A lot of time was spent on what paper and ink provides us in a display sense, constantly referencing an 8.5 by 11 piece of paper as the type of display they were striving for. This showed what they were attempting to emulate in the Alto&#039;s display. The authors proposed 500 - 1000 black or white bits per inch of display (i.e. 500 - 1000 dpi). However, they were unable to pursue this goal, instead settling for 70 dpi for the display, allowing them to show things such as 10 pt text. They state that a 30 Hz refresh rate was found to not be objectionable. Interestingly, however, we would find this objectionable today--most likely from being spoiled with the sheer speed of computers today, whereas the authors were used to slower performance. The Alto&#039;s display took up &#039;&#039;&#039;half&#039;&#039;&#039; the Alto&#039;s memory, a choice we found very interesting. &lt;br /&gt;
&lt;br /&gt;
Another interesting point was that the authors state that they thought it was beneficial that they could access display memory directly rather than using conventional frame buffer organizations. While we are unsure of what they meant by traditional frame buffer organizations, it is interesting to note that frame buffer organizations is what we use today for our displays.&lt;br /&gt;
&lt;br /&gt;
===Mouse===&lt;br /&gt;
&lt;br /&gt;
The mouse outlined in the paper was 200 dpi (vs. a standard mouse from Apple which is 1300 dpi) and had three buttons (one of the standard configurations of mice that are produced today). They were already using different mouse cursors (i.e., the pointer image of the cursor on screen). The real interesting point here is that the design outlined in the paper was so similar to designs we still use today. The only real divergence was the use of optical mice, although the introduction of optical mice did not altogether halt the use of non-optical mice. Today, we just have more flexibility with regards to how we design mice (e.g., having a scroll wheel, more buttons, etc.).&lt;br /&gt;
&lt;br /&gt;
===Printer===&lt;br /&gt;
&lt;br /&gt;
They state that the printer should print, in one second, an 8.5 by 11 inch page defined with 350 dots/inch (roughly 4000 horizontal scan lines of 3000 dots each). Ironically enough, this is not even what they had wanted for the actual Alto display. However, they did not have enough memory to do this and had to work around this by using things such as an incremental algorithm and reducing the number of scan lines. We were disappointed that they did not actually discuss the hardware implementation of the printer, only the software controller. However, it is interesting that the fact they are dividing the memory requirements of the printer between the hardware itself and the computer was quite a modern idea at the time, and still is.&lt;br /&gt;
&lt;br /&gt;
===Other Interesting Notes===&lt;br /&gt;
&lt;br /&gt;
We found it interesting that peripheral devices were included at all.&lt;br /&gt;
&lt;br /&gt;
The author makes a passing mention to having a tablet to draw on. However, he stated that no one really liked having the tablet as it got in the way of the keyboard.&lt;br /&gt;
&lt;br /&gt;
The recurring theme of lack of memory to implement what they had originally envisioned.&lt;br /&gt;
&lt;br /&gt;
==Applications, Programming Environment==&lt;br /&gt;
&lt;br /&gt;
=== Emulation ===&lt;br /&gt;
A notable feature is that the Alto implemented a BCPL emulator in the PROM microstore. Other emulators were available, but they were loaded in RAM. BCPL was used as the main implementation language for the computer&#039;s applications. Very little assembly was used.&lt;br /&gt;
&lt;br /&gt;
=== Programming Environments ===&lt;br /&gt;
The Alto ran the gamut of available programming environment. A conventional toolchain implemented in BCPL was offered (ie. compiler, linker, debugger, file manager, etc.) Interactive programming environments such as Smalltalk and Interlisp were also available. These fell pray to the Alto&#039;s limited main memory (64k) and suffered crippling performance issues.&lt;br /&gt;
&lt;br /&gt;
The only standardized facilities for programming environments to use was the file system and communication protocols. All other hardware had to be accessed using custom methods.&lt;br /&gt;
&lt;br /&gt;
=== Personal Applications ===&lt;br /&gt;
Applications made use of the display, mouse, and keyboard. They were mostly involved with document production. For example, there was a text editor where the user could specify formatting and typefaces. The PC also helped facilitate and automate aspects of logic board design and assembling.&lt;br /&gt;
&lt;br /&gt;
=== Communication in applications ===&lt;br /&gt;
Most applications were designed with the assumption that the computer would exploit networked resources. For example, printing services would be handled by a printing server, file storage could be local or distributed. The Alto made use of existing services too. Its clock was set by a &#039;time of day&#039; service and it could be bootstrapped over ethernet.&lt;br /&gt;
&lt;br /&gt;
Communication in applications was also used in new and novel ways. For example, the debugger mentioned above was network aware. It could help programmers debug software remotely.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_5&amp;diff=18652</id>
		<title>DistOS 2014W Lecture 5</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_5&amp;diff=18652"/>
		<updated>2014-02-21T21:53:47Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: /* The Mother of all Demos (Jan. 21) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=The Mother of all Demos (Jan. 21)=&lt;br /&gt;
&lt;br /&gt;
* [http://www.dougengelbart.org/firsts/dougs-1968-demo.html Doug Engelbart Institute, &amp;quot;Doug&#039;s 1968 Demo&amp;quot;]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/The_Mother_of_All_Demos Wikipedia&#039;s page on &amp;quot;The Mother of all Demos&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Anil set the theme of the discussion for the week as - to try and understand what the early visionaries/researchers wanted the computer to be and what it has become. Putting in other words what was considered fundamental those days and where those stands today. It is to be noted that features that were easier to implement using simple mechanisms were carried forward where as the ones which demanded more complex systems or the one which were found out to add not much value in the near feature were pegged down in the order. In the same context following observations were made: (1) truly distributed computational infrastructure really makes sense only when we have something to distribute (2) use cases drive the large distributed systems, a good example is The Web. Another key observation from Anil was that there was always a Utopian aspect to the early systems be it NLS, ARPANET or Alto. One good example is that security aspects were never considered essential in those systems assuming them to operate in a trusted environment. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; Operating system&lt;br /&gt;
: The software that turns the computer you have into the one you want (Anil)&lt;br /&gt;
&lt;br /&gt;
* What sort of computer did we want to have?&lt;br /&gt;
* What sort of abstractions did they want to be easy? Hard?&lt;br /&gt;
* What could we build with the internet (not just WAN, but also LAN)?&lt;br /&gt;
* Most dreams people had of their computers smacked into the wall of reality.&lt;br /&gt;
&lt;br /&gt;
= MOAD review in groups =&lt;br /&gt;
&lt;br /&gt;
* Chorded keyboard unfortunately obscure, partly because the attendees disagreed with the long-term investment of training the user.&lt;br /&gt;
* View control → hyperlinking system, but in a lightweight (more like nanoweight) markup language.&lt;br /&gt;
* Ad-hoc ticketing system&lt;br /&gt;
* Ad-hoc messaging system&lt;br /&gt;
** Used on a time-sharing systme with shared storage,&lt;br /&gt;
* Primitive revision control system&lt;br /&gt;
* Different vocabulary:&lt;br /&gt;
** Bug and bug smear (mouse and trail)&lt;br /&gt;
** Point rather than click&lt;br /&gt;
&lt;br /&gt;
= Class review =&lt;br /&gt;
&lt;br /&gt;
* Doug died Jul 2 2013&lt;br /&gt;
* Doug himself called it an “online system”, rather than offline composition of code using card punchers as was common in the day.&lt;br /&gt;
* What became of the tech:&lt;br /&gt;
** Chorded keyboards:&lt;br /&gt;
*** Exist but obscure&lt;br /&gt;
** Pre-ARPANET network:&lt;br /&gt;
*** Time-sharing mainframe&lt;br /&gt;
*** 13 workstations&lt;br /&gt;
*** Telephone and television circuit&lt;br /&gt;
** Mouse&lt;br /&gt;
*** “I sometimes apologize for calling it a mouse”&lt;br /&gt;
** Collaborative document editing integrated with screen sharing&lt;br /&gt;
** Videoconferencing&lt;br /&gt;
*** Part of the vision, but more for the demo at the time,&lt;br /&gt;
** Hyperlinks&lt;br /&gt;
*** The web on a mainframe&lt;br /&gt;
** Languages&lt;br /&gt;
*** Metalanguages&lt;br /&gt;
**** “Part and parcel of their entire vision of augmenting human intelligence.”&lt;br /&gt;
**** You must teach the computer about the language you are using.&lt;br /&gt;
**** They were the use case. It was almost designed more for augmenting programmer intelligence rather than human intelligence.&lt;br /&gt;
*** It was normal for the time to build new languages (domain-specific) for new systems. Nowadays, we standardize on one but develop large APIs, at the expense of conciseness. We look for short-term benefits; we minimize programmer effort.&lt;br /&gt;
*** Compiler compiler&lt;br /&gt;
** Freeze-pane&lt;br /&gt;
** Folding—Zoomable UI (ZUI)&lt;br /&gt;
*** Lots of systems do it, but not the default&lt;br /&gt;
*** Much easier to just present everything.&lt;br /&gt;
** Technologies the required further investment got left behind.&lt;br /&gt;
* The NLS had little to no security&lt;br /&gt;
** There was a minimal notion of a user&lt;br /&gt;
** There was a utopian aspect. Meanwhile, the Mac had no utopian aspect. Data exchange was through floppies. Any network was small, local, ad-hoc, and among trusted peers.&lt;br /&gt;
** The system wasn&#039;t envisioned to scale up to masses of people who didn&#039;t trust each other.&lt;br /&gt;
** How do you enforce secrecy.&lt;br /&gt;
* Part of the reason for lack of adoption of some of the tech was hardware. We can posit that a bigger reason would be infrastructure.&lt;br /&gt;
* Differentiate usability of system from usability of vision&lt;br /&gt;
** What was missing was the polish, the ‘sexiness’, and the intuitiveness of later systems like the Apple II and the Lisa.&lt;br /&gt;
** The usability of the later Alto is still less than commercial systems.&lt;br /&gt;
*** The word processor was modal, which is apt to confuse unmotivated and untrained users.&lt;br /&gt;
* In the context of the Mother of All Demos, the Alto doesn&#039;t seem entirely revolutionary. Xerox PARC raided his team. They almost had a GUI; rather they had what we call today a virtual console, with a few things above.&lt;br /&gt;
* What happens with visionaries that present a big vision is that the spectators latch onto specific aspects.&lt;br /&gt;
* To be comfortable with not adopting the vision, one must ostracize the visionary. People pay attention to things that fit into their world view.&lt;br /&gt;
* Use cases of networking have changed little, though the means did&lt;br /&gt;
* Fundamentally a resource-sharing system; everything is shared, unlike later systems where you would need to explicitly do so. Resources shared fundamentally sense to share: documents, printers, etc.&lt;br /&gt;
* Resource sharing was never enough. &#039;&#039;&#039;Information-sharing&#039;&#039;&#039; was the focus.&lt;br /&gt;
&lt;br /&gt;
“Mother of all demos” is nickname for Engelbart who could make the computers help humans become smarter. &lt;br /&gt;
&lt;br /&gt;
*More interesting in this works that:&lt;br /&gt;
&amp;quot;His idea included seeing computing devices as a means to communicate and retrieve information, rather than just crunch numbers. This idea is represented in NLS”On-Line system”.&lt;br /&gt;
&lt;br /&gt;
*Some information about  NLS system:&lt;br /&gt;
1) NLS was a revolutionary computer collaboration system from the 1960s. &lt;br /&gt;
2) Designed by Douglas Engelbart and implemented by researchers at the Augmentation Research Center (ARC) at the Stanford Research Institute (SRI). &lt;br /&gt;
3) The NLS system was the first to employ the practical use of :&lt;br /&gt;
  a) hypertext links,&lt;br /&gt;
  b) the mouse, &lt;br /&gt;
  c) raster-scan video monitors, &lt;br /&gt;
  d) information organized by relevance, &lt;br /&gt;
  e) screen windowing, &lt;br /&gt;
  f) presentation programs, &lt;br /&gt;
  g) and other modern computing concepts.&lt;br /&gt;
&lt;br /&gt;
= Alto review =&lt;br /&gt;
&lt;br /&gt;
* Fundamentally a personal computer&lt;br /&gt;
* Applications:&lt;br /&gt;
** Drawing program with curves and arcs for drawing&lt;br /&gt;
** Hardware design tools (mostly logic boards)&lt;br /&gt;
** Time server&lt;br /&gt;
* Less designed for reading than the NLS. More designed around paper. Xerox had a laser printer, and you would read what you printed. Hypertext was deprioritized, unlike the NLS vision had focused on what could not be expressed on paper.&lt;br /&gt;
* Xerox had almost an obsession with making documents print beautifully.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_5&amp;diff=18651</id>
		<title>DistOS 2014W Lecture 5</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_5&amp;diff=18651"/>
		<updated>2014-02-21T21:53:34Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: added link to paper and title&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=The Mother of all Demos (Jan. 21)=&lt;br /&gt;
&lt;br /&gt;
If you can, watch the whole demo.  The Stanford version with annotated clips is good if you are short for time.&lt;br /&gt;
&lt;br /&gt;
* [http://www.dougengelbart.org/firsts/dougs-1968-demo.html Doug Engelbart Institute, &amp;quot;Doug&#039;s 1968 Demo&amp;quot;]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/The_Mother_of_All_Demos Wikipedia&#039;s page on &amp;quot;The Mother of all Demos&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Anil set the theme of the discussion for the week as - to try and understand what the early visionaries/researchers wanted the computer to be and what it has become. Putting in other words what was considered fundamental those days and where those stands today. It is to be noted that features that were easier to implement using simple mechanisms were carried forward where as the ones which demanded more complex systems or the one which were found out to add not much value in the near feature were pegged down in the order. In the same context following observations were made: (1) truly distributed computational infrastructure really makes sense only when we have something to distribute (2) use cases drive the large distributed systems, a good example is The Web. Another key observation from Anil was that there was always a Utopian aspect to the early systems be it NLS, ARPANET or Alto. One good example is that security aspects were never considered essential in those systems assuming them to operate in a trusted environment. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; Operating system&lt;br /&gt;
: The software that turns the computer you have into the one you want (Anil)&lt;br /&gt;
&lt;br /&gt;
* What sort of computer did we want to have?&lt;br /&gt;
* What sort of abstractions did they want to be easy? Hard?&lt;br /&gt;
* What could we build with the internet (not just WAN, but also LAN)?&lt;br /&gt;
* Most dreams people had of their computers smacked into the wall of reality.&lt;br /&gt;
&lt;br /&gt;
= MOAD review in groups =&lt;br /&gt;
&lt;br /&gt;
* Chorded keyboard unfortunately obscure, partly because the attendees disagreed with the long-term investment of training the user.&lt;br /&gt;
* View control → hyperlinking system, but in a lightweight (more like nanoweight) markup language.&lt;br /&gt;
* Ad-hoc ticketing system&lt;br /&gt;
* Ad-hoc messaging system&lt;br /&gt;
** Used on a time-sharing systme with shared storage,&lt;br /&gt;
* Primitive revision control system&lt;br /&gt;
* Different vocabulary:&lt;br /&gt;
** Bug and bug smear (mouse and trail)&lt;br /&gt;
** Point rather than click&lt;br /&gt;
&lt;br /&gt;
= Class review =&lt;br /&gt;
&lt;br /&gt;
* Doug died Jul 2 2013&lt;br /&gt;
* Doug himself called it an “online system”, rather than offline composition of code using card punchers as was common in the day.&lt;br /&gt;
* What became of the tech:&lt;br /&gt;
** Chorded keyboards:&lt;br /&gt;
*** Exist but obscure&lt;br /&gt;
** Pre-ARPANET network:&lt;br /&gt;
*** Time-sharing mainframe&lt;br /&gt;
*** 13 workstations&lt;br /&gt;
*** Telephone and television circuit&lt;br /&gt;
** Mouse&lt;br /&gt;
*** “I sometimes apologize for calling it a mouse”&lt;br /&gt;
** Collaborative document editing integrated with screen sharing&lt;br /&gt;
** Videoconferencing&lt;br /&gt;
*** Part of the vision, but more for the demo at the time,&lt;br /&gt;
** Hyperlinks&lt;br /&gt;
*** The web on a mainframe&lt;br /&gt;
** Languages&lt;br /&gt;
*** Metalanguages&lt;br /&gt;
**** “Part and parcel of their entire vision of augmenting human intelligence.”&lt;br /&gt;
**** You must teach the computer about the language you are using.&lt;br /&gt;
**** They were the use case. It was almost designed more for augmenting programmer intelligence rather than human intelligence.&lt;br /&gt;
*** It was normal for the time to build new languages (domain-specific) for new systems. Nowadays, we standardize on one but develop large APIs, at the expense of conciseness. We look for short-term benefits; we minimize programmer effort.&lt;br /&gt;
*** Compiler compiler&lt;br /&gt;
** Freeze-pane&lt;br /&gt;
** Folding—Zoomable UI (ZUI)&lt;br /&gt;
*** Lots of systems do it, but not the default&lt;br /&gt;
*** Much easier to just present everything.&lt;br /&gt;
** Technologies the required further investment got left behind.&lt;br /&gt;
* The NLS had little to no security&lt;br /&gt;
** There was a minimal notion of a user&lt;br /&gt;
** There was a utopian aspect. Meanwhile, the Mac had no utopian aspect. Data exchange was through floppies. Any network was small, local, ad-hoc, and among trusted peers.&lt;br /&gt;
** The system wasn&#039;t envisioned to scale up to masses of people who didn&#039;t trust each other.&lt;br /&gt;
** How do you enforce secrecy.&lt;br /&gt;
* Part of the reason for lack of adoption of some of the tech was hardware. We can posit that a bigger reason would be infrastructure.&lt;br /&gt;
* Differentiate usability of system from usability of vision&lt;br /&gt;
** What was missing was the polish, the ‘sexiness’, and the intuitiveness of later systems like the Apple II and the Lisa.&lt;br /&gt;
** The usability of the later Alto is still less than commercial systems.&lt;br /&gt;
*** The word processor was modal, which is apt to confuse unmotivated and untrained users.&lt;br /&gt;
* In the context of the Mother of All Demos, the Alto doesn&#039;t seem entirely revolutionary. Xerox PARC raided his team. They almost had a GUI; rather they had what we call today a virtual console, with a few things above.&lt;br /&gt;
* What happens with visionaries that present a big vision is that the spectators latch onto specific aspects.&lt;br /&gt;
* To be comfortable with not adopting the vision, one must ostracize the visionary. People pay attention to things that fit into their world view.&lt;br /&gt;
* Use cases of networking have changed little, though the means did&lt;br /&gt;
* Fundamentally a resource-sharing system; everything is shared, unlike later systems where you would need to explicitly do so. Resources shared fundamentally sense to share: documents, printers, etc.&lt;br /&gt;
* Resource sharing was never enough. &#039;&#039;&#039;Information-sharing&#039;&#039;&#039; was the focus.&lt;br /&gt;
&lt;br /&gt;
“Mother of all demos” is nickname for Engelbart who could make the computers help humans become smarter. &lt;br /&gt;
&lt;br /&gt;
*More interesting in this works that:&lt;br /&gt;
&amp;quot;His idea included seeing computing devices as a means to communicate and retrieve information, rather than just crunch numbers. This idea is represented in NLS”On-Line system”.&lt;br /&gt;
&lt;br /&gt;
*Some information about  NLS system:&lt;br /&gt;
1) NLS was a revolutionary computer collaboration system from the 1960s. &lt;br /&gt;
2) Designed by Douglas Engelbart and implemented by researchers at the Augmentation Research Center (ARC) at the Stanford Research Institute (SRI). &lt;br /&gt;
3) The NLS system was the first to employ the practical use of :&lt;br /&gt;
  a) hypertext links,&lt;br /&gt;
  b) the mouse, &lt;br /&gt;
  c) raster-scan video monitors, &lt;br /&gt;
  d) information organized by relevance, &lt;br /&gt;
  e) screen windowing, &lt;br /&gt;
  f) presentation programs, &lt;br /&gt;
  g) and other modern computing concepts.&lt;br /&gt;
&lt;br /&gt;
= Alto review =&lt;br /&gt;
&lt;br /&gt;
* Fundamentally a personal computer&lt;br /&gt;
* Applications:&lt;br /&gt;
** Drawing program with curves and arcs for drawing&lt;br /&gt;
** Hardware design tools (mostly logic boards)&lt;br /&gt;
** Time server&lt;br /&gt;
* Less designed for reading than the NLS. More designed around paper. Xerox had a laser printer, and you would read what you printed. Hypertext was deprioritized, unlike the NLS vision had focused on what could not be expressed on paper.&lt;br /&gt;
* Xerox had almost an obsession with making documents print beautifully.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_6&amp;diff=18650</id>
		<title>DistOS 2014W Lecture 6</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_6&amp;diff=18650"/>
		<updated>2014-02-21T21:52:15Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: /* The Early Web (Jan. 23) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; &#039;&#039;&#039;the point form notes for this lecture could be turned into full sentences/paragraphs&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==The Early Web (Jan. 23)==&lt;br /&gt;
&lt;br /&gt;
* [https://archive.org/details/02Kahle000673 Berners-Lee et al., &amp;quot;World-Wide Web: The Information Universe&amp;quot; (1992)], pp. 52-58&lt;br /&gt;
* [http://www.youtube.com/watch?v=72nfrhXroo8 Alex Wright, &amp;quot;The Web That Wasn&#039;t&amp;quot; (2007)], Google Tech Talk&lt;br /&gt;
&lt;br /&gt;
== Group Discussion on &amp;quot;The Early Web&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
Questions to discuss:&lt;br /&gt;
&lt;br /&gt;
# How do you think the web would have been if not like the present way? &lt;br /&gt;
# What kind of infrastructure changes would you like to make? &lt;br /&gt;
&lt;br /&gt;
=== Group 1 ===&lt;br /&gt;
: Relatively satisfied with the present structure of the web some changes suggested are in the below areas: &lt;br /&gt;
* Make use of the greater potential of Protocols &lt;br /&gt;
* More communication and interaction capabilities.&lt;br /&gt;
* Implementation changes in the present payment method systems. Example usage of &amp;quot;Micro-computation&amp;quot; - a discussion we would get back to in future classes. Also, Cryptographic currencies.&lt;br /&gt;
* Augmented reality.&lt;br /&gt;
* More towards individual privacy. &lt;br /&gt;
&lt;br /&gt;
=== Group 2 ===&lt;br /&gt;
==== Problem of unstructured information ====&lt;br /&gt;
A large portion of the web serves content that is overwhelmingly concerned about presentation rather than structuring content. Tim Berner-Lees himself bemoaned the death of the semantic web. His original vision of it was as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Code from Wikipedia&#039;s article on the semantic web, except for the block quoting form, which this MediaWiki instance doens&#039;t seem to support. --&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;I have a dream for the Web [in which computers] become capable of analyzing all the data on the Web&amp;amp;nbsp;– the content, links, and transactions between people and computers. A &amp;quot;Semantic Web&amp;quot;, which makes this possible, has yet to emerge, but when it does, the day-to-day mechanisms of trade, bureaucracy and our daily lives will be handled by machines talking to machines. The &amp;quot;intelligent agents&amp;quot; people have touted for ages will finally materialize.&amp;lt;ref&amp;gt;{{cite book |last=Berners-Lee |first=Tim |authorlink=Tim Berners-Lee |coauthors=Fischetti, Mark |title=Weaving the Web |publisher=HarperSanFrancisco |year=1999 |pages=chapter 12 |isbn=978-0-06-251587-2 |nopp=true }}&amp;lt;/ref&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this vision to be true, information arguably needs to be structured, maybe even classified. The idea of a universal information classification system has been floated. The modern web is mostly developed by software developers and similar, not librarians and the like.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO: Yahoo blurb. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, how does one differentiate satire from fact?&lt;br /&gt;
&lt;br /&gt;
==== Valuation and deduplication of information ====&lt;br /&gt;
Another problem common with the current wwww is the duplication of information. Redundancy is not in itself harmful to increase the availability of information, but is ad-hoc duplication of the information itself?&lt;br /&gt;
&lt;br /&gt;
One then comes to the problem of assigning a value to the information found therein. How does one rate information, and according to what criteria? How does one authenticate the information? Often, popularity is used as an indicator of veracity, almost in a sophistic manner. See excessive reliance on Google page ranking or Reddit score for various types of information consumption for research or news consumption respectively.&lt;br /&gt;
&lt;br /&gt;
=== On the current infrastructure ===&lt;br /&gt;
The current &amp;lt;em&amp;gt;internet&amp;lt;/em&amp;gt; infrastructure should remain as is, at least in countries with not just a modicum of freedom of access to information. Centralization of of control of access to information is a terrible power. See China and parts of the Middle-East. On that note, what can be said of popular sites, such as Google or Wikipedia that serve as the main entry point for many access patterns?&lt;br /&gt;
&lt;br /&gt;
The problem, if any, in the current web infrastructure is of the web itself, not the internet.&lt;br /&gt;
&lt;br /&gt;
=== Group 3 ===&lt;br /&gt;
* What we want to keep &lt;br /&gt;
** Linking mechanisms&lt;br /&gt;
** Minimum permissions to publish&lt;br /&gt;
* What we don&#039;t like&lt;br /&gt;
** Relying on one source for document &lt;br /&gt;
** Privacy links for security&lt;br /&gt;
* Proposal &lt;br /&gt;
** Peer-peer to distributed mechanisms for documenting&lt;br /&gt;
** Reverse links with caching - distributed cache&lt;br /&gt;
** More availability for user - what happens when system fails? &lt;br /&gt;
** Key management to be considered - Is it good to have centralized or distributed mechanism? &lt;br /&gt;
&lt;br /&gt;
=== Group 4 ===&lt;br /&gt;
* An idea of web searching for us &lt;br /&gt;
* A suggestion of a different web if it would have been implemented by &amp;quot;AI&amp;quot; people&lt;br /&gt;
** AI programs searching for data - A notion already being implemented by Google slowly.&lt;br /&gt;
* Generate report forums&lt;br /&gt;
* HTML equivalent is inspired by the AI communication&lt;br /&gt;
* Higher semantics apart from just indexing the data&lt;br /&gt;
** Problem : &amp;quot;How to bridge the semantic gap?&amp;quot;&lt;br /&gt;
** Search for more data patterns&lt;br /&gt;
&lt;br /&gt;
== Group design exercise — The web that could be ==&lt;br /&gt;
&lt;br /&gt;
* “The web that wasn&#039;t” mentioned the moans of librarians.&lt;br /&gt;
* A universal classification system is needed.&lt;br /&gt;
* The training overhead of classifiers (e.g., librarians) is high. See the master&#039;s that a librarian would need.&lt;br /&gt;
* More structured content, both classification, and organization&lt;br /&gt;
* Current indexing by crude brute-force searching for words, etc., rather than searching metadata&lt;br /&gt;
* Information doesn&#039;t have the same persistence, see bitrot and Vint Cerf&#039;s talk.&lt;br /&gt;
* Too concerned with presentation now.&lt;br /&gt;
* Tim Berner-Lees bemoaning the death of the semantic web.&lt;br /&gt;
* The problem of information duplication when information gets redistributed across the web. However, we do want redundancy.&lt;br /&gt;
* Too much developed by software developers&lt;br /&gt;
* Too reliant on Google for web structure&lt;br /&gt;
** See search-engine optimization&lt;br /&gt;
* Problem of authentication (of the information, not the presenter)&lt;br /&gt;
** Too dependent at times on the popularity of a site, almost in a sophistic manner.&lt;br /&gt;
** See Reddit&lt;br /&gt;
* How do you programmatically distinguish satire from fact&lt;br /&gt;
* The web&#039;s structure is also “shaped by inbound links but would be nice a bit more”&lt;br /&gt;
* Infrastructure doesn&#039;t need to change per se.&lt;br /&gt;
** The distributed architecture should still stay. Centralization of control of allowed information and access is terrible power. See China and the Middle-East.&lt;br /&gt;
** Information, for the most part, in itself, exists centrally (as per-page), though communities (to use a generic term) are distributed.&lt;br /&gt;
* Need more sophisticated natural language processing.&lt;br /&gt;
&lt;br /&gt;
== Class discussion ==&lt;br /&gt;
&lt;br /&gt;
Focusing on vision, not the mechanism.&lt;br /&gt;
&lt;br /&gt;
* Reverse linking&lt;br /&gt;
* Distributed content distribution (glorified cache)&lt;br /&gt;
** Both for privacy and redunancy reasons&lt;br /&gt;
** Suggested centralized content certification, but doesn&#039;t address the problem of root of trust and distributed consistency checking.&lt;br /&gt;
*** Distributed key management is a holy grail&lt;br /&gt;
*** What about detecting large-scale subversion attempts, like in China&lt;br /&gt;
* What is the new revenue model?&lt;br /&gt;
** What was TBL&#039;s revenue model (tongue-in-cheek, none)?&lt;br /&gt;
** Organisations like Google monetized the internet, and this mechanism could destroy their ability to do so.&lt;br /&gt;
* Search work is semi-distributed. Suggested letting the web do the work for you.&lt;br /&gt;
* Trying to structure content in a manner simultaneously palatable to both humans and machines.&lt;br /&gt;
* Using spare CPU time on servers for natural language processing (or other AI) of cached or locally available resources.&lt;br /&gt;
* Imagine a smushed Wolfram Alpha, Google, Wikipedia, and Watson, and then distributed over the net.&lt;br /&gt;
* The document was TBL&#039;s idea of the atom of content, whereas nowaday we really need something more granular.&lt;br /&gt;
* We want to extract higher-level semantics.&lt;br /&gt;
* Google may not be pure keyword search anymore. It is essentially AI now, but we still struggle with expressing what we want to Google.&lt;br /&gt;
* What about the adversarial aspect of content hosters, vying for attention?&lt;br /&gt;
* People do actively try to fool you.&lt;br /&gt;
* Compare to Google News, though that is very specific to that domain. Their vision is a semantic web, but they are incrementally building it.&lt;br /&gt;
* In a scary fashion, Google is one of the central points of failure of the web. Even scarier is less technically competent people who depend on Facebook for that.&lt;br /&gt;
* There is a semantic gap between how we express and query information, and how AI understands it.&lt;br /&gt;
* Can think of Facebook as a distributed human search infrastructure.&lt;br /&gt;
* A core service of an operating system is locating information. &#039;&#039;&#039;Search is infrastructure.&#039;&#039;&#039;&lt;br /&gt;
* The problem is not purely technical. There are political and social aspects.&lt;br /&gt;
** Searching for a file on a local filesystem should have a unambiguous answer.&lt;br /&gt;
** Asking the web is a different thing. “What is the best chocolate bar?”&lt;br /&gt;
* Is the web a network database, as understood in COMP 3005, which we consider harmful.&lt;br /&gt;
* For two-way links, there is the problem of restructuring data and all the dependencies.&lt;br /&gt;
* Privacy issues when tracing paths across the web.&lt;br /&gt;
* What about the problem of information revocation?&lt;br /&gt;
* Need more augmented reality and distributed and micro payment systems.&lt;br /&gt;
* We need distributed, mutually untrusting social networks.&lt;br /&gt;
** Now we have the problem of storage and computation, but also take away some of of the monetizationable aspect.&lt;br /&gt;
* Distribution is not free. It is very expensive in very funny ways.&lt;br /&gt;
* The dream of harvesting all the computational power of the internet is not new.&lt;br /&gt;
** Startups have come and gone many times over that problem.&lt;br /&gt;
* Google&#039;s indexers understands quite well many documents on the web. However, it only &#039;&#039;&#039;presents&#039;&#039;&#039; a primitive keyword-like interface. It doesn&#039;t expose the ontology.&lt;br /&gt;
* Organising information does not necessarily mean applying an ontology to it.&lt;br /&gt;
* The organisational methods we now use don&#039;t use ontologies, but rather are supplemented by them.&lt;br /&gt;
&lt;br /&gt;
Adding couple of related points Anil mentioned during the discussion:&lt;br /&gt;
Distributed key management is a holy grail no one has ever managed to get it working. Now a days databases have become important building blocks of the Distributed Operating System. Anil stressed the fact that Databases can in fact be considered as an OS service these days. The question “How you navigate the complex information space?” has remained a prominent question that The Web have always faced.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_6&amp;diff=18649</id>
		<title>DistOS 2014W Lecture 6</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_6&amp;diff=18649"/>
		<updated>2014-02-21T21:51:51Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: Replaced previous change. added link to paper and title.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; &#039;&#039;&#039;the point form notes for this lecture could be turned into full sentences/paragraphs&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The Early Web (Jan. 23)===&lt;br /&gt;
&lt;br /&gt;
* [https://archive.org/details/02Kahle000673 Berners-Lee et al., &amp;quot;World-Wide Web: The Information Universe&amp;quot; (1992)], pp. 52-58&lt;br /&gt;
* [http://www.youtube.com/watch?v=72nfrhXroo8 Alex Wright, &amp;quot;The Web That Wasn&#039;t&amp;quot; (2007)], Google Tech Talk&lt;br /&gt;
&lt;br /&gt;
== Group Discussion on &amp;quot;The Early Web&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
Questions to discuss:&lt;br /&gt;
&lt;br /&gt;
# How do you think the web would have been if not like the present way? &lt;br /&gt;
# What kind of infrastructure changes would you like to make? &lt;br /&gt;
&lt;br /&gt;
=== Group 1 ===&lt;br /&gt;
: Relatively satisfied with the present structure of the web some changes suggested are in the below areas: &lt;br /&gt;
* Make use of the greater potential of Protocols &lt;br /&gt;
* More communication and interaction capabilities.&lt;br /&gt;
* Implementation changes in the present payment method systems. Example usage of &amp;quot;Micro-computation&amp;quot; - a discussion we would get back to in future classes. Also, Cryptographic currencies.&lt;br /&gt;
* Augmented reality.&lt;br /&gt;
* More towards individual privacy. &lt;br /&gt;
&lt;br /&gt;
=== Group 2 ===&lt;br /&gt;
==== Problem of unstructured information ====&lt;br /&gt;
A large portion of the web serves content that is overwhelmingly concerned about presentation rather than structuring content. Tim Berner-Lees himself bemoaned the death of the semantic web. His original vision of it was as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Code from Wikipedia&#039;s article on the semantic web, except for the block quoting form, which this MediaWiki instance doens&#039;t seem to support. --&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;I have a dream for the Web [in which computers] become capable of analyzing all the data on the Web&amp;amp;nbsp;– the content, links, and transactions between people and computers. A &amp;quot;Semantic Web&amp;quot;, which makes this possible, has yet to emerge, but when it does, the day-to-day mechanisms of trade, bureaucracy and our daily lives will be handled by machines talking to machines. The &amp;quot;intelligent agents&amp;quot; people have touted for ages will finally materialize.&amp;lt;ref&amp;gt;{{cite book |last=Berners-Lee |first=Tim |authorlink=Tim Berners-Lee |coauthors=Fischetti, Mark |title=Weaving the Web |publisher=HarperSanFrancisco |year=1999 |pages=chapter 12 |isbn=978-0-06-251587-2 |nopp=true }}&amp;lt;/ref&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this vision to be true, information arguably needs to be structured, maybe even classified. The idea of a universal information classification system has been floated. The modern web is mostly developed by software developers and similar, not librarians and the like.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO: Yahoo blurb. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, how does one differentiate satire from fact?&lt;br /&gt;
&lt;br /&gt;
==== Valuation and deduplication of information ====&lt;br /&gt;
Another problem common with the current wwww is the duplication of information. Redundancy is not in itself harmful to increase the availability of information, but is ad-hoc duplication of the information itself?&lt;br /&gt;
&lt;br /&gt;
One then comes to the problem of assigning a value to the information found therein. How does one rate information, and according to what criteria? How does one authenticate the information? Often, popularity is used as an indicator of veracity, almost in a sophistic manner. See excessive reliance on Google page ranking or Reddit score for various types of information consumption for research or news consumption respectively.&lt;br /&gt;
&lt;br /&gt;
=== On the current infrastructure ===&lt;br /&gt;
The current &amp;lt;em&amp;gt;internet&amp;lt;/em&amp;gt; infrastructure should remain as is, at least in countries with not just a modicum of freedom of access to information. Centralization of of control of access to information is a terrible power. See China and parts of the Middle-East. On that note, what can be said of popular sites, such as Google or Wikipedia that serve as the main entry point for many access patterns?&lt;br /&gt;
&lt;br /&gt;
The problem, if any, in the current web infrastructure is of the web itself, not the internet.&lt;br /&gt;
&lt;br /&gt;
=== Group 3 ===&lt;br /&gt;
* What we want to keep &lt;br /&gt;
** Linking mechanisms&lt;br /&gt;
** Minimum permissions to publish&lt;br /&gt;
* What we don&#039;t like&lt;br /&gt;
** Relying on one source for document &lt;br /&gt;
** Privacy links for security&lt;br /&gt;
* Proposal &lt;br /&gt;
** Peer-peer to distributed mechanisms for documenting&lt;br /&gt;
** Reverse links with caching - distributed cache&lt;br /&gt;
** More availability for user - what happens when system fails? &lt;br /&gt;
** Key management to be considered - Is it good to have centralized or distributed mechanism? &lt;br /&gt;
&lt;br /&gt;
=== Group 4 ===&lt;br /&gt;
* An idea of web searching for us &lt;br /&gt;
* A suggestion of a different web if it would have been implemented by &amp;quot;AI&amp;quot; people&lt;br /&gt;
** AI programs searching for data - A notion already being implemented by Google slowly.&lt;br /&gt;
* Generate report forums&lt;br /&gt;
* HTML equivalent is inspired by the AI communication&lt;br /&gt;
* Higher semantics apart from just indexing the data&lt;br /&gt;
** Problem : &amp;quot;How to bridge the semantic gap?&amp;quot;&lt;br /&gt;
** Search for more data patterns&lt;br /&gt;
&lt;br /&gt;
== Group design exercise — The web that could be ==&lt;br /&gt;
&lt;br /&gt;
* “The web that wasn&#039;t” mentioned the moans of librarians.&lt;br /&gt;
* A universal classification system is needed.&lt;br /&gt;
* The training overhead of classifiers (e.g., librarians) is high. See the master&#039;s that a librarian would need.&lt;br /&gt;
* More structured content, both classification, and organization&lt;br /&gt;
* Current indexing by crude brute-force searching for words, etc., rather than searching metadata&lt;br /&gt;
* Information doesn&#039;t have the same persistence, see bitrot and Vint Cerf&#039;s talk.&lt;br /&gt;
* Too concerned with presentation now.&lt;br /&gt;
* Tim Berner-Lees bemoaning the death of the semantic web.&lt;br /&gt;
* The problem of information duplication when information gets redistributed across the web. However, we do want redundancy.&lt;br /&gt;
* Too much developed by software developers&lt;br /&gt;
* Too reliant on Google for web structure&lt;br /&gt;
** See search-engine optimization&lt;br /&gt;
* Problem of authentication (of the information, not the presenter)&lt;br /&gt;
** Too dependent at times on the popularity of a site, almost in a sophistic manner.&lt;br /&gt;
** See Reddit&lt;br /&gt;
* How do you programmatically distinguish satire from fact&lt;br /&gt;
* The web&#039;s structure is also “shaped by inbound links but would be nice a bit more”&lt;br /&gt;
* Infrastructure doesn&#039;t need to change per se.&lt;br /&gt;
** The distributed architecture should still stay. Centralization of control of allowed information and access is terrible power. See China and the Middle-East.&lt;br /&gt;
** Information, for the most part, in itself, exists centrally (as per-page), though communities (to use a generic term) are distributed.&lt;br /&gt;
* Need more sophisticated natural language processing.&lt;br /&gt;
&lt;br /&gt;
== Class discussion ==&lt;br /&gt;
&lt;br /&gt;
Focusing on vision, not the mechanism.&lt;br /&gt;
&lt;br /&gt;
* Reverse linking&lt;br /&gt;
* Distributed content distribution (glorified cache)&lt;br /&gt;
** Both for privacy and redunancy reasons&lt;br /&gt;
** Suggested centralized content certification, but doesn&#039;t address the problem of root of trust and distributed consistency checking.&lt;br /&gt;
*** Distributed key management is a holy grail&lt;br /&gt;
*** What about detecting large-scale subversion attempts, like in China&lt;br /&gt;
* What is the new revenue model?&lt;br /&gt;
** What was TBL&#039;s revenue model (tongue-in-cheek, none)?&lt;br /&gt;
** Organisations like Google monetized the internet, and this mechanism could destroy their ability to do so.&lt;br /&gt;
* Search work is semi-distributed. Suggested letting the web do the work for you.&lt;br /&gt;
* Trying to structure content in a manner simultaneously palatable to both humans and machines.&lt;br /&gt;
* Using spare CPU time on servers for natural language processing (or other AI) of cached or locally available resources.&lt;br /&gt;
* Imagine a smushed Wolfram Alpha, Google, Wikipedia, and Watson, and then distributed over the net.&lt;br /&gt;
* The document was TBL&#039;s idea of the atom of content, whereas nowaday we really need something more granular.&lt;br /&gt;
* We want to extract higher-level semantics.&lt;br /&gt;
* Google may not be pure keyword search anymore. It is essentially AI now, but we still struggle with expressing what we want to Google.&lt;br /&gt;
* What about the adversarial aspect of content hosters, vying for attention?&lt;br /&gt;
* People do actively try to fool you.&lt;br /&gt;
* Compare to Google News, though that is very specific to that domain. Their vision is a semantic web, but they are incrementally building it.&lt;br /&gt;
* In a scary fashion, Google is one of the central points of failure of the web. Even scarier is less technically competent people who depend on Facebook for that.&lt;br /&gt;
* There is a semantic gap between how we express and query information, and how AI understands it.&lt;br /&gt;
* Can think of Facebook as a distributed human search infrastructure.&lt;br /&gt;
* A core service of an operating system is locating information. &#039;&#039;&#039;Search is infrastructure.&#039;&#039;&#039;&lt;br /&gt;
* The problem is not purely technical. There are political and social aspects.&lt;br /&gt;
** Searching for a file on a local filesystem should have a unambiguous answer.&lt;br /&gt;
** Asking the web is a different thing. “What is the best chocolate bar?”&lt;br /&gt;
* Is the web a network database, as understood in COMP 3005, which we consider harmful.&lt;br /&gt;
* For two-way links, there is the problem of restructuring data and all the dependencies.&lt;br /&gt;
* Privacy issues when tracing paths across the web.&lt;br /&gt;
* What about the problem of information revocation?&lt;br /&gt;
* Need more augmented reality and distributed and micro payment systems.&lt;br /&gt;
* We need distributed, mutually untrusting social networks.&lt;br /&gt;
** Now we have the problem of storage and computation, but also take away some of of the monetizationable aspect.&lt;br /&gt;
* Distribution is not free. It is very expensive in very funny ways.&lt;br /&gt;
* The dream of harvesting all the computational power of the internet is not new.&lt;br /&gt;
** Startups have come and gone many times over that problem.&lt;br /&gt;
* Google&#039;s indexers understands quite well many documents on the web. However, it only &#039;&#039;&#039;presents&#039;&#039;&#039; a primitive keyword-like interface. It doesn&#039;t expose the ontology.&lt;br /&gt;
* Organising information does not necessarily mean applying an ontology to it.&lt;br /&gt;
* The organisational methods we now use don&#039;t use ontologies, but rather are supplemented by them.&lt;br /&gt;
&lt;br /&gt;
Adding couple of related points Anil mentioned during the discussion:&lt;br /&gt;
Distributed key management is a holy grail no one has ever managed to get it working. Now a days databases have become important building blocks of the Distributed Operating System. Anil stressed the fact that Databases can in fact be considered as an OS service these days. The question “How you navigate the complex information space?” has remained a prominent question that The Web have always faced.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_6&amp;diff=18648</id>
		<title>DistOS 2014W Lecture 6</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_6&amp;diff=18648"/>
		<updated>2014-02-21T21:51:04Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: added link to paper and title&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; &#039;&#039;&#039;the point form notes for this lecture could be turned into full sentences/paragraphs&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==UNIX and Plan 9 (Jan. 28)==&lt;br /&gt;
&lt;br /&gt;
* [http://homeostasis.scs.carleton.ca/~soma/distos/fall2008/unix.pdf Dennis M. Ritchie and Ken Thompson, &amp;quot;The UNIX Time-Sharing System&amp;quot; (1974)]&lt;br /&gt;
* [http://homeostasis.scs.carleton.ca/~soma/distos/2014w/presotto-plan9.pdf Presotto et. al, Plan 9, A Distributed System (1991)]&lt;br /&gt;
* [http://homeostasis.scs.carleton.ca/~soma/distos/2014w/pike-plan9.pdf Pike et al., Plan 9 from Bell Labs (1995)]&lt;br /&gt;
&lt;br /&gt;
== Group Discussion on &amp;quot;The Early Web&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
Questions to discuss:&lt;br /&gt;
&lt;br /&gt;
# How do you think the web would have been if not like the present way? &lt;br /&gt;
# What kind of infrastructure changes would you like to make? &lt;br /&gt;
&lt;br /&gt;
=== Group 1 ===&lt;br /&gt;
: Relatively satisfied with the present structure of the web some changes suggested are in the below areas: &lt;br /&gt;
* Make use of the greater potential of Protocols &lt;br /&gt;
* More communication and interaction capabilities.&lt;br /&gt;
* Implementation changes in the present payment method systems. Example usage of &amp;quot;Micro-computation&amp;quot; - a discussion we would get back to in future classes. Also, Cryptographic currencies.&lt;br /&gt;
* Augmented reality.&lt;br /&gt;
* More towards individual privacy. &lt;br /&gt;
&lt;br /&gt;
=== Group 2 ===&lt;br /&gt;
==== Problem of unstructured information ====&lt;br /&gt;
A large portion of the web serves content that is overwhelmingly concerned about presentation rather than structuring content. Tim Berner-Lees himself bemoaned the death of the semantic web. His original vision of it was as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Code from Wikipedia&#039;s article on the semantic web, except for the block quoting form, which this MediaWiki instance doens&#039;t seem to support. --&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;I have a dream for the Web [in which computers] become capable of analyzing all the data on the Web&amp;amp;nbsp;– the content, links, and transactions between people and computers. A &amp;quot;Semantic Web&amp;quot;, which makes this possible, has yet to emerge, but when it does, the day-to-day mechanisms of trade, bureaucracy and our daily lives will be handled by machines talking to machines. The &amp;quot;intelligent agents&amp;quot; people have touted for ages will finally materialize.&amp;lt;ref&amp;gt;{{cite book |last=Berners-Lee |first=Tim |authorlink=Tim Berners-Lee |coauthors=Fischetti, Mark |title=Weaving the Web |publisher=HarperSanFrancisco |year=1999 |pages=chapter 12 |isbn=978-0-06-251587-2 |nopp=true }}&amp;lt;/ref&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this vision to be true, information arguably needs to be structured, maybe even classified. The idea of a universal information classification system has been floated. The modern web is mostly developed by software developers and similar, not librarians and the like.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO: Yahoo blurb. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, how does one differentiate satire from fact?&lt;br /&gt;
&lt;br /&gt;
==== Valuation and deduplication of information ====&lt;br /&gt;
Another problem common with the current wwww is the duplication of information. Redundancy is not in itself harmful to increase the availability of information, but is ad-hoc duplication of the information itself?&lt;br /&gt;
&lt;br /&gt;
One then comes to the problem of assigning a value to the information found therein. How does one rate information, and according to what criteria? How does one authenticate the information? Often, popularity is used as an indicator of veracity, almost in a sophistic manner. See excessive reliance on Google page ranking or Reddit score for various types of information consumption for research or news consumption respectively.&lt;br /&gt;
&lt;br /&gt;
=== On the current infrastructure ===&lt;br /&gt;
The current &amp;lt;em&amp;gt;internet&amp;lt;/em&amp;gt; infrastructure should remain as is, at least in countries with not just a modicum of freedom of access to information. Centralization of of control of access to information is a terrible power. See China and parts of the Middle-East. On that note, what can be said of popular sites, such as Google or Wikipedia that serve as the main entry point for many access patterns?&lt;br /&gt;
&lt;br /&gt;
The problem, if any, in the current web infrastructure is of the web itself, not the internet.&lt;br /&gt;
&lt;br /&gt;
=== Group 3 ===&lt;br /&gt;
* What we want to keep &lt;br /&gt;
** Linking mechanisms&lt;br /&gt;
** Minimum permissions to publish&lt;br /&gt;
* What we don&#039;t like&lt;br /&gt;
** Relying on one source for document &lt;br /&gt;
** Privacy links for security&lt;br /&gt;
* Proposal &lt;br /&gt;
** Peer-peer to distributed mechanisms for documenting&lt;br /&gt;
** Reverse links with caching - distributed cache&lt;br /&gt;
** More availability for user - what happens when system fails? &lt;br /&gt;
** Key management to be considered - Is it good to have centralized or distributed mechanism? &lt;br /&gt;
&lt;br /&gt;
=== Group 4 ===&lt;br /&gt;
* An idea of web searching for us &lt;br /&gt;
* A suggestion of a different web if it would have been implemented by &amp;quot;AI&amp;quot; people&lt;br /&gt;
** AI programs searching for data - A notion already being implemented by Google slowly.&lt;br /&gt;
* Generate report forums&lt;br /&gt;
* HTML equivalent is inspired by the AI communication&lt;br /&gt;
* Higher semantics apart from just indexing the data&lt;br /&gt;
** Problem : &amp;quot;How to bridge the semantic gap?&amp;quot;&lt;br /&gt;
** Search for more data patterns&lt;br /&gt;
&lt;br /&gt;
== Group design exercise — The web that could be ==&lt;br /&gt;
&lt;br /&gt;
* “The web that wasn&#039;t” mentioned the moans of librarians.&lt;br /&gt;
* A universal classification system is needed.&lt;br /&gt;
* The training overhead of classifiers (e.g., librarians) is high. See the master&#039;s that a librarian would need.&lt;br /&gt;
* More structured content, both classification, and organization&lt;br /&gt;
* Current indexing by crude brute-force searching for words, etc., rather than searching metadata&lt;br /&gt;
* Information doesn&#039;t have the same persistence, see bitrot and Vint Cerf&#039;s talk.&lt;br /&gt;
* Too concerned with presentation now.&lt;br /&gt;
* Tim Berner-Lees bemoaning the death of the semantic web.&lt;br /&gt;
* The problem of information duplication when information gets redistributed across the web. However, we do want redundancy.&lt;br /&gt;
* Too much developed by software developers&lt;br /&gt;
* Too reliant on Google for web structure&lt;br /&gt;
** See search-engine optimization&lt;br /&gt;
* Problem of authentication (of the information, not the presenter)&lt;br /&gt;
** Too dependent at times on the popularity of a site, almost in a sophistic manner.&lt;br /&gt;
** See Reddit&lt;br /&gt;
* How do you programmatically distinguish satire from fact&lt;br /&gt;
* The web&#039;s structure is also “shaped by inbound links but would be nice a bit more”&lt;br /&gt;
* Infrastructure doesn&#039;t need to change per se.&lt;br /&gt;
** The distributed architecture should still stay. Centralization of control of allowed information and access is terrible power. See China and the Middle-East.&lt;br /&gt;
** Information, for the most part, in itself, exists centrally (as per-page), though communities (to use a generic term) are distributed.&lt;br /&gt;
* Need more sophisticated natural language processing.&lt;br /&gt;
&lt;br /&gt;
== Class discussion ==&lt;br /&gt;
&lt;br /&gt;
Focusing on vision, not the mechanism.&lt;br /&gt;
&lt;br /&gt;
* Reverse linking&lt;br /&gt;
* Distributed content distribution (glorified cache)&lt;br /&gt;
** Both for privacy and redunancy reasons&lt;br /&gt;
** Suggested centralized content certification, but doesn&#039;t address the problem of root of trust and distributed consistency checking.&lt;br /&gt;
*** Distributed key management is a holy grail&lt;br /&gt;
*** What about detecting large-scale subversion attempts, like in China&lt;br /&gt;
* What is the new revenue model?&lt;br /&gt;
** What was TBL&#039;s revenue model (tongue-in-cheek, none)?&lt;br /&gt;
** Organisations like Google monetized the internet, and this mechanism could destroy their ability to do so.&lt;br /&gt;
* Search work is semi-distributed. Suggested letting the web do the work for you.&lt;br /&gt;
* Trying to structure content in a manner simultaneously palatable to both humans and machines.&lt;br /&gt;
* Using spare CPU time on servers for natural language processing (or other AI) of cached or locally available resources.&lt;br /&gt;
* Imagine a smushed Wolfram Alpha, Google, Wikipedia, and Watson, and then distributed over the net.&lt;br /&gt;
* The document was TBL&#039;s idea of the atom of content, whereas nowaday we really need something more granular.&lt;br /&gt;
* We want to extract higher-level semantics.&lt;br /&gt;
* Google may not be pure keyword search anymore. It is essentially AI now, but we still struggle with expressing what we want to Google.&lt;br /&gt;
* What about the adversarial aspect of content hosters, vying for attention?&lt;br /&gt;
* People do actively try to fool you.&lt;br /&gt;
* Compare to Google News, though that is very specific to that domain. Their vision is a semantic web, but they are incrementally building it.&lt;br /&gt;
* In a scary fashion, Google is one of the central points of failure of the web. Even scarier is less technically competent people who depend on Facebook for that.&lt;br /&gt;
* There is a semantic gap between how we express and query information, and how AI understands it.&lt;br /&gt;
* Can think of Facebook as a distributed human search infrastructure.&lt;br /&gt;
* A core service of an operating system is locating information. &#039;&#039;&#039;Search is infrastructure.&#039;&#039;&#039;&lt;br /&gt;
* The problem is not purely technical. There are political and social aspects.&lt;br /&gt;
** Searching for a file on a local filesystem should have a unambiguous answer.&lt;br /&gt;
** Asking the web is a different thing. “What is the best chocolate bar?”&lt;br /&gt;
* Is the web a network database, as understood in COMP 3005, which we consider harmful.&lt;br /&gt;
* For two-way links, there is the problem of restructuring data and all the dependencies.&lt;br /&gt;
* Privacy issues when tracing paths across the web.&lt;br /&gt;
* What about the problem of information revocation?&lt;br /&gt;
* Need more augmented reality and distributed and micro payment systems.&lt;br /&gt;
* We need distributed, mutually untrusting social networks.&lt;br /&gt;
** Now we have the problem of storage and computation, but also take away some of of the monetizationable aspect.&lt;br /&gt;
* Distribution is not free. It is very expensive in very funny ways.&lt;br /&gt;
* The dream of harvesting all the computational power of the internet is not new.&lt;br /&gt;
** Startups have come and gone many times over that problem.&lt;br /&gt;
* Google&#039;s indexers understands quite well many documents on the web. However, it only &#039;&#039;&#039;presents&#039;&#039;&#039; a primitive keyword-like interface. It doesn&#039;t expose the ontology.&lt;br /&gt;
* Organising information does not necessarily mean applying an ontology to it.&lt;br /&gt;
* The organisational methods we now use don&#039;t use ontologies, but rather are supplemented by them.&lt;br /&gt;
&lt;br /&gt;
Adding couple of related points Anil mentioned during the discussion:&lt;br /&gt;
Distributed key management is a holy grail no one has ever managed to get it working. Now a days databases have become important building blocks of the Distributed Operating System. Anil stressed the fact that Databases can in fact be considered as an OS service these days. The question “How you navigate the complex information space?” has remained a prominent question that The Web have always faced.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_7&amp;diff=18647</id>
		<title>DistOS 2014W Lecture 7</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_7&amp;diff=18647"/>
		<updated>2014-02-21T21:49:15Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: added link to paper and title&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Project ==&lt;br /&gt;
&lt;br /&gt;
We discussed moving the proposal due date back a week. We also discussed spending the class prior to that date discussing the primary papers people had chosen in order to provide preliminary feedback. Anil spent some time going through the papers from OSDI12 and discussing which ones would make good projects and why.&lt;br /&gt;
&lt;br /&gt;
* Pick a primary paper.&lt;br /&gt;
* Find papers that cite that paper, papers it cites, etc. to collect a body of related work.&lt;br /&gt;
* Don&#039;t just give a history, tell a story!&lt;br /&gt;
* Do not try to summarize papers.&lt;br /&gt;
* Try to identify a pattern, a common ground between the papers.&lt;br /&gt;
&lt;br /&gt;
==UNIX and Plan 9 (Jan. 28)==&lt;br /&gt;
&lt;br /&gt;
* [http://homeostasis.scs.carleton.ca/~soma/distos/fall2008/unix.pdf Dennis M. Ritchie and Ken Thompson, &amp;quot;The UNIX Time-Sharing System&amp;quot; (1974)]&lt;br /&gt;
* [http://homeostasis.scs.carleton.ca/~soma/distos/2014w/presotto-plan9.pdf Presotto et. al, Plan 9, A Distributed System (1991)]&lt;br /&gt;
* [http://homeostasis.scs.carleton.ca/~soma/distos/2014w/pike-plan9.pdf Pike et al., Plan 9 from Bell Labs (1995)]&lt;br /&gt;
&lt;br /&gt;
== Unix and Plan 9 ==&lt;br /&gt;
&lt;br /&gt;
UNIX was built as &amp;quot;a castrated version of Multics&amp;quot;, which was a very complex system. Multics was, arguably, so far ahead of its time that we are only just achieving their ambitions now. Unix was much more modest, and therefore much more achievable and successful. Just enough infrastructure to avoid reinventing the wheel. Just a couple of programmers making something for their own use. Unix was not designed as product or commercial entity at all. It was licensed out because AT&amp;amp;T was under severe antitrust scrutiny at the time.&lt;br /&gt;
&lt;br /&gt;
They wanted few, simple abstractions so they made everything a file. Berkeley promptly broke this abstraction by introducing sockets for networking. Plan 9 finally introduced networking using the right abstractions, but was too late. Arguably the reason the BSD folks didn&#039;t use the file abstraction was because of the difference in reliability. SUN microsystems licensed Berkeley Unix and commercialized it. Files are generally reliable, and failures with them are catastrophic so many applications simply didn&#039;t include logic to handle such IO errors. Networks are much less reliable and applications have to be able to deal gracefully with timeouts and other errors.&lt;br /&gt;
&lt;br /&gt;
In Anil&#039;s opinion Plan 9&#039;s design of using file abstraction to represent Network was n&#039;t a good design idea. The reason being file I/O breaking is uncommon but Network has an inherent flakiness and loss of connectivity is normal in networks. Using file system abstractions to represent Network does n&#039;t properly takes care of the flakiness inherent in the Network. Put in other words Network does n&#039;t have the reliability characteristics of mass storage and how to deal with this fact while using the file abstraction to deal with network was a major question which was left unanswered by the Plan 9 designers. Anil also added that Plan 9 was a elegant attempt at representing everything using file abstraction but they were trying too hard with this approach as pointed out above. In distributed systems the best approach to use is - if things have different semantics then they should have abstractions that reflect their characteristics, the APIs should reflect their characteristics rather than hide it away and try to pretend or treat them as if they were having characteristics of something else in an attempt towards too much generalizations. In Anil&#039;s opinion another reason why Plan 9 was not widely adopted was that it was a bit late to the scene, by the time Plan 9 came out in the 90s systems running UNIX with networking was widely adopted driven by the success of Internet.&lt;br /&gt;
&lt;br /&gt;
Another valuable point Anil mentioned was that for a technology to get adopted and become successful it should serve or address a niche area for which there are no successful incumbents.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Simon&#039;s Notes ==  &lt;br /&gt;
 &#039;&#039;&#039;These notes should be merged with the text above&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* project proposal&lt;br /&gt;
** We will discuss the primary papers we&#039;ve chosen on Thursday, February 6th&lt;br /&gt;
* possible papers, remember to pick a topic you have some chance of understanding&lt;br /&gt;
** OSDI 2012 &lt;br /&gt;
*** datacenter (filesystems for doing X, heat management, etc...)&lt;br /&gt;
*** web stuff&lt;br /&gt;
*** distributed shared memory&lt;br /&gt;
*** distributed network I/O infrastructure&lt;br /&gt;
*** distributed databases (potentially)&lt;br /&gt;
*** anonymity systems&lt;br /&gt;
** Pick a conference (usenix is pretty systems oriented, maybe Lisa), go through their papers and find something interesting&lt;br /&gt;
** tell a story that connects several papers in the topic you choose&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* UNIX&lt;br /&gt;
** Relation to multics&lt;br /&gt;
*** Multics was a complex system which was bad because it was used less, slower, etc...&lt;br /&gt;
*** Multics was not for end users, it was designed to support &amp;quot;utility computing&amp;quot; wherein computation was a service to be charged for&lt;br /&gt;
** What?&lt;br /&gt;
*** Just enough infrastructure to run my programs&lt;br /&gt;
*** It was really just supposed to be used by programmers&lt;br /&gt;
*** &amp;quot;By programmers for programmers&amp;quot;&lt;br /&gt;
*** Software and source licensed for a nominal fee&lt;br /&gt;
*** &amp;quot;Everything is a file&amp;quot;&lt;br /&gt;
*** only difference was files that you could use seek or ones you couldn&#039;t&lt;br /&gt;
*** simple abstractions&lt;br /&gt;
** Networking&lt;br /&gt;
*** Berkeley folks made sockets, not files which upset the folks at Bell labs&lt;br /&gt;
*** Networks aren&#039;t exactly like files because they&#039;re unreliable&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Plan 9&lt;br /&gt;
** major ideas&lt;br /&gt;
*** procfs, later adopted by linux&lt;br /&gt;
** summary&lt;br /&gt;
*** a very elegant attempt to follow the philosophy &amp;quot;everything is a file&amp;quot;&lt;br /&gt;
*** trying too hard&lt;br /&gt;
** opinions&lt;br /&gt;
*** things that have different failure modes deserve different APIs&lt;br /&gt;
** niche?&lt;br /&gt;
*** they never found one&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Tangent about programming languages&lt;br /&gt;
** C was for system programming&lt;br /&gt;
** Java was for enterprise programming&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_8&amp;diff=18646</id>
		<title>DistOS 2014W Lecture 8</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2014W_Lecture_8&amp;diff=18646"/>
		<updated>2014-02-21T21:47:03Z</updated>

		<summary type="html">&lt;p&gt;Cdelahou: added link to paper and title&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==NFS and AFS (Jan 30)==&lt;br /&gt;
&lt;br /&gt;
* [http://homeostasis.scs.carleton.ca/~soma/distos/2008-02-11/sandberg-nfs.pdf Russel Sandberg et al., &amp;quot;Design and Implementation of the Sun Network Filesystem&amp;quot; (1985)]&lt;br /&gt;
* [http://homeostasis.scs.carleton.ca/~soma/distos/2008-02-11/howard-afs.pdf John H. Howard et al., &amp;quot;Scale and Performance in a Distributed File System&amp;quot; (1988)]&lt;br /&gt;
&lt;br /&gt;
==Group 1==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NFS:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1) per operating traffic&lt;br /&gt;
&lt;br /&gt;
2) rpc based&lt;br /&gt;
&lt;br /&gt;
3) unreliable&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;AFS:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1) design for 5000 clients&lt;br /&gt;
&lt;br /&gt;
2) high integrity.&lt;br /&gt;
&lt;br /&gt;
==Group 2==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NFS:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1) designed to share disks over a network, not files&lt;br /&gt;
&lt;br /&gt;
2) more UNIX like&lt;br /&gt;
&lt;br /&gt;
3) portable&lt;br /&gt;
&lt;br /&gt;
4) use UDP&lt;br /&gt;
&lt;br /&gt;
5) it is not minimize network traffic.&lt;br /&gt;
&lt;br /&gt;
6) used VNODE&lt;br /&gt;
&lt;br /&gt;
7) not have much hardware equipment&lt;br /&gt;
&lt;br /&gt;
8) later versions took on features of AFS&lt;br /&gt;
&lt;br /&gt;
9) stateless protocol conflicts with files being state-full by nature.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;AFS:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1) designed to share files over a network, not disks&lt;br /&gt;
&lt;br /&gt;
2) better scalability&lt;br /&gt;
&lt;br /&gt;
3) better security.&lt;br /&gt;
&lt;br /&gt;
4) minimize network traffic.&lt;br /&gt;
&lt;br /&gt;
5) less UNIX like&lt;br /&gt;
&lt;br /&gt;
6) plugin authentication&lt;br /&gt;
&lt;br /&gt;
7) needs more kernel storage due to complex commands&lt;br /&gt;
&lt;br /&gt;
8) inode concept replaced with fid&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Group 3==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NFS:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1) cache assumption invalid.&lt;br /&gt;
&lt;br /&gt;
2) no locking&lt;br /&gt;
&lt;br /&gt;
3) bad security&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;AFS:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1) cache assumption valid&lt;br /&gt;
&lt;br /&gt;
2) locking&lt;br /&gt;
&lt;br /&gt;
3) good security.&lt;br /&gt;
&lt;br /&gt;
==Group 4==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Additional notes from the class discussion: Capturing some of Anil&#039;s Observations about NFS and AFS: The reason why NFS does not try to share at block level instead of file level is that sharing at block level is complicated from the implementation point of view. NFS use UDP as the transport protocol since UDP being a stateless protocol is in-line with the NFS design philosophy of not maintaining state information.  Security and unreliability issues in NFS are an implication of using RPC. RPC is a nice way for programming but RPC is not designed for networks (where flakiness is an inherent characteristic) which is better explained by the analogy that you never expect from a programming point of view your function call to fail(not to return) because of communication error.  AFS designers considered network as a bottle neck and tried to reduce the number of chatter over network by using caching. In Anil&#039;s opinion &#039;open&#039; and &#039;close&#039; operations in AFS were critical and the &#039;close&#039; operation assumes importance to the same proportions of a &#039;commit&#039; operation in a well-designed database system. Anil mentioned that security model of AFS is interesting in that rather than going for the UNIX access list based implementation AFS used a single sign on system based on Kerberos. In Anil&#039;s opinion cool thing about Kerberos is that idea of using tickets to get access. Another interesting fact that was mentioned was that irrespective of having better features compared to NFS, AFS did not get widely adopted. The reason for this was that the administrative mechanism for AFS was complex and it required highly trained/skilled people to setup AFS and it also required quite a number of day’s effort to set it up and maintain.&lt;/div&gt;</summary>
		<author><name>Cdelahou</name></author>
	</entry>
</feed>