上一篇我们讲到了dapr提供的bindings,通过绑定可以让我们的程序轻装上阵,在极端情况下几乎不需要集成任何sdk,仅需要通过httpclient+text.json即可完成对外部组件的调用,这样只需要对外暴露一个轻量级的http服务器提供restapi即可作为一个云函数提供对外服务。上一篇我们同时也提到了在serverless框架下的函数还可以按需进行自动扩容缩容的,在极端情况下甚至可以将实例缩容至0,理想情况下serverless在无人访问时不占用系统除磁盘外的任何资源,当有访问时通过自动化扩容快速启动应用实例提供服务,当请求增多/减少时又相应的进行自动化扩容/缩容,当请求完全没有时再次缩容到0。那今天我们就看看我们如何通过dapr+prometheus+keda来实现一套自动化扩容缩容吧。

目录:

一、通过Dapr实现一个简单的基于.net的微服务电商系统

二、通过Dapr实现一个简单的基于.net的微服务电商系统(二)——通讯框架讲解

三、通过Dapr实现一个简单的基于.net的微服务电商系统(三)——一步一步教你如何撸Dapr

四、通过Dapr实现一个简单的基于.net的微服务电商系统(四)——一步一步教你如何撸Dapr之订阅发布

通过Dapr实现一个简单的基于.net的微服务电商系统(五)——一步一步教你如何撸Dapr之状态管理

通过Dapr实现一个简单的基于.net的微服务电商系统(六)——一步一步教你如何撸Dapr之Actor服务

通过Dapr实现一个简单的基于.net的微服务电商系统(七)——一步一步教你如何撸Dapr之服务限流

通过Dapr实现一个简单的基于.net的微服务电商系统(八)——一步一步教你如何撸Dapr之链路追踪

通过Dapr实现一个简单的基于.net的微服务电商系统(九)——一步一步教你如何撸Dapr之OAuth2授权

通过Dapr实现一个简单的基于.net的微服务电商系统(九)——一步一步教你如何撸Dapr之OAuth2授权-百度版

通过Dapr实现一个简单的基于.net的微服务电商系统(十)——一步一步教你如何撸Dapr之绑定

附录:(如果你觉得对你有用,请给个star)
一、电商Demo地址:https://github.com/sd797994/Oxygen-Dapr.EshopSample

二、通讯框架地址:https://github.com/sd797994/Oxygen-Dapr

  照例得先唠唠这个扩容缩容机制到底是如何实现的熟悉k8sHPA机制的同学请跳过,k8s的HPA(Horizontal Pod Autoscaler),我们直接搬官方文档定义吧:“Pod 水平自动扩缩(Horizontal Pod Autoscaler) 可以基于 CPU 利用率自动扩缩 ReplicationController、Deployment、ReplicaSet 和 StatefulSet 中的 Pod 数量。除了 CPU 利用率,也可以基于其他应程序提供的自定义度量指标 来执行自动扩缩。Pod 自动扩缩不适用于无法扩缩的对象,比如 DaemonSet。”,单靠HPA提供的CPU/MEM利用率来做自动扩缩容很难用于真实的生产环境,同时HPA只能作用于1->N,N->1的情况。而serverless需要涵盖实例从0->N,N->0的情况,所以单靠HPA是无法满足我们的诉求的。而这个时候就需要一款基于HPA扩展的k8s组件来为我们提供相应的服务。而Dapr选择微软自家的KEDA(已经开源并捐献给了CNCF基金会)。注意KEDA并不是为了覆盖HPA的功能,而是作为一个轻量化的组件集成在k8s里为hpa提供扩展服务。

  除了keda,我们还需要一些指标,因为keda需要某些指标来作为其对pod的扩容和缩容的凭据,这部分指标目前恰好可以用dapr已经集成好的prometheus来提供。之前链路追踪其实就是dapr+zipkin,而指标同样也可以通过dapr+prometheus来完成。关于指标这部分在dapr的官方文档里monitoring有详细描述,使用起来和之前我们介绍的链路追踪无太大差异,所以就不单开文章讲解了,有诉求的同学可以直接访问文档来自行搭建。

  好了,接下来我们开始搭建,不过照例还是先上流程图。注意此图仅仅是简易示例,真实的调用链会涉及更多的细节,此处不展开:

  首先我们需要将prometheus安装进来,通过Dapr提供的指南,我们可以使用helm进行安装。

kubectl create namespace dapr-monitoring
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install dapr-prom prometheus-community/prometheus -n dapr-monitoring

  tips:由于一个诡异的bug导致在windows平台下的docker环境内无法启动node-exporter,如果你不幸遇到了,可以使用这行代码解决,具体的issuse在这里

kubectl patch ds dapr-prom-prometheus-node-exporter  --type "json" -p '[{"op": "remove", "path" : "/spec/template/spec/containers/0/volumeMounts/2/mountPropagation"}]' -n dapr-monitoring

  检查你的dapr-monitoring,确保所有pod都能启动,接着我们需要公开prometheus-server用于访问页面。通过kubectl edit svc dapr-prom-prometheus-server -n dapr-monitoring 打开svc将spec.service.type从ClusterIP改为NodePort,如果你需要固定端口,再增加spec.ports.nodePort即可。保存文档后我们再查询kubectl get svc dapr-prom-prometheus-server -n dapr-monitoring 看看端口号是多少,然后访问loalhost:port,如果出现以下页面,则说明prometheus部署成功:

  由于dapr会自动将指标写入prometheus,当我们操作一下我们的电商demo之后,我们就可以从prometheus查询到对应指标的情况了,以http请求数的情况为例:

  prometheus先放一边,接着我们安装KEDA,依然参考dapr的文档,不过接下来我们和官方文档有一点出入,官方文档演示的是通过component让keda监听kafka,通过流量指标来确定扩容/缩容订阅器的。我们这里的演示是让keda监听prometheus的特定指标dapr_http_server_request_count来实现扩容/缩的。原理都一样,即借助keda来实现。接下来依然是通过helm安装keda。

helm repo add kedacore https://kedacore.github.io/charts
helm repo update
kubectl create namespace keda
helm install keda kedacore/keda --namespace keda

  同样安装完毕后,观察我们的keda,确保两个pod都已经正确running之后,我们尝试对我们的网关配置keda的ScaledObject来实现自动扩容/缩容:首先还是编写一个ScaledObject,这是keda安装后会自动在k8s里申明的CRD资源符

apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:name: prometheus-scaledobjectnamespace: dapreshop
spec:scaleTargetRef:name: apigatewaypollingInterval: 15 #指定keda的采集频次,单位秒minReplicaCount: 1  #指定默认规格maxReplicaCount: 10 #最大扩容规格triggers:- type: prometheusmetadata:serverAddress: http://dapr-prom-prometheus-server.dapr-monitoring.svc.cluster.local   #prometheus服务的svc用于keda采集指标metricName: dapr_http_server_request_count  #具体的指标名query: sum(rate(dapr_http_server_request_count{app_id="apigateway"}[2m])) #这是prometheus特有的PromQL,这段query的意思是我们需要采集以2分钟为一个维度对网关的请求平均访问速率,这里不展开,大家可以搜PromQL中文文档了解更多threshold: '3' #阈值

  当我们apply这个yaml之后,可以通过kubectl get so,hpa观察我们的scaleobject和hpa的资源是否创建成功,一切OK后,我们通过postman的runner请求网关,看看hpa是否可以工作吧:

  可以看到请求过来后,我们的指标已经被正确的收集到了,接着我们查询一下网关的情况,可以看到已经被正确的扩容了:

  当请求归零后,过一段时间再次访问会发现实例被缩容到了默认规格。这就是今天对dapr+keda实现动态扩容/缩容的介绍。当然要做到真正的云函数那样的从0实例快速冷启动还需要一个过程,冷启动在传统云商提供的云函数环境里是通过预热池实现的,而本地化搭建要实现0实例冷启动需要AOT的支持,至少就目前而言.netcore尚未支持AOT编译成本地代码的情况下还很遥远。但是不能说没有实现serverless冷启动做这个就没有意义,当我们在特定场景比如做活动需要动态扩容/缩容时,完全可以通过keda去实现。当请求稀少的夜间我们完全就可以将实例缩容到1份继续运行,或者类似于dapr官方文档示例那样的订阅器平时不需要运行时完全可以缩容到0个实例,等待消息来触发扩容运行消费。

相关文章:

  • Dapr能否引领云原生中间件的未来?

  • 云原生 | 阿里巴巴的Dapr实践与探索

  • Dapr | 云原生的抽象与实现

  • Dapr 可视化指南

  • Dapr 知多少 | 分布式应用运行时

  • Dapr 正式发布 1.0

  • Dapr 交通流量控制示例

  • Dapr是如何简化微服务的开发和部署

  • 微软开源微服务运行时Dapr,赋能云原生应用开发

  • YARP实现Dapr服务调用的反向代理

  • Dapr微服务应用开发系列0:概述

  • Dapr微服务应用开发系列1:环境配置

  • Dapr微服务应用开发系列2:Hello World与SDK初接触

  • Dapr微服务应用开发系列3:服务调用构件块

  • Dapr微服务应用开发系列4:状态管理构件块

  • Dapr微服务应用开发系列5:发布订阅构建块

  • Windows环境下Dapr入门

  • 云原生 | .NET 5 with Dapr 初体验

  • 通过Dapr实现一个简单的基于.net的微服务电商系统

  • 通过Dapr实现一个简单的基于.net的微服务电商系统(二)——通讯框架讲解

  • 通过Dapr实现一个简单的基于.net的微服务电商系统(三)——一步一步教你如何撸Dapr

  • 通过Dapr实现一个简单的基于.net的微服务电商系统(四)——一步一步教你如何撸Dapr之订阅发布

  • 通过Dapr实现一个简单的基于.net的微服务电商系统(五)——一步一步教你如何撸Dapr之状态管理

  • 通过Dapr实现一个简单的基于.net的微服务电商系统(六)——一步一步教你如何撸Dapr之Actor服务

  • 通过Dapr实现一个简单的基于.net的微服务电商系统(七)——一步一步教你如何撸Dapr之服务限流

  • 通过Dapr实现一个简单的基于.net的微服务电商系统(八)——一步一步教你如何撸Dapr之链路追踪

  • 通过Dapr实现一个简单的基于.net的微服务电商系统(九)——一步一步教你如何撸Dapr之OAuth2授权

  • 通过Dapr实现一个简单的基于.net的微服务电商系统(九)——一步一步教你如何撸Dapr之OAuth2授权-百度版

  • 通过Dapr实现一个简单的基于.net的微服务电商系统(十)——一步一步教你如何撸Dapr之绑定

  • WebAssembly + Dapr = 下一代云原生运行时?

  • dapr 应用开发 | 环境配置

  • 乘风破浪,.Net Core遇见Dapr,为云原生而生的分布式应用运行时

  • Dapr案例之高德 Serverless 平台建设及实践

通过Dapr实现一个简单的基于.net的微服务电商系统(十一)——一步一步教你如何撸Dapr之自动扩/缩容...相关推荐

  1. 通过Dapr实现一个简单的基于.net的微服务电商系统(十九)——分布式事务之Saga模式...

    目录: 一.通过Dapr实现一个简单的基于.net的微服务电商系统 二.通过Dapr实现一个简单的基于.net的微服务电商系统(二)--通讯框架讲解 三.通过Dapr实现一个简单的基于.net的微服务 ...

  2. 通过Dapr实现一个简单的基于.net的微服务电商系统(十八)——服务保护之多级缓存...

    很久没有更新dapr系列了.今天带来的是一个小的组件集成,通过多级缓存框架来实现对服务的缓存保护,依旧是一个简易的演示以及对其设计原理思路的讲解,欢迎大家转发留言和star 目录: 一.通过Dapr实 ...

  3. 通过Dapr实现一个简单的基于.net的微服务电商系统(十七)——服务保护之动态配置与热重载...

    在上一篇文章里,我们通过注入sentinel component到apigateway实现了对下游服务的保护,不过受限于目前变更component需要人工的重新注入配置以及重启应用更新componen ...

  4. 通过Dapr实现一个简单的基于.net的微服务电商系统(十六)——dapr+sentinel中间件实现服务保护...

    dapr目前更新到了1.2版本,在之前4月份的时候来自阿里的开发工程师发起了一个dapr集成Alibaba Sentinel的提案,很快被社区加入到了1.2的里程碑中并且在1.2 release 相关 ...

  5. 通过Dapr实现一个简单的基于.net的微服务电商系统(十二)——istio+dapr构建多运行时服务网格...

    多运行时是一个非常新的概念.在 2020 年,Bilgin Ibryam 提出了 Multi-Runtime(多运行时)的理念,对基于 Sidecar 模式的各种产品形态进行了实践总结和理论升华.那到 ...

  6. 通过Dapr实现一个简单的基于.net的微服务电商系统(十)——一步一步教你如何撸Dapr之绑定...

    如果说Actor是dapr有状态服务的内部体现的话,那绑定应该是dapr对serverless这部分的体现了.我们可以通过绑定极大的扩展应用的能力,甚至未来会成为serverless的基础.最开始接触 ...

  7. 通过Dapr实现一个简单的基于.net的微服务电商系统(九)——一步一步教你如何撸Dapr之OAuth2授权-百度版...

    目录: 一.通过Dapr实现一个简单的基于.net的微服务电商系统 二.通过Dapr实现一个简单的基于.net的微服务电商系统(二)--通讯框架讲解 三.通过Dapr实现一个简单的基于.net的微服务 ...

  8. 通过Dapr实现一个简单的基于.net的微服务电商系统(九)——一步一步教你如何撸Dapr之OAuth2授权...

    Oauth2授权,熟悉微信开发的同学对这个东西应该不陌生吧.当我们的应用系统需要集成第三方授权时一般都会做oauth集成,今天就来看看在Dapr的语境下我们如何仅通过配置无需修改应用程序的方式让第三方 ...

  9. 通过Dapr实现一个简单的基于.net的微服务电商系统(八)——一步一步教你如何撸Dapr之链路追踪

    Dapr提供了一些开箱即用的分布式链路追踪解决方案,今天我们来讲一讲如何通过dapr的configuration来实现非侵入式链路追踪的 目录: 一.通过Dapr实现一个简单的基于.net的微服务电商 ...

最新文章

  1. linux内核调优参考
  2. IOS block 教程
  3. Python语言程序设计之urllib.request抓取页面,网易公开课之《麻省理工学院公开课:算法导论》
  4. 解决 Xcode10 编译错误 ld: library not found for -lstdc++6.0.9
  5. oracle查询并更新数据库,oracle数据库查询和更新
  6. c++大文本比较_Excel – 将文本转换为数值,第二种方法会的请举左手
  7. java 英文字符串排序_英文字符串排序算法
  8. hadoop示例源码位置
  9. python第六篇:Python复制超大文件、复制二进制文件
  10. loginservlet.java_求助HTTP Status 404 - /Book/servlet/cn.servlet.LoginServlet
  11. html点线面制作,利用HTML5绘制点线面组成的3D图形的示例_html5教程技巧
  12. 学习zookeeper基础知识
  13. 论文笔记-LSHTC: A Benchmark for Large-Scale Text Classification-2015
  14. SVN 代码与文件管理小记
  15. 自定义新浪微博分享按钮
  16. USACO26 moofest 奶牛集会(归并排序)
  17. MYSQL时间函数之FROM_UNIXTIME
  18. Biotin-HHL,AL;生物素化朱顶红凝集素(HHL,AL)
  19. 任天堂被黑了!早期游戏源码及设计图大批曝光,原来塞尔达传说还有个血腥版本?
  20. 指狗为马,还可骑乘?小鹏快收了你的神通吧...

热门文章

  1. 数据源的配置和使用 视频下载
  2. 标准MD5 .Net,实现!的对与错!
  3. 010 使用list和tuple
  4. 使用qrcode类制作二维码
  5. PHP的学习--PHP的闭包
  6. 开发Android应用 提升性能的小技巧
  7. jQuery获取及设置单选框,多选框,文本框内容
  8. [Forward] 因为火炬,所以迟到,工资照扣
  9. .text 0.958之间居的中文汉化下载
  10. 使用LiveClick升级您的实时书签