Dapr,可能是传统应用转向微服务式应用最快的技术路线

一、开篇小记

过去的一段时间,一直在赶一些项目的进度,再加上前阵子的封控,一直没有时间静下心来好好整理和总结。从这周开始,总算有时间整理点东西了,就还是继续折腾了一些关于微服务的知识点。

由于我本人呢,也是刚刚才迈进微服务开发的大门,萌新级别,所以有些总结不到位的地方,感谢批评指点。

先决条件

Windows环境

  • Docker Desktop
  • Kubernetes(单节点测试环境docker desktop会提供,云端标准测试环境或者基于ServerLess的测试环境)

Linux环境

  • Docker
  • Kubernetes(单节点的测试环境,如minikube,云端标准测试环境或者基于ServerLess的测试环境)

MacOS

  • 理论上也是有docker和k8s的测试节点就行,老弟这没Mac机器(但是我好想要~~😭)

开始之前

大家可能也都知道,微服务模式的诞生为我们解决了大流量,高并发等传统开发模式无法解决的问题,但同时也对各类基础设施提出了更高的挑战,所以我在后面要展示的一些案例,即便业务部分非常简单,但配置和部署的流程也会有一点复杂。而关于复杂性的讨论,我会在最后再展开聊。

二、Dapr?

Dapr是一个分布式应用程序运行时(runtime),提供了诸多简化微服务链接的API。无论你的通信模式是服务到服务调用还是发布/订阅消息传递,Dapr 都可以帮助你编写可复原且安全的微服务。 通过让 Dapr 使用挎斗模式(sidecar)处理复杂的挑战,例如服务发现、消息代理集成、加密、可观测性和机密管理,让你可以专注于业务逻辑并保持代码简单。

更多关于Dapr的介绍,看官网吧👉Dapr - Distributed Application Runtime(中文站:Dapr 中国社区)

三、Why Dapr?

一句话概况就是,使用 Dapr,您可以使用任何语言框架轻松构建微服务应用,运行在任何地方

再说明白点就是,基于dapr,你的团队,或者公司,用什么开发语言,开发框架,都变得不重要了,格局打开了~

总的来说就是,云原生时代,转型微服务已经有了多种方式,Dapr通过提供运行时的方式,为我们封装好了很多构建块,开箱即用,且都是独立的,可以自由选择使用1个或多个,服务间的通信调用也全部有Dapr来完成而且是使用更高性能的gRPC协议。通过Dapr提供的Sidecar模式,我们可以以一种非常省力甚至于偷懒的方式,把我们的业务系统快速转型成微服务系统中的一环。

更多的,还是推荐看官网的描述👉:Building blocks | Dapr Docs(中文站:概述 | Dapr 文档库)

ps.为啥要看英文版的原网站,绝不是装13,主要有以下两点原因。

  • 1是中文站的翻译和原网站不完全是一一对应的,很多知识点你只能在英文站点看到,在翻译软件助力下,理解起来不是很费力;
  • 2是学习任何知识,都应该遵循一个基本原则,到知识的源头学习!

四、集成Dapr

1.安装Dapr

安装的流程我在这里也不多说了,官方网站那里有非常详细的安装教程(👉:Getting started with Dapr | Dapr Docs),根据那个一步步来就可以。

需要注意的一点就是,如果使用脚本的形式安装,可能下载文件的时候由于众所周知的原因你的下载会概率性的失败,如果出现这种情况,可以通过官方提供的“Binaries”形式安装,自己去下载安装需要的文件,然后再进行后续的解压,配置操作。Windows环境下,解压到指定目录后在配置到环境变量就可以,Linux/MacOS的就把执行文件移动到/user/local/bin目录下就可以了,或者可以放到任何地方,然后通过alias命令做个软链。

安装完成后,在控制台输入“dapr”,出现下面这个画面就ok了

或者执行

dapr version

查看运行时和cli版本。

然后初始化dapr

dapr init --runtime-version 1.9.1 #指定运行时版本

如果出现下面这个错误👇,就到dapr的仓库地址,把对应版本的文件下载下来自己解压,默认地址是C:\Users\{你的用户名}\.dapr,包含一个dapr和dashboard(可以在本地快速浏览服务节点的情况)的执行文件。

如果安装失败,就执行“dapr uninstall”命令重试一下。

如果下载了dashboard的执行文件,可以打开浏览器,查看基于dapr运行时的应用的状态了。

dapr dashboard -p 9999 #端口号指定一个空闲的就可以,不指定就是默认的8080

2.几个案例

案例其实我也不想说太多,一是因为官方也提供了案例,再有就是我们这边正式的项目也还没有开始向基于dapr的微服务方向转,但总算是有了个比较明确的方向,关于微服务的分享肯定也不是一篇两篇博客就能说清楚的,后续肯定会持续输出。这里就主要聊一下在跑通这些案例的过程中需要注意的地方。

0.开始之前

初始化dapr环境

dapr init --runtime-version 1.9.1

1.在本地跑通的案例

Dapr官方提供了基于诸多开发语言的SDK,包括了DotNet,所以,DotNet开发基于Dapr的应用非常方便。

这里我们先假设一个微服务项目,包含一个前台服务,一个后台服务。

前台服务

  • 创建一个前台项目,可以是web,可以是控制台,可以是任何dotnet框架支持的终端格式
  • 添加Dapr.Client(for client)或Dapr.AspNetCore(for web)包,我这里就以web为例,可以通过nuget或者命令行执行如下命令
dotnet add package Dapr.AspNetCore
  • 修改Program.cs,注入Dapr服务
var builder = WebApplication.CreateBuilder(args);// Add services to the container.
builder.Services.AddDaprClient();
//...

  • 修改默认的页面,改为通过dapr sdk获取数据的形式
using Dapr.Client;
using Microsoft.AspNetCore.Mvc.RazorPages;namespace MyFrontEnd.Pages;public class IndexModel : PageModel
{private readonly DaprClient _daprClient;public IndexModel(DaprClient daprClient){_daprClient = daprClient;}public async Task OnGet(){var forecasts = await _daprClient.InvokeMethodAsync<IEnumerable<WeatherForecast>>(HttpMethod.Get,"MyBackEnd",//后台服务的名称,这个要注意!"weatherforecast");ViewData["WeatherForecastData"] = forecasts;}
}
  • 修改一下页面,为了展示结果
@page
@model IndexModel
@{ViewData["Title"] = "Home page";
}<div class="text-center">
<h1 class="display-4">Welcome</h1>
<p>Learn about <a href="https://learn.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
@foreach (var forecast in (IEnumerable<WeatherForecast>)ViewData["WeatherForecastData"]!)
{<p>The forecast for @forecast.Date is @forecast.Summary!</p>
}
</div>

后台服务

  • 创建一个默认的API项目就可以了,其他不用调整。

添加容器支持

关于添加容器支持的部分,我这里不多说了,就直接过一下流程,至于怎么启动容器,怎么配置等等网上也有很多教程,我在之前的博客里也提到过,可以参考简单👉:把项目打包成docker镜像,并发布到腾讯云?DockerHub!_Dockerhub_为自己带盐_InfoQ写作社区

  • 给两个项目都添加docker支持,注意目标OS选Linux
  • 创建一个docker-compose项目,编写docker-compose.yaml文件,把我们的服务打包发布到容器当中
version: '3.4'services:myfrontend:image: ${DOCKER_REGISTRY-}myfrontendbuild:context: .dockerfile: MyFrontEnd/Dockerfileports:- "51000:50001"myfrontend-dapr:image: "daprio/daprd:1.9.1" #注意最好天上版本号,和本机开发环境保持一致,下面的同理command: [ "./daprd", "-app-id", "MyFrontEnd", "-app-port", "80" ] #注意这里的app-port参数要和项目对应的dockerfile里指定的端口参数对应depends_on:- myfrontendnetwork_mode: "service:myfrontend"mybackend:image: ${DOCKER_REGISTRY-}mybackendbuild:context: .dockerfile: MyBackEnd/Dockerfileports:- "52000:50001"mybackend-dapr:image: "daprio/daprd:1.9.1"command: [ "./daprd", "-app-id", "MyBackEnd", "-app-port", "80" ]depends_on:- mybackendnetwork_mode: "service:mybackend"
  • docker-compose.yaml文件编写完成后,设置docker-compose项目为启动项,就可以看到运行效果了

  • 最后,需要提几个主义的点,打包容器的配置文件docker-compose.yaml,要注意一些关键参数,比如,dapr对外提供的rest默认通信端口是3500,如果要修改的话,需要增加参数“--dapr-http-port”,用的是http协议,而服务间的dapr和dapr之间的通信端口是50001,走的是grpc协议。这里,强烈建议看一下官方的这篇介绍👉:Service invocation overview | Dapr Docs

3.在开发环境下的Kubernetes集群上跑通案例(minikube)

要把项目移植到kubenetes集群,对初学者来说其实不是件轻松事。但我们如果要转型到微服务开发,就必须要尝试走通这一步。

环境准备

minikube的官方站点是👉:minikube

根据文档的说明,先完成minikube的安装。这里要说明的是,minikube安装需要docker环境,需要先检查自己的Linux系统或者虚拟机里是否安装了docker。

我这里实际测试了基于CentOS7.9和WSL2两种环境,其中CentOS的话,需要自己参照教程安装一下Docker,WSL2和windows宿主机器共享Docker运行环境,只要安装了Docker Desktop,并配置了下图选项就可以

CentOS安装好Docker后的效果

安装好Docker之后,就可以安装minikube了

  • 准备一个非root账号。大概流程如下,但如果遇到一些权限问题,可以自行搜索对应linux发行版的解决办法,总之最后的目的就是不能用root用户来安装minikube,这点和安装一些其他软件如ElasticSearch的原理是一样的。
#1.创建账号
useradd tony #自定义
#2.创建密码
passwd tony #然后根据提示输入密码就好
#3.分到docker用户组(没有就创建一个)
sudo gpasswd -a tony docker
#4.更新docker用户组
newwrp docker
#5.切换到新账号
su tony
  • 安装minikube
#下载
sudo curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
#安装
sudo install minikube-linux-amd64 /usr/local/bin/minikube

  • 初始化minikube运行环境,需要注意的是,截止到当前,kubernetes最新的版本是1.26.0,但我这里踩过坑了,最新版本的安装会有兼容性问题,这里大家如果想安装新版本的话,会少不了折腾一番,那如果不想折腾的话,建议直接安装1.23.8。另外镜像国家选中国,如下:
minikube start --image-mirror-country='cn' --kubernetes-version=v1.23.8

在CentOS环境的安装效果如下

跑通Hello-K8s

  • 前置条件:安装好dapr cli
  • 初始化运行环境
dapr init -k
#或者
dapr init --kubernetes --wait

...这里由于放假,没有整理完,先搁置,后续补上!

*4.在基于ServerLess的Kubernetes集群上跑通案例

***这里建议如果有其他云的使用经验,且对腾讯云不熟悉的同学,直接跳过吧~***

上面的Hello-k8s的项目里,官方给的例子是在微软云服务Azure的aks环境执行的情况,我这里改成了腾讯云tke的环境。在国内使用Azure的服务应该是无障碍的,但他那个付款模式我有点摸不透,需要使用visa的信用卡,而且也确实没用过国外厂商的云服务。对腾讯云相对更熟悉一些,这里就以腾讯云为例,简单聊一下,稍后再聊一下基于minikube的

  • 开通容器服务:https://console.cloud.tencent.com/tke2/cluster,注意选serverless集群,因为咱就是测试,要为考虑成本!事实上,云原生时代,任何的微服务都应该积极转向serverless模式,标准集群的模式无法完美解决弹性扩容缩容的需求,而且,贼贵!

  • 开通外部访问,注意,这一步就开始要收费了奥,但是不贵,按量计费,一小时也就几毛钱,用完了不满意关了就行

  • 下载kubeconfig文件到本地
  • 修改~/.kube路径下的config文件,我这里因为使用的wsl,所以我就直接把原来的config文件备份了一份,然后直接把新的文件配置设置成默认config了

  • 修改之后,如果像我这样操作,那集群上下文就只有一个,执行“kubectl config get-contexts”命令,可以看到如下结果

  • 如果你是通过合并云端的kubeconfig,那就需要执行切换上下文的操作
kubectl config use-context cls-n7u1qb85-context-default
  • 上述操作完成后,就可以看到我们已经成功连接到腾讯云的k8s集群了

  • 后续我这里在写博客的时候因为节点都释放掉了,然后操作的时候也忘记截图了,所以,额...

剩下的操作,就非常简单了,主要的难点就在环境的部署上,大家可以根据这个说明来操作就ok👉:quickstarts/tutorials/hello-kubernetes at master · dapr/quickstarts · GitHub

后记

如果屏幕前的兄弟你,之前没有微服务系统的开发经验,在开始接触这些知识点的时候,难免会有一些心智负担。这点我非常理解,毕竟微服务不是一个简单的开发框架,它还涉及到很多周边知识点,包括但不限于inux内核的操作系统(如CentOS,RedHat),容器(如Docker,Podman),容器编排(如Kubernetes),事件总线,代理,审计,网关,缓存,后台服务等。如果你之前没有过分布式系统的开发经验,只是接触一些Curd,或者聚焦于实现一些定制化的功能,而没有考虑并处理过高并发,大流量等问题,那很可能也就没有全部接触过“微服务”的周边知识。

但如果你说我在小厂,业务量根本就达不到需要把改造成“微服务”体系的程度,所以也就不想投入精力去折腾。那关于这点,让我想起,以前上学的时候,有的村里的大人会说,上半天学有什么用,出来不还是找不到工作。也确实很多人不上学早早的就有了可观的收入,也确实有人念了半辈子书,到头来一事无成。那我们就要放弃上学吗?而且今时不同往日,当今社会,如果还没有学历,没有知识,能选择的路就太少了,也就失去了本该一直存在的激情和热血。

回到开发的角度来说,是一样的,要不要转型,其实很大程度上取决于自己,而不是别人,当你不断地学习微服务相关的知识点时,会不得不去了解这些周边知识,就难免造成主线任务的卡壳,但当我们突破重重关卡,有了一定的积累,转型可能就是一件“自然而然”发生的事情了。

云原生的时代已经到来,用积极的心态去拥抱它吧。

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

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

相关文章

大模型 NLP 算法 大汇总

大模型 & NLP & 算法 大汇总 订阅本专栏【大模型 & NLP & 算法 知识大礼包】&#xff0c;即可获取博主多年积累的关于 【大模型 & NLP & 算法】 全部资料&#xff0c;只要59.9&#xff01;订阅成功后请主动联系博主索要资料&#xff5e; 目前大模型和…

关于midjourney、novelai的订阅购买

midjourney 最近人工智能非常火热&#xff0c;有chatgpt、midjourney及novelai等等&#xff0c;在不同领域都应用广泛&#xff0c;关于订阅购买&#xff0c;这边做个记录。 购买midjourney 注册discord账户&#xff0c;进入社区&#xff0c;直接访问公共服务器&#xff0c;进…

Unity接入大模型(小羊驼Vicuna,vLLM,ChatGPT等)

实现在Unity内部的大模型访问&#xff0c;我也是第一次接触Unity中通过大模型url访问。此博客面向新手&#xff0c;旨在给大家简单理解大模型POST和GET过程&#xff0c;还有实现简单的大模型访问。 参考博客&#xff1a;什么是chatGPT&#xff1f;Unity结合OpenAI官方api实现类…

ChatGPT 的工作原理:深入探究

本文首发于微信公众号&#xff1a;大迁世界, 我的微信&#xff1a;qq449245884&#xff0c;我会第一时间和你分享前端行业趋势&#xff0c;学习途径等等。 更多开源作品请看 GitHub https://github.com/qq449245884/xiaozhi &#xff0c;包含一线大厂面试完整考点、资料以及我的…

ChatGPT私人订制!只需把文档一键上传,免费可玩

衡宇 发自 凹非寺量子位 | 公众号 QbitAI 想不想简单轻松地拥有一个私人订制GPT&#xff1f; 不如试试askwise&#xff0c;只需要上传word、pdf等各种文档&#xff0c;就能生成个性化知识库&#xff0c;然后AI在你的知识库中上下求索&#xff0c;进行回答。 浅试了一下&#xf…

台大李宏毅报告:ChatGPT (可能)是怎麼煉成的 - GPT 社會化的過程

台大李宏毅报告&#xff1a;ChatGPT &#xff08;可能&#xff09;是怎麼煉成的 - GPT 社會化的過程 ChatGPT官方Blog&#xff1a;ChatGPT未公布论文——根据兄弟模型InstructGPT论文进行猜想&#xff1a;&#xff08;1&#xff09;Chat GPT的學習四階段1.學習文字接龍2.人類老…

如何使用chatgpt生成精美PPT提高工作效率

本教程收集于:AIGC从入门到精通教程 如何快速生成精美PPT提高工作效率 一、ChatGPT生成markdown源代码 二、Mindshow登录/注册 三、导入markd

达摩院榜首模型人脸检测MogFace CVPR论文深入解读

团队模型、论文、博文、直播合集&#xff0c;点击此处浏览 一、开源 1.&#xff09;论文链接&#xff1a;MogFace: Towards a Deeper Appreciation on Face Detection 2.&#xff09;模型&代码&#xff1a;https://modelscope.cn/models/damo/cv_resnet101_face-detecti…

GTC 2023 | 「皮衣刀客」黄仁勋畅谈 AI Top 5,科学计算、生成式 AI、Omniverse 榜上有名

内容一览&#xff1a;北京时间 3 月 21 日 23:00&#xff0c;英伟达创始人兼 CEO 黄仁勋在 GTC 2023 上发表主题演讲&#xff0c;介绍了生成式 AI、元宇宙、大语言模型、云计算等领域最新进展。 关键词&#xff1a;英伟达 黄仁勋 GTC 2023 「Don’t Miss This Defining Momen…

《WebRTC系列》实战 Web 端支持 h265 硬解

1、背景 Web 端实时预览 H.265 需求一直存在&#xff0c;但由于之前 Chrome 本身不支持 H.265 硬解&#xff0c;软解性能消耗大&#xff0c;仅能支持一路播放&#xff0c;该需求被搁置。 去年 9 月份&#xff0c;Chrome 发布 M106 版本&#xff0c;默认开启 H.265 硬解&#xf…

极客公园对话 Zilliz 星爵:大模型时代,需要新的「存储基建」

大模型在以「日更」进展的同时&#xff0c;不知不觉也带来一股焦虑情绪&#xff1a;估值 130 亿美元的 AI 写作工具 Grammarly 在 ChatGPT 发布后网站用户直线下降&#xff1b;AI 聊天机器人独角兽公司 Character.AI 的自建大模型在 ChatGPT 进步之下&#xff0c;被质疑能否形成…

云平台的ChatGLM部署

最近ChatGPT很火&#xff0c;国内清华也发布了ChatGLM&#xff0c;于是想在云平台上实现一下小型的ChatGLM。目前准备在趋动云这个平台上试试ChatGLM-6B-int8。 目前ChatGLM-6B-int8显存最少需要10G 可以参考GitHub - THUDM/ChatGLM-6B: ChatGLM-6B: An Open Bilingual Dialo…

高通Ziad Asghar:AI处理的重心从云端向边缘侧转移,智能手机是最佳平台 | MEET 2023...

萧箫 整理自 MEET 2023量子位 | 公众号 QbitAI 从Stable Diffusion到ChatGPT&#xff0c;这半年AI算法应用可谓突飞猛进。 但对于硬件领域而言&#xff0c;AI计算的下一个突破口或未来趋势究竟是什么&#xff1f; 尤其是AI应用最大的领域之一——移动端&#xff0c;大量AI算法在…

Stable Diffusion免费(三个月)通过阿里云轻松部署服务

温馨提示&#xff1a;划重点&#xff0c;活动入口在这里喔&#xff0c;不要迷路了。 其实我就在AIGC_有没有一种可能&#xff0c;其实你早就在AIGC了&#xff1f;阿里云邀请你&#xff0c;体验一把AIGC级的毕加索、达芬奇、梵高等大师作画的快感。阿里云将提供免费云产品资源&…

如何通过限制 IP 相关信息 | 控制用户访问站点频率

文章目录 通过 IP 限制反爬实验介绍知识点课程环境 IP 限制实战用 Nginx 限制特定 IP关于 allow 和 deny 的使用说明Nginx 限制 IP 访问频率Python Flask 模拟 IP 黑名单 实验总结 通过 IP 限制反爬 实验介绍 在常规的反爬手段中&#xff0c;IP 限制是应用广泛且比较有效的&a…

win11 报错 你的IT管理员已经限制对此应用一些区域的访问 解决方法

你的IT管理员已经限制对此应用一些区域的访问,你尝试访问的项目不可用。有关详细,请与你的IT支持人员联系。 1.按下wins&#xff0c;在框中输入cmd&#xff0c;右键管理员身份运行 2.在命令提示符中输入 reg add “HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Def…

wordpress开放注册和邮件问题解决

1开放注册 WordPress后台,设置-常规,勾选任何人都可以注册前面的复选框,新用户角色改为作者&#xff0c;保存即可开启。 2新用户注册收不到邮件问题解决 wordpress配置SMTP服务发送邮件(以qq邮箱为例) 第一步、配置邮箱&#xff08;这里介绍qq邮箱&#xff09; 我试过多个…

SLAM基础知识汇总【长期更新】

SLAM基础知识汇总 特征点相关 特征点由关键点和描述子构成&#xff1a; 关键点&#xff1a;特征点在图像里的位置描述子&#xff1a;通常是一个向量&#xff0c;描述了该关键点周围的信息&#xff0c;朝向大小等 [ORB-SLAM2] ORB-SLAM中的ORB特征&#xff08;提取&#xff…

国科大数字图像处理(复习与整理)

图像处理复习笔记&#xff1a; 1、证明一个系统是线性系统2、证明函数卷积的傅里叶变换等于函数傅氏变换后的乘积3、采样定理与混叠4、直方图均衡化第一节课知识点第二节课知识点第三节课知识点第四节课知识点第五节课知识点第六节课知识点第七节课知识点第八节课知识点第九节课…

3D视觉感知新SOTA BEVFormer复现nuscenes数据集测试demo

0 写在前面 分享最近在BEV感知方面的工作&#xff0c;欢迎自动驾驶同行交流学习&#xff0c;助力自动驾驶早日落地。 1.概述 对于自动驾驶而言&#xff0c;BEV&#xff08;鸟瞰图&#xff09;下的目标检测是一项十分重要的任务。尽管这项任务已经吸引了大量的研究投入&#…