<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Skywalking on dongxiaoqi's Blog</title><link>https://notion.dongxiaoqi.top/tags/skywalking/</link><description>Recent content in Skywalking on dongxiaoqi's Blog</description><generator>Hugo -- gohugo.io</generator><language>zh-CN</language><copyright>CC BY-NC-SA 4.0</copyright><lastBuildDate>Fri, 14 Apr 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://notion.dongxiaoqi.top/tags/skywalking/index.xml" rel="self" type="application/rss+xml"/><item><title>skyWalking自动建表-逻辑梳理(SkyWalking automatic table creation - logical sorting)</title><link>https://notion.dongxiaoqi.top/p/skywalking%E8%87%AA%E5%8A%A8%E5%BB%BA%E8%A1%A8-%E9%80%BB%E8%BE%91%E6%A2%B3%E7%90%86skywalking-automatic-table-creation-logical-sorting/</link><pubDate>Fri, 14 Apr 2023 00:00:00 +0000</pubDate><guid>https://notion.dongxiaoqi.top/p/skywalking%E8%87%AA%E5%8A%A8%E5%BB%BA%E8%A1%A8-%E9%80%BB%E8%BE%91%E6%A2%B3%E7%90%86skywalking-automatic-table-creation-logical-sorting/</guid><description>&lt;h1 id="skywalking自动建表-逻辑梳理"&gt;skyWalking自动建表-逻辑梳理
&lt;/h1&gt;
 &lt;blockquote&gt;
 &lt;p&gt;使用skyWalking后，发现我们不需要创建表，启动skywalking会自动创建表，遂研究官方源码，感觉oap-server设计的自动建表功能很强大，并进行逻辑梳理，仅供参考。&lt;/p&gt;

 &lt;/blockquote&gt;

 &lt;blockquote&gt;
 &lt;p&gt;源码地址：https://github.com/apache/skywalking.git&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="架构图"&gt;架构图
&lt;/h2&gt;&lt;p&gt;&lt;img alt="架构图" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://notion.dongxiaoqi.top/images/21004_BB80B109DFA242108A20A5B0D3C8CF91"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Agent（代理/探针） ：负责从应用中，无侵入式的收集，并通过HTTP或者gRPC方式发送数据到SkyWalking OAP 服务器；&lt;/li&gt;
&lt;li&gt;SkyWalking OAP ：负责接收Agent发送的Tracing数据信息，然后进行分析(Analysis Core)，存储到外部存储器(Storage)，最终提供查询(Query)功能；&lt;/li&gt;
&lt;li&gt;Storage：Tracing数据存储，目前支持ES、MySQL、Sharding Sphere、TiDB、H2等多种存储器，SkyWalking开发团队自己的生产环境采用ES为主；&lt;/li&gt;
&lt;li&gt;SkyWalking UI：负责提供控制台，查看链路等等；&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="建表逻辑"&gt;建表逻辑
&lt;/h2&gt;&lt;p&gt;1、启动时执行脚本&lt;/p&gt;
&lt;p&gt;&lt;img alt="1.启动脚本" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://notion.dongxiaoqi.top/images/21004_0441844F58B8448CBD663ACA3EDEB866"&gt;&lt;/p&gt;
&lt;p&gt;2、脚本内容指向：org.apache.skywalking.oap.server.starter.OAPServerStartUp&lt;/p&gt;
&lt;p&gt;&lt;img alt="2.脚本内容" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://notion.dongxiaoqi.top/images/21004_823CA8E3885247ACB1CE72F99EE0250B"&gt;&lt;/p&gt;
&lt;p&gt;3、进行初始化操作&lt;/p&gt;
&lt;p&gt;&lt;img alt="3.初始化操作" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://notion.dongxiaoqi.top/images/21004_0907217894CC46C1B6C3C1FE999034C5"&gt;&lt;/p&gt;
&lt;p&gt;4、moduleManager#init方法调用BootstrapFlow#start方法，BootstrapFlow#start调用ModuleProvider#start方法&lt;/p&gt;
&lt;p&gt;&lt;img alt="4.bootstrapflow-start" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://notion.dongxiaoqi.top/images/21004_A0E2F70F3AFE41BC885F3B51EABE94FE"&gt;&lt;/p&gt;
&lt;p&gt;5、抽象类ModuleProvider#start方法实现类JDBCStorageProvider#start方法，此方法开始调用 modelInstaller#start方法用于重写列，使语法兼容MySQL，然后调用StorageModels#addModelListener方法用于把创建或修改表的操作通知到ModelInstaller#whenCreating&lt;/p&gt;
&lt;p&gt;&lt;img alt="5.listener-creating" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://notion.dongxiaoqi.top/images/21004_5751FE29D8EE4D108666372353E5824C"&gt;&lt;/p&gt;
&lt;p&gt;6、收到通知后，ModelInstaller#whenCreating开始建表操作&lt;/p&gt;
&lt;p&gt;&lt;img alt="6.when-creating" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://notion.dongxiaoqi.top/images/21004_6C8DC72785E3442AB54F0B44A8BD1C21"&gt;&lt;/p&gt;
&lt;p&gt;7、方法内部依次进行 1.创建/更新 表字段；2.添加/更新 字段索引；3.创建/更新 关联表的字段及索引&lt;/p&gt;
&lt;p&gt;&lt;img alt="7.create-table" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://notion.dongxiaoqi.top/images/21004_E5214527BC9947FB9C349B439542124F"&gt;&lt;/p&gt;
&lt;p&gt;8、为表添加ID字段、普通字段；添加字段类型及长度；执行建表SQL&lt;/p&gt;
&lt;p&gt;&lt;img alt="8.execute-sql" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://notion.dongxiaoqi.top/images/21004_67844556EC704862B8B3DE0A30AD8B1A"&gt;&lt;/p&gt;
&lt;p&gt;9、添加字段类型，进行字段长度转换&lt;/p&gt;
&lt;p&gt;&lt;img alt="9.column-definition" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://notion.dongxiaoqi.top/images/21004_4B0BAC51DFE6456E94C9F80C79E751C8"&gt;&lt;/p&gt;
&lt;p&gt;p{text-indent:2em}&lt;/p&gt;</description></item></channel></rss>