基于.NET CORE微服务框架 -谈谈surging API网关

作者:超级管理员 更新时间:2017-09-13 10:57:29 来源:未知 点击:15642
  1、前言  对于最近surging更新的API网关大家也有所关注,也收到了不少反馈提出是否能介绍下Api网关,那么我们将在此篇文章中谈谈surgingApi网关  开源地址:https://git
   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架构设计。

【推荐】Appium直播课早鸟价限时优惠,APP自动化的首选利器>>

推荐阅读

热门内容

Android开源数据库 GreenDa

  GreenDao是一款对象关系映射(...

深入理解计算机系统(1.1)——Hell

  1、计算机系统  我们知道计算机系统...

基于.NET CORE微服务框架 -谈谈

  1、前言  对于最近surging更...

Google:防钓鱼工具让全球30亿台设

  Google宣布防钓鱼工具已经累计为...

难以避免的泄漏事故:怎么解?

  世界各地的企业都在担忧网络安全威胁问...

苹果谈Siri隐私:会收集数据,但不保存

  据MacRumors报道,在iOS1...

TestLink 的使用详解

  一、初始配置(设置用户、产品)  1...

selenium知识点小结

  环境:  Python:3.6.1 ...

安全扫描工具 AppScan

  IBMRationalAppScan...

如何负责一个项目的质量保证工作?

  问题  通常,我在面试测试相关候选人...

最新内容

Android开源数据库 GreenDao实践

  GreenDao是一款对象关系映射(ORM)的开源数据库框架,通过将Java...

深入理解计算机系统(1.1)——Hello World 是如何运行的

  1、计算机系统  我们知道计算机系统是由硬件和软件组成的。它们共同工作来运行...

基于.NET CORE微服务框架 -谈谈surging API网关

  1、前言  对于最近surging更新的API网关大家也有所关注,也收到了不...

Google:防钓鱼工具让全球30亿台设备更安全

  Google宣布防钓鱼工具已经累计为超过30亿台设备提供安全防护。搜索巨头本...

难以避免的泄漏事故:怎么解?

  世界各地的企业都在担忧网络安全威胁问题,特别是每天看到大量窃取信息和知识产权...

导入jar包,jar包名类名与SDK相同,怎么调用jar中的类或者方法,求大神解疑!

本人是新手,公司给了一个项目,并给了一个classes.jar包,我也在项目中导...

苹果谈Siri隐私:会收集数据,但不保存个人信息

  据MacRumors报道,在iOS11发布之前,苹果营销副总裁格雷格·乔斯维...

请问怎么更改AndroidStudio默认新建工程的时候的gradle版本?

每次新建项目都得自己改回来不然安装上去程序会出错buildscript {   ...

程序员想要不被淘汰 终身学习才是关键

  在IT行业,技术迅速转变、业务要求不断变化,这使得重塑职业道路成为一个关乎生...

出不来结猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,好不过瘾,又多吃了一个. 第二天早上又吃了剩下的桃子的一半,又多吃了一个。以后每天都吃了前一天剩

#include#includeint f...

关于对文件名使用 string.Replace() 没有作用 请教

这里我用replace()想要让文件名变成E:\CloudMusic\薛之谦 -...

以下代码实现的单例模式有什么缺陷?如果有,请做出你的修改!

public sealed class Singleton       stat...

wpf的keydown事件

页面只有这句话         

ASP.NET MVC验证表单

代码如下        [Required(ErrorMessage = "标题...

以XX开头的标识符太长,最大长度为128

本帖最后由qz6412525于2017-09-1212:09:14编辑如题,是一...

分部声明包含冲突的可访问性修饰符

代码如下:namespace ConstDefinitionLib{    pu...

关于 查询语句 中select 索引问题

string[] fruits = { "apple", "banana", "...

EasyUi Datagrid+DetailView 如何让他默认全部展开

各位牛人,有没有做过类似的功能效果,EasyUI DataGrid+Detail...

c#串口程序界面卡死问题

 private void sp_DataReceived(object sen...

浏览器内核问题

请问有谁会使用vs2013,用c#或vb编写在winform里面嵌一个谷歌浏览器...