Twitterãã¹ã±ã¼ã«ã«è¦ããçç±
Twitterã®ã¹ã±ã¼ã«é¢ä¿ã§ãé¢ç½ãè¨äºãçºè¦ããã®ã§ã¾ã¨ãã
ä¸ææãã¹ã±ã¼ã«ããªããã¨ããåä½ãä¸å®å®ãã ã¨ãè¨ããç¶ãã¦ããTwitterã5æããã«slashdot.jpã§ã話é¡ã«ãªã£ã¦ãããè«èª¿ã¯ç·ãã¦ãTwitterãã¹ã±ã¼ã«ããªãã®ã¯ãRubyã使ã£ã¦ãããããã¨ãããã®ã
ã¨ãããåãï¼æããWhy Can't Twitter Scale? Blaine Cook Tries To Explainï¼ãªãã§Twitterã£ã¦ã¹ã±ã¼ã«ããªãã®ï¼ï¼ãã¨ãããblogç´¹ä»è¨äºãSilicon Alley Insiderã«æ²è¼ããããè¨äºã®å ã«ãªã£ãblogã¨ã³ããªã¯ãTwitterã®åãã¼ãã¢ã¼ããã¯ãã ã£ãBlaine Cookæ°ã«ãããã®ãCookæ°ã«ããã°ãTwitterã®ã¹ã±ã¼ã«ã¨Rubyã¯ä½ã®é¢ä¿ããªãã¨ããã
Why Can't Twitter Scale? Blaine Cook Tries To Explain
In Twitter's case, there is zero chance that the problems there are in any way related to their language. It is likely that there are architectural challenges which come from the fact that it is very hard to cache a Twitter data request since no two people ever get the same data. And even for a given user, the data requests change quickly since users are always receiving tweets. This is a hard, though not unsolvable problem that requires a very specialized caching architecture. Eran Hammer-Lahav, has done some interesting work in this area and talks about it in an extensive blog post
.
Twitterã®å ´åãã¹ã±ã¼ã«ã®åé¡ã«ãéçºè¨èªï¼Rubyï¼ãå°ãã§ãé¢ä¿ãã¦ããå¯è½æ§ã¯ã¼ãã¨ãã£ã¦ãããåå ã¯ãã¬ã¹ãã³ã¹ããã£ãã·ã¥ãããã¨ãé常ã«å°é£ã§ããã¨ããTwitterã®ã¢ã¼ããã¯ãã£ä¸ã®åé¡ã ãããã¦ã¼ã¶ã¯ã¿ããªï¼ãã©ãã¼ãªã¹ãã®ä¸èº«ã«ãã£ã¦ï¼ããããéããã¼ã¿ãåå¾ããããã ãããã¦ã¼ã¶éã§ãã£ãã·ã¥ã®ä½¿ãã¾ãããã§ããªããããã¦ãããç¹å®ã®ã¦ã¼ã¶ã®ã¿ãã¨ã£ã¦è¦ã¦ããå½¼ããã©ãã¼ããã¦ã¼ã¶ãçºè¨ãããã³ã«åå¾ãã¹ããã¼ã¿ãé »ç¹ã«æ´æ°ããã¦ãã¾ãããã ããããã£ãã·ã¥ãã¦ããã¾ãæå³ãç¡ãããã®åé¡ã解決ããã«ã¯ããªãç¹æ®ãªãã£ãã·ã¥ã»ã¢ã¼ããã¯ãã£ãå®è£ ããå¿ è¦ãããã
ã¨ãRuby責任説ãå®å
¨å¦å®ããTwitterã®ã¹ã±ã¼ã«åé¡ã¯ãã®ã¢ã¼ããã¯ãã£ã«åé¡ãããããã ã¨è¨ã£ã¦ãããããããTwitterã¯ãªãã§ãããªã«ã¹ã±ã¼ã«ã«è¦ããããã¦ããã®ï¼ãã®ã¹ã±ã¼ã«ãé»ãã¢ã¼ããã¯ãã£ã£ã¦ä½ï¼
Scaling a Microblogging Service - Part I
People donât seem to get what is so hard about scaling the Twitter service. Some think it has to do with Rails, while others look at the hosting company or other operating factors. Then there are those who incorrectly think a distributed or federated service is the solution (which will only make things worse). The idea that building a large scale web application is trivial or a solved problem is simply ridiculous. In a way it is surprising that there are so few companies out there dealing with commoditizing web developing scaling.Twitterãã¹ã±ã¼ã«ããããã¨ã®ä½ããããªã«é£ããã®ããã¿ããªããã£ã¡ãããªãã¿ããã ãRailã¨é¢ä¿ãããã£ã¦äººããããããã¼ã¿ã»ã³ã¿ã¼ã¨ãéç¨ã®åé¡ã ããã¨ãã人ããããåæ£ã·ã¹ãã ãå°å ¥ããã°åé¡ã解決ããã¨ãèãã¦ããã¤ãããããããªãã¨ãã¦ãç¶æ³ãæªåããã ãã ã大è¦æ¨¡ãªWebã¢ããªã±ã¼ã·ã§ã³ãæ§ç¯ãããã¨ãç°¡åã ã¨èããã®ã¯é¦¬é¹¿ãã¦ãããï¼ããã»ã©é£ãããã¨ã ã¨ããã®ã«ï¼ãããã£ãWebã¢ããªã±ã¼ã·ã§ã³ã®ã¹ã±ã¼ã«å¨ããã³ã¢ãã£ãã£åãã¦ãããä¼ç¤¾ãæ°ããã»ã©ãããªãã£ã¦ããã®ã¯ãããæå³é©ãã¹ããã¨ã ã
There are two main subsystems from an infrastructure standpoint (regardless of the actual implementation). The first is the distribution (or delivery) system which takes every incoming message and delivers it to the right list of followers via Instant Messaging, SMS, or email. The second is the retrieval (or query) system which allows users to query what the people they are following and the general population (the public timeline) have been up to (few messages at a time).
Building the delivery system isnât trivial, but much easier to scale. Subscription lists are generally static (who is following who) and tend to be small (even thousands of followers is still a small list). Twitter only allows following all updates of a certain user or tracking all updates of a certain list of words, which means there isnât any heavy calculation being done at the distribution point as to who should receive which message.å®è£ é¢ãå¥ã«ããã°ãã¤ã³ãã©é¢ããTwitterãèããå ´åã大ããäºã¤ã®ãµãã·ã¹ãã ã«åãããã¨ãã§ãããä¸ã¤ç®ã¯å±ããã¡ãã»ã¼ã¸ãããã©ãã¢ã¼ã«IMãSMSãemailã使ã£ã¦å±ããããã£ã¹ããªãã¥ã¼ã·ã§ã³ã·ã¹ãã ããäºã¤ç®ã¯ãèªåããã©ãã¼ãã¦ããã¦ã¼ã¶ãããã®ä»ã®ã¦ã¼ã¶ã«ã¤ãã¦ã®ãã¹ãã¼ã¿ã¹ä¸è¦§ï¼ææ°ã¡ãã»ã¼ã¸ï¼ãåå¾ãããã¯ã¨ãªã·ã¹ãã ãã ã
ä¸ã¤ç®ã®ãã£ã¹ããªãã¥ã¼ã·ã§ã³ã·ã¹ãã ãæ§ç¯ããã®ã¯ç°¡åãããªããã©ãã¹ã±ã¼ã«ãããã®ã¯ãã£ã¨ããããã誰ã誰ããã©ãã¼ãã¦ãããã表ã"ãµãã¹ã¯ãªãã·ã§ã³ãªã¹ã"ã¯éçã ãããªã¹ãã®ãµã¤ãºã大æµã¯å°ãããTwitterã§ã¯ãããã¦ã¼ã¶ã®çºè¨ã¯ããã©ãã¢ã¼å ¨å¡ã«å±ããã°ããããã ãããã©ã®ã¡ãã»ã¼ã¸ã誰ã«å±ããã®ãã«ã¤ãã¦è²ã ã¨è¨ç®ããå¿ è¦ãªãã
In its current state, pushing updates out isnât a challenge even at a large scale, and something that has generally scaled well and has showed very solid performance and stability in the past year. If Twitter was a push-only service, they would have no scaling issues at all – but in a way a much more difficult time competing with little-to-none technology barriers to slow competitors.
The retrieval system is where things are not as simple. Unlike webmail services where refreshing a userâs inbox only queries a very simple data set (is there anything new in MY inbox?), refreshing a userâs home page on Twitter queries a much more complex data set (are there any new updates in ALL my friendsâ pages?) and the nature of the service means that the ratio of reads to writes is significantly different from most other web services.
ããããããã ãããããã£ã¦ããã¡ãã»ã¼ã¸ãé éãããã¨ã«é¢ãã¦ã¯ãè¦æ¨¡ã大ãããªã£ã¦ãããã»ã©é£ããã¯ãªãããå®éãããã£ãé¡ã®ã¢ããªã±ã¼ã·ã§ã³ã¯ããªãã¹ã±ã¼ã«ãã¦ãããã©ã¼ãã³ã¹ãè¯å¥½ãä¸ã¤å®å®ç¨¼åããããã¨ãã§ããã£ã¦ãã¨ããéå»ã«ç¤ºããã¦ãããTwitterããããªé¢¨ã«ãPUSHè¦ç´ ãããªãã·ã¹ãã ã§ããã°ã¹ã±ã¼ã«ã®åé¡ãªãã¦ãããªãã£ãã ãããã競åã«å¯¾ãã¦ãæè¡åªä½æ§ã確ä¿ã§ããªãã£ãããã競äºã¯ããæå³ãã£ã¨å³ããã£ãã ããã
ãã¯ã¨ãªã·ã¹ãã ãã¯ããã»ã©ç°¡åãªè©±ãããªããDBã¸ã®åãåãããç°¡åãªwebã¡ã¼ã«ãµã¼ãã¹ã¨ãï¼èªåã®ã¡ã¼ã«ããã¯ã¹ã«æ°ããã¡ã¼ã«ãæ¥ã¦ããªããã©ããã調ã¹ãã ãã§ããï¼ã¨éã£ã¦ãTwitterä¸ã§èªåã®ãã¼ã ãã¼ã¸ããªãã¼ãããï¼èªåã®åéå ¨å¡ã®ãã¼ã¸ããããã«ãä½ããã®æ´æ°ããããã©ããã調ã¹ãªãããããªãï¼ã£ã¦ã®ã¯ãããªãè¤éãªåãåãããããå¿ è¦ãããããããTwitterã®ä½¿ããæ¹ã§ã¯ãã¦ã¼ã¶ã®èªã¿ãã¿/æ¸ããã¿æ¯çããä»ã®Webãµã¼ãã¹ã¨æ¯ã¹ã¦ããªãéãã
It is these constant queries that bring Twitter down during popular events. The fact that a single request for a userâs home page or an API request for a userâs friends timeline must perform a complex iterative query is what causing some requests to take too long, at best timeout and at worst cause the entire system to lag behind. These custom views are expensive and mean that it is much more difficult to cache the final result of a request.
Going through a timeline request, the server first looks up the list of people the user is following. Then for each person, checks if their timeline is public or private, and if private, if the requesting user has the rights to view it. If the user has rights, the last few messages are retrieved, and the same is repeated for each person being followed. When done, all the messages are collected, sorted, and the latest messages are converted from their internal representation to the requested format (JASON, XML, RSS, or ATOM).
ä½ã大ããªã¤ãã³ãããã£ãæã«Twitterããã¦ã³ãã¦ãã¾ãã®ã¯ãããã£ãå¦çã®ããã ãã¢ã¯ã»ã¹ã®ãã³ã«è¤éã§å復çãªãªã¯ã¨ãªãå®è¡ããå¿ è¦ãããããå¦çã«æéããããããªã¯ã¨ã¹ããã¿ã¤ã ã¢ã¦ãããããéãæªãããã·ã¹ãã å ¨ä½ãã©ã°ã£ã¦ãã¾ããã¦ã¼ã¶ãã¨ã«ã«ã¹ã¿ã ãããæ å ±ã表示ããªãã¨ãããªããããçæè² è·ã¯éããããã£ãã·ã¥ãé£ããã
ãã®å¦çã§ã¯ãã¾ãã¦ã¼ã¶ããã©ãã¼ãã¦ãã人ã®ãªã¹ããåå¾ãããããã¦ããããã®äººã«å¯¾ãã¦ãã¹ãã¼ã¿ã¹ãå ¬éãéå ¬éããããéå ¬éã ã£ãå ´åã¢ã¯ã»ã¹ããã¦ã¼ã¶ã«é²è¦§æ¨©éããããã©ããã調ã¹ãããã権éãããã°ææ°ã®æ°ä»¶ã®ã¡ãã»ã¼ã¸ãåå¾ããããããã£ããã¨ããã©ãã¼ãªã¹ãå ¨å¡ã«å¯¾ãã¦ãããªãããããªããå ¨é¨çµãã£ãããåå¾ããã¡ãã»ã¼ã¸ãéãã¦ãæç³»åã§ä¸¦ã³æ¿ãã¦ãææ°ã®æ°ä»¶ã ããJSONã ã¨ãXMLãRSSãATOMå½¢å¼ã«å¤æããã
As long as all the messages in the system can fit into a single database table, this can be done with a pretty straight-forward query leaving the heavy lifting to the database. But once a single table or even a single server isnât enough to hold the entire message base (or support the load), an application has to perform multiple database requests to gather the data. Partitioning the database which for many application is enough to offer scalability, solves the issue of a large and inefficient single table scenario, but is also the reason why the system slows down. Sharding takes away the ability to leverage the database indexing services to optimize usersâ views. If the people you are following are not all on the same partition, multiple data queries are required.
å ¨é¨ã®ã¡ãã»ã¼ã¸ãåä¸ã®ãã¼ã¿ãã¼ã¹ã«å ¥ã£ã¦ãããªãããããã£ãæ½åºå¦çã¯ããã¼ã¿ãã¼ã¹ã®è² è·ã¯éãããã©ããã·ã³ãã«ã§ããããããã¯ã¨ãªã§ãã¾ãããã¨ãã§ãããã§ããã¼ã¿ããã¼ãã«ã²ã¨ã¤ã«åã¾ããããªããªã£ããããµã¼ãä¸å°ã§ã¯å®¹éããããªããªã£ã¦ãã¾ã£ãã¨ããã¢ããªã±ã¼ã·ã§ã³ã¯è¤æ°ã®ãã¼ã¿ãã¼ã¹ã«ãªã¯ã¨ã¹ããæããªãããããªãããã¼ã¿ãã¼ã¹ã®åå²ã¯ãã¹ã±ã¼ã«ã®æ段ã¨ãã¦å¤ãã®Webã¢ããªã±ã¼ã·ã§ã³ã§æå¹ã ããã©ãï¼Twitterã®ãããªã½ã¼ã·ã£ã«ã¢ããªã±ã¼ã·ã§ã³ã§ã¯ï¼ãã¼ã¿ãã¼ã¹ã®åå²ã¯ãã·ã¹ãã ã®å®è¡é度ãé ãããã¦ãã¾ãããã¼ã¿ãã¼ã¹ãåå²ããã¦ããå ´åãã¯ã¨ãªãå¦çããä¸ã§æå¹ã ã£ãã¤ã³ããã¯ã¹ã®å¨åãæ¸éãã¦ãã¾ãããã ããã¨ãã°ããã¦ã¼ã¶ããã©ãã¼ãã¦ããåéãå ¨å¡åããã¼ã¿ãã¼ã¹ã«è¼ã£ã¦ããªãã£ãã¨ããããå¥ã®ãã¼ã¿ãã¼ã¹ãæ¢ãã«ãããªãããããªãã
Twitterãè¦ããã§ããåå ã¯ãã½ã¼ã·ã£ã«ã¢ããªã±ã¼ã·ã§ã³ç¹æã®ãã¼ã¿å¦çããRDBMSã«ã¨ã£ã¦ãããªãåã£ä»ãã«ããé¡ã®å¦çã ã£ãããã ãã§ã¯ãTwitterã®ãããªWebãµã¼ãã¹ã¯ãã©ãããã°ã¹ã±ã¼ã«ãã¦ãããã®ãã
One simple but painfully restrictive solution is to duplicate the data for each user. Basically what this means is turning the service into an email system. Each user is given a mailbox and whenever someone they are following publishes a status, it is copied into their inbox, as well as into all the other followersâ inboxes. This brings the solution in line with existing systems such as webmail services where data partitioning alone can accomplish great scaling. But this comes at a price. First the data storage grows significantly faster and requires much more disk space, together with increased backup cost. Second, it makes other actions much more complex such as erasing a message once sent.
ã¦ã¼ã¶ãã¨ã«ãã¼ã¿ãéè¤ãã¦æããããã¨ãããã®åé¡ã«å¯¾ãã解æ³ã®ã²ã¨ã¤ã ãemailã¨åãããã«ãããããã®ã¦ã¼ã¶ã«ãã¡ã¼ã«ããã¯ã¹ãã¿ãããªãã®ãæããã¦ã誰ããã¹ãã¼ã¿ã¹ãæ´æ°ãããããã®ã¦ã¼ã¶ããã©ãã¼ãã¦ããäººå ¨å¡ã®ã¡ã¼ã«ããã¯ã¹ã«ããããã¹ãã¼ã¿ã¹ã®ã³ãã¼ãå ¥ãããããããã°Webã¡ã¼ã«ã¨åæ§ããã¼ã¿ãã¼ã¹ãåå²ããç¶æ ã§ããããã§ãã¹ã±ã¼ã«ããããã¨ãã§ãããæ¬ ç¹ã®ã²ã¨ã¤ã¯å ¨ä½ã®ãã¼ã¿ãµã¤ãºãããªã大ãããªã£ã¦ãã¾ãããã£ã¹ã¯ã¹ãã¼ã¹ã浪費ãããã¨ãæ¬ ç¹ã®ããã²ã¨ã¤ã¯ãä¸åº¦éããã¦ãã¾ã£ãã¡ãã»ã¼ã¸ãåé¤ããããããªã¨ãã«ããªããããããå¦çãããã¯ãã«ãªããã¨ã
ã¤ã¾ããã¦ã¼ã¶ããã¢ã¯ã»ã¹ããã£ã¦åãã¦æ å ±ï¼ãã©ãã¼ãã¦ãã人ã®ã¹ãã¼ã¿ã¹ï¼ãæ¢ãã«ããã®ã§ã¯ãªãã誰ãã®ã¹ãã¼ã¿ã¹ãæ´æ°ãããæç¹ã§ããã®äººããã©ãã¼ãã¦ããã¦ã¼ã¶å ¨å¡ã®ãã¼ã¸æ å ±ãæ´æ°ããã©ããã«ä¿ç®¡ãã¦ããã¨ãããã®ãããããã°ãæ å ±ã®æ´æ°èªä½ã¯ããããªããªã¼ã·ã¹ãã ãã¨ã»ã¼åãå¦çãªã®ã§ç°¡åã«ã¹ã±ã¼ã«ããããã¦ã¼ã¶ãåéã®ææ°ã¹ãã¼ã¿ã¹ãåå¾ãã«ããã¨ãã«ã¯ãæ¢ã«æºåãããæ å ±ãéãã ããªã®ã§ãWebã¡ã¼ã«ã¨åæ§ããã¯ãç°¡åã«ã¹ã±ã¼ã«ãããã¨ãã§ããã
Twitterãç´é¢ããã¢ã¼ããã¯ãã£ä¸ã®åé¡ã¯ãTwitterã«éã£ã話ã§ã¯ãªããFacebookãPownceãLinkedInãmixiçãã½ã¼ã·ã£ã«ãããã¯ã¼ã¯ããã¼ã¹ã«çµã¿ç«ã¦ãããã³ãã¥ãã±ã¼ã·ã§ã³ãµã¤ãã§ããã°ãç¨åº¦ã®å·®ãããããåæ§ã®èª²é¡ãã¢ã¼ããã¯ãã£ã«æ±ãã¦ããã¨ãããã ããããã®åé¡ã¸ã®å¯¾å¦ã¯ãSNSç³»ãµã¼ãã¹ã大ããããä¸ã§é¿ãã¦ã¯éããªãã¯ãã
ãã¨ãã°æ¥æ¬ã®GREEããã®åé¡ã«å¯¾ãã¦ã©ã®ããã«å¯¾å¦ãã¦ããããITmediaã®è¨äºã大è¦æ¨¡SNSã®ããã«ããã¯ã¨ã½ãªã¥ã¼ã·ã§ã³ãã§è©³ãã解説ããã¦ããã
大è¦æ¨¡SNSã®ããã«ããã¯ã¨ã½ãªã¥ã¼ã·ã§ã³
ä¸å®ä»¥ä¸ã®ã¦ã¼ã¶ã¼æ°ããã¼ã¿éãããã¦æ©è½ãæã¤SNSã§ã¯ãæ®éã«æ§ç¯ãã¦ããã¨é常ã«æ©ã¾ããããã«ããã¯ã2ã¤é¡å¨åãã¦ãã¾ãã1ã¤ã¯ããåéã®æ°çãç³»ã®æ å ±åå¾ã§ãããã1ã¤ã¯ã¢ã¯ã»ã¹ã³ã³ããã¼ã«ãã¤ã¾ãããã®æ å ±ã¯å ¨ä½ã«å ¬éããã¡ãã¯åéã®åéã¾ã§ãã¨ãã£ãå¶éã§ãã
ï¼ä¸ç¥ï¼
blogãã¼ãã«ãè¥å¤§åãã¦ããã¨åé¡ãé¡å¨åãã¾ããä¾ãã°1æ¥å¹³åã§10ä¸ä»¶ç¨åº¦ã®æ¥è¨ãæ¸ãããã¨ããã¨ã1å¹´ã§ããã3500ä¸ã4000ä¸ã¬ã³ã¼ãã®ãã¼ãã«ã¨ãªãã¾ããããã¨ãWHEREå¥ã¨ORDER BYå¥ã並åããå ´åã«ã¤ã³ããã¯ã¹ãå¹æçã«ä½¿ãããªã*ãããããã©ã¼ãã³ã¹ãå£åãã¦ããã¾ããä¾ãã°user_idã¨publication_datetimeã«ãã«ãã«ã©ã ã¤ã³ããã¯ã¹ãå¼µããã¦ãã¦ãã
SELECT title FROM blog WHERE user_id IN ï¼...ï¼
ã§åå¾ããã件æ°ï¼ã¤ã¾ãèªåã®åéãæ¸ããæ¥è¨ã®ç·æ°ï¼ãå¢ããã°å¢ããã»ã©ãã½ã¼ãã«ã³ã¹ããæããã¾ãã
ï¼ä¸ç¥ï¼
ã¾ããGREEã§ã¯ãã°ã¤ã³å¾ã®åæç»é¢ï¼ããããããã¼ã ããå³1ï¼ã§ãåéã®æ°çæ å ±ãå種ï¼æ¥è¨ããã©ããã¬ãã¥ã¼ãªã©â¦â¦ï¼è¡¨ç¤ºããã¦ãã¾ããããã¼ã ã¯ãµã¤ãå ã§ãããªãã¢ã¯ã»ã¹ã®å¤ããã¼ã¸ã§ãæ¯ååè¨ã®ãããªåçãã¼ã¸çæãè¡ãã¨ãé常ã«ã³ã¹ããé«ããªãã¾ãã
ãã®åé¡ã«å¯¾å¦ãããããåç´ã«ãã¼ã¸ãã£ãã·ã¥ãªã©ãå©ç¨ã§ãã¾ããã
- 表示ããããã¼ã¿ãã¦ã¼ã¶ã¼ãã¨ã«ç°ãªãããããã£ãã·ã¥ã®ãããçãé常ã«ä½ã
- ãã¼ã¿ã®æ§è³ªä¸å³ææ§ãæ±ããããããããã¾ããã£ãã·ã¥ããããªã
ã¨ããåé¡ãããããã£ãã·ã¥ã®å©ç¨ãé¿ãããã¨ããã§ãã
ã§ã¯ï¼§ï¼²ï¼¥ï¼¥ã¯ãã®åé¡ã«ã©ãåãçµãã ã®ãã
ããã2ã¤ã®åé¡ã«ã¤ãã¦ãç®ä¸ã®ã¨ããGREEã§ã¯ããããã¯ãå©ç¨ããã¤ãã³ãéç¥æ©æ§ããå©ç¨ãã¦è§£æ±ºãã¦ãã¾ãï¼å³2ï¼ãã¤ã¾ãã
- ãªã¯ã¨ã¹ãããã£ãã¿ã¤ãã³ã°ã§ãã¼ã¿ãåå¾ãã
ã®ã§ã¯ãªãã
- ãã¼ã¿æ´æ°ã®ã¿ã¤ãã³ã°ã§ãããããå¿ è¦ãªãã¼ã¿ãéåæã«æ§ç¯ãã¦ãã
ããã§ãã
èãæ¹ã¨ãã¦ã¯ãå人ãã¨ã«ãã¡ã¼ã«ããã¯ã¹ãã®ãããªãã®ãæºåããHammer-Lahavæ°ã®èª¬æã¨å¤§ä½åãã§ãä¸ã¤ãã¼ã¿ã®DBã¸ã®æ¿å
¥ã¯éåæã§å¦çããããã³ãå´ï¼webãµã¼ãï¼ãå¾
ããããããªãã¨ã¯ããªãã¨ãããã³ãå´ã®å¦çãè¿
éã«çµãããããã¨ã¯ãWebãµã¼ããªã½ã¼ã¹ï¼ããã»ã¹ãã¹ã¬ããï¼ã®å転å¹çãä¸ãããã¨ã«ã¤ãªããããµã¼ãã®ã¡ã¢ãªä½¿ç¨å¹çãé«ã¾ãã
ãã®ãããã®è©±ã¯ãhttpã§ããã«C10Kåé¡ã解決ããããã¨ããæèã§èªããããã¨ãå¤ãããã¼ã¿ã®æ ¼ç´ãWebãµã¼ãã¨éåæã§ããã¹ãã¨ããèãæ¹ã¯ãLife is beautiful(ä¸å³¶è¡ãã)ã®è¨äºããã«ãã¹ã¬ããã»ããã°ã©ãã³ã°ã®è½ã¨ãç©´ããã®ï¼ãã§ãç´¹ä»ããã¦ããã
åè¿°ã®Hammer-Lahavæ°ã¯ãç¾å¨Real-Time Content Deliveryã¨ã³ã¸ã³ã§ããNounceréçºããã¸ã§ã¯ãã«å¾äºããã¦ããã¨ãããã¨ã§ãããã使ãã°éçºè ã¯ç°¡åã«ã¹ã±ã¼ã«ããMicro-blogï¼Twitterã¿ãããªãµã¼ãã¹ã®ç·ç§°ï¼ãµã¼ãã¹ãä½ãã¡ãããããï¼ãµã¤ããè¦ãã¨ããããã¸ã§ã¯ããåæ»ãã¦ããããã ããã©..ï¼ãããããã£ã¦ã¾ãã²ã¨ã¤æè¡ãã³ã¢ãã£ãã£åãã¦ãããã ãªã¼ãã