zl程序教程

您现在的位置是:首页 >  Java

当前栏目

Envoy的lib库拓扑关系

2023-02-18 15:41:15 时间

写在前面的话:​

本篇文章作为Envoy代码的学习笔记,整理了好久,方便后续读Envoy代码做参考使用。如果你不打算这方面深度学习,建议看完前面几张图之后就可以了或者直接不要看这篇文章,因为它的拓扑关系太复杂了。

正文:​

Envoy使用的bazel进行编译,这种编译工具由Workspace和buid构成,通过一层层的lib库嵌套,最终编译成可执行文件。

下面是作者按照编译的依赖关系整理的lib库调用关系链。

1.第一层:

envoy_main_entry_lib

2.第二层:

platform_impl_lib

envoy_main_common_lib

这个库属于核心库,依赖很多,后面主要来展示它的调用关系。

3.第三层

3.1“热启动相关库”,包括

hot_restart_nop_lib和hot_restart_lib两个库:

hot_restart_lib,

里面又包括hot_restarting_parent

和hot_restarting_child两个:

3.2server_lib

这个库在config_validation里面,该文件夹下面库还包括:

dns_lib, cluster_manager_lib, api_lib和admin_lib这几个相关库。

3.2.1.dns_lib

3.2.2.cluster_manager_lib

3.2.3.api_lib

3.2.4.admin_lib

3.3.google_grpc_context_lib

3.4.process_wide_lib和

compiler_requirements_lib:

process_wide_lib

compiler_requirements_lib

3.5.os_sys_calls_lib

os_sys_calls_lib

3.5.1.os_sys_calls_interface

3.5.2.threadsafe_singleton

3.6.envoy_common_lib

3.7.perf_annotation_lib

3.7.1thread_lib

3.8/source/common/stats:stats_lib未完

3.8.1histogram_lib

3.8.1.1metric_impl_lib

3.8.1.2//source/common/common: matchers_lib

3.8.2tag_extractor_lib

3.8.2.1//envoy/stats:stats_interface

3.8.2.2//source/common/common:regex_lib

3.8.3//source/common/stats:utility_lib

3.8.3.1//source/common/stats:symbol_table_lib

​3.8.4//envoy/server:options_interface

3.8.5//source/common/common:perf_annotation_lib

4.第四层

主要从envoy_common_lib这个核心库展开来介绍。

4.1//source/common/event:libevent_lib

4.2//source/common/stats:thread_local_store_lib

4.2.1.":tag_utility_lib"

4.2.2.tag_producer_lib

​4.2.3stats_matcher_lib

4.2.4":scope_prefixer_lib",

4.2.5":null_text_readout_lib",

4.2.6":null_gauge_lib",

4.2.7null_counter_lib

4.2.8":allocator_lib",

4.3//source/server:drain_manager_lib

4.3.1"//envoy/runtime:runtime_interface

4.3.2"//envoy/server:instance_interface",

4.3.2.1admin_interface

4.3.2.2configuration_interface

4.3.2.3//envoy/server/overload:overload_manager_interface

4.4//source/common/stats:utility_lib

5.第五层

主要来自于:​admin_interface

5.1//envoy/http:filter_interface

5.1.1//envoy/access_log:access_log_interface

5.1.2:codec_interface

5.1.2.1header_map_interface

5.1.2.2//envoy/stream_info:stream_info_interface"

//envoy/network:socket_interface

5.2//envoy/upstream:cluster_manager_interface

主要来自于:configuration_interface

5.2.1//envoy/config:grpc_mux_interface

5.2.2//envoy/config:subscription_factory_interface

5.2.3//envoy/grpc:async_client_manager_interface

5.2.4//envoy/http:conn_pool_interface

5.2.5//envoy/secret:secret_manager_interface

5.3//source/common/common:minimal_logger_lib

来自于:

//source/common/stats:symbol_table_lib

5.4 //source/common/protobuf:utility_lib

来自//source/common/common:regex_lib

5.4.1//source/common/protobuf:message_validator_lib

5.4.2//source/common/protobuf:protobuf

5.4.3//envoy/api:api_interface

5.4.4//envoy/stats:stats_interface

5.4.5//source/common/runtime:runtime_features_lib

5.4.6//source/common/config:api_type_oracle_lib

5.4.7//source/common/config:version_converter_lib

5.4.8//source/common/protobuf:visitor_lib

5.5

来自//source/common/common: matchers_lib

5.5.1//source/common/common: regex_lib

5.5.2//source/common/config: metadata_lib

5.5.2.1//envoy/registry

5.5.2.2​//envoy/event:dispatcher_interface

6.1//source/common/protobuf:utility_lib

6.2//envoy/network:transport_socket_interface"

6.3//envoy/network:connection_handler_interface

6.3.1//envoy/network:connection_balancer_interface

6.3.2//envoy/network::listener_interface

6.3.2.1udp_packet_writer_handler_interface

6.3.2.2connection_interface