• idou老师教你学istio 31:Istio-proxy的report流程


    Istio-proxy的report主要是将envoy采集到的连接attributes的信息上报给控制面的mixer,它的入口在request_handler_impl.cc文件中,这里需要打开enable_mixer_report开关,提取出report_data中的attribute信息,调用SendReport发送出去。

    0408_1.jpg

    SendReport的实现在client_context_base.cc中,跳转到client_impl中。

    0408_2.jpg

    client_impl.cc跳转到report_batch中。

    0408_3.jpg

    report_batch.cc中会在batch_compresser中添加attributes作为向mixer发起的请求report,这里的Add是一个bool,判断是否所有的上次请求所用的attributes都在本次的report的请求中。 

    0408_4.jpg

    attribute_compressor.cc中定义了Add的方法,利用CompressByDict更新压缩过的attributes &pb,如果在这一步压缩的变量全部都在,那么compressbydict的返回值是true,会更新pb。如果有的attributes的变量不存在,那么返回值为false,不更新pb,回到上一张图。

    0408_5.jpg

    Compress是否成功在下图的函数中判断,这里用到的是delta_update,在delta_update.cc中,也就是增量更新:

    0408_6.jpg

    具体是最先Start(),这里会设置set变量prev_set_,将之前一次report的map中的index存入,然后调用Check,利用MessageDifferencer::Equals比较同一个index的值是否更新,如果更新就会刷新prev_map_中index对应的value。如果是新的index,那么会作为一个新的元素插入prev_map_,每次执行一次index的比较,就会删去prev_set_中当前的index值,直到执行完成所有的当前上报的attributes的index:

    0408_7.jpg

    对于index的对应的value有更新,或者新的index的情况,Check返回false,会根据对应的值的属性添加到对应的map中,更新pb的值。

    0408_8.jpg

    当所有的attributes都for循环完成之后,这个函数会返回delta_update.Finish(),也就是prev_set_中的index是否全部存在。如果全部存在都会被erase掉,此时set为空,返回true,证明CompressByDict完成。如果有值没有上报,那么返回值为false。

    现在我们会回到report_batch.cc中,现在request已经压缩完成如果Add值为true,这时会判断compressor的尺寸是否大于等于预设的batch的大小,或是否超过了上报的max_batch_time,如果两者其中一个满足条件,就会调用FlushWithLock()像mixer发送report。

    如果add的值为false,那么会将这条request之前的已经压缩好的信息调用FlushWithLock()先发送出去,然后再执行一遍Add操作,本次的request会在下一次report中发送出去。

    0408_9.jpg

    max_batch_entries和max_batch_time_ms的默认值在options.h中,分别为1000条和1000ms。

    0408_10.jpg

    在FlushWithLock中:

    0408_11.jpg

    attribute_compressor.cc中用Finish()把dictionary中的message_words_添加上。

    0408_12.jpg0408_13.jpg

    需要report的信息完整之后,reset_compressor,调用transport_把report的request发送给mixer,并且删除response。

    如果发送的信息状态!ok,返回ERROR提示"Mixer Report failed with: ",并且将GlobalDictionary()重置大小。

    相关服务请访问:https://support.huaweicloud.com/cce/index.html?utm_content=cce_helpcenter_2019

  • 相关阅读:
    wordpress ImetaWeblog
    日期替换,正则
    大文本编辑程序
    [C#]使用 Bing Sharp 來做 Bing 翻譯[转]
    uc密码产生方式。
    运行时出现 “child”不是此父级的子控件。
    太犯傻了。。。。
    mysql中使用rand函数得到随机整数
    混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集。
    获取 httponly 的 cookie
  • 原文地址:https://www.cnblogs.com/CCE-SWR/p/10669869.html
Copyright © 2020-2023  润新知