±à¼ÍƼö: |
±¾ÎÄÖ÷Òª½éÉÜÁËÉè¼ÆÀíÄîÒÔ¼°¼Ü¹¹¡¢ÀúÊ·Ñݽø¡¢×ÊÔ´³åÍ»ÒÔ¼°¸ôÀë»úÖÆ¡¢Ô´Âë¼Ü¹¹·ÖÎöµÈÏà¹ØÄÚÈÝ¡£
±¾ÎÄÀ´×ÔÓÚstudygolang.com£¬ÓÉ»ðÁú¹ûÈí¼þLinda±à¼¡¢ÍƼö¡£ |
|
Mesos °´ÕÕ¹Ù·½µÄ½éÉÜ£¬ÊÇ·Ö²¼Ê½²Ù×÷ϵͳµÄÄںˡ£Ä¿±êÊÇ ¡±Program
against your datacenter like it¡¯s a single pool of
resources¡±£¬¼´¿ÉÒÔ½«Õû¸öÊý¾ÝÖÐÐĵ±×öһ̨µçÄÔÒ»ÑùʹÓ᣿ÉÒÔ˵Õâ¸öÄ¿±êÊÇËùÓÐÐû³Æ×Ô¼ºÊÇDCOSµÄϵͳµÄ¹²Í¬Ä¿±ê£¬±¾ÎĴӼܹ¹ºÍÔ´Âë²ãÃæ·ÖÎöMesosÒÔ¼°Öܱ߿ò¼Ü£¬¿´¿´MesosÊÇÈçºÎʵÏÖÕâ¸öÄ¿±êµÄ£¬µ±Ç°¾àÕâ¸öÄ¿±ê»¹Óжà´ó²î¾à¡£×îºó±È½ÏÁËÒ»ÏÂMesosºÍKubernetesÕâÁ½¸ö¶¼ÊÜGoogleµÄBorgÓ°ÏìµÄϵͳµÄÒìͬ¡£
ÔĶÁ¶ÔÏ󣺶ÔMesos»òÕß·Ö²¼Ê½ÏµÍ³¸ÐÐËȤµÄ¼¼ÊõÈË
Éè¼ÆÀíÄîÒÔ¼°¼Ü¹¹
ÒýÓÃMesos paperÀïµÄÒ»¾ä»°£¬À´ËµÃ÷MesosµÄÉè¼ÆÀíÄ
define a minimal interface that enables efficient
resource sharing across frameworks, and otherwise
push control of task scheduling and execution to the
frameworks
¶¨ÒåÒ»¸ö×îС»¯µÄ½Ó¿ÚÀ´Ö§³Ö¿ç¿ò¼ÜµÄ×ÊÔ´¹²Ïí£¬ÆäËûµÄµ÷¶ÈÒÔ¼°Ö´Ðй¤×÷¶¼Î¯Íиø¿ò¼Ü×Ô¼ºÀ´¿ØÖÆ¡£
Õâ¾ä»°±êÖ¾Mesos²»ÊÔͼ×÷Ϊһ¸öһջʽ½â¾öÎÊÌâµÄϵͳ£¬¶øÊÇÒÔ×îСµÄ³É±¾À´ÊµÏÖ×ÊÔ´¹²Ïí¡£ÏÈÀ´¿´¿´¹Ù·½ÌṩµÄ¼Ü¹¹Í¼£º

Ö÷Òª×é¼þÒÔ¼°¸ÅÄ
Zookeeper Ö÷ÒªÓÃÀ´ÊµÏÖMasterµÄÑ¡¾Ù£¬Ö§³ÖMasterµÄ¸ß¿ÉÓá£
Master MesosµÄÖ÷½Úµã£¬½ÓÊÕSlaveºÍFramework schedulerµÄ×¢²á£¬·ÖÅä×ÊÔ´¡£
Slave ´Ó½Úµã£¬½ÓÊÕmaster·¢À´µÄtask£¬µ÷¶ÈexecutorÈ¥Ö´ÐС£
Framework ±ÈÈçÉÏͼÖеÄHadoop£¬MPI¾ÍÊÇFramework£¬°üÀ¨scheduler£¬executorÁ½²¿·Ö¡£scheduler¶ÀÁ¢ÔËÐУ¬Æô¶¯ºó×¢²áµ½master£¬½ÓÊÕmaster·¢Ë͵ÄResource
OfferÏûÏ¢£¬À´¾ö¶¨ÊÇ·ñ½ÓÊÜ¡£ExecutorÊǸøslaveµ÷Óõģ¬Ö´ÐÐframeworkµÄtask¡£MesosÄÚÖÃÁËCommandExecutor£¨Ö±½Óµ÷ÓÃshell£©ºÍDockerExecutorÁ½ÖÖexecutor£¬ÆäËûµÄ×Ô¶¨ÒåExecutorÐèÒªÌṩuri£¬¹©slaveÏÂÔØ¡£
Task Mesos×îÖ÷ÒªµÄ¹¤×÷Æäʵ¾ÍÊÇ·ÖÅä×ÊÔ´£¬È»ºóѯÎÊschedulerÊÇ·ñ¿ÉÒÔÀûÓøÃ×ÊÔ´Ö´ÐÐTask£¬scheduler½«×ÊÔ´ºÍTask°ó¶¨ºó½»ÓÉMaster·¢Ë͸øÖ¸¶¨µÄSlaveÖ´ÐС£Task¿ÉÒÔÊdz¤ÉúÃüÖÜÆÚµÄ£¬Ò²¿ÉÒÔʹÓÃÅúÁ¿µÄ¶ÌÉúÃüÖÜÆÚµÄ¡£
¹Ù·½ÌṩµÄÁíÍâÒ»¸ö×ÊÔ´·ÖÅäµÄÀý×Ó£º

Slave1 Ïò Master ±¨¸æ£¬ÓÐ4¸öCPUºÍ4 GBÄÚ´æ¿ÉÓÃ
Master ·¢ËÍÒ»¸ö Resource Offer ¸ø Framework1 À´ÃèÊö Slave1
ÓжàÉÙ¿ÉÓÃ×ÊÔ´
FrameWork1 ÖÐµÄ FW Scheduler»á´ð¸´ Master£¬ÎÒÓÐÁ½¸ö Task ÐèÒªÔËÐÐÔÚ
Slave1£¬Ò»¸ö Task ÐèÒª<2¸öCPU£¬1 GBÄÚ´æ=¡±¡±>£¬ÁíÍâÒ»¸öTaskÐèÒª<1¸öCPU£¬2
GBÄÚ´æ=¡±¡±>
×îºó£¬Master ·¢ËÍÕâЩ Tasks ¸ø Slave1¡£È»ºó£¬Slave1»¹ÓÐ1¸öCPUºÍ1 GBÄÚ´æÃ»ÓÐʹÓã¬ËùÒÔ·ÖÅäÄ£¿é¿ÉÒÔ°ÑÕâЩ×ÊÔ´Ìṩ¸ø
Framework2
Õâ¸öÀý×Ó¿ÉÒÔ¿´³öÀ´£¬MesosµÄºËÐŤ×÷ÆäʵºÜÉÙ£¬×ÊÔ´¹ÜÀíºÍ·ÖÅäÒÔ¼°taskת·¢¡£µ÷¶ÈÓÉFrameworkʵÏÖ£¬taskµÄ¶¨ÒåÒÔ¼°¾ßÌåÖ´ÐÐÒ²ÓÉFrameworkʵÏÖ£¬MesosµÄ×ÊÔ´·ÖÅäÁ£¶ÈÊǰ´taskµÄ£¬µ«ÓÉÓÚexecutorÖ´ÐÐtask¿ÉÄÜÔÚͬһ¸ö½ø³ÌÖÐʵÏÖ£¬ËùÒÔ×ÊÔ´ÏÞÖÆÖ»ÊÇÒ»ÖÖÁ÷¿ØµÄ»úÖÆ£¬²¢²»ÄÜʵ¼ÊµÄ¿ØÖƵ½taskÕâ¸öÁ£¶È¡£
¿´ÁËÉÏÃæ¹Ù·½µÄ¼Ü¹¹ËµÃ÷£¬´óÔ¼Ó¦¸ÃÃ÷°×ÁËMesosµÄ´óÖ¼ܹ¹£¬µ«¾ßÌåMesosΪʲôҪ×ö³ÉÕâÑù£¬ÏÂÃæÎÒÃǾßÌå·ÖÎöÏ¡£
ÀúÊ·Ñݽø
ÎÒÃǰÑʱ¼ä»ØÍ˵½Mesos·¢Ã÷µÄ2009Ä꣬ÄÇʱºòHadoopÖð½¥³ÉÊ죬²¢¹ã·ºÓ¦Óã¬ÕýÔÚÍÌÊÉ×Å´ó¼ÒµÄ·þÎñÆ÷¡£Sparkµ±Ê±Ò²ÔÚÔÍÄðÖС£¶ø·þÎñÆ÷ÅäÖùÜÀíÁìÓòPuppet»¹Ã»·¢²¼1.0£¬Chef²Å¸Õ³öÏÖ£¬¡ºConfiguration
management Infrastructure as Code¡»µÄ˼Ïë²ÅÂýÂý±»½ÓÊÜ£¬Ansible/Salt»¹Ã»³öÏÖ¡£´ó¼Ò¹ÜÀí·þÎñÆ÷»¹ÊǾ²Ì¬»®·ÖµÄ·½Ê½£¬¹ºÂò·þÎñÆ÷µÄʱºò¾Í°²ÅźÃÁË£¬Õ⼸̨·þÎñÆ÷ÉÏÔËÐÐʲô·þÎñ£¬Ó¦¸ÃÅäÖöàÉÙCPU/ÄÚ´æ/´ÅÅÌ£¬°²×°Î¬»¤»¹¶àÓõÄÊÇshell½Å±¾¡£
¾²Ì¬¹ÜÀí·þÎñÆ÷£¬ÎÞÂÛÊÇÓÃshell»¹ÊÇPuppetÕâÖÖ¹¤¾ß£¬Ò»·½ÃæÊDZȽÏÀË·Ñ×ÊÔ´£¬ÁíÍâÒ»·½Ãæ·þÎñ¹ÊÕϻָ´£¬·þÎñÇ¨ÒÆ¶¼ÐèÒªÈ˹¤½éÈ룬ÒòΪÕâÖÖ¹¤¾ß¶¼Ö»ÔÚ²¿Êðʱ½øÐйÜÀí£¬·þÎñ½ø³ÌÔËÐкó¾Í²»¹é²¿Ê𹤾߹ÜÀíÁË¡£¶øMesosÔò¿´µ½ÁËÕâÖÖ·½Ê½µÄ±×¶Ë£¬ÊÔͼʵÏÖÒ»¸ö×ÊÔ´¹²ÏíµÄƽ̨£¬Ìá¸ß×ÊÔ´ÀûÓÃÂÊ£¬ÊµÏÖ¶¯Ì¬ÔËά¡£
°´ÕÕÕâÖÖ·½Ê½¾Í±È½ÏÈÝÒ×Àí½âMesosµÄ×ö·¨£¬MesosµÄmasterÏ൱ÓÚPuppet/SaltµÄmaster£¬MesosµÄslaveÏ൱ÓÚPuppet/SaltµÄagent£¬¶þÕ߸ɵÄÊÂÇé¶¼ÊǰÑÖ¸Áîͨ¹ýmaster·¢Ë͸øslave/agentÖ´ÐУ¬Çø±ðÊÇPuppet/Salt³É¹¦Ö´Ðкó¾Í²»¹ØÐÄÁË£¬¶øMesosÖ´Ðкó»áÔÚMasterά»¤taskµÄ״̬£¬task¹Òµôºó¿ÉÒÔÖØÆô»òÕßÇ¨ÒÆ¡£
ͬʱMesos¿´µ½HadoopµÈ·Ö²¼Ê½ÏµÍ³¶¼×Ô¼ºÊµÏÖÁËschedulerÒÔ¼°executor£¬ËùÒÔ½«schedulerÒÔ¼°executorµÄ¾ßÌåʵÏÖÈóöÀ´£¬Í¨¹ýÖÆ¶¨Framework±ê×¼£¬ÓɵÚÈý·½·Ö²¼Ê½¿ò¼Ü×Ô¼ºÊµÏÖ£¬×Ô¼ºÖ»¸ºÔðת·¢taskµ½slave£¬ÓÉslaveµ÷ÓÃFrameworkµÄexecutorÈ¥Ö´ÐÐtask¡£
Ò²¾ÍÊÇ˵ÓÉÓÚÀúʷʱ»úµÄÎÊÌ⣬Mesos²ÉÓÃÁËÒ»ÖÖ±£ÊصIJßÂÔÀ´½øÐÐÑݽø¡£
×ÊÔ´³åÍ»ÒÔ¼°¸ôÀë»úÖÆ
×ÊÔ´¹²Ïíµ¼ÖµÄÊ×ÒªÎÊÌâ¾ÍÊÇÈçºÎ½â¾ö×ÊÔ´³åÍ»ÎÊÌ⣺
cpu/mem Õâ¸öMesosĬÈÏÄÚÖÃÁËÒ»¸öMesos Containerizer£¬¿ÉÒÔͨ¹ýcgroupsºÍnamespaces½øÐÐÏÞÖÆ¡£
ÍøÂç¶Ë¿Ú MesosĬÈÏ»á¸øÃ¿¸ötask·ÖÅäÒ»¸ö£¨¿ÉÒÔ·ÖÅä¶à¸ö¶Ë¿Ú£©Ëæ»úµÄδʹÓõĶ˿ڣ¬ÐèÒªÓ¦Óôӻ·¾³±äÁ¿ÖлñÈ¡µ½Õâ¸ö¶Ë¿Ú½øÐÐʹÓã¬ÊÇÒ»ÖÖÔ¼¶¨µÄ¹æÔò£¬²¢²»Ç¿ÖÆÏÞÖÆ¡£
Îļþϵͳ ĬÈÏÇé¿öÏÂMesosµÄÎļþϵͳÊǶàÓ¦Óù²ÏíµÄ£¬Ä¬ÈϸøÃ¿¸ötask·ÖÅäÒ»¸ösandboxĿ¼×÷Ϊ¹¤×÷Ŀ¼£¬sandboxÔÚÖ÷»úÉϵÄĿ¼ÊǺÍtaskidÏà¹ØµÄ£¬²»»á³åÍ»£¬ÉúÃüÖÜÆÚºÍtask°ó¶¨¡£ÁíÍâÒ²Ö§³ÖPersistent
Volume£¬ÓÃÓÚÓ¦Óñ£´æ³Ö¾ÃÊý¾Ý£¬Ò²ÊÇͨ¹ýĿ¼ӳÉäµÄ·½Ê½ÊµÏֵġ£Persistent VolumeµÄÉúÃüÖÜÆÚ¶ÀÁ¢ÓÚtask£¬ÓÉscheduler¾ö¶¨ÊÇ·ñ¸´Óã¬Ò²¾ÍÊÇ˵Mesos½«³Ö¾Ã»¯Êý¾ÝºÍ¶¯Ì¬Ç¨ÒÆÖ®¼äµÄ³åÍ»ÎÊÌâ½»¸øÁËscheduler×Ô¼º´¦Àí¡£ÁíÍâ¿ÉÒÔÑ¡ÔñʹÓÃDocker
Containerizer£¬Í¨¹ýDockerµÄ·½Ê½¸ôÀëÎļþϵͳ¡£
·þÎñ·¢ÏÖÒÔ¼°¸ºÔؾùºâ MesosĬÈϲ»Ö§³Ö·þÎñ·¢Ïֺ͸ºÔؾùºâ£¬ÐèÒªÓû§×Ô¼ºÊµÏÖ¡£MesosÖ®ÉϵÄMarathon
FrameworkÌṩÁËÒ»¸ömarathon-lb£¬Í¨¹ý¼àÌýMarathonµÄeventÐÞ¸ÄHAProxy£¬ÊµÏÖ¶¯Ì¬µÄ¸ºÔؾùºâ£¬²»¹ýÖ»Ö§³Öͨ¹ýMarathon²¿ÊðµÄÓ¦Óá£
ÈÝÆ÷µÄ¸Ä½ø MesosÄÚÖõÄÈÝÆ÷²»ÊÇ»ùÓÚImageµÄ£¬µ«DockerÊÇ»ùÓÚImageµÄ£¬´øÀ´µÄÎÊÌâ¾ÍÊÇÓÐЩ¹¦ÄÜҪͨ¹ýÁ½ÖÖ·½Ê½ÊµÏÖ£¨±ÈÈç´ÅÅ̸ôÀëµÈ£©¡£ÁíÍâDocker±¾ÉíµÄdaemon»úÖÆÈÃMesos²»ºÃÖ±½Ó¹ÜÀíÈÝÆ÷½ø³Ì£¬ËùÒÔMesosÒ²Ôڼƻ®¸Ä½øÄÚÖõÄÈÝÆ÷Ö§³ÖImage£¬¼æÈÝDocker/AppcµÄImage£¬²»»á°ÑDocker×÷ΪĬÈϵÄÈÝÆ÷,¾ßÌå²Î¿´¡£
Ô´Âë¼Ü¹¹·ÖÎö
MesosµÄºËÐÄÊÇÓÃc++дµÄ£¬Ö÷ҪʹÓÃÁËÒ»¸ölibprocessµÄ¿â£¬ÕâÊÇÒ»¸öc++µÄactorÄ£Ð͵Ŀ⣨²»Ì«Á˽âactorÄ£Ð͵ĿÉÒԲο´ÎÒµÄǰһƪÎÄÕ£º²¢·¢Ö®Í´
Thread£¬Goroutine£¬Actor£¬Õâ¸ö¿â˳´ø°ÑOption,Nothing,Try, Future,Lambda,DeferÕâЩ¶¼ÊµÏÖÁË£¬ÈÃÎÒ³ä·ÖÌå»áÁËc++µÄħ·¨£©¡£libprocess»ù±¾ÊDzο¼erlangµÄģʽʵÏֵ쬯äÖеÄactor¶¼½Ð×öprocess£¬Ã¿¸öprocessÓÐÒ»¸ö¶ÀÁ¢µÄID£¬ÎÒÃÇÕâÀïΪÁË·½±ãÀí½â£¬°ÑÆäÖеijéÏó¶¼½Ð×öactor£¬¾ßÌåactorÐ×÷ģʽ¼ûÏÂͼ£º

ÔÚMesosµÄmaster½ÚµãÖУ¬Ã¿¸öFrameworkÒÔ¼°Slave¶¼ÊÇÒ»¸öÔ¶³ÌµÄactor¡£¶øslave½ÚµãÉÏ£¬Ã¿¸öexecutorÊÇÒ»¸öactor£¬Ö»²»¹ýÄÚÖõÄexecutorÊÇÔÚͬһ¸ö½ø³ÌÖе쬶øÆäËû×Ô¶¨ÒåµÄexecutorÊǶÀÁ¢µÄ½ø³Ì£¬executorºÍslaveÖ®¼äͨ¹ý½ø³Ì¼äͨÐÅ·½Ê½£¨ÍøÂç¶Ë¿Ú£©½»»¥¡£
Mesosͨ¹ýactorÄ£ÐÍ£¬¼ò»¯ÁË·Ö²¼Ê½ÏµÍ³µÄµ÷ÓÃÒÔ¼°²¢·¢±à³ÌµÄ¸´ÔÓ¶È£¬actorÖ®¼ä¶¼Í¨¹ýÏûÏ¢Ò첽ͨÐÅ£¬Ö»ÐèÒªÖªµÀ¶Ô·½µÄID¼´¿É£¬ÎÞÐèÁ˽â¶Ô·½ºÍ×Ô¼ºÊÇ·ñÔÚͬһ¸ö½ÚµãÉÏ¡£libprocess·â×°µÄactor
managerÖªµÀ½ÓÊÕ·½ÊDZ¾µØµÄactor»¹ÊÇÔ¶³ÌµÄactor£¬Èç¹ûÊÇÔ¶³ÌµÄÔòͨ¹ýÇëÇó½Ó¿Úת·¢ÏûÏ¢¡£libprocessÒ²·â×°ÁËÍøÂç²ã£¬´«Êä²ãʹÓõÄÊÇhttpÐÒ飬ʹÓ÷½¶Ô²»Í¬µÄÏûÏ¢×¢²á²»Í¬µÄhandler¼´¿É£¬Ò²Ö§³ÖhttpµÄ³¤ÂÖѯģʽ¶©ÔÄʼþ¡£mesosΪÁËÌá¸ßÏûÏ¢´«µÝ½âÎöЧÂÊ£¬ÏûÏ¢´«µÝÖ§³ÖjsonºÍprotobufÁ½ÖÖ¸ñʽ¡£
ÕâÖּܹ¹µÄºÃ´¦ÊÇMesosʡȥÁ˶ÔÏûÏ¢¶ÓÁеÄÒÀÀµ¡£Ò»°ãÇé¿öÏÂÕâÖÖ·Ö²¼Ê½ÏûÏ¢·Ö·¢ÏµÍ³¶¼ÐèÒªÏûÏ¢¶ÓÁлòÕßÖÐÐÄ´æ´¢µÄÖ§³Ö£¬±ÈÈçSaltʹÓõÄÊÇZeroMQ£¬KubenetesʹÓõÄÊÇEtcd£¬¶øMesosÔò²»ÒÀÀµÍⲿµÄ×ÊÔ´Ö§³Ö£¬Ö»Í¨¹ýactorÄ£Ð͵ÄÈÝ´í»úÖÆÀ´ÊµÏÖ¡£¶øÈ±µãÒ²ÊÇactor±¾ÉíµÄȱµã£¬ÒòΪÏûÏ¢¶¼ÊÇÒì²½µÄ£¬ÐèÒªactor´¦ÀíÏûÏ¢µÄ¶ªÊ§ÒÔ¼°³¬Ê±Âß¼£¬Mesos²»±£Ö¤ÏûÏ¢µÄ¿É¿¿Í¶µÝ£¬ÌṩµÄͶµÝ²ßÂÔÊÇ
¡°at-most-once¡±£¬actorÐèҪͨ¹ý³¬Ê±ÖØÊÔ»úÖÆ½â¾öÏûÏ¢¶ªÊ§µÄÎÊÌâ¡£²»¹ýÈκÎÐèÒªÔ¶³Ìµ÷Óõķֲ¼Ê½ÏµÍ³ÐèÒª´¦ÀíµÄÀàËÆµÄÎÊÌâ°É¡£
FrameworkµÄʵÏÖ½âÎö
´ÓÉÏÃæµÄ·ÖÎö¿ÉÒÔÁ˽⵽£¬FrameworkÔÚMesosÖаçÑÝ×ÅÖØÒªµÄ½ÇÉ«¡£Èç¹ûÄã×Ô¼ºÒª¿ª·¢Ò»¸ö·Ö²¼Ê½ÏµÍ³£¬´òËãÔËÐÐÔÚMesosÖУ¬¾ÍÐèÒª¿¼ÂÇ×Ô¼ºÊµÏÖÒ»¸öFramework¡£
MesosÌṩÁËÒ»¸öFrameworkµÄ»ù´¡¿â£¬µÚÈý·½Ö»ÐèҪʵÏÖscheduler£¬ºÍexecutorÁ½¸ö½Ó¿Ú¼´¿É¡£»ù´¡¿âÊÇÓÃc++ʵÏÖÁË£¬Í¨¹ýjniÌṩÁËjava°æ±¾£¬Í¨¹ýpythonµÄnative·½Ê½ÌṩÁËpython°æ±¾¡£¶øgolangµÄ°æ±¾ÊǶÀÁ¢¿ª·¢µÄ£¬Ã»ÓÐÒÀÀµc++¿â£¬´úÂë¼Ü¹¹±È½ÏÓÅÑÅ£¬ÏëÓÃgoʵÏÖactorµÄ¿ÉÒԲο¼¡£Õâ¸öFramework»ù´¡¿â£¨SchedulerDriverÒÔ¼°ExecutorDriverµÄʵÏÖ£©Ö÷Òª×öµÄÊÂÇé¾ÍÊÇʵÏÖÇ°ÃæÎÒÃÇÌáµ½µÄactorÄ£ÐÍ£¬ºÍmasterÒÔ¼°slave½»»¥£¬ÊÕµ½ÏûÏ¢ºó»Øµ÷Óû§×Ô¶¨ÒåµÄschedulerºÍexecutor¡£
ÏÂÃæÊÇjavaµÄScheduler½Ó¿Ú£º
public interface
Scheduler {
void registered(SchedulerDriver driver,
FrameworkID frameworkId,
MasterInfo masterInfo); void reregistered(SchedulerDriver driver,
MasterInfo masterInfo); //Õâ¸öÊÇ×îÖ÷ÒªµÄÒ»¸ö·½·¨£¬µ±ÏµÍ³ÓпÕÏÐ×ÊÔ´µÄʱºò£¬»áѯÎÊScheduler£¬
//ÊÇ·ñ½ÓÊÜ»òÕ߾ܾø¸ÃOffer¡£Èç¹û½ÓÊÜ£¬ÔòͬʱÐèÒª·âװʹÓøÃOfferµÄtaskÐÅÏ¢£¬µ÷ÓÃdriverÈ¥Ö´ÐС£
void resourceOffers(SchedulerDriver driver,
List<Offer> offers);
//Èç¹ûOffer±»È¡Ïû»òÕß±»±ðµÄFrameworkʹÓã¬Ôò»Øµ÷±¾·½·¨
void offerRescinded (SchedulerDriver driver,
OfferID offerId);
//¸ÃFrameworkÆô¶¯µÄtask״̬±ä»¯Ê±»Øµ÷¡£
void statusUpdate (SchedulerDriver driver, TaskStatus
status);
//×Ô¶¨ÒåµÄ¿ò¼ÜÏûÏ¢
void frameworkMessage (SchedulerDriver driver, ExecutorID
executorId, SlaveID slaveId,byte[]() data); void disconnected (SchedulerDriver driver); void slaveLost (SchedulerDriver driver, SlaveID
slaveId); void executorLost (SchedulerDriver driver,ExecutorID
executorId, SlaveID slaveId, int status); void error (SchedulerDriver driver, String
message);
} |
MesosµÄFrameworkÊǶÀÁ¢ÓÚMesosϵͳµÄ£¬¾ßÌåµÄ²¿Êð·½Ê½£¬ÒÔ¼°¸ß¿ÉÓö¼ÐèÒªFramework×Ô¼º½â¾ö£¬ËùÒÔҪʵÏÖÒ»¸öÍ걸µÄ£¬¸ß¿ÉÓõÄFramework£¬¸´ÔÓ¶È»¹ÊÇͦ¸ßµÄ¡£ÁíÍâFramworkµÄ»úÖÆ±È½ÏÊʺÏÐèÒªÈÎÎñ·Ö·¢ÒÔ¼°µ÷¶ÈµÄ·Ö²¼Ê½ÏµÍ³£¬±ÈÈçHadoop£¬JenkinsµÈ¡£ÆäËûµÄ·Ö²¼Ê½Êý¾Ý¿â±ÈÈçCassandra£¬Mesos×öµÄÊÂÇéÊÇͨ¹ýSchedulerµ÷¶ÈCassandraExecutor²¿ÊðºÍ¹ÜÀí£¨°üÀ¨½ÚµãÉϵÄά»¤²Ù×÷£¬±ÈÈ籸·Ý£©Cassandra½Úµã£¬Ïêϸ¿É²Î¿´
¡£
ÁíÍâMesos Master±¾ÉíûÓг־û¯´æ´¢£¬ËùÓÐÊý¾Ý¶¼ÔÚÄÚ´æ£¬ÖØÆôºóÊý¾Ý»á¶ªÊ§¡£µ«»îÔ¾µÄFrameworkºÍSlave×¢²áʱ»á°Ñ×Ô¼ºµ±Ç°µÄ״̬·¢Ë͸øMaster£¬Masterͨ¹ýÕâÖÖ·½Ê½»Ö¸´Êý¾Ý¡£ËùÒÔÈç¹ûFrameworkÐèÒª³Ö¾Ã»¯TaskµÄÖ´ÐмǼ£¬ÐèÒª×Ô¼ºÊµÏֳ־û¯´æ´¢¡£
Mesos SlaveÌṩÁËrecoveryµÄ»úÖÆ£¬ÓÃÓÚʵÏÖSlave½ø³ÌÖØÆôºóµÄ»Ö¸´¡£Ä¬ÈÏÇé¿öÏ£¬Slave½ø³ÌÖØÆôºó£¬ºÍ¸Ã½ø³ÌÏà¹ØµÄexecutor/task¶¼»á±»É±µô£¬µ«Èç¹ûFrameworkÅäÖÿªÆôÁËcheckpointÉèÖã¬Ôò¸ÃFrameworkÏà¹ØµÄexecutor/taskÐÅÏ¢»á±»³Ö¾Ã»¯µ½´ÅÅÌÉÏ£¬ÓÃÓÚÖØÆôºóµÄrecovery¡£
Marathon
Marathon°´ÕÕ¹Ù·½µÄ˵·¨ÊǸö»ùÓÚMesosµÄ˽ÓÐPaaS¡£ËüʵÏÖÁËMesosµÄFramework£¬Ö§³Öͨ¹ýshellÃüÁîºÍDocker²¿ÊðÓ¦Óã¬ÌṩWeb½çÃæ£¬Ö§³Öcpu/mem£¬ÊµÀýÊýµÈ²ÎÊýÉèÖã¬Ö§³Öµ¥Ó¦ÓõÄscale£¬µ«²»Ö§³Ö¸´Ôӵļ¯Èº¶¨Òå¡£
Marathon±¾ÉíÊÇͨ¹ýScalaʵÏֵģ¬Ò²Ê¹ÓÃÁËactorÄ£ÐÍ¡£ËüÌṩÁËevent bus½Ó¿Ú£¬ÔÊÐíÆäËûÓ¦ÓÃͨ¹ý¼àÌýevent
busÀ´ÊµÏÖ¶¯Ì¬ÅäÖ㬱ÈÈçÇ°ÃæÌáµ½µÄmarathon-lb¡£
MarathonÓÉÓÚÊÇ»ùÓÚjvmµÄ£¬×öϵͳ°²×°°ü·Ö·¢ÂÔÂé·³£¬½á¹ûÈ˼ÒΪÁË·½±ãÖ±½Ó·Ö·¢ÁËÒ»¸ö70¶àMµÄshell½Å±¾¡£³õ¿´ÏÅÎÒÒ»Ìø£¬70¶àMµÄshellµÃд¶àÉÙÐУ¬½á¹û´ò¿ªÒ»¿´£¬javaµÄ¶þ½øÖÆjarµÄҲǶÔÚÀïÃæ¡£Õâµ¹Ò²ÊǸö°ì·¨¡£
Aurora
AuroraÊÔͼÓÃÒ»ÖÖ×Ô¶¨ÒåµÄÅäÖÃÓïÑÔÈ¥¶¨ÒåMesosÖ®ÉϵÄtaskÒÔ¼°Ë³Ðò¹ØÏµ£¬½â¾ö¸÷ÖÖ»·¾³µÄÒì¹¹ÎÊÌ⣬½µµÍÓÃshell½Å±¾µÄ¸´ÔÓ¶È¡£¿ÉÒÔÀí½âΪMesosÖ®ÉϵÄÒ»ÖÖÕ³ºÏ¼ÁÓïÑÔ£¬µØÎ»ÀàËÆÓÚSalt/AnsibleµÄyaml£¬Ö»²»¹ýMesos±¾Éíû֧³ÖÀàËÆµÄÅäÖÃÓïÑÔ£¬ÓÚÊÇAuroraͨ¹ýFrameworkµÄ·½Ê½À´Ö§³Ö¡£
MesosºÍKubernetes±È½Ï
MesosºÍKubernetesËäÈ»¶¼½è¼øÁËBorgµÄ˼Ï룬ÖÕ¼«Ä¿±êÀàËÆ£¬µ«½â¾ö·½°¸ÊDz»Í¬µÄ¡£MesosÓеãÏñÁª°îÖÆ£¬³ÐÈϸ÷°î£¨Framework£©µÄÖ÷Ȩ£¬µ«¸÷°îÈöÉÒ»²¿·Ö¹«ÓõĻúÖÆ³öÀ´ÓÉMesosÀ´ÊµÏÖ£¬×î´ó»¯µÄ¹²Ïí×ÊÔ´£¬Ìá¸ß×ÊÔ´ÀûÓÃÂÊ£¬FrameworkºÍMesosÊÇÏà¶Ô¶ÀÁ¢µÄ¹ØÏµ¡£¶øKubernetesÓеãÏñµ¥Ò»ÖÆ£¬´î½¨Ò»¸öͨÓÃµÄÆ½Ì¨£¬¾¡Á¿Ìá¹©È«ÃæµÄÄÜÁ¦£¨ÍøÂ磬´ÅÅÌ£¬Äڴ棬cpu£©£¬Öƶ¨Ò»¸ö¼¯ÈºÓ¦Óõ͍Òå±ê×¼£¬Èκθ´ÔÓµÄÓ¦Óö¼¿ÉÒÔ°´Õոñê×¼¶¨Òå²¢ÒÔ×îСµÄ±ä¸ü³É±¾ÔÚÉÏÃæ²¿ÊðÔËÐУ¬Ö÷ÒªµÄ±ä¸üÐèÇóÒ²ÊÇÒòΪÏëÏíÊÜKubernetesµÄ¶¯Ì¬ÉìËõÄÜÁ¦´øÀ´µÄ¡£ËùÒÔMesos¾¡Á¿×öµÄ±È½ÏÉÙ£¬¶øKubernetes¾¡Á¿×öµÄ±È½Ï¶à¡£Mesos¶¨ÒåÊÇDCOSµÄkernel£¬µ«OSµÄkernel¾ßÌåÓ¦¸Ã³Ðµ£ÄÄЩְÔð£¬Ïà¹ØÕùÂÛÒ²´ÓÀ´Ã»Í£Ö¹¹ý¡£
Ïà¶ÔÀ´ËµKubernetesʹÓÃÒª±È½ÏÈÝÒ×Щ£¬¶øMesos¸üÁé»îЩ£¬ÐèÒª×öµÄ¶¨ÖÆ¿ª·¢¹¤×÷Ò²±È½Ï¶à¡£ÄÃÇ°ÃæÌáµ½µÄcassandraÀ´±È½Ï£¬cassandra-mesosµÄʵÏֺܸ´ÔÓ£¬¶øKubernetesµÄcassandraÀý×ÓÔòÖ»ÓÐÒ»¸öÀ࣬¾ÍÊÇʵÏÖÁËKubernetesSeedProvider£¬Í¨¹ýKubernetesµÄ·þÎñ·¢ÏÖ»úÖÆÑ°ÕÒcassandraµÄseed½Úµã¡£µ±È»MesosÉϵÄcassandra¿ÉÒÔͨ¹ýMesos·¢Ëͱ¸·ÝµÈ¹ÜÀíÈÎÎñ£¬¶øKubernetes²»ÌṩÈÎÎñת·¢µÄ¹¦ÄÜ£¬ÕâÀàÐèÇóÓû§¿ÉÒÔͨ¹ýkubectlµÄexec·½·¨ÊµÏÖ¡£´ÓÕâ¸öÀý×ÓÒ²´óÖÂÄÜÃ÷°×¶þÕߵIJîÒìµã¡£
KubernetesϵÄKubernetes on MesosÏîÄ¿µÄÄ¿µÄ¾ÍÊÇÀûÓÃMesosµÄÕâ¸öÌØÐÔ£¬ÊµÏÖKubernetesºÍMesosÉÏµÄÆäËûFramework¹²Ïí×ÊÔ´¡£Èç¹ûÏëÁ˽âKubernetesµÄ¸ü¶à×ÊÁÏ¿ÉÒÔ¿´ÎÒÈ¥ÄêдµÄKubernetes
¼Ü¹¹Ç³Îö¡£ |