其他
最佳实践 | 揭秘 eBay 如何将 Kylin 迁移至 K8s
本文是不久前 Kylin on Kubernetes 在 eBay 的实践的进阶篇!主要讲述了当前 Kylin 在 eBay 的架构,以及迁移到 Kubernetes 后的使用情况,同时详细讲解了 Kylin 迁移到 Kubernetes 的完整方案和实践的技术细节。
*文末有福利,不要错过哦😉
Kylin 在 eBay 内部概况和架构
共有 258 个 Cube,使用了 410TB 存储空间; 每天大约有 400 个 Job 被构建; 日查询量达到 1 百万; 查询的平均时间在 1.15s 左右。
顶部是 BI 工具和 webapp 流量入口; 左边是数据源,包括 Hive 和 Kafka 数据源; 左下方是构建引擎,由 Map Reduce Engine 和 Spark Engine 组成; 右上方是 Kylin 的存储,现在主要是 HBase,但在升级到 v3.1 之后,会尝试用 Parquet 来作为存储; 右下角是依赖的一些服务,比如 elasticsearch 和 kibana 等。
上方的 memcached 主要用于 Kylin 查询缓存,其次也用于存放用户登陆后的 session id; 下方则是用来管理 memcached 的工具:memcached-admin。这部分还包括了另外两个 Pod,一个是 cronjob,主要做一些清理和备份的工作;另一个是集成的查询性能分析系统 jaeger tracing,它提供了友好的界面,当在代码中注入片段时,可以方地看到各个阶段的用时,因此更容易去定位问题。同时,这里还使用了 Filebeat 作为 Kylin Pod 里的一个 side-car container,它可以把 Kylin 的 Log 发到 elasticsearch 做持久化,方便我们集中查看所有 Kylin Pod 的 Log。
Kylin on K8s 实践
memcached
https://hub.docker.com/_/memcachedmemcached-admin
https://hub.docker.com/r/jacksoncage/phpmemcachedadminjaeger-tracing
https://hub.docker.com/r/jaegertracing/jaeger-collector
https://hub.docker.com/r/jaegertracing/jaeger-queryfilebeat
https://hub.docker.com/_/filebeat
docker build -t {url}/{folder}/{image-name}:{image-version}
docker login
docker push {url}/{folder}/{image-name}:{image-version}
Namespace Service Pod Volumes Deployment StatefulSet ConfigMaps Secrets
展望
加强自动化故障切换机制
例如当时考虑到性能,我们在 kylin-receiver 中挂载了本地磁盘,但在 Kubernetes 的节点的磁盘出现故障时,需要人工干预去删除本地磁盘后,才能避免 Pod 被再次分配到原来出故障的节点;更好地压缩镜像大小
镜像越小,上传和下载的速度越快,使用轻量化的 Linux 镜像(例如 alpine, busybox 等)作为基础镜像也许是更好的选择;统一部署实现资源隔离
把需要的服务,部署文件和配置整合成一个 Kubernetes 的 List 来统一部署,从而创建各个团队自己的 Kylin Cluster来实现资源隔离;自动伸缩
繁忙时自动扩展,闲暇时自动收缩 Kylin 的资源。
他们都在用 Apache Kylin