[转]让.NET应用秒变微服务

随着近年来微服务的发展,许多团队开始将自己的单体应用改造为微服务。通常Java或Go的应用可以通过业界已有的微服务框架作为微服务开发和改造的底座,封装掉解决跨网络问题带来的复杂性。但以Chassis模式进行的微服务改造有两大问题:多语言框架支持问题和侵入式改造代码问题。
在这个基础上SideCar模式提供了另外一种接入分布式环境的方式,它使原有应用不与任何框架,平台或者服务绑定。对业务代码0侵入,因此不需要考虑SDK和应用如何结合,不存在较高的学习曲线和耗费较长的开发周期。这种作为基础设施层服务的存在,称为ServiceMesh。通过ServiceMesh,类似.NET或NodeJS等常见的Web应用不用考虑语言问题,寻找适合各自语言的为服务框架,也不需要侵入式修改代码就能快速接入微服务系统。
整体部署方案
从实现的角度看,CSE mesher是ServiceMesh模式的一种实现,它基于CSE GO-SDK开发,通常以SideCar的方式与业务服务部署在一起。它是一种网络代理的存在,业务服务并不感知,只需要配置其http_proxy为CSE mesher的地址即可。
下图是CSE微服务案例中在线袜子商店SockShop的一个示例。整个SockShop由七个微服务组成,其中user等服务作为服务提供者通过java-chassis或go-chassis注册到服务注册中心。另外front-end是NodeJS实现的前端服务应用,orders是实现订单服务的.NET应用,他们通过mesher接入服务注册中心和配置中心,具备了服务发现以及服务治理的基本能力。
在线袜子商店SockShop架构
.NET应用与mesher
订单orders服务是SockShop在线袜子商店的一个子服务,主要提供订单处理(查询订单、运费计算、创建订单),订单状态查询功能。对接mesher与orders服务,只需要配置完整的代理地址,不需要对orders服务代码做任何修改。此时orders作为服务消费者访问payment和shipping服务,将由mesher完成相关微服务的服务发现和负载均衡,并把请求转发到后端服务,整个过程orders服务本身并不感知。
  1. powershell export http_proxy=http://127.0.0.1:30101
复制代码
需要注意的是为了使请求通过代理,由mesher管理运行时,不支持使用Halkit框架的.NET服务。访问其他服务的代码可使用简单的WebRequest,示例如下。
  1. java var shipmentData = System.Text.Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(AShipment).ToString());
  2. WebRequest shipmentRequest =WebRequest.Create(AppSettings.ServiceEndpoints.ShippingServiceEndpoint);
复制代码
其中ShippingServiceEndpoint配置为http://shipping/shipping。该请求经过mesher时,shipping作为服务名在mesher中进行解析和负载均衡。
  1. json
  2. {
  3.   "ServiceEndpoints":{
  4.     "PaymentServiceEndpoint":"http://payment/paymentAuth",
  5.     "ShippingServiceEndpoint":"http://shipping/shipping"
  6.   },
  7.   "Data":{
  8.     "MongoConnection":{
  9.       "ConnectionString":"mongodb://127.0.0.1:27017/",
  10.       "Database":"data"
  11.     }
  12.   },
  13.   "Logging":{...}
  14. }
复制代码
配置和启动mesher
本例中mesher启动在本机的30101端口,.NET应用orders通过mesher与其他微服务通信。mesher本身也是通过go-chassis构建的服务,可以通过chassis.yaml配置文件配置监听地址以及对接的服务中心地址。默认的go-chassis会注册自己到本地30100端口启动的service-center。
  1. yaml
  2. protocols:
  3.   http:
  4.     listenAddress:x.x.x.x:30101 # listen addr of mesher
  5. service:
  6.   registry:
  7.     address:http://x.x.x.x:30100 # uri of service center
  8.     scope:full #set full to be able to discover other app´s service
  9.     watch:false # set if you want to watch instance change event
  10.     autoIPIndex:true # set to true if u want to resolve source IP to microservice
复制代码
为了使orders称为服务提供者需要给mesher配置环境变量SPECIFIC_ADDR为orders服务本身暴露的地址。
  1. powershell export SPECIFIC_ADDR=127.0.0.1:80
复制代码
通过mesher访问后端微服务
orders订单服务作为消费者调用payment与shipping这两个服务。这两个服务的注册通过microservice.yaml来配置自己注册的微服务名和版本,默认版本为0.01。另外可以通过配置chassis.yaml来指定应用ID,默认的应用ID为default。启动SDK接入的微服务后同样可以在service center中查询到。
yaml

 

微服务的私有属性
  1. service_description:
复制代码
微服务的公共属性
  1. APPLICATION_ID: sockshop
复制代码
设置http_proxy为mesher的监听地址后可以通过curl命令访问接入系统的其他服务。查看mesher日志可以看到mesher负责服务发现,解析出payment服务注册的advertise地址。
  1. powershell export http_proxy=http://127.0.0.1:30101 curl http://payment/health
复制代码
运行.NET应用
orders服务在创建订单过程包括对订单详细信息处理、调用payment服务的订单支付接口进行订单支付、调用shipping服务接口进行订单运送处理,最后将订单存入mongodb当中。换言之,Orders服务既作为订单服务的提供端,也作为支付和运送服务的消费端。在carts中添加袜子后点击[Proceed to checkout]即可在orders页面查看订单。
在线袜子商店SockShop主页

 


---------------------
作者:looook
来源:CSDN
原文:https://blog.csdn.net/looook/article/details/80190409
版权声明:本文为作者原创文章,转载请附上博文链接!

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

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

相关文章

WPF 使用 MAUI 的自绘制逻辑

这是一个当前还没开发完成的功能,准确来说连预览版也算不上的功能。我原本以为 MAUI 是无法在 WPF 上面跑的,然而在看完了 MAUI 整个大的设计,才了解到,原来 MAUI 是一个非常庞大的开发项目。在 MAUI 里面,虽然现在是正…

[转]redis 5.0.5 5分钟搭建redis集群

环境:centos 7 1:下载并安装redis ​​​​​​​$ wget http://download.redis.io/releases/redis-5.0.5.tar.gz$ tar xzf redis-5.0.5.tar.gz$ cd redis-5.0.5$ make redis 5.0版本 集群搭建不需要我们安装ruby就可以搭建成功,并且redis…

Window.document对象

一、找到元素: docunment.getElementById("id");根据id找,最多找一个; var a docunment.getElementById("id");将找到的元素放在变量中; docunment.getElementsByName("name")&am…

C# 读写文件从用户态切到内核态,到底是个什么流程?

一:背景 1. 一个很好奇的问题我们在学习 C# 的过程中,总会听到一个词叫做 内核态 ,比如说用 C# 读写文件,会涉及到代码从 用户态 到 内核态 的切换,用 HttpClient 获取远端的数据,也会涉及到 用户态 到 内核…

【土地评价与土地管理】案例:某地区土地农业利用潜力评价

文章目录 一、确定评价单元二、拟定潜力评价系统表、确定指标权重三、指标评价四、评定潜力等级五、得出潜力评价结果一、确定评价单元 土地潜力评价单元采用地块作为评价单元,此地块是建立在土地利用现状的基础上, 综合土地的自然属性来确定,评价单元界线与土地现有界线基本…

code point,code unit

2019独角兽企业重金招聘Python工程师标准>>> 从一段API描述谈起: 在String的length的API中描述是这样的! lengthpublic int length() Returns the length of this string. The length is equal to the number of 16-bit Unicode characters i…

【土地评价与土地管理】案例:兰州市榆中县农用地分等

文章目录 一、资料收集二、确定标准耕作制度、基准作物、指定作物、光温(气候生产潜力)三、划分指标区,确定分等因素及权重四、编制“指定作物-分等因素-自然质量分”记分规则表五、绘制分等因素分值图,划分分等单元六、计算农用地自然质量分七、计算自然质量等指数八、计算…

业务多变的公司上云后蒸蒸日上

一、云服务器与传统服务器的对比 1)、传统服务器 传统服务器是一个独立的硬件设备,可以理解成是一台放在机房的高配置电脑,可根据需求安装各种操作系统以及配置各种环境,性能也比较强大。 2)、云服务器 云服务器是构建在硬件服务器集群之上,…

2016福州大学软件工程第四次团队作业-系统设计成绩汇总

第四次团队作业——系统设计打分统计结果如下: 学号组别团队分数贡献比例个人分数031401433606notconnected141613.83031402606606notconnected141413.33031402618606notconnected141814.34031402629606notconnected141413.33031402631606notconnected141914.590314…

[转]在C#中像Python一样编写TensorFlow机器学习代码

机器学习是一个令人激动人心的领域,一直有新的技术突破。研究人员不断推动机器智能的提升,教机器如何听说读写——这些曾经是我们人类专属的技能。机器学习的首选语言是Python,最受欢迎的库是Google的TensorFlow。几乎所有的代码示例都是用Py…

【土地评价与土地管理】教案 第一章:土地评价要素的选择

文章目录 1.1 土地构成要素与其农业利用1、光能条件2、热量条件3、降水条件1.1 土地构成要素与其农业利用 1、光能条件  光能是绿色植物进行光合作用和生物运动发展的主要能源  太阳辐射、日照时数  太阳辐射量随地域和季节变化较大,导致了土地利用的多样性和土地资源…

Blazor University (33)表单 —— EditContext、FieldIdentifiers

原文链接:https://blazor-university.com/forms/editcontext-fieldidentifiers-and-fieldstate/EditContext、FieldIdentifiers 和 FieldState请注意,对于那些希望了解 Blazor 如何“在后台”工作的人来说,这是一个高级主题。无需了解此信息即…

团队项目开发篇章8

例会时间:2016.11.3 整理:姬索肇 例会照片 每个人的工作 任务分配 我们今天与王鹿鸣学长和李云涛学长针对团队开发过程中遇到的问题进行了讨论,非常感谢学长们的热心帮助,同时我们也被他们强大的编程能力所折服~ 在这里为学长们点…

【地理信息系统GIS】教案(七章全)第一章:地理信息系统概述

文章目录 第一节 GIS基本概念第二节 GIS的组成第三节 GIS的功能第四节 GIS的发展第一节 GIS基本概念 1.1 GIS基本概念 1、信息 是用文字、数字、符号、语言、图象、图形等介质来表达事件、事物或现象等的内容、数量和特征,从而向人们(或系统)提供关于现实世界新的事实和知…

表达式的动态解析和计算,Flee用起来真香

前言在很多项目中经常会出现需要动态解析表达式和计算的场景,比如一些自动审核规则,或者是一些变量的值通过维护的公式在运行过程中动态算出;由于场景需求,都需要比较灵活的配置对应的表达式,然后希望在需要的时候能根…

C语言九十五之实现经典的反转数组(通过指针或数组下标操作)

✅作者简介:大家好我是码玛莎拉蒂,CSDN博客专家🥇🥇🥇 📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转…

Linux下使用shell实现上传linux下某个目录下所有文件到ftp

首先我们需要搞清楚单个文件怎么上传,把这个单文件上传到ftp上的实现命名为一个:upload_to_ftp_command.sh 之后,需要弄清楚怎么实现遍历一个目录下的所有文件的,把这个遍历某个目录下的文件实现命名为:foeach_directory_and_uplo…

[转]Mysql数据库开发的36条原则

前言 这些原则都是经历过实战总结而成 每一条原则背后都是血淋淋的教训 这些原则主要是针对数据库开发人员,在开发过程中务必注意 总是在灾难发生后,才想起容灾的重要性; 总是在吃过亏以后,才记得曾有人提醒过。 一、核心原则…

大话领域驱动设计——表示层及其他

概述表示层又称用户界面层,包含应用程序的页面、组件等UI元素。服务层提供项目的HTTP API接口,包含MVC Controller和相关组件。ABP框架虽然在表示层提供了不少组件,但是这些和DDD本身没有多少关系。而且随着前后端分离架构的流行,…

Windows10家庭中文版没有本地策略选项完美解决方案

Win+R,在运行中输入:secpol.msc,查看安全设置是否打开,如下图所示。 组策略对于优化和维护Windows系统来说十分重要。众所周知,Windows 10家庭版中并不包含组策略,对于使用家庭版Windows的朋友来说,十分不方便。 通常情况下,如果策略组没有打开的话,在安装CAD等软件时…