.Net Core with 微服务 - 架构图

上一次我们简单介绍了什么是微服务(.NET Core with 微服务 - 什么是微服务)。介绍了微服务的来龙去脉,一些基础性的概念。有大佬在评论区指出说这根本不是微服务。由于本人的能力有限,大概也只能理解到这个层次。先不管它到底是不是微服务吧,既然开篇了,那就硬着头皮把这个系列写完。我想不管是对自己对看官多少还是有点帮助的。

架构图

这篇文章将从一张架构图开始说起(开局一张图,内容全靠凑????)。

很多介绍微服务架构的文章画的架构图比这张图复杂的多。我根据自己的理解与实践修改跟精简了一下。
上次评论区说.Net只在标题上出现了一次,那么这次,大概也只会在标题上出现一次????。大概从下一篇开始就会正式介绍如何使用 .net core 一步步实现一个最简微服务系统。下面就开始对照这张架构图进行讲解吧。

基础服务层

基础服务层是一个抽象的概念。我们把提供基础业务处理能力的服务归类到这一层。我们按照模块\领域等概念把服务划分好,最后建成了一个个独立部署的服务。它们提供一些基础的服务功能,对外提供一些api接口。每个服务都有自己独立的数据库,独立的运行时。每个服务都可以根据压力进行伸缩。这一层可以说是微服务架构里最核心的一层。

比如一个酒店管理系统,我们一般可以划分成:“酒店基本信息服务”、“订单服务”、“会员服务”、“支付服务”等等基础服务,每个服务都提供一些api,比如订单服务提供查询下单等服务,支付服务提供微信支付的支付能力等等。

当然如何划分都是似情况而定的,这里只是举个例子。

聚合服务层

我们已经有了基础服务,为什么还会有聚合服务这一层呢。假设现在用户根据订单号查询订单明细的功能。这个功能可能需要涉及到订单基本信息、用户基本信息、会员信息、支付信息、房型信息等多个api。如果有前端直接调用基础服务层,那么可能要发送多次http请求。所以为了效率往往还需要有一个服务来聚合跟适配,合并成一次请求再对前端提供服务,这样对于前端来说效率相对会高一些,开发起来也简单很多。

再比如我们现在的系统往往会接入很多终端,有PC,有APP,有小程序。由于设备的不同,我们对外需要展示的内容也会有差异,我们可以在聚合层进行api的适配跟裁剪,根据不同的设备返回不同的响应。

网关

微服务网关在这个微服务架构中起着至关重要的的地位。从上面的图上可以看到,网关在架构的顶端,是流量的入口。它对每个一个请求进行监控,路由。使每一个合法的请求进入到对应的服务。

因为所有请求都会过网关,所以网关可以做一些全局的工作或者说类似AOP思想里切面的工作。比如认证、授权、限流、过滤等等。一旦网关服务崩溃往往会影响到整个微服务的工作,尽管它内部服务全部正常,但是它可能无法对外提供服务。
正因为网关所在的位置在架构中所承担的功能,所以我们需要网关组件的性能非常高,稳定性非常高。
常用的网关组件有:kong,zuul,Ocelot 等。在 .Net 领域用的比较多的是Ocelot。

微服务相关组件

很多网上的架构图都把微服务相关的这些组件写到业务服务层下面,叫做支撑服务。其实个人是不太认同的。所谓支撑的话可以说是桌子的腿,少了一条桌子就会翻了。事实上我觉得一个完整的微服务不一定非要上全了所有组件。这种都是视情况而定的,没有绝对的说法。比如说不上监控服务,微服务就不能跑了吗?显然不是的。不是说上了这些组件就叫微服务,不上就不是微服务。有了日志聚合、服务发现等等组件是为了更好的实施微服务,但不是必须的,所以我并没有把他们叫做支撑服务。

服务注册发现

在实施微服务之后,我们的调用都变成了服务间的调用。服务间调用需要知道IP、端口等信息。再没有微服务之前,我们的调用信息一般都是写死在调用方的配置文件里(当然这话不绝对,有些公司会把这些信息写到数据库等公共的地方,以方便维护)。又由于业务的复杂,每个服务可能依赖N个其他服务,如果某个服务的IP,端口等信息发生变更,那么所有依赖该服务的服务的配置文件都要去修改,这样显然太麻烦了。有些服务为了负载是有个多个实例的,而且可能是随时会调整实例的数量。如果每次调整实例数量都要去修改其他服务的配置并重启那太麻烦了。
为了解决这个问题,业界就有了服务注册发现组件。
假设我们有服务A需要调用服务B,并且有服务注册发现组件R。整个大致流程将变成3步:

  1. 服务B启动向服务R注册自己的信息

  2. 服务A从服务R拉取服务B的信息

  3. 服务A调用服务B

有了服务注册发现组件之后,当修改A服务信息的时候再也不用去修改其他相关服务了。

常用的服务注册发现组件有:Eureka,Consul 等等。

配置中心

看了上面的服务发现注册,也许你也想到了。其实配置中心跟服务发现注册解决的是同一类问题。那就是分布式系统对于修改配置这种事情实在是太麻烦。如果实例是部署在容器内的那一个个实例去修改配置简直是一场噩梦。
为了解决这个问题,就有了配置中心。配置中心把所有服务的配置都集中管理。并且提供配置热更新、权限管理、版本管理、灰度发布等高级功能。当服务启动的时候不再从本地配置文件读取配置,而是远程从配置中心读取配置。

常用配置中心组件有:Nacos 、Apollo 、AgileConfig 。
????????????打个广告:AgileConfig 是本人开源的一个轻量级配置中心。https://github.com/kklldog/AgileConfig 求????????????!

日志聚合

日志是我们写程序离不开的一个东西。在我们排查问题的时候日志就是我们的救命稻草。我们的每个服务都在不停的生产日志。但是实施微服务后,如果按照传统的写本地文件的日志方案,显然会面临跟修改配置一样麻烦的境地。不同的日志分散在各个服务器、容器内,这种情况下查日志简直是生不如死。
日志聚合组件为我们解决了这个问题。所有的服务通过接口发送日志到聚合服务,再由聚合服务进行统一存储,并且提供统一的查询、分析的能力。
日志聚合组件业界有比较重型的 ELK ,.Net 这边也有常用的Exceptionless 、SEQ 。

监控服务

由于微服务架构带来系统的复杂性,出了问题往往无法快速定位问题。那么这个时候就需要监控系统出场了。监控系统能够在故障发生之前防范于未然,在故障发生之后快速回溯问题,定位问题。
微服务监控一般分以下几个维度的监控:

  1. 硬件资源类监控
    硬件资源是我们实施微服务的基石。CPU、内存、储存等指标在日常生产中是需要时刻关注的,不然很容易因为资源耗尽出现故障。

  2. 应用类监控 这一类监控围绕对应用、服务、容器的健康监控,对接口的调用链、性能进行监控。这里着重提一下调用链监控。在我们实施微服务后,由于复杂的业务逻辑,服务之间的调用会像蜘蛛网一样复杂。有了调用链监控后服务之间的调用可以用图像的方式展示出来,每个请求的性能,响应等都会记录下来。对于提前防范问题,以及排查问题有非常大的意义。
    这一类监控跟我们研发同学比较近,常用的组件有重量级的 SkyWalking APM ,轻量级的有 HttpReports 。

  3. 运营类监控
    这一类监控主要跟业务相关。运营的同学比较关注。比如监控每一天的流水,每天注册的会员人数,发放的优惠券等等。

微服务的组件还有很多,这里也就介绍几个常用的组件,其他不再多说。还是那句话这些组件是为了更好的实施微服务,用不用看情况。当你实施微服务的过程中发现了痛点,自然就会去找对应的方案、组件去解决它。

总结

以上通过一张微服务架构图,大概讲解了微服务架构常用的分层方案,每一层的意义,为什么要这么分。介绍了常用的微服务组件的作用功能等等。至此我们对微服务架构应该有一个比较全面的了解。但是记住一句话,架构没有固定的模板没有定式,你可以根据自己的情况来划分层次,自己的情况来决定使用哪些组件。
那么从下一篇开始我们就要正式开始使用.Net Core来一步步实现一个最简微服务项目啦,敬请期待。

相关文章

.NET Core with 微服务 - 什么是微服务

关注我的公众号一起玩转技术

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

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

相关文章

win10+tomcat+php+配置环境变量配置,Win10系统Tomcat环境变量配置方法

在Win10系统中配置Tomcat环境变量之前,需要先配置JAVA,之后就可以配置Tomcat环境了,网络上的教程要么太简单,不明觉厉,要么太复杂,笔者整理了以下思路,便是以下Win10系统Tomcat环境变量配置方法…

136个Python 机器学习知识点让你受益终生!

全世界只有3.14 % 的人关注了数据与算法之美如果村里通了网,那你一定知道【AI】人工智能。如果你会网上冲浪,那你一定看到过【ML】机器学习。小编在网上看到一个段子:ML派坐落美利坚合众山中,百年来武学奇才辈出,隐然成…

微软Build2021今日召开,共同期待VS2022+.NET6!

Microsoft Build 2021全球开发者大会将至,将带来什么惊喜呢?去年Build 2020是第一次完全线上举办的Build大会,是第一次完全属于开发者的大会,几乎所有的新产品都是属于开发者,开发者是唯一的主角!今年的Bui…

Google和百度都无法替代的10大深网搜索引擎

全世界只有3.14 % 的人关注了数据与算法之美当我们想要搜索某些内容时,我们第一个想到的就是打开Google、百度或必应这类的搜索引擎。但针对有些内容,却是这些常规搜索引擎无法获取到的,那就是隐藏在深网的内容。据不完全统计,深网…

编写properties文件的Eclipse插件

2019独角兽企业重金招聘Python工程师标准>>> 分享一个不错的编写properties文件的Eclipse插件(plugin),有了它我们在编辑一些简体中文、繁体中文等 Unicode文本时,就不必再使用native2ascii编码了。您可以通过Eclipse中…

php显示前60个字,DEDECMS中怎么让文章标题栏突破60个字符

DEDECMS中怎么让文章标题栏突破60个字符?1、使用PHPMYADMIN 修改 MYSQL数据结构CODE: ALTER TABLE dede_archives CHANGE title title VARCHAR( 250 ) [Copy to clipboard]2、打开/dede/action_article_save.php找到39行 CODE: $title cn_substr($title,60); [Copy…

数学是理工基础,如何才能令人信服?

随着科技的快速发展,人工智能的重要性日渐显现。而数学知识蕴含着处理智能问题的基本思想与方法,是理解复杂算法的必备要素。在机器学习工作流程中,数学与代码高度交织在一起,代码通常可以根据数学直观地构建,甚至会共…

Win7玩CF,不能全屏的解决方法...

今天用自己的本本玩CF,发天竟然不能全屏,抓狂呀! 在网上找了下,解决方法如下: 打开注册表,定位到: HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\GraphicsDrivers\Configuration\AUO183C0_01_07D9_17^773484D7596…

EFCore之增删改查

1. 连接数据库通过依赖注入配置应用程序&#xff0c;通过startup类的ConfigureService方法中的AddDbContext将EFCore添加到依赖注入容器public void ConfigureServices(IServiceCollection services) {services.AddControllers();services.AddDbContext<OpenDbContext>(o…

一堂儿童科学实验课引起的思考:数学和化学有什么关系?

全世界只有3.14 % 的人关注了数据与算法之美前段时间&#xff0c;我带侄子上了一堂化学课&#xff0c;回来之后&#xff0c;他一直意犹未尽找我的聊化学的事&#xff0c;期间他也问了身为数学专业的我一个交叉问题&#xff1a;叔&#xff0c;「数学」和「化学」有啥关系&#x…

使用 KubernetesClient 操作 kubernetes

使用 KubernetesClient 操作 kubernetesIntro我们的应用都是部署在 Kubernetes 上的&#xff0c;我们有一个服务内部有一层 MemoryCache&#xff0c;之前会依赖 Redis 的 Pub/Sub 来做缓存的更新&#xff0c;而 Redis 的 Pub/Sub 是一种不可靠的更新机制&#xff0c;容易发生消…

cent os重置mysql,linux mysql 能登陆不能修改用户(cent os 6.2)解决思路

linux mysql 能登陆不能修改用户(cent os 6.2)[root3mao /]# select user,host,password from mysql.userbash: syntax error near unexpected token from[root3mao /]# mysql -u rootWelcome to the MySQL monitor. Commands end with ; or /g.Your MySQL connection id is 4S…

本、硕、博到底有什么区别?清华教授的“兔子理论”让你快速弄懂

全世界只有3.14 % 的人关注了数据与算法之美前段时间&#xff0c;有人问到卢sir一个问题——“本、硕、博之间到底有什么区别&#xff1f;”曾经就有一位清华大学教授就讨论过这个问题&#xff0c;让我们来看看这位清华教授是如何看待本、硕、博区别的吧。作者 | 阎学通教授清华…

迁移SVN注意事项及操作方法

最近公司要迁移SVN到新服务器&#xff0c;虽说现在GIT貌似更胜一筹&#xff0c;但是相信用svn的公司还是不在少数&#xff0c;就花了点时间把自己迁移的过程整理了一下。 文档中也许还有不足之处&#xff0c;有问题的话&#xff0c;大家可以告诉我&#xff0c;我会在第一时间修…

重磅!微软发布新一代 Teams 开发工具 —— Teams Toolkit!不止VS Code extension!

今天凌晨&#xff08;北京时间 2021 年 5 月 26 日&#xff09;&#xff0c;在一年一度的 Build 大会上&#xff0c;微软正式发布了新一代的 Teams 开发工具 —— Teams Toolkit。截止到 2021 年 4 月份&#xff0c;Microsoft Teams 的日活用户已经达到了惊人的1.45亿&#xff…

UML实践----用例图、顺序图、状态图、类图、包图、协作图

http://www.uml.org.cn/oobject/200901203.asp UML实践----用例图、顺序图、状态图、类图、包图、协作图 2009-01-20 作者&#xff1a;Randy Miller 来源&#xff1a;网络 面向对象的问题的处理的关键是建模问题。建模可以把在复杂世界的许多重要的细节给抽象出。许多建模工具封…

“六级”题公布,觉得WebAPI简单的,勿进!

大型业务为什么需要深入WebAPI?众所周知&#xff0c;开发健壮的&#xff0c;稳定的&#xff0c;高度扩展性的业务程序&#xff0c;必须要有好的业务框架程序。就好比宝马X5和东风雪铁龙&#xff0c;如果大家体验过两车性能&#xff0c;都知道&#xff0c;宝马X5的性能甩东风雪…

hdu 2896 病毒侵袭

http://acm.hdu.edu.cn/showproblem.php?pid2896 AC自动机的简单题。。。忘记关debug了&#xff0c;wa了一次。。。囧&#xff01; View Code 1 #include <cstdio>2 #include <cstring>3 #include <algorithm>4 #include <set>5 #include <cstdli…

一件有趣的事:我用 Python 爬了爬自己的微信朋友

全世界只有3.14 % 的人关注了数据与算法之美最近几天干啥都不来劲&#xff0c;昨晚偶然了解到Python里的itchat包&#xff0c;它已经完成了wechat的个人账号API接口&#xff0c;使爬取个人微信信息更加方便。鉴于自己很早之前就想知道诸如自己微信好友性别比例都来自哪个城市之…

ML.NET Cookbook:(4)如何调试实验或预览管道?

大多数ML.NET数据操作都是延迟执行的&#xff1a;声明时&#xff0c;操作符不会立即处理数据&#xff0c;而是验证该操作是否可行。执行被推迟到实际请求输出数据为止。这意味着架构不匹配将在声明时抛出&#xff0c;但是直到执行时才抛出数据错误。延迟计算是数据库系统的一种…