关于dlib:微服务架构下DLI的部署和运维有何奥秘

摘要:探讨DLI两个问题:如何在生产环境中部署与运维实现疾速迭代上线,如何实现监控告警来晋升整体运维能力。华为云数据湖摸索DLI是反对多模引擎的Serverless大数据计算服务,其很好的实现了Serverless的个性: 1.弱化了存储和计算之间的分割; 2.代码的执行不再须要手动分配资源; 3.按使用量计费。 那么如何能力更好的实现Serverless化的服务,同时又防止成为传统单体分布式的利用,微服务架构无疑是最优的抉择。DLI基于微服务架构模式下的整体部署架构如下: 即对外以纯API模式提供服务,通过以API Gateway作为利用的入口,基于畛域模型按子域进行微服务划分,从而实现Serverless化的大数据计算服务。 对于这样一个基于微服务架构实现的Serverless服务,咱们是如何在生产环境来部署与运维,从而在保障服务SLA的前提下实现疾速迭代上线的呢? DLI部署的要害随着技术的倒退,部署的流程和架构都产生了根本性的变动,现在曾经走入了轻量级、短生命周期的技术时代。 从最后部署在物理机上的大数据计算平台,到基于私有云的弹性计算云服务器部署大数据平台,再到DLI这样的Serverless服务,其很好展示了大数据计算服务的演变。那么如何能力更好的实现Serverless化的大数据计算服务的部署呢,DLI的答案就是基于Kubernetes+Docker来部署各微服务。 Kubernetes部署是在不停机的状况下部署服务的好办法,然而如何应答在接管生产流量后呈现的谬误,使新版本的服务更牢靠呢?这能够通过将问题一分为二来看: 1.部署,行将服务上线到生产环境中运行; 2.公布,即便服务可用于解决生产流量。 传统上,拆散部署流程与公布流程始终是一个挑战。但当初咱们有了很好的抉择,那就是基于服务网格。在DLI的部署中咱们联合了Kubernetes+Istio,利用Istio的流量治理实现了服务发现、流量路由,从而轻松的将部署与公布离开,使新版本的服务更加牢靠。 监控告警晋升整体运维能力免运维也是DLI作为Serverless云服务面向客户时的一个重要的个性,咱们是如何实现整个服务的运维呢?明天就说说DLI是如何实现监控告警来晋升整体运维能力,从而为客户更好的提供Serverless的DLI。 上图是DLI服务的整体部署架构,作为Serverless服务其全面拥抱云原生技术,无论是对外提供工作治理的微服务还是最终执行工作的计算单元,其都是基于Kubernetes来部署,这也更好的实现了Serverless的疾速弹性伸缩。 对于DLI服务的监控告警咱们以后次要从以下几个方面来思考: 1.全局维度,次要是整体API的QPS、成功率和响应时延 DLI作为Serverless大数据计算服务,其对外均以REST API的模式提供服务,因而API的QPS和响应时延间接反映了服务对外的能力,而成功率更是服务SLA的间接体现。 2. OS维度,次要是容器宿主的CPU使用率、内存使用率、磁盘使用率、上下行流量 无论部署的架构、技术如何演进,对根底资源的监控都是最根本和必须的。 3.容器维度,次要是CPU使用率、内存使用率、K8s空间和用户空间使用率、POD的衰弱度 容器是虚拟机的演进,因而对于容器的资源监控也是最根本的。咱们的微服务或计算单元都是以容器运行在Kubernetes集群上,因而对于POD的衰弱状态的监控也是必须的。 4.微服务维度,次要是流量、性能、健康检查和要害日志等 监控是为了更好的发现和解决问题,因而外围还是业务层面的监控。DLI是一个简单的分布式Serverless利用,其外部依据不同畛域模型又分为不同的微服务,因而对于微服务外部的流量、性能等的监控则是掂量各微服务可靠性的重要指标。一个好的零碎往往有欠缺的日志体系,通过对要害日志进行监控则可能帮忙咱们疾速发现和定位问题,因而这也是咱们在业务维度的监控上的重点。 上述几个方面的监控,是实现云服务自动化运维的一些关键步骤,通过这些咱们可能做到更好的先于客户发现问题,保障服务SLA。当然这些远远不够,正所谓“路漫漫其修远兮,吾将上下而求索”,更加自动化、智能化的运维才是Serverless服务的指标。 华为云828企业上云节,可能是动手DLI的最好机会,感受一下它的智能化部署和运维。 点击关注,第一工夫理解华为云陈腐技术~

August 28, 2020 · 1 min · jiezi

关于dlib:技术揭秘华为云DLI背后的核心计算引擎

摘要:介绍暗藏在华为云数据湖摸索服务背地的外围计算引擎Spark,玩转DLI,,轻松实现大数据的剖析解决。本文次要给大家介绍暗藏在华为云数据湖摸索服务(后文简称DLI)背地的外围计算引擎——Spark。 DLI团队在Spark之上做了大量的性能优化与服务化革新,但其本质还是脱离不了Spark的外围概念与思维,因而笔者从以下几点论述,让读者疾速对Spark有一个直观的意识,玩转DLI。 Spark的诞生及劣势2009年,Spark诞生于伯克利大学AMPLab,诞生之初是属于伯克利大学的研究性我的项目。于2010年开源,2013年成为Apache开源我的项目,通过几年的倒退逐步取代了Hadoop,成为了开源社区煊赫一时的大数据处理平台。 Spark官网的解释:“Spark是用于大规模数据处理的对立剖析引擎”,把关键词拆开来看,“大规模数据”指的是Spark的应用场景是大数据场景;“对立”次要体现在将大数据的编程模型进行了归一化,同时满足多种类型的大数据处理场景(批处理、流解决、机器学习等),升高学习和保护不同大数据引擎的老本;“剖析引擎”表明Spark聚焦在计算剖析,对标的是Hadoop中的MapReduce,对其模型进行优化与扩大。 Spark为了解决MapReduce模型的优化和扩大,那么咱们先探讨一下MapReduce存在的问题,而后剖析Spark在MapReduce之上的改良。 (1)MapReduce两头后果落盘,计算效率低下随着业务数据一直增多,业务逻辑一直多样化,很多ETL和数据预处理的工作须要多个MapReduce作业能力实现,然而MapReduce作业之间的数据交换须要通过写入内部存储能力实现,这样会导致频繁地磁盘读写,升高作业执行效率。 Spark设计之初,就想要解决频繁落盘问题。Spark只在须要替换数据的Shuffle阶段(Shuffle中文翻译为“洗牌”,须要Shuffle的关键性起因是某种具备独特特色的数据须要最终汇聚到一个计算节点上进行计算)才会写磁盘,其它阶段,数据都是按流式的形式进行并行处理。 (2)编程模型繁多,场景表达能力无限MapReduce模型只有Map和Reduce两个算子,计算场景的表达能力无限,这会导致用户在编写简单的逻辑(例如join)时,须要本人写关联的逻辑,如果逻辑写得不够高效,还会影响性能。 与MapReduce不同,Spark将所有的逻辑业务流程都形象成是对数据汇合的操作,并提供了丰盛的操作算子,如:join、sortBy、groupByKey等,用户只须要像编写单机程序一样去编写分布式程序,而不必关怀底层Spark是如何将对数据汇合的操作转换成分布式并行计算工作,极大的简化了编程模型 Spark的外围概念:RDDSpark中最外围的概念是RDD(Resilient Distributed Dataset)——弹性分布式数据集,顾名思义,它是一个逻辑上对立、物理上散布的数据汇合,Spark通过对RDD的一系列转换操作来表白业务逻辑流程,就像数学中对一个向量的一系列函数转换。 Spark通过RDD的转换依赖关系生成对工作的调度执行的有向无环图,并通过任务调度器将工作提交到计算节点上执行,工作的划分与调度是对业务逻辑通明的,极大的简化了分布式编程模型,RDD也丰盛了分布式并行计算的表达能力。 RDD上的操作分为Transformation算子和Action算子。Transformation算子用于编写数据的变换过程,是指逻辑上组成变换过程。Action算子放在程序的最初一步,用于对后果进行操作,例如:将后果汇总到Driver端(collect)、将后果输入到HDFS(saveAsTextFile)等,这一步会真正地触发执行。 常见的Transformation算子包含:map、filter、groupByKey、join等,这外面又能够分为Shuffle算子和非Shuffle算子,Shuffle算子是指处理过程须要对数据进行从新散布的算子,如:groupByKey、join、sortBy等。常见的Action算子如:count、collect、saveAsTextFile等 如下是应用Spark编程模型编写经典的WordCount程序: 该程序通过RDD的算子对文本进行拆分、统计、汇总与输入。 Spark程序中波及到几个概念,Application、Job、Stage、Task。每一个用户写的程序对应于一个Application,每一个Action生成一个Job(默认蕴含一个Stage),每一个Shuffle算子生成一个新的Stage,每一个Stage中会有N个Task(N取决于数据量或用户指定值)。 Spark的架构设计后面讲述了Spark 外围逻辑概念,那么Spark的工作是如何运行在分布式计算环境的呢?接下来咱们来看看开源框架Spark的架构设计。 (注:涂色示意过程) Spark是典型的主从(Master- Worker)架构,Master 节点上常驻 Master守护过程,负责管理全副的 Worker 节点。Worker 节点上常驻 Worker 守护过程,负责与 Master 节点通信并治理 Executor。 (注:橙色和绿色示意过程) Spark程序在客户端提交时,会在Application的过程中启动一个Driver。看一下官网对Driver的解释“The process running the main() function of the application and creating the SparkContext”。 咱们能够把Master和Worker看成是生产部总部老大(负责全局对立调度资源、协调生产工作)和生产局部部部长(负责调配、上报分部的资源,接管总部的命令,协调员工执行工作),把Driver和Executor看成是项目经理(负责分配任务和治理工作进度)和普通员工(负责执行工作、向项目经理汇报工作执行进度)。 项目经理D to 总部老大M:Hi,老大,我刚接了一个大我的项目,须要你告诉上面的分部部长W安顿一些员工组成联结工作小组。 总部老大M to 分部部长W:最近项目经理D接了一个大我的项目,你们几个部长都安顿几个员工,跟项目经理D一起组成一个联结工作小组。 分部部长W to 员工E:明天把大家叫到一起,是有个大我的项目须要各位配合项目经理D去一起实现,稍后会成立联结工作小组,工作的调配和进度都间接汇报给项目经理D。 项目经理D to 员工E:从明天开始,咱们会一起在这个联结工作小组工作一段时间,心愿咱们好好配合,把我的项目做好。好,当初开始分配任务… 员工E to 项目经理D:你调配的xxx工作已实现,请调配其它工作。 ...

August 27, 2020 · 1 min · jiezi