“
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点
参与:扫码获取直播链接