微服务(Microservices)是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每一个微服务仅关注于完成一件任务并很好地完成该任务。在全部状况下,每一个任务表明着一个小的业务能力。html
以往咱们开发应用程序都是单体型,虽然开发和部署比较方便,但后期随着业务的不断增长,开发迭代和性能瓶颈等问题,将会困扰开发团队,微服务就是解决此问题的有效手段。前端
那么咱们在具体实践落地微服务时,咱们又须要作什么?一个微服务框架到底又有什么呢?特别是对于.NET生态圈的小伙伴们,一直都有不少困惑,不知该如何下手。spring
既然咱们不知道,又要高清楚,那最好的办法是什么呢?我认为最有效的方式是研究成熟的产品。市面上成熟的微服务框架有一些, 而SpringCloud就是可供研究的对象,下面咱们一块儿来看看SpringCloud是什么?后端
从上面的技术栈图中能够看出:api
组件 | 选型 | 备注 |
---|---|---|
网关 | 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 |
链路追踪 | 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介绍和快速开始