基于.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不仅支 ...
随机推荐
- Liunx上传下载和压缩问题分享
昨天紧急需求需要测试,开发远程发了个包需要部署到生产环境.我通过FileZila连接到服务器,然后把补丁包发送到服务器对应路径,通过CRT操作,进行包的解压.重启. 同时,为了配合开发定位问题,需要从 ...
- runtime实现对象存储型数据库——LHDB
前言 最近在GitHub上看了一份关于基于runtime封装的对象存储型数据库的开源代码,觉得非常值得分享记录一下,在IOS中对数据库的操作一般通过CoreData和SQLite,CoreData 虽 ...
- Hibernate 实体关联关系映射----总结
在我看来,Hibernate提供这些映射关系,常用就是一对一和多对一,并且在能不用连接表的时候尽量不要用连接表.多对多会用到,如果用到了,应该首先考虑底层数据库设计是否合理. 在实际开发中,在Hi ...
- AngularJS $compile动态生成html
angular.module('app') .directive('compile', function ($compile) { return function (scope, element, a ...
- iOS源码博文集锦1
iOS精选源码 iOS一种弹出视图效果带动画 导航栏显示渐变色,类似qq一样 一分钟找到重力方向 简单高度自定义的日历.可根据项目的需求灵活修改布局 类似于UITableView且极简的图片浏览器 小 ...
- Uva 679 Dropping Ballls 二叉树的编号
这个程序常规处理起来数据量很大,I可以高达2^D-1 /* ....... */ 里面的代码块据此避免了开太大的数组 做太多的循环 #include<cstdio> #include< ...
- 设计模式的征途—18.策略(Strategy)模式
俗话说条条大路通罗马,很多情况下实现某个目标地途径都不只一条.在软件开发中,也会时常遇到这样的情况,实现某一个功能有多条途径,每一条途径都对应一种算法.此时,可以使用一种设计模式来实现灵活地选择解决途 ...
- Grass Cownoisseur[Usaco2015 Jan]
题目描述 In an effort to better manage the grazing patterns of his cows, Farmer John has installed one-w ...
- 如何使用MVP+Dagger2+RxJava+Retrofit开发(1)
概述 在2016年5,6月份开始在知乎上看到开发方法,那时候记得是看mvc,mvp,mvvm这三种开发模式区别,后面进一步了解到google在github上开源了使用这3种模式进行Android开发的 ...
- 关于无法使用python执行进入百度页面的代码修改
前几天听了个坑爹的视频教学,按照你们的方法做了,但尼玛,执行下来各种问题啊: 首先进入页面,总是提示开发者模式,删了下次执行又挂了,于是乎我就找网上帖子解决问题,果然被我解决了 先装这两个文件,把浏览 ...