Kyligence AI 服务 - 让大模型完成准确、可靠的数值计算和回答! 立即了解更多
AI 数智助理
Kyligence Zen Kyligence Zen
Kyligence Enterprise Kyligence Enterprise
Kyligence Turbo Kyligence Turbo
指标平台解决方案
OLAP 解决方案
行业解决方案
客户总览
金融
零售
制造
医药
其他
云平台
BI
寻求合作
资源
Kyligence Enterprise
Kyligence Zen
培训
Apache Kylin
Byzer
Gluten
博客
关于
市场活动
在过去,由于粗粒度缓存过期策略和外部缓存的缺乏,查询缓存在 Kylin 中的使用效率不高。由于激进的缓存过期策略,有用的缓存经常被不必要地清理。因为查询缓存存储在本地服务器中,它们因而不能在服务器之间共享。同时,由于本地缓存的大小限制,并不是所有有用的查询结果都可以被缓存。
针对这些不足,我们使用签名检查来实现新的查询缓存失效策略,并引入 memcached 作为 Kylin 的分布式缓存,使 Kylin 服务器能够在服务器之间共享缓存。同时添加 memcached 服务器来扩展分布式缓存也是很容易的。
这些功能由 eBay Kylin 团队提出和开发,在此非常感谢他们的贡献。
memcached 是一种自由开放的开源、高性能、分布式内存对象缓存系统。它适用于数据库调用、API 调用或页面渲染等场景,可以用于任意数据(字符串、对象)的内存内键值存储。它简单而有效。它的简单设计便于快速部署,并令其易于开发,并解决了面临大数据缓存的许多问题。它的 API 适用于大多数流行语言。
通过 Kylin-2898,Kylin 使用 memcached 作为分布式缓存服务,并使用EHCache作为本地缓存服务。当在 applicationcontext.xml中配置 RemotelocalFailOvercacheManager 时,对于每个缓存 PUT/GET 操作,Kylin 将首先检查分布式缓存服务是否可用,只有当分布式缓存服务不可用时,才会使用本地缓存服务。
首先,多个查询服务器可以共享查询缓存。对于每个 Kylin 服务器而言,更少的 JVM 内存会被占用,这有助于降低 GC 压力。其次,由于 memcached 是集中式的,所以在多个 Kylin 进程中将避免重复的缓存条目。第三, memcached 具有较大的尺寸和易于扩展的特性,这将有助于减少由于内存容量有限而导致的不得不丢弃掉有用缓存条目的可能性。
为了处理节点故障和扩展 memcached 集群,作者引入了一种一致性散列策略以顺利解决这类问题。Ketama 实现了一致的散列算法,这意味着您可以从 memcached 池中添加或删除服务器,而不需要对所有键进行完全重新映射。详细信息可以在 Ketama consistent hash strategy (https://www.last.fm/user/RJ/journal/2007/04/10/rz_libketama_-_a_consistent_hashing_algo_for_memcache_clients) 中查阅。
当前,Kylin 使用 SQL 作为缓存键,当 Kylin 收到查询请求时,如果缓存中存在结果,它将直接返回缓存的结果,且不需要查询 HBASE。当有新的片段生成或现有片段刷新时,所有相关的缓存结果都需被清除。对于一些经常被建构的 Cube,如流式 Cube (NRT Streaming 或 Real-time OLAP),缓存未击中的情况会急剧增加,这可能会降低查询性能。
对于 Kylin cube 而言,大多数历史 Segment 是不可更改的除非 segment 被更新,对历史 Segment 的相同查询出来的结果应该始终相同,所以历史 Segment 的缓存也不应该被清除。为此,我们决定实现 Segment 级别缓存,它是现有前端缓存的一个补充,其思路与操作系统中的 Level1/Level2 缓存相似。
当前,对于无效的查询缓存, CacheService 将调用cleanDataCache 或 cleanAllDataCache。这两种方法都将清除所有查询缓存,这非常低效且不必要。在生产环境中,每天有数百个 Cubing 作业,这意味着查询缓存将被每几分钟全部清除一次。我们接着介绍了一种新的基于签名检查的查询缓存失效策略。
基本思路如下:
将 SQLResponse(也就是查询结果)放入缓存时,我们为每个 SQLResponse 计算签名。要计算 SQLResponse 的签名,我们选择 Cube 最后一次构建发生的时间及其 Segment 作为 SignatureCalculator 的输入。
当从缓存获取 SQL 对应的 SQLResponse 时,首先检查签名是否一致。如果不一致,则此缓存值已过期并将被删除。
关于签名的计算,如下所示:
1. ComponentSignature 的 toString 将把成员变量连接到字符串中;如果 ComponentSignature具有其他 ComponentSignature作为成员,则将递归地计算 toString。
2. toString的返回值将输入 SignatureCalculator,SignatureCalculator 将经过MD5编码后的字符串作为查询缓存签名的标识符。
如果不同的客户端同时向 Kylin 发送相同的请求, 在首条查询结果返回前,对于任一查询而言,就不能找到他们的查询缓存,因此必须分别计算它们。更糟糕的是,如果这些查询很复杂,它们通常会花费很长的时间,这样 Kylin 能利用缓存查询的机会就会更少;同时也会耗费大量的计算资源,使得查询服务器性能变差并对 Hbase 集群造成损害
为了减少重复的复杂查询的影响,我们可以阻塞随后出现的查询,等到首个查询获取到结果再统一返回。如果同时出现重复的复杂查询,此延迟策略会尤其有用。要使其生效,您应该将 kylin.query.lazy-query-enabled 设置为 true。另外,您也可以选择将kylin.query.lazy-query-waiting-timeout-milliseconds 设置为您认为后来的重复查询需要的等待时间,以匹配您的场景。
过去,查询缓存被分为两部分,一部分用于存储成功的查询结果,另一部分用于储存失败的查询结果,它们会分别失效。这看起来不是一个很好的分类标准,因为它不够细粒度。在引入查询缓存签名后,我们没有理由将它们分开,因此删除了异常缓存。
为了做好准备,您需要安装 memcached,可以参考 https://github.com/memcached/memcached/wiki/Install. 接着您需要修改kylin.properties 和 applicationContext.xml.
kylin.cache.memcached.hosts=10.1.2.42:11211kylin.query.cache-signature-enabled=truekylin.query.lazy-query-enabled=truekylin.metrics.memcached.enabled=truekylin.query.segment-cache-enabled=true
kylin.cache.memcached.hosts=10.1.2.42:11211
kylin.query.cache-signature-enabled=true
kylin.query.lazy-query-enabled=true
kylin.metrics.memcached.enabled=true
kylin.query.segment-cache-enabled=true
<cache:annotation-driven/><bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" p:configLocation="classpath:ehcache-test.xml" p:shared="true"/><bean id="remoteCacheManager" class="org.apache.kylin.cache.cachemanager.MemcachedCacheManager"/><bean id="localCacheManager" class="org.apache.kylin.cache.cachemanager.InstrumentedEhCacheCacheManager" p:cacheManager-ref="ehcache"/><bean id="cacheManager" class="org.apache.kylin.cache.cachemanager.RemoteLocalFailOverCacheManager"/><bean id="memcachedCacheConfig" class="org.apache.kylin.cache.memcached.MemcachedCacheConfig"> <property name="timeout" value="500"/> <property name="hosts" value="${kylin.cache.memcached.hosts}"/></bean>
<cache:annotation-driven/>
<bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"
p:configLocation="classpath:ehcache-test.xml" p:shared="true"/>
<bean id="remoteCacheManager" class="org.apache.kylin.cache.cachemanager.MemcachedCacheManager"/>
<bean id="localCacheManager" class="org.apache.kylin.cache.cachemanager.InstrumentedEhCacheCacheManager"
p:cacheManager-ref="ehcache"/>
<bean id="cacheManager" class="org.apache.kylin.cache.cachemanager.RemoteLocalFailOverCacheManager"/>
<bean id="memcachedCacheConfig" class="org.apache.kylin.cache.memcached.MemcachedCacheConfig">
<property name="timeout" value="500"/>
<property name="hosts" value="${kylin.cache.memcached.hosts}"/>
</bean>
Kyligence MDX 支持创建层级结构。层级结构是基于维度的级别集合,可以显著提升数据分析人员的分析能力。此外,Kyligence MDX 还支持对指定的层级指定权重,方便您自定义成员值的汇总方式。
当订单与销售明细在不同的事实表,千笔订单商品数量如何计算?Kyligence Cloud + Kyligence MDX 三步实现跨事实表分析,带你利用数据更准确地洞察经营状态,如对比不同门店的同期销售状况!
数据分析日益增长的多样化需求 信息化时代之初,由于大部分员工缺乏大数据相关的技能和培训,分析和解释数据的话语权
数据网格(Data Mesh)是由 Thoughtworks 提出的一种数据域驱动的分析架构,其中数据被视为一
当前,云上部署正逐渐成为全球众多企业 IT 部署模式的新选择。而在国内,由于国家的监管需求,一些行业数据仍然被
1. Hadoop 知多少 对于大数据玩家而言,Hadoop 绝不陌生。Apache Hadoop 作为一个完
现代企业愈发需要利用海量数据的价值进行量化运营、辅助决策洞察,在线联机分析 OLAP(Online
Kylin 入选《上海市重点领域(金融类)“十四五”紧缺人才开发目录》 数字经济已成为全球增长新动
前言 大家都知道,数据分析项目从需求提出到最终交付要经历一个漫长的过程,需要进行数据源整合、指标定义、模型开发
400 8658 757
工作日:10:00 - 18:00
已有账号? 点此登陆
预约演示,您将获得
完整的产品体验
从数据导入、建模到分析的全流程操作演示。
行业专家解惑
与资深行业专家的交流机会,解答您的个性化问题。
请填写真实信息,我们会在 1-2 个工作日内电话与您联系。
全行业落地场景演示
涵盖金融、零售、餐饮、医药、制造等多个行业,最贴合您的业务需求与场景。
Data + AI 应用落地咨询
与资深技术专家深入交流,助您的企业快速落地 AI 场景应用。
立即预约,您将获得
精准数据计算能力:
接入高精度数值计算大模型服务,为您的企业级AI应用提供强大支持。
个性化业务场景解决方案:
量身定制的计算模型和数据分析服务,切实贴合您的业务需求和应用场景。
Data + AI 落地应用咨询:
与资深专家深入探讨数据和 AI 如何帮助您的企业加速实现应用落地,构建更智能的数据驱动未来。
申请体验,您将获得
体验数据处理性能 2x 加速
同等规模资源、同等量级数据、同一套数据处理逻辑,处理耗时下降一半
专家支持
试用部署、生成数据、性能对比各操作环节在线支持