Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
NoSQLÊý¾Ý¿âµÄÖ÷Ö÷±¸·Ý
 
×÷ÕߣºDennis Anikin À´Ô´£ºÍøÂç ·¢²¼ÓÚ£º 2017-6-5
  1804  次浏览      27
 

Tarantool DBMSµÄ¸ßÐÔÄÜÓ¦¸ÃºÜ¶àÈ˶¼Ìý˵¹ý£¬°üÀ¨Æä·á¸»µÄ¹¤¾ßÌ×¼þºÍÄ³Ð©ÌØ¶¨¹¦ÄÜ¡£±ÈÈ磬ËüÓµÓÐÒ»¸ö·Ç³£Ç¿´óµÄon-disk´æ´¢ÒýÇæVinyl£¬²¢ÇÒÖªµÀÔõÑù´¦ÀíJSONÎĵµ¡£È»¶ø£¬´ó²¿·ÖÎÄÕÂÍùÍùºöÂÔÁËÒ»¸ö¹Ø¼üµã£ºÍ¨³££¬Tarantool½ö½ö±»ÊÓΪ´æ´¢Æ÷£¬¶øÊµ¼ÊÉÏÆä×î´óÌØµãÊÇÄܹ»ÔÚ´æ´¢Æ÷ÄÚ²¿Ð´´úÂ룬´Ó¶ø¸ßЧ´¦ÀíÊý¾Ý¡£Èç¹ûÄãÏëÖªµÀÎÒºÍigorcodingÊÇÔõÑùÔÚTarantoolÄÚ²¿½¨Á¢Ò»¸öϵͳµÄ£¬Çë¼ÌÐøÍùÏ¿´¡£

Èç¹ûÄãÓùýMail.Ruµç×ÓÓʼþ·þÎñ£¬ÄãÓ¦¸ÃÖªµÀËü¿ÉÒÔ´ÓÆäËûÕ˺ÅÊÕ¼¯Óʼþ¡£Èç¹ûÖ§³ÖOAuthЭÒ飬ÄÇôÔÚÊÕ¼¯ÆäËûÕ˺ŵÄÓʼþʱ£¬ÎÒÃǾͲ»ÐèÒªÈÃÓû§ÌṩµÚÈý·½·þÎñƾ֤ÁË£¬¶øÊÇÓÃOAuthÁîÅÆÀ´´úÌæ¡£´ËÍ⣬Mail.Ru GroupÓкܶàÏîĿҪÇóͨ¹ýµÚÈý·½·þÎñÊÚȨ£¬²¢ÇÒÐèÒªÓû§µÄOAuthÁîÅÆ²ÅÄÜ´¦ÀíijЩӦÓá£Òò´Ë£¬ÎÒÃǾö¶¨½¨Á¢Ò»¸ö´æ´¢ºÍ¸üÐÂÁîÅÆµÄ·þÎñ¡£

ÎҲ´ó¼Ò¶¼ÖªµÀOAuthÁîÅÆÊÇʲôÑùµÄ£¬±ÕÉÏÑÛ¾¦»ØÒäһϣ¬OAuth½á¹¹ÓÉÒÔÏÂ3-4¸ö×Ö¶Î×é³É£º

{

¡¡¡¡¡°token_type¡± : ¡°bearer¡±,

¡¡¡¡¡°access_token¡± : ¡°XXXXXX¡±,

¡¡¡¡¡°refresh_token¡± : ¡°YYYYYY¡±,

¡¡¡¡¡°expires_in¡± : 3600

¡¡¡¡}

·ÃÎÊÁîÅÆ(access_token)¡ª¡ªÔÊÐíÄãÖ´Ðж¯×÷¡¢»ñÈ¡Óû§Êý¾Ý¡¢ÏÂÔØÓû§µÄºÃÓÑÁбíµÈµÈ;

¸üÐÂÁîÅÆ(refresh_token)¡ª¡ªÈÃÄãÖØÐ»ñȡеÄaccess_token£¬²»ÏÞ´ÎÊý;

¹ýÆÚʱ¼ä(expires_in)¡ª¡ªÁîÅÆµ½ÆÚʱ¼ä´Á»òÈÎºÎÆäËûÔ¤¶¨Òåʱ¼ä,Èç¹ûÄãµÄaccess_tokenµ½ÆÚÁË£¬Äã¾Í²»ÄܼÌÐø·ÃÎÊËùÐèµÄ×ÊÔ´¡£

ÏÖÔÚÎÒÃÇ¿´Ò»Ï·þÎñµÄ¼òµ¥¿ò¼Ü¡£ÉèÏëÓÐһЩǰ¶Ë¿ÉÒÔÔÚÎÒÃǵķþÎñÉÏдÈëºÍ¶Á³öÁîÅÆ£¬»¹ÓÐÒ»¸ö¶ÀÁ¢µÄ¸üÐÂÆ÷£¬Ò»µ©ÁîÅÆµ½ÆÚ£¬¾Í¿ÉÒÔͨ¹ý¸üÐÂÆ÷´ÓOAuth·þÎñÌṩÉÌ»ñȡеķÃÎÊÁîÅÆ¡£

ÈçÉÏͼËùʾ£¬Êý¾Ý¿âµÄ½á¹¹Ò²Ê®·Ö¼òµ¥£¬ÓÉÁ½¸öÊý¾Ý¿â½Úµã(Ö÷ºÍ´Ó)×é³É£¬ÎªÁË˵Ã÷Á½¸öÊý¾Ý¿â½Úµã·Ö±ðλÓÚÁ½¸öÊý¾ÝÖÐÐÄ£¬¶þÕßÖ®¼äÓÉÒ»Ìõ´¹Ö±µÄÐéÏ߸ô¿ª£¬ÆäÖÐÒ»¸öÊý¾ÝÖÐÐİüº¬Ö÷Êý¾Ý¿â½Úµã¼°Æäǰ¶ËºÍ¸üÐÂÆ÷£¬ÁíÒ»¸öÊý¾ÝÖÐÐİüº¬´ÓÊý¾Ý¿â½Úµã¼°Æäǰ¶Ë£¬ÒÔ¼°·ÃÎÊÖ÷Êý¾Ý¿â½ÚµãµÄ¸üÐÂÆ÷¡£

ÃæÁÙµÄÀ§ÄÑ

ÎÒÃÇÃæÁÙµÄÖ÷ÒªÎÊÌâÔÚÓÚÁîÅÆµÄʹÓÃÆÚ(Ò»¸öСʱ)¡£ÏêϸÁ˽âÕâ¸öÏîĿ֮ºó£¬Ò²ÐíÓÐÈË»áÎÊ¡°ÔÚһСʱÄÚ¸üÐÂ1000ÍòÌõ¼Ç¼£¬ÕâÕæµÄÊǸ߸ºÔØ·þÎñÂð?Èç¹ûÎÒÃÇÓÃÒ»¸öÊý³ýһϣ¬½á¹û´óÔ¼ÊÇ3000rps¡±¡£È»¶ø£¬Èç¹ûÒòΪÊý¾Ý¿âά»¤»ò¹ÊÕÏ£¬ÉõÖÁ·þÎñÆ÷¹ÊÕÏ(Ò»ÇнÔÓпÉÄÜ)µ¼ÖÂÒ»²¿·Ö¼Ç¼ûÓеõ½¸üУ¬ÄÇÊÂÇ齫»á±äµÃ±È½ÏÂé·³¡£±ÈÈ磬Èç¹ûÎÒÃǵķþÎñ(Ö÷Êý¾Ý¿â)ÒòΪijЩԭÒò³ÖÐøÖжÏ15·ÖÖÓ£¬¾Í»áµ¼ÖÂ25%µÄ·þÎñÖжÏ(ËÄ·ÖÖ®Ò»µÄÁîÅÆ±ä³ÉÎÞЧ£¬²»ÄÜÔÙ¼ÌÐøÊ¹ÓÃ);Èç¹û·þÎñÖжÏ30·ÖÖÓ£¬½«»áÓÐÒ»°ëµÄÊý¾Ý²»Äܵõ½¸üÐÂ;Èç¹ûÖжÏ1Сʱ£¬ÄÇôËùÓеÄÁîÅÆ¶¼½«Ê§Ð§¡£¼ÙÉèÊý¾Ý¿â̱»¾Ò»¸öСʱ£¬ÎÒÃÇÖØÆôϵͳ£¬È»ºóÕû¸ö1000ÍòÌõÁîÅÆ¶¼ÐèÒª½øÐпìËÙ¸üС£ÕâËã²»Ëã¸ß¸ºÔØ·þÎñÄØ?

Ò»¿ªÊ¼Ò»Çж¼»¹½øÕ¹µØ±È½Ï˳Àû£¬µ«ÊÇÁ½Äêºó£¬ÎÒÃǽøÐÐÁËÂß¼­À©Õ¹£¬Ôö¼ÓÁ˼¸¸öÖ¸±ê£¬²¢ÇÒ¿ªÊ¼Ö´ÐÐһЩ¸¨ÖúÂß¼­¡­¡­.×ÜÖ®£¬TarantoolºÄ¾¡ÁËCPU×ÊÔ´¡£¾¡¹ÜËùÓÐ×ÊÔ´¶¼ÊǵݺÄ×ÊÔ´£¬µ«ÕâÑùµÄ½á¹ûȷʵÈÃÎÒÃÇ´ó³ÔÒ»¾ª¡£

ÐÒÔ˵ÄÊÇ£¬ÏµÍ³¹ÜÀíÔ±°ïÎÒÃǰ²×°Á˵±Ê±¿â´æÖÐÄÚ´æ×î´óµÄCPU£¬½â¾öÁËÎÒÃÇËæºó6¸öÔµÄCPUÐèÇó¡£µ«ÕâÖ»ÊÇȨÒËÖ®¼Æ£¬ÎÒÃDZØÐëÏë³öÒ»¸ö½â¾ö°ì·¨¡£µ±Ê±£¬ÎÒÃÇѧϰÁËÒ»¸öаæµÄTarantool(ÎÒÃǵÄϵͳÊÇÓÃTarantool 1.5дµÄ£¬Õâ¸ö°æ±¾³ýÁËÔÚMail.Ru Group£¬ÆäËûµØ·½»ù±¾Ã»Óùý)¡£Tarantool 1.6´óÁ¦ÌᳫÖ÷Ö÷±¸·Ý£¬ÓÚÊÇÎÒÃÇÏ룺Ϊʲô²»ÔÚÁ¬½ÓÖ÷Ö÷±¸·ÝµÄÈý¸öÊý¾ÝÖÐÐÄ·Ö±ð½¨Á¢Ò»¸öÊý¾Ý¿â±¸·ÝÄØ?ÕâÌýÆðÀ´ÊǸö²»´íµÄ¼Æ»®¡£

Èý¸öÖ÷»ú¡¢Èý¸öÊý¾ÝÖÐÐĺÍÈý¸ö¸üÐÂÆ÷£¬¶¼·Ö±ðÁ¬½Ó×Ô¼ºµÄÖ÷Êý¾Ý¿â¡£¼´Ê¹Ò»¸ö»òÕßÁ½¸öÖ÷»ú̱»¾ÁË£¬ÏµÍ³ÈÔÈ»ÕÕ³£ÔËÐУ¬¶Ô°É?ÄÇôÕâ¸ö·½°¸µÄȱµãÊÇÊ²Ã´ÄØ?ȱµã¾ÍÊÇ£¬ÎÒÃǽ«Ò»¸öOAuth·þÎñÌṩÉ̵ÄÇëÇóÊýÁ¿ÓÐЧµØÔö¼Óµ½ÁËÈý±¶£¬Ò²¾ÍÊÇ˵£¬ÓжàÉÙ¸ö¸±±¾£¬ÎÒÃǾÍÒª¸üм¸ºõÏàͬÊýÁ¿µÄÁîÅÆ£¬ÕâÑù²»ÐС£×îÖ±½ÓµÄ½â¾ö°ì·¨¾ÍÊÇ£¬Ïë°ì·¨Èø÷¸ö½Úµã×Ô¼º¾ö¶¨Ë­ÊÇleader£¬ÄÇÑù¾ÍÖ»ÐèÒª¸üд洢ÔÚleaderÉϵĽڵãÁË¡£

Ñ¡Ôñleader½Úµã

Ñ¡Ôñleader½ÚµãµÄËã·¨Óкܶ࣬ÆäÖÐÓÐÒ»¸öËã·¨½ÐPaxos£¬Ï൱¸´ÔÓ£¬²»ÖªµÀÔõÑù¼ò»¯£¬ÓÚÊÇÎÒÃǾö¶¨ÓÃRaft´úÌæ¡£RaftÊÇÒ»¸ö·Ç³£Í¨Ë×Ò×¶®µÄËã·¨£¬Ë­ÄÜͨОÍѡ˭×öleader£¬Ò»µ©Í¨ÐÅÁ¬½Óʧ°Ü»òÕ߯äËûÒòËØ£¬¾ÍÖØÐÂÑ¡leader¡£¾ßÌåʵʩ°ì·¨ÈçÏ£º

TarantoolÍⲿ¼ÈûÓÐRaftҲûÓÐPaxos£¬µ«ÊÇÎÒÃÇ¿ÉÒÔʹÓÃnet.boxÄÚÖÃģʽ£¬ÈÃËùÓнڵãÁ¬½Ó³ÉÒ»¸öÍø×´Íø(¼´Ã¿Ò»¸ö½ÚµãÁ¬½ÓÊ£ÏÂËùÓнڵã)£¬È»ºóÖ±½ÓÔÚÕâЩÁ¬½ÓÉÏÓÃRaftË㷨ѡ³öleader½Úµã¡£×îºó£¬ËùÓнڵãҪô³ÉΪleader½Úµã£¬ÒªÃ´³ÉΪfollower½Úµã£¬»òÕß¶þÕß¶¼²»ÊÇ¡£

Èç¹ûÄã¾õµÃRaftË㷨ʵʩÆðÀ´ÓÐÀ§ÄÑ£¬ÏÂÃæµÄLua´úÂë¿ÉÒÔ°ïµ½Ä㣺

local r = self.pool.call(self.FUNC.request_vote,

¡¡¡¡self.term, self.uuid)

¡¡¡¡self._vote_count = self:count_votes(r)

¡¡¡¡if self._vote_count > self._nodes_count / 2 then

¡¡¡¡log.info(¡°[raft-srv] node %d won elections¡±, self.id)

¡¡¡¡self:_set_state(self.S.LEADER)

¡¡¡¡self:_set_leader({ id=self.id, uuid=self.uuid })

¡¡¡¡self._vote_count = 0

¡¡¡¡self:stop_election_timer()

¡¡¡¡self:start_heartbeater()

¡¡¡¡else

¡¡¡¡log.info(¡°[raft-srv] node %d lost elections¡±, self.id)

¡¡¡¡self:_set_state(self.S.IDLE)

¡¡¡¡self:_set_leader(msgpack.NULL)

¡¡¡¡self._vote_count = 0

¡¡¡¡self:start_election_timer()

¡¡¡¡end

ÏÖÔÚÎÒÃǸøÔ¶³Ì·þÎñÆ÷·¢ËÍÇëÇó(ÆäËûTarantool¸±±¾)²¢¼ÆËãÀ´×Ôÿһ¸ö½ÚµãµÄƱÊý£¬Èç¹ûÎÒÃÇÓÐÒ»¸öquorum£¬ÎÒÃǾÍÑ¡¶¨ÁËÒ»¸öleader£¬È»ºó·¢ËÍheartbeats£¬¸æË߯äËû½ÚµãÎÒÃÇ»¹»î×Å¡£Èç¹ûÎÒÃÇÔÚÑ¡¾ÙÖÐʧ°ÜÁË£¬ÎÒÃÇ¿ÉÒÔ·¢ÆðÁíÒ»³¡Ñ¡¾Ù£¬Ò»¶Îʱ¼äÖ®ºó£¬ÎÒÃÇÓÖ¿ÉÒÔͶƱ»ò±»Ñ¡Îªleader¡£

Ö»ÒªÎÒÃÇÓÐÒ»¸öquorum£¬Ñ¡ÖÐÒ»¸öleader£¬ÎÒÃǾͿÉÒÔ½«¸üÐÂÆ÷Ö¸ÅɸøËùÓнڵ㣬µ«ÊÇÖ»×¼ËüÃÇΪleader·þÎñ¡£

ÕâÑùÎÒÃǾ͹淶ÁËÁ÷Á¿£¬ÓÉÓÚÈÎÎñÊÇÓɵ¥Ò»µÄ½ÚµãÅɳö£¬Òò´Ëÿһ¸ö¸üÐÂÆ÷»ñµÃ´óÔ¼Èý·ÖÖ®Ò»µÄÈÎÎñ£¬ÓÐÁËÕâÑùµÄÉèÖã¬ÎÒÃÇ¿ÉÒÔʧȥÈκÎһ̨Ö÷»ú£¬ÒòΪÈç¹ûij̨Ö÷»ú³ö¹ÊÕÏÁË£¬ÎÒÃÇ¿ÉÒÔ·¢ÆðÁíÒ»¸öÑ¡¾Ù£¬¸üÐÂÆ÷Ò²¿ÉÒÔÇл»µ½ÁíÒ»¸ö½Úµã¡£È»¶ø£¬ºÍÆäËû·Ö²¼Ê½ÏµÍ³Ò»Ñù£¬Óкü¸¸öÎÊÌâÓëquorumÓйء£

¡°·ÏÆú¡±½Úµã

Èç¹û¸÷¸öÊý¾ÝÖÐÐÄÖ®¼äʧȥÁªÏµÁË£¬ÄÇôÎÒÃÇÐèÒªÓÐһЩÊʵ±µÄ»úÖÆÈ¥Î¬³ÖÕû¸öϵͳÕý³£ÔËת£¬»¹ÐèÒªÓÐÒ»Ì×»úÖÆÄָܻ´ÏµÍ³µÄÍêÕûÐÔ¡£Raft³É¹¦µØ×öµ½ÁËÕâÁ½µã£º

¼ÙÉèDatalineÊý¾ÝÖÐÐĵôÏßÁË£¬ÄÇô¸ÃλÖõĽڵã¾Í±ä³ÉÁË¡°·ÏÆú¡±½Úµã£¬Ò²¾ÍÊÇ˵¸Ã½Úµã¾Í¿´²»µ½ÆäËû½ÚµãÁË£¬¼¯ÈºÖÐµÄÆäËû½Úµã¿ÉÒÔ¿´µ½Õâ¸ö½Úµã¶ªÊ§ÁË£¬ÓÚÊÇÒý·¢ÁËÁíÒ»¸öÑ¡¾Ù£¬È»ºóеļ¯Èº½Úµã(¼´Éϼ¶½Úµã)±»Ñ¡Îªleader£¬Õû¸öϵͳÈÔÈ»±£³ÖÔËת£¬ÒòΪ¸÷¸ö½ÚµãÖ®¼äÈÔÈ»±£³ÖÒ»ÖÂÐÔ(´ó°ë²¿·Ö½ÚµãÈÔÈ»»¥Ïà¿É¼û)¡£

ÄÇôÎÊÌâÀ´ÁË£¬Ó붪ʧµÄÊý¾ÝÖÐÐÄÓйصĸüÐÂÆ÷ÔõôÑùÁËÄØ?Raft˵Ã÷ÊéûÓиøÕâÑùµÄ½ÚµãÒ»¸öµ¥¶ÀµÄÃû×Ö£¬Í¨³££¬Ã»ÓÐquorumµÄ½ÚµãºÍ²»ÄÜÓëleaderÁªÏµµÄ½Úµã»á±»ÏÐÖÃÏÂÀ´¡£È»¶ø£¬Ëü¿ÉÒÔ×Ô¼º½¨Á¢ÍøÂçÁ¬½ÓÈ»ºó¸üÐÂÁîÅÆ£¬Ò»°ãÀ´Ëµ£¬ÁîÅÆ¶¼ÊÇÔÚÁ¬½Óģʽʱ¸üУ¬µ«ÊÇ£¬Ò²ÐíÓÃÒ»¸öÁ¬½Ó¡°·ÏÆú¡±½ÚµãµÄ¸üÐÂÆ÷Ò²¿ÉÒÔ¸üÐÂÁîÅÆ¡£Ò»¿ªÊ¼ÎÒÃDz¢²»È·¶¨ÕâÑù×öÓÐÒâÒ壬ÕâÑù²»»áµ¼ÖÂÈßÓà¸üÐÂÂð?

Õâ¸öÎÊÌâÎÒÃÇÐèÒªÔÚʵʩϵͳµÄ¹ý³ÌÖиãÇå³þ¡£ÎÒÃǵĵÚÒ»¸öÏë·¨ÊDz»¸üУºÎÒÃÇÓÐÒ»ÖÂÐÔ¡¢ÓÐquorum£¬¶ªÊ§ÈκÎÒ»¸ö³ÉÔ±£¬ÎÒÃǶ¼²»Ó¦¸Ã¸üС£µ«ÊǺóÀ´ÎÒÃÇÓÐÁËÁíÒ»¸öÏë·¨£¬ÎÒÃÇ¿´Ò»ÏÂTarantoolÖеÄÖ÷Ö÷±¸·Ý£¬¼ÙÉèÓÐÁ½¸öÖ÷½ÚµãºÍÒ»¸ö±äÁ¿(key)X=1£¬ÎÒÃÇͬʱÔÚÿһ¸ö½ÚµãÉϸøÕâ¸ö±äÁ¿¸³Ò»¸öÐÂÖµ£¬Ò»¸ö¸³ÖµÎª2£¬ÁíÒ»¸ö¸³ÖµÎª3£¬È»ºó£¬Á½¸ö½Úµã»¥Ïཻ»»±¸·ÝÈÕÖ¾(¾ÍÊÇX±äÁ¿µÄÖµ)¡£ÔÚÒ»ÖÂÐÔÉÏ£¬ÕâÑùʵʩÖ÷Ö÷±¸·ÝÊǺÜÔã¸âµÄ(ÎÞÒâð·¸Tarantool¿ª·¢Õß)¡£

Èç¹ûÎÒÃÇÐèÒªÑϸñµÄÒ»ÖÂÐÔ£¬ÕâÑùÊÇÐв»Í¨µÄ¡£È»¶ø£¬»ØÒäÒ»ÏÂÎÒÃǵÄOAuthÁîÅÆÊÇÓÉÒÔÏÂÁ½¸öÖØÒªÒòËØ×é³É£º

¸üÐÂÁîÅÆ£¬±¾ÖÊÉÏÓÀ¾ÃÓÐЧ;

·ÃÎÊÁîÅÆ£¬ÓÐЧÆÚΪһ¸öСʱ;

ÎÒÃǵĸüÐÂÆ÷ÓÐÒ»¸örefreshº¯Êý£¬¿ÉÒÔ´ÓÒ»¸ö¸üÐÂÁîÅÆ»ñÈ¡ÈÎÒâÊýÁ¿µÄ·ÃÎÊÁîÅÆ£¬Ò»µ©·¢²¼£¬ËüÃǶ¼½«±£³ÖÒ»¸öСʱÄÚÓÐЧ¡£

ÎÒÃÇ¿¼ÂÇÒ»ÏÂÒÔϳ¡¾°£ºÁ½¸öfollower½ÚµãÕýÔÚºÍÒ»¸öleader½Úµã½»»¥£¬ËüÃǸüÐÂ×Ô¼ºµÄÁîÅÆ£¬½ÓÊÕµÚÒ»¸ö·ÃÎÊÁîÅÆ£¬Õâ¸ö·ÃÎÊÁîÅÆ±»¸´ÖÆ£¬ÓÚÊÇÏÖÔÚÿһ¸ö½Úµã¶¼ÓÐÕâ¸ö·ÃÎÊÁîÅÆ£¬È»ºó£¬Á¬½ÓÖжÏÁË£¬ËùÒÔ£¬ÆäÖÐÒ»¸öfollower½Úµã±ä³ÉÁË¡°·ÏÆú¡±½Úµã£¬ËüûÓÐquorum£¬¼È¿´²»µ½leaderÒ²¿´²»µ½ÆäËûfollower£¬È»¶ø£¬ÎÒÃÇÔÊÐíÎÒÃǵĸüÐÂÆ÷È¥¸üÐÂλÓÚ¡°·ÏÆú¡±½ÚµãÉϵÄÁîÅÆ£¬Èç¹û¡°·ÏÆú¡±½ÚµãûÓÐÁ¬½ÓÍøÂ磬ÄÇôÕû¸ö·½°¸¶¼½«Í£Ö¹ÔËÐС£¾¡¹ÜÈç´Ë£¬Èç¹û·¢Éú¼òµ¥µÄÍøÂç²ð·Ö£¬¸üÐÂÆ÷»¹ÊÇ¿ÉÒÔά³ÖÕý³£ÔËÐС£

Ò»µ©ÍøÂç²ð·Ö½áÊø£¬¡°·ÏÆú¡±½ÚµãÖØÐ¼ÓÈ뼯Ⱥ£¬¾Í»áÒý·¢ÁíÒ»³¡Ñ¡¾Ù»òÕßÊý¾Ý½»»»¡£×¢Ò⣬µÚ¶þºÍµÚÈý¸öÁîÅÆÒ»Ñù£¬Ò²ÊÇ¡°ºÃµÄ¡±¡£

ԭʼµÄ¼¯Èº³ÉÔ±»Ö¸´Ö®ºó£¬ÏÂÒ»´Î¸üн«Ö»ÔÚÒ»¸ö½ÚµãÉÏ·¢Éú£¬È»ºó±¸·Ý¡£»»¾ä»°À´Ëµ£¬µ±¼¯Èº²ð·ÖÖ®ºó£¬±»²ð·ÖµÄ¸÷¸ö²¿·Ö¸÷×Ô¶ÀÁ¢¸üУ¬µ«ÊÇÒ»µ©ÖØÐÂÕûºÏ£¬Êý¾ÝÒ»ÖÂÐÔÒ²Òò´Ë»Ö¸´¡£Í¨³££¬ÐèÒªN/2+1¸ö»î¶¯½Úµã(¶ÔÓÚÒ»¸ö3½Úµã¼¯Èº£¬¾ÍÊÇÐèÒª2¸ö»î¶¯½Úµã)È¥±£³Ö¼¯ÈºÕý³£ÔËת¡£¾¡¹ÜÈç´Ë£¬¶ÔÎÒÃǶøÑÔ£¬¼´Ê¹Ö»ÓÐ1¸ö»î¶¯½ÚµãÒ²×ã¹»ÁË£¬Ëü»á·¢Ë;¡¿ÉÄܶàµÄÍⲿÇëÇó¡£

ÖØÉêһϣ¬ÎÒÃÇÒѾ­ÌÖÂÛÁËÇëÇóÊýÁ¿Öð½¥Ôö¼ÓµÄÇé¿ö£¬ÔÚÍøÂç²ð·Ö»ò½ÚµãÖжÏʱÆÚ£¬ÎÒÃÇÄܹ»Ìṩһ¸öµ¥Ò»µÄ»î¶¯½Úµã£¬ÎÒÃÇ»áÏñƽʱһÑù¸üÐÂÕâ¸ö½Úµã£¬Èç¹û³öÏÖ¾ø¶Ô²ð·Ö(¼´µ±Ò»¸ö¼¯Èº±»·Ö³É×î´óÊýÁ¿µÄ½Úµã£¬Ã¿Ò»¸ö½ÚµãÓÐÒ»¸öÍøÂçÁ¬½Ó)£¬ÈçÉÏËùÊö£¬OAuth·þÎñÌṩÉ̵ÄÇëÇóÊýÁ¿½«ÌáÉýÖÁÈý±¶¡£µ«ÊÇ£¬ÓÉÓÚÕâ¸öʼþ·¢ÉúµÄʱ¼äÏà¶Ô¶ÌÔÝ£¬ËùÒÔÇé¿ö²»ÊÇÌ«Ô㣬ÎÒÃǿɲ»Ï£ÍûÒ»Ö±¹¤×÷ÔÚ²ð·Öģʽ¡£Í¨³£Çé¿öÏ£¬ÏµÍ³´¦ÓÚÓÐquorumºÍÍøÂçÁ¬½Ó£¬²¢ÇÒËùÓнڵ㶼Æô¶¯ÔËÐеÄ״̬¡£

·ÖƬ

»¹ÓÐÒ»¸öÎÊÌâûÓнâ¾ö£ºÎÒÃÇÒѾ­´ïµ½ÁËCPUÉÏÏÞ£¬×îÖ±½ÓµÄ½â¾ö°ì·¨¾ÍÊÇ·ÖÆ¬¡£

¼ÙÉèÎÒÃÇÓÐÁ½¸öÊý¾Ý¿â·ÖƬ£¬Ã¿Ò»¸ö¶¼Óб¸·Ý£¬ÓÐÒ»¸öÕâÑùµÄº¯Êý£¬¸ø¶¨Ò»Ð©keyÖµ£¬¾Í¿ÉÒÔ¼ÆËã³öÄÄÒ»¸ö·ÖƬÉÏÓÐËùÐèÒªµÄÊý¾Ý¡£Èç¹ûÎÒÃÇͨ¹ýµç×ÓÓʼþ·ÖƬ£¬Ò»²¿·ÖµØÖ·´æ´¢ÔÚÒ»¸ö·ÖƬÉÏ£¬ÁíÒ»²¿·ÖµØÖ·´æ´¢ÔÚÁíÒ»¸ö·ÖƬÉÏ£¬ÎÒÃǺÜÇå³þÎÒÃǵÄÊý¾ÝÔÚÄÄÀï¡£

ÓÐÁ½ÖÖ·½·¨¿ÉÒÔ·ÖÆ¬¡£Ò»ÖÖÊǿͻ§¶Ë·ÖƬ£¬ÎÒÃÇÑ¡ÔñÒ»¸ö·µ»Ø·ÖƬÊýÁ¿µÄÁ¬ÐøµÄ·ÖƬº¯Êý£¬±ÈÈçCRC32¡¢Guava»òSumbur£¬Õâ¸öº¯ÊýÔÚËùÓпͻ§¶ËµÄʵÏÖ·½Ê½¶¼Ò»Ñù¡£ÕâÖÖ·½·¨µÄÒ»¸öÃ÷ÏÔÓÅÊÆÔÚÓÚÊý¾Ý¿â¶Ô·ÖƬһÎÞËùÖª£¬ÄãµÄÊý¾Ý¿âÕý³£ÔËת£¬È»ºó·ÖƬ¾Í·¢ÉúÁË¡£

È»¶ø£¬ÕâÖÖ·½·¨Ò²´æÔÚÒ»¸öºÜÑÏÖØµÄȱÏÝ¡£Ò»¿ªÊ¼£¬¿Í»§¶Ë·Ç³£·±Ã¦¡£Èç¹ûÄãÏëÒªÒ»¸öÐ嵀ᅮ¬£¬ÄãÐèÒª°Ñ·ÖƬÂß¼­¼Ó½ø¿Í»§¶Ë£¬ÕâÀïµÄ×î´óµÄÎÊÌâÊÇ£¬¿ÉÄÜһЩ¿Í»§¶ËÔÚʹÓÃÕâÖÖģʽ£¬¶øÁíһЩ¿Í»§¶ËÈ´ÔÚʹÓÃÁíÒ»ÖÖÍêÈ«²»Í¬µÄģʽ£¬¶øÊý¾Ý¿â±¾ÉíÈ´²»ÖªµÀÓÐÁ½ÖÖ²»Í¬µÄ·ÖƬģʽ¡£

ÎÒÃÇÑ¡ÔñÁíÒ»ÖÖ·½·¨¡ªÊý¾Ý¿âÄÚ²¿·ÖƬ£¬ÕâÖÖÇé¿öÏ£¬Êý¾Ý¿â´úÂë±äµÃ¸ü¼Ó¸´ÔÓ£¬µ«ÊÇΪÁËÕÛÖÐÎÒÃÇ¿ÉÒÔʹÓüòµ¥µÄ¿Í»§¶Ë£¬Ã¿Ò»¸öÁ¬½ÓÊý¾Ý¿âµÄ¿Í»§¶Ë±»Â·Óɵ½ÈÎÒâ½Úµã£¬ÓÉÒ»¸öÌØÊ⺯Êý¼ÆËã³öÄÄÒ»¸ö½ÚµãÓ¦¸Ã±»Á¬½Ó¡¢ÄÄÒ»¸ö½ÚµãÓ¦¸Ã±»¿ØÖÆ¡£Ç°ÃæÌáµ½£¬ÓÉÓÚÊý¾Ý¿â±äµÃ¸ü¼Ó¸´ÔÓ£¬Òò´ËΪÁËÕÛÖУ¬¿Í»§¶Ë¾Í±äµÃ¸ü¼Ó¼òµ¥ÁË£¬µ«ÊÇÕâÑùµÄ»°£¬Êý¾Ý¿â¾ÍÒª¶ÔÆäÊý¾ÝȫȨ¸ºÔð¡£´ËÍ⣬×îÀ§ÄѵÄʾÍÊÇÖØÐÂ·ÖÆ¬£¬Èç¹ûÄãÓÐÒ»´ó¶Ñ¿Í»§¶ËÎÞ·¨¸üУ¬Ïà±È֮ϣ¬Èç¹ûÊý¾Ý¿â¸ºÔð¹ÜÀí×Ô¼ºµÄÊý¾Ý£¬ÄÇÖØÐÂ·ÖÆ¬¾Í»á±äµÃ·Ç³£¼òµ¥¡£

¾ßÌåÔõÑùÊµÊ©ÄØ?

Áù±ßÐδú±íTarantoolʵÌ壬ÓÐ3¸ö½Úµã×é³É·ÖƬ1£¬ÁíÒ»¸ö3½Úµã¼¯Èº×÷Ϊ·ÖƬ2£¬Èç¹ûÎÒÃǽ«ËùÓнڵ㻥ÏàÁ¬½Ó£¬½á¹û»áÔõÑùÄØ?¸ù¾ÝRaft£¬ÎÒÃÇ¿ÉÒÔÖªµÀÿһ¸ö¼¯ÈºµÄ״̬£¬Ë­ÊÇleader·þÎñÆ÷Ë­ÊÇfollower·þÎñÆ÷ҲһĿÁËÈ»£¬ÓÉÓÚÊǼ¯ÈºÄÚÁ¬½Ó£¬ÎÒÃÇ»¹¿ÉÒÔÖªµÀÆäËû·ÖƬ(ÀýÈçËüµÄleader·ÖƬ»òÕßfollower·ÖƬ)µÄ״̬¡£×ܵÄÀ´Ëµ£¬Èç¹û·ÃÎʵÚÒ»¸ö·ÖƬµÄÓû§·¢ÏÖÕâ²¢²»ÊÇËûÐèÒªµÄ·ÖƬ£¬ÎÒÃǺÜÇå³þµØÖªµÀÓ¦¸ÃÖ¸µ¼ËûÍùÄÄÀï×ß¡£

ÎÒÃÇÀ´¿´Ò»Ð©¼òµ¥µÄÀý×Ó¡£

¼ÙÉèÓû§ÏòפÁôÔÚµÚÒ»¸ö·ÖƬÉϵÄkey·¢³öÇëÇ󣬸ÃÇëÇó±»µÚÒ»¸ö·ÖƬÉϵÄijһ¸ö½Úµã½ÓÊÕ£¬Õâ¸ö½ÚµãÖªµÀË­ÊÇleader£¬ÓÚÊǽ«ÇëÇóÖØÐ·Óɵ½·ÖƬleader£¬·´¹ýÀ´£¬·ÖƬleader¶ÔÕâ¸ökey½øÐжÁ»òд£¬²¢ÇÒ½«½á¹û·´À¡¸øÓû§¡£

µÚ¶þ¸ö³¡¾°£ºÓû§µÄÇëÇóµ½´ïµÚÒ»¸ö·ÖƬÖеÄÏàͬ½Úµã£¬µ«ÊDZ»ÇëÇóµÄkeyÈ´ÔÚµÚ¶þ¸ö·ÖƬÉÏ£¬ÕâÖÖÇé¿öÒ²¿ÉÒÔÓÃÀàËÆµÄ·½·¨´¦Àí£¬µÚÒ»¸ö·ÖƬ֪µÀµÚ¶þ¸ö·ÖƬÉÏË­ÊÇleader£¬È»ºó°ÑÇëÇóË͵½µÚ¶þ¸ö·ÖƬµÄleader½øÐÐת·¢ºÍ´¦Àí£¬ÔÙ½«½á¹û·µ»Ø¸øÓû§¡£

Õâ¸ö·½°¸Ê®·Ö¼òµ¥£¬µ«Ò²´æÔÚÒ»¶¨µÄȱÏÝ£¬ÆäÖÐ×î´óµÄÎÊÌâ¾ÍÊÇÁ¬½ÓÊý£¬ÔÚ¶þ·ÖƬµÄÀý×ÓÖУ¬Ã¿Ò»¸ö½ÚµãÁ¬½Óµ½ÆäËûʣϵĽڵ㣬Á¬½ÓÊýÊÇ6*5=30£¬Èç¹ûÔÙ¼ÓÒ»¸ö3½Úµã·ÖƬ£¬ÄÇôÁ¬½ÓÊý¾ÍÔö¼Óµ½72£¬Õâ»á²»»áÓеã¶àÄØ?

ÎÒÃǸÃÈçºÎ½â¾öÕâ¸öÎÊÌâÄØ?ÎÒÃÇÖ»ÐèÒªÔö¼ÓһЩTarantoolʵÀý£¬ÎÒÃǽÐËü´úÀí£¬¶ø²»½Ð·ÖƬ»òÊý¾Ý¿â£¬ÓôúÀíÈ¥½â¾öËùÓÐµÄ·ÖÆ¬ÎÊÌ⣺°üÀ¨¼ÆËãkeyÖµºÍ¶¨Î»·ÖƬÁìµ¼¡£ÁíÒ»·½Ã棬Raft¼¯Èº±£³Ö×Ô°üº¬£¬Ö»ÔÚ·ÖÆ¬ÄÚ²¿¹¤×÷¡£µ±Óû§·ÃÎÊ´úÀíʱ£¬´úÀí¼ÆËã³öËùÐèÒªµÄ·ÖƬ£¬Èç¹ûÐèÒªµÄÊÇleader£¬¾Í¶ÔÓû§×÷ÏàÓ¦µÄÖØ¶¨Ïò£¬Èç¹û²»ÊÇleader£¬¾Í½«Óû§Öض¨ÏòÖÁ·ÖƬÄÚµÄÈÎÒâ½Úµã¡£

Óɴ˲úÉúµÄ¸´ÔÓÐÔÊÇÏßÐԵģ¬È¡¾öÓÚ½ÚµãÊýÁ¿¡£ÏÖÔÚÒ»¹²3¸ö½Úµã£¬Ã¿¸ö½Úµã3¸ö·ÖƬ£¬Á¬½ÓÊýÉÙÁ˼¸±¶¡£

´úÀí·½°¸µÄÉè¼Æ¿¼Âǵ½Á˽øÒ»²½¹æÄ£À©Õ¹(µ±·ÖƬÊýÁ¿´óÓÚ2ʱ)£¬µ±Ö»ÓÐ2¸ö·ÖƬʱ£¬Á¬½ÓÊý²»±ä£¬µ«Êǵ±·ÖƬÊýÁ¿Ôö¼Óʱ£¬Á¬½ÓÊý»á¾ç¼õ¡£·ÖƬÁÐ±í´æ´¢ÔÚLuaÅäÖÃÎļþÖУ¬ËùÒÔ£¬Èç¹ûÏëÒª»ñÈ¡ÐÂÁÐ±í£¬ÎÒÃÇÖ»ÐèÒªÖØÔØ´úÂë¾ÍºÃÁË¡£

×ÛÉÏËùÊö£¬Ê×ÏÈ£¬ÎÒÃǽøÐÐÖ÷Ö÷±¸·Ý£¬Ó¦ÓÃRaftËã·¨£¬È»ºó¼ÓÈë·ÖƬºÍ´úÀí£¬×îºóÎÒÃǵõ½µÄÊÇÒ»¸öµ¥¿é£¬Ò»¸ö¼¯Èº£¬ËùÒÔ˵£¬Ä¿Ç°Õâ¸ö·½°¸¿´ÉÏÈ¥ÊDZȽϼòµ¥µÄ¡£

ʣϵľÍÊÇÖ»¶Á»òֻдÁîÅÆµÄµÄǰ¶ËÁË£¬ÎÒÃÇÓиüÐÂÆ÷¿ÉÒÔ¸üÐÂÁîÅÆ£¬»ñµÃ¸üÐÂÁîÅÆºó°ÑËü´«µ½OAuth·þÎñÌṩÉÌ£¬È»ºóдһ¸öеķÃÎÊÁîÅÆ¡£

Ç°ÃæËµ¹ýÎÒÃǵÄһЩ¸¨ÖúÂß¼­ºÄ¾¡ÁËCPU×ÊÔ´£¬ÏÖÔÚÎÒÃǽ«ÕâЩ¸¨Öú×ÊÔ´ÒÆµ½ÁíÒ»¸ö¼¯ÈºÉÏ¡£

¸¨ÖúÂß¼­Ö÷ÒªºÍµØÖ·²¾Óйأ¬¸ø¶¨Ò»¸öÓû§ÁîÅÆ£¬¾Í»áÓÐÒ»¸ö¶ÔÓ¦µÄµØÖ·²¾£¬µØÖ·²¾ÉϵÄÊý¾ÝÁ¿ºÍÁîÅÆÒ»Ñù£¬ÎªÁ˲»ºÄ¾¡Ò»Ì¨»úÆ÷ÉϵÄCPU×ÊÔ´£¬ÎÒÃÇÏÔÈ»ÐèÒªÒ»¸öÓ븱±¾ÏàͬµÄ¼¯Èº£¬Ö»ÐèÒª¼ÓÒ»¶Ñ¸üеØÖ·²¾µÄ¸üÐÂÆ÷¾Í¿ÉÒÔÁË(Õâ¸öÈÎÎñ±È½ÏÉÙ¼û£¬Òò´ËµØÖ·²¾²»»áºÍÁîÅÆÒ»Æð¸üÐÂ)¡£

×îºó£¬Í¨¹ýÕûºÏÕâÁ½¸ö¼¯Èº£¬ÎÒÃǵõ½Ò»¸öÏà¶Ô¼òµ¥µÄÍêÕû½á¹¹£º

ÁîÅÆ¸üжÓÁÐ

ΪʲôÎÒÃDZ¾¿ÉÒÔʹÓñê×¼¶ÓÁÐÈ´»¹ÒªÓÃ×Ô¼ºµÄ¶ÓÁÐÄØ?ÕâºÍÎÒÃǵÄÁîÅÆ¸üÐÂÄ£ÐÍÓйء£ÁîÅÆÒ»µ©·¢²¼£¬ÓÐЧÆÚ¾ÍÊÇÒ»¸öСʱ£¬µ±ÁîÅÆ¿ìÒªµ½ÆÚʱ£¬ÐèÒª½øÐиüУ¬¶øÁîÅÆ¸üбØÐëÔÚij¸öÌØ¶¨µÄʱ¼äµã֮ǰÍê³É¡£

¼ÙÉèϵͳÖжÏÁË£¬µ«ÊÇÎÒÃÇÓÐÒ»¶ÑÒѵ½ÆÚµÄÁîÅÆ£¬¶øÔÚÎÒÃǸüÐÂÕâЩÁîÅÆµÄͬʱ£¬ÓÖÓÐÆäËûÁîÅÆÂ½Ðøµ½ÆÚ£¬ËäÈ»ÎÒÃÇ×îºó¿Ï¶¨ÄÜÈ«²¿¸üÐÂÍ꣬µ«ÊÇÈç¹ûÎÒÃÇÏȸüÐÂÄÇЩ¼´½«µ½ÆÚµÄ(60ÃëÄÚ)£¬ÔÙÓÃʣϵÄ×ÊÔ´È¥¸üÐÂÒѾ­µ½ÆÚµÄ£¬ÊDz»ÊÇ»á¸üºÏÀíһЩ?(ÓÅÏȼ¶±ð×îµÍµÄÊÇ»¹ÓÐ4-5·ÖÖӲŵ½ÆÚµÄÁîÅÆ)

ÓõÚÈý·½Èí¼þÀ´ÊµÏÖÕâ¸öÂß¼­²¢²»ÊǼþÈÝÒ×µÄÊ£¬È»¶ø£¬¶ÔÓÚTarantoolÀ´ËµÈ´²»·Ñ´µ»ÒÖ®Á¦¡£¿´Ò»¸ö¼òµ¥µÄ·½°¸£ºÔÚTarantoolÖÐÓÐÒ»¸ö´æ´¢Êý¾ÝµÄÔª×飬Õâ¸öÔª×éµÄһЩIDÉèÖÃÁË»ù´¡keyÖµ£¬ÎªÁ˵õ½ÎÒÃÇÐèÒªµÄ¶ÓÁУ¬ÎÒÃÇÖ»ÐèÒªÌí¼ÓÁ½¸ö×ֶΣºstatus(¶ÓÁÐÁîÅÆ×´Ì¬)ºÍtime(µ½ÆÚʱ¼ä»òÆäËûÔ¤¶¨Òåʱ¼ä)¡£

 

ÏÖÔÚÎÒÃÇ¿¼ÂÇһ϶ÓÁеÄÁ½¸öÖ÷Òª¹¦ÄÜ¡ªputºÍtake¡£put¾ÍÊÇдÈëÐÂÊý¾Ý¡£¸ø¶¨Ò»Ð©¸ºÔØ£¬putʱ×Ô¼ºÉèÖúÃstatusºÍtime£¬È»ºóдÊý¾Ý£¬Õâ¾ÍÊǽ¨Á¢Ò»¸öеÄÔª×é¡£

ÖÁÓÚtake£¬ÊÇÖ¸½¨Á¢Ò»¸ö»ùÓÚË÷ÒýµÄµü´úÆ÷£¬Ìô³öÄÇЩµÈ´ý½â¾öµÄÈÎÎñ(´¦ÓÚ¾ÍÐ÷״̬µÄÈÎÎñ)£¬È»ºóºË²éÒ»ÏÂÊDz»ÊǸýÓÊÕÕâЩÈÎÎñÁË£¬»òÕßÕâЩÈÎÎñÊÇ·ñÒѾ­µ½ÆÚÁË¡£Èç¹ûûÓÐÈÎÎñ£¬take¾ÍÇл»µ½waitģʽ¡£³ýÁËÄÚÖÃLua£¬Tarantool»¹ÓÐһЩËùνµÄͨµÀ£¬ÕâЩͨµÀ±¾ÖÊÉÏÊÇ»¥Áª¹âÏËͬ²½Ô­Óï¡£ÈκιâÏ˶¼¿ÉÒÔ½¨Á¢Ò»¸öͨµÀÈ»ºó˵¡°ÎÒÔÚÕâµÈ×Å¡±£¬Ê£ÏÂµÄÆäËû¹âÏË¿ÉÒÔ»½ÐÑÕâ¸öͨµÀÈ»ºó¸øËü·¢ËÍÐÅÏ¢¡£

µÈ´ýÖеĺ¯Êý(µÈ´ý·¢²¼ÈÎÎñ¡¢µÈ´ýÖ¸¶¨Ê±¼ä»òÆäËû)½¨Á¢Ò»¸öͨµÀ£¬¸øÍ¨µÀÌùÉÏÊʵ±µÄ±êÇ©£¬½«Í¨µÀ·ÅÖÃÔÚij¸öµØ·½£¬È»ºó½øÐмàÌý¡£Èç¹ûÎÒÃÇÊÕµ½Ò»¸ö½ô¼±µÄ¸üÐÂÁîÅÆ£¬put»á¸øÍ¨µÀ·¢³ö֪ͨ£¬È»ºótake½ÓÊÕ¸üÐÂÈÎÎñ¡£

TarantoolÓÐÒ»¸öÌØÊâµÄ¹¦ÄÜ£ºÈç¹ûÒ»¸öÁîÅÆ±»ÒâÍâ·¢²¼£¬»òÕßÒ»¸ö¸üÐÂÁîÅÆ±»take½ÓÊÕ£¬»òÕßÖ»ÊdzöÏÖ½ÓÊÕÈÎÎñµÄÏÖÏó£¬ÒÔÉÏÈýÖÖÇé¿öTarantool¶¼¿ÉÒÔ¸ú×Ùµ½¿Í»§¶ËÖжϡ£ÎÒÃǽ«Ã¿Ò»¸öÁ¬½ÓÓëÖ¸¶¨¸ø¸ÃÁ¬½ÓµÄÈÎÎñÁªÏµÆðÀ´£¬²¢½«ÕâЩӳÉä¹ØÏµ±£³ÖÔڻỰ±£´æÖС£¼ÙÉèÓÉÓÚÍøÂçÖжϵ¼Ö¸üйý³Ìʧ°Ü£¬¶øÇÒÎÒÃDz»ÖªµÀÕâ¸öÁîÅÆÊÇ·ñ»á±»¸üв¢±»Ð´»Øµ½Êý¾Ý¿â¡£ÓÚÊÇ£¬¿Í»§¶Ë·¢ÉúÖжÏÁË£¬ËÑË÷Óëʧ°Ü¹ý³ÌÏà¹ØµÄËùÓÐÈÎÎñµÄ»á»°±£´æ£¬È»ºó×Ô¶¯½«ËüÃÇÊÍ·Å¡£Ëæºó£¬ÈÎÒâÒÑ·¢²¼µÄÈÎÎñ¶¼¿ÉÒÔÓÃͬһ¸öͨµÀ¸øÁíÒ»¸öput·¢ËÍÐÅÏ¢£¬¸Ãput»á¿ìËÙ½ÓÊÕºÍÖ´ÐÐÈÎÎñ¡£

ʵ¼ÊÉÏ£¬¾ßÌåʵʩ·½°¸²¢²»ÐèҪ̫¶à´úÂ룺

function put(data)

¡¡¡¡local t = box.space.queue:auto_increment({

¡¡¡¡¡®r¡¯, -- [[ status ]]

¡¡¡¡util.time(), -- [[ time ]]

¡¡¡¡data -- [[ any payload ]]

¡¡¡¡})

¡¡¡¡return t

¡¡¡¡end

¡¡¡¡function take(timeout)

¡¡¡¡local start_time = util.time()

¡¡¡¡local q_ind = box.space.tokens.index.queue

¡¡¡¡local _,t

¡¡¡¡while true do

¡¡¡¡local it = util.iter(q_ind, {¡®r¡¯}, {iterator = box.index.GE})

¡¡¡¡_,t = it()

¡¡¡¡if t and t[F.tokens.status] ~= ¡®t¡¯ then

¡¡¡¡break

¡¡¡¡end

¡¡¡¡local left = (start_time + timeout) ¡ª util.time()

¡¡¡¡if left <= 0 then return end

¡¡¡¡t = q:wait(left)

¡¡¡¡if t then break end

¡¡¡¡end

¡¡¡¡t = q:taken(t)

¡¡¡¡return t

¡¡¡¡end

¡¡¡¡function queue:taken(task)

¡¡¡¡local sid = box.session.id()

¡¡¡¡if self._consumers[sid] == nil then

¡¡¡¡self._consumers[sid] = {}

¡¡¡¡end

¡¡¡¡local k = task[self.f_id]

¡¡¡¡local t = self:set_status(k, ¡®t¡¯)

¡¡¡¡self._consumers[sid][k] = {util.time(), box.session.peer(sid), t}

¡¡¡¡self._taken[k] = sid

¡¡¡¡return t

¡¡¡¡end

¡¡¡¡function on_disconnect()

¡¡¡¡local sid = box.session.id

¡¡¡¡local now = util.time()

¡¡¡¡if self._consumers[sid] then

¡¡¡¡local consumers = self._consumers[sid]

¡¡¡¡for k, rec in pairs(consumers) do

¡¡¡¡time, peer, task = unpack(rec)

¡¡¡¡local v = box.space[self.space].index[self.index_primary]:get({k})

¡¡¡¡if v and v[self.f_status] == ¡®t¡¯ then

¡¡¡¡v = self:release(v[self.f_id])

¡¡¡¡end

¡¡¡¡end

¡¡¡¡self._consumers[sid] = nil

¡¡¡¡end

¡¡¡¡end

PutÖ»ÊǽÓÊÕÓû§ÏëÒª²åÈë¶ÓÁеÄËùÓÐÊý¾Ý£¬²¢½«ÆäдÈëij¸ö¿Õ¼ä£¬Èç¹ûÊÇÒ»¸ö¼òµ¥µÄË÷ÒýʽFIFO¶ÓÁУ¬ÉèÖúÃ״̬ºÍµ±Ç°Ê±¼ä£¬È»ºó·µ»Ø¸ÃÈÎÎñ¡£

½ÓÏÂÀ´ÒªºÍtakeÓÐµã¹ØÏµÁË£¬µ«ÈÔÈ»±È½Ï¼òµ¥¡£ÎÒÃǽ¨Á¢Ò»¸öµü´úÆ÷£¬µÈ´ý½ÓÊÕÐÂÈÎÎñ¡£Takenº¯ÊýÖ»ÐèÒª½«ÈÎÎñ±ê¼Ç³É¡°ÒѽÓÊÕ¡±£¬µ«ÓÐÒ»µãºÜÖØÒª£¬takenº¯Êý»¹ÄܼÇסÄĸöÈÎÎñÊÇÓÉÄĸö½ø³Ì½ÓÊյġ£On_disconnectº¯Êý¿ÉÒÔ·¢²¼Ä³¸öÌØ¶¨Á¬½Ó£¬»òÕß·¢²¼ÓÉij¸öÌØ¶¨Óû§½ÓÊÕµÄËùÓÐÈÎÎñ¡£

ÊÇ·ñÓпÉÑ¡·½°¸ ?

µ±È»ÓС£ÎÒÃDZ¾¿ÉÒÔʹÓÃÈÎÒâÊý¾Ý¿â£¬µ«ÊÇ£¬²»¹ÜÎÒÃÇÑ¡ÓÃʲôÊý¾Ý¿â£¬ÎÒÃǶ¼Òª½¨Á¢Ò»¸ö¶ÓÁÐÓÃÀ´´¦ÀíÍⲿϵͳ¡¢´¦Àí¸üеȵÈÎÊÌâ¡£ÎÒÃDz»Äܽö½ö°´Ðè¸üÐÂÁîÅÆ£¬ÒòΪÄÇÑù»á²úÉú²»¿ÉÔ¤¹ÀµÄ¹¤×÷Á¿£¬²»¹ÜÔõÑù£¬ÎÒÃÇÐèÒª±£³ÖÎÒÃǵÄϵͳ³äÂú»îÁ¦£¬µ«ÊÇÄÇÑù£¬ÎÒÃǾÍÒª½«ÑÓÆÚµÄÈÎÎñÒ²²åÈë¶ÓÁУ¬²¢ÇÒ±£Ö¤Êý¾Ý¿âºÍ¶ÓÁÐÖ®¼äµÄÒ»ÖÂÐÔ£¬ÎÒÃÇ»¹Òª±»ÆÈʹÓÃÒ»¸öquorumµÄÈÝ´í¶ÓÁС£´ËÍ⣬Èç¹ûÎÒÃǰÑÊý¾Ýͬʱ·ÅÔÚRAMºÍÒ»¸ö(¿¼Âǵ½¹¤×÷Á¿)¿ÉÄÜÒª·ÅÈëÄÚ´æµÄ¶ÓÁÐÖУ¬ÄÇôÎÒÃǾÍÒªÏûºÄ¸ü¶à×ÊÔ´¡£

ÔÚÎÒÃǵķ½°¸ÖУ¬Êý¾Ý¿â´æ´¢ÁîÅÆ£¬¶ÓÁÐÂß¼­Ö»ÐèÒªÕ¼ÓÃ7¸ö×Ö½Ú(ÿ¸öÔª×éÖ»ÐèÒª7¸ö¶îÍâµÄ×Ö½Ú£¬¾Í¿ÉÒԸ㶨¶ÓÁÐÂß¼­!)£¬Èç¹ûʹÓÃÆäËûµÄ¶ÓÁÐÐÎʽ£¬ÐèÒªÕ¼ÓõĿռä¾Í¶àµÃ¶àÁË£¬´ó¸ÅÊÇÄÚ´æÈÝÁ¿µÄÁ½±¶¡£

×ܽá

Ê×ÏÈ£¬ÎÒÃǽâ¾öÁËÁ¬½ÓÖжϵÄÎÊÌ⣬Õâ¸öÎÊÌâÊ®·Ö³£¼û£¬Ê¹ÓÃÉÏÊöµÄϵͳÈÃÎÒÃǰÚÍÑÁËÕâ¸öÀ§ÈÅ¡£

·ÖƬ°ïÖúÎÒÃÇÀ©Õ¹Äڴ棬Ȼºó£¬ÎÒÃǽ«Á¬½ÓÊý´Ó¶þ´Î·½¼õÉÙµ½ÁËÏßÐÔ£¬ÓÅ»¯ÁËÒµÎñÈÎÎñµÄ¶ÓÁÐÂß¼­£ºÈç¹û·¢ÉúÑÓÆÚ£¬¸üÐÂÎÒÃÇËùÄܸüеÄÒ»ÇÐÁîÅÆ£¬ÕâЩÑÓÆÚ²¢·Ç¶¼ÊÇÎÒÃǵĹÊÕÏÒýÆðµÄ£¬ÓпÉÄÜÊÇGoogle¡¢Microsoft»òÕ߯äËû·þÎñ¶Ë¶ÔOAuth·þÎñÌṩÉ̽øÐиÄÔ죬Ȼºóµ¼ÖÂÎÒÃÇÕâ±ß³öÏÖ´óÁ¿µÄδ¸üеÄÁîÅÆ¡£

È¥Êý¾Ý¿âÄÚ²¿ÔËËã°É£¬×ß½üÊý¾Ý£¬Ä㽫ӵÓбãÀû¡¢¸ßЧ¡¢¿ÉÀ©Õ¹ºÍÁé»îµÄÔËËãÌåÑé!

   
1804 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

»ùÓÚEAµÄÊý¾Ý¿â½¨Ä£
Êý¾ÝÁ÷½¨Ä££¨EAÖ¸ÄÏ£©
¡°Êý¾Ýºþ¡±£º¸ÅÄî¡¢ÌØÕ÷¡¢¼Ü¹¹Óë°¸Àý
ÔÚÏßÉ̳ÇÊý¾Ý¿âϵͳÉè¼Æ ˼·+Ч¹û
 
Ïà¹ØÎĵµ

GreenplumÊý¾Ý¿â»ù´¡Åàѵ
MySQL5.1ÐÔÄÜÓÅ»¯·½°¸
ijµçÉÌÊý¾ÝÖÐ̨¼Ü¹¹Êµ¼ù
MySQL¸ßÀ©Õ¹¼Ü¹¹Éè¼Æ
Ïà¹Ø¿Î³Ì

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ