Fluid 给数据弹性一双隐形的翅膀 -- 自定义弹性伸缩

简介: 弹性伸缩作为 Kubernetes 的核心能力之一,但它一直是围绕这无状态的应用负载展开。而 Fluid 提供了分布式缓存的弹性伸缩能力,可以灵活扩充和收缩数据缓存。 它基于 Runtime 提供了缓存空间、现有缓存比例等性能指标, 结合自身对于 Runtime 资源的扩缩容能力,提供数据缓存按需伸缩能力。

头图.png

作者 | 
车漾 Fluid 社区 Commiter
谢远东 Fluid 社区 Commiter
来源 | 阿里巴巴云原生公众号

导读:弹性伸缩作为 Kubernetes 的核心能力之一,但它一直是围绕这无状态的应用负载展开。而 Fluid 提供了分布式缓存的弹性伸缩能力,可以灵活扩充和收缩数据缓存。 它基于 Runtime 提供了缓存空间、现有缓存比例等性能指标, 结合自身对于 Runtime 资源的扩缩容能力,提供数据缓存按需伸缩能力。

背景

随着越来越多的大数据和 AI 等数据密集应用开始部署和运行在 Kubernetes 环境下,数据密集型应用计算框架的设计理念和云原生灵活的应用编排的分歧,导致了数据访问和计算瓶颈。云原生数据编排引擎 Fluid 通过数据集的抽象,利用分布式缓存技术,结合调度器,为应用提供了数据访问加速的能力。

1.png

弹性伸缩作为 Kubernetes 的核心能力之一,但它一直是围绕这无状态的应用负载展开。而 Fluid 提供了分布式缓存的弹性伸缩能力,可以灵活扩充和收缩数据缓存。它基于 Runtime 提供了缓存空间、现有缓存比例等性能指标, 结合自身对于 Runtime 资源的扩缩容能力,提供数据缓存按需伸缩能力。

这个能力对于互联网场景下大数据应用非常重要,由于多数的大数据应用都是通过端到端流水线来实现的。而这个流水线包含以下几个步骤:

  1. 数据提取:利用 Spark,MapReduce 等大数据技术对于原始数据进行预处理。
  2. 模型训练:利用第一阶段生成特征数据进行机器学习模型训练,并且生成相应的模型。
  3. 模型评估:通过测试集或者验证集对于第二阶段生成模型进行评估和测试。
  4. 模型推理:第三阶段验证后的模型最终推送到线上为业务提供推理服务。

2.png

可以看到端到端的流水线会包含多种不同类型的计算任务,针对每一个计算任务,实践中会有合适的专业系统来处理(TensorFlow,PyTorch,Spark, Presto);但是这些系统彼此独立,通常要借助外部文件系统来实现把数据从一个阶段传递到下一个阶段。但是频繁的使用文件系统实现数据交换,会带来大量的 I/O 开销,经常会成为整个工作流的瓶颈。

而 Fluid 对于这个场景非常适合,用户可以创建一个 Dataset 对象,这个对象有能力将数据分散缓存到 Kubernetes 计算节点中,作为数据交换的介质,这样避免了数据的远程写入和读取,提升了数据使用的效率。但是这里的问题是临时数据缓存的资源预估和预留。由于在数据生产消费之前,精确的数据量预估是比较难满足,过高的预估会导致资源预留浪费,过低的预估会导致数据写入失败可能性增高。还是按需扩缩容对于使用者更加友好。我们希望能够达成类似 page cache 的使用效果,对于最终用户来说这一层是透明的但是它带来的缓存加速效果是实实在在的。

我们通过自定义 HPA 机制,通过 Fluid 引入了缓存弹性伸缩能力。弹性伸缩的条件是当已有缓存数据量达到一定比例时,就会触发弹性扩容,扩容缓存空间。例如将触发条件设置为缓存空间占比超过 75%,此时总的缓存空间为 10G,当数据已经占满到 8G 缓存空间的时候,就会触发扩容机制。

下面我们通过一个例子帮助您体验 Fluid 的自动扩缩容能力。

前提条件

推荐使用 Kubernetes 1.18 以上,因为在 1.18 之前,HPA 是无法自定义扩缩容策略的,都是通过硬编码实现的。而在 1.18 后,用户可以自定义扩缩容策略的,比如可以定义一次扩容后的冷却时间。

具体步骤

1. 安装 jq 工具方便解析 json。

在本例子中我们使用操作系统是 centos,可以通过 yum 安装 jq。

yum install -y jq

2. 下载、安装 Fluid 最新版。

git clone https://github.com/fluid-cloudnative/fluid.git
cd fluid/charts
kubectl create ns fluid-system
helm install fluid fluid

3. 部署或配置 Prometheus。

这里通过 Prometheus 对于 AlluxioRuntime 的缓存引擎暴露的 Metrics 进行收集,如果集群内无 prometheus:

$ cd fluid
$ kubectl apply -f integration/prometheus/prometheus.yaml

如集群内有 prometheus,可将以下配置写到 prometheus 配置文件中:

scrape_configs:- job_name: 'alluxio runtime'metrics_path: /metrics/prometheuskubernetes_sd_configs:- role: endpointsrelabel_configs:- source_labels: [__meta_kubernetes_service_label_monitor]regex: alluxio_runtime_metricsaction: keep- source_labels: [__meta_kubernetes_endpoint_port_name]regex: webaction: keep- source_labels: [__meta_kubernetes_namespace]target_label: namespacereplacement: $1action: replace- source_labels: [__meta_kubernetes_service_label_release]target_label: fluid_runtimereplacement: $1action: replace- source_labels: [__meta_kubernetes_endpoint_address_target_name]target_label: podreplacement: $1action: replace

4. 验证 Prometheus 安装成功。

$ kubectl get ep -n kube-system  prometheus-svc
NAME             ENDPOINTS        AGE
prometheus-svc   10.76.0.2:9090   6m49s
$ kubectl get svc -n kube-system prometheus-svc
NAME             TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
prometheus-svc   NodePort   172.16.135.24   <none>        9090:32114/TCP   2m7s

如果希望可视化监控指标,您可以安装 Grafana 验证监控数据,具体操作可以参考文档。

3.png

5. 部署 metrics server。

检查该集群是否包括 metrics-server,执行kubectl top node有正确输出可以显示内存和 CPU,则该集群 metrics server 配置正确。

kubectl top node
NAME                       CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
192.168.1.204   93m          2%     1455Mi          10%
192.168.1.205   125m         3%     1925Mi          13%
192.168.1.206   96m          2%     1689Mi          11%

否则手动执行以下命令:

kubectl create -f integration/metrics-server

6. 部署 custom-metrics-api 组件。

为了基于自定义指标进行扩展,你需要拥有两个组件:

  • 第一个组件是从应用程序收集指标并将其存储到 Prometheus 时间序列数据库。
  • 第二个组件使用收集的度量指标来扩展 Kubernetes 自定义 metrics API,即 k8s-prometheus-adapter。

第一个组件在第三步部署完成,下面部署第二个组件。

如果已经配置了custom-metrics-api,在 adapter 的 configmap 配置中增加与 dataset 相关的配置:

apiVersion: v1
kind: ConfigMap
metadata:name: adapter-confignamespace: monitoring
data:config.yaml: |rules:- seriesQuery: '{__name__=~"Cluster_(CapacityTotal|CapacityUsed)",fluid_runtime!="",instance!="",job="alluxio runtime",namespace!="",pod!=""}'seriesFilters:- is: ^Cluster_(CapacityTotal|CapacityUsed)$resources:overrides:namespace:resource: namespacepod:resource: podsfluid_runtime:resource: datasetsname:matches: "^(.*)"as: "capacity_used_rate"metricsQuery: ceil(Cluster_CapacityUsed{<<.LabelMatchers>>}*100/(Cluster_CapacityTotal{<<.LabelMatchers>>}))

否则手动执行以下命令:

kubectl create -f integration/custom-metrics-api/namespace.yaml
kubectl create -f integration/custom-metrics-api

注意:因为 custom-metrics-api 对接集群中的 Prometheous 的访问地址,请替换 prometheous url 为你真正使用的 Prometheous 地址。

检查自定义指标:

$ kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1" | jq
{"kind": "APIResourceList","apiVersion": "v1","groupVersion": "custom.metrics.k8s.io/v1beta1","resources": [{"name": "pods/capacity_used_rate","singularName": "","namespaced": true,"kind": "MetricValueList","verbs": ["get"]},{"name": "datasets.data.fluid.io/capacity_used_rate","singularName": "","namespaced": true,"kind": "MetricValueList","verbs": ["get"]},{"name": "namespaces/capacity_used_rate","singularName": "","namespaced": false,"kind": "MetricValueList","verbs": ["get"]}]
}

7. 提交测试使用的 Dataset。

$ cat<<EOF >dataset.yaml
apiVersion: data.fluid.io/v1alpha1
kind: Dataset
metadata:name: spark
spec:mounts:- mountPoint: https://mirrors.bit.edu.cn/apache/spark/name: spark
---
apiVersion: data.fluid.io/v1alpha1
kind: AlluxioRuntime
metadata:name: spark
spec:replicas: 1tieredstore:levels:- mediumtype: MEMpath: /dev/shmquota: 1Gihigh: "0.99"low: "0.7"properties:alluxio.user.streaming.data.timeout: 300sec
EOF
$ kubectl create -f dataset.yaml
dataset.data.fluid.io/spark created
alluxioruntime.data.fluid.io/spark created

8. 查看这个 Dataset 是否处于可用状态。

可以看到该数据集的数据总量为 2.71GiB, 目前 Fluid 提供的缓存节点数为 1,可以提供的最大缓存能力为 1GiB。此时数据量是无法满足全量数据缓存的需求。

$ kubectl get dataset
NAME    UFS TOTAL SIZE   CACHED   CACHE CAPACITY   CACHED PERCENTAGE   PHASE   AGE
spark   2.71GiB          0.00B    1.00GiB          0.0%                Bound   7m38s

9. 当该 Dataset 处于可用状态后,查看是否已经可以从 custom-metrics-api 获得监控指标。

kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1/namespaces/default/datasets.data.fluid.io/*/capacity_used_rate" | jq
{"kind": "MetricValueList","apiVersion": "custom.metrics.k8s.io/v1beta1","metadata": {"selfLink": "/apis/custom.metrics.k8s.io/v1beta1/namespaces/default/datasets.data.fluid.io/%2A/capacity_used_rate"},"items": [{"describedObject": {"kind": "Dataset","namespace": "default","name": "spark","apiVersion": "data.fluid.io/v1alpha1"},"metricName": "capacity_used_rate","timestamp": "2021-04-04T07:24:52Z","value": "0"}]
}

10. 创建 HPA 任务。

$ cat<<EOF > hpa.yaml
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:name: spark
spec:scaleTargetRef:apiVersion: data.fluid.io/v1alpha1kind: AlluxioRuntimename: sparkminReplicas: 1maxReplicas: 4metrics:- type: Objectobject:metric:name: capacity_used_ratedescribedObject:apiVersion: data.fluid.io/v1alpha1kind: Datasetname: sparktarget:type: Valuevalue: "90"behavior:scaleUp:policies:- type: Podsvalue: 2periodSeconds: 600scaleDown:selectPolicy: Disabled
EOF

首先,我们解读一下从样例配置,这里主要有两部分一个是扩缩容的规则,另一个是扩缩容的灵敏度:

  • 规则:触发扩容行为的条件为 Dataset 对象的缓存数据量占总缓存能力的 90%;扩容对象为AlluxioRuntime,最小副本数为 1,最大副本数为 4;而 Dataset 和 AlluxioRuntime 的对象需要在同一个 namespace。
  • 策略:可以 K8s 1.18 以上的版本,可以分别针对扩容和缩容场景设置稳定时间和一次扩缩容步长比例。比如在本例子, 一次扩容周期为 10 分钟(periodSeconds),扩容时新增 2 个副本数,当然这也不可以超过 maxReplicas 的限制;而完成一次扩容后,冷却时间(stabilizationWindowSeconds)为 20 分钟;而缩容策略可以选择直接关闭。

11. 查看 HPA 配置, 当前缓存空间的数据占比为 0。远远低于触发扩容的条件。

$ kubectl get hpa
NAME    REFERENCE              TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
spark   AlluxioRuntime/spark   0/90      1         4         1          33s
$ kubectl describe hpa
Name:                                                    spark
Namespace:                                               default
Labels:                                                  <none>
Annotations:                                             <none>
CreationTimestamp:                                       Wed, 07 Apr 2021 17:36:39 +0800
Reference:                                               AlluxioRuntime/spark
Metrics:                                                 ( current / target )"capacity_used_rate" on Dataset/spark (target value):  0 / 90
Min replicas:                                            1
Max replicas:                                            4
Behavior:Scale Up:Stabilization Window: 0 secondsSelect Policy: MaxPolicies:- Type: Pods  Value: 2  Period: 600 secondsScale Down:Select Policy: DisabledPolicies:- Type: Percent  Value: 100  Period: 15 seconds
AlluxioRuntime pods:   1 current / 1 desired
Conditions:Type            Status  Reason               Message----            ------  ------               -------AbleToScale     True    ScaleDownStabilized  recent recommendations were higher than current one, applying the highest recent recommendationScalingActive   True    ValidMetricFound     the HPA was able to successfully calculate a replica count from Dataset metric capacity_used_rateScalingLimited  False   DesiredWithinRange   the desired count is within the acceptable range
Events:           <none>

12. 创建数据预热任务。

$ cat<<EOF > dataload.yaml
apiVersion: data.fluid.io/v1alpha1
kind: DataLoad
metadata:name: spark
spec:dataset:name: sparknamespace: default
EOF
$ kubectl create -f dataload.yaml
$ kubectl get dataload
NAME    DATASET   PHASE       AGE   DURATION
spark   spark     Executing   15s   Unfinished

13. 此时可以发现缓存的数据量接近了 Fluid 可以提供的缓存能力(1GiB)同时触发了弹性伸缩的条件。


$  kubectl  get dataset
NAME    UFS TOTAL SIZE   CACHED       CACHE CAPACITY   CACHED PERCENTAGE   PHASE   AGE
spark   2.71GiB          1020.92MiB   1.00GiB          36.8%               Bound   5m15s

从 HPA 的监控,可以看到 Alluxio Runtime 的扩容已经开始, 可以发现扩容的步长为 2。

$ kubectl get hpa
NAME    REFERENCE              TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
spark   AlluxioRuntime/spark   100/90    1         4         2          4m20s
$ kubectl describe hpa
Name:                                                    spark
Namespace:                                               default
Labels:                                                  <none>
Annotations:                                             <none>
CreationTimestamp:                                       Wed, 07 Apr 2021 17:56:31 +0800
Reference:                                               AlluxioRuntime/spark
Metrics:                                                 ( current / target )"capacity_used_rate" on Dataset/spark (target value):  100 / 90
Min replicas:                                            1
Max replicas:                                            4
Behavior:Scale Up:Stabilization Window: 0 secondsSelect Policy: MaxPolicies:- Type: Pods  Value: 2  Period: 600 secondsScale Down:Select Policy: DisabledPolicies:- Type: Percent  Value: 100  Period: 15 seconds
AlluxioRuntime pods:   2 current / 3 desired
Conditions:Type            Status  Reason              Message----            ------  ------              -------AbleToScale     True    SucceededRescale    the HPA controller was able to update the target scale to 3ScalingActive   True    ValidMetricFound    the HPA was able to successfully calculate a replica count from Dataset metric capacity_used_rateScalingLimited  False   DesiredWithinRange  the desired count is within the acceptable range
Events:Type     Reason                        Age                    From                       Message----     ------                        ----                   ----                       -------Normal   SuccessfulRescale             21s                    horizontal-pod-autoscaler  New size: 2; reason: Dataset metric capacity_used_rate above targetNormal   SuccessfulRescale             6s                     horizontal-pod-autoscaler  New size: 3; reason: Dataset metric capacity_used_rate above target

14. 在等待一段时间之后发现数据集的缓存空间由 1GiB 提升到了 3GiB,数据缓存已经接近完成。

$ kubectl  get dataset
NAME    UFS TOTAL SIZE   CACHED    CACHE CAPACITY   CACHED PERCENTAGE   PHASE   AGE
spark   2.71GiB          2.59GiB   3.00GiB          95.6%               Bound   12m

同时观察 HPA 的状态,可以发现此时 Dataset 对应的 runtime 的 replicas 数量为 3, 已经使用的缓存空间比例 capacity_used_rate 为 85%,已经不会触发缓存扩容。

$ kubectl get hpa
NAME    REFERENCE              TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
spark   AlluxioRuntime/spark   85/90     1         4         3          11m

15. 清理环境。

kubectl delete hpa spark
kubectl delete dataset spark

总结

Fluid 提供了结合 Prometheous,Kubernetes HPA 和 Custom Metrics 能力,根据占用缓存空间的比例触发自动弹性伸缩的能力,实现缓存能力的按需使用。这样能够帮助用户更加灵活的使用通过分布式缓存提升数据访问加速能力,后续我们会提供定时扩缩的能力,为扩缩容提供更强的确定性。

原文链接

本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/513748.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ff14注册完服务器可以转,FF14怎么转服 FF14转服条件一览-游侠网

你知道FF14怎么转服吗&#xff1f;如果想要换服务器&#xff0c;都有哪些特别的要求呢&#xff1f;下面为大家带来的是FF14转服条件一览&#xff0c;大家一起来了解一下吧。转服条件一览跨区角色转移试行规则1、本次仅开放陆行鸟区转向莫古力区指定服务器功能。我们将在莫古力区…

业务团队如何统一架构设计风格?

简介&#xff1a; 首次上线应用&#xff0c;面对业务框架搭建你是否曾感到无从下手&#xff1f;维护线上应用&#xff0c;面对大量历史包袱你是否正避坑不及深陷泥潭&#xff1f;为何同样是业务应用&#xff0c;不同人的设计风格千差万别&#xff1f;为何最初的设计经过多个迭代…

一文详解物化视图改写

简介&#xff1a; 本文主要介绍什么是物化视图&#xff0c;以及如何实现基于物化视图的查询改写。 作者&#xff1a;阿里云数据库OLAP产品部 云曦 预计算和缓存是计算机领域提高性能以及降低成本的最常见的手段之一。对于那些经常重复的请求&#xff0c;如果可以通过缓存回答…

close_wait过多服务器无响应,记一次大量CLOSE_WAIT连接导致的服务宕机

最近线上服务出现了一段时间的无法响应&#xff0c;在此总结一下问题的排查过程。监控信息监控显示CPU和内存没有异常波动&#xff0c;TCP连接中有大量的CLOSE_WAIT状态的连接。看一下TCP连接断开的过程&#xff1a;也就是说客户端发起了断开连接的包&#xff0c;服务端收到数据…

【Java JVM】Java 实例对象的访问定位

Java 程序会通过栈上的 reference 数据来操作堆上的具体对象。 但是 reference 类型在《Java虚拟机规范》里面只规定了它是一个指向对象的引用, 并没有定义这个引用应该通过什么方式去定位, 访问到堆中对象的具体位置, 所以对象访问方式也是由虚拟机实现而定的&#xff0c;主流…

独家对话阿里云函数计算负责人不瞋:你所不知道的 Serverless

简介&#xff1a; 如果你是一名互联网研发人员&#xff0c;那么极有可能了解并应用过 Serverless 这套技术体系。纵观 Serverless 过去十年&#xff0c;它其实因云而生&#xff0c;也在同时改变云的计算方式。如果套用技术成熟度曲线来描述的话&#xff0c;那么它已经走过了萌芽…

nginx location 匹配 多个规则_三道小练习助你弄懂 Nginx location 匹配

在 Nginx 中我们可以通过配置 location 指令块&#xff0c;来决定一个请求 url 如何处理。如果我们编写了多条 location 指令块&#xff0c;如何保证各个 location 不会产生冲突&#xff1f;如何理清 location 的匹配顺序&#xff1f;带着这两个问题&#xff0c;我们先来做几道…

手机淘宝轻店业务 Serverless 研发模式升级实践

简介&#xff1a; 随着 Serverless 在业界各云平台落地&#xff0c;阿里内部 Serverless 研发平台、各种研发模式也在业务中逐步落地&#xff0c;如火如荼。在此契机下&#xff0c;淘系团队启动了轻店 Serverless 研发模式升级战役&#xff0c;基于阿里集团底层设施建设、上层技…

服务器 独立显卡 显示不出来,dell服务器R720+独立显卡GTX1650,进不去系统,UEIF报错...

戴尔服务器dell R720的显卡问题。操作系统是win2008R2。现在是安装的华硕750ti&#xff0c;运行ok&#xff0c;多个屏幕。买了技嘉gtx1650&#xff0c;刚出的显卡安装了。在集成显卡情况下打了驱动&#xff0c;设备管理显示识别了。但是切换到GTX1650显卡下启动系统&#xff0c…

饿了么EMonitor演进史

简介&#xff1a; 可观测性作为技术体系的核心环节之一&#xff0c;跟随饿了么技术的飞速发展&#xff0c;不断自我革新。 序言 时间回到2008年&#xff0c;还在上海交通大学上学的张旭豪、康嘉等人在上海创办了饿了么&#xff0c;从校园外卖场景出发&#xff0c;饿了么一步一…

注入点批量收集工具_原来微信群也是能够批量管理的,学到了

运营微信社群的人都知道&#xff0c;在没有工具的时代&#xff0c;自己总会人肉管理的一批微信群&#xff0c;少则几个&#xff0c;多个几十个上百个&#xff0c;那么现在微信群的管理到了工具时代&#xff0c;怎么批量管理比较好呢&#xff1f;微信群区别于论坛&#xff0c;作…

宿主机进程挂载到容器内_迄今为止最严重的容器逃逸漏洞:Docker cp命令漏洞分析(CVE201914271)...

摘要在过去几年中&#xff0c;我们在各种容器平台(包括Docker、Podman和Kubernetes)中发现了copy(cp)命令中存在多个漏洞。其中&#xff0c;迄今为止最严重的的一个漏洞是在今年7月被发现和披露的。然而&#xff0c;在该漏洞发布的当时&#xff0c;并没有立即引起太多关注&…

知乎的 Flink 数据集成平台建设实践

简介&#xff1a; 本文由知乎技术平台负责人孙晓光分享&#xff0c;主要介绍知乎 Flink 数据集成平台建设实践。内容如下&#xff1a; 1. 业务场景 &#xff1b; 2. 历史设计 &#xff1b; 3. 全面转向 Flink 后的设计 &#xff1b; 4. 未来 Flink 应用场景的规划。 本文由知乎…

阿里云总裁张建锋:新型计算体系结构正在形成

10月19日&#xff0c;在2021云栖大会上&#xff0c;阿里云智能总裁张建锋以“云深处&#xff0c;新世界”为主题&#xff0c;首次阐释了一个全新的云上世界。他认为&#xff0c;一个以云为核心的新型计算体系结构正在形成&#xff0c;随着云网端技术进一步融合&#xff0c;未来…

汽车之家基于 Flink 的数据传输平台的设计与实践

简介&#xff1a; 数据接入与传输作为打通数据系统与业务系统的一道桥梁&#xff0c;是数据系统与架构中不可或缺的一个重要部分。数据传输系统稳定性和准确性&#xff0c;直接影响整个数据系统服务的 SLA 和质量。此外如何提升系统的易用性&#xff0c;保证监控服务并降低系统…

exe打包工具哪个最好_一键分发工具哪个最好用?30万人选择这款

因为现代化媒体的优势不断显现&#xff0c;最近这几年&#xff0c;新媒体领域异常被人们注重&#xff0c;其门槛低、流量效果无可挑剔、转化比较快速等优点&#xff0c;于是聚拢了无数想改变命运的人&#xff0c;为了种种目的&#xff0c;想弄到极其喜人的数据流量&#xff0c;…

融合趋势下基于 Flink Kylin Hudi 湖仓一体的大数据生态体系

简介&#xff1a; 本文由 T3 出行大数据平台负责人杨华和资深大数据平台开发工程师王祥虎介绍 Flink、Kylin 和 Hudi 湖仓一体的大数据生态体系以及在 T3 的相关应用场景。 本文由 T3 出行大数据平台负责人杨华和资深大数据平台开发工程师王祥虎介绍 Flink、Kylin 和 Hudi 湖仓…

阿里云推出“磐久”云原生服务器系列 能效和交付效率大幅提升

10月19日上午&#xff0c;在2021杭州云栖大会上&#xff0c;阿里云正式推出面向云原生时代的“磐久”自研服务器系列&#xff0c;首款搭载自研芯片倚天710的磐久高性能计算系列也同时亮相&#xff0c;该款服务器将在今年部署&#xff0c;为阿里云自用。 据悉&#xff0c;磐久服…

代码评审中的代码协同

简介&#xff1a; 代码评审中同样存在着“Talk is cheap. Show me the code”&#xff0c;语言无力时&#xff0c;直接上代码吧。这就是我们今天要讨论的话题——代码评审中的代码协同。 作者 | 知忧 来源 | 阿里技术公众号 大神说&#xff1a;“Show me the code”&#xff0…

山东师范大学志愿推荐系统邀请码_快看点邀请码填写HGC1QK快看点邀请码填写HGC1QK快看点邀请码大家千万不要乱填写哦...

快看点邀请码填写HGC1QK快看点邀请码填写HGC1QK快看点邀请码大家千万不要乱填写哦快看点官网下载是一款非常好玩的软件&#xff0c;喜欢此类风格的用户可以体验一下哦。快看点官网下载特色系统:如此好玩的快看点官网下载&#xff0c;千万别错过&#xff0c;来下载体验吧&#x…