.Net微服务实践(一):微服务框架选型
微服务框架
微服务(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 KongTyk OrangeSpring Cloud Gateway apiaxleapi-umbrella |
| 服务注册与发现 | Eureka Consul zookeeper |
| 服务调用 | Feign restTemplate |
| 负载均衡 | Ribbon |
| 断路器 | Hystrix |
| 配置管理 | Spring Cloud Config |
| 链路追踪 | Spring Cloud Sleuth Zipkin HTrace kyWalking |
| 安全 | Spring Cloud Security Auth2 IdentityServer4 |
| 监控 | spectator atlas |
| 消息、事件总线 | Spring Cloud Bus (Redis、RabbitMQ、Kafaka) |
最后
上面已经介绍了一个微服务框架所包含的架构组件,那么.NET下如何落地呢?接下来我们从网关开始来一步一步实践。 .NET下的网关,我们推荐使用Ocelot,来开始我们的Ocelot之旅.
.Net微服务实践(一):微服务框架选型的更多相关文章
- Openstack+Kubernetes+Docker微服务实践之路--服务发布
结合上文,我们的服务已经可以正常运行了,但它的访问方式只能通过服务器IP加上端口来访问,如何通过域名的方式来访问到我们服务,本来想使用Kubernetes的Ingress来做,折腾一天感觉比较麻烦,I ...
- [Abp vNext微服务实践] - 框架分析
一.简介 abp vNext新框架的热度一直都很高,于是最近上手将vNext的微服务Demo做了一番研究.我的体验是,vNext的微服务架构确实比较成熟,但是十分难以上手,对于没有微服务开发经验的.n ...
- Node.js微服务实践(一)
什么是微服务 微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成.系统中的各个微服务可被独立部署,各个微服务之间是松耦合的.每个微服务仅关注于完成一件任务并很好地完成该任务.在所有情况下 ...
- ASP.NET Core OceLot 微服务实践
1.OceLot中间件介绍 在传统的BS应用中,随着业务需求的快速发展变化,需求不断增长,迫切需要一种更加快速高效的软件交付方式.微服务可以弥补单体应用不足,是一种更加快速高效软件架构风格.单体应用被 ...
- 2019年微服务实践第一课,网易&谐云&蘑菇街&奥思技术大咖深度分享
微服务的概念最早由Martin Fowler与James Lewis于2014年共同提出,核心思想是围绕业务能力组织服务,各个微服务可被独立部署,服务间是松耦合的关系,以及数据和治理的去中心化管理.微 ...
- QCon技术干货:个推基于Docker和Kubernetes的微服务实践
2016年伊始,Docker无比兴盛,如今Kubernetes万人瞩目.在这个无比需要创新与速度的时代,由容器.微服务.DevOps构成的云原生席卷整个IT界.在近期举办的QCon全球软件开发大会上, ...
- 基于SpringCloud的微服务实践
微服务不同于单一架构应用, 是典型的分布式场景, 各服务之间通过IPC进行通信. 实现微服务的过程中, 我们需要解决以下问题: 服务注册和服务发现. 根据应用选择合适的通信协议和数据协议. 例如可以选 ...
- .NET CORE微服务实践
.NET CORE微服务实践 https://www.cnblogs.com/zengqinglei/p/9570343.html .NET CORE 实践部署架构图 实践源码:https://git ...
- SFDC 微服务实践之路 2016.12.10 杭州(整理)--转
原文地址:http://mp.weixin.qq.com/s/8cC4Ewt6yPjnxdYxuNZlFQ 微服务是什么? 微服务是一种细粒度(Fine-Grain)的SOA 或许在座的高朋了解过其概 ...
随机推荐
- iOS应用构建与部署小结
注:本文首发于我的个人博客:https://evilpan.com/2019/04/06/ios-basics/ 上篇文章介绍了Objective-C的基本概念,本文就来接着看如何创建我们的第一个简单 ...
- nowcoder 135F 圆
链接:https://www.nowcoder.com/acm/contest/135/F来源:牛客网 圆(circle) 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 3276 ...
- ADO.NET连接数据库DBHelper工具类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- c++ 中的单例类模板的实现方法
1.什么是单例模式 在架构设计时,某些类在整个系统生命周期中最多只能有一个对象存在 ( Single Instance ).如超市收银系统,其外观主要由显示器(1个).扫描枪(1个).收款箱(1个)组 ...
- Java第一节课考试
1 package kaoshi; import java.util.Scanner; public class ScoreInformation { Scanner input=new Scanne ...
- 【Weiss】【第03章】练习3.25:数组模拟队列
[练习3.25] 编写实现队列的例程,使用 a.链表 b.数组 Answer: 在这章一开头就已经写了个链表的队列例程了,所以实际上只要做b小题就可以. 数组模拟队列和链表的两点小不同是: ①.数组空 ...
- 手写 Promise 符合 Promise/A+规范
异步编程是前端开发者必需的技能,过去管理异步的主要机制都是通过函数回调,然而会出现像“回调地狱”这样的问题.为了更好的管理回调,ES6 增加了一个新的特性 Promise.Promise 是 ES7 ...
- JDBC封装-Java(新手)
JDBC的封装,自己总结的自己总结的自己总结的 dao (代码分层)命名规范: 1.com.XXX.dao 存放dao相关的类型 例如 StudentDAOImpl 处理 数据库的链接 存取数据 2. ...
- pycharm 更换pip镜像源为国内,解决下载慢的问题
参考链接:https://www.cnblogs.com/hkgov/p/7799078.html 官方源下载速度太慢,换成国内源会很快. 推荐清华的源:https://pypi.tuna.tsing ...
- Natas30 Writeup(sql注入)
Natas30: 本关是一个登录页面,查看源码,可以发现关键代码. if ('POST' eq request_method && param('username') &&am ...