随着近年来微服务的发展,许多团队开始将自己的单体应用改造为微服务。通常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
版权声明:本文为作者原创文章,转载请附上博文链接!

[转]让.NET应用秒变微服务相关推荐

  1. 废旧手机秒变PHP服务,轻松拥有随身服务器

    废旧手机秒变PHP服务,轻松拥有随身服务器 个人有一台360奇酷手机没有在使用,伊拉克成色,手机卡的一P食之无味弃之可惜的典范,于是想把这个安卓变为PHP服务器,并且装一个wordpress测试项目, ...

  2. 微服务领域,为什么选SpringCloud而不是Dubbo?

    Spring Cloud作为一套微服务治理的框架,几乎考虑到了微服务治理的方方面面,之前也写过一些关于Spring Cloud文章,主要偏重各组件的使用,本篇主要解答这两个问题:Spring Clou ...

  3. JeecgBoot 2.4 微服务正式版发布,基于SpringBoot的低代码平台

    项目介绍 JeecgBoot 是一款基于代码生成器的低代码平台!前后端分离架构 SpringBoot2.x,SpringCloud,Ant Design&Vue,Mybatis-plus,Sh ...

  4. 微服务--应对每秒上万并发下的参数优化实战(实战经验)

    目录 一.写在前面 二.场景引入,问题初现 三.扬汤止沸,饮鸩止渴 四.问题爆发,洪水猛兽 五.追本溯源,治标治本 六.总结全文,回眸再看 一.写在前面 相信不少朋友都在自己公司使用Spring Cl ...

  5. 微服务是否使SOA变得无关紧要?

    服务导向架构(简称SOA,service-oriented architecture)已经死亡?你可能会这么想. 但其实不然.的确,随着新技术的出现,SOA本身的价值可能已经大不如前,但是SOA的遗产 ...

  6. 白话微服务60秒:从快餐店点餐看事件驱动架构

    ♬ 关闭窗口或屏幕也可听哦~ 主播:Elaine 今天是白话微服务第一季<服务通信> 第6集<事件驱动架构> 事件驱动架构是一种基于事件的异步通信架构,基于事件的协作能让微服务 ...

  7. 白话微服务60秒:吴站长汉奸名册就是注册与发现!

    主播:Elaine 今天是白话微服务第一季<服务通信> 第3集<注册与发现> 在传统方式下,当部署服务的多个节点时,一般使用静态配置的方式实现服务信息的设定. 在微服务应用中, ...

  8. bootstrap跟vue冲突吗_知道微服务,但你知道微前端吗?

    在 toB 的前端开发工作中,我们往往就会遇到如下困境: 工程越来越大,打包越来越慢 团队人员多,产品功能复杂,代码冲突频繁.影响面大 内心想做 SaaS 产品,但客户总是要做定制化 不同的团队可能有 ...

  9. 在微服务架构下基于 Prometheus 构建一体化监控平台的最佳实践

    欢迎关注方志朋的博客,回复"666"获面试宝典 随着 Prometheus 逐渐成为云原生时代的可观测事实标准,那么今天为大家带来在微服务架构下基于 Prometheus 构建一体 ...

最新文章

  1. Android消息机制基本原理和使用
  2. 专有云传统HSF升级Pandora Boot开发
  3. vga显卡下载 linux,下载:NVIDIA显卡Linux驱动190.53正式版
  4. 前端学习(1847)vue之电商管理系统电商系统的功能划分
  5. QT Designer前端页面添加的图标在程序运行时不显示解决方法
  6. 【干货】腾讯人力资源与组织管理体系.pptx(附下载链接)
  7. activiti配置文件activiti.cfg.xml
  8. KVM 虚拟化原理探究(5)— 网络IO虚拟化
  9. paip.python错误解决18
  10. paip.python错误解决13
  11. 修改虚拟机设置过游戏检测
  12. Spring Data Redis 官方中文文档
  13. Hexo NexT 添加背景图片
  14. 麒麟桌面系统时间相关命令介绍
  15. 《Single-Shot Object Detection with Enriched Semantics》论文笔记
  16. java获取时间(今天,昨天,上周第一天,本周第一天,本周最后一天)
  17. Qt解析XML相关(QDom方式)
  18. CTF之路:git项目本地版本库(.git文件夹)漏洞利用
  19. Fast Fourier Convolution
  20. error: failed to push some refs to 'git@github.com: xxx / xxxx.git'

热门文章

  1. 发现 ASP.Net 的一个关于回车提交的 Bug ? 必须多于一个 Text 域回车提交,Server: ButtonX_Click 才能截获!...
  2. WPF中的触发器(Trigger)
  3. 06Prism WPF 入门实战 - Log控件库
  4. 程序员过关斩将--领导说我的类的职责不单一
  5. 使用SQL Server分区表功能提高数据库的读写性能
  6. ABP vNext 审计日志获取真实客户端IP
  7. IdentityServer4 之 Resource Owner Password Credentials 其实有点尴尬
  8. .NET架构小技巧(5)——反射,架构人员法宝III
  9. WPF开源控件扩展库 - MaterialDesignExtensions
  10. ASP.NET Core 基于声明的访问控制到底是什么鬼?