.Net Core微服务系列--理论篇

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 微服务的由来微服务最早由Martin Fowler与James Lewis于2014年共同提出来的,但是微服务也不是一个全新的概念,它是由一系列在实践中获得成功并流行起来的概念中总结出来的一种模式,一种概念。

微服务的由来

微服务最早由Martin Fowler与James Lewis于2014年共同提出来的,但是微服务也不是一个全新的概念,它是由一系列在实践中获得成功并流行起来的概念中总结出来的一种模式,一种概念。而这一系列的概念大体上有这些:
领域驱动设计(DDD),持续交付,按需虚拟化,基础设施自动化,小型的自治团队,大型集群系统。

领域驱动设计(DDD)

DDD中我们关心了三个概念:领域建模,限界上下文,职责。这三个概念能很好的帮我们在微服务中按照业务分割出足够小且高内聚低耦合的服务, 这也是Evans 在《领域驱动设计》一书中的比喻 “细胞之所以会存在,是因为细胞膜定义了什么在细胞内,什么在细胞外,并且确定了什么物质可以通过细胞膜”,我们每个服务都应该是有自己的职责或者可以说要满足单一原则,要尽量保证内聚,并且要定义好与外部的交互。

持续交付

以往也包括现在的很多公司,生产环境的发布几乎总是痛苦的事情,凌晨或者周末加班加点进行发布而且很可能一出问题就是全部回滚到上一个版本。但是现在, 因为实行了持续交付,团队在一天内都可能在生产环境发布很多次。
持续集成,持续交付已经是现代软件很重要的一个特性,对软件产业产生了深远的影响,当然这一特性也跟微服务紧密的结合在一起了。 当然单体架构在持续交付方面的问题太显著了,但是微服务在这一方面确实优势明显。 微服务系统设计开始就是拆分为独立自治的一些服务的集合,每次的持续交付我们只需要关注某个或者某些微服务的交付,从而在很大程度上减少了持续交付的工作量和风险。当然这就要保证各个服务之间的低耦合,在一个服务更改的时候不会带消费方带来影响。

按需虚拟化

系统在高并发的时候总是会遇到性能瓶颈,但是瓶颈一般不是存在在整个系统而是在某几个特有的模块比如说订单,也不是说会一直存在瓶颈比如双11。所以按需进行扩展是必要解决的问题。而对于微服务,我们借助虚拟化平台,可以单独的为某个服务按需创造机器并调整大小。

基础设施自动化

这个其实跟按需虚拟化可以一起的,当我们需要水平扩展的时候,不可能为每次创造的机器进行一番部署,所以我们需要基础设施的自动化来帮组我们完成方便快捷的扩展

小型的自治团队

自治团队,可以对应到自治服务。一个独立的服务,可以语言自由,架构自由,集成自由,部署自由,我们只需要保证团队做出来的东西满足一定的条件就可以完全作为一个独立的单元来进行开发管理维护。

什么是微服务

微服务就是一些协同工作的小而自治的服务。

小,专注于一件事

这个就是我们常常说的职责单一。


在我的职业生涯中,不乏会接手其他人的项目,每每总是会抱怨这个项目代码量太多了,业务逻辑太分散,常常有牵一发而动全身的时候。而微服务则是把职责单一原则应用到服务上,根据业务来划分限界上下文,进而划分出不同的服务,这样每个服务都只用关注到某个限界上下文中,从而很大程度上避免了代码库过大而难以维护的问题。

自治

这是微服务的优点,也一定程度上导致了微服务的复杂性。 自治,代表每个服务是独立个体,所以我们可以自由的进行技术选型,服务之间通信用语言无关的api进行网络通信。也是因为自治,所以我们要保证每个服务能够独立的升级部署而不会对消费者产生影响,避免一个问题出现导致整个系统功能不可用的情况。

协同

虽然我们是一系列不同的个体,但是我们还是一个整体,所以就需要我们各个服务之间有交互有通信,并且需要用某些技术来解决分布式带来的新的问题。

微服务的好处

微服务是分布式的,所以具有分布式的所有好处,而且明确定义了界限上下文,也带来了更多的好处。

  • 技术异构
  • 弹性好(处理服务不可用和功能降级)
  • 扩展方便,成本低
  • 简化部署
  • 与组织结构相匹配
  • 可组合 易于重用完整的功能
  • 对技术替代性的优化

微服务的缺点

当然微服务不是银弹,不是整个软件行业的终极解决方案,总是会存在不可忽视的缺点。同样大部分的缺点也是分布式带来的

  • 性能(内存处理转化为远程调用)
  • 可靠性 (远程调用失败的可能性)
  • 最终一致性
  • 操作的复杂性

因为还没有在实际中使用过微服务,但是对分布式还是有不少实践,所以结合一些书籍,写下了这篇文章做了一下总结。

目录
相关文章
|
11天前
|
数据可视化 网络协议 C#
C#/.NET/.NET Core优秀项目和框架2024年3月简报
公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的介绍、功能特点、使用方式以及部分功能截图等(打不开或者打开GitHub很慢的同学可以优先查看公众号推文,文末一定会附带项目和框架源码地址)。注意:排名不分先后,都是十分优秀的开源项目和框架,每周定期更新分享(欢迎关注公众号:追逐时光者,第一时间获取每周精选分享资讯🔔)。
|
3月前
|
开发框架 前端开发 JavaScript
盘点72个ASP.NET Core源码Net爱好者不容错过
盘点72个ASP.NET Core源码Net爱好者不容错过
68 0
|
3月前
|
开发框架 .NET
ASP.NET Core NET7 增加session的方法
ASP.NET Core NET7 增加session的方法
37 0
|
3月前
|
开发框架 JavaScript .NET
ASP.NET Core的超级大BUG
ASP.NET Core的超级大BUG
41 0
|
1月前
|
开发框架 人工智能 .NET
C#/.NET/.NET Core拾遗补漏合集(持续更新)
C#/.NET/.NET Core拾遗补漏合集(持续更新)
|
1月前
|
开发框架 中间件 .NET
C# .NET面试系列七:ASP.NET Core
## 第一部分:ASP.NET Core #### 1. 如何在 controller 中注入 service? 在.NET中,在ASP.NET Core应用程序中的Controller中注入服务通常使用<u>依赖注入(Dependency Injection)</u>来实现。以下是一些步骤,说明如何在Controller中注入服务: 1、创建服务 首先,确保你已经在应用程序中注册了服务。这通常在Startup.cs文件的ConfigureServices方法中完成。例如: ```c# services.AddScoped<IMyService, MyService>(); //
60 0
|
2月前
|
开发框架 前端开发 .NET
福利来袭,.NET Core开发5大案例,30w字PDF文档大放送!!!
为了便于大家查找,特将之前开发的.Net Core相关的五大案例整理成文,共计440页,32w字,免费提供给大家,文章底部有PDF下载链接。
32 1
福利来袭,.NET Core开发5大案例,30w字PDF文档大放送!!!
|
2月前
|
算法 BI API
C#/.NET/.NET Core优秀项目和框架2024年1月简报
C#/.NET/.NET Core优秀项目和框架2024年1月简报
|
3月前
|
算法 C#
C# .Net Core bytes转换为GB/MB/KB 算法
C# .Net Core bytes转换为GB/MB/KB 算法
34 0
|
3月前
|
前端开发
.net core mvc获取IP地址和IP所在地(其实是百度的)
.net core mvc获取IP地址和IP所在地(其实是百度的)
123 0