热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于云原生的下一代微服务(ServiceMesh)框架—Dapr初体验

原创IT点滴ServiceMesh作为下一代微服务架构已越来越受欢迎,其Sidecar模式可以很好地让应用开发回归业,目前流行的ServiceMesh方案有Isti
 

原创IT点滴

Service Mesh作为下一代微服务架构已越来越受欢迎,其Sidecar模式可以很好地让应用开发回归业, 目前流行的Service Mesh方案有Istio(谷歌)、Linkerd2(Buoyant)、Dapr(微软)。 Dapr发展势头十分迅猛(基于go语言实现),目前已经在 GitHub 上收获了12.5K星星,阿里是 Dapr 开源项目的深度参与者和早期采用者,率先进行了生产落地。

Dapr简介

Dapr 是一个可移植的、事件驱动的运行时,它使任何开发人员能够轻松构建出弹性的、无状态和有状态的应用程序,并可运行在云平台或边缘计算中,它同时也支持多种编程语言和开发框架。其口号Any language, any framework, anywhere(任何语言,任何框架,任何地方),dapr目前最新版本v1.1.1

any framework, anywhere:Dapr 是和平台无关的,可以在本地、K8S(Kubernetes)群集或者其它集成 Dapr 的托管环境中运行应用程序。 这使得能够在云平台和边缘计算中运行微服务应用。

Any language:使用 Dapr可以使用任何语言、任何框架轻松构建微服务应用,并运行在任何地方(特别适合企业内部存在多语言构建的微服务程序的场景)。

基于云原生的下一代微服务(Service Mesh)框架—Dapr初体验

dapr

Dapr构建块

Dapr由7大构建块组成(服务间调用、状态管理、发布订阅、资源绑定、Actors、Observability、Secrets),并且具有可扩展性以添加新的构建块。

基于云原生的下一代微服务(Service Mesh)框架—Dapr初体验

dapr

开发者语言 SDK

为了让不同的开发语言者更方便地使用Dapr 其提供RESTful接口,以及提供不同语言使用的SDK(C++、Go、Java、Javascript、.NET 、Python )。SDK 通过类型化的语言来使用Dapr 构建块中的功能(如保存状态,发布事件或创建Actor)。

开始体验step 1—安装 Dapr CLI 脚手架

Dapr CLI 是用于管理Dapr 相关任务的主要工具。Dapr 可以配置为在本地计算机上运行、或者运行在Docke容器、Kubernetes 集群运行。为了方便我们在Center OS虚拟机上安装Dapr CLI

wget -q https://raw.githubusercontent.com/dapr/cli/master/install/install.sh -O - | /bin/bash

执行上述命令发现没有任何反应,我们去掉wget命令-q参数(安静模式无信息输出),

发现无法访问githubusercontent,我们从github上下载加速github访问的host文件更新替换本地的etc/hosts。再次执行上述wget -url命令,便可以看到正在下载dapr_linux_amd64.tar.gz,下载比较慢耐心等待即可。

基于云原生的下一代微服务(Service Mesh)框架—Dapr初体验

wget 安装Dapr CLI

安装完毕后,我们执行下dapr命令,控制台会有dapr 的相关输出,我们可以看到大大的dapr字符画,以及相关命令参数。

基于云原生的下一代微服务(Service Mesh)框架—Dapr初体验

dapr runtime

开始体验step 2—初始化 Dapr

在上面的步骤1我们已经安装好了了Dapr CLI,接下来我们使用CLI在本机初始化 Dapr 。
不依赖 Docker初始化 Dapr(初始化命令dapr init --slim)


依赖 Docker 初始化 Dapr(初始化命令dapr init)

我们使用dapr init --slim命令来初始化,安装完毕后提示Success! Dapr is up and running。

不使用 Docker 自托管模式:会安装了daprd 和 placement(在自托管安装中用于启动 actors),不会为状态管理或发布/订阅安装任何默认组件(Redis)。这意味着,除了服务调用,没有其他构建块功能可用,我们可以设置自定义环境和组件。

使用Docker 自托管模式:初始化前需要安装docker,dapr init完毕后启动daprio/dapr、openzipkin、zipkin、 redis等4个容器镜像。

基于云原生的下一代微服务(Service Mesh)框架—Dapr初体验

dapr init success

开始体验step 3—使用Dapr服务调用

在上面的步骤2完成后,我们测试使用Dapr的服务调用功能,运行Java/.net程序(sidecar模式,无代码侵入)。

我们运行一个Java Spring Boot的测试应用

dapr run --app-id myjava --app-port 8080 -- java -jar order-0.0.1-SNAPSHOT.jar

基于云原生的下一代微服务(Service Mesh)框架—Dapr初体验

dapr run java

上述dapr run命令,app-id指定了应用ID,app-port指定了应用的端口(spring boot应用本身设置的端口),后跟java -jar启动对应的jar包。执行命令后界面提示:Starting Dapr with id myjava. HTTP Port:46213. gRPC Port:46307,说明Dapr成功启动了刚才的java应用,可以通过http端口45213端口访问,gRPC服务端口46307。

我们直接访问下spring boot接口,http://ip:8080/order 显示正常。
然后通过dapr暴露服务访问,
http://ip:39445/v1.0/invoke/myjava/method/order

上面我们的测试java代码没有任何dapr的代码侵入

@RestController
@RequestMapping("/order")
public class OrderController {@GetMapping("index")public String index() {return "hello world";}
}

运行.NET 5的测试应用
同样的我们新建一个简单的WebApi工程,同样的通过dapr暴露的.net服务访问正常

dapr run --app-id mydonet --app-port 5000 -- dotnet run
开始体验step 4—使用Dapr的其他特性

State management(状态管理): Dapr 可以通过HTTP API的方式进行状态的存储和读取,支持进行并发控制,另外还可以通过SDK的方式,如dapr-java-sdk示例代码:

DaprClient client = new DaprClientBuilder().build()
client.saveState(String storeName, String key, Object value).block();
client.deleteState
client.executeStateTransaction

另外还有消息发布及订阅、资源绑定及事件触发、Actors、Observability、Secrets等特性,由于篇幅有限在此不再累述,我们可以从github上下载相应语言的SDK代码,里面有各种examples示例代码可供参考。

基于云原生的下一代微服务(Service Mesh)框架—Dapr初体验

 


推荐阅读
  • 本篇内容主要讲解“JavaScript在网页设计中的嵌入应用方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小 ... [详细]
  • 摘要:本文中,我们将进一步理解微服务架构的核心要点和实现原理,为读者的实践提供微服务的设计模式,以期让微服务在读者正在工作的 ... [详细]
  • 这是orginally答复Elias的内容:为什么不需要E5风险控制我们一致认为E4和3.x并不是100%兼容的,E4只是提供了一个兼容层用于运行3.x的插件,这其实并不完全符合E4的设计理 ... [详细]
  • 前端微服务二
    为了解决庞大的一整块后端服务带来的变更与扩展方面的限制,出现了微服务架构(Microservices):微服务是面向服务架构(SOA)的一种变体,把应用程序设计成一系列松耦合的细粒 ... [详细]
  • 以下内容|尾部_quarkus实战之一:准备工作
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了quarkus实战之一:准备工作相关的知识,希望对你有一定的参考价值。欢迎访问我的GitHub ... [详细]
  • 互联网世界 9 种基本的商业模式
    互联网世界9种基本的商业模式一个商业模式是运行一个公司的方法;通过该模式的运作,一个公司能维持自己的生存,就是说,能有收益。商业模式意味着一个公司是如何通过在价值链中定位自己,从而获 ... [详细]
  • 微信小程序官方组件展示之表单组件input源码
    以下将展示微信小程序之表单组件input源码官方组件能力,组件样式仅供参考,开发者可根据自身需求定义组件样式,具体属性参数详见小程序开发文档。功能描述:输入框。该组件是原生组件, ... [详细]
  • CAS介绍CAS(CentralAuthenticationService),是耶鲁大学开发的单点登录系统(SSO,singlesign-on),应用广泛,具有独立于平台的,易于理解,支持代 ... [详细]
  • 我正在使用数组列表通过构建一个交互式菜单供用户选择来存储来自用户输入的值。到目前为止,我的两个选择是为用户提供向列表输入数据和读取列表的全部内容。到目前为止,我创建的代码由两个类组成。 ... [详细]
  • 软件自动化测试的学习路线
    软件自动化测试的学习步骤软件测试交流群关注软件测试技术公众号获取阅读目录软件自动化测试的学习步骤自动化测试的本质自动化测试学习的误区自动化测试的职位自动化测试分类Web自动化 ... [详细]
  • 开发笔记:Python之父重回决策层
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Python之父重回决策层相关的知识,希望对你有一定的参考价值。在GuidovanRossum(吉多· ... [详细]
  • 使用RSACryptoServiceProvider进行公钥加密我已经在CodeProject上发表了一篇文章,解释了如何使用RSA提供程序进行加密和解密:RSA私钥加密虽然200 ... [详细]
  • 下载完成之后解压提取jl1.0.0.1.jar这里写图片描述将jl1.0.0.1.jar拷贝到项目中,并添加到Library这里写图片描述4.源代码Tip:由于工程名 ... [详细]
  • 基于java springboot仓库管理微信小程序源码
    开发环境及工具:大等于jdk1.8,大于mysql5.5,idea(eclipse),微信开发 ... [详细]
  • 我有以下代码。为什么在Flux从Publisher扩展的同时,我不能在发布者的订阅方法上使用lambd ... [详细]
author-avatar
无敌BUG
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有