±à¼ÍƼö: |
±¾ÎÄÖ÷Òª½éÉÜÁËÕûÌå¼Ü¹¹ÒÔ¼°KubeedgeʵÏÖÔÀí×îºó¶ÔKubeEdge½øÐÐÏê½â£¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚ²©¿ÍÔ°£¬ÓÉ»ðÁú¹ûÈí¼þAlice±à¼ÍƼö¡£ |
|
Kubeedge³ýÁËÔÚkubernetesµÄ·½Ãæ×öÁ˸÷ÖÖÒ첽ͨÐÅͨµÀ£¬±£ÕÏofflineºóµÄÒµÎñÁ¬ÐøÐÔÖ®Í⣻»¹¶¨ÒåÁËһϵÁеÄÉ豸³éÏó£¬ÓÃÀ´¹ÜÀí±ßÔµÉ豸¡£¶øÇÒ£¬Æäv1.0°æ±¾Õý³¯×űßÔµ¶Ë·þÎñÍø¸ñ£¬ÒÔ¼°º¯Êýʽ¼ÆËãµÈ·½Ïò·¢Õ¹¡£
¼Ü¹¹

ÕûÌå¼Ü¹¹Í¼±È½ÏÃ÷ÁË£¬ÔÚ²»¿¼ÂÇedgesiteµÄÇé¿öÏ£¬Æä¼Ü¹¹·ÖΪÁËÔÆ¶ËºÍ±ßÔµ¶Ë¡£Æäʵ¿ÉÒÔÀí½âΪkubernetesµÄ¹ÜÀí²àºÍkubelet½Úµã²à£¨¶ÔÓ¦edge¶Ë£©¡£µ«ÊÇÇë×¢Ò⣬ÕâÀïµÄ³¡¾°ÊDZßÔµ¼ÆË㣬Òâζ×Åedge¶ËµÄÍøÂç»·¾³ÄÑÒÔ±£ÕÏ¡£
ÔÆ±ßͨÐÅ
ÓÚÊǾÍÑÜÉú³öÁËcloud¶ËµÄcloud HubÓëedge¶ËµÄEdge Hub¡£ÕâÁ½¸öÄ£¿éÖ®¼äͨ¹ýwebsocket»òÕßquicͨÐÅ£¬Ï൱ÓÚ½¨Á¢ÁËÒ»Ìõµ×²ãͨÐÅËíµÀ£¬¹©k8sºÍÆäËûÓ¦ÓÃͨÐÅ¡£µ±È»£¬Ê¹ÓÃʲôÐÒéͨÐŲ»ÊÇÖØµã£¬ÖصãÊÇÈçºÎ±£Õϵ±×ÅÖ®¼äµÄÁ´Â·¶¼ÎÞ·¨±£ÕϵÄʱºò£¬ÒµÎñ²»Êܵ½Ó°Ï죬Õâ¾ÍÊÇMetaManagerµÄÒª½â¾öµÄÎÊÌâÁË¡£
CloudHubÇ°ÃæÌáµ½cloud¶ËµÄcloudHub¾ÍÊÇÒ»¸öËíµÀµÄserver¶Ë£¬ÓÃÓÚ´óÁ¿µÄedge¶Ë»ùÓÚwebsocket»òÕßquicÐÒéÁ¬½ÓÉÏÀ´£»Ã»´í£¬Õâ»õ²ÅÊÇÕý¶ù°Ë¾µÄ¶þ´«ÊÖ£¬Ã¿Ìì¾Í¸ºÔðÀƤÌõ¡£
EdgeHubλÓÚedge¶ËÔËÐУ¬ÊÇËíµÀµÄclient¶Ë£¬¸ºÔ𽫽ÓÊÕµ½µÄÐÅϢת·¢µ½¸÷edge¶ËµÄÄ£¿é´¦Àí£»Í¬Ê±½«À´×Ô¸öedge¶ËÄ£¿éµÄÏûϢͨ¹ýËíµÀ·¢Ë͵½cloud¶Ë¡£
±ßÔµ¶Ë
MetaManagerMetaManagerÄ£¿éºó¶Ë¶ÔÓ¦Ò»¸ö±¾µØµÄÊý¾Ý¿â£¨sqlLite£©£¬ËùÓÐÆäËûÄ£¿éÐèÒªÓëcloud¶ËͨÐŵÄÄÚÈݶ¼»á±»±£´æµ½±¾µØDBÖÐÒ»·Ý£¬µ±ÐèÒª²éѯÊý¾Ýʱ£¬Èç¹û±¾µØDBÖдæÔÚ¸ÃÊý¾Ý£¬¾Í»á´Ó±¾µØ»ñÈ¡£¬ÕâÑù¾Í±ÜÃâÁËÓëcloud¶ËÖ®¼äƵ·±µÄÍøÂç½»»¥£»Í¬Ê±£¬ÔÚÍøÂçÖжϵÄÇé¿öÏ£¬±¾µØµÄ»º´æµÄÊý¾ÝÒ²Äܹ»±£ÕÏÆäÎȶ¨ÔËÐУ¨±ÈÈçÄãµÄÖÇÄÜÆû³µ½øÈ뵽ûÓÐÎÞÏßÐźŵÄËíµÀÖУ©£¬ÔÚͨÐŻָ´Ö®ºó£¬ÖØÐÂͬ²½Êý¾Ý¡£
Edged֮ǰÌáµ½¹ýkubernetesµÄkubelet£¬ËüÏ൱ÓÚk8sµÄºËÐÄ¡£Õâ¿éÆäʵ¼òµ¥×öÁËһЩ²Ã¼ô£¬È¥µôһЩÓò»ÉϵŦÄÜ£¬È»ºó¾Í³ÉΪEdgedÄ£¿é£¬¸ÃÄ£¿é¾ÍÊDZ£ÕÏcloud¶ËÏ·¢µÄpodÒÔ¼°Æä¶ÔÓ¦µÄ¸÷ÖÖÅäÖᢴ洢£¨ºóÐø»áÖ§³Öº¯Êýʽ¼ÆË㣩Äܹ»ÔÚedge¶ËÎȶ¨ÔËÐУ¬²¢ÔÚÒì³£Ö®ºóÌṩ×Ô¶¯¼ì²â¡¢¹ÊÕϻָ´µÈÄÜÁ¦¡£µ±È»£¬ÓÉÓÚk8s±¾ÉíÔËÐÐʱµÄ·¢Õ¹£¬¸ÃÄ£¿é¶ÔÓ¦Ö§³Ö¸÷ÖÖCRIÓ¦¸ÃÒ²±È½ÏÈÝÒס£
EventBus/ServiceBus/MappperÇ°Ãæ½²µ½µÄÄ£¿é¶¼Óëk8sÖ±½Ó»ò¼ä½ÓÏà¹Ø£¬½ÓÏÂÀ´ËµÏÂÓëÉ豸£¨»òÕßËµÕæÕýIOTÒµÎñ£©Ïà¹ØµÄÉ豸¹ÜÀí²à¡£ÍⲿÉ豸µÄ½ÓÈ뵱ǰ֧³ÖMQTTºÍRest-API£¬ÕâÀï·Ö±ð¶ÔÓ¦EventBusºÍServiceBus¡£EventBus¾ÍÊÇÒ»¸öMQTT
brokerµÄ¿Í»§¶Ë£¬Ö÷Òª¹¦ÄÜÊǽ«edge¶Ë¸÷Ä£¿éͨÐŵÄmessageÓëÉ豸mapperÉϱ¨µ½MQTTµÄevent×öת»»µÄ×é¼þ£»¶øServiceBus¾ÍÊǶÔÓ¦µ±ÍⲿÊÇRest-API½ÓÈëʱµÄת»»×é¼þ¡£Ëµµ½ÕâÀ¾ÍÓбØÒªÌáÒ»ÏÂMQTT
broker£¬Æäʵ¸ã»¥ÁªÍøµÄ»ù±¾¶¼ÓùýÀàËÆÓÚrabbitmq¡¢activeMQÖ®ÀàµÄÏûÏ¢Öмä¼þ£¬ÆäʵËûÃǾÍÖ§³ÖMQTTÐÒéÀ²£¨¿ÉÒÔÀí½âΪAMQPµÄ¾«¼ò°æ£©¡£IOTµÄ¸÷ÖÖÉ豸¿ÉÄÜÖ±½ÓÖ§³ÖMQTT£¬µ«ÓеÄÖ»Ö§³ÖÀ¶ÑÀ»òÕ߯äËû½ü³¡Í¨ÐŵÄÐÒ顣û¹ØÏµ£¬Mappper¿ÉÒÔʵÏÖ½«¸÷ÖÖÐÒéת»»Îª¶ÔMQTTµÄ¶©ÔÄÓë·¢²¼£¬´Ó¶øÊµÏÖÓëedge¶ËµÄͨÐÅ¡£µ±È»£¬ServiceBus¶ÔÓ¦¾ÍÊÊÓÃÓÚÖ§³ÖhttpÐÒéµÄ·þÎñÁË¡£
DeviceTwinedge¶Ë×îºó¾ÍÊ£ÏÂÒ»¸öDeviceTwinÄ£¿éÁË£¬ÒªÀí½âÕâ¸öÃû´Ê£¬¾ÍµÃÌáÒ»ÏÂÊý×ÖÂÏÉúÕâ¸ö¸ÅÄî¡£ÕâÀïÀ´¿Æ»Ãһϣ¬¼ÙÉèÈËÀàҪʵÏÖǬÀ¤´óÅ²ÒÆ£¬µ«ÊÇÓеãÄѶȵÄÊÇ£¬ÕâÏÂÊÇÒª°ÑÄãÒÆµ½»ðÐÇÉÏ¡£Ôõô°ì£¿ÕâÀïÓÐÒ»¸ö½â¾ö·½°¸£ºÔÚµØÇòÉÏͨ¹ýɨÃèÄãµÄËùÓÐÉúÎïÐÅÏ¢£¬Éú³ÉÓµÓÐÄãÍêÕûÉúÎïÌØÕ÷µÄÊý¾Ý°üÖ®ºó£¬È»ºóÔÚµØÇòÉϾͰÑÄã»ÙÃðÁË¡£ÔÙ½«ÃèÊöÄãÍêÕûÐÅÏ¢µÄÊý¾Ý°üͨ¹ýµç²¨¹âËÙ·¢Ë͵½»ðÐÇÉÏ£¬ÈûðÐǵÄÉ豸ÔÙʹÓýÓÊÕµ½µÄÉúÎïÌØÕ÷Ôì³öÒ»¸öÄã¡£ÊDz»ÊÇͦ¿ÉÐУ¡_
»Ø¹ýÍ·À´£¬ÎÒÃÇҪ˵µÄÊý×ÖÂÏÉú¾ÍÊÇÄǸöÓÃÀ´´«Êäµ½»ðÐǵÄÓÃÓÚÃèÊöÄãËùÓÐÉúÎïÌØÕ÷µÄÊý¾Ý°ü£»µ±È»£¬ÕâÀï¶ÔÓ¦¾ÍÊǽÓÈëÉ豸ÐÅÏ¢¡£ËùÒÔ£¬DeviceTwin¾ÍÊǽ«ÕâЩÐÅÏ¢±£´æµ½±¾µØDBÖУ¬²¢´¦Àí»ùÓÚcloud¶ËµÄ²Ù×÷À´ÐÞ¸ÄdeviceµÄijЩÊôÐÔ£¨Ò²¾ÍÊDzÙ×÷É豸£©£»Í¬Ê±£¬½«É豸»ùÓÚeventBusÉϱ¨µÄ״̬ÐÅϢͬ²½µ½±¾µØDBºÍcloud¶ËµÄÖмäÈË¡£
ÔÆ¶Ë
Controller
È»ºóÔÙ˵controller£¬Æäʵ׼ȷµÄ˵controllerÊǰüÀ¨ÁËÓÃÓÚedge¶ËÓëAPI-Serverͬ²½ÐÅÏ¢µÄedgeControllerÓëÓÃÓÚDeviceTwinÓëAPI-Serverͬ²½device
CRDÐÅÏ¢µÄdeviceController×é³É¡£ÕâÁ½¸öÄ£¿éÏà¶ÔÒ²±È½Ï¼òµ¥£¬ºóÃæ¾ßÌå½²½â¡£
¸÷¸öÄ£¿éʵÏÖ
±ßÔµ¶Ë
Èë¿ÚÓëbeehive
beehiveÄ£¿éÔÚÕû¸ökubeedgeÖаçÑÝÁ˷dz£ÖØÒªµÄ×÷Óã¬ËüʵÏÖÁËÒ»Ì×Module¹ÜÀíµÄ½Ó¿Ú£¬³ÌÐòÖи÷¸öÄ£¿éµÄÆô¶¯¡¢ÔËÐС¢Ä£¿é¼äµÄͨÐŵȶ¼ÊÇÓÉÆäͳһ·â×°¹ÜÀí¡£ÏÂͼÊÇkubeedgeµÄedge¶Ë´úÂëµÄmainÆô¶¯Á÷³Ì£¬ÕâÀïÉæ¼°µ½µÄmodules¾ÍÊÇÓÉbeehiveÌṩ¡£

¿ÉÒÔ¿´µ½£¬ÔÚ³õʼ»¯µÄʱºò£¬·Ö±ð¼ÓÔØÁ˸÷¸öedge¶ËmodulesµÄinitº¯Êý£¬ÓÃÀ´×¢²áÆämodulesµ½heehive¿ò¼ÜÖС£È»ºóÔÚcore.RunÖбéÀúÆô¶¯£¨StartModules£©¡£
ÁíÍ⣬ֵµÃÌá¼°µÄÊÇ£¬ÓÃÓÚÄ£¿é¼äͨÐÅ£¬·¢ËÍmessageµ½group/moduleµÄ¹¦ÄÜ£¬ÔÚbeehiveÖУ¬ÆäʵÊÇͨ¹ýchannelÀ´Í¨Ðŵġ£ÕâÒ²ÊÇgolangÍÆ¼öµÄgoroutine¼äͨÐŵķ½Ê½¡£
EdgeHub

ÖØµãÊÇÆô¶¯ÁËÁ½¸ögo routine£¬ÓÃÀ´ÊµÏÖÍùÁ½¸ö·½ÏòµÄÏûÏ¢½ÓÊպͷַ¢¡£ÕâÀïgo ehc.routeToEdge¶ÔÓ¦´ÓËíµÀ¶Ëµã½ÓÊÕcloud¶Ë·¢Íùedge¶ËµÄÏûÏ¢£¬È»ºóµ÷ÓÃehc.dispatch½âÎö³öÏûÏ¢µÄÄ¿±êmodule²¢»ùÓÚheehiveÄ£¿émodule¼äÏûÏ¢µÄͨÐÅ»úÖÆÀ´×ª·¢³öÈ¥¡£
ͬÀí£¬go ehc.routeToCloudʵÏÖ½«edge¶ËÏûÏ¢»ùÓÚËíµÀת·¢µ½cloud¶ËµÄcloudHubÄ£¿é´¦Àí¡£µ±È»£¬¸ÃÄ£¿éÖÐʵÏÖÁ˶Ôͬ²½ÏûÏ¢µÄresponseµÈµ½³¬Ê±´¦ÀíµÄÂß¼£¬µ±ÔÚδ³¬Ê±ÆÚ¼äÊÕµ½responseÏûÏ¢£¬»áת·¢µ½ÏûÏ¢·¢ËͶËÄ£¿é¡£±È½Ï±©Á¦µÄÊÇ£¬Ò»µ©·¢ËÍÏûÏ¢µ½cloudʧ°Ü£¬¸Ãgoroutine»áÍ˳ö£¬Í¨ÖªËùÓÐÄ£¿é£¬µ±Ç°Óëcloud¶ËÊÇδÁ¬½Ó״̬£¬È»ºóÖØÐ·¢ÆðÁ¬½Ó¡£
metaManagerÔÚÓëcloudµÄÁ¬½Ó¶Ï¿ªÆÚ¼ä£¬»áʹÓñ¾µØDBÖеÄÊý¾Ý£¬²»»á·¢ÆðÍùcloud¶ËµÄ²éѯ¡£
Edged

Õâ¿é»ù±¾Êǵ÷ÓÃkubeletµÄ´úÂ룬ʵÏֽ϶àµÄÊÇÆô¶¯Á÷³Ì¡£ÁíÍ⣬½«Ö®Ç°kubeletµÄclient×÷ΪfakeµÄ¼Ù½Ó¿Ú£¬×ª¶ø½«Êý¾Ý¶¼Í¨¹ýmetaClientÀ´´æ´¢Êý¾Ýµ½metaManager£¬´Ó¶ø´úÀí֮ǰֱ½Ó·ÃÎÊapi-serverµÄ²Ù×÷¡£Õâ¿éµÄѧϰ¿ÉÒԲο¼Ö®Ç°·ÖÎökubelet¼Ü¹¹µÄһƪÎÄÕÂKubeletÔ´Âë¼Ü¹¹¼ò½é¡£
ÕâÀï²îÒ컯µÄÒ»¿é´úÂëÔÚe.syncPodµÄʵÏÖ£¬Í¨¹ý¶ÁÈ¡metaManagerºÍEdgeControllerµÄpodÈÎÎñÁÐ±í£¬À´Ö´ÐжԱ¾µØpodµÄ²Ù×÷¡£Í¬Ê±£¬ÕâЩpod¹ØÁªµÄconfigmapºÍsecretÒ²»áËæ×Å´¦ÀípodµÄ¹ý³Ì¶øÒ»²¢´¦Àí¡£¶ÔpodµÄ²Ù×÷Ò²ÊÇ»ùÓÚÒ»¸ö²Ù×÷Àà±ðµÄqueue£¬±ÈÈçe.podAddWorkerRun¾ÍÆô¶¯ÁËÒ»¸öÓÃÓÚÏû·ÑÌí¼ÓpodµÄqueueµÄgoroutine¡£ÍⲿµÄ·â×°»ù±¾¾ÍÕâÑù£¬ÄÚ²¿Íêȫͨ¹ýÒýÓÃkubeletÔÉúµÄ°üÀ´´¦Àí¡£
MetaManager

´Ó´úÂë¼Ü¹¹¿´ÆðÀ´£¬¸ÃÄ£¿é±È½Ï¼òµ¥£¬Ê×ÏÈÔÚÍâ²ã°´ÕÕÒ»¶¨ÖÜÆÚ¸ø×Ô¼º·¢ËÍÏûÏ¢£¬´¥·¢¶¨Ê±Í¬²½pod״̬µ½cloud¶Ë¡£ÁíÍ⣬ÔÚmainLoopÖÐÆô¶¯Ò»¸ö¶ÀÁ¢µÄgoroutine½ÓÊÕÍⲿÏûÏ¢£¬²¢Ö´Ðд¦ÀíÂß¼¡£
´¦ÀíÂß¼»ùÓÚÏûÏ¢ÀàÐÍ·ÖÀ࣬·Ö±ð°üÀ¨£º
cloud¶Ë·¢ÆðµÄÔö¡¢É¾¡¢²é¡¢¸Ä
edge¶ËÄ£¿é·¢ÆðµÄ²éѯÇëÇó£¨Ç°ÃæÌáµ½£¬µ±×´Ì¬ÎªdisconnectµÄʱºò²»·¢Æðremote²éѯ£©
cloud¶Ë·µ»ØµÄ²éѯÏìÓ¦µÄ½á¹û
edgeHub·¢À´µÄÓÃÓÚ¸üÐÂÓëcloudHub¼ûÁ¬½Ó״̬µÄÏûÏ¢
×Ô¼º¸ø×Ô¼º·¢Ë͵쬶¨ÆÚͬ²½edge¶Ëpod״̬µ½cloud¶ËµÄÏûÏ¢
º¯Êýʽ¼ÆËãÏà¹ØµÄÏûÏ¢
ÖØµãÀ´ËµÔöɾ²é¸Ä£¬ÄÃÌí¼Ó¾ÙÀý¡£µ±½ÓÊÕµ½ÒªÌí¼Óij¸ö×ÊԴʱ£¬»á½«×ÊÔ´½âÎö³öÀ´£¬×éÖ¯³ÉΪkey¡¢type¡¢valueµÄÈýÔª×飬ÒÔÒ»ÖÖÀàËÆÓÚÄ£ÄâNoSQLµÄ·½Ê½±£´æµ½±¾µØµÄSqlLiteÊý¾Ý¿âÖС£ÕâÑù±£´æµÄÄ¿µÄÒ²ÊÇΪÁË·½±ã¿ìËÙ¼ìË÷ºÍÔöɾ¡£±£´æÍêÖ®ºó£¬ÐèÒª¶ÔÓ¦·¢ËÍresponseÏûÏ¢µ½ÇëÇóÏûÏ¢µÄÔ´Ä£¿é¡£
EventBusÓëServiceBus

EventBus
eventBusÓÃÓÚ¶Ô½ÓMQTT BrokerÓëbeehive£¬MQTT brokerÓм¸ÖÖÆô¶¯Ä£Ê½£¬´Ó´úÂëʵÏֵĽǶȷÖΪ£º
1.ʹÓÃÄÚǶMQTT broker
2.ʹÓÃÍⲿMQTT broker
ÔÚÄÚǶMQTT brokerģʽÏ£¬eventBusÆô¶¯ÁËgolangʵÏÖµÄbroker°ügomqttÓÃÀ´×÷ΪÍⲿMQTTÉ豸µÄ½ÓÈ룬¾ßÌåÓ÷¨Çë²Î¿¼ÆägithubÏîÄ¿Ê×Ò³¡£Á½ÖÖģʽÏÂeventBus¶¼×öÁËһЩ¹²ÐԵIJÙ×÷£¬¾ßÌå°üÀ¨£º
1.Ïòbroker¶©ÔĹØ×¢µÄtopic£¬ÈçÏ£º
SubTopics = []string{
"$hw/events/upload/#",
"$hw/events/device/+/state/update",
"$hw/events/device/+/twin/+",
"$hw/events/node/+/membership/get",
"SYS/dis/upload_records",
}
2.µ±½ÓÊÕµ½¶ÔÓ¦µÄeventʱ£¬´¥·¢»Øµ÷º¯ÊýonSubscribe
3.»Øµ÷º¯ÊýÖУ¬¶Ôevent×öÁ˼òµ¥µÄ·ÖÀ࣬·Ö±ð·¢Ë͵½²»Í¬µÄÄ¿µÄµØ£¨DeviceTwin»òEventHub£©
ËùÓÐ $hw/events/device/+/twin/+ºÍ $hw/events/node/+/membership/gettopic
µÄevent·¢Ë͵½DeviceTwin£¬ÆäËûµÄeventÖ±½Ó·¢Ë͵½EventHubÔÙͬ²½µ½Cloud¶Ë¡£
µ±È»£¬¸Ã²¿·ÖÒ²°üÀ¨ÁË´´½¨¿Í»§¶Ë£¬ÍùMQTT broker·¢²¼eventsµÄ½Ó¿Ú£¬ÕâÀï¾Í²»Õ¹¿ªÁË¡£
ServiceBus
ServiceBusÆô¶¯Ò»¸ögoroutineÀ´½ÓÊÜÀ´×ÔbeehiveµÄÏûÏ¢£¬È»ºó»ùÓÚÏûÏ¢ÖдøµÄ²ÎÊý£¬Í¨¹ýµ÷ÓÃhttp
client½«ÏûϢͨ¹ýREST-API·¢Ë͵½±¾µØ127.0.0.1ÉϵÄÄ¿±êAPP¡£ÕâÏ൱ÓÚÒ»¸ö¿Í»§¶Ë£¬¶øAPPÊÇÒ»¸öhttp
Rest-API server£¬ËùÓеIJÙ×÷ºÍÉ豸״̬¶¼ÐèÒª¿Í»§¶Ëµ÷ÓýӿÚÀ´Ï·¢ºÍ»ñÈ¡¡£
DeviceTwin

DeviceTwin°üº¬Ò»Ï¼¸¸ö²¿·ÖµÄ¹¦ÄÜ£º
Êý¾Ý´æ´¢·½Ã棬½«É豸Êý¾Ý´æ´¢µ½±¾µØ´æ´¢sqlLite£¬°üÀ¨ÈýÕÅ±í£ºdevice¡¢deviceAttrºÍdeviceTwin¡£
´¦ÀíÆäËûÄ£¿é·¢Ë͵½twin moduleµÄÏûÏ¢£¬È»ºóµ÷Óà dtc.distributeMsgÀ´´¦ÀíÏûÏ¢¡£ÔÚÏûÏ¢´¦ÀíÂß¼ÀïÃæ£¬ÏûÏ¢±»·ÖΪÁËËĸöÀà±ð£¬²¢·Ö±ð·¢Ë͵½ÕâËĸöÀà±ðµÄactionÖ´Ðд¦Àí£¨Ã¿Ò»¸öÀà±ðÓÖ°üº¬¶à¸öaction£©£ºmembershipdevicecommunicationtwin
ÓÉÓÚÕâ¸ö²¿·ÖºÍÉ豸¸ü½ôÃÜÏà¹Ø£¬ÎªºÎÒª·Ö׿¸¸öÀà±ð£¬¶¼ÊÇÈçºÎ³éÏó£¬Õâ¿éµÄÀí½â·½Ã滹²»¹»Í¸³¹£¬ÎÒÃÇÔÝʱֻ¹Ø×¢ÆäÖ÷ÒµÎñÂß¼£¬¹Ù·½Îĵµ¶ÔÕâ¿éÓбȽÏÏêϸµÄÃèÊödevicetwin¡£
ÔÆ¶Ë
Èë¿Ú

ÕâÀïÖØµã¹Ø×¢ÔÚinitÖмÓÔØÁËcloudHub¡¢controller£¨Ò²¾ÍÊÇedgeController£©ºÍdevicecontrollerÈý¸ö²¿·Ö¡£È»ºóºÍedge¶ËÒ»Ñù£¬¶¼ÊÇbeehiveµÄÌ×·£¬µ÷ÓÃStartModulesÀ´Æô¶¯ËùÓеÄÄ£¿é¡£
CloudHub

handler.WebSocketHandler.ServeEventÔÚwebsocket serverÉϽÓÊÕбßÔµnodeµÄÁ¬½Ó£¬È»ºóΪÐÂnode·ÖÅächannel
queue¡£ÔÙ½øÒ»²½½«ÏûÏ¢½»¸ø¸ºÔðÄÚÈݶÁдµÄÂß¼´¦Àí¡£
channelq.NewChannelEventQueueΪÿһ¸ö±ßÔµnodeά»¤ÁËÒ»¸ö¶ÔÓ¦µÄchannel
queue£¨ÕâÀïĬÈÏÓÐ10¸öÏûÏ¢µÄ»º´æ£©£¬È»ºóµ÷ÓÃgo q.dispatchMessage À´½ÓÊÕÓÉcontroller·¢Ë͵½clouHubµÄÏûÏ¢£¬»ùÓÚÏûÏ¢ÄÚÈݽâÎöÆäÄ¿µÄnode£¬È»ºó½«ÏûÏ¢·¢Ë͵½node¶ÔÓ¦µÄchannelÅŶӴ¦Àí¡£
clouHubµÄºËÐÄÂß¼°üÀ¨ÕâÁ½²¿·Ö£¬¶ÁºÍд£º
Ç°Ãæ½²µ½£¬ÐèÒª·¢Ë͵½±ßÔµnodeµÄÏûÏ¢»á·¢Ë͵½ÁËnode¶ÔÓ¦µÄchannel¶ÓÁÐÉÏ£¬ÕâÀïͨ¹ýhandler.WebSocketHandler.EventWriteLoopÔÚchannelÖжÁÈ¡µ½£¬²¢¸ºÔð»ùÓÚËíµÀ·¢ËÍ´¦Àí£¨ÕâÀïÒ²ºÜ¶àÅжϣ¬±ÈÈçÈç¹ûÕÒ²»µ½¶ÔÓ¦µÄnode½Úµã£¬»òÕ߸Ãnode½ÚµãΪoffline״̬µÈ¶¼»áÖÕÖ¹·¢ËÍ£©¡£
ÁíÒ»·½Ã棬handler.WebSocketHandler.EventReadLoopº¯Êý´ÓËíµÀÉ϶ÁÈ¡À´×ÔÓÚedge¶ËµÄÏûÏ¢£¬È»ºó½«ÏûÏ¢·¢Ë͵½controllerÄ£¿é´¦Àí£¨Èç¹ûÊÇkeepaliveµÄÐÄÌøÏûÏ¢Ö±½ÓºöÂÔ£©¡£
Èç¹ûcloudHubÍùnode·¢ËÍÏûϢʧ°Ü£¬¾Í»á´¥·¢EventHandlerµÄCancelNode²Ù×÷£»Èç¹û½áºÏedgeHub¶ËµÄÐÐΪµÄ»°£¬ÎÒÃÇÖªµÀedgeHub»áÖØÐ·¢Æðµ½cloud¶ËµÄÐÂÁ¬½Ó£¬È»ºóÖØÐÂ×ßÒ»±éͬ²½Á÷³Ì¡£
Controller£¨EdgeController£©

controllerµÄºËÐÄÂß¼ÊÇupstreamºÍdownstream¡£
upstream½ÓÊÕÓÉbeehive·¢Ë͵½controllerµÄÏûÏ¢£¬È»ºó»ùÓÚÏûÏ¢×ÊÔ´ÀàÐÍ£¬Í¨¹ýgo
uc.dispatchMessageת·¢µ½²»Í¬µÄµÄgoroutine´¦Àí¡£ÕâÀï°üÀ¨nodeStatus¡¢podStatus¡¢queryConfigMap¡¢querySecret¡¢queryService¡¢queryEndpointsµÈ£»¸÷ÖÖÀà±ðµÄ²Ù×÷¶¼Êǵ÷ÓÃk8sµÄclient´úÂëÀ´½«½Úµã״̬дµ½API-Server¡£
downstreamͨ¹ýµ÷ÓÃk8s client´úÂëÀ´¼àÌý¸÷×ÊÔ´µÄ±ä»¯Çé¿ö£¬±ÈÈç¶ÔÓÚpodÊÇͨ¹ý dc.podManager.EventsÀ´¶ÁÈ¡ÏûÏ¢£¬È»ºóµ÷ÓÃdc.messageLayer.Send½«ÏûÏ¢·¢Ë͵½edge¶Ë´¦Àí¡£ÕâÀïҲͬupstream£¬°üÀ¨pod¡¢configmap¡¢secret¡¢nodes¡¢servicesºÍendpointsÕâЩ×ÊÔ´¡£
DeviceController

deviceControllerͬedgeController£¬Ö»ÊÇÆä¹ØÐĵÄ×ÊÔ´²»ÔÙÊÇk8sµÄworkloadµÄ×Ó×ÊÔ´£¬¶øÊÇΪdevice¶¨ÒåµÄCRD£¬°üÀ¨£ºdeviceºÍdeviceModel¡£ÓÉÓÚÖ÷ÒªÂß¼¶¼Í¨edgeControler£¬ÕâÀï²»ÔÙ×öÏêϸ½éÉÜ¡£
|