Yahoo!µÄPNUTSÊÇÒ»¸ö·Ö²¼Ê½µÄÊý¾Ý´æ´¢Æ½Ì¨£¬ËüÊÇYahoo!ÔÆ¼ÆËãÆ½Ì¨ÖØÒªµÄÒ»²¿·Ö¡£ËüµÄÉϲã²úƷͨ³£Ò²³ÆÎªSherpa¡£°´ÕÕ¹Ù·½µÄÃèÊö£¬¡±PNUTS, a massively parallel and geographically distributed database system for Yahoo!¡¯s web applications.¡± PNUTSÏÔÈ»¾ÍÉîÚÏCAPÖ®µÀ£¬¿¼Âǵ½´ó²¿·ÖwebÓ¦ÓöÔÒ»ÖÂÐÔ²¢²»ÒªÇó·Ç³£Ñϸñ£¬ÔÚÉè¼ÆÉÏ·ÅÆúÁ˶ÔǿһÖÂÐÔµÄ×·Çó¡£´úÌæµÄÊÇ×·Çó¸ü¸ßµÄavailability£¬ÈÝ´í£¬¸ü¿ìËÙµÄÏìÓ¦µ÷ÓÃÇëÇóµÈ¡£
1. PNUTS¼ò½é¼°Ìصã
- µØÀí·Ö²¼Ê½£¬·Ö²¼ÔÚÈ«Çò¶à¸öÊý¾ÝÖÐÐÄ¡£ÓÉÓڴ󲿷ÖWebÓ¦Óö¼¶ÔÏìӦʱ¼äÒªÇó¸ß£¬Òò´Ë×îºÃ·þÎñÆ÷²¿ÊðÔÚÀëÓû§×î½üµÄ±¾µØ»ú·¿¡£
- ¿ÉÀ©Õ¹£¬¼Ç¼Êý¿ÉÖ§³Ö´Ó¼¸ÍòÌõµ½¼¸ÒÚÌõ¡£Êý¾ÝÈÝÁ¿Ôö¼Ó²»»áÓ°ÏìÐÔÄÜ¡£
- schema-free£¬¼´·**̶¨±í½á¹¹¡£Êµ¼ÊʹÓÃkey/value´æ´¢µÄ£¬Ò»Ìõ¼Ç¼µÄ¶à¸ö×Ö¶Îʵ¼ÊÊÇÓÃjson·½Ê½ºÏ²¢´æÔÚvalueÖС£Òò´ËdeleteºÍupdate±ØÐëÖ¸¶¨primary key¡£µ«Ò²Ö§³ÖÅúÁ¿²éѯ¡£
- ¸ß¿ÉÓÃÐÔ¼°ÈÝ´í¡£´Óµ¥¸ö´æ´¢½Úµãµ½Õû¸öÊý¾ÝÖÐÐIJ»¿ÉÓö¼²»»áÓ°Ïìǰ¶ËWeb·ÃÎÊ¡£
- ÊʺϴæÏà¶ÔСÐ͵ļǼ£¬²»Êʺϴ洢´óÎļþ£¬Á÷ýÌåµÈ¡£
- ÈõÒ»ÖÂÐÔ±£Ö¤¡£
´«Í³µÄÊý¾Ý¿âÌṩǿһÖÂÐÔ±£Ö¤, ͨ³£³ÆÎª¡°serialization transaction¡±£¬±£Ö¤µ÷ÓÃʱÐòµÄÒ»ÖÂÐÔ¡£µ«ÔÚwebÓ¦ÓÃÖв»ÊDZØÐ룬±ÈÈçÓû§AÐÞ¸ÄÁË×Ô¼ºµÄ×ÊÁÏ»òÉÏ´«ÁËͼƬ£¬ËûµÄºÃÓÑB¶Ìʱ¼ä²»ÄÜÁ¢¼´¿´µ½²¢²»ÊÇ´óµÄÎÊÌ⣬ͨ³£µÄWebÓ¦Óö¼¿ÉÒÔ½ÓÊÜ¡£PNUTSÏñ´ó²¿·Ö·Ö²¼Ê½key/valueϵͳÀàËÆ£¬ÌṩµÄÊÇÈõÒ»ÖÂÐÔµÄÖ§³Ö£¬Ò²¾ÍÊÇÖ§³Ö¡°×îÖÕÒ»ÖÂÐÔ(eventually consistent)¡±¡£Óû§B×îÖջῴµ½Óû§AµÄÐÞ¸ÄÐÅÏ¢¡£
δ¹»£¡µ«×îÖÕÒ»ÖÂÐÔ²¢·Ç¿ÉÒÔÊÊÓ¦ËùÓг¡ºÏ£¬±ÈÈçÓû§AÐÞ¸ÄÁËÏà²áµÄ·ÃÎÊȨÏÞ£¬ÉèÖÃÓû§C²»ÄÜ·ÃÎÊ£¬È»ºóÓû§AÓÖÉÏ´«ÁËеÄͼƬ£¬Èç¹ûÓû§C´¦ÓÚÁíÍâÒ»¸öIDC·ÃÎÊ£¬Èç¹ûͼƬÊý¾ÝÏÈͬ²½³É¹¦£¬¶øÈ¨Ï޼Ǽºóͬ²½µÄ»°£¬Cʵ¼ÊÉÏÎ¥·´ÁËAÉèÖõÄȨÏÞ¶ø¿´µ½Í¼Æ¬ÁË¡£Òò´Ë¶ÔÓÚ²¿·Ö³¡ºÏ×îÖÕÒ»ÖÂÐÔÊDz»¹»µÄ¡£
2. PNUTSʵÏÖ
2.1 Record-level mastering ¼Ç¼¼¶±ðÖ÷½Úµã
ÿһÌõ¼Ç¼¶¼ÓÐÒ»¸öÖ÷¼Ç¼¡£±ÈÈçÒ»¸öÓ¡¶ÈµÄÓû§±£´æµÄ¼Ç¼masterÔÚÓ¡¶È»ú·¿£¬Í¨³£Ð޸ͼ»áµ÷ÓÃÓ¡¶È¡£ÆäËûµØ·½ÈçÃÀ¹úÓû§¿´Õâ¸öÓû§µÄ×ÊÁϵ÷ÓõÄÊÇÃÀ¹úÊý¾ÝÖÐÐĵÄ×ÊÁÏ£¬ÓпÉÄÜÈ¡µ½µÄÊǾɰæµÄÊý¾Ý¡£·Çmaster»ú·¿Ò²¿É¶Ô¼Ç¼½øÐÐÐ޸쬵«ÐèÒªmasterÀ´Í³Ò»¹ÜÀí¡£Ã¿ÐÐÊý¾Ý¶¼ÓÐ×Ô¼ºµÄ°æ±¾¿ØÖÆ£¬ÈçÏÂͼËùʾ¡£

2.2 PNUTSµÄ½á¹¹
ÿ¸öÊý¾ÝÖÐÐĵÄPNUTS½á¹¹ÓÉËIJ¿·Ö¹¹³É
Storage Units (SU) ´æ´¢µ¥Ôª
ÎïÀíµÄ´æ´¢·þÎñÆ÷£¬Ã¿¸ö´æ´¢·þÎñÆ÷ÉÏÃæº¬Óжà¸ötablets£¬tabletsÊÇPNUTSÉϵĻù±¾´æ´¢µ¥Ôª¡£Ò»¸ötabletsÊÇÒ»¸öyahooÄÚ²¿¸ñʽµÄhash tableµÄÎļþ(hash table)»òÊÇÒ»¸öMySQL innodb±í(ordered table)¡£Ò»¸öTabletͨ³£Îª¼¸°ÙM¡£Ò»¸öSUÉÏͨ³£»á´æÔÚ¼¸°Ù¸ötablets¡£
Routers
ÿ¸ötabletsÔÚÄĸöSUÉÏÊÇͨ¹ý²éѯrouter»ñµÃ¡£Ò»¸öÊý¾ÝÖÐÐÄÄÚrouterͨ³£¿ÉÓÉÁ½Ì¨Ë«»ú±¸·ÝµÄµ¥ÔªÌṩ¡£
Tablet Controller
routerµÄλÖÃÖ»ÊǸöÄÚ´æ¿ìÕÕ£¬Êµ¼ÊµÄλÖÃÓÉTablet Controllerµ¥Ôª¾ö¶¨¡£
Message Broker
ÓëÔ¶³ÌÊý¾ÝµÄͬ²½ÊÇÓÉYMBÌṩ£¬ËüÊÇÒ»¸öpub/subµÄÒì²½ÏûÏ¢¶©ÔÄϵͳ¡£
2.3 TabletsѰַÓëÇзÖ
´æ´¢·ÖhashºÍordered data store¡£
ÒÔhashΪÀý½éÉÜ£¬ÏȶÔËùÓеÄtablets°´hashÖµ·ÖƬ£¬±ÈÈç1-10,000ÊôÓÚtablets 1, 10,000µ½20,000ÊôÓÚtablets 2£¬ÒÀ´ËÀàÍÆ·ÖÅäÍêËùÓеÄhash·¶Î§¡£Ò»¸ö´óÐ͵ÄIDCͨ³£»á´æÔÚ100ÍòÒÔϵÄtablets, 1,000̨×óÓÒµÄSU¡£tabletsÊôÓÚÄĸöSUÓÉroutersÈ«²¿¼ÓÔØµ½ÄÚ´æÀïÃæ£¬Òò´Ërouter·ÃÎÊËٶȼ«¿ì£¬Í¨³£²»»á³ÉΪƿ¾±¡£°´ÕÕ¹Ù·½µÄ˵·¨£¬ÏµÍ³µÄÆ¿¾±Ö»´æÔÚ´ÅÅÌÎļþhash file·ÃÎÊÉÏ¡£
µ±Ä³¸öSU·ÃÎÊÁ¿¹ý´ó£¬Ôò¿É½«SUÖв¿·ÖtabletsÒÆµ½Ïà¶Ô¿ÕÏеÄSU£¬²¢ÐÞ¸Ätablet controllerµÄÆ«ÒÆ¼Ç¼¡£router¶¨Î»tabletʧЧ֮ºó»á×Ô¶¯Í¨¹ýtablet controllerÖØÐ¼ÓÔØµ½ÄÚ´æ¡£ËùÒÔÇзÖÒ²Ïà¶ÔÈÝÒ×ʵÏÖ¡£
TimÒ²Ôø¾ÓÃMySQLʵÏÖ¹ýÀàËÆ´ó¹æÄ£´æ´¢µÄϵͳ£¬µ±Ê±µÄ×ö·¨ÊǰÑÿÌõ¼Ç¼µÄkeyÊôÓÚÄĸöSUµÄÐÅÏ¢±£´æµ½Ò»¸ö×ÖµäÀïÃæ£¬ºÃ´¦ÊÇÇзֿÉÒÔ»ñµÃ¸ü´óµÄÁé»îÐÔ£¬¿ÉÒÔ¶¯Ì¬Ôö¼ÓеÄtablets,¶ø²»ÐèÒªÇз־ɵÄtablets¡£µ«È±µã¾ÍÊÇ×Öµäû·¨ÏñrouterÕâÑù£¬¿ÉÒÔ¸ßЧµÄÈ«²¿¼ÓÔØµ½ÄÚ´æÖС£ËùÒԱȽ϶øÑÔ£¬ÔÚʵ¼ÊµÄÓ¦ÓÃÖУ¬°´¶Î·ÖƬ»á¸ü¼òµ¥£¬ÇÒÒѾ×㹻ʹÓá£
2.4 API·ÃÎÊ
Ö§³Ö¶àÖÖ¼¶±ðµÄÊý¾Ý·ÃÎÊAPI:
- Read-any ¶ÁÈ¡µÄ°æ±¾ÓпÉÄÜÊǾɵ쬷µ»Ø±¾µØIDCµÄÊý¾Ý£¬²»¼ì²é×îа汾£¬ÐÔÄÜ×îºÃ¡£
- Read-critical(required_version) ¶Áȡָ¶¨°æ±¾£¬Óû§ÐÞ¸Ä×ÊÁÏÖ®ºóµ÷Ó÷µ»Ø±Èµ±Ç°°æ±¾¸üеİ汾£¬ÒÔ±£Ö¤µ±Ç°Óû§¿´µ½µÄ²»ÊÇÐÞ¸ÄǰµÄ¼Ç¼¡£
- Read-latest Ç¿ÖÆ¶ÁÈ¡×îУ¬¿ÉÄÜÐèÒªÖ´ÐÐÔ¶³ÌIDCµ÷ÓᣱÈÈçÉÏÃæÀý×Ó½éÉܵĶÁȡȨÏÞÁбíµÄµ÷Óá£
- Write ±ÈÈç¸üÐÂÓû§×ÊÁÏ
- Test-and-set-write(required version) Ö»Óе±¼Ç¼ÊôÓÚÖ¸¶¨µÄ°æ±¾²ÅÖ´ÐÐwrite£¬±ÈÈç¸üÐÂÓû§»ý·ÖµÈÒµÎñ£¬Õâ¸öµ÷ÓÃÓеãÀàËÆÒÔǰ½éÉܵÄatom²Ù×÷¡£
Writeµ÷ÓÃʾÒâͼ
3. PNUTSÒÉÎÊ
¼Ç¼¼¶±ðmasterµÄÎÊÌ⣬±ÈÈçmasterѡȡÈçºÎ´ïµ½Ð§ÂÊ×î¼Ñ£¬ÈçºÎÃæ¶Ô2¸öÐ޸ĺϲ¢³åÍ»?ºÏ²¢³åÍ»¾Ý˵ÊÇÐèÒªclient×ÔÐÐÀ´´¦Àí£¬
ÕâÆªDetails on Yahoo¡¯s distributed databaseÌáµ½µÄƽ¾ùµ÷ÓÃlatency 100msµÄÎÊÌâ¡£webÓ¦ÓÃͨ³£¶Ôÿ´ÎÊý¾ÝµÄ·ÃÎÊ×îºÃÔÚ10msÖ®ÄÚÍê³É£¬ÒòΪÿ¸öwebÒ³ÃæÊµ¼ÊÉϲ»Ö¹Ò»¸öÊý¾Ý·ÃÎʵĵ÷Ó㬾³£µ÷ÓÃ10´ÎÒÔÉÏdbµÄ·ÃÎʵÄÒ³Ãæ²¢²»ÉÙ¼û£¬Òò´ËÈç¹ûƽ¾ùlatencyÔÚ100msÒÔÉÏÄÇÊÆ±ØÓ°ÏìÒ³Ãæ¼ÓÔØËÙ¶È¡£²»¹ýyahoo!µÄ¿ª·¢ÈËÔ±»Ø¸´paperÖеÄÊý¾Ýʵ¼ÊÊÇÒ»¸öÀϰ汾µÄ²âÊÔ£¬Ä¿Ç°µÄ°æ±¾£¬ÔÚʵ¼ÊÉú²ú»·¾³µÄpnutsµÄlatency»áÔÚ10msÒÔÏ¡£
ÁíÍâPNUTSΪʲôҪÓÃÏûϢϵͳ´úÌæreplication/undo log£¿ÓкÎÓŵ㣿
4. PNUTS¸ÐÎò
WebÓ¦ÓÃʹÓÃͨÓõĴ洢·þÎñÊÇ´óÊÆËùÇ÷£¬ÀàËÆBigTable, Amazon Dynamo/SimpleDBÕâÑùµÄ·½°¸£¬µ«ÊÇĿǰ³ý·ÇʹÓÃAmazonÌṩµÄÉÌÓÃSimpleDBÖ®Í⼸ºõûÓÐͨÓõĽâ¾ö·½°¸£¬Ã¿¸ö¹«Ë¾ÉõÖÁÿ¸öÏîÄ¿ÐèÒªÃæ¶Ô¼°¿¼ÂÇÊý¾Ý¹æÄ£Ôö´óµÄÎÊÌâ¡£±ÈÈç³õ²½Í³¼ÆÏ¹úÄÚÑо¿¿ÉÀ©Õ¹Êý¾Ý´æ´¢¼°·ÃÎʵÄÏîÄ¿¾ÍÓÐ
- ÊÖ»úÖ®¼ÒµÄÊý¾Ý·ÃÎʲã·â×°DAL 2.0
- Ê¢´ó³Â˼ÈåдµÄ¿ªÔ´ÏîÄ¿Amoeba£¬ÀàËÆMySQL proxy
- ¹úÄÚµÄErlang geek @litaocheng Ôø¾¶ÔDynamo paperÉîÓÐÑо¿£¬ÕýÔÚ¿ª·¢¿ªÔ´µÄerlang DynamoʵÏÖe2dynoma
- ¶¹°êµÄdoubanDB£¬Ò²ÊÇÀàDynamoʵÏÖ
µ±È»ÉÏÃæ¼¸¸öÖ»ÊDZùɽһ½Ç£¬´ó²¿·Ö»¥ÁªÍø¹«Ë¾¶¼ÓÐ×Ô¼ºµÄÊý¾Ý²ã·Ö²¼¼°·ÃÎÊʵÏÖ£¬Ö»²»¹ýûÓжÔÍ⹫¿ª¶øÒÑ¡£¼Ü¹¹Ê¦¡¢DBA¡¢³ÌÐòÔ±¾ß±¸Õâ·½ÃæµÄʵ¼ù¾Ñé¼°¼¼Äܵ±È»ÊǺÃÊ£¬µ«ÊÇÈç¹ûÒµ½çÄܹ»ÓÐͨÓÃÎȶ¨µÄ½â¾ö·½°¸À´½â¾ö´ó¼ÒµÄÖØ¸´¹¤×÷Ôò¶ÔÕû¸öÒµ½ç¸ü¼Ñ¡£PNUTSËäÈ»Éù³Æ»á¿ªÔ´£¬µ«ÊÇһֱûÓнøÒ»²½ÏûÏ¢¡£¶øÇÒ¼´Ê¹¿ªÔ´ÊÇÊÇ¿ª·ÅºËÐÄ´úÂ뻹ÊÇÈ«²¿¿ÉÓÃÓÚ²¿ÊðµÄ³ÌÐò(±ÈÈçYMBµÈ)ÕâÒ²ÊÇÒ»¸öÎÊÌâ¡£
µ±È»£¬ÎÒ²»ÊǵÚÒ»¸öÒ²²»ÊÇ×îºóÒ»¸ö¿¼ÂÇÕâ¸öÎÊÌâµÄ£¬±ÈÈç2006ÄêGreg Linden¾Í˵I want a big, virtual database
What I want is a robust, high performance virtual relational database that runs transparently over a cluster, nodes dropping in an out of service at will, read-write replication and data migration all done automatically.
I want to be able to install a database on a server cloud and use it like it was all running on one machine.
from: http://timyang.net/architecture/yahoo-pnuts/
ÔÎijö×Ô£ºB. Cooper, R. Ramakrishnan, et al. PNUTS: Yahoo!¡¯s Hosted Data Serving Platform. PVLDB, 1(2):1277¨C1288, 2008.
=============
ApacheCon 09 ÉÏÓÐÒ»¸ö¹ØÓÚ Yahoo! ÔÆ¼ÆËãÆ½Ì¨µÄÉè¼ÆË¼Â·ºÍ¼¼Êõµã µÄ keynote, ¶Ô¼¼ÊõÈËÔ±¶øÑÔËãÊDZȽϿ¿Æ×µÄÔÆ×ÊÁÏ. Yahoo! PNUTS ÊÇ Yahoo! ÔÆ¼ÆËãÌåϵÖÐ, ÌṩʵʱÊý¾Ý·þÎñ (Óû§ profile, session, ÉçÇøÍøÕ¾ etc.) µÄ²¿·Ö. ¿ÉÒÔ°Ñ PNUTS Àí½â³ÉÒ»¸ö¿ÉÒÔÎÞÏÞÀ©Õ¹µÄ´ó¹ØÏµÊ½Êý¾Ý¿â¼¯Èº, ¿ÉÒÔ¶Ôµ¥±í½øÐи÷ÖÖ²éѯÒÔ¼°µ¥ÌõÊý¾Ý¸üР--- Ëü±È BigTable »ò GAE µÄ DataStore µÈ¸ü½Ó½üÕâÒ»¸ÅÄî. ͨ¹ýÕâÆªÂÛÎÄ PNUTS: Yahoo!'s Hosted Data Serving Platform ¿ÉÒÔÁ˽âËüµÄ»ù±¾Éè¼Æ.
»ù±¾Éè¼Æ
PNUTS ¸øÎҵĵÚÒ»¸ö¸Ð¾õ¾ÍÊÇ: ÍÁ, »»¸ö˵·¨, ʵÔÚ. ËüûÓÐʲô»¨ÉڵĶ«Î÷, һЩ»ù±¾ÒªËؾÍÊÇ:
- µ×²ã´æ´¢Ö§³Ö hash ºÍ ordered, ÔÚÂÛÎÄÖÐ ordered µÄ´æ´¢»¹ÊÇʵÑéÐÔµÄ, ¶øÇÒµ×²ã´æ´¢ÓõÄÊÇ MySQL innodb, ÔÚ apachecon ÉÏ·¢ÏÖÒѾÊǸö½Ð YDOT FS µÄßËßËÁË (±ð¸æËßÎÒÊÇ»»ÌÀ²»»»Ò©).
- Êý¾Ý·Ö¿é, ¸ù¾Ý key hash µ½Ò»¸ö [0-2N] µÄ¿Õ¼ä, È»ºó²»Í¬µÄ»úÆ÷´æÆäÖÐÒ»×é tablet, Èç¹û tablet ´óÁ˾ͷÖÁÑ, »úÆ÷´æ²»ÏÂÁ˾ÍǨ tablet. Á¬ consistent hash ¶¼²»À´Ò»ÏÂ. ²»¹ýȷʵ¼òµ¥ºÃÓÃ, ²»µ«¿ÉÒÔÊÊÓ¦ hash ºÍ range ·Ö¿éµÄÇé¿ö, Êý¾Ý¿é¸ú×ÙºÍά»¤Ç¨ÒÆ»úÖÆÒ²¼òµ¥ºÜ¶à.
- tablet controller ±£ÓÐ tablet ·Óɱí, Ò»¸ö router ¸ºÔðÏò´æ´¢µ¥Ôª²éѯ, ¶ÔÅúÁ¿²éѯºÍ range ²éѯ, ÓÉ router ¸ù¾Ý·Óɱí¾ö¶¨²éѯÄÄЩ´æ´¢µ¥Ôª, È»ºó½øÐв¢Ðвéѯ, ¶ø¶ÔÍâ¸ø³öÒ»¸öÒ×ÓÚÀí½âµÄµ¥Á¬½Ó½Ó¿Ú.
- Message Broker, Ò»¸ö¿É¿¿µÄÏûÏ¢´«Êä·þÎñ, ʵÏÖ replication, ÓÐЧ±£Ö¤´æ´¢Êý¾Ý¿É¿¿ºÍÒ»ÖÂ.
ûÓÐʲô magic, ÊÇÒ»¸öºÜÈÝÒ׿´Ã÷°×µÄ¼Ü¹¹.
Ò»ÖÂÐÔÄ£ÐÍ
ÓÐȤµÄÊÇËüµÄÒ»ÖÂÐÔÄ£ÐͺÍʵÏÖ·½·¨. ÎÒÃǶ¼ÖªµÀ CAP (Consistency, Availbility, Network Partition) ²»¿É¼æµÃ(ÈÃÎÒ×îÓôÃÆµÄÊÇÕâ¸öºÜºÃÖ¤Ã÷ÎÒÈ´ÔÚÕâÉÏÃæ¶µÁËÄÇô¾ÃȦ×Ó), ²»Í¬µÄ´æ´¢ÏµÍ³¸ù¾ÝËüµÄ±³¾°ºÍÒµÎñÐèÇóÔÚÕâÈýÕßÖнøÐÐȨºâ. ÀýÈç Amazon Dynamo ¾ÍÊÇÒ»¸öÏ൱¼«¶ËµÄ×îÖÕÒ»ÖÂÄ£ÐÍ, ²¢ÇÒÐèÒª¿ª·¢ÕßÀ´´¦Àí²»Ò»ÖÂ, ²»Í¬°æ±¾µÄºÏ²¢ÎÊÌâ. ¶ø PNUTS µÄ˼·, ¸üÃ÷ÏÔµØÊÇÀ´×ÔÉçÇø»òÆäËûʵʱÌá½»ÒµÎñµÄ¾Ñé: ¿ìËÙ¿ª·¢, ±à³ÌÄ£Ð;¡Á¿¼òµ¥, ¶ÔÒ»ÖÂÐÔÓÐÒªÇ󵫲»Í¬µÄ³¡¾°ÒªÇó²»Ò», ÒªÇó¿ÉÀ©Õ¹ÐÔµ«²»ÒªÇó¾ø¶ÔµÄÏßÐÔ¿ÉÀ©Õ¹. Ò²À´×ÔÓÚËûÃdz¤ÆÚʹÓà MySQL-based ¼Ü¹¹µÄ¾Ñé, ÒÔÖÁÓÚ×îºóµÄÉè¼Æ»¹ÊÇÎÒÃǺÜÊìϤµÄÒ»Ì×.
PNUTS Ê×ÏÈÌṩÁËʱÐòÒ»ÖÂ, Ò»¸ö¼Ç¼ÔÚ²»Í¬»úÆ÷ÉϵÄ״̬¿ÉÄܲ»Í¬, µ«Ö»»áÊÇij¸öÑϸñ˳ÐòµÄ״̬ÐòÁÐÖÐµÄÆäÖÐÒ»¸ö, ²»»á³öÏÖ Dynamo ÖеĶà·ÖÖ§°æ±¾, ÐèÒªÓ¦Óô¦Àí³åÍ»ºÏ²¢µÄÇé¿ö. ʵÏÖ·½·¨ºÜ¼òµ¥: ÎÒÃÇÍæµ½ÊìµÄÖ÷´Ó. ²»Í¬µÄÊÇ, Ëü²»°Ñ¼¦µ°¶¼·ÅÔÚÒ»¸öÀº×ÓÀï, ÿ¸ö¼Ç¼¶¼ÓÐÊôÓÚ×Ô¼ºµÄÒ»¸ö master ½Úµã, ¶øÒª½øÐмǼ²åÈëºÍɾ³ý²Ù×÷ʱ, ÔòʹÓûùÓÚ tablet µÄ master ½Úµã. »ùÓÚ PNUTS Ö»Ìṩµ¥Ìõ¸üеÄǰÌá, ÕâÊǺܼòµ¥µÄÊÂ.
ÁíÒ»·½Ãæ, ÔÚ¶ÁÈ¡¶Ë PNUTS ÄÜÌṩ¶àÖÖ²»Í¬Ô¼ÊøµÄ¶Áȡģʽ: read-any, ÓÃÓÚ´¿ä¯ÀÀÈÎÎñ, »ñÈ¡Êý¾ÝµÄÈÎһ״̬; read-critical ºÍ read-latest ÌṩÁ˱ØÐë¶Áµ½Ä³°æ±¾Ö®ºó»ò×îа汾µÄ±£Ö¤, Õâ¿ÉÒÔÓÃÓÚÍê³ÉµäÐ͵ÄÏȲéºó¸ÄµÄ¸üÐÂģʽ. Õâ¸öÈç¹û¼òµ¥´Ö±©µã, ¸úÔÚ MySQL ÖеÄÖ÷´Ó¼Ü¹¹Ò»Ñù, ´¿ä¯ÀÀÈÎÎñ¿ÉÒÔ´Ó´Ó¿âÖжÁ, µ«²»±£Ö¤´Ó¿âÊÇ×îа汾; ¶ø¸üвÙ×÷ÖÐÈôÐè½øÐвéѯ, ÔòÐèÔÚÖ÷¿âÉϽøÐÐ.
ÓÉÕâ¸öÒ»ÖÂÐÔÄ£ÐͺÍËüµÄʵÏÖ, ÎÒÃÇ¿ÉÒÔ¿´µ½ PNUTS ÔÚ CAP ÉϵÄÈ¡Éá:
- Network Partition vs. Consistency. ÍøÂç·ÖƬÊÇÀ©Õ¹ÐԵı£Ö¤, ²»¿ÉÉáÆú. ËùÒÔÐèҪʹÓà replication, ËüÄÜʹ¼Ç¼µÄ²»Í¬±¸·Ý×îÖÕÒ»ÖÂ. ¿¼ÂÇ master ¹ÒµôÐèҪѡ¾ÙРmaster µÄʱºò, Õâʱºò Network Partition ¾ÍÒªÏ÷Èõ; ÁíÍâ, Èç¹ûËùÓÐµÄ replication ¸üж¼ÊÇÒì²½µÄ»°, ÔÚ master ½Óµ½Ò»¸ö¸üжøËùÓÐ slave ¶¼Î´Í¬²½µÄʱºò master ¹Òµô, ÊǻᶪÊý¾ÝµÄ, ¸ù¾Ý Paxos, Òª±£Ö¤ N ¸ö¸±±¾¸üÐÂ×îÖÕÒ»ÖÂÖÁÉÙÒª N/2+1 µÄ¸±±¾Í¬²½È·ÈÏ, ÕâÀïÊÇûÓÐ×öµ½µÄ. Õâ·½ÃæµÄ¿É¿¿ÐÔÓÉ YMB ¿É¿¿ÏûÏ¢·þÎñ±£Ö¤, µ«Òª±£Ö¤Õâ¸ö·þÎñµÄ¿É¿¿ºÍÒ»ÖÂ, ÐèÒªµÄ·½·¨ºÍͬ²½È·ÈϵĽڵãÊýÊÇÏàͬµÄ (YMB ²Éȡͬ²½Ð´Ë«Å̲ßÂÔ).
- Availability vs. Consistency. ÔÚÕâ·½Ãæ, Dyanmo ²ÉÈ¡µÄÊÇ always writable ²ßÂÔ, ¶ø PNUTS ÏÔÈ»¸üÆ«ÏòºóÕß. Ò»·½Ãæ, ¿¼ÂÇ master-slave ¼Ü¹¹, µ± master ¹ÒµôµÄʱºò, ÐèÒªÒ»¸öºÜ³¤ (¿ÉÄÜÊÇÃë¼¶) µÄʱ¼ä·¢ÏֺͽøÐÐÒ»´Î·Ö²¼Ê½Ñ¡¾Ù¾ö³öРmaster, Õâ¶Îʱ¼äÕâ¸öÊý¾Ý½ÚµãÆäʵÊDz»¿ÉдµÄ; ÁíÒ»·½Ãæ, Èç¹ûÐèÒª±£Ö¤Ò»¸ö¼Ç¼ÏȲéºó¸ÄµÄ¸üÐÂÊÂÎñµÄÔ×ÓÐÔ (ÀýÈç¼Ó¼õÕË»§½ð¶î), ±ØÐë×ö read-latest + test-and-set, Òò´Ë¸üÐÂÓпÉÄÜʧ°Ü¶øÐèÒªÓ¦ÓòãÖØÊÔ, ´øÀ´ÁíÒ»ÖÖÐèÒªÔÚÓ¦ÓóÌÐòÖнâ¾ö¶ø²»»á±»×îÖÕÓû§·¢ÏֵIJ»¿ÉÓÃ.
×îºó
Ö®ËùÒÔ PNUTS ½Ð×ö ``ÔÆ'', ²»½öÒòΪËüµÄÀ©Õ¹ÄÜÁ¦, ¸üÒòΪËüÊÇ hosted µÄ, ²»ÊÇÿ¸öÓ¦Óö¼´îÒ»Ì××Ô¼ºµÄ¼¯Èº, ¶øÊÇËùÓÐÓ¦Óù²ÏíÒ»¸ö´æ´¢¼¯Èº, ¸÷×ÔÓÃ×Ô¼ºµÄ±í. ´Ó´¿¼¼Êõ½Ç¶È¶øÑÔ, ÕâËÆºõûʲôÌôÕ½, ÕâÔì³ÉÁËÎÒÃÇÍùÍùȱ·¦Õâ·½ÃæµÄ¿¼ÂÇ. ÎÒ¾³£ËµÓ¦ÓÃÉú̬ÊÇÒ»¸ö³¤Î²: ¼«ÉÙÊýÀàËÆ Google Search ÕâÑùµÄ³¬¼¶Ó¦ÓÃ, ËûÃDZØÐëʹÓÃרÓõļ¯Èº, רÓõÄÈí¼þºÍÓ²¼þ, ÎªÌØÊâÐèÇóÓÅ»¯; ¶øÓÖÓдóÁ¿ÖÐСÐÍÓ¦ÓÃ, ËûÃÇÐèÒªÒ×ÓÃ, µÍ³É±¾µÄÔÆ¼ÆËãÆ½Ì¨. »ù´¡¼Ü¹¹¶ÔÕâÁ½ÖÖÓ¦ÓõÄÂú×㷽ʽÊDz»Ò»ÑùµÄ: ǰÕß¿¼ÂǵÄÊDZØÈ»ÎÞÏÞÔö´óµÄ¹æÄ£, ¿¼ÂÇÎªÌØ¶¨Ó¦ÓõÄЧÂÊÎÞÏÞÓÅ»¯; ¶øºóÕßËäȻͬÑù¿¼Âǵ¥¸öÓ¦ÓõĿÉÀ©Õ¹ÐÔ, µ«ÎÞÐè´ïµ½ÎÞÇîµÄ¹æÄ£ --- µ±ËûÃdzɳ¤ÎªÁíÒ»¸ö³¤Î²Í·²¿Ó¦ÓÃʱ, Éè¼ÆÌØÊâ·½°¸ÊDZØÈ»µÄ, ÁíÒ»·½Ãæ, È´Òª¿¼ÂÇÊýÁ¿¼«´óµÄÖÐС¹æÄ£Ó¦ÓöÑÔÚÒ»¸ö¼¯ÈºÀïµÄ¸÷ÖÖÇé¿ö: ÕËºÅºÍ quota ¹ÜÀí, Êý¾Ý¸ôÀë, Ó¦ÓÃѹÁ¦µÄƽºâµÈµÈ. ¹¦ÄÜϸ΢, ûɶÌôÕ½ÐÔ, ³£³£±»ÒÅÍü. ÔÚÕâ·½Ãæ PNUTS ÏÔȻûÓÐÒÅ©.
PNUTS ÊÇÒ»¸öºÜÈÝÒ×½è¼øµÄϵͳ. ÎÒÃDz»ÐèÒªÏñ Hadoop vs. GFS + MapReduce Ò»ÑùÕÕ×Å PNUTS ´îÒ»Ì×. ËüµÄÉè¼Æµã, ÌØ±ðÊÇ¶Ô CAP µÄȨºâ¿¼ÂǺÍʵÏÖ·½·¨, ÄܺÜÈÝÒ×ÈÚÈëµ½ÒÑÓÐϵͳÉè¼ÆÖÐ. ´Ó´ÓÕâ·½Ãæ¿´, Ëü»á±È BigTable, Dynamo ÕâÑùµÄÃ÷ÐÇÏîÄ¿ ``ʵÓÃ'' µÃ¶à.
from:http://randomtaste.appspot.com/view/page/yahoo-pnuts