解决DNS问题|WunderGraph云使用NATS JetStream
作者:Dustin Deus
WunderGraph
在 WunderGraph,我们正在为开发人员构建一个无基础设施的云,这意味着我们将开发人员从处理基础设施中解放出来。我们认为开发人员不需要精通部署和维护基础设施来构建全球 SaaS。
WunderGraph 就是为了让我们的生活变得更简单(我们使用 WunderGraph 来构建WunderGraph 云[1])。它允许你将不同类型的数据源(如 REST、GraphQL 和数据库)集成到一个统一的表示(虚拟图)中,从而使使用 API 依赖项的工作成为一种愉快的体验。
由于这种架构,我们可以为不同的平台和编程语言,自动生成优化的客户端,并且像身份验证、授权和缓存这样的核心功能都是现成的。因此,专注于编写你的业务逻辑,而不是管道设施。
以可伸缩和可靠的方式部署网关,并提供工具来操作它是一项复杂的任务。我们希望让客户,尽可能轻松地完成这项任务。因此,我们正在构建 WunderGraph 云。这是一项托管服务,可让你在几分钟内在全球范围内部署、构建和管理完全可定制的无服务器网关。在这方面,无服务器意味着当你不使用服务时,你不需要付费。WunderGraph 针对冷启动和高性能进行了优化,允许你支付无服务器价格,同时获得完整的服务器体验。
DNS 问题
图 1:之前
如果你需要独立解决这个问题,那么在全球部署 WunderNodes 听起来是一个具有挑战性的问题。幸运的是,我们依靠合适的基础设施合作伙伴,通过几个 HTTP 调用就可以实现这一点。从高层次的角度来看,WunderNode 是一个隔离网络中的虚拟机,它被小心地暴露在互联网上。最初,我们使用 Cloudflare Workers 将用户请求路由到正确的公共 IPv4 地址。所有数据都存储在最终一致的 Cloudflare KV 存储中。使用这种方法,我们经常会遇到 DNS 传播问题,因为每个新的 Ipv4 地址都必须在全球范围内进行分配和分发。此外,IPv4 地址的短缺让我们重新思考我们的架构。
解决方案:JetStream 作为全球分布式键/值存储
引入 Heimdall。Heimdall 是我们部署到所有接入点(point-of-presence,POP)的定制边缘代理。它负责管理主机->IP 路由,并作为我们分析仓库的事实来源。我们也不再依赖公共 IPv4 地址。相反,我们在BGP Anycast[2]网络中使用私有 IPv6 地址。每个应用程序都与其他应用程序隔离,只有 Heimdall 暴露在互联网上。这使我们能够将网络扩展到无限数量的应用,而不会遇到任何 IP 地址限制。
图 2:使用 NATS JetStream 后
当在 WunderGraph 云上提供新的应用程序时,我们需要一种可靠的方法来存储主机->IP 映射,并将更改传播到所有全局 Heimdall 实例。在尝试了不同的解决方案后,我们使用NATS JetStream[3]作为我们的分布式键/值存储。
它非常适合我们的用例。键/值存储是一致的、高度可用的和水平可伸缩的。此外,JetStream 允许我们观察变化,因此 Heimdall 实例可以得到有关变化的通知,并更新其路由表。重启后,它会将 JetStream 的最新状态加载到内存中。实际上,我们在不到一秒钟的时间内将更新发布到全球各地。
除了功能性,我们还喜欢 NATS 生态系统的质量。Golang 客户端维护积极,界面设计精良[4]。
因此,JetStream 也非常适合我们架构的其余部分。我们希望 JetStream 不仅仅用于存储路由表。NATS & JetStream 将是我们计划提供的其它几项服务的支柱。
未来,WunderGraph 云将为你提供类型安全的 API,以支持以下用例:
- 跨请求的持久数据的键/值存储。
- WunderGraph 函数之间的发布/订阅功能。
- 可靠实施工作流的类似时间的体验。
- 还有更多……
总之,我们对 JetStream 及其可能性感到非常兴奋。作为早期采用者,我们很高兴与社区分享我们的经验和知识。如果你有兴趣帮助我们解决未来的一些挑战,请随时联系我们。我们在招人[5]!
关于作者
Dustin Deus 是 WunderGraph 的联合创始人兼技术主管。他对 web、分布式系统和基础设施充满热情。他也是一个开源爱好者,喜欢与社区分享他的知识。你可以在Twitter[6]或者GitHub[7]上找到他。
参考资料
[1]
WunderGraph 云: https://wundergraph.com/
[2]
BGP Anycast: https://en.wikipedia.org/wiki/Anycast
[3]
NATS JetStream: https://docs.nats.io/nats-concepts/jetstream
[4]
设计精良: https://twitter.com/dustindeus/status/1613203957857361920
[5]
招人: https://wundergraph.com/jobs
[6]
Twitter: https://twitter.com/dustindeus
[7]
GitHub: https://github.com/StarpTech
相关文章
- 在 Go 里用 CGO?这 7 个问题你要关注!
- 9款优秀的去中心化通讯软件 Matrix 的客户端
- 求职数据分析,项目经验该怎么写
- 在OKR中,我看到了数据驱动业务的未来
- 火山引擎云原生大数据在金融行业的实践
- OpenHarmony富设备移植指南(二)—从postmarketOS获取移植资源
- 《数据成熟度指数》报告:64%的企业领袖认为大多数员工“不懂数据”
- OpenHarmony 小型系统兼容性测试指南
- 肯睿中国(Cloudera):2023年企业数字战略三大趋势预测
- 适用于 Linux 的十大命令行游戏
- GNOME 截图工具的新旧截图方式
- System76 即将推出的 COSMIC 桌面正在酝酿大变化
- 2GB 内存 8GB 存储即可流畅运行,Windows 11 极致精简版系统 Tiny11 发布
- 迎接 ecode:一个即将推出的具有全新图形用户界面框架的现代、轻量级代码编辑器
- loongarch架构介绍(三)—地址翻译
- Go 语言怎么解决编译器错误“err is shadowed during return”?
- 敏捷:可能被开发人员遗忘的部分
- Denodo预测2023年数据管理和分析的未来
- 利用数据推动可持续发展
- 在 Vue3 中实现 React 原生 Hooks(useState、useEffect),深入理解 React Hooks 的