一、MSA 简介

     1.1、MSA 是什么

    
微服务架构 MSA 是 Microservice Architect
的简称,它是一种架构形式,它提倡将单一应用程序划分成一组小的服务,服务期间交互通讯、互相配合,为用户提供最后价值。它与
SOA 之间的区分如下:

    
图片 1

     1.2、我们的 MSA 框架

    
我们的微服务框架 MsaFx.dll 是个依照 Service(Service)Stack 4.0.60
包装实现的.NET Web Service(Service)s 框架,而 Service(Service)Stack
本身帮助通用的轻量级协议和 Metadata。MsaFx 与常见 Web Service(Service)s 框架如
WCF 相比较,紧要优势如下:

  1. 高性能:性能好、速度快。
  2. 匡助跨平台运行:基于
    MsaFx 开发出的 Web 瑟维斯(Service)(Service)s 既能够运转在 Windows
    环境中,又可以运转在支撑 Mono 的 Linux 环境中。
  3. 支撑多协议:如
    JSON 格式的也辅助 XSD。
  4. 更加 Web
    化:RESTful。
  5. 服务端实现与客户端实现的一心解耦:MSA
    基于音信的统筹,使得服务端的 API
    改变并不会损坏现有的客户端,达到服务端实现与客户端实现完全解耦的目标。
  6. MSA API
    可视化表明文档便于你调试。
  7. 命理术数:使用 MSA
    举办支付和保安服务所需的技艺和时间投入要小很多。
  8. 易用:简化了
    REST 以及 WCF SOAP 风格的 Web 瑟维斯(Service)(Service)s 的支出进程。

     1.3、MSA 框架实现架构

     MSA
服务端的架构请见下图的率先张图,MSA 的 HTTP
客户端架构请见下图的第二张图。MSA 的内部是确立在原生的 ASP.NET
IHttpHandler 之上实现的,扶助 JSON、XML、JSV、HTML、Message
Pack、ProtoBuf、CSV 等信息格式。

    
图片 2

                                                  MSA
服务端的架构

    
图片 3

                                             MSA
HTTP Client 的架构

二、MSA 框架的运用

     1、服务托管

    
服务端的服务对外提供劳务前,必须先要把服务端给托管起来。MSA
提供了经过 IIS、Self-Host
等多种格局把服务端给托管起来,宿主环境得以是控制台应用或 Windows Service或 ASP.NET Web 应用或 ASP.NET MVC 应用。提供的 MSA Demo 的宿主环境用的是
ASP.NET Web 应用。

     2、 路由

         
A、MSA 自身提供的默认路由是:

/[xml|json|html|jsv|csv]/[reply|oneway]/[Request DTO 名] [(?query 参数 1={值}&query 参数 2={值}&......&query 参数 n={值})]。

         
B、成立自定义路由,其创制方法是:使用
RouteAttribute 或在宿主环境中布局。提供的 MSA Demo
采取的是在宿主环境中布置路由这种办法来创设自定义路由。

     3、怎么着申明请求参数的合法性

    
假若您需要在付出请求参数前,验证请求参数是否必填或是否合法,那么申明逻辑必须写在后续自
MSA 的 AbstractValidator的类里(参考例子请见 MSA Demo 的
OrderValidator.cs),然后在宿主环境中展开开启验证的布置:

Plugins.Add(new ValidationFeature()); 
container.RegisterValidator(typeof(OrderValidator));

     4、服务

    
创造 MSA 服务时,必须继承来自 MSA 的 Service类。

     5、MSA 内置的客户端

    
    
5.1
、MSA
内置了一些方便访问的客户端,这个目的都实现了 I瑟维斯(Service)(Service)Client
接口,其中援助 REST 的客户端还都实现了 IRestClient 接口。

    
    
        那多少个客户端对象包括:Json瑟维斯(Service)(Service)Client、Jsv瑟维斯(Service)Client、Xml瑟维斯(Service)(Service)Client、MsgPack瑟维斯(Service)(Service)Client、ProtoBuf瑟维斯(Service)Client、Soap11Service(Service)Client、Soap12瑟维斯(Service)Client
等。

         
**
       
**从名称可以见见,这三种不同之处在于帮助的连串化和反连串化格式不同。因为它们贯彻的是均等的接口,所以它们的用法相同,也可以相互替换。

         
**
       
**MSA Demo 中用到了
Json瑟维斯(Service)(Service)Client 和 ProtoBufServiceClient 这二种客户端,其中当用到
ProtoBufServiceClient 客户端时,你还亟需做到如下工作:

    
    
    
    
a、除了需要引用 MSA.dll 外,还索要引用
protobuf-net.dll。

    
    
    
    
b、需要在宿主环境中开展如下配置:

                    Plugins.Add(new ProtoBufFormat());

    
    
    
    
c、必须分别给 Request DTO 对象和 Response
DTO 对象的各属性标上 [DataMember(Order = {0})] 特性,具体写法请见 MSA
Demo 的 ProductRequestDTO.cs 和 ProductResponseDTO.cs。

    
    
5.2
、MSA 内置的客户端提供
Get、Send、Post、Put、Delete 等艺术。查询数据貌似用 Get
方法,新增操作一般用 Post 方法,更新操作一般用 Put 方法,删除操作一般用
Delete 方法。这个办法都有重载。

    
    
    
   
以下是 Get 方法的里边一个签字:

                    TResponse Get<TResponse>(IReturn<TResponse> requestDto);

     6、MSA API 可视化表明文档自动生成的兑现

    
在宿主环境中加如下配置:

Plugins.Add(new SwaggerFeature());

    
即便需要在 MSA API
可视化表明文档中可知见到各请求参数、响应的意思表明,那么需要为 Request
DTO、Response DTO 对象的各属性标上 ApiMember,代码参考如下:

 1 public class OrderRequest : IReturn<OrderResponse>
 2 {
 3    [ApiMember(Name = "Id", Description = "订单 ID 号", IsRequired = false)]
 4    public int Id { get; set; }
 5    [ApiMember(Name = "CustomerName", Description = "客户名", IsRequired = false)]
 6    public string CustomerName { get; set; }
 7    //......
 8    [ApiMember(Name = "OrderItemList", Description = "订购的产品列表", IsRequired = false)]
 9    public List<OrderItem> OrderItemList { get; set; }
10 } 

    
运行结果如下图所示:

    
图片 4

    
    
    
在 MSA API
可视化表达文档中显得各请求参数、响应的含义表明

     7、运行结果

    
先运行托管应用(如 MSA Demo 中
瑟维斯(Service)(Service)Host 项目),出现下图所示的 Metadata
页。然后再运行客户端来调用微服务;也可透过浏览器查看数据,网址输入格式如:

     http://localhost:34833/orders/1.html?CustomerName= 客户 _1&IsTakeAway=true&StatusCode=1&CreatedDate=2017-08-21 10:58:48.230

    
或:

          http://localhost:34833/html/reply/GetOrderRequest?Id=1&CustomerName= 客户 _1&IsTakeAway=true&StatusCode=1&CreatedDate=2017-08-21 10:58:48.230

    
其中,第 1 个网址格式规则就是 MSA
Demo 中在宿主环境中所配的自定义路由规则,第 2 个网址格式规则就是由 MSA
提供的默认路由规则。

    
单击下图所示 Metadata 页中的【MSA API
UI】后,进入下图所示的 MSA API
可视化表明文档界面,开发人士可以透过那份由 MSA
自动生成的印证文档举办调节,相当有利。

    
图片 5

    
    
    
    
    
    
    
    
    
Metadata 页

    
图片 6

    
    
    
    
    
    
  
MSA API 可视化表达文档界面

三、微服务治理

    
在我们自主开发的框架管理体系中,举行接口注册,请见下图。其中,规定内部服务访问名的命名规范是:/{***瑟维斯(Service)(Service)}/
方法名,如 /OrderService/CreateOrder;规定外部服务走访名 OpenApiName
的命名规范是:{各产品线的缩写英文名}方法名,如 FltCreateOrder,其中 Flt
表示国内机票业务的缩写英文名。

    
图片 7

    
    
    
    
    
    
    
    
    
    
MSA 接口注册页

四、微服务网关 API Gateway

     4.1、API Gateway 的简介

    
API Gateway
风格的焦点理念是采取一个轻量级的音信网关作为持有客户端的主入口,并且在
API Gateway 层面上贯彻通用的非功效性需求。如下图所示:所有的劳务通过 API
网关来暴露,这是持有客户端访问的唯一入口;如若一个劳动要访问另一个服务,也要经过那多少个网关。

    
图片 8

    
    
    
    
    
    
    
    
负有服务通过一个 API
网关来显露

    
一旦 API
网关允许客户端消费一个受管制的 API,那么我们就足以以受管制的 API
模式利用它来透露这多少个微服务所实现的事务逻辑。API 网关以 NIO、IOCP
来连续内部受管制的 API,以实现 API 网关的高并发。

     4.2、API Gateway 的优点

    
图片 9

  • 网络隔离:微服务部署在了内网,通过
    API Gateway 开放给 PartnerAPI、WebAPI 或 MobileAPI。
  • 在网关层面的轻量级音讯路由和更换。
  • 在网关层面对存在的微服务提供必要的纸上谈兵。例如,网关可以挑选对两样的用户显露不同的
    API。
  • 一个核心的地方提供非效能性的能力,这个力量可复用,
    比如超时、限流、熔断、监控、日志记录等。
  • 经过适用
    API
    网关格局,微服务可以变得更为轻量,因为非效能性需求都在网关上贯彻了。
  • 统一安全管控。

     4.3、API Gateway 的架构

    
图片 10

     4.4、API Gateway 的功能

    
API Gateway 紧要实现以下职能:

  1. *路由映射:外部服务走访名映射到相应的里边服务走访名。*
  2. *权限验证:包括针对客户角色的拜会授权验证、针对客户的造访授权验证、IP
    黑名单验证。*
  3. *超时处理:当
    API 网关调用的内部服务响应时间超越了在独立开发的 API
    网关后台管理子系统中所设置的同意最长的逾期时间时,API
    网关会立时停下调用,并再次来到相关音信给您。*
  4. *限流控制:当您通过
    API 网关调用其中服务的频率达到在某个阈值时,API
    网关会立即做断开链路处理。过了光阴后,链路会自动关闭回去。*
  5. *熔断处理:熔断处理对避免无谓的资源消耗特别有用,当通过
    API 网关调用的其中服务现身非凡的频率高达某个阈值时,那么 API
    网关会做临时熔断处理即临时断开链路,暂时平息你对非凡内部服务的调用。临时熔断后,过了一段时间后,链路会自动关闭回去。*
  6. *日志音信记录:会记录客户
    IP、客户请求参数、再次回到结果、相当新闻等音讯。*

     4.5、API Gateway 的使用

    
在行使 API Gateway
此前,需要先配备网关参数。网关参数的部署是在自主开发的 API
网关后台管理子系统中开展:

    
图片 11

    
    
    
    
    
在自立开发的 API
网关后台管理子系统中配置网关参数

五、Demo 下载及更多材料

 

著作转载自:http://www.infoq.com/cn/articles/architecture-practice-06-microservice-architect?utm_source=infoq&utm_campaign=user_page&utm_medium=link

相关文章

网站地图xml地图