Authing 云原生的技术探索与落地实践

前言

Authing 是国内首款以开发者为中心的全场景身份云产品,集成了所有主流身份认证协议,为企业和开发者提供完善安全的用户认证和访问管理服务。Authing 作为云原生架构的 IDaaS 产品,从创立之初就是面向云的技术来进行架构设计,我们将 Authing 打造为云上身份管理的标准组件和云计算的身份基础设施。所有企业和开发者都能便捷灵活地接入。一路走来,我们的团队在技术体系建设中有了非常多云原生方向的积累,今天给大家分享一些实践经验。

公有云基础设施

Authing 的基础设施全部在云上,腾讯云、AWS、阿里云都有使用,目前核心业务我们是架构在 AWS 上,少部分基础设施使用腾讯云和阿里云。我们选择 AWS 承载我们核心业务的原因是:

1.功能强大,AWS 作为云计算的鼻祖,提供全行业最强大的云计算基础设施。

2.生态好,周边设施丰富,有众多开源解决方案。

3. 对我们不仅仅提供技术上的支持,还关注我们业务上的成长。AWS 市场团队会有专人负责 Start Up 生态,提供技术、资源、商务上的支持。在我们组织的线下活动中,经常有 AWS 的伙伴来参加。

目前我们在用的 AWS 核心组件有:

1.EC2:是 AWS 提供云计算服务的基本组件,提供高可靠,高弹性的虚拟主机服务。AWS EC2 提供了多种实例类型,Authing 的核心服务都跑在 EC2 的 m5 实例。

2.EKS:AWS 提供 Kubernetes 托管集群服务。

3.RDS for Postgres:提供基础的业务数据存储。

4.Elasticsearch Service:提供日志服务存储和检索,并提供基础的分析能力。

5.Loadbalancer:提供跨可用区的负载均衡,实现多地多中心的高可用架构。

这些组件组合起来给我们提供了一套高效稳定的基础设施平台。

Kubernetes

当系统逐渐复杂,需要合理的方式进行统一管理。2020年,毋庸置疑 Kubernetes 已经成为容器编排事实的标准。在 Kubernetes 的高可用架构上我们并没有过多操心,我们直接交给了合作伙伴 AWS 的 EKS 服务。

在 Kubernetes 之上,我们研发了一款实现物理多租户的运维平台,在一些中大型企业客户场景中可以可视化的运维管理 IDaaS 组件。部署、伸缩、升级、监控等业务管理尽在掌控。

云中立

我们不能改变用户已有的云基础设施,我们只能最大程度去兼容用户的云环境。因此,我们提出了「云中立」和「Authing Inside」的概念。在多云环境下 Authing 应该保持其中立的特性,可以部署不论是AWS、腾讯云、阿里云还是私有云环境。在混合云或者私有云环境下,Authing 应该像 Intel 一样被集成在客户的 IT 系统中。

为此我们对项目中使用的中间件进行了一层抽象,同时兼容多种组件。在公有云场景尽可能使用公共云稳定的基础设施,比如云对象存储、消息队列等。在私有云环境中可以使用开源组件进行替换,保证在不同场景下的功能完备。

基础设施即代码

业务上云对 IT 基础设施的管理提出了更苛刻的要求,我们需要:

1.更好的系统效能:及时了解相关领域而规避了风险,确保了合规和 IT 基础设施的安全。

2.更快的速度:在今天,软件交付/更新的速度被认为是成功背后最重要的因素之一,需要保证基础设施的高效迭代。

3.高效的变更管理:在部署到生产环境之前,代码常常被修改和测试。基础设施即代码确保了在不同设备、平台和系统中实现更安全和高效的变更管理。

4.可扩展的基础设施:硬件的虚拟化使得在需要时增加、替换和扩展资源。

因此,我们在团队中实施「基础设施即代码」的概念,避免手动的配置,通过使用代码表示环境的期望状态来强制实现了一致性。使用基础设施即代码来部署基础设施是可重复的,也避免由于配置漂移或者缺失依赖导致的运行时问题。DevOps 团队可以通过一套统一的实践和工具来协作以快速、可靠和大规模的交付应用以及其支撑的基础设施。

持续交付

在云原生系统中,我们还应该关注交付能力。在我们进行面向云原声的持续集成实践中,我们关注以下两点:

1.简单,概念和操作都应该简单。团队里的每一个成员,不论技术水平高低,都可以快速的理解 CICD流程并将自己代码发布到不同环境。

2.最小适用,如无必要勿增实体。用尽可能简单的组件完成代码集成和上线交付。

基于以上两个点我们选择 Gitlab CI + Argo CD 进行持续集成。

在 CI 流程中,研发同学提交代码后会自动进行单元测试、E2E 测试,测试成功后进行 Docker 镜像构建,将产物上传到中心镜像仓库。

在 CD 流程中,我们以 Git 为中心深入实践 GitOps 模式,通过更新 infra 仓库中 Kubernetes 编排文件中的镜像版本号,实现自动或者手动上线。

Serverless

Authing 是 Serverless 技术的先行者,我们在多个业务场景使用了 Serverless 技术,其中比较有代表性的是 Pipeline 功能,用户池管理员可以在账号生命周期的不同阶段(注册前、注册后、认证前… )进行函数扩展。开发者在 Authing 控制台中定义 Serverless 函数逻辑,我们会将函数进行打包上传到云端。当终端用户进行登录注册等行为的时候会出发函数钩子,执行之前定义的逻辑。

除此之外,我们和腾讯云、阿里云等头部云计算厂商的 Serverless 团队都有紧密的合作,探索 Serverless 场景下的认证授权的创新模式。

总结

Forrester 在其调研报告中所说:“云原生开放、标准的产业生态,是企业构建跨云、云边的创新业务架构体系的基础。在技术生态方面,受访企业希望通过合作伙伴生态力量实现企业数字化能力的跃升。”

Authing 在云原生方面积累了非常多的经验,同时,Authing 也十分重视并愿意助力客户企业对云计算技术的应用,帮助客户构建企业级云原生平台。云技术革命蕴藏着无限潜力,Authing 将始终深耕身份基础设施,为企业的身份认证体系和数据资产保驾护航。