.Net微服务实战之技术选型篇(一)

简介: .Net微服务实战之技术选型篇(一)

王者荣耀 

  

去年我有幸被老领导邀请以系统架构师与技术负责人的角色带技术团队,并对公司项目以微服务进行了实施。无论是技术团队还是技术架构都是由我亲自的从0到1的选型与招聘成型的,此过程让我受益良多,因此也希望在接下来的系列博文尽可能的与大家分享我的经验。

  

古人有云:将军难打无兵之仗。想要把微服务很好的实施也并非能一个人可以完成的事,一来需要有出色的运维提供支持,二来需要花时间做技术选型与攻关,三来还要开发兄弟们配合实施。因此,这次能顺利实施并不是一个人的王者,而是团队的荣耀。

  

框架源码:https://github.com/SkyChenSky/Sikiro (文末有说明)


工欲善其事,必先利其器


image.png

  

以上是我们公司的技术栈(点击图片可在浏览器打开),除了统一配置中心没有服务器资源和Hangfire还没场景使用外,其他都已经上线使用了。  

  

俗话说得好:工欲善其事,必先利其器。一个优秀的工程师应该善于使用框架和工具,在微服务这一块的技术栈选型并非一蹴而就,也是我多次对比验证后,并良好的集成到公司项目然后落地实施。这系列框架单纯这么去用其实是可以无缝集成的,但是在落实项目的时候,我为了集成得更加友好和使用上更加便利,在基础上做了扩展,例如SkyWalking添加Request和Response,CAP与Chloe.ORM的集成等,下文我会逐个分享。

  

有需要的朋友可以参照我这套去实施,这样大家就可以花更多的时间把精力放在业务、调优、拆分、设计等方面。

  

此外大家看得出,我所有的技术栈基本上找的都是开源社区的比较出名的项目,没有一个属于自研的。这样做的原因:


  •   快速搭建
  •   降低成本
  •   社区支持维护
  •   利于人才引进

 

其实可以看出.Net不缺优秀的开源项目,那么实施这么久让我唯一觉得深刻的印象是:缺少整合。

  

之前我也跟不少同行讨论过甚至在面试的时候,他们觉得应该自己造一个轮子,原因各种各样,但唯独缺少了希望在开源项目基础上完善下这个原因。我也理解他们的心理,因为“优秀”的工程师应该自己写一套证明下自己。其实我认为这也许是包容心的在作祟,我们应当求同存异,学会接受已经检验过的轮子,在基础上完善您的需要,有必要还可以给社区做贡献,双赢。


原则

  

我做技术选型的时候,坚持着三大原则,简单、适合、运维优先

  

在满足需求的情况下,优先选择轻量级的框架,因为轻量级总比重量级的易学习,易于扩展,易于理解源码。试想一下,有个框架什么都很齐全,但是学习曲线高,在写一个demo的时候各种踩“坑”找原因,还有可能出了问题不知道怎么解决,除了开始你初认识该框架觉得他很厉害之外,后面使用每走一步都是阻碍和吐槽。

  

在有限的资源、人力、时间,我们更新技术的同时还要保证业务的正常开展,我会优先选择我比较熟悉的技术,我会将他们进行封装、优化、集成,尽可能的减少开发人员对技术细节的认知负担,尽可能以他们最熟悉的使用方式提供。此外,我们团队是有运维岗,如果问题由运维解决更快、更方便则优先交给运维,尽可能让开发关注数据流转与业务流程。

  

PS:我选型的时候不是一蹴而就的,下文可能我会提到某些框架工具我没有去选择原因,并不是否认它们存在的价值,而绝大问题是这些不适用于我们团队。最后我向伟大的开源项目与其作者致敬。



微服务


image.png

  

有一条盛传于我们行业的公式:软件 = 程序 + 软件工程

  

程序就是我们经常产出的算法、数据结构、脚本、框架、架构等。

  

为什么称之为软件工程?因为这是具有科学方法论引导的、多人协作、有明确目标、有阶段性的。从以前瀑布开发再到10年前盛行的敏捷开发最后到最近几年流行的DevOps,可见开发模式也随着技术架构更新也不停的演进。我们团队选用了原型模式+DevOps模式来应对我们的微服务架构的开发。

  

书本的教条主义我就不多说了,我对微服务的理解分为服务


  

如何微?微到什么程度?我借助两样东西,合理的系统架构分层DDD思想,两者分别管理架构的横向拆分纵向拆分

  

架构分层,我采用了前后端分离+多层架构,自顶向下的依赖,各司其职。

  

DDD在最近几年非常流行,然而这并非新的技术,十几年前就已经它的出现了。随着微服务盛行,DDD的划分域的化繁为简的思想与微服务的本质-不谋而合,因此DDD也随之热门起来。

  

下面是我们的架构图,这个话题在下一篇《.Net微服务实战之技术架构分层篇》重点再讨论。


image.png


服务

  

我接下来用一段话总结一下微服务的基本需要。首先,开发人员得知道如何调用服务,那么可以从注册中心发现已注册的服务的IP地址、端口的列表,这就是服务的注册与发现;接着,我们需要知道服务下接口路径、请求与响应的格式,因此我们需要服务描述。满足前面两个条件后,我们就可以进行调用服务了,因此我们需要RPC框架进行服务通信。当服务运作后,因为服务是跨进程调用的,出问题的时候不容易定位,因此我们需要服务跟踪进行问题定位。最后,服务拆分后是独立的,因此我们要整合起来统一提供给外部调用,于是API网关作为服务的整合与网络环境的隔离

  

由上述可见组件主要包括以下6点:

  •   API网关
  •   服务描述
  •   服务注册中心
  •   RPC框架
  •   服务监控
  •   分布式链路跟踪
目录
相关文章
|
7月前
|
监控 Java API
Spring Boot 3.2 结合 Spring Cloud 微服务架构实操指南 现代分布式应用系统构建实战教程
Spring Boot 3.2 + Spring Cloud 2023.0 微服务架构实践摘要 本文基于Spring Boot 3.2.5和Spring Cloud 2023.0.1最新稳定版本,演示现代微服务架构的构建过程。主要内容包括: 技术栈选择:采用Spring Cloud Netflix Eureka 4.1.0作为服务注册中心,Resilience4j 2.1.0替代Hystrix实现熔断机制,配合OpenFeign和Gateway等组件。 核心实操步骤: 搭建Eureka注册中心服务 构建商品
1098 3
|
5月前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路
|
5月前
|
监控 Cloud Native Java
Spring Boot 3.x 微服务架构实战指南
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕Spring Boot 3.x与微服务架构,探索云原生、性能优化与高可用系统设计。以代码为笔,在二进制星河中谱写极客诗篇。关注我,共赴技术星辰大海!(238字)
Spring Boot 3.x 微服务架构实战指南
|
9月前
|
缓存 负载均衡 监控
微服务架构下的电商API接口设计:策略、方法与实战案例
本文探讨了微服务架构下的电商API接口设计,旨在打造高效、灵活与可扩展的电商系统。通过服务拆分(如商品、订单、支付等模块)和标准化设计(RESTful或GraphQL风格),确保接口一致性与易用性。同时,采用缓存策略、负载均衡及限流技术优化性能,并借助Prometheus等工具实现监控与日志管理。微服务架构的优势在于支持敏捷开发、高并发处理和独立部署,满足电商业务快速迭代需求。未来,电商API设计将向智能化与安全化方向发展。
521 102
|
7月前
|
负载均衡 监控 Java
微服务稳定性三板斧:熔断、限流与负载均衡全面解析(附 Hystrix-Go 实战代码)
在微服务架构中,高可用与稳定性至关重要。本文详解熔断、限流与负载均衡三大关键技术,结合API网关与Hystrix-Go实战,帮助构建健壮、弹性的微服务系统。
702 1
微服务稳定性三板斧:熔断、限流与负载均衡全面解析(附 Hystrix-Go 实战代码)
|
12月前
|
NoSQL MongoDB 微服务
微服务——MongoDB实战演练——文章评论的基本增删改查
本节介绍了文章评论的基本增删改查功能实现。首先,在`cn.itcast.article.dao`包下创建数据访问接口`CommentRepository`,继承`MongoRepository`以支持MongoDB操作。接着,在`cn.itcast.article.service`包下创建业务逻辑类`CommentService`,通过注入`CommentRepository`实现保存、更新、删除及查询评论的功能。最后,新建Junit测试类`CommentServiceTest`,对保存和查询功能进行测试,并展示测试结果截图,验证功能的正确性。
268 2
|
12月前
|
NoSQL 测试技术 MongoDB
微服务——MongoDB实战演练——MongoTemplate实现评论点赞
本节介绍如何使用MongoTemplate实现评论点赞功能。传统方法通过查询整个文档并更新所有字段,效率较低。为优化性能,采用MongoTemplate对特定字段直接操作。代码中展示了如何利用`Query`和`Update`对象构建更新逻辑,通过`update.inc("likenum")`实现点赞数递增。测试用例验证了功能的正确性,确保点赞数成功加1。
249 0
|
12月前
|
NoSQL 测试技术 MongoDB
微服务——MongoDB实战演练——根据上级ID查询文章评论的分页列表
本节介绍如何根据上级ID查询文章评论的分页列表,主要包括以下内容:(1)在CommentRepository中新增`findByParentid`方法,用于按父ID查询子评论分页列表;(2)在CommentService中新增`findCommentListPageByParentid`方法,封装分页逻辑;(3)提供JUnit测试用例,验证功能正确性;(4)使用Compass插入测试数据并执行测试,展示查询结果。通过这些步骤,实现对评论的高效分页查询。
203 0
|
9月前
|
NoSQL Java 微服务
2025 年最新 Java 面试从基础到微服务实战指南全解析
《Java面试实战指南:高并发与微服务架构解析》 本文针对Java开发者提供2025版面试技术要点,涵盖高并发电商系统设计、微服务架构实现及性能优化方案。核心内容包括:1)基于Spring Cloud和云原生技术的系统架构设计;2)JWT认证、Seata分布式事务等核心模块代码实现;3)数据库查询优化与高并发处理方案,响应时间从500ms优化至80ms;4)微服务调用可靠性保障方案。文章通过实战案例展现Java最新技术栈(Java 17/Spring Boot 3.2)的应用.
717 9
|
10月前
|
数据采集 自然语言处理 Java
Playwright 多语言一体化——Python/Java/.NET 全栈采集实战
本文以反面教材形式,剖析了在使用 Playwright 爬取懂车帝车友圈问答数据时常见的配置错误(如未设置代理、Cookie 和 User-Agent),并提供了 Python、Java 和 .NET 三种语言的修复代码示例。通过错误示例 → 问题剖析 → 修复过程 → 总结教训的完整流程,帮助读者掌握如何正确配置爬虫代理及其它必要参数,避免 IP 封禁和反爬检测,实现高效数据采集与分析。
607 3
Playwright 多语言一体化——Python/Java/.NET 全栈采集实战