GeoIP 基础服务

HIGH-PERFORMANCE INFRASTRUCTURE

GeoIP 轻量级 IP 地理信息服务

基于 Go Kratos 框架开发,提供统一的 gRPC 与 HTTP IP 归属地查询能力,利用 S3 分发与 atomic.Value 实现内存零停机热更。

五大核心特性支撑极速查询

避免各个业务微服务重复集成和维护庞大的 IP 数据库,保证网关与核心基础服务的高并发要求。

双协议原生支持

Kratos 原生支持的 gRPC (默认 9000 端口) 与 HTTP (默认 8000 端口) API,满足不同调用场景需求。

S3 中心化分发

支持从 AWS S3 或兼容 S3 的对象存储(如 MinIO)自动拉取 IP2Location .BIN 数据库文件。

内存级无感热更

利用 Kratos 配置监听机制与 atomic.Value 原子指针交换,新库下载后实现内存级零停机无缝切换。

按需响应 (FieldMask)

支持 Protobuf FieldMask 参数按需获取指定字段,避免返回冗余 JSON,极大减轻网络序列化开销。

全流程无锁读取

请求查询全过程无互斥锁竞争,充分释放多核 CPU 算力,满足基础网关层极低延迟与超高吞吐要求。

DDD 与 Wire 规范

严格遵循领域驱动设计划分 biz/data/service,通过 Wire 依赖注入配置,避免全局变量污染。

架构实践与部署建议

  • 建议作为独立的内部基础服务部署在 Kubernetes 独立的基础架构 namespace
  • 生产环境建议将一份默认 .BIN 文件打入容器镜像或挂载 PVC 持久化 local_path
  • 通过修改配置中心的 version 字段即可自动触发 Watcher 并在后台拉取热更新
  • 支持 curl HTTP GET 查询,支持 ?updateMask=ip,country_code,latitude,longitude 灵活过滤

立即在微服务中集成 GeoIP 查询

获取详细的 Protobuf 契约定义与 HTTP/gRPC 调用示例代码,开启高并发查询支持。