Ignite 源码分析(二)

2020-10-08  本文已影响0人  走在成长的道路上

JDBCRedisMemcached服务端类图

client processor 类图

CacheJdbcPojoStoreFactory 通常是在 bean 文件中进行定义,如下:

<!-- 定义集群外 h2 数据库访问方式 -->
<bean id="storeDataSource" class="org.h2.jdbcx.JdbcDataSource">
    <property name="url" value="jdbc:h2:tcp://localhost/store-benchmark/h2-benchmark"/>
    <property name="user" value="sa"/>
</bean>

<!-- 定义集群基础配置 -->
<bean class="org.apache.ignite.configuration.IgniteConfiguration">
    <property name="peerClassLoadingEnabled" value="false"/>

    <property name="cacheConfiguration">
        <list>
        <bean class="org.apache.ignite.configuration.CacheConfiguration">
            <property name="name" value="atomic"/>

            <property name="cacheMode" value="PARTITIONED"/>

            <property name="atomicityMode" value="ATOMIC"/>

            <property name="cacheStoreFactory">
            <!-- 定义后端数据库配置 -->
                <bean class="org.apache.ignite.cache.store.jdbc.CacheJdbcPojoStoreFactory">
                    <property name="dataSourceBean" value="storeDataSource"/>
                    <property name="dialect">
                       <bean class="org.apache.ignite.cache.store.jdbc.dialect.H2Dialect"/>
                    </property>
                </bean>
            </property>
        </bean>
        </list>
    </property>

    <property name="loadBalancingSpi">
        <bean class="org.apache.ignite.spi.loadbalancing.roundrobin.RoundRobinLoadBalancingSpi">
        <property name="perTask" value="false"/>
        </bean>
    </property>

    <property name="localHost" value="127.0.0.1"/>
</bean>

IgniteH2Indexing 中使用 QueryParser 中的 GridSqlQuerySplitter 将接受到的 SQL 请求按分区进行封装为执行指令,通过 GridMapQueryExecutorGridReduceQueryExecutor 来进行分布式查询及结果的聚合操作。

启动过程

IgniteKernel 中存在一系列的 XXXProcessor 类的启动过程,其中就包含 ClientListenerProcessor (用于 JDBC 实现),及 IgniteRestProcessor (用于 Redis,Memcached,Http 等Rest 接口实现)

startProcessor(createComponent(IGridClusterStateProcessor.class, ctx));
startProcessor(new IgniteAuthenticationProcessor(ctx));
// 缓存相关代码
startProcessor(new GridCacheProcessor(ctx));
// 后端数据库服务
startProcessor(new GridQueryProcessor(ctx));
// JDBC 访问方式
startProcessor(new ClientListenerProcessor(ctx));
startProcessor(createServiceProcessor());
startProcessor(new GridTaskSessionProcessor(ctx));
startProcessor(new GridJobProcessor(ctx));
startProcessor(new GridTaskProcessor(ctx));
startProcessor((GridProcessor)SCHEDULE.createOptional(ctx));
// http,redis,memcached 等访问方式
startProcessor(createComponent(IgniteRestProcessor.class, ctx));
startProcessor(new DataStreamProcessor(ctx));
startProcessor(new GridContinuousProcessor(ctx));
startProcessor(new DataStructuresProcessor(ctx));
startProcessor(createComponent(PlatformProcessor.class, ctx));
startProcessor(new DistributedMetaStorageImpl(ctx));
startProcessor(new DistributedConfigurationProcessor(ctx));
startProcessor(new DurableBackgroundTasksProcessor(ctx));
上一篇下一篇

猜你喜欢

热点阅读