当前位置: 首页 > news >正文

【后端开发】golang部分中间件介绍(任务调度/服务治理/数据库/缓存/服务通信/流量治理)

【后端开发】golang部分中间件介绍(任务调度/服务治理/数据库/缓存/服务通信/流量治理)

文章目录

    • 1、中间件是什么?
      • 1.1 中间件的定义
      • 1.2 中间件和框架的区别
      • 1.3 中间件与工具库的区别
      • 1.4 云原生时代的中间件
      • 1.5 中间件的生命周期
    • 2、中间件的分类
      • 2.1 计算类中间件(分布式计算,任务调度,服务治理)
      • 2.2 存储类中间件(缓存,数据库,搜索引擎,数据同步)
      • 2.3 网络类中间件(服务通信,流量治理,负载均衡,信息安全)
    • 3、goland的部分常用中间件(以go-zero框架为例)
      • 3.1 计算类(go-kit/cron/viper)
      • 3.2 存储类(mysql/redis/elk/etcd/gorm/minio/mongo/migrate)
      • 3.3 网络类(grpc/telemetry/jwt/kafka/kong/istio/jaeger/consul)

1、中间件是什么?

1.1 中间件的定义

中间件是软件开发中连接 “底层基础设施” 与 “上层业务应用” 的关键技术层,它通过封装通用能力、解决跨系统协作问题,降低业务开发复杂度,让开发者聚焦核心业务逻辑而非技术细节

  • 向上:为业务应用提供标准化的 API / 接口,屏蔽底层技术差异(如不同数据库的语法、不同消息队列的协议);
  • 向下:适配不同的基础设施(如物理机、虚拟机、云服务器),确保通用能力在不同环境下稳定运行。
  • 简单类比:若把业务应用比作 “餐厅”,底层基础设施是 “农场(食材供应)”,中间件就是 “中央厨房”——
    它统一处理食材清洗、切配、标准化烹饪流程,餐厅只需直接使用中央厨房的半成品,无需关心食材来源和基础加工,大幅提升效率

中间件的设计围绕“通用性、稳定性、可扩展性”展开,核心特性可归纳为以下6点:

特性核心说明典型场景举例
通用性封装“跨业务的通用需求”(如通信、数据存储、任务调度),可复用于多个业务系统所有业务都需要“日志收集”,日志中间件可通用
解耦性隔离业务应用与底层依赖(如数据库、缓存),或隔离不同业务模块订单系统通过消息中间件通知库存系统,无需直接调用库存接口
标准化提供统一的接口/协议,避免“重复造轮子”,降低跨团队协作成本所有业务通过JDBC(数据库中间件接口)操作不同数据库
高可用性(HA)支持集群部署、故障自动转移,确保服务不中断(通常要求99.9%以上可用性)缓存中间件Redis的主从复制+哨兵模式,主节点故障后从节点自动接管
可扩展性支持水平扩容(增加节点)或垂直扩展(提升单节点性能),应对业务流量增长消息中间件Kafka通过增加Broker节点,支撑每秒百万级消息收发
透明性业务应用无需感知中间件的内部实现(如负载均衡、数据分片)开发者调用RPC中间件时,无需关心请求如何路由到目标服务

1.2 中间件和框架的区别

中间件(Middleware)和框架(Framework)是分布式系统和软件开发中的两个核心但截然不同的概念,它们在架构层次、职责范围和使用方式上有本质区别

技术栈层级关系

┌─────────────────────────────────┐
│          Application           │  ← 业务代码
├─────────────────────────────────┤
│             Framework          │  ← 提供路由、依赖注入等基础设施
├─────────────────────────────────┤
│          Middleware            │  ← 安全/日志等通用功能
├─────────────────────────────────┤
│   System (OS/Network/DB/etc.)  │
└─────────────────────────────────┘

中间件和框架的对比

维度中间件 (Middleware)框架 (Framework)
定位功能增强插件开发基础架构
职责处理横切关注点(Cross-cutting Concerns)提供应用骨架和编程范式
侵入性低(可插拔)高(需遵循框架约束)
复用性可跨框架使用通常绑定特定技术栈
典型示例JWT 认证、日志中间件Gin、Spring、Django

1.3 中间件与工具库的区别

中间件与普通工具库的差异,本质是“被动调用的工具”与“主动介入的基础设施”的区别

对比维度普通工具库(Tool Library)中间件(Middleware)
核心定位业务开发的“辅助工具”,聚焦单一、原子化的功能封装系统运行的“基础设施层”,聚焦跨模块/跨系统的协作能力支撑
交互模式「被动调用」:业务代码主动调用工具库API(如DateUtil.format()),工具库不主动介入系统流程「主动介入」:拦截/接管系统主干数据流(如请求、消息、SQL),无需业务代码显式调用核心逻辑(如网关自动拦截请求鉴权)
依赖关系业务代码依赖工具库,工具库不依赖业务/系统环境(低耦合)业务/系统依赖中间件,中间件需适配底层环境(如K8s、数据库),甚至主导系统流程(高耦合,是系统“骨架”的一部分)
能力范围单一功能(如加密、日期处理、JSON解析),无“分布式/高可用”属性复合能力(如通信+负载均衡、消息+重试+死信队列),通常具备分布式、高可用、可扩展特性
运行形态嵌入业务代码(如Jar包、源码依赖),无独立运行进程独立进程/集群运行(如Redis集群、Kafka Broker),或作为框架核心组件嵌入但接管流程(如Gin中间件)
故障影响工具库故障仅影响调用它的局部业务(如日期解析失败)中间件故障会导致整个系统/链路不可用(如Redis集群宕机导致所有缓存查询失败)

交互模式:“被动调用” vs “主动介入”

  • 两者最本质的分界线,直接决定了“谁主导系统流程”:

  • 普通工具库:业务代码是“主导者”
    工具库仅提供“功能接口”,需业务代码主动触发调用,不干预其他流程。
    示例:
    FastJSON解析JSON时,业务代码需显式调用JSON.parseObject(jsonStr, User.class)
    Apache Commons Lang处理字符串时,需主动调用StringUtils.isBlank(str)
    工具库的逻辑“随调用启动、随调用结束”,不会主动拦截或修改业务代码之外的数据流。

  • 中间件:中间件是“主导者”
    中间件通过“拦截器、钩子、代理”等机制,主动接管系统的主干流程(如HTTP请求、数据库操作、消息传输),业务代码无需显式调用其核心逻辑,甚至感知不到中间件的存在。
    示例:
    API网关中间件(如Nginx、Gateway):用户请求到达时,网关自动拦截请求,完成鉴权、限流、路由,业务服务无需写一行鉴权代码;
    ORM中间件(如MyBatis):业务代码调用userMapper.selectById(1)时,MyBatis自动拦截SQL请求,完成参数替换、SQL执行、结果映射,业务无需关心JDBC连接池、SQL拼接;
    分布式链路追踪中间件(如SkyWalking):通过字节码增强自动埋点,拦截服务间调用(如Dubbo、HTTP),记录调用链路,业务代码无需手动添加埋点代码。

1.4 云原生时代的中间件

中间件可以理解为高度专业化的工具库
虽然其设计目标和应用场景与普通工具库有显著差异,但是现代中间件越来越呈现模块化工具库特征:

  • 独立可插拔:如OpenTelemetry SDK既可集成到框架,也能单独使用
  • 标准接口:遵循net/http.Handler等通用接口
  • 微内核设计:如go-zero的中间件可脱离框架运行

黄金法则:当某个"工具库"需要拦截系统主干数据流而非被动调用时,它就演变成了中间件
两者的界限在现代云原生架构中正变得越来越模糊。

1.5 中间件的生命周期

普通工具库与中间件在“进程生命周期绑定关系”上存在本质不同

  • 中间件与进程生命周期(启动、运行、异常、退出、重启)的关联,是其区别于普通工具库的核心特征之一——普通工具库完全依附于业务进程生命周期(业务启动则加载,业务退出则销毁),而中间件的进程生命周期通常具备“独立性”,且需与业务进程、底层基础设施(如K8s)形成“协同管理机制”。这种关联差异,直接决定了中间件的高可用性、稳定性设计逻辑。

  • 根据中间件是否 “嵌入业务进程”,其生命周期管理模式可分为 “独立进程模式” 和 “嵌入式模式”

  • 独立进程模式(主流中间件采用)
    中间件作为独立的服务进程运行(如 Redis、Kafka、Nginx、Elasticsearch),与业务进程完全分离,通过网络协议(TCP/HTTP)或 IPC(进程间通信)与业务进程交互。中间件的生命周期与业务进程无关,具备 “跨业务复用” 和 “独立运维” 能力

  • 嵌入式模式(轻量级中间件采用)
    中间件无独立进程,而是以 “组件 / 库” 形式嵌入业务进程(如 Sharding-JDBC、Gin 中间件、Dubbo 客户端),与业务进程共享同一个运行时(如 JVM、Go 进程),但具备独立的生命周期管理逻辑
    中间件的生命周期与业务进程 “绑定但不完全依赖”—— 随业务进程启动 / 退出,但运行中的状态维护、异常处理独立于业务代码

对比维度普通工具库(如FastJSON、Apache Commons)中间件(如Redis、Kafka、API网关)
进程载体无独立进程,完全嵌入业务进程(如Java应用的JVM进程、Go应用的进程)大多有独立进程/集群进程(如Redis Server进程、Kafka Broker进程);部分“嵌入式中间件”(如Sharding-JDBC)虽嵌入业务进程,但具备独立生命周期管理逻辑
启动时机随业务进程启动而加载(如JVM加载Jar包时初始化工具类),无独立启动流程独立于业务进程启动(如先启动Redis集群,再启动依赖Redis的电商应用);或与业务进程启动同步,但需优先完成初始化(如Gin框架的中间件需在路由初始化前加载)
运行状态完全依赖业务进程状态(业务进程阻塞则工具库无法调用,业务进程崩溃则工具库直接销毁)独立维护运行状态(如Redis进程持续监听6379端口,即使业务进程崩溃,Redis仍正常提供服务);需处理“连接保活、资源复用”(如RPC中间件维护长连接池)
异常处理无独立异常恢复能力(工具库调用报错后,需业务代码自行捕获处理,如JSON解析失败抛异常)具备独立异常自愈机制(如Kafka Broker崩溃后,ZooKeeper触发选主,新Broker接管分区;Redis主节点故障后,哨兵自动切换从节点为主)
退出逻辑随业务进程退出而被动销毁(无额外清理操作,或仅执行简单的内存释放)需执行“优雅退出”流程(如Kafka退出前同步未刷盘的消息到磁盘,避免数据丢失;API网关退出前拒绝新请求,等待存量请求处理完成)
生命周期管理由业务进程统一管理(无需额外运维操作)需独立运维管理( 如通过systemd、K8s管理中间件进程的启动/停止/重启;通过监控工具(Prometheus)感知进程状态)

2、中间件的分类

中间件作为连接底层基础设施与上层业务的桥梁,其功能覆盖了计算、存储、网络三大核心领域。这种分类方式能更清晰地反映中间件在IT系统架构中的技术定位和作用边界。

按计算、存储、网络维度划分的中间件体系,共同构成了支撑现代分布式系统的技术底座:

  • 计算类中间件解决 “如何高效处理任务”
  • 存储类中间件解决 “如何高效管理数据”
  • 网络类中间件解决 “如何高效传输数据”

2.1 计算类中间件(分布式计算,任务调度,服务治理)

计算类中间件聚焦于任务调度、资源分配、并行处理等计算能力的封装,解决“如何高效利用计算资源处理业务逻辑”的问题,核心是提升计算效率和资源利用率。

类别核心特性代表工具/框架典型应用场景
分布式计算框架将大规模任务拆分到多节点并行处理,屏蔽分布式编程细节Hadoop MapReduce、Spark、Flink离线日志分析、实时风控计算、用户行为数据分析
任务调度中间件管理任务触发、执行、重试及依赖关系,支持定时/事件驱动Quartz、XXL-Job、Airflow、Celery电商订单对账(每日凌晨)、银行账单生成(每月)、数据处理流水线编排
服务治理中间件管控微服务调用关系,确保服务稳定运行(注册发现、负载均衡、熔断等)Dubbo、Spring Cloud(Eureka/Ribbon/Hystrix)、Sentinel、Istio分布式系统服务调用管控、峰值流量削峰、服务熔断降级
容器编排中间件管理容器生命周期、资源分配和调度策略,支持自动扩缩容和自愈Kubernetes(K8s)、Docker Compose、Mesos云原生应用部署、微服务集群扩缩容、容器化应用运维管理

2.2 存储类中间件(缓存,数据库,搜索引擎,数据同步)

存储类中间件专注于数据的持久化、缓存、检索等能力,解决“如何高效存储和访问数据”的问题,核心是平衡数据的可用性、一致性和性能。

类别核心特性代表工具/框架典型应用场景
缓存中间件将热点数据存储在内存中,加速访问,减轻数据库压力Redis、Memcached、Caffeine、Ehcache电商商品详情页缓存、用户登录状态存储、高频查询结果缓存
数据库中间件解决数据库扩展问题(分库分表、读写分离、分布式事务)Sharding-JDBC、MyCat、Vitess、Seata海量订单数据分库分表、数据库读写分离提升性能、分布式事务一致性保障
搜索引擎中间件支持全文检索、复杂条件查询,比传统数据库查询更高效Elasticsearch、Solr、Algolia电商商品搜索、日志检索分析、企业文档检索
数据同步中间件实现不同存储系统间的数据同步和一致性,支持实时/离线同步Canal、Debezium、DataX、SqoopMySQL到Elasticsearch数据同步、跨地域数据备份、异构数据库数据迁移

2.3 网络类中间件(服务通信,流量治理,负载均衡,信息安全)

网络类中间件聚焦于数据传输、通信协议、网络资源管控,解决“不同系统/服务之间如何高效、可靠通信”的问题,核心是保证网络传输的效率、安全性和可靠性。

类别核心特性代表工具/框架典型应用场景
服务通信-远程调用(RPC)中间件实现跨进程/跨机器服务调用,屏蔽网络编程细节(序列化、协议、连接管理)Dubbo、gRPC、Thrift、Spring Cloud OpenFeign微服务间同步调用(如订单服务调用支付服务)、跨语言服务通信
服务通信-API网关中间件统一服务入口,处理路由、鉴权、限流、监控等横切关注点Nginx、Spring Cloud Gateway、Kong、APISIX对外开放API统一管理、内部服务路由转发、接口访问控制与监控
流量治理-消息队列中间件基于异步通信模式,实现系统解耦、流量削峰、异步通知Kafka、RabbitMQ、RocketMQ、ActiveMQ订单创建后异步通知库存系统、大促期间流量削峰、日志异步收集
负载均衡中间件将请求分发到多个服务实例,提高系统可用性和吞吐量Nginx、LVS、F5、HAProxyWeb服务器集群请求分发、微服务实例负载分担、高可用系统流量分配
网络安全中间件保障网络通信安全,提供加密、认证、授权能力OAuth2.0/OpenID Connect、ModSecurity(WAF)、OpenSSL、Vault用户身份认证、API接口权限控制、数据传输加密、敏感信息保护

3、goland的部分常用中间件(以go-zero框架为例)

框架分类(按范式)

类别Go 典型代表特点
全栈框架Beego包含 ORM、缓存等全套组件
微内核框架Gin、Echo仅提供路由等核心功能,依赖中间件扩展
RPC 框架gRPC-Go、go-zero专注服务间通信
Serverless 框架AWS Lambda SDK无服务架构适配

参考资料:1

3.1 计算类(go-kit/cron/viper)

计算类中间件主要解决服务治理、任务调度、流量控制等核心问题。

中间件类型社区主流组件go-zero 对应实现核心功能
服务治理go-kit(27k+星)内置服务发现、负载均衡服务注册发现、熔断降级、监控
流量控制uber-go/ratelimit(5k+星)MaxConnsHandler、TimeoutHandler限流、连接数控制、超时管理
熔断机制afex/hystrix-go(4.3k+星)BreakerHandler服务熔断、故障隔离
监控指标prometheus/client_golang(5.9k+星)PrometheusHandler、MetricHandler指标收集、监控告警
配置管理spf13/viper(29k+星)多格式配置文件解析、动态配置更新
任务调度robfig/cron/v3(13k+星)定时任务调度、支持复杂 cron 表达式

任务调度中间件示例(cron)
robfig/cron(13k+星)是 Go 生态最流行的定时任务库:

package mainimport ("fmt""github.com/robfig/cron/v3"
)func main() {c := cron.New()// 每小时执行一次_, err := c.AddFunc("@hourly", func() {fmt.Println("执行定时任务:清理临时文件")})if err != nil {panic(err)}c.Start()defer c.Stop()// 保持程序运行select {}
}

3.2 存储类(mysql/redis/elk/etcd/gorm/minio/mongo/migrate)

存储类中间件专注于数据持久化、缓存、检索等功能。

中间件类型社区主流组件go-zero 集成方式核心功能
关系型数据库go-sql-driver/mysql(15k+星)通过 sqlx 封装MySQL 连接、ORM 操作
缓存redis/go-redis(21k+星)内置 redis 客户端缓存操作、分布式锁
日志收集elastic/go-elasticsearch(6k+星)结合 LogHandler 使用日志收集、检索分析
配置中心etcd-io/etcd(50k+星)内置配置中心支持分布式配置管理
关系型数据库ORMgorm.io/gorm(38k+星)可手动集成全功能ORM、支持多种数据库、事务管理
文档数据库mongodb/mongo-go-driver(8k+星)可手动集成MongoDB官方驱动、文档存储操作
嵌入式数据库badgerdb/badger(15k+星)高性能嵌入式KV数据库、持久化存储
分布式文件存储minio/minio-go(3k+星)对象存储客户端、兼容S3协议
数据库迁移golang-migrate/migrate(18k+星)数据库版本管理、迁移脚本执行
搜索中间件blevesearch/bleve(10k+星)纯Go实现的全文搜索引擎、索引管理

go-zero Redis 缓存使用示例

package mainimport ("fmt""github.com/zeromicro/go-zero/core/stores/redis"
)func main() {// 初始化 Redis 客户端rds := redis.MustNewRedis(redis.RedisConf{Host: "localhost:6379",Type: redis.NodeType,})defer rds.Close()// 设置缓存key := "user:10086"val := `{"id":10086,"name":"go-zero"}`_, err := rds.Setex(key, val, 3600) // 1小时过期if err != nil {panic(err)}// 获取缓存result, err := rds.Get(key)if err != nil {panic(err)}fmt.Println("获取缓存:", result)
}

3.3 网络类(grpc/telemetry/jwt/kafka/kong/istio/jaeger/consul)

网络类中间件解决服务通信、API 管理、安全等问题。

中间件类型社区主流组件go-zero 对应实现核心功能
RPC 框架grpc/grpc-go(22k+星)内置 zrpc 框架高性能 RPC 通信
API 网关kong/go-kong(437+星)内置 rest 网关路由、鉴权、限流
消息队列streadway/amqp(5k+星,RabbitMQ客户端)支持集成复杂路由、可靠投递
消息队列confluentinc/confluent-kafka-go(5k+星,Kafka客户端)支持集成高吞吐、日志收集
链路追踪open-telemetry/opentelemetry-go(6k+星)TraceHandler分布式追踪
认证授权golang-jwt/jwt(8k+星)AuthorizeHandlerJWT 认证

更多网络中间件

中间件类型组件名称(GitHub)核心特性典型应用场景
API 网关Traefik(56k+)1. 自动发现服务(与 K8s、Docker 深度集成)
2. 动态配置(无需重启)
3. 内置监控和仪表盘
4. 支持 HTTPS、WebSocket
云原生环境网关、微服务入口、多环境路由管理
API 网关Kong Gateway(42k+)1. 基于 OpenResty,性能优异
2. 丰富的插件生态(限流、鉴权、监控等)
3. 支持声明式配置
4. 企业级稳定性
高并发 API 网关、多团队 API 管理、API 市场
API 网关Apache APISIX(15k+)1. 云原生、轻量级
2. 动态配置更新(基于 etcd)
3. 丰富的插件(支持自定义 Go 插件)
4. 支持 gRPC 转 HTTP
微服务网关、K8s Ingress Controller、API 限流防护
身份认证网关ory/kratos(12k+)1. 专注于身份认证和授权
2. 支持 OAuth2.0、OpenID Connect
3. 与各种前端框架兼容
4. 可扩展的身份验证流程
用户认证网关、多因素认证、权限管理
服务网格Istio(37k+)1. 流量管理(动态路由、A/B 测试)
2. 安全通信(自动 mTLS)
3. 可观测性(全链路追踪、指标)
4. 服务间身份认证
大规模微服务治理、多集群服务管理、零信任网络
代理服务器Envoy(26.3k+)1. 高性能 L7/L4 代理
2. 动态配置
3. 健康检查、负载均衡
4. 熔断、限流
服务代理、API 网关底层、边缘代理
反向代理Caddy(67k+)1. 自动 HTTPS(默认启用 TLS)
2. 简单易用的配置
3. 插件化架构
4. 支持 HTTP/2、HTTP/3
静态资源服务、反向代理、简易 API 网关
分布式追踪Jaeger(20.4k+)1. 分布式链路追踪
2. 性能分析
3. 根因分析
4. 与 OpenTelemetry 兼容
微服务调用链监控、性能瓶颈定位、故障排查
服务注册发现Consul(29k+)1. 服务注册与发现
2. 分布式配置
3. 健康检查
4. 服务网格功能
服务自动发现、配置中心、分布式锁

go-zero 链路追踪中间件示例(TraceHandler)

package mainimport ("net/http""github.com/zeromicro/go-zero/rest""github.com/zeromicro/go-zero/rest/handler""github.com/zeromicro/go-zero/core/trace"
)func main() {// 初始化追踪器trace.SetGlobalTracer(trace.NewTracer(trace.TracerConf{ServiceName: "api-service",Endpoint:    "http://jaeger:14268/api/traces", // Jaeger 地址}))engine := rest.MustNewServer(rest.RestConf{Port: 8080,})defer engine.Stop()// 添加链路追踪中间件engine.Use(handler.TraceHandler)// 注册路由engine.AddRoute(rest.Route{Method:  http.MethodGet,Path:    "/api/data",Handler: dataHandler,})engine.Start()
}func dataHandler(w http.ResponseWriter, r *http.Request) {w.Write([]byte("success"))
}

Kafka 消费示例(基于 confluent-kafka-go)

package mainimport ("fmt""log""github.com/confluentinc/confluent-kafka-go/kafka"
)func main() {// 初始化消费者c, err := kafka.NewConsumer(&kafka.ConfigMap{"bootstrap.servers": "localhost:9092","group.id":          "my-group","auto.offset.reset": "earliest",})if err != nil {log.Fatalf("无法创建消费者: %v", err)}defer c.Close()// 订阅主题err = c.SubscribeTopics([]string{"user-tracking"}, nil)if err != nil {log.Fatalf("无法订阅主题: %v", err)}// 消费消息for {msg, err := c.ReadMessage(-1)if err != nil {log.Printf("消费错误: %v", err)continue}fmt.Printf("收到消息: %s 主题: %s 分区: %d 偏移量: %d\n",string(msg.Value), msg.TopicPartition.Topic,msg.TopicPartition.Partition, msg.TopicPartition.Offset)}
}

Caddy 作为 API 网关的简单配置示例

# Caddy 配置文件
:80 {# 将 /api/users 路由到用户服务route /api/users/* {reverse_proxy http://user-service:8080}# 将 /api/orders 路由到订单服务route /api/orders/* {reverse_proxy http://order-service:8081}# 全局配置:启用压缩encode gzip zstd# 简单的速率限制rate_limit * 100r/m  # 每分钟最多 100 个请求
}
http://www.dtcms.com/a/418186.html

相关文章:

  • 建设一个自己的网站需要多少钱站长统计官方网站
  • 烟台装修公司网站建设注册公司流程和费用时间
  • java设计模式:工厂方法 + 建造者模式
  • 3、Lombok进阶功能实战:Builder模式、异常处理与资源管理高级用法
  • Linux 内核开发 的核心知识点
  • 【Linux系列】并发世界的基石:透彻理解 Linux 进程 — 理解操作系统
  • 小米17对比iPhone 17:2025年深度对比
  • 借助Aspose.Email,使用 Python 将 EML 转换为 MHTML
  • 免费做名片的网站专业网站开发设计
  • 微服务项目->在线oj系统(Java-Spring)-后台管理(1)
  • 怎么防止网站攻击做网站价格表
  • 1、Product-Service 服务设计规范文档
  • 网深科技NetInside网络流量异常分析报告
  • 基于TCP的简易端口扫描器
  • 大腾智能助力深圳市联合创造科技,实现精密触控屏行业数字化升级
  • MR+无人机-增强态势感知、更高效的现场检查和增强
  • 无人机遥控器使用与信号连接问题处理
  • 德克西尔抗振倾角仪,守护无人机云台稳定清晰
  • Mosquitto:MQTT Broker入门与分布式部署最佳实践
  • 无人机姿态控制技术详解
  • 做网站所需要的公司细责及条款微信小程序推广
  • keepalived部署
  • 前端实现抽烟识别:从算法到可视化
  • j2ee网站开发免费教程甘肃金顶建设公司网站
  • Linux ssh/scp/sftp命令使用及免密登录配置
  • CBB21B-MPB电子元器件 RC容钏电子 高性能金属化聚丙烯薄膜直流电容器 技术解析
  • CustomKD论文阅读
  • 腾讯面试题总结(1)
  • 【服务器知识】HTTP 请求头信息及其用途详细说明
  • AbMole| ABDP 493/503( M9850;中性脂滴荧光探针)