拥抱.NET 5,从自研微服务框架开始

“ 

2016年发布了.NET Core第一个正式版本,而.NET5也将在下个月就正式来临了,技术日新月异,也有点让人应接不暇。在框架设计上,.NET Framework的全家桶理念,培养了一大批的CRUD,而.NET Core转变成了按需使用(Pay for what you use),对.NET开发者提出了更高的要求,不仅得知道怎么用,还得知道为什么!

搞技术的,就该有刨根问底的精神。本人自研的微服务框架在各位大佬的帮助下总算迎来了首次线上公开分享,想招募几个队友一起干,先来说说这个自研项目!

文:WenLiang  

来源:DotNetdaily 

自研服务注册发现

微服务架构通常都有几十上百个服务实例,每个服务实例追求功能单一,极简设计,为保障服务的可用性和伸缩能力,集群是必须的,服务注册发现也是必须的了。当下主流的服务注册发现组件很多,Zookeeper、Consul、ETCD、Eurake都是可选项,本着探究和折腾精神,下面基于Redis封装了一个ZXAgility.Microservice.RDiscovery

01

服务注册发现的核心是注册--发现,说到底就是个数据快速存取,Redis非常擅长。服务注册就是写入服务的基本信息到Redis,服务发现就是从Redis读取服务的基本信息,Done!

02

心跳检查和移除也是必备功能,Redis没办法主动发起心跳,于是乎转换个思路,要求服务实例来心跳,定期更新Redis信息,否则就过期移除了,Done!

03

共享数据存储、分布式锁、集群数据同步等等功能,恰好就是Redis自己擅长的,Done!

以上是设计实例 

具体实现代码和流程见文章底部

自研微服务网关

网关在微服务架构里面也是必须环节,能屏蔽保护底层的服务实例,还能完成各种缓存、超时、限流、熔断、降级等服务治理,还能结合IdentityServer4授权中心做集中鉴权授权,也是整个微服务架构后台流程的入口和起点,重中之重!.NET Core可选的网关组件主要是Ocelot和Kong,但是二者在性能上都有瓶颈,于是乎又来了一波封装,ZXAgility.Microservice.RGateway:

01

网关的核心是路由映射,请求转发,结果回发,这里用ASP.NET Core中间件模式做了个极简的请求转发,去除了多个无用环节。

02

服务治理上,目前已实现的包括基于Redis分布式缓存、基于Polly封装的超时熔断重试、以及用Redis令牌桶的形式实现了限流。

此外还提供了JWT验证、配置文件以及HttpApi对配置文件管理等,网关常见功能大都实现了,压测了下,性能比Ocelot能高50%。

自研微服务网关

APM全链路追踪在微服务架构里也属于必备组件了,因为服务多、节点多、机器多,一旦出个问题,几乎是没办法去定位的,再就是服务节点的各种性能指标统计,都要求全链路追踪,能实时统计出请求的全链路,包括调用的参数、结果、发起时间、结束时间等各种信息数据。当下.NET Core没有成熟全链路工具,能选用的skywalking也是为Java而生的,.NET Core至今还不能用最新版本,限制很多。这里基于.NET Core封装了一个ZXAgility.Microservice.RFullAPM:

01

独立的数据收集中心,这里用Kafka来做的数据收集中间件,满足海量吞吐低延迟的需求。

02

网关、实例全节点埋点和整个链路数据整理,通过.NET Core提供的AsyncLocal的中间件结合完成,保证高比发下单次请求保证使用同一个RequestID,识别请求链路。

03

在数据展示上,对接的Kibana提供的各种报表和查询图像展示,还可以无痕的对接业务报表系统,支持定制。

链路追踪还有很多个性化的需求,

项目还在陆续完善,欢迎大家一起共建!

期待你的加入

微服务架构当下已经是成熟的架构体系,以上仅分享了服务注册发现、网关、全链路追踪,此外还有配置中心、分布式日志分析等诸多技术点。本文未展开讲的完整内容,今晚将进行线上成功展示。应用以上组件搭建微服务实战,并用Docker部署集群,最后用JMeter压测整个项目做验证!

作为项目发起人,对大家的加入万分期待!欢迎加入自研团队,共同开发,一起建设.Net开源生态!

提示:

凡参与本次线上分享会的小伙伴,期间生成的代码、已有的经验笔记等,都会分享给大家,扫码添加工作人员,可免费领取!

自研团队期待你的加入

自研微服务框架成果展示

时间:10月2日晚8点

参与:扫码获取直播链接

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

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

相关文章

leetcode周赛第一题6037. 按奇偶性交换后的最大数字(冒泡法)

一:题目 二:上码 class Solution { public:int largestInteger(int num) {string str to_string(num);for (int i 0; i < str.size()-1; i) {for (int j i1; j < str.size(); j) {int num1 str[j]-0;int num2 str[i]-0;if (num1%2 num2%2) {//这里我们控制的是奇数…

从零开始打造专属钉钉机器人

一、前言废话不多的实现简单的钉钉机器人。我们分为下面几个步骤来逐步讲解。1.钉钉机器人的类型2.如何打造一个最最简单的钉钉机器人二、钉钉机器人的类型常用的钉钉机器人有两种&#xff0c;1、通知类型的机器人&#xff1a;适合在群内进行一些通知&#xff0c;推荐消息等内容…

Azure 内容审查器之文本审查

内容审查器Azure 内容审查器也是一项认知服务。它支持对文本、图形、视频进行内容审核。可以过滤出某些不健康的内容&#xff0c;关键词。使你的网站内容符合当地的法律法规&#xff0c;提供更好的用户体验。文本内容审核其中文本内容的审核应用比较广泛。比如在审核游戏中的群…

java并发之CAS

文章目录1:何为CAS2:CAS图示3:CAS和Volatile的关系4:为何CAS效率更高一些5:CAS的特点7:受保护得共享数据类型(1):原子基本数据类型(2):原子引用数据类型7:ABA问题(1):什么是ABA(2):如何解决呢&#xff1f;1:何为CAS CAS(Compare And Swap)&#xff0c;即比较并交换。是解决多线…

快速了解 ASP.NET Core Blazor

最近在几个微信 .NET 交流群里大家讨论比较频繁的话题就是这几天自己的面试经历。面试官&#xff1a;“你刚说你喜欢研究新技术&#xff0c;那你有了解过 Blazor 吗&#xff1f;”作为一位专注于 .NET 开发的软件工程师&#xff0c;你好意思说你对 Blazor 一点也不解吗&#xf…

ASP.NET Core集成Nacos配置中心之适配多格式配置

前言 默认情况下&#xff0c;用nacos-sdk-csharp集成ASP.NET Core的配置系统&#xff0c;是基于JSON格式的数据。随着业务系统的多样化&#xff0c;可能用的配置格式也是各有千秋的。有的会用yaml/yml&#xff0c;有的会用ini&#xff0c;有的会用xml&#xff0c;等等。那么如果…

Git的使用(快速入门)

文章目录[TOC]一:将本地的项目提交到Git上二:GIt的基本操作1:建立一个本地仓库(1):类别(2):创建全新的仓库(3):克隆远程仓库2:查看文件的状态3:在桌面上的文件提交到远程仓库4:在idea中的文件提交到远程仓库5:分支(1):何为分支(2):常用命令(3)注意6:解决合并冲突(1):问题展示(2…

为什么这么忙,还依然做不好事情?

一直都很喜欢《重来》系列&#xff0c;最近出了《重来3&#xff1a;跳出疯狂的忙碌》&#xff0c;第一时间在微信读书中阅读了&#xff0c;让我们印象比较深刻的就是「冷静」和「效率」&#xff0c;本文主要说说效率的问题。书的作者是贾森弗里德&#xff08;Jason Fried&#…

开源特训营 - Lesson 6 - 如何提交一个合格的PR

编辑&#xff1a;李明康责编&#xff1a;袁睿斌作者&#xff1a;课程助教 - 苏斌主讲教师&#xff1a;张齐勋&#xff08;北京大学&#xff09;、赵生宇&#xff08;同济大学&#xff09;本次课程的主题为《如何提交一个合格的PR》&#xff0c;主讲者为来自北京大学的张齐勋老师…

改进程架构,Edge优化浏览器内存问题

微软 Edge 团队称&#xff0c;“今天的浏览器更像是操作系统&#xff0c;而不是文档查看器。用户正在浏览器中执行越来越多的任务&#xff0c;而在桌面应用程序中执行的任务越来越少。与此同时&#xff0c;每个网页、Web 应用程序和扩展程序都在使用内存&#xff0c;这也会使用…

中芯国际第二代FinFET工艺有望与2020年底试产

媒体报道&#xff0c;第一代FinFET 14纳米已于2019年四季度量产&#xff1b;第二代FinFET N1已进入客户导入阶段&#xff0c;可望于2020年底小批量试产。梁孟松披露&#xff0c;中芯国际的下一代N1工艺和14nm相比&#xff0c;性能提升了20%&#xff0c;功耗降低了57%&#xff0…

gRPC-微服务间通信实践

微服务间通信常见的两种方式由于微服务架构慢慢被更多人使用后&#xff0c;迎面而来的问题是如何做好微服务间通信的方案。我们先分析下目前最常用的两种服务间通信方案。gRPC&#xff08;rpc远程调用&#xff09;场景&#xff1a;A服务主动发起请求到B服务&#xff0c;同步方式…

移动 Azure 资源后如何快速修复 Dashboard

点击上方蓝字关注“汪宇杰博客”导语Azure 用户经常因为不够有钱&#xff0c;需要把资源移动到另一个资源组或订阅中。移动完成后&#xff0c;会导致资源对应的 Dashboard 失效。通常&#xff0c;我们都需要从 Dashboard 上将找不到的资源删除&#xff0c;并逐个重建。有没有快…

八大排序算法之插入排序

一:直接插入排序 1:思想 首先选择一个哨兵,我们默认将第一个数作为哨兵,随着循环的进行,我们一直将我们待插入数的前一个数作为哨兵然后就是插入的数与哨兵比较&#xff0c;比哨兵小的话&#xff0c;就将哨兵后移&#xff0c;然后再与哨兵前面的数进行比较&#xff0c;直到遇…

跟我一起学Redis之五种基本类型及其应用场景举例(干了6个小时)

前言来啦&#xff0c;老弟&#xff1f;来啦&#xff0c;上一篇就当唠唠嗑&#xff0c;接下来就开始进行实操撸命令&#xff0c;计划是先整体单纯说说Redis的各种用法和应用&#xff0c;最后再结合代码归纳总结。Redis默认有16个数据库(编号为0~15)&#xff0c;默认使用第0个&am…

leetcode周赛6070. 计算字符串的数字和

一:题目 二:上码 class Solution { public:/**思路:1.设置一个while循环&#xff0c;循环的条件是s.length<k2.while里面进行 1>:将字符串按k个进行拆分成个单个字符&#xff0c;并将其转换成数字,然后计算将计算结果再组成字符串 */string digitSum(string s, int k) {…

ASP.NET Core 中的 User Agent 识别及搜索引擎爬虫鉴定方法

User Agent中文名为用户代理&#xff0c;简称 UA&#xff0c;它是一个特殊字符串头&#xff0c;使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。百度百科在 ASP.NET Core 中&#xff0c;可以通过以下代码在 …

leetcode周赛6071. 完成所有任务需要的最少轮数

一:题目 二:上码 class Solution { public:/**思路:1.如果x1的话,那么的话 直接返回-12.如果x2的话&#xff0c;那么就一次执行3.如果x是3的倍数的话,那么就直接执行 x/3 次4.如果x/3 余数是1的话 那就执行 x/31,比方说是4 其实是两个2&#xff0c;但是我们求数的的时候,我们求…

netcore使用 jenkins + supervisor 实现standalone下多副本自动化发布

前面的文章聊过用 jenkins 做了一个简单的自动化发布&#xff0c;在shell中采用的是 BUILD_IDdontKillMe nohup dotnet xxx.dll & 这种简单的后台承载&#xff0c;如果你的业务量相对比较小&#xff0c;可以用这个方法玩一玩&#xff0c;但存在二个问题&#xff1a;1. 无法…

实战解读ASP.NET Core身份认证

长话短说&#xff1a;上文我们聊了 ASP.NET Core 基于声明的访问控制到底是什么鬼&#xff1f;今天我们乘胜追击&#xff1a;聊一聊ASP.NET Core 中的身份验证。身份验证是确定用户身份的过程。授权是确定用户是否有权访问资源的过程。1. 万变不离其宗显而易见&#xff0c;一个…