.Net微服务实践(一)[框架]:微服务框架选型

时间:2024-01-26 16:59:30

微服务框架

微服务(Microservices)是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。

以往我们开发应用程序都是单体型,虽然开发和部署比较方便,但后期随着业务的不断增加,开发迭代和性能瓶颈等问题,将会困扰开发团队,微服务就是解决此问题的有效手段。

那么我们在具体实践落地微服务时,我们又需要做什么?一个微服务框架到底又有什么呢?特别是对于.NET生态圈的小伙伴们,一直都有很多困惑,不知该如何下手。

既然我们不知道,又要高清楚,那最好的办法是什么呢?我认为最有效的方式是研究成熟的产品。市面上成熟的微服务框架有一些, 而SpringCloud就是可供研究的对象,下面我们一起来看看SpringCloud是什么?

SpringCloud

SpringCloud技术栈

从上面的技术栈图中可以看出:

  • 微服务框架核心是服务治理
  • 服务治理的核心组件包括网关服务注册与发现服务调用

SpringCloud核心组件

组件 选型 备注
网关 Zuul
服务注册与发现 Eureka
Consul
zookeeper
服务调用 Feign 根据注解和选择机器,拼接Url地址,发起请求
简化服务调用
负载均衡 Ribbon 服务调用负载均衡,配合Feign和Euraka使用
断路器 Hystrix 隔离、熔断以及降级的一个框架
服务线程池隔离,实现不同服务的调度隔离,避免服务雪崩

核心组件工作原理

Eureka:服务启动时,Eureka会将服务注册到EurekaService,并且EurakeClient还可以返回过来从EurekaService拉去注册表,从而知道服务在哪里

Ribbon:服务间发起请求的时候,基于Ribbon服务做到负载均衡,从一个服务的对台机器中选择一台

Feign:基于fegin的动态代理机制,根据注解和选择机器,拼接Url地址,发起请求

Hystrix:发起的请求是通过Hystrix的线程池来走,不同的服走不同的线程池,实现了不同的服务调度隔离,避免服务雪崩的问题

Zuul:如果前端后端移动端调用后台系统,统一走zull网关进入,有zull网关转发请求给对应的服务

说明:如果.Net Core平台下想要使用SpringCloud,可通过steeltoe来实现,具体可参考 https://steeltoe.io/

微服务架构组件

一个较完整的微服务架构包含的如下的组件

组件 选型
网关 Zuul
Ocelot
Kong
Tyk
Orange
Spring Cloud Gateway
apiaxle
api-umbrella
服务注册与发现 Eureka
Consul
zookeeper
服务调用 Feign
restTemplate
负载均衡 Ribbon
断路器 Hystrix
配置管理 Spring Cloud Config
apollo
链路追踪 Spring Cloud Sleuth
Zipkin
HTrace
SkyWalking
安全 Spring Cloud Security
Auth2
IdentityServer4
监控 spectator
atlas
消息、事件总线 Spring Cloud Bus (Redis、RabbitMQ、Kafaka)

最后

上面已经介绍了一个微服务框架所包含的架构组件,那么.NET下如何落地呢?接下来我们从网关开始来一步一步实践。 .NET下的网关,我们推荐使用Ocelot,来开始我们的Ocelot之旅. .Net微服务实践(二):Ocelot介绍和快速开始