Ò»¡¢ÏµÍ³¼Ü¹¹Éè¼ÆÀíÂÛÓëÔÔò
ÕâÀïÖ÷Òª½éÉܼ¸ÖÖ³£¼ûµÄ¼Ü¹¹Éè¼ÆÀíÂÛºÍÔÔò£¬³£¼ûÓÚ´óÖÐÐÍ»¥ÁªÏµÍ³¼Ü¹¹Éè¼Æ¡£
£¨Ò»£©¡¢CAPÀíÂÛ
1¡¢Ê²Ã´ÊÇCAP
ÖøÃûµÄCAPÀíÂÛÊÇÓÉBrewerÌá³öµÄ£¬ËùνCAP£¬¼´Ò»ÖÂÐÔ£¨Consistency£©¡¢¿ÉÓÃÐÔ£¨Availability£©ºÍ·ÖÇøÈÝ´íÐÔ£¨Partition
Tolerance£©¡£
£¨1£©¡¢Consistency£¨Ò»ÖÂÐÔ£©£º¸üвÙ×÷³É¹¦²¢·µ»Ø¿Í»§¶ËÍê³Éºó,·Ö²¼Ê½µÄËùÓнڵãÔÚͬһʱ¼äµÄÊý¾ÝÍêȫһÖ£¨All
nodes see the same data at the same time£©¡£
ÕâÀïµÄÒ»ÖÂÐÔ£¬Ò»¶¨ÒªºÍ´«Í³µÄRDBMSÖеÄÊÂÎñÒ»ÖÂÐÔÇø·Ö¿ª¡£
ÔÚ´«Í³µÄRDBMSÖУ¬ÊÂÎñ¾ßÓÐACID4¸öÊôÐÔ£¬¼´Ô×ÓÐÔ£¨Atomicity£©£¬Ò»ÖÂÐÔ£¨Consistency£©£¬¸ôÀëÐÔ£¨Isolation£©ºÍ³Ö¾ÃÐÔ£¨Durable£©¡£
ACIDÊǹØÏµÐÍÊý¾Ý¿âµÄ×î»ù±¾ÔÔò£¬×ñÑACIDÔÔòÇ¿µ÷Ò»ÖÂÐÔ£¬¶Ô³É±¾ÒªÇóºÜ¸ß£¬¶ÔÐÔÄÜÓ°ÏìºÜ´ó¡£
a¡¢Ô×ÓÐÔ£¨Atomicity£©£ºÊÂÎñÊÇÒ»¸öÔ×Ó²Ù×÷µ¥Ôª£¬Æä¶ÔÊý¾ÝµÄÐ޸ģ¬ÒªÃ´È«¶¼Ö´ÐУ¬ÒªÃ´È«¶¼²»Ö´ÐС£
b¡¢Ò»ÖÂÐÔ£¨Consistency£©£ºÔÚÊÂÎñ¿ªÊ¼ºÍÍê³Éʱ£¬Êý¾Ý¶¼±ØÐë±£³ÖÒ»ÖÂ״̬¡£ÕâÒâζ×ÅËùÓÐÏà¹ØµÄÊý¾Ý¹æÔò¶¼±ØÐëÓ¦ÓÃÓÚÊÂÎñµÄÐ޸ģ¬ÒÔ±£³ÖÊý¾ÝµÄÍêÕûÐÔ£»ÊÂÎñ½áÊøÊ±£¬ËùÓеÄÄÚ²¿Êý¾Ý½á¹¹£¨ÈçBÊ÷Ë÷Òý»òË«ÏòÁ´±í£©Ò²¶¼±ØÐëÊÇÕýÈ·µÄ¡£
c¡¢¸ôÀëÐÔ£¨Isolation£©£ºÊý¾Ý¿âϵͳÌṩһ¶¨µÄ¸ôÀë»úÖÆ£¬±£Ö¤ÊÂÎñÔÚ²»ÊÜÍⲿ²¢·¢²Ù×÷Ó°ÏìµÄ¡°¶ÀÁ¢¡±»·¾³Ö´ÐС£ÕâÒâζ×ÅÊÂÎñ´¦Àí¹ý³ÌÖеÄÖмä״̬¶ÔÍⲿÊDz»¿É¼ûµÄ£¬·´Ö®ÒàÈ»¡£
d¡¢³Ö¾ÃÐÔ£¨Durability£©£ºÊÂÎñÍê³ÉÖ®ºó£¬Ëü¶ÔÓÚÊý¾ÝµÄÐÞ¸ÄÊÇÓÀ¾ÃÐԵ쬼´Ê¹³öÏÖϵͳ¹ÊÕÏÒ²Äܹ»±£³Ö¡£
MITµÄGilbertºÍLynchÔÚÖ¤Ã÷CAPµÄ¹ý³ÌÖиıäÁËConsistencyµÄ¸ÅÄҲ¾ÍÊǽ«Consistencyת»¯ÎªAtomic¡£GilbertÈÏΪÕâÀïËù˵µÄConsistencyÆäʵ¾ÍÊÇÊý¾Ý¿âϵͳÖÐÌáµ½µÄACIDµÄÁíÒ»ÖÖ±íÊö£ºÒ»¸öÓû§ÇëÇóҪô³É¹¦¡¢ÒªÃ´Ê§°Ü£¬²»ÄÜ´¦ÓÚÖмä״̬£¨Atomic£©£»Ò»µ©Ò»¸öÊÂÎñÍê³É£¬½«À´µÄËùÓÐÊÂÎñ¶¼±ØÐë»ùÓÚÕâ¸öÍê³ÉºóµÄ״̬£¨Consistent£©£»Î´Íê³ÉµÄÊÂÎñ²»»á»¥ÏàÓ°Ï죨Isolated£©£»Ò»µ©Ò»¸öÊÂÎñÍê³É£¬¾ÍÊdz־õģ¨Durable£©¡£
£¨2£©¡¢Availability£¨¿ÉÓÃÐÔ£©£º¶ÁºÍд²Ù×÷¶¼Äܳɹ¦£¨Reads and writes always
succeed£©¡£
¿ÉÓÃÐÔÊÇ˵·þÎñÄÜÒ»Ö±±£Ö¤ÊÇ¿ÉÓõÄ״̬£¬µ±Óû§·¢³öÒ»¸öÇëÇ󣬷þÎñÄÜÔÚÓÐÏÞʱ¼äÄÚ·µ»Ø½á¹û£¬ËùÓеÄÇëÇó¶¼ÄÜ¡°³É¹¦¡±Äõ½¶ÔÓ¦µÄÏìÓ¦¡£
£¨3£©¡¢Partition Tolerance£¨·ÖÇøÈÝ´íÐÔ£©£ºÔÚ³öÏÖÍøÂç¹ÊÕϵ¼Ö·ֲ¼Ê½½Úµã¼ä²»ÄÜͨÐÅʱ£¬ÏµÍ³ÄÜ·ñ¼ÌÐø·þÎñ£¨The
system continues to operate despite arbitrary message
loss or failure of part of the system£©¡£
Ö±¹Û¸ÐÊܾÍÊÇϵͳÖнڵãcrash»òÕßÍøÂç·ÖƬ¶¼²»Ó¦¸Ãµ¼ÖÂÒ»¸ö·Ö²¼Ê½ÏµÍ³Í£Ö¹·þÎñ¡£
2¡¢ÈçºÎÖ¤Ã÷CAP£¿
CAPµÄÖ¤Ã÷ºÜ¼òµ¥£º
¼ÙÉèÁ½¸ö½Úµã¼¯{G1, G2}£¬ÓÉÓÚÍøÂç·ÖƬµ¼ÖÂG1ºÍG2Ö®¼äËùÓеÄͨѶ¶¼¶Ï¿ªÁË¡£
Èç¹ûÔÚG1ÖÐд£¬ÔÚG2ÖжÁ¸ÕдµÄÊý¾Ý£¬ G2Öзµ»ØµÄÖµ²»¿ÉÄÜÊǸոÕÔÚG1ÖеÄдֵ¡£
¶ÔÓÚ·Ö²¼Ê½Êý¾Ýϵͳ¶øÑÔ£¬·ÖÇøÈÝ´íÐÔ£¨Partition Tolerance£©ÊÇ»ù±¾ÒªÇ󣬷ñÔò¾Í²»³ÆÆäΪ·Ö²¼Ê½ÏµÍ³¡£
ÓÉÓÚ¿ÉÓÃÐÔ£¨Availability£©µÄÒªÇó£¬G2Ò»¶¨Òª·µ»ØÕâ´Î¶ÁÇëÇó£¬ÒòΪ·ÖÇøÈÝ´íÐÔ£¨Partition
Tolerance£©µÄ´æÔÚ£¬µ¼ÖÂÒ»ÖÂÐÔ£¨Consistency£©Ò»¶¨ÊDz»¿ÉÂú×ãµÄ¡£
CAPÀíÂÛ¸æËßÎÒÃÇ£¬Ò»¸ö·Ö²¼Ê½ÏµÍ³²»¿ÉÄÜͬʱÂú×ãÒ»ÖÂÐÔ£¬¿ÉÓÃÐԺͷÖÇøÈÝ´íÐÔÕâÈý¸öÐèÇó£¬Èý¸öÒªËØÖÐ×î¶àÖ»ÄÜͬʱÂú×ãÁ½µã¡£
ÏÔÈ»,ÈκκáÏòÀ©Õ¹²ßÂÔ¶¼ÒªÒÀÀµÓÚÊý¾Ý·ÖÇø£¬Èí¼þ¼Ü¹¹Í¨³£±ØÐëÔÚÒ»ÖÂÐÔ£¨Consistency£©Óë¿ÉÓÃÐÔ£¨Availability£©Ö®¼ä×ö³öÑ¡Ôñ¡£
3¡¢CAPµÄÑÓÉìBASE
BASEÊÇBasically Available¡¢Soft state¡¢Eventually consistentÈý¸ö´Ê×éµÄ¼òд£¬ÊǶÔCAPÖÐC
ºÍAµÄÑÓÉì¡£
£¨1£©Basically Available£º»ù±¾¿ÉÓ㬼´Êý¾ÝÒ»ÖÂÐÔÄܹ»»ù±¾Âú×ã¶þ°Ë¶¨ÂÉ£¬¼´ÖÁÉÙ±£Ö¤80%Ò»ÖÂÐÔ£¬Ê£ÏÂ20%¾Í²»Òª¹ýÓÚ¾À½á¡£
£¨2£©Soft-state£ºÈí״̬/ÈáÐÔÊÂÎñ£¬¼´×´Ì¬¿ÉÒÔÓÐÒ»¶Îʱ¼äµÄ²»Í¬²½¡£
ÔÚ²»¹ý·Ö×·ÇóÊý¾ÝÒ»ÖÂÐÔ£¨Ç¿Ò»ÖÂÐÔ£©Ç°ÌáÏ¿ɿ¼ÂÇÈí״̬²ßÂÔ£¬ÀýÈç°ÑÊý¾Ý£¨State£©»º´æÔÚ¿Í»§¶ËÒ»¶Îʱ¼ä£¬ÔÚÒ»¶Îʱ¼ä¹ýºó£¬Èç¹û¿Í»§¶ËûÓÐÔÙ´ÎË¢ÐÂ״̬µÄÇëÇóµÄ»°£¬¾ÍÇå³ý´Ë»º´æ£¨Soft£©£¬Õâ¸ö״̬¾Í»áÏûʧ¡£
£¨3£©Eventual consistency£º×îÖÕÒ»ÖÂÐÔ£¬¼´ÔÚijһ¶Î¶Ìʱ¼äÄÚÔÊÐíÊý¾Ý²»Ò»Ö£¬µ«¾¹ýÒ»¶Î½Ï³¤Ê±¼ä£¨ÕâÀïµÄÒ»¶Îʱ¼ä¶àÊýÊÇÒµÎñÄܹ»ÈÝÈ̵ÄÑÓ³Ù£©£¬µÈËùÓнڵãÉÏÊý¾ÝµÄ¿½±´¶¼ÕûºÏÔÚÒ»ÆðµÄʱºò£¬Êý¾Ý»á×îÖÕ´ïµ½ÍêȫһÖ¡£ÎÒÓÃ×Ô¼ºµÄ¾ÑéºÍÇ×Éíʵ¼ùÖ¤Ã÷£¬×îÖÕÒ»ÖÂÐԹᴩ×Å»¥ÁªÍøÓÈÆäÊǵç×ÓÉÌÎñÀàÐ͵ÄÖ÷ÒªÓ¦ÓõÄÉúÃüÖÜÆÚ¡£
BASEÀ´×ÔÓÚ»¥ÁªÍøµÄµç×ÓÉÌÎñÁìÓòµÄʵ¼ù£¬ËüÊÇ»ùÓÚCAPÀíÂÛÖð²½ÑÝ»¯¶øÀ´£¬ºËÐÄ˼ÏëÊǼ´±ã²»ÄܴﵽǿһÖÂÐÔ(Strong
Consistency)£¬µ«¿ÉÒÔ¸ù¾ÝÓ¦ÓÃÌØµã²ÉÓÃÊʵ±µÄ·½Ê½À´´ïµ½×îÖÕÒ»ÖÂÐÔ(Eventual consistency)µÄЧ¹û¡£BASEÊÇ·´ACIDµÄ£¬ËüÍêÈ«²»Í¬ÓÚACIDÄ£ÐÍ£¬ÎþÉüǿһÖÂÐÔ£¬»ñµÃ»ù±¾¿ÉÓÃÐÔºÍÈáÐÔ¿É¿¿ÐÔ²¢ÒªÇó´ïµ½×îÖÕÒ»ÖÂÐÔ¡£
CAP¡¢BASEÀíÂÛÊǵ±Ç°ÔÚ»¥ÁªÍøÁìÓò·Ç³£Á÷ÐеÄNoSQLµÄÀíÂÛ»ù´¡¡£
£¨¶þ£©¡¢ÎÞ¹²Ïí¼Ü¹¹
1¡¢Ê²Ã´ÊÇÎÞ¹²Ïí¼Ü¹¹
ÎÞ¹²Ïí¼Ü¹¹SNA£¨Shared Nothing Architecture£©£¬Î¬»ù°Ù¿ÆÖеÄ˵Ã÷ÊÇ£º
¡°A shared nothing architecture (SN) is a distributed
computing architecture in which each node is independent
and self-sufficient, and there is no single point of
contention across the system. More specifically, none
of the nodes share memory or disk storage. People typically
contrast SN with systems that keep a large amount of
centrally-stored state information, whether in a database,
an application server, or any other similar single point
of contention.¡±
×ܽáÆðÀ´Ëµ£¬ÎÞ¹²Ïí¼Ü¹¹ÊÇÒ»ÖÖ·Ö²¼Ê½¼ÆËã¼Ü¹¹£¬ÕâÖּܹ¹Öв»´æÔÚ¼¯Öд洢µÄ״̬£¬ÏµÍ³ÖÐÿ¸ö½Úµã¶¼ÊǶÀÁ¢×ÔÖεģ¬Õû¸öϵͳÖÐûÓÐ×ÊÔ´¾ºÕù£¬ÕâÖּܹ¹¾ßÓзdz£Ç¿µÄÀ©ÕÅÐÔ£¬Ä¿Ç°ÔÚwebÓ¦ÓÃÖб»¹ã·ºÊ¹Óá£
ÎÞ¹²Ïí¼Ü¹¹µÄÒ»¸öÖØÒªÊµ¼ùÖ¸µ¼ÔÔò¾ÍÊDZÜÃâÔÚ»¥ÁªÏµÍ³ÖÐʹÓÃSession£¬ÒòΪʵ¼ùÒѾ֤Ã÷£¬ÔÚÒ»¸ö¼¯Èº·Ö²¼Ê½¼ÆËã»·¾³ÖУ¬ÈôSession״̬ά»¤ÔÚ¸÷¸ö½Úµã·þÎñÆ÷ÉÏ£¬ÎªÁ˱£Ö¤×´Ì¬Ò»ÖÂÐÔ£¬½Úµã¼äSessionÊý¾ÝÐèÒª»¥Ï࿽±´Í¬²½£¬ÑÏÖØÓ°ÏìÐÔÄÜ£¬ÎÒÃÇÐèÒª¾¡¿ÉÄܵĸÄÔìÏÖÓмܹ¹²»ÒªÊ¹ÓÃSession¡£

2¡¢¶Ô±È
shared-nothing¡¢shared-memory¡¢shared-diskÊDz¢ÐÐϵͳ×ʹÓõÄģʽ¡£
shared-memory£º¶à¸öcpu¹²ÏíͬһƬÄڴ棬cpuÖ®¼äͨ¹ýÄÚ²¿Í¨Ñ¶»úÖÆ½øÐÐͨѶ
shared-disk£ºÃ¿Ò»¸öcpuʹÓÃ×Ô¼ºµÄ˽ÓÐÄÚ´æÇøÓò£¬Í¨¹ýÄÚ²¿Í¨Ñ¶»úÖÆÖ±½Ó·ÃÎÊËùÓдÅÅÌϵͳºÍshared-memory¡¢shared-diskÏà±È£¬shared-nothingÓÅÊÆÃ÷ÏÔ£¬ÔÚÕë¶Ô¶àÓû§²¢ÐзÃÎʵÄʱºò£¬Í¨¹ýºáÏòÀ©³ä×ÊÔ´£¬Äܹ»´ó´ó¼õÉÙÏìӦʱ¼ä£¬ÌáÉýÕûÌåÍÌÍÂÁ¿ºÍЧÂÊ¡£
3¡¢·ÖƬ
shared notingÐèҪȷÁ¢Ò»ÖÖ·ÖÆ¬²ßÂÔ£¬Ê¹µÃÒÀ¾Ý²»Í¬µÄ·ÖƬ²ßÂÔ£¬¼õÉÙ×ÊÔ´¾ºÕù¡£
ÈýÖÖ»ù±¾µÄ·ÖƬ²ßÂԽṹ£º
£¨1£©¡¢ ¹¦ÄÜ·ÖÆ¬
¸ù¾Ý¶à¸ö¹¦ÄÜ»¥Ïà²»ÖØµþµÄÌØµã½øÐÐ·ÖÆ¬£¬ÕâÖÖ·½Ê½ÒѾÔÚebayÈ¡µÃ¾Þ´ó³É¹¦¡£È±µãÒ²ºÜÃ÷ÏÔ£¬¼´¼¼ÊõÈËÔ±ÐèÒªÉîÈëÀí½âÓ¦ÓÃÁìÓò£¬²ÅÄܸüºÃµØ·ÖƬ¡£
£¨2£©¡¢ ¼üÖµ·ÖƬ
ÔÚÊý¾ÝÖÐÕÒµ½Ò»¸ö¿ÉÒÔ¾ùÔÈ·Ö²¼µ½¸÷¸ö·ÖƬÖеļüÖµ¡£
£¨3£©¡¢ ²é±í
ÔÚ¼¯ÈºÖÐÓÐÒ»¸ö½Úµã³äµ±Ä¿Â¼½ÇÉ«£¬ÓÃÓÚ²éѯÄĸö½ÚµãÓµÓÐÓû§Òª·ÃÎʵÄÊý¾Ý¡£È±µãÔÚÓÚÕâ¸ö±í¿ÉÄܳÉΪÕû¸öϵͳµÄÆ¿¾±¼°µ¥µãʧЧµã¡£
³£¼ûµÄ¿ªÔ´DAL£¨ÈçCobarClient¡¢Fastser-DAL¡¢Uncode-DALµÈ£©ÊµÏֵġ°Â·ÓÉ¡±¹¦ÄܾÍÓвé±íµÄÓ°×Ó¡£
4¡¢ÏÖ×´
SNAĿǰ¹ã·º´æÔÚ£¬ÖØÒªµÄ³£¼ûµÄÓ¦ÓðüÀ¨Map-reduce¡¢BigTable¡¢Cassandra¡¢MongoDBµÈ¡£
£¨Èý£©¡¢ED-SOA¼Ü¹¹
ÕâÖּܹ¹ÒѾ³ÉΪ¸÷ÖÖ´óÖÐÐÍÆóÒµµÄ±êÅ䣬ÓÈÆäÊÇÒµÎñºÍ¹ØÏµ¸´ÔӵĻ¥ÁªÏµÍ³£¬Ã»ÓÐED-SOAµÄ×éÖ¯ºÍµ÷¶È£¬Ó¦ÓúܿÉÄܾ³£ÃæÁÙן÷ÖÖÎÊÌâ¡£
ED-SOA£¨Event Driven-Service Oriented Architecture£©£¬¼´Ê¼þÇý¶¯µÄÃæÏò·þÎñ¼Ü¹¹¡£
SOAÊÇϵͳ×é¼þ»¯ºÍÄ£¿é»¯¹¹½¨ÐÔÀíÂÛ£¬ËüµÄºËÐÄÊDZ©Â¶È»ºó´¦Àí£¨expose and handle£©¡£
EDAÊÇÒÔʼþΪºËÐÄ£¬Ö±¹ÛÀí½â¾ÍÊǸºÔðʲôʱºò´¥·¢£¬È»ºó×öʲô¡£
SOAʹʼþ£¨Event£©¿çϵͳÁ÷¶¯£¬ÏµÍ³×é¼þÖ®¼äͨ³£ÊÇͬ²½Í¨ÐÅ£¬¿ÉÒÔ²Éȡʼþ»úÖÆÊ¹Í¨ÐÅÒì²½»¯£¬Ìá¸ßÏìÓ¦ËÙ¶È¡£
»ùÓÚED-SOA¹¹½¨ËÉñîºÏϵͳ¿ÉÒÔÏÔÖø¸ÄÉÆÍøÕ¾¿ÉÉìËõÐÔ¡£
¹ØÓÚED-SOAµÄÀíÂÛºÍʵ¼ùÎÄÕÂʵÔÚÌ«¶à£¬±¾ÎľͲ»ÔÙÖØ¸´×¸ÊöÁË¡£
¶þ¡¢¸ºÔؾùºâ
1¡¢Ê²Ã´ÊǸºÔؾùºâ£¿
¸ºÔؾùºâ£¨Load Balance£©£¬¹ËÃû˼Ò壬ÊǰѷþÎñµÄ²¢·¢ÇëÇó¾ùºâµØ¸ºÔص½ºó¶Ë¶à¸ö¾ßÓÐÏàͬÄÜÁ¦µÄ·þÎñ½øÐд¦Àí·Öµ££¬ÒÔÁ®¼ÛÓÐЧ͸Ã÷µÄ·½Ê½À©Õ¹ÍøÂçÉ豸»ò·þÎñµÄ´ø¿í£¬Ôö¼ÓÍÌÍÂÁ¿£¬ÔöÇ¿·þÎñµÄÕûÌå´¦ÀíÄÜÁ¦£¬Ìṩ·þÎñµÄÁé»îÐԺͿÉÓÃÐÔ¡£
³£¼ûµÄµäÐ͵ĸºÔؾùºâÓ¦Óó¡¾°£º
£¨1£©¡¢web¼¯Èº£º½«´óÁ¿µÄ²¢·¢·ÃÎÊ»òÊý¾ÝÁ÷Á¿·Öµ£µ½¶ą̀½ÚµãÉ豸ÉÏ·Ö±ð´¦Àí£¬¼õÉÙÓû§µÈ´ýÏìÓ¦µÄʱ¼ä¡£
£¨2£©¡¢MapReduce£ºµ¥¸öÖØ¸ºÔصÄÔËËã·Öµ£µ½¶ą̀½ÚµãÉ豸ÉÏ×ö²¢Ðд¦Àí£¬Ã¿¸ö½ÚµãÉ豸´¦Àí½áÊøºó£¬½«½á¹û»ã×Ü£¬·µ»Ø¸ø?»§£¬ÏµÍ³´¦ÀíÄÜ?µÃµ½´ó·ù¶ÈÌá¸ß¡£

2¡¢¸ºÔؾùºâËã·¨
¸ºÔؾùºâËã·¨ÊǸºÔؾùºâÉ豸£¨°üÀ¨ÐéÄâÉ豸»òÏà¹ØÈí¼þ£©ÔÚÖ´ÐиºÔؾùºâµ÷¶È£¬Ñ¡Ôñ¾ßÌå´¦ÀíµÄºó¶Ë·þÎñµÄʱºòʹÓõĵ÷¶ÈºÍ·Ö·¢µÄÂß¼¡£
¸ºÔؾùºâµÄËã·¨Ö»Êǹ涨Á˵÷¶ÈºÍ·Ö·¢µÄÂß¼£¬ÔÚ²»Í¬µÄ¸ºÔؾùºâ·½°¸Öж¼¿ÉÄÜʹÓÃÏàͬºÍ£¨»ò£©ÀàËÆµÄËã·¨£¬ËüÖ»ÊǸºÔؾùºâ·½°¸µÄÒ»²¿·Ö¡£
³£¼ûµÄÖ÷Á÷¸ºÔؾùºâËã·¨°üÀ¨£º
£¨1£©¡¢ÂÖѯËã·¨£ºRound Robin/Weight Round Robin Scheduling
ÂÖѯË㷨ͨ¹ýÒÀ´ÎÂֽеķ½Ê½ÒÀ´Î½«ÇëÇóµ÷¶È²»Í¬µÄºó¶Ë·þÎñÆ÷(Real Server)¡£Í¨³£¿ÉÒÔ·ÖΪÆÕͨÂÖѯºÍ¼ÓȨÂÖѯÁ½ÖÖ·½Ê½¡£Ëã·¨µÄÓŵãÊǼò½àÇÒÎÞ״̬¡£
Ëã·¨¼òµ¥±íʾΪ£ºi = ( i + 1 ) mod n
£¨2£©¡¢HashËã·¨: Ëæ»úÊýHash£¬Sources Hashing Scheduling
HashËã·¨£¬ÓÖ½ÐÈ¡ÓàËã·¨¡£Ò»°ãÊǶÔÇëÇó±¨ÎÄÖеÄijÏîÊý¾Ý(key£¬Ò»°ã³£Óÿͻ§¶ËÀ´Ô´IP)¼ÆËãHashÖµ£¬È»ºó°´»úÆ÷ÊýÁ¿(n)ȡģ¡£
Ëã·¨¼òµ¥±íʾΪ£ºidx = Hash(key) % n
HashËã·¨ÖУ¬KeyµÄÑ¡Ôñ³£ÓÃʵ¼ùÈçÏ£º
a¡¢ÇëÇóʱ¼ä»òËæ»úÊý
ÌØµãÊǼòµ¥£¬¾ßÓÐÒ»¶¨·ÖÉ¢ÐÔ£¬µ«²»Îȶ¨£¬Ò»°ãÓÃÓÚÒªÇ󲻸ߵĸºÔؾùºâ³¡¾°¡£
b¡¢À´Ô´IP
ÌØµãÊǼòµ¥¡£Èç¹û¿Í»§µÄ·Ö²¼±È½Ï¹ã£¬ÕâÖÖ·½Ê½·ÖÉ¢ÐԽϺᣵ«Èç¹û½Ï¶àµÄ¿Í»§ÇëÇóÀ´Ô´ÓÚͬһIP£¨¹«Ë¾ÍøÂçͨ¹ý·ÓÉÆ÷ÉÏÍø£©£¬·ÖɢЧ¹û½Ï²î¡£
´ó¶à¸ºÔؾùºâÉ豸¶¼Ö§³ÖÕâÖÖËã·¨£¬ÖøÃûµÄnginxºÍLVSµÈÈí¼þÒ²Ö§³Ö¡£
£¨3£©¡¢Ò»ÖÂÐÔHashËã·¨£ºConsistency Hash Scheduling
Ò»ÖÂÐÔHashËã·¨×î³£ÓÃÓÚ·Ö²¼Ê½»º´æ£¨Èçmemcached¡¢redisµÈ£©µÄ¶¨Î»£¬µ«Í¬Ê±Ò²¿ÉÒÔÔÚϵͳ»ò³ÌÐòÖÐÓÃÓÚ¸ºÔؾùºâ£¬¸ÃËã·¨±¾À´µÄÒâÒå¾ÍÔÚÓÚ·ÖÉ¢¸ºÔغͿìËÙ¶¨Î»¡£
ÍÆ¼öÔĶÁ£º½ØÖÁĿǰ¿´¹ýµÄÒ»ÖÂÐÔHashËã·¨×î¼Ñ½éÉÜÇëÃÍ»÷ÕâÀï¡£
(4£©¡¢×îÉÙÁ¬½Ó»òÇëÇóÊý: (Weight)Least Connection/Request
Scheduling
×îСÁ¬½Óµ÷¶ÈÊÇÒ»ÖÖ¶¯Ì¬µ÷¶ÈËã·¨£¬Ëüͨ¹ý·þÎñÆ÷µ±Ç°Ëù»îÔ¾µÄÁ¬½ÓÊýÀ´¹À¼Æ·þÎñÆ÷µÄ¸ºÔØÇé¿ö¡£
Ëã·¨Ö÷ÒªÂß¼ÊÇ£¬µ÷¶ÈÉ豸»ò·þÎñ¼Ç¼ºó¶Ë·þÎñÆ÷½ÓÊÜÇëÇóµÄ¼ÆÊý£¬Ã¿´ÎÇëÇó×ÜÊÇ·¢¸ø¼ÆÊý×îСµÄ·þÎñÆ÷´¦Àí¡£
£¨5£©¡¢×î´ó¿ÕÏУºMost idle First(»ùÓÚ¼à¿ØCPU,ÄÚ´æ,´ø¿íµÈ×ÛºÏÆÀ¹À)
£¨6£©¡¢Æ½¾ù×î¿ìÏìÓ¦£ºÆ½¾ù×î¿ìÏìÓ¦
£¨7£©¡¢×îÉÙÁ÷Á¿£ºLeast Traffic Scheduling
»¹ÓÐÒ»ÖÖ³£¼ûµÄ¾ÍÊÇ»ùÓڻỰµÄ¸ºÔØÊµÏÖ£¬µ«ÊÇÑϸñÀ´ËµSession(Ò»°ãÓÃÓÚWEB)²»ÄÜËãÊÇËã·¨¡£SessionʵÏÖ¸ºÔؾùºâµÄÖ÷Òª¹ý³ÌΪ£ºÊ×´ÎÇëÇó¼Ç¼Óû§µÄSessionID£¬È»ºóÔÙͨ¹ýÂÖѯµÈË㷨ѡÔñºó¶Ë·þÎñÆ÷£¬Èç¹ûÓû§ºóÐøÊ¹ÓÃͬһSessionID·¢ÆðÇëÇó£¬ÔòÎÞÐèÔÙÑ¡Ôñ·þÎñÆ÷£¬Ö±½Óת·¢¸øÇ°Ãæ¸ù¾ÝSessionIDÕÒµ½µÄ¶ÔÓ¦µÄºó¶Ë·þÎñÆ÷¡£
3¡¢¸ºÔؾùºâģʽ
¸ºÔؾùºâģʽÖ÷ÒªÊÇÖ¸ÔÚÕûÌå·½°¸ÖÐÑ¡Ôñ´Ó·þÎñÍøÂçµÄÄĸö²ã´Î»òÄĸö²úÆ·À´ÊµÏÖ¸ºÔؾùºâ·½°¸¡£
£¨1£©¡¢Íⲿģʽ£¨RR-DNS£©
RR-DNS£¬¼´DNSÂÖѯģʽ£¬ËüµÄÔÀíÊÇÀûÓÃDNS·þÎñÆ÷Ö§³ÖͬһÓòÃûÅäÖöà¸ö¶ÀÁ¢IPÖ¸Ïò£¬È»ºóÂÖѯ½âÎöÖ¸ÏòIPʵÏÖ¶à´Î·ÃÎʵĵ÷¶ÈºÍ·Ö·¢£¬ÊµÏÖ¸ºÔؾùºâ¡£
ËüµÄÖ÷ÒªÌØµãΪ£º
a¡¢¸ºÔؾùºâʵÏÖÓëºó¶Ë·þÎñÍêȫûÓйØÏµ£¬ÓÐDNSÔÚ±¾µØ½âÎöÖ¸ÏòʵÏÖÂÖѯµ÷¶È¡£Õâ¸ö·½ÃæÀ´¿´ÐÔÄÜ×î¼ÑЧÂÊ×î¸ß¡£
b¡¢DNS·þÎñÎÞ·¨¼ì²âµ½ºó¶Ë·þÎñÆ÷ÊÇ·ñÕý³££¬ÔÚTTLʧЧǰ£¬»áÒ»Ö±Ö¸ÏòʧЧµÄ·þÎñÆ÷£¬Õâ¾ÍÒªÇóÔÚʵ¼ùÉú³ÉÖУ¬±ØÐë½â¾öºó¶Ë·þÎñÆ÷µÄ¸ß¿ÉÓÃÎÊÌâ¡£
c¡¢Ò»°ãµÄµÚÈý·½DNS·þÎñÌṩÉ̶¼Ö§³Ö¸Ã¹¦ÄÜ£¬µ«Èç¹û¸üÐÂÆµÂʸ߻ò¸½´ø¸üÐÂÂß¼£¬Ò»°ã»áÔÚϵͳÄÚ×Ô¼üDNS·þÎñ£¬È»ºóÔÚ×¢²áΪ¹«¹²DNS·þÎñ¡£
£¨2£©¡¢Ó¦Óòãģʽ
a¡¢Ê²Ã´ÊÇÕýÏòºÍ·´Ïò´úÀí£¿
ÕýÏò´úÀí£ºÓû§Í¨¹ý´úÀí·þÎñ·ÃÎÊinternet, °Ñinternet·µ»ØµÄÊý¾Ýת·¢¸øÓû§¡£ÕýÏò´úÀí¶ÔÓÚÕû¸öÍøÂçÇëÇó£¬ËüµÄ½Çɫʵ¼ÊÊǿͻ§¶Ë£¬´úÀí¿Í»§¶ÔÍâµÄ·ÃÎÊÇëÇó¡£
·´Ïò´úÀí£º½ÓÊÜinternetÉÏÓû§µÄÇëÇó£¬×ª·¢¸øÄÚ²¿µÄ¶ą̀·þÎñÆ÷´¦Àí£¬Íê³Éºóת·¢ºó¶Ë·þÎñÆ÷µÄ·µ»Ø¸ø¶ÔÓ¦µÄÓû§¡£·´Ïò´úÀí¶ÔÓÚÕû¸öÍøÂçÇëÇó£¬ËüµÄ½Çɫʵ¼ÊÊÇ·þÎñÆ÷£¬´úÀí½ÓÊÜ£¨accept£©ËùÓÐÓû§µÄÇëÇó¡£
b¡¢·´Ïò´úÀíÓ¦ÓÃģʽ
³£¼ûµÄ·´Ïò´úÀíÓ¦ÓÃģʽ£¬±ÈÈçͨ¹ý Apache, nginxµÈWeb·þÎñÆ÷Èí¼þʵÏÖWEBÓ¦ÓõĸºÔؾùºâºÍ¸ß¿ÉÓá£
ÀûÓ÷´Ïò´úÀíÈí¼þʵÏÖ¸ºÔؾùºâÊÇÐԼ۱ȽϸߵÄģʽ¡£
£¨3£©¡¢ÍøÂç²ãģʽ
a¡¢IPת»»
IPת»»Ä£Ê½µÄ¸ºÔؾùºâÒ»°ãÊÇÔÚÍøÂçµÄIP²ãʵÏÖ£¬Í¨¹ý±¨ÎĸÄдµÄ·½Ê½ÊµÏÖVIPµ½¶à¸öÄÚ²¿IPµÄת·¢µ÷¶È£¬ÒÔ´ïµ½¸ºÔؾùºâµÄЧ¹û¡£
ËüµÄÖ÷ÒªÌØµã°üÀ¨£º
ÍøÂç²ã·½°¸£¬Ð§Âʽϸߣ¬Îȶ¨ÐԽϺ㻿ÉÓë²Ù×÷ϵͳÄں˽áºÏ£»¹¤Òµ¼¶Ä£Ê½ºÍ·½°¸£»´ó²¿·ÖÉÌÒµÉ豸ºÍ²úÆ·¶¼ÒԸ÷½Ê½ÎªÖ÷£»LVSµÄ»ù±¾ÔÀíÒ²Ààͬ¡£
b¡¢IPת»»Ö®LVS
LVS£¨Linux Virtual Server£©,ÊÇÖйúÈË£¨98Ä꣩дµÄ¹¤Òµ¼¶µÄ¸ºÔØÆ½ºâµ÷¶È½â¾ö·½°¸£¬ÕÂÎÄáÔ²©Ê¿ÊǸÿªÔ´Èí¼þ´´Ê¼ÈË¡£Ò²ÊÇĿǰҵ½ç×îÁ÷ÐеÄÈí¼þ·½Ê½ÊµÏÖ¸ºÔؾùºâµÄģʽ֮һ¡£LVSÒ²ÊÇÀûÓÃIPת·¢µÄÔÀíʵÏÖ´ó¶àÊýÓÐÉÌÒµ²úƷʵÏÖµÄÄÜÁ¦£¬²¢×öÁ˲¿·ÖÓÅ»¯£¬Ö÷ÒªÓÐÈýÖÖģʽµÄÓ¦Óá£
£¨a£©¡¢Í¨¹ýNAT£¨Network Address Translation£©ÊµÏÖÐéÄâ·þÎñÆ÷£¨VS/NAT£©
£¨b£©¡¢Í¨¹ýIPËíµÀʵÏÖÐéÄâ·þÎñÆ÷£¨VS/TUN£©
£¨c£©¡¢Í¨¹ýÖ±½Ó·ÓÉʵÏÖÐéÄâ·þÎñÆ÷£¨VS/DR£©
¹ØÓÚLVSµÄ½éÉÜÎÄÕ·dz£¶à£¬ÕâÀï¾Í²»ÔÙÏêϸ½éÉÜÁË£¬ÍƼö²Î¿¼ÔĶÁ<<¹¹½¨¸ßÐÔÄÜwebÕ¾µã>>ºÍ<<´óÐÍÍøÕ¾¼¼Êõ¼Ü¹¹>>ÕâÁ½±¾ÊéÖйØÓÚ¸ºÔؾùºâµÄ²¿·ÖÕ½ڡ£
c¡¢IPת»»Ö®¸ºÔؾùºâÉ豸
F5µÈ¸ºÔؾùºâÉ豸ͬÑùÊÇÔÚÍøÂç²ãʵÏÖ¸ºÔؾùºâ£¬µ«Ò»°ã¶øÑÔÔì¼Û½ÏΪ°º¹ó£¬ÐԼ۱Ƚϵ͡£
Èý¡¢¸ß¿ÉÓÃϵͳÉè¼Æ
1¡¢ÏµÍ³¿ÉÓÃÐÔ
ϵͳ¿ÉÓÃÐÔ¶¨Ò壺MTTF/(MTTF+MTTR) * 100%
MTTF£º mean time to failure£¬Æ½¾ùʧЧǰʱ¼ä£¬Ò²¾ÍÊÇÕý³£ÔËÐеÄʱ¼ä
MTTR£º mean time to restoration£¬ ƽ¾ù»Ö¸´Ç°Ê±¼ä,Ò²¾ÍÊǹÊÕÏʱ¼ä
ϵͳ¸ß¿ÉÓÃÐÔ£¨High Availability£©Í¨³£À´ÃèÊöÒ»¸öITϵͳ¾¹ýרÃŵÄÉè¼Æ£¬¼õÉټƻ®ºÍ·Ç¼Æ»®Í£¹¤Ê±¼ä£¬±£³ÖÆä·þÎñµÄ¸ß¶È³ÖÐø¿ÉÓÃÐÔ¡£
Ó°Ïìϵͳ¿ÉÓÃÐÔµÄÒòËØºÜ¶à£¬°üÀ¨Ó²¼þ¡¢Èí¼þ¡¢ÍøÂçºÍ»·¾³£¨±ÈÈç»ú·¿Î¶ȣ©µÈ£¬³ýÁ˳£¼ûµÄCPU¡¢ÄÚ´æ¡¢IO¡¢ÍøÂç¡¢ËøµÈÒòËØ£¬»¹ÐèÒª¿¼ÂǸ÷ÖÖÖ§³ÖÉ豸ºÍϵͳ¡¢·Ç¼¼ÊõµÄÒòËØ£¬×ÜÖ®£¬ÏµÍ³¿ÉÓÃÐÔÊÇÒ»¸ö×ÛºÏÒòËØÓ°ÏìµÄ½á¹û¡£
2¡¢¸ß¿ÉÓõÄģʽ
ϵͳ¸ß¿ÉÓÃÐԵij£ÓÃÉè¼ÆÄ£Ê½°üÀ¨ÈýÖÖ£¬°üÀ¨:
£¨1£©¡¢Ö÷±¸(Active-Standby)
¹¤×÷ÔÀí£ºÖ÷»ú¹¤×÷£¬±¸»ú´¦ÓÚ¼à¿Ø×¼±¸×´¿ö£»µ±Ö÷»úå´»úʱ£¬±¸»ú½Ó¹ÜÖ÷»úµÄÒ»Çй¤×÷£¬´ýÖ÷»ú»Ö¸´Õý³£ºó£¬°´Ê¹ÓÃÕßµÄÉ趨ÒÔ×Ô¶¯£¨Èȱ¸£©»òÊÖ¶¯£¨À䱸£©·½Ê½½«·þÎñÇл»µ½Ö÷»úÉÏÔËÐС£Ò»°ãÐèÒªÈ˹¤¸ÉÔ¤²ÅÄܻظ´³õʼ״̬¡£
£¨2£©¡¢»¥±¸(Active-Active)
¹¤×÷ÔÀí£ºÁ½Ì¨Ö÷»ú£¨A±ê¼ÇΪÖ÷,B±ê¼ÇΪ±¸£©Í¬Ê±ÔËÐи÷×ԵķþÎñ¹¤×÷ÇÒÏ໥¼à²âÇé¿ö£¬µ±ÈÎһ̨Ö÷»ú£¨A£©å´»úʱ£¬Áíһ̨Ö÷»ú£¨B£¬ÆôÓò¢±ê¼ÇΪÖ÷£©Á¢¼´½Ó¹ÜËüµÄÒ»Çй¤×÷£¬±£Ö¤¹¤×÷ʵʱ¿ÉÓÃ
£¨3£©¡¢¼¯Èº(Cluster)
¹¤×÷ÔÀí£º¶ą̀¾ßÓÐÏàͬÄÜÁ¦µÄ·þÎñͬʱ¶ÔÍâÌṩ͸Ã÷·þÎñ£¬ËùÓзþÎñÖ®¼ä¶¼ÊÇActive-Active¹ØÏµ£¬²¢·Öµ£´¦Àí·þÎñÇëÇó£¬Ò»°ãͨ¹ý×ܿؽڵã»ò¼¯ÈºÈí¼þ£¨ÀýÈçzookeeperµÈ£©½øÐи߿ÉÓõĿØÖÆ¡£
3¡¢¸ß¿ÉÓõÄÉè¼Æ
¸ß¿ÉÓõÄÉè¼ÆÃ»ÓÐÍêÃÀµÄ±ê×¼´ð°¸¡£µ«ÊǸù¾Ý¹¤³Ì¾Ñ飬ÎÒÃÇ¿ÉÒÔ×ܽá³ö¸ß¿ÉÓÃÉè¼ÆµÄÒ»¸öÖØÒªÖ¸±ê£º
²»ÒªÓе¥µã¡£
²»ÒªÓе¥µã¡£
²»ÒªÓе¥µã¡£
Ç¿µ÷ÁËÈý±é£¬ÏÖÔÚ¼ÇסÁËÂð£¿
Èç¹ûÊÇÔÚÉè¼Æ¿ª·¢ÊµÏÖºÍά»¤´óÖÐÐÍwebϵͳ£¬Í¨³£ÎÒÃÇ»á´Ó»¥ÁªÏµÍ³ÖÐ×îÈÝÒ׳öÏÖÎÊÌ⣬ͬʱҲ×î²»ÈÝÒ׺áÏòÀ©Õ¹µÄ½ÚµãÏÂÊÖ£¨°üÀ¨ÍøÂçºÍ´æ´¢ÏµÍ³£©£¬ÅŲ鲢½â³ýϵͳÖеı¡Èõ»·½Ú£¬ÕùÈ¡±£Ö¤Õû¸öϵͳÖоø²»³öÏÖµ¥µãÕâÒ»ËÀ½Ç£¬»òÕß³öÏÖµ¥µã£¬µ«Ò²¿ÉÒÔͨ¹ý³ÉÊìµÄÓÅ»¯ÊֶΣ¨»º´æ¡¢¶ÓÁС¢sharding¡¢¸ºÔؾùºâºÍÒìµØÈÝÔֵȣ©ÊµÏָ߿ÉÓá£
Äã¿ÉÄÜ»¹ÊÇ»áÓÐÒÉÎÊ£ºÊDz»ÊÇϵͳÖÐûÓе¥µãÁ˱£Ö¤¸ß¿ÉÓÃÁ˾ÍÒ»¶¨²»³öÊÂÇéÁËÄØ£¿
´ð°¸ÊÇ£¬»¹ÊÇ¿ÉÄÜ»á³öÊ£¬¶øÇÒ¿ÉÄܶ¼ÊÇ´óÊ¡£½ñÄêµÄºÚÉ«ÎåÔ·ݵðÖØ´óITʹʣ¬ÎÞÇ鵨¸æËßÎÒÃÇ£¬ÔÙ¸ßÃ÷µÄÉè¼Æ£¬Åöµ½ÎïÀíÆÆ»µ»òÕßȨÏÞ¿ØÖƲ»µ±¶øÎó²Ù×÷»òÕßDDoS¶¼ÓпÉÄÜÈÿª·¢ºÍÉè¼ÆÈËÔ±µÄËùÓÐÐÄѪ¸¶Ö®¶«Á÷¡£ |