基于.NET CORE微服务框架 -谈谈surging API网关
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网关的更多相关文章
- 基于.NET CORE微服务框架 -谈谈surging的服务容错降级
一.前言 对于不久开源的surging受到不少.net同学的青睐,也受到.net core学习小组的关注,邀请加入.NET China Foundation以方便国内.net core开源项目的推广, ...
- 基于.NET CORE微服务框架 -谈谈surging 的messagepack、protobuffer、json.net 序列化
1.前言 surging内部使用的是高性能RPC远程服务调用,如果用json.net序列化肯定性能上达不到最优,所以后面扩展了protobuf,messagepack序列化组件,以支持RPC二进制传输 ...
- 基于.NET CORE微服务框架 -谈谈Cache中间件和缓存降级
1.前言 surging受到不少.net同学的青睐,也提了不少问题,提的最多的是什么时候集成API 网关,在这里回答大家最近已经开始着手研发,应该在1,2个月内会有个初版API网关,其它像Token身 ...
- 基于.NET CORE微服务框架 -surging的介绍和简单示例 (开源)
一.前言 至今为止编程开发已经11个年头,从 VB6.0,ASP时代到ASP.NET再到MVC, 从中见证了.NET技术发展,从无畏无知的懵懂少年,到现在的中年大叔,从中的酸甜苦辣也只有本人自知.随着 ...
- .NET Core微服务二:Ocelot API网关
.NET Core微服务一:Consul服务中心 .NET Core微服务二:Ocelot API网关 .NET Core微服务三:polly熔断与降级 本文的项目代码,在文章结尾处可以下载. 本文使 ...
- 基于.NET CORE微服务框架 -浅析如何使用surging
1.前言 surging受到大家这么强烈的关注,我感到非常意外,比如有同僚在公司的分享会上分享surging, 还有在博客拿其它的RPC框架,微服务做对比等等,这些举动都让我感觉压力很大,毕竟作为个人 ...
- 基于.NET CORE微服务框架 -Api网关服务管理
1.前言 经过10多天的努力,surging 网关已经有了大致的雏形,后面还会持续更新完善,请大家持续关注研发的动态 最近也更新了surging新的版本 更新内容: 1. 扩展Zookeeper封装2 ...
- 基于.NET CORE微服务框架 -surging 基于messagepack、protobuffer、json.net 性能对比
1.前言 surging内部使用的是高性能RPC远程服务调用,如果用json.net序列化肯定性能上达不到最优,所以后面扩展了protobuf,messagepack序列化组件,以支持RPC二进制传输 ...
- 基于thrift的微服务框架
前一阵开源过一个基于spring-boot的rest微服务框架,今天再来一篇基于thrift的微服务加框,thrift是啥就不多了,大家自行百度或参考我之前介绍thrift的文章, thrift不仅支 ...
随机推荐
- Android使用ViewPager实现导航菜单
首先设置页面的Fragment布局: public class TabFragment extends ListFragment { @Override public void onViewCreat ...
- 【翻译】React vs Angular: JavaScript的双向性
翻译原文链接:https://blog.prototypr.io/react-vs-angular-two-sides-of-javascript-b850de22b413 我的翻译小站:http:/ ...
- jmeter压力测试报告 - DEMO
XXX压力测试报告 时间:2015-08-04 测试人员:xxx 目录 XXX压力测试报告... 1 一 测试 ...
- informatica 学习总结
问:什么是BI? 答:BI是商务智能,它包含的应用系统和技术较宽泛,通过收集,存储,分析和提供对数据的访问,来帮助企业用户做出更好的商务决策. BI应用包括决策支持,查询和报表,联机分析处理OLAP, ...
- 有点难度的JS面试题
自己总结了一些JS面试题 希望能够帮助正在找工作的程序猿(●´∀`●) 1.js 实现一个函数对javascript中json 对象进行克隆 var oldObject ="sdf" ...
- (转)Linux系统安装时分区的选择
场景:对于Linux系统的分区总是迷迷茫茫的,还是实践少,基础不牢. 以前初识Linux时,对Linux系统安装时分区的选择,一点都不了解,导致几次没法进行下一步安装,因此就静下心来,专门拿出时间研究 ...
- date——sql查询
场景:在数据库中要删除一条记录,但是该记录的唯一性只能通过插入数据库的系统时间来确定,字段为date类型,格式是:2016/10/19 17:17:29. 1 解决 在百度上找到的方法是使用to_ch ...
- jsp元素
1.指令元素:用于在JSP转换为Servlet阶段提供JSP页面的相关信息,如页面采用的字符编码集.页面中需要导入的类等信息,指令元素不会产生任何的输出到当前JSP的输出流中 指令元素有三种指令:pa ...
- iOS Socket 整理以及CocoaAsyncSocket、SRWebSocket源码解析(一)
写在准备动手的时候: Socket通讯在iOS中也是很常见,自己最近也一直在学习Telegram这个开源项目,Telegram就是在Socket的基础上做的即时通讯,这个相信了解这个开源项目的也都知道 ...
- 那些年,用C#调用过的外部Dll
经常有人找到我咨询以前在csdn资源里分享的dll调用.算算也写过N多接口程序.翻一翻试试写篇随笔. 明华IC读写器DLL 爱迪尔门锁接口DLL 通用OPOS指令打印之北洋pos打印机dll 明泰非接 ...