apisix在君润人力云原生平台的架构实践(代码片段)

Apache_APISIX_中文社区 Apache_APISIX_中文社区     2022-12-15     591

关键词:

讲师:袁鹏,一页科技架构师

摘要: 君润人力采用多套 Apache APISIX 集群来满足自研服务平台的功能需求。

君润人力成立于 2019 年,是一家以科技驱动的人力资源解决方案服务商,依托行业领先的科技水平和服务能力,专注于为客户提供一站式人力资源服务。自研数十家人力资源服务平台,深度链接 B 端企业和 C 端用户,构建数字化人力资源服务生态。

本文从君润人力业务快速扩张的背景入手,重点介绍开源 API 网关 Apache APISIX 对其自研平台系统架构的多样化应用场景支持,共有四大线上实战案例,希望对仍在网关选型过程中的企业或用户有所帮助。

君润人力自研系统架构概述

君润人力在搭建自研服务平台架构时,首要原则就是**“开放、开源、拥抱云原生”**。平台基于 Kubernetes 微服务架构构建云端系统,整体架构参考下图。

右侧是君润自研服务平台,DevOps 流程依托 Git webhook、coding、Kubernetes 集群实现全自动化与无感发布,业务系统基于 PaaS 平台进行迭代开发,确保研发规范,并达成技术栈的统一。上侧是监控手段,系统集成了 sky-agent 和 arthas,满足了线上服务观测多维度的需求。与此同时,采用腾讯日志云与 Kubernetes 结合的方式将服务日志存储在云上,实现 Kubernetes 集群内无文件化服务,避免磁盘容量堆积从而影响到 Kubernetes 集群单个节点的健康。

左侧是业务系统中最重要的环节 —— 流量管理。所有流量会通过 WAF(WAF,Web 应用防火墙,负责网络安全)进入三层网络里面的第一层 CLB,主要负责流量转发;第二层就是云原生网关 APISIX,它承担了业务系统的内部服务治理;第三层则是业务系统的 Gateway 应用内部的网关,负责单系统鉴权和路由。

其中第一层的 CLB 和第二层的 APISIX 尤其重要,它是所有系统的入口,一旦出现问题,那么所有系统将无法被访问。CLB 采用的是腾讯云服务,稳定性、扩展性与抗并发性能都比较高,业务架构需要解决的是第二层云原生网关 APISIX,保证它的高可用。

APISIX-Service 被部署在 Kubernetes 集群内部,Kubernetes 集群采用的是腾讯云提供的服务,为了保证出现问题后能够快速恢复,系统外置了 etcd 集群,使数据得以保留,这是 APISIX 集群高可用的体现。

那么,如何来保证 APISIX 的高并发和高性能?这里系统利用了 Kubernetes 的机制,当 APISIX 进行路由转发时,通过 Kubernetes 的服务名 + 服务端口使它在同一个网段内跳转;因为网关服务部署在 Kubernetes 内部,依托于 Kubernetes 的特性,可以进行滚动升级,进而达到 APISIX 网关升级的无感发布。

通过该架构图不难发现,第二层是所有流量的入口,选择一个满足业务扩张需求的云原生网关,对系统架构来说至关重要,下面谈谈在网关技术选型时的主要思考。

技术网关选型痛点

  • 数量庞大的业务系统。 目前人力资源这个领域有 15+ 服务平台,生态业务多样化,面临的问题也比较多,服务请求需要频繁变更,导致需要操作和配置的路由也非常多。原来系统是基于 CLB 进行流量转发,久而久之,运维人员需要配置和操作的地方非常多,耗费了大量的人力与时间。
  • 频繁的高并发大流量。 举个例子,客户集中在同一天发薪或提现大额资金。在用户数量达到大几十万时,集中进行的某些行为,如打卡、签约、领取任务或工资等,此时系统并发流量非常大,短期翻倍的情况比比皆是。
  • 个性化需求的扩张压力。 APISIX 是基于 OpenResty、Nginx 和 Lua 开发的,但如果用 Lua 来开发插件,会有一定的研发投入和维护成本。
    对于插件的支持,APISIX 已经提前做好了准备。APISIX 的官网提供了自定义插件 ext-plugin 来支持 Java 开发,技术栈问题迎刃而解。此外 APISIX 的生态非常好,作为国产网关产品,社区极其活跃,业内实践还特别多,在云原生网关这层来说,业内也是顶级存在。

我们的团队非常开放,做完技术选型后,快速实践落地。从上线部署到服务分批次接入,耗时不到 1 个月时间。目前 99% 的服务通过 APISIX 访问,上线一年多至今零事故,稳定性非常好。下面这张图里,大家能看到 APISIX 的一些特性,红字部分是我们最看重的几点。

APISIX 四大实践场景

下面我们来逐一介绍 APISIX 的四个实践场景。

路由策略

Apache APISIX 基于 Radixtree 和 etcd 提供路由极速匹配与配置快速同步的能力。路由和插件的设计实现都满足了极速性能和超低延迟的需求。比如以下两个场景中,都表现出了不错的性能:

  • 高峰期的 API 紧急停用。 业务系统处在高峰期时,用户导出百万数量级的报表数据,会使 MySQL 数据库直接宕机,此时重启服务也无法解决,用户继续导出操作会持续故障,这个问题以前我们得发版才能解决;而现在只需要运维人员简单配置一番,就可以做到 API 紧急停用,通过路由优先级策略和失效策略(依托 Serverless 插件),配合使 API 接口在分钟级下线,从而保证服务的稳定。
  • 业务系统较多。 其中 SaaS 系统需要支持客户自定义域名访问,我们采用了泛域名匹配,做到一次配置,全局通用。

下图是君润人力 2022 年度路由增长趋势图。可以看到,不论前端还是后端路由,在引入 APISIX 之后,都实现了三倍或以上的数量增长

安全控制

我们基于 APISIX 做了双层网关架构,在 APISIX 上隔离出一个逻辑网关,用户访问 CLB 进来 APISIX 再转发到业务系统。如果用户使用的这个功能需要用到 PaaS,就会通过 PaaS 服务网关进行访问,此时的 PaaS 服务网关就是一个逻辑网关。

我们在 Kubernetes 内部封闭了一个区域,即 PaaS 平台,里面包含大量的基础服务。利用 APISIX 网关的特性:熔断、安全、身份识别,使上层业务系统访问 PaaS 服务都需要通过 PaaS 网关。

流量管理

由于业务系统数量较多, 核心服务(SSO、PaaS 服务和发薪服务)可用性要求高, 这些服务的流量管控需要依赖 APISIX 提供的流量管理灰度策略。

为此,系统内部采用了两种方式进行。一是基于标签灰度。核心服务上到生产环境之前,测试人员先在灰度环境验证。我们会将测试用户流量转发到灰度服务,进行生产环境验证,验证通过后再基于权重切入流量,观察一段时间,没问题后再把全部流量切换到新版本;二是生产环境内。相同的服务并存多个版本,不同的业务系统访问不同的版本时,基于标签进行路由转发。

日志管理

从下图的架构模式可以看出,APISIX 和 Pod 服务都基于 Kubernetes 架构,所有后端路由都被绑定在同一服务上,在 APISIX 服务上配置的 Kafka 插件用来采集日志数据,同时配置了 Skywalking 监控程序性能。根据 RequestId 和 TraceId 在 Skywalking 和日志云,可以观测到整个调用链路,并查看每个环节的日志记录和 API 请求耗时。

从目前观测到的数据来看,系统每天都有上千万次的 API 请求,平均每天产生的日志数据达到 30G ,日志总量达到 TB 级。

使用 APISIX 的经验与展望

在使用 APISIX 的过程中,我们总结了一些经验之谈,在这里分享给对 APISIX 感兴趣的朋友们。

构建基础镜像需要拉取国外资源。 APISIX 需要部署在 Kubernetes 内部,内部会进行一定的二次开发和源码编译,这时需要到 GitHub 上拉取资源,目前官方提供的 Docker 镜像有一部分需要拉取国外资源,在进行本地开发和线上部署时,环境调试相对麻烦。

调试环境部署有要求。 自定义插件 java-plugin-runner ,需要基于 runner.sock 进行 RPC 通讯,现有案例较少,调试起来有一定困难,它需要和 APISIX-Service 在同一个镜像内。

**每天产生大量的日志记录到本地。**刚刚发布生产时,我们发现就算只开启 error 级别日志,每天的增长数量都非常大,导致 Kubernetes 集群中一个节点磁盘告警。后面打包镜像时将日志由文件记录改变为输出至控制台,收集至云日志服务 CLS 存储记录分析,实现本地无文件化存储。

当然,以上都属于前期准备工作上的必经之路,在正式投入使用后,APISIX 给我们带来的收益远远大于期望,总体有以下三点:

  1. 对业务发展起到了强有力的支撑。 使用 APISIX 后,系统功能更加丰富,性能更加强劲。APISIX 对 API 服务提供了多种可观测性和安全防护手段,可以支持我们每天千万次流量的访问。
  2. 助力研发交付效率。 比如原来配置 DNS 解析需要 10 分钟才能生效,而现在通过泛域名配置,几秒钟就能生效;因为原先需要在 CLB 和 Nginx 两个地方手动修改配置,而我们有 10 多个系统、100 多个服务,需要配置的点很多,应用了 APISIX 的泛域名配置后,现在只需要在控制面板上修改,极大地减少 DevOps 工作量。
  3. 大幅降低成本。 LB (负载均衡)成本的变化。LB 服务数量由 200+ 缩减到了 10+,大大降低了系统维护成本。
    后期我们还会有一系列需要借助 APISIX 云原生网关达成的功能开发包括但不限于:集成 Sentinel 使服务具备热插拔动态限流功能、开发多维度流量控制、风控识别功能升级、分层治理和全链路日志分析等等。届时将采用多套 APISIX 集群来满足自研服务平台的功能需求。

总结下来,使用 APISIX 云原生网关给君润人力服务平台带来了非常大的帮助,使我们能轻松应对多样化的复杂场景,打造趋于完美的数字化人力资源服务生态。

本文由博客一文多发平台 OpenWrite 发布!

dtsetechtalk|云原生架构下的数字身份治理实践

摘要:由华为技术大咖VS派拉软件CTO为大家详解云原生架构下的身份管理平台,构建云安全数字身份入口。本文分享自华为云社区《DTSETechTalk|第4期:云原生架构下的数字身份治理实践》,作者:华为云社区精... 查看详情

在微服务架构下基于prometheus构建一体化监控平台的最佳实践

随着Prometheus逐渐成为云原生时代的可观测事实标准,那么今天为大家带来在微服务架构下基于Prometheus构建一体化监控平台的最佳实践和一些相关的思考,内容主要包括以下几个部分:微服务、容器化技术演进的监控之痛云原生... 查看详情

新书《openshift云原生架构:原理与实践》第一章第三节:企业级paas平台openshift

...由传统IT架构及其所支撑的臃肿应用系统时代,迁移至云原生架构及其所支撑的敏捷应用系统时代。在这场变革中,新技术的出现、更新和淘汰之迅速,以及新技术的架构集成度、复杂度之高,都是前所未有的。从虚拟化到云计... 查看详情

如何快速搭建云原生企业级数据湖架构及实践分享

...湖架构被越来越多的企业探讨。本文主要分享快速搭建云原生企业级数据湖架构及实践分享。王震,阿里云计算平台事业部开源大数据平台技术专家本文根据王震在2021开源大数据技术线上Meetup#0821分享整理直播回放链 查看详情

事件驱动架构在vivo内容平台的实践(代码片段)

...构当下,随着微服务的兴起,容器化技术的发展,以及云原生、serverless概念的普及,事件驱动再次引起业界的广泛关注。所谓事件驱动的架构,也就是使用事件来实现跨多个服务的业务逻辑。事件驱动架构是一种设计应用的软... 查看详情

新一代云原生日志架构-loggie的设计与实践

1.背景严选日志平台初期,使用filebeat采集云内日志,用flume采集云外日志。期间经历了一段痛苦的运维排障时期,被问的最多的几个问题:某条日志为何没有采集?某条日志为何重复采集了?能否将漏采集的那条日志补采集?某... 查看详情

直击前沿技术:云原生应用低代码开发平台实践(代码片段)

...开发成本和运维成本。FreeWheel核心业务开发团队在打造云原生微服务架构的过程中,搭建新服务的需求在日趋增多。为了应对这一挑战,我们研发了基于AWS的低代码开发平台。本文就从低代码和开发平台的基本概念讲起&#... 查看详情

微服务架构与实践及云原生等相关概念

微服务架构与实践笔记:《微服务架构与实践》王磊著一单块架构  1 定义:对于这种功能集中、代码和数据中心化、一个发布包、部署后运行在同一进程的应用程序,我们通常称之为单块架构应用,并非物理上的分层。... 查看详情

quarkus技术系列「云原生架构基建」打造基于quarkus的云原生微服务框架实践(代码片段)

...呢,我们的分享主题是“如何打造一个基于Quarkus的云原生微服务架构”,无论你之前是否了解或者熟悉Quarkus,希望通过今天的技术分享可以让你认识和知道Quarkus。进入前奏:好了,我们废话不多说,进入... 查看详情

用友云平台,真正的云原生架构,加速云应用落地

...且能够更快实现的技术手段。真正的云应用必须是基于云原生架构的,PaaS是一个重要的步骤,因为这是云原生的第一接触点。基于云原生架构的PaaS平台于企业客户、于生态伙伴而言,都是真正上云的必要支撑!用友公司聚焦企... 查看详情

云原生devops,模型化应用交付能力很重要

...Ops文化及其支撑其落地实践的自动化工具与平台能力在云原生架构渐为普及的背后,发挥了关键的价值。撰稿:溪洋云原生正在成为企业业务创新和解决规模化挑战的加速器。云原生带来的变革绝不限于基础设施和应用... 查看详情

qunar云原生容器化落地实践

...#xff5c;邹晟去哪儿网基础平台技术专家背景近几年,云原生和容器技术非常火爆,且日趋成熟,众多企业慢慢开始容器化建设,并在云原生技术方向上不断的探索和实践。基于这个大的趋势,2020年底Qunar也向云... 查看详情

云原生大数据架构中实时计算维表和结果表的选型实践(代码片段)

简介: 随着互联网技术的日渐发展、数据规模的扩大与复杂的需求场景的产生,传统的大数据架构无法承载。作者|志羽来源|阿里技术公众号一前言传统的大数据技术起源于Google三架马车GFS、MapReduce、Bigtable,以及其... 查看详情

云原生devops,模型化应用交付能力很重要

...Ops文化及其支撑其落地实践的自动化工具与平台能力在云原生架构渐为普及的背后,发挥了关键的价值。撰稿:溪洋审核校对:天元、海珠编辑&排版:雯燕云原生正在成为企业业务创新和解决规模化挑战的加... 查看详情

深度解读!阿里统一应用管理架构升级的教训与实践(代码片段)

作者|?李响、张磊从2019年初开始,阿里巴巴云原生应用平台团队开始逐步在整个阿里经济体内,基于标准应用定义与交付模型进行应用管理产品与项目统一架构升级的技术工作。事实上,早在2018年末,当Kubernetes项目正式成为阿... 查看详情

jenkinsx实践系列——背景知识(代码片段)

...于Jenkins和Kubernetes实现,旨在解决微服务体系架构下的云原生应用的持续交付的问题,简化整个云原生应用的开发、运行和部署过程。jx基于gitops,将k8s分为preview、staging、production几个环境,详细的devops可以查看下图:jx 查看详情

云原生架构下日志服务数据预处理

...实践将以某家国际教育机构为例,为大家详细介绍云原生架构下日志服务数据预处理以及对应的解决方案和最佳实践操作手册,方便用户快速对号入座,解决云原生架构下的常见日志难题。直达最佳实践:【https:/... 查看详情

云原生架构下日志服务数据预处理

...实践将以某家国际教育机构为例,为大家详细介绍云原生架构下日志服务数据预处理以及对应的解决方案和最佳实践操作手册,方便用户快速对号入座,解决云原生架构下的常见日志难题。直达最佳实践:【https:/... 查看详情