AspNetCore微服务下的网关-Kong(一)

Kong是Mashape开源的高性能高可用API网关和API服务管理层。它基于OpenResty,进行API管理,并提供了插件实现API的AOP。Kong在Mashape 管理了超过15,000 个API,为200,000开发者提供了每月数十亿的请求支持。本文将从架构、API管理、插件三个层面介绍Kong。

架构

按照康威定律,我们系统架构会拆的很散,系统由一堆服务组成,如下图所示:
640?wx_fmt=png
库存服务、优惠券服务、价格服务时之前都会做一些特殊处理,如限流、黑白名单,日志、请求统计。而这些处理几乎是所有服务都需要的,这不就是我们常说的AOP嘛,当我们服务多起来的时候,应该将这些通用处理集中到一个地方进行管理,如下图所示:
640?wx_fmt=png
和下图有点相似:
640?wx_fmt=png

1.为什么要用Kong作为NetCore下的API网关?

  1. 开源,云原生(Cloud-Native),ServiceMesh,快速,弹性,RESTful还有分布式微服务的抽象层
    2.基于NGINX构建的网关,拥有更高的性能,并且在2015开源
    3.活跃的社区,在github上有111个Contributors,修复bug迅速,基本每3个月一个版本
    4.支持插件化,目前支持的插件有32个,包含授权,安全,限流,Serverless,分析和监控,转换,日志。
    5.支持企业版本和社区版本

架构预览

基于OpenResty(Nginx & Lua Scripting)

640?wx_fmt=png

上图很清晰的看见Kong的架构图,以Nginx作为基础, OpenResty构建RESTful,支持集群和数据库存储数据,插件化,还有支持用RESTful来管理端。

集群架构预览

640?wx_fmt=png
这里讲下Kong的集群原理吧,Kong在0.11.0版本之前用的是serf来做集群的,那么为什么不用serf做集群呢?开发者给出的理由如下:
1.依赖serf,serf并不属于Nginx/OpenResty
2.这种依赖相互间通信来同步的机制对于deployment和容器化都有些不便
3.在运行的Kong节点触发serf需要一些阻塞的I/O
0.11.0版本的实现思路是以数据库为中心,增加一个cluster events的表,任何Kong node都可以向数据库发送变更消息,其他节点轮训数据库改动,然后更新缓存内容,如果有节点重启连上数据库节点就可以工作了。

Kong的安装

Kong的安装方式支持很多主流的平台,目前不支持Windows,支持的安装方式如下:
640?wx_fmt=png

Kong的安装,为了方便我这里就使用docker安装了
1.创建专属kong的网络(docker的最佳实践)--link 过时了啊
docker network create kong-net
2.选择你使用的数据库,默认使用的是PostgreSQL
如果你使用的是Cassandra数据库:
提示下:Cassandra >=3.0
docker run -d --name kong-database \ --network=kong-net \ -p 9042:9042 \ cassandra:3
如果你使用的是PostgreSQL
docker run -d --name kong-database \ --network=kong-net \ -p 5432:5432 \ -e "POSTGRES_USER=kong" \ -e "POSTGRES_DB=kong" \ postgres:9.6
3.数据库迁移,初始化库表结构:

 docker run --rm \--network=kong-net \    -e "KONG_DATABASE=postgres" \    -e "KONG_PG_HOST=kong-database" \    -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \kong:latest kong migrations up

4.启动kong

docker run -d --name kong \--network=kong-net \    -e "KONG_DATABASE=postgres" \    -e "KONG_PG_HOST=kong-database" \    -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \    -e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \    -e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \    -e "KONG_PROXY_ERROR_LOG=/dev/stderr" \    -e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \    -e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \-p 8000:8000 \-p 8443:8443 \-p 8001:8001 \-p 8444:8444 \kong:latest

5.看网关有没有启动
在本机 curl -i http://localhost:8001/,或者用浏览器访问8001端口。如果出来一大堆json,表示成功。

以AspNetCore为例子访问

mkdir AspNetCorecd AspNetCoredotnet new webapidotnet run

我们以netcore做的api为例子访问localhost:5000/api/values,前面网关搭建起来了,并且支持RESTful,现在有开源的dashboard,我们就用KongDashboard来演示,如何构造搭建和访问。

# 全局安装kong-dashboard
npm install -g kong-dashboard# 启动 kong-dashboard
kong-dashboard start --kong-url http://localhost:8001# 启动kong-dashboard,并且自定义端口
kong-dashboard start \  --kong-url http://kong:8001 \--port [port]# 启动kong-dashboard并且启动基础认证
kong-dashboard start \  --kong-url http://kong:8001 \--basic-auth user1=password1 user2=password2# 看kong-dashboard 启动参数
kong-dashboard start --help

启动成功后用浏览器打开localhost:8080如下图所示:
640?wx_fmt=png

那么我们增加一个NetCoreAPI,在DashBoard,如图所示:
640?wx_fmt=png

因为是GET请求,那我我们用浏览器访问,浏览器 -> 网关 -> NetCore程序。
打开浏览器直接访问http://localhost:8000/api/values,返回["value1","value2"]则代表正常。
如下图所示:
640?wx_fmt=png

最后,AspNetCore微服务下的网关-Kong系列,后面会继续更新,会讲解到Kong的插件的使用,插件的开发,使用的一些坑,网关性能分析和日志可视化,源码解析等,欢迎大家关注我的github: https://github.com/WithLin。

相关文章

原文地址:https://www.cnblogs.com/WithLin/p/9343406.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320737.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【DP】删数

删数 题目大意: 有一堆数x1,x2……xnx_1,x_2……x_nx1​,x2​……xn​,可以从两边删除一些数删除i~k的价值是∣xi–xk∣∗(k−i1)|xi – xk|*(k-i1)∣xi–xk∣∗(k−i1),求价值最大是多少 原题: 题目描述 有N个不同的正整数数…

CF396B-On Sum of Fractions【数学】

正题 题目链接:https://www.luogu.com.cn/problem/CF396B 题目大意 定义 v(n)v(n)v(n)表示≤n\leq n≤n的最大整数u(n)u(n)u(n)表示>n>n>n的最小整数 求∑i2n1v(i)u(i)\sum_{i2}^n\frac{1}{v(i)u(i)}i2∑n​v(i)u(i)1​ 解题思路 有式子b−aab1a−1b\frac{b-a}{ab…

拥抱开源, Office 365开发迎来新时代

这个话题我曾经写过文章,也在一些场合做过专题分享。今天换一种方式,你可以直接点击下面这个小程序,用十分钟左右的时间,听我再讲一讲吧。你需要在微信里面才能看到下面的小程序链接,并且可以直接点击你可以打开该文档…

Wannafly挑战赛19

Wannafly挑战赛19 A. 队列Q 需要支持把一个元素移到队首&#xff0c;把一个元素移到队尾&#xff0c;移到队首就直接放到队首前面那个位置&#xff0c;原位置标为0&#xff0c;队尾同理。 #include <bits/stdc.h> #define rep(i,a,b) for(int ia;i<b;i) typedef long …

【模拟】俄罗斯方块

俄罗斯方块 题目大意&#xff1a; 在俄罗斯方块中&#xff0c;放一块方块进一个图中&#xff0c;问刚好和上的可能性有多少种 原题&#xff1a; 题目描述 相信大家都玩过“俄罗斯方块”游戏吧&#xff0c;“俄罗斯方块”是一个有趣的电脑小游戏&#xff0c;现有一个有C列、…

实体类的动态生成(一)

前言在应用开发中&#xff0c;通常都会涉及各种 POJO/POCO 实体类&#xff08;DO, DTO, BO, VO&#xff09;的编写&#xff0c;有时这些实体类还需要实现 INotifyPropertyChanged 接口以支持属性变更通知&#xff0c;一般我们都会手写这些代码或者通过工具根据数据库表定义抑或…

CF525D-Arthur and Walls【贪心】

正题 题目链接:https://www.luogu.com.cn/problem/CF525D 题目大意 n∗mn*mn∗m的网格&#xff0c;有∗*∗和...&#xff0c;每次可以将∗*∗改成...。求最少操作使得每个...所在的联通块都是一个矩形。 解题思路 因为一个大矩形中每一个小块也是一个矩形&#xff0c;反之同理…

SoundHound Inc. Programming Contest 2018[C. Ordinary Beauty]

SoundHound Inc. Programming Contest 2018 -Masters Tournament-[C. Ordinary Beauty] 打表找规律的。 \(n 1\) 时&#xff0c; \(ans m\)\(n 2\) 时&#xff0c; \(ans 2*(m-1)*2^{m-2}\)\(n 3\) 时&#xff0c; 1) \(d 0, ~~ ans 3*(m-1)*3^{m-2}\) 2) \(d 1, ~~ an…

初一模拟赛总结(2019.6.1)

成绩&#xff1a; 注&#xff1a;rankrankrank是有算其他dalaodalaodalao的 rankrankranknamenamenamescorescorescoreT1T1T1T2T2T2T3T3T3T4T4T4333hkyhkyhky360360360100100100606060100100100100100100444lyflyflyf320320320100100100202020100100100100100100555lthlthlth1…

实体类的动态生成(二)

前言实体类的动态生成&#xff08;一&#xff09;由于采用字典的方式来保存属性变更值的底层设计思想&#xff0c;导致了性能问题&#xff0c;虽然.NET的字典实现已经很高效了&#xff0c;但相对于直接读写字段的方式而言依然有巨大的性能差距&#xff0c;同时也会导致对属性的…

CF442C-Artem and Array【贪心】

正题 题目链接:https://www.luogu.com.cn/problem/CF442C 题目大意 nnn个数&#xff0c;删除一个数可以获得左右两边最小值的价值&#xff0c;求删除所有数的最大价值。 解题思路 对于一个位置如果它左右两边都比它高那么这个位置一定删除&#xff0c;然后序列会呈一个单峰状…

Codeforces 1005D Polycarp and Div 3

Codeforces 1005D Polycarp and Div 3 dp[i]表示前i个数最多能分成多少块%3为0&#xff0c;nxt[x]表示x这个上一次出现的位置。 首先想到 $ dp[i] max(dp[j]) 1, (sum[i]-sum[j]) mod 3 0$&#xff0c;然后注意到他一定是从最近的那个满足条件的位置&#xff0c;也就是nxt[i…

维修栅栏【DP】

维修栅栏 题目大意&#xff1a; 有一串数&#xff0c;要把这一串数改成全部非0的&#xff0c;每一次可以更改某一段的全部数字&#xff0c;但有代价sqrt(m)sqrt(m)sqrt(m)&#xff08;m为当前子串的长度&#xff09; 原题&#xff1a; 题目描述 农场的栅栏年久失修&#x…

hdu6356-Glad You Came【RMQ】

正题 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid6356 题目大意 nnn个数的一个序列aaa开始都是000。mmm个操作[li,ri,vi][l_i,r_i,v_i][li​,ri​,vi​]表示axmax{ax,v}(li≤x≤ri)a_xmax\{a_x,v\}(l_i\leq x\leq r_i)ax​max{ax​,v}(li​≤x≤ri​)&#xff0c;求…

2015 German Collegiate Programming Contest (GCPC 15)

2015 German Collegiate Programming Contest (GCPC 15) B. Bounty Hunter II 给定一张DAG&#xff0c;求一种方案&#xff1a;用最少的路径将所有点覆盖。写了按长度贪心&#xff0c;按出度的贪心。。。果断挂了。下来搜了下题解&#xff0c;看到了二分图。就懂了。。。把点拆…

ASP.NET Core URL Rewrite中间件

URL重写是基于一个或多个预置规则修改请求URL的行为。URL重写在资源位置和访问地址之间创建了一种抽象&#xff0c;这样二者之间就减少了紧密的联系。URL重写有多种适用的场景&#xff1a;临时或永久移动或替换服务器资源&#xff0c;同时为这些资源保持稳定的访问为不同应用程…

打击犯罪【并查集】

打击犯罪 题目大意&#xff1a; 有n个人&#xff0c;相互之间有一些关系&#xff0c;从而形成一个图&#xff0c;现在要从1……n1……n1……n按顺序去掉k个人&#xff08;即去掉1……k1……k1……k&#xff09;&#xff0c;使最大的子图的点数 <n/2<n/2<n/2&#xf…

StackExchange.Redis性能调优

编者&#xff1a;.net core redis 驱动推荐&#xff0c;为什么不使用 StackExchange.Redis 引起了很大的反响&#xff0c;大家反应过度&#xff0c;其实StackExchange.Redis 2.0已经从重构了异步队列&#xff0c;使用管道方式解决异步慢的问题。这篇文章也可以帮助大家正确认识…

糊涂的教授【拓扑排序】

糊涂的教授 题目大意&#xff1a; 有n个矩阵&#xff08;有些部分重叠在一起&#xff09;&#xff0c;现在有一些位置写着一些数字&#xff0c;表示它原来的序号&#xff0c;问每一个矩阵原来的序号 原题&#xff1a; 题目描述 陈教授是一个国际知名的教授&#xff0c;很多…

P6860-象棋与马【欧拉函数,杜教筛】

出题人来报个到 正题 题目链接:https://www.luogu.com.cn/problem/P6860 题目大意 p(a,b)1p(a,b)1p(a,b)1当且经当一只走a∗ba*ba∗b矩形的马可以走到棋盘上任何一个点 求∑a1n∑b1np(a,b)\sum_{a1}^n\sum_{b1}^np(a,b)a1∑n​b1∑n​p(a,b) 解题思路 这个马能走到全图的充要…