写在前面的话:
本篇文章作为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