新闻中心

  • 首页 i(name 如何 Sonar 在 AWS 上构建统一的 API 架构博客

如何 Sonar 在 AWS 上构建统一的 API 架构博客

2026-01-27 13:48:13

Sonar 如何在 AWS 上构建统一 API

作者 Patrick Madec 和 Kornl Kotan 发布日期 2023 年 11 月 20 日在 Amazon API Gateway、Amazon Route 53、Architecture 和 AWS WellArchitected 中发布,链接:原文

关键要点

SonarCloud 通过域驱动设计将应用拆分为多个业务域,并构建了一个统一 API。该 API 通过 Elastic Load Balancing、AWS PrivateLink 和 Amazon API Gateway 策略实现安全暴露。该解决方案符合 AWS WellArchitected Framework 的最佳实践,包括安全性、运营卓越性、可靠性和可持续性。

SonarCloud 是由 Sonar 开发的一款软件即服务SaaS产品,能够无缝集成到开发者的 CI/CD 工作流程中,以提高代码质量并识别漏洞。在过去几个月里,Sonar 的云工程师致力于现代化 SonarCloud,以缩短生产交付时间。

Sonar 遵循域驱动设计原则,将应用拆分成多个业务域,每个域由独立团队负责。同时,他们构建了一个统一的 API 来公开这些域。

本文将探讨 SonarCloud 统一 API 的设计,利用 Elastic Load Balancing、AWS PrivateLink 和 Amazon API Gateway,并揭示与 AWS WellArchitected Framework 一致的好处,包括增强的安全性和最低的运营开销。

该解决方案不仅适用于 Sonar,它还为希望朝着域驱动设计或微服务方向现代化其应用并公开服务的组织提供了一种蓝图。

介绍

SonarCloud 最初作为在 AWS 上构建的单体应用,由一个团队管理。随着时间的推移,它在数千个组织中广泛采用,导致新功能的引入和多个团队的贡献。

面对这种增长,Sonar 意识到需要现代化其架构。决定转向域驱动设计,以便与团队结构相结合。现在,新功能在独立域内由专门团队开发,而现有组件则逐渐使用 strangler pattern 进行重构。

这种转变使得 SonarCloud 由多个域组成,并安全地将其公开给客户成为一项关键挑战。为了解决这个问题,Sonar 的工程师构建了一个统一的 API,下面的部分将对此进行探讨。

解决方案概述

下图图 1展示了统一 API 的架构,这是用户访问 SonarCloud 服务的入口。它基于一个应用负载均衡器ALB和 Amazon API Gateway 私有 API 构建。

图 1 统一 API 架构

API Gateway 的 VPC 端点跨越三个可用区AZ,为每个私有子网提供一个弹性网络接口ENI。与此同时,ALB 配置了一个 HTTPS 监听器,连接到一个包含 ENI 的目标组。

为了简化访问,我们在 apiexamplecom 上建立了一个 API Gateway 自定义域。在该域内,我们为每个域创建了 API 映射。这个设置允许无缝路由,例如路径 /domain1 直接指向 API Gateway 服务对应的 domain1 私有 API。

其工作原理如下:

用户向 apiexamplecom/domain1 发送请求,使用 Amazon Route53 进行 DNS 解析并路由到 ALB。ALB 终止连接,解密请求,并将其发送到其中一个 VPC 端点 ENI。此时,请求的域名和路径分别匹配我们的自定义域名 apiexamplecom 以及我们对 /domain1 的 API 映射。根据自定义域名和 API 映射,API Gateway 服务将请求路由到 domain1 私有 API。

在此解决方案中,我们利用了 Amazon API Gateway 的以下两项功能:

Amazon API Gateway 的私有 REST API 只能通过使用 接口 VPC 端点 从您的虚拟私有云中访问。这是您在 VPC 中创建的 ENI。API Gateway 的自定义域名允许您设置 API 的主机名。API 的默认基础 URL 为:https//apiidexecuteapiregionamazonawscom/stage 通过自定义域名,您可以定义更直观的 URL,例如:https//apiexamplecom/domain1 这是默认情况下不支持私有 REST API 的,因此我们使用了在 https//githubcom/awssamples/ 中记录的变通方法。

结论

在此文中,我们描述了 Sonar 构建的统一 API 的架构,以安全地通过单个 API 端点公开多个域。最后,让我们回顾一下这一解决方案与 AWS WellArchitected Framework 的最佳实践的一致性。

安全性

统一 API 方法通过减少攻击面来提高应用的安全性,相较于每个域都有一个公共 API。用于 ALB 的 AWS Web Application Firewall (WAF) 保护应用免受常见的网络恶意攻击。AWS Shield 默认在 Amazon CloudFront 上启用,提供针对 DDoS 攻击的网络/传输层保护。

运营卓越性

该设计允许每个团队独立地在专用 API Gateway 后部署应用和基础设施更改。这为平台团队带来了最低的运营开销,并且这是一个必需条件。此外,架构基于托管服务,能根据 SonarCloud 使用情况自动扩展。

可靠性

该解决方案利用 AWS 服务提供高可用性,默认情况下跨越 AWS 区域中的可用区 (AZ)。可以在每个私有 API Gateway 上配置请求限流,以保护底层资源不被压垮。

性能

Amazon CloudFront 提升了 API 的性能,特别是对于距离部署 AWS 区域较远的用户。流量通过 AWS 网络主干流动,提供更好的性能以访问 ALB。

飞机加速器成本

ALB 被用作单一入口,带来了额外费用,而与多个公共 API Gateway 相比,这是为了增强安全性和客户体验的权衡。

可持续性

通过使用无服务器托管服务,Sonar 能够将预配基础设施与客户需求相匹配。这避免了过度配置资源,减少了解决方案的环境影响。

进一步阅读

将单体应用拆分为微服务什么是微服务?

Patrick Madec

Patrick 是亚马逊网络服务AWS的一名 ISV 解决方案架构师,常驻瑞士。他帮助瑞士软件公司从云技术中获得利益,以扩大和转型他们的业务。Patrick 的背景主要是在软件开发和工业计算。

如何 Sonar 在 AWS 上构建统一的 API 架构博客

Kornl Kotan

Kornl 是 Sonar 的解决方案架构师,专注于使用无服务器和云原生技术进行基于 API 的集成。他专注于协调和提供构建模块,利用 AWS CDK 实施 SonarCloud 的域驱动设计 (DDD) 分解,实施 API 和内容分发的安全最佳实践,同时优化性能。他热衷于过程自动化和清洁代码实践,致力于持续提高代码质量。