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

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: .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框架
  •   服务监控
  •   分布式链路跟踪
目录
相关文章
|
8天前
|
Dubbo Java 应用服务中间件
微服务框架Dubbo环境部署实战
微服务框架Dubbo环境部署的实战指南,涵盖了Dubbo的概述、服务部署、以及Dubbo web管理页面的部署,旨在指导读者如何搭建和使用Dubbo框架。
55 17
微服务框架Dubbo环境部署实战
|
4天前
|
SQL 关系型数据库 数据库
七天.NET 8操作SQLite入门到实战详细教程(选型、开发、发布、部署)
七天.NET 8操作SQLite入门到实战详细教程(选型、开发、发布、部署)
|
6天前
|
自然语言处理 Java 网络架构
解锁跨平台微服务新纪元:Micronaut与Kotlin联袂打造的多语言兼容服务——代码、教程、实战一次打包奉送!
【9月更文挑战第6天】Micronaut是一款轻量级、高性能的Java框架,适用于微服务开发。它支持Java、Groovy和Kotlin等多种语言,提供灵活的多语言开发环境。本文通过创建一个简单的多语言兼容服务,展示如何使用Micronaut及其注解驱动特性实现REST接口,并引入国际化支持。无论是个人项目还是企业应用,Micronaut都能提供高效、一致的开发体验,成为跨平台开发的利器。通过简单的配置和代码编写,即可实现多语言支持,展现其强大的跨平台优势。
18 2
|
6天前
|
运维 监控 持续交付
深入浅出:微服务架构的设计与实战
微服务,一个在软件开发领域如雷贯耳的名词,它代表着一种现代软件架构的风格。本文将通过浅显易懂的语言,带领读者从零开始了解微服务的概念、设计原则及其在实际项目中的运用。我们将一起探讨如何将一个庞大的单体应用拆分为灵活、独立、可扩展的微服务,并分享一些实践中的经验和技巧。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的视角和深入的理解。
31 3
|
15天前
|
测试技术 API 开发者
.NET单元测试框架大比拼:MSTest、xUnit与NUnit的实战较量与选择指南
【8月更文挑战第28天】单元测试是软件开发中不可或缺的一环,它能够确保代码的质量和稳定性。在.NET生态系统中,MSTest、xUnit和NUnit是最为流行的单元测试框架。本文将对这三种测试框架进行全面解析,并通过示例代码展示它们的基本用法和特点。
29 7
|
12天前
|
开发框架 缓存 前端开发
实战.NET Framework 迁移到 .NET 5/6
从.NET Framework 迁移到.NET 5/6 是一次重要的技术革新,涵盖开发环境与应用架构的全面升级。本文通过具体案例详细解析迁移流程,包括评估现有应用、利用.NET Portability Analyzer 工具识别可移植代码、创建新项目、逐步迁移代码及处理依赖项更新等关键步骤。特别关注命名空间调整、JSON 序列化工具更换及数据库访问层重构等内容,旨在帮助开发者掌握最佳实践,确保迁移过程平稳高效,同时提升应用性能与可维护性。
45 2
|
16天前
|
消息中间件 缓存 Kafka
go-zero微服务实战系列(八、如何处理每秒上万次的下单请求)
go-zero微服务实战系列(八、如何处理每秒上万次的下单请求)
|
11天前
|
API 开发者 Java
API 版本控制不再难!Spring 框架带你玩转多样化的版本管理策略,轻松应对升级挑战!
【8月更文挑战第31天】在开发RESTful服务时,为解决向后兼容性问题,常需进行API版本控制。本文以Spring框架为例,探讨四种版本控制策略:URL版本控制、请求头版本控制、查询参数版本控制及媒体类型版本控制,并提供示例代码。此外,还介绍了通过自定义注解与过滤器实现更灵活的版本控制方案,帮助开发者根据项目需求选择最适合的方法,确保API演化的管理和客户端使用的稳定与兼容。
44 0
|
15天前
|
监控 Cloud Native 开发者
云端精英的.NET微服务秘籍:Azure上的创新实战演练
【8月更文挑战第28天】在现代软件开发中,微服务架构通过分解应用程序提升可维护性和扩展性。结合Azure与.NET框架,开发者能轻松打造高效且易管理的云原生微服务。首先,使用Docker容器化.NET应用,并借助Azure Kubernetes Service(AKS)或Azure Container Instances(ACI)部署。为确保高可用性和伸缩性,可利用Azure Traffic Manager负载均衡及Azure Autoscale动态调整实例数。
22 0
|
15天前
|
Kubernetes Linux 开发者
【实战秘籍】从零开始:用.NET与Docker打造现代化容器化应用之旅
【8月更文挑战第28天】本文详细介绍如何使用 .NET 框架构建并部署 Docker 容器化应用程序,涵盖环境搭建、项目创建、Dockerfile 编写等关键步骤。首先安装必要软件,如 Visual Studio 2022 及 Docker Desktop。接着创建 .NET Core 控制台应用,并在项目根目录编写 Dockerfile 文件。使用 .NET 运行时基础镜像,复制二进制文件,指定入口点。运行命令构建镜像并测试容器。为实现通信,映射端口。最后,标签化镜像并推送到 Docker Hub,为生产环境部署做好准备。掌握这些步骤,即可轻松应对从小型项目到大规模应用的各种需求。
38 0