网站集群建设通知,宝应吧 百度贴吧,腾讯云备案网站名称,深圳小程序开发外包前言对于API网关#xff0c;业界貌似对它进行下划分#xff0c;有下面几个分类/场景。面向Web App面向Mobile App面向Partner OpenAPI面向Partner ExternalAPI其他。。。在18年8月份的时候#xff0c;有幸用.NET Core 2.1重构了一个对外的业务网关项目#xff0c;这个项目的… 前言对于API网关业界貌似对它进行下划分有下面几个分类/场景。面向Web App面向Mobile App面向Partner OpenAPI面向Partner ExternalAPI其他。。。在18年8月份的时候有幸用.NET Core 2.1重构了一个对外的业务网关项目这个项目的作用其实就是将公司内部能提供的数据能力公开出来可以让有需要的公司使用。这个项目按照分类应该是要归类到 面向Partner OpenAPI 。这个项目刚开始是用Nancy写的那个时候要向外提供一个新的能力的时候都是要加这个能力的代码发布后才能真正的对外提供不过当时对外提供的东西比较少负责的同事也要闪人了所以也还是可以接受。在18年7月份的时候越来越多的能力要对外提供而且每次都要改代码受不了就提出了重构。这个项目目前每天大概有1500万左右的有效调用量部署在6台4c4g的CentOS虚拟机上面(其实用不了那么多机器每台机器的基本都是20%以下的cpu和10%左右的内存)用Jexus去托管。大入口是Nginx所以最后的流向是Request - Nginx - Jexus - dotnet下面就分别来说说这个网关涉及到的一些东西。统一鉴权鉴权这一块用的还是很古老的做法用的是用户名和密码的方式来处理这个可以理解成是验签的一个过程。这里支持两种形式一种是参数明文传输还有一种是参数加密传输。其实就是有部分公司觉得我不能直接传明文的123给你要传一个加密后的123让你解密然后去处理。服务限流限流功能就是限制调用方过于频繁的调用这个限制根据业务场景分为秒、天、月三个层级。不同调用方不同数据服务都有不同的限制这个是基于Redis来实现的。路由转发路由转发用的是HttpClientFactory。刚开始的时候还是用steeltoe来处理服务注册和发现不过发现并不好用然后也有很多服务没有接入 Eureka 所以最后就没有处理服务注册和发现而是直接用域名的方式来请求。参数重组用户的请求参数基本上都会是透传给下游服务当然不能排除会有一些特殊的需求。举个简单的例子说明一下好比只想让调用方查广州的天气不想让他查深圳的天气而下游服务是这两个城市都可以查的所以要有一些特殊的参数去告诉下游服务。这个时候我们就需要对用户的入参进行一次重组重新构造了一个JSON参数丢给下游服务相当于特殊情况会有固定的参数格式给到下游服务用的是JObject来处理。链路跟踪由于调用链有的时候非常复杂为了记录调用方一个请求完整的调用链网关这边会生成一个traceId在请求头路由转发的时候会一起发过去。不同服务在记录日志的时候就会把这个traceId也统一记录起来这样所有的日志都可以通过这个traceId从日志系统中找到。熔断降级下游服务不一定能保证 7*24 小时的正常服务有时可能因为数据库处理超时网络请求超时从而造成在一段时间内不能正常响应。这个时候网关就不应该每次都去真正的请求服务而要断开一段时间直接返回失败给调用方。这一块是结合 HttpClientFactory 和 Polly 来实现的省了很多麻烦。服务计次计次可以说是这个网关的一大核心因为要赚钱要收调用方的钱。钱基本就是按次数算出来的。之前写过一篇博客实现是类似的。按次计费接口的简单实现思路。业务指标监控需要知道最近某段时间范围内不同调用方不同数据服务的调用情况(成功失败有效总次数等)这里用的是prometheus程序负责写指标数据prometheus会去拉取这些数据然后结合Grafana来做成不同的看板来展示。日志记录日志记录为分两大类一类是程序日志一类是调用日志。程序日志目前是拓展NLog把数据丢到Kafka然后运维那边会抽数据到Elasticsearch。为了避免Kafka抽风所以丢数据到Kafka失败的话会落盘到日志文件然后由Filebeat收集然后丢到Elasticsearch。最后的展现形式是 graylog 大概如下调用日志是和调用方结算的依据之一所以这个的重要性还是挺高的。目前用的是异步写入加容错。调用日志最终是落到数据库归档。迭代更新更新对一个程序来说是必不可免的所以有一个好的发布流程可以减少一些困难。虽说重构后这个项目也就更新了3次。这里用的是Go CD来发布的从测试到预发再到生产流水线的操作。总结虽然这个项目挺小的但是也可以用“麻雀虽小五脏俱全”来形容。最后问问最近有那位大佬招小弟吗有的话可以联系一下我哈。原文链接https://www.cnblogs.com/catcher1994/p/11456994.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com