中小研发团队架构实践之微服务MSA
一、MSA简介
1.1、MSA是什么
| SOA实现 | 微服务架构实现 | |
| 企业级,自顶向下开展实施 | 团队级,自底向上开展实施 | |
| 粒度大:服务由多个子系统组成 | 粒度细:一个系统被拆分成多个服务,且服务的定义更加清晰 | |
| 重ESB:企业服务总线,集中式的服务架构 | 轻网关:无集中式总线,松散的服务架构 | |
| 开发过程复杂 | 易开发:减少了企业ESB开发的复杂性,与敏捷开发的思想高度结合在一起 | |
| 单块架构系统,相互依赖,部署复杂 | 服务能被独立部署 | |
1.2、我们的MSA框架
1.3、MSA框架实现架构


二、MSA框架的使用
1、服务托管
2、 路由
3、如何验证请求参数的合法性
Plugins.Add(new ValidationFeature());
container.RegisterValidator(typeof(OrderValidator));
4、服务
5、MSA内置的客户端
Plugins.Add(new ProtoBufFormat());
c、必须分别给Request DTO对象和Response DTO对象的各属性标上[DataMember(Order = {0})]特性,具体写法请见MSA Demo的ProductRequestDTO.cs和ProductResponseDTO.cs。
TResponse Get<TResponse>(IReturn<TResponse> requestDto);
6、MSA API可视化说明文档自动生成的实现
Plugins.Add(new SwaggerFeature());
如果需要在MSA API可视化说明文档中能够看到各请求参数、响应的含义说明,那么需要为Request DTO、Response DTO对象的各属性标上ApiMember,代码参考如下:
public class OrderRequest : IReturn<OrderResponse>
{
[ApiMember(Name = "Id", Description = "订单ID号", IsRequired = false)]
public int Id { get; set; }
[ApiMember(Name = "CustomerName", Description = "客户名", IsRequired = false)]
public string CustomerName { get; set; }
//......
[ApiMember(Name = "OrderItemList", Description = "订购的产品列表", IsRequired = false)]
public List<OrderItem> OrderItemList { get; set; }
}

7、运行结果


三、微服务治理

四、微服务网关API Gateway
4.1、API Gateway的简介

4.2、API Gateway的优点

- 网络隔离:微服务部署在了内网,通过API Gateway开放给PartnerAPI、WebAPI或MobileAPI。
- 在网关层面的轻量级消息路由和转换。
- 在网关层面对存在的微服务提供必要的抽象。例如,网关可以选择对不同的用户暴露不同的API。
- 一个中心的地方提供非功能性的能力,这些能力可复用, 比如超时、限流、熔断、监控、日志记录等。
- 通过适用API网关模式,微服务可以变得更加轻量,因为非功能性需求都在网关上实现了。
- 统一安全管控。
4.3、API Gateway的架构

4.4、API Gateway的功能
4.5、API Gateway的使用

五、Demo下载及更多资料
- MSADemo下载地址:https://github.com/das2017/MSADemo
- APIGatewayDemo下载地址:https://github.com/das2017/ApiGatewayDemo
- ServiceStack官网:https://servicestack.net/
中小研发团队架构实践之微服务MSA的更多相关文章
- 中小研发团队架构实践之生产环境诊断工具WinDbg 三分钟学会.NET微服务之Polly 使用.Net Core+IView+Vue集成上传图片功能 Fiddler原理~知多少? ABP框架(asp.net core 2.X+Vue)模板项目学习之路(一) C#程序中设置全局代理(Global Proxy) WCF 4.0 使用说明 如何在IIS上发布,并能正常访问
中小研发团队架构实践之生产环境诊断工具WinDbg 生产环境偶尔会出现一些异常问题,WinDbg或GDB是解决此类问题的利器.调试工具WinDbg如同医生的听诊器,是系统生病时做问题诊断的逆向分析工具 ...
- 中小型研发团队架构实践:分布式协调服务ZooKeeper
一.ZooKeeper 是什么 Apache ZooKeeper 由 Apache Hadoop 的子项目发展而来,于 2010 年 11 月正式成为了 Apache 的顶级项目. 相关厂商内容 优秀 ...
- 中小型研发团队架构实践:任务调度Job
一.Job 简介 Job 类似于数据库中的作业,多用于实现定时执行任务.适用场景主要包括定时轮询数据库同步.定时处理数据.定时邮件通知等. 我们的 Job 分为操作系统级别定时任务 WinJob 和 ...
- 中小型研发团队架构实践:Redis快速入门及应用
Redis的使用难吗?不难,Redis用好容易吗?不容易.Redis的使用虽然不难,但与业务结合的应用场景特别多.特别紧,用好并不容易.我们希望通过一篇文章及Demo,即可轻松.快速入门并学会应用. ...
- 中小研发团队架构实践之RabbitMQ快速入门及应用
原文:中小研发团队架构实践之RabbitMQ快速入门及应用 使用过分布式中间件的人都知道,程序员使用起来并不复杂,常用的客户端API就那么几个,比我们日常编写程序时用到的API要少得多.但是分布式中间 ...
- 中小研发团队架构实践之分布式协调器.Net版ZooKeeper
原文:中小研发团队架构实践之分布式协调器.Net版ZooKeeper 一.ZooKeeper是什么 Apache ZooKeeper是由Apache Hadoop的子项目发展而来,于2010年11月 ...
- 中小型研发团队架构实践三:微服务架构(MSA)
一.MSA 简介 1.1.MSA 是什么 微服务架构 MSA 是 Microservice Architect 的简称,它是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相通讯.互相 ...
- 中小型研发团队架构实践六:如何用好消息队列RabbitMQ?
一.写在前面 使用过分布式中间件的人都知道,程序员使用起来并不复杂,常用的客户端 API 就那么几个,比我们日常编写程序时用到的 API 要少得多.但是分布式中间件在中小研发团队中使用得并不多,为什么 ...
- 中小型研发团队架构实践九:任务调度Job
一.Job 简介 Job 类似于数据库中的作业,多用于实现定时执行任务.适用场景主要包括定时轮询数据库同步.定时处理数据.定时邮件通知等. 我们的 Job 分为操作系统级别定时任务 WinJob 和 ...
随机推荐
- struts 中自定义action访问方法
struts中action类继承了ActionSupport 默认实现了execute()方法 struts.xml配置文件中 然后可以配置如下映射: <package name =" ...
- 07_jquery入门第一天
视频来源:麦子学院 讲师:魏畅然 补充:JSON.stringify()函数 [https://www.cnblogs.com/damonlan/archive/2012/03/13/2394787. ...
- js按位运算符及其妙用
大多数语言都提供了按位运算符,恰当的使用按位运算符有时候会取得的很好的效果. 在我看来按位运算符应该有7个: 1.& 按位与 &是二元运算符,它以特定的方式的方式组合操作数中对应的位, ...
- MOOC网视频下载并视频倍速播放,超简单哒,亲测可用,( •̀ ω •́ )y
由于视频在线播放太卡,想着下载看吧~~可是这个坑爹的网站没有下载按钮,难道就不可以下载视频了吗? 小白不甘心~ 于是动手查了一下,实验很成功,估计如果会爬虫的都不用像我一样一个一个自己去下了,奈何我知 ...
- 小谈ConcurrentHashMap
面试的时候被面试官问了点相关知识,再次记录一些自己的总结 一. 1.HashTable也可实现线程安全,但是它是用synchronized实现的,所以其他线程访问HashTable的同步方法时,可能会 ...
- Linux系统中常用操作命令
常用指令 ls 显示文件或目录 -l 列出文件详细信息l(list) -a 列出当前目录下所有文件及目录,包括隐藏的a(all)mkdi ...
- ferror,perror,cleaner
1.ferror 函数原型: int ferror(FILE *fp) 功能:测试文件是否出现错误 返回值:未出错是0:出错为非0. 每次调用文件输入输出函数,均产生一个新的ferror函数值 fop ...
- #pragma once 与 #ifndef 解析
转自:http://www.cnblogs.com/hokyhu/archive/2009/03/30/1425604.html 为了避免同一个文件被include多次,C/C++中有两种方式,一种是 ...
- Chrome中xpath表达式巧妙获取
对于xpath语法不熟悉,或者要快速匹配出xpath的小伙伴来说这种方式是最快捷的了. 步骤如下: 1.打开chrome 2.ctrl + shift + c 个人比较喜欢用快捷键,不喜欢用快捷键的就 ...
- xDB and sitecore 8 hardware Recommendations
xDB and sitecore 8 hardware Recommendations as below: xDB hardware guidelines https://doc.sitecore.n ...