Monday, April 20, 2009

WheelFS

This paper describes wide-area distributed file system.
It follows POSIX and developers could control various trade-offs.

As application runs on multiple datacenter emerges, underlying infrastructure that is easy to use would be crucial. And filesystem is one of the most important systems. WheelFS looks suitable for this end as it offers standard interface and flexiblility as well. More systems supporting multiple datacenter concept will come, such as storage, database, processing, etc...

As there are many trade-off choices and it is application specific in many cases, giving developers an avility to specify cues would be a natural direction to go. However, having too many options often ends up with just using default. Sometimes, provided cues turns out to be inappropriate. It would be great if there is a way to make a smart decision based on profiling or something like that.

Scalling Out

Having multiple datacenters is becoming more important, both for better quality and fault tolerance. This article illustrate needs & problems of expanding a web service over multiple datacenters.

To solve cache consistency problem, they hacked MySQL to know when and what data is replicated - cache item is updated (actually deleted) when it is replicated.

Another problem they had was routing problem. As they allowed writing only on California databases, the user written to the database should remain on California until the entry is replicated to other datacenters to avoid confusion - and they picked 20 seconds for it.

Facebook's solutions looks practical enough, but far from general or formal solution. What if 3rd datacenter is coming? etc. Their solution only works for their settings and applications.

Wednesday, April 1, 2009

Erlang

Erlang is a language developed at Ericsson.
It actually include a concept of virtual machine just like Java, to support populating process.
This language takes massive parallelism and failure in mind from the beginning.
As a result, it is a good fit to large scale distributed system.
It is proven useful, as some of ericsson product and other open-source projects were written in Erlang and work well.

However, people complain about its syntax - As a functional language, the syntax of Erlang is not that easy compared to traditional imperative languages. To be a functional language seems inevitable to prevent side-effect which is bad for concurrent program, but it still keep ordinary programmers from using it.

Wednesday, March 18, 2009

Scribe

Scribe is an open-source distributed logging system developed at Facebook.

It is designed to handle daunting amount of log, say 10 billion messages a day.

This logging system has three components:

1. Client Code interface - Thrift (generates glue-code for various languages), Category & Message
2. Distribution System - Scribe process runs on every node, it forward log message according to configuration file. (classified by category)
3. Do Something Usefullizer - log file? datawarehouse? HDFS/Hadoop?
claim: if your backend is scalable, why bother distributed logging system? (-> Chukwa)

Their major design decision is as following:
1. Don't assume a particular network topology: easily configurable
2. Reliability : reliable enough that we can expect to get all of the data almost all of the time, but not reliable enough to require heavyweight protocols and disk usage.
3. Simple Data model : a category and the actual message.

Simple, Unified, Scalable component is useful

Sunday, March 15, 2009

AWS

Amazon Web Service is consist of various components for cloud computing - EC2 for computing resources, S3 for storage, SQS for queuing and SimpleDB for structured storage.

AWS is not the first comer, but actually made cloud computing accessible and viable - technically and economically.
Definitely it made huge impact on the area. Everybody talking about cloud computing refer to AWS.

Combination of S3 and EC2 (and especially the fact that they don't charge for the transfer between S3 and EC2) makes AWS attractive. Simplicity of AWS is another attractive feature. It is rather primitive (= low level service) and doesn't offer that much, but users of AWS (who is a kind of early adaptor of cloud computing) cloud don't have to worry too much about locking-in.

Google Apps

When talking about cloud computing, it often ends up with debating security - is cloud really safe?
One argues that relying on a cloud provider and hand one's important data (or fate) to it is dangerous. The other points out that a cloud provider could do better in terms of security, especially compared to small or medium organizations.
Both are true, and the key is to increase security level of cloud computing and to convince perspective customer (= cloud user) that the cloud infrastructure is safe enough, or at least there is fall back plan if something went wrong.

Azure

Azure is set of cloud platform/service from Microsoft.
Developers write a .net based code to run on Microsoft's cloud infrastructure. The program may also use various cloud services such as SQL and Live services.

Compared to AWS, Azure is value-added cloud infrastructure. In other words, it offers more than just providing bare virtual machine. But at the same time, it makes hard to migrate to other services. If there is only one service provider, users would be more hesitant. Will Microsoft allow 3rd party provider to proliferate the Azure platform? Or keep it proprietary as they always did?