首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Presto 设计与实现(五):自动配置

Presto 基于 Airlift 构建的分布式 SQL 查询引擎,在 Presto 中 Airlift 起着举足轻重的作用,如果 Presto 是座大厦,那么 Airlift 就是大厦的地基。

Airlift 是一个可配置的、开箱即用的工具包,帮助开发者提升工作效率,将精力专注于业务实现。Airlift 提供的工具众多,今天会从基础的 configuration、 bootstrap 和 concurrent 开始介绍。

1. configuration

通过注解的方式,将配置文件中的数据绑定到配置类中,Presto 节点启动时就是通过 configuration 模块加载 etc 目录下的 config.properties 文件,获取节点配置信息。

这里将 mysql 的连接信息 配置在文件 config.properties 中:

首先定义配置类,使用注解 @Config 绑定配置文件的属性:

编写 guice moudle 创建绑定关系:

实际集成:

输出结果:

2. bootstrap

对象生命周期管理,在 Presto 中用于 Hive、Druid、Hudi 和 Kudu 连接器的生命周期管理,主要目的就是在对象初始化和销毁时执行特定的处理逻辑,注解 @PostConstruct 标识初始化方法,@PreDestroy 标识销毁算法。

创建 module 建立绑定:

实际集成:

输出结果:

3. concurrent

本质上是对通过 Executors 创建出来的线程池进行了容错处理,同时还提供了线程安全的缓存工具类。

这里主要介绍 BoundedExecutor 线程池,在 Presto 中出场次数最多,主要作用是让线程数量在一个合理的、可伸缩的安全范围之内,内部实现原理:

明确设置线程的最大数量,消除 Executors.newCachedThreadPool 中最大线程数等于 Integer.MAX_VALUE 的风险;

内部维护 ConcurrentLinkedQueue 缓冲队列;

任务会直接放入缓冲队列中,如果队列中任务数未达到预设的最大数量,执行队列首个任务,执行完毕首位移除;如果已经等于或大于最大数量直接退出。

额外介绍 ThreadLocalCache 线程安全的缓存工具类,该类保证缓存的永远是最新数据,使用时需要指定缓存数量和键对应值的获取逻辑:

  • 发表于:
  • 原文链接https://page.om.qq.com/page/O1rC-FVkc02R7onYuDYP3k8Q0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券