1、前言

对于最近surging更新的API 网关大家也有所关注,也收到了不少反馈提出是否能介绍下Api网关,那么我们将在此篇文章中谈谈surging Api 网关

开源地址:https://github.com/dotnetcore/surging

2. API网关

简介

API 网关是服务提供者的访问入口,主要起到隔离外部访问与内部系统的作用。它主要解决服务消费者的身份认证、监控、负载均衡、缓存、限流等问题。

API网关的流行,源于近几年的大型互联网的兴起,从以前的单体应用,到垂直应用架构,再到现在的微服务架构,而微服务的出现,让API网关成为微服务的标配组件

作用和价值

对于API网关主要起到以下作用:

系统隔离:隔离外部访问与内部系统

业务解耦:解耦各层的相互依赖,快速应对业务变化,使得微服务能够独立灵活部署,统一管理

灵活配置:对于微服务水平和垂直扩展能顺利进行而搭设的工作平台,平台能对于服务进行灵活配置。

系统隔离

内部服务与外网都是隔离的,为了安全考虑,应用服务都是运行在内网,不允许外部访问,这时候API网关通过身份验证、数据安全、容错降级等规则,对访问进行了初步的过滤,从而达到灵活动态配置,保证了数据的安全性和系统的可靠性。

系统模块的解耦

微服务所面向的角色包括服务提供者,服务消费者,服务运维等,各个角色都有各自的述求,为了满足各个角色的需求和依赖关系,就需要网关动态灵活配置,让各方专注于自己的领域需求。主要从以下几点进行解耦

解耦业务与非业务功能

在满足实现业务功能外,还面临非业务的功能性需求,比如突发性大规模服务访问,黑客攻击,身份验证,数据的流量监控等,这些非业务的功能需求,不能与业务服务耦合在一起,需要解耦成独立的系统,由专业人员和专业团队进行处理

解耦服务消费者与服务提供者

对于服务提供者主要是对业务进行实现,而业务的快速变化,为不了不破坏业务的稳定性,这时候就需要中间层定义统一的接口、协议和报文,以满足服务消费者多变的需求。

业务和非业务可配置化

网关除了请求路由、转发外,还需要负责数据安全、鉴权、限流、监控等,往往随着业务的变化不断调整,比如访问大规模增长,这时候就需要考虑发生错误能及时熔断降级,或者分流,限流,而这时候就需要网关提供可配置化的界面,便于修改,而对于网关来说更应该提供插件化的机制来支持可配置化的功能性动态扩展。

网关的价值

网关对于系统进行了隔离,保证了服务的安全和可靠性,对于运维也减少维护成本和变更流程。服务提供者和消费者也能减少耦合,还能够独立进行部署,同时通过熔断也避免了服务大规模的瘫痪,节约服务的维护开发成本,减少上线风险。

3. surging网关架构设计

Surging网关是基于.net core针对RPC进行治理的系统,支撑微服务落地接入。通过该系统可以进行身份认证,服务流控,服务降级,数据监控等。整个系统模块如下图:

功能概述

Surging 提供的功能包括数据监控、服务管理、数据安全、身份认证、流量控制、分流控制,主要实现了对路由请求分发、鉴权、限流、降级、数据安全等功能,这里介绍下实现要点。

服务管理

服务管理包括服务路由、服务元数据、容错规则和关联服务管理,

在微服务框架中,服务注册中心用于存储服务提供者地址信息、服务元数据、关联服务信息,服务消费者通过注册中心获取和更新容错规则,而通过容错规则服务消费端就能熔断降级。并且对调用的服务提供地址进行监控,从而标识服务提供者的健康状态,架构如下:

身份认证

在传统的单体架构中,通过会话(session)或者令牌来校验用户。而在微服务架构中,用户需要针对于分布式部署的微服务集合进行交互,如采用与单体应用相同的效验模式,那么如何让所有的服务集合来认证用户是否合法。此时要解决这个问题可以采用令牌与网关相结合的方案。

这个方案所有的请求都通过网关进行认证,使用令牌进行授权,同时也可以对于令牌进行注销。
流量控制

在突发访问量增大的时候,由于服务的负载能力有限,为了防止突发情况的请求对服务压力过大而拖垮服务,也就是面对大流量的时候,如何进行流量控制?

针对于服务接口的访问量增大而采用的控制策略包括分流、降级,限流等,本文讨论下限流的策略

实际传统的架构中,我们通常使用第三方软件进行流量保护,比如Nginx、安全狗等软件。而采用第三方软件会增加运维的维护成本,也没有基于业务的可灵活性配置。所以需要通过统一的入口API网关进行管理,然后通过算法进行限流。

流量控制能从用户、服务二个维度进行流量控制,当流量超过设置阈值时,API网关会直接返回错误信息给请求者,不会再继续调用服务提供者,从而保护了服务不被攻击。

分流控制

为了防止突发情况的请求对服务压力过大而拖垮服务,,那么可以采用分流策略。通过负载均衡算法在健康可用的实例之间分发请求,这样就可以把请求均衡地分发到各个服务器上

数据安全

在业务系统中,通常会碰到一些敏感的数据,而为了防止敏感数据发生泄露,通常我们会对于敏感数据进行加密。就好比如前几年的京东数据泄露事件,CSDN的账号泄露事件,这些事件的发生使得用户的身份证、密码、电话等敏感信息以明文的形式进行外泄,导致了多名用户金钱上的损失。对于公司造成了恶劣的印象。

为了减少数据安全与系统的耦合,可以采用API 网关进行配置,这样开发人员也无需知道其加密方式。

数据监控

一个稳定可靠的系统离不开监控, 不仅监控服务是否存活,还要监控系统的运行状况,能及时发现崩溃,连接超时,内存泄漏等问题。对于运行情况会进行采集,分析,同时发现问题能及时告警通知处理人员进行处理。

模块设计

Surging 网关是统一服务入口,可方便实现对服务接口进行管控,模块组件设计如下图:

4. 总结

因为API网关处于开发初期,所以只能简单介绍下,后期会详细介绍下surging架构设计。如感兴趣请多关注或者加入QQ群:542283494

基于.NET CORE微服务框架 -谈谈surging API网关的更多相关文章

  1. 基于.NET CORE微服务框架 -谈谈surging的服务容错降级

    一.前言 对于不久开源的surging受到不少.net同学的青睐,也受到.net core学习小组的关注,邀请加入.NET China Foundation以方便国内.net core开源项目的推广, ...

  2. 基于.NET CORE微服务框架 -谈谈surging 的messagepack、protobuffer、json.net 序列化

    1.前言 surging内部使用的是高性能RPC远程服务调用,如果用json.net序列化肯定性能上达不到最优,所以后面扩展了protobuf,messagepack序列化组件,以支持RPC二进制传输 ...

  3. 基于.NET CORE微服务框架 -谈谈Cache中间件和缓存降级

    1.前言 surging受到不少.net同学的青睐,也提了不少问题,提的最多的是什么时候集成API 网关,在这里回答大家最近已经开始着手研发,应该在1,2个月内会有个初版API网关,其它像Token身 ...

  4. 基于.NET CORE微服务框架 -surging的介绍和简单示例 (开源)

    一.前言 至今为止编程开发已经11个年头,从 VB6.0,ASP时代到ASP.NET再到MVC, 从中见证了.NET技术发展,从无畏无知的懵懂少年,到现在的中年大叔,从中的酸甜苦辣也只有本人自知.随着 ...

  5. .NET Core微服务二:Ocelot API网关

    .NET Core微服务一:Consul服务中心 .NET Core微服务二:Ocelot API网关 .NET Core微服务三:polly熔断与降级 本文的项目代码,在文章结尾处可以下载. 本文使 ...

  6. 基于.NET CORE微服务框架 -浅析如何使用surging

    1.前言 surging受到大家这么强烈的关注,我感到非常意外,比如有同僚在公司的分享会上分享surging, 还有在博客拿其它的RPC框架,微服务做对比等等,这些举动都让我感觉压力很大,毕竟作为个人 ...

  7. 基于.NET CORE微服务框架 -Api网关服务管理

    1.前言 经过10多天的努力,surging 网关已经有了大致的雏形,后面还会持续更新完善,请大家持续关注研发的动态 最近也更新了surging新的版本 更新内容: 1. 扩展Zookeeper封装2 ...

  8. 基于.NET CORE微服务框架 -surging 基于messagepack、protobuffer、json.net 性能对比

    1.前言 surging内部使用的是高性能RPC远程服务调用,如果用json.net序列化肯定性能上达不到最优,所以后面扩展了protobuf,messagepack序列化组件,以支持RPC二进制传输 ...

  9. 基于thrift的微服务框架

    前一阵开源过一个基于spring-boot的rest微服务框架,今天再来一篇基于thrift的微服务加框,thrift是啥就不多了,大家自行百度或参考我之前介绍thrift的文章, thrift不仅支 ...

随机推荐

  1. CJOJ 2255 【NOIP2016】组合数问题 / Luogu 2822 组合数问题 (递推)

    CJOJ 2255 [NOIP2016]组合数问题 / Luogu 2822 组合数问题 (递推) Description 组合数\[C^m_n\]表示的是从n个物品中选出m个物品的方案数.举个例子, ...

  2. HDU 2389 Rain on your Parade / HUST 1164 4 Rain on your Parade(二分图的最大匹配)

    HDU 2389 Rain on your Parade / HUST 1164 4 Rain on your Parade(二分图的最大匹配) Description You're giving a ...

  3. Eclipse安装反编译工具JadClipse for Eclipse手把手教程

    今天闲来无事准备弄弄eclipse的反编译工具JadClipse for Eclipse,百度经验里也说的比较清楚只是两个文件下载地址没有明确 net.sf.jadclipse_3.3.0.jar   ...

  4. css display:box 新属性

    一.display:box; 在元素上设置该属性,可使其子代排列在同一水平上,类似display:inline-block;. 二.可在其子代设置如下属性 前提:使用如下属性,必须在父代设置displ ...

  5. JavaScript中异步编程

    一 关于事件的异步 事件是JavaScript中最重要的一个特征,nodejs就是利用js这一异步而设计出来的.所以这里讲一下事件机制. 在一个js文件中,如果要运行某一个函数,有2中手段,一个就是直 ...

  6. Android - FragmentTabHost 与 Fragment 制作页面切换效果

    使用 FragmentTabHost 与 Fragment 制作页面切换效果 API 19 TabHost已经不建议使用了.用 FragmentTabHost 来代替TabHost.实际上 Fragm ...

  7. hdu_1711: Number Sequence【KMP算法】

    题目链接 此次插播点笔记 hdu中点击蓝色的"Compilation Error"可以查看自己是为什么CE的 hdu中提交的话,语言选择G++可以使用<bits/stdc++ ...

  8. plsql修改表字段alter

    场景:在生产过程中有时候需要不同的环境中修改表字段,使用sql语句比较方便! 1 演示 --添加字段的语法 alter table tablename add (column datatype [de ...

  9. android studio生成junitLibs

    apply plugin: 'com.android.application'android { compileSdkVersion 24 buildToolsVersion "25.0.0 ...

  10. hadoop环境中误删除tmp文件夹的恢复

    情景描述: 种种原因,不小心把系统根目录中的tmp文件删除了!发现jps之后看不到 master主机上面的namenode,resourcemanager,secondarynamenode三个进程了 ...