前言
书接上文,上文书说到:微服务架构概念、优缺点、划分原则以及技术选择,既然指导思想有了,那就用实践学习来检验。
一,网关API
1,何为网关API?
网关网关API——整个系统的统一入口,往上,接收一切外界请求;往下,通知内部所有服务。简单来讲就是一个“门”。
2,网关API功能作用
(1)身份认证与授权
这“家”里穷不穷富不富的先不说,有门了就不能随便让人进,这要来坏人那就得出事,所以得给门加个锁,有钥匙(token)的您里面请,没钥匙的........
当然了进来了也让人随便跑,这“二奶奶”能不能去“大奶奶”的房还得看老爷的意思,为了家里和谐还是各自回厢房歇着。
身份认证与授权:保证系统安全访问
(2)负载均衡
老爷家挺大的,一到过年过节家里客人也多;家里大少爷饱读诗书又有功名在身,平时喜好交朋友;老爷甚是喜欢老早就把东西厢房给了他;
看门的一听是找大少爷的,不是让去东厢房就是让去西厢房,把这人情事故处理的妥妥当当的。
(3)访问限流
看门的这来的人太多把门都快挤坏了,赶紧把情况报告给老爷,老爷一方面怕大少爷会客累坏身子,另一方面怕门出问题这都是事;
“今日各位朋友远道而来,令寒舍蓬荜生辉倍感荣幸,大家的热情鄙人和犬子都感受到,奈何这家小门小实在照顾不周,眼看天色也不早了,、
还请离家近的朋友把机会留给远方的朋友,远方的朋友也请你们排排队 这样也能快一点把事办了”老爷说完一拱手就见门口的情况好了很多,转身就回屋了。
......东街李员外意外路过看了十分眼红,心里暗下决定赶明照着这个给也弄一个。。。
二,Ocelot网关搭建
李员外也是实干主义的人说干就干,上到性能检查下到实施全部亲力亲为,最终综合考虑就用Ocelot
官网:https://ocelot.readthedocs.io/
1,第一步创建一个.net core web 项目
2.使用 NuGet安装Ocelot的相关组件
因为框架使用的是 .net core 3.1 所以只能安装16.0一下版本,,,
3,修改程序配置
在startup 里面添加ocelot服务
在Program 里面添加ocelot配置
ocelot.json:
{ "Routes": [ { "DownstreamPathTemplate": "/product/{path}", "DownstreamScheme": "http", "DownstreamHostAndPorts": [ { "Host": "localhost", "Port": 4001 }, { "Host": "localhost", "Port": 4002 } ], "UpstreamPathTemplate": "/api/product/{path}", "UpstreamHttpMethod": [ "Get", "Post" ], "LoadBalancerOptions": { "Type": "RoundRobin" } }, { "DownstreamPathTemplate": "/order/{path}", "DownstreamScheme": "http", "DownstreamHostAndPorts": [ { "Host": "localhost", "Port": 4050 } ], "UpstreamPathTemplate": "/api/order/{path}", "UpstreamHttpMethod": [ "Get", "Post" ], "LoadBalancerOptions": { "Type": "RoundRobin" } } ], "GlobalConfiguration": { "BaseUrl": "http://localhost:4000" } }
参数说明:
DownstreamPathTemplate:下游具体服务地址,{path}占位变量,"path"可以是其他字符支持自定义
DownstreamScheme:下游请求方案,可以使用:http/https
DownstreamHostAndPorts:下游服务的主机和端口集合,对下游服务的请求进行负载平衡, Ocelot 允许添加多个条目,然后选择一个负载平衡器
UpstreamPathTemplate:上游路径地址,上游的路径无需和下游一致
UpstreamHttpMethod:上游接受请求方式集合:[ "Get", "Post", "Put", "Delete" ]
LoadBalancerOptions:负载均衡平衡器,4个参数可选RoundRobin - 循环访问,NoLoadBalancer - 从配置或服务发现中获取第一个可用服务,"LeastConnection" 请求最少的服务发送新请求,
CookieStickySessions - 使用 cookie 将所有请求粘贴到特定服务器
GlobalConfiguration:全局配置,BaseUrlocelot网关运行的地址
其中product 设置使用两个端4001,4002 模拟负载均衡,按上述简单配置不出问题运行效果如下:
客户端对服务的调用使用网关进行统一中转,简化客户端请求配置,服务端也做跨域也方便,避免了服务地址直接暴露
如果ocelot.json 中下游端口等其他的配置经常变化修改对整个系统并不是很友好,所以Ocelot 允许指定服务发现提供者,并将使用它来查找 Ocelot 将请求转发到的下游服务的主机和端口