一:IOT架构
CMP-DMP-AEP-BAP.
二:spi
https://www.jianshu.com/p/1e8a437b5621
三:开放平台
业务网关的演进:
1 业务网关设置可插拔插件。类似shenyu
通过ServerWebExchange实现插件的plugin execute chain等功能,底层基于WebFlux实现。
通过AlibabaDubboProxyService当中的genericInvoker接口实现了讲http请求转换成dubbo泛化调用等功能。
问题一:如何自定义一个plugin?
请参考spring cloud gateway的自定义filter功能。
https://blog.csdn.net/fly910905/article/details/121682625
问题二:如何实现一个泛化调用?
借助dubbo、sofa等RPC框架实现泛化调用。
问题三:如何提升网关的高并发处理能力?采用异步非阻塞方式
spring mvc本身是同步阻塞式的编程模型;采用spring webflux等异步非阻塞框架,采用Reactor-Netty的框架。
2 网关类型。监控系统网关、IOT网关、云平台网关、wx开放平台网关、alipay开放网关(南北向流量)、用户认证网关、AI中台网关、流量网关。
监控系统网关:利用mina实现1w台服务器性能指标上报功能;
企业SOA集成:利用webservice完成ESB的建设;
APP API网关:基于netty实现了一个业务网关,实现从restful http请求转换成Dubbo请求;
IOT网关:利用自定义的MQ协议完成心跳等多种数据上报;
云平台网关:利用云游平台完成API的手动录入,并自动生成对应的代理sdk,并实现加签验签等功能;
wx开放平台:利用openid实现wx支付;
alipay开放网关:包括认证方式的升级,从RSA到认证证书;包括SPI等接口认证模式。
用户认证网关:刷脸认证期间,可以根据用户的证件类型调用不同的认证接口。
AI中台网关:可以通过该网关完成OCR等服务端的设计。
云流量网关CGW:基于openresty实现的流量网关,类似Kong。
问题一:如何实现API网关访问第三方接口,也就是SPI网关的设计?
通过拼接API、APPKEY等参数形成回调URL;
https://www.likecs.com/show-204686397.html#sc=1613.3333740234375 供参考
负责平台的架构规划设计,包括平台技术选型、平台部署架构、软件架构、概要设计、详细设计等相关方案编写;
负责技术难题研究和攻关,参与核心代码编写,解决系统中关键架构和技术问题,对系统扩展性、稳定性负责;
四:手写高性能网关-业务网关
https://blog.csdn.net/o9109003234/article/details/118165756
技术选型:
高性能:采用异步非阻塞IO模型,如Linux的epoll,以及java下的netty。
高可用:集群化、服务化、持续化。可以自己组成一个集群,并可以自己同步集群数据。
高可扩展:可以通过插件或者Filter等机制实现业务网关的二次开发等能力。
功能需求:
1 自定义路由规则。可基于version的路由规则设置,路由对象包括DEFAUL,HEADER和QUERY三种,匹配方式包括=、regex、like三种。需要一个admin可视化界面来保存对应信息。
2 高性能。Netty本身是一款高性能的通信框架。同时server将一些路由规则等数据缓存到JVM内存避免请求admin服务。
3 接口鉴权。基于责任链模式,用户开发自己的鉴权插件即可。
整体架构设计:
数据结构设计:
核心代码及排期:
架构师A:负责整体技术架构设计及验证,性能优化,关键代码编写;
高工B:负责ship-server部分模块的编写,比如SPI机制、数据同步机制、LB机制等;
工程师C:负责admin整体的业务代码编写,包括APP管理、定时监听nacos等模块;
工程师D:负责业务代码的编写,以及引用client注册服务;
1 ship-admin核心代码,即利用spring框架的ApplicationListener<ContextRefreshedEvent>监听nacos的事件。
技术原理:spring事件扩展机制;springboot容器启动监听机制;ScheduledThreadPoolExecutor定时机制原理;nacos原理,namingService.getServicesOfServer。
2 spring-client.客户端被Service引用,并自动把API信息注册到注册中心。
根据API类型区别设计。如果是HTTP协议的接口的话,那就直接通过配置信息的方式获取到URL接口信息,并且直接通过接口注入到admin平台中。
设计模式:采用观察者模式,通俗的说就是依赖于spring框架的ContextRefreshedEvent事件监听机制。即在spring容器初始化的过程中,触发对应的event,并且有自定义的ApplicationListener监听器监听到,然后在对应的onApplicationEvent方法中执行对应的业务逻辑。
private volatile AtomicBooleanisInit =new AtomicBoolean(false);
if(!isInit.compareAndSet(false, true)){} 为了避免事件重复监听,利用了atomicBoolean的机制应对了高并发情形下事件监听的功能。
监听applicationContext初始化过程中产生的ContextRefreshedEvent事件,把配置文件当中HTTP接口自动注册到nacos的配置中心(通过namingservice.registerinstance实现),同时通过doPost把API信息传递到了admin当中。
手写spring-boot-starter:
自定义了一个bootStarter来完成对应自定义监听类AutoRegisterListener的装配,推荐采用扫描文件的方式实现对应的功能,例如spring.factories文本中的org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.sp.ClientAutoConfigure 。
技术栈:
spring ContextRefreshedEvent启动逻辑;spring boot starter原理;nacos配置中心原理;观察者设计模式;EnableConfigurationProperties等注解获取本地配置;
其他类型的注册中心采用admin pull的方式实现,通过NacosDataChangedListener类实现。
3 geteway-server:基于Spring webflux机制实现。
Spring webFlux源码解析:
plugin chain设计:比如如何自动加载plugin?首先配置config类,在config类中注入filter自定义类,并且在类中new plugin chain;
plugin chain设计成一个List<Tedplugin>,包括int pos。具体执行方法execute如下,
问题?return pluginChain.plugins.get(pos++).execute(exchange, pluginChain);当中的pos++是如何实现顺序执行plugin的呢?
再利用spring-webflux框架的webfilter机制在代码中new plugin,并且加入到plugin-chain当中。
HTTP协议转换成RPC协议:
封装rpc请求地址:String url ="http://" + serviceInstance.getIp() +":" + serviceInstance.getPort() + path;
处理请求结果:
//把目标服务器请求得到的响应转成DataBuffer,再把这个DataBuffer返回给客户端。
return exchange.getResponse().writeWith(Mono.just(exchange.getResponse()
.bufferFactory().wrap(resp.getBytes())));
server本地缓存机制:
分别创建了RouteRuleCache和ServiceCache;并且通过了WebsocketSyncCacheServer和DataSyncTaskListener完成了数据从nacos和admin中的数据同步机制。
负载均衡机制SPI:
技术原理:spring webflux机制;websocket数据同步机制;nacos服务发现机制;netty参数调优;java SPI机制;
基于Envoy的云原生网关:
流量网关+业务网关的融合实践方案:参考 https://www.sohu.com/a/602816271_355140
k8s的ingress相关功能:
Issue:
1 请求包过长被底层的Reactor-Netty截断了。
https://github.com/spring-cloud/spring-cloud-gateway/issues/581
五:服务总线
历史项目:
2.4.4 集成要求
本系统需要与各业务单元、外部合作方进行交互,集成的系统也多种 多样,请提供开放灵活的集成解决方案,技术实现兼容目前主流开源技术框架及传统 ESB、OPEN API 等的集成,并满足以下需求:
支持异构平台的集成;支持 XML,JSON 等格式的数据交换;支持 Restful 风格的接口集成;
支持 ESB 和 OpenAPI 接入和集成;支持 SOAP 协议与 WebService 的服务集成;支持成熟 RPC 框架的集成开发;支持成熟消息队列中间件分发。
参考开源版本:https://github.com/wso2/carbon-kernel
API Management:
我们计划使用**管理器来扩展所有集成点,以便您可以引入自己的OAuth授权服务器。
网关客户端:
okhttp:线程模型。