为什么放弃 clojure
重要要点
- AppsFlyer每天使用微服务架构样式构建,处理近70亿个HTTP请求。 包装所有前端服务的系统的入口点是称为API网关的关键任务(非微型)服务。
- 用AppsFlyer默认语言Clojure编写的原始API网关开始积累技术债务。
- 对于新设计的API网关服务的建议,选择Golang作为与Clojure进行基准比较的语言。
- 基准测试是通过NGINX(由Lua增强)以及Golang和Clojure进行的。 与Clojure相比,Go的吞吐量有所提高,因此被选择为实现的语言。
- API网关现在已经以一种类型化的语言构建,这一事实使Golang的库支持和社区能够插入各种功能并更轻松地引入新技术。
- 与以前相比,新部署的解决方案能够支持的流量成倍增长,而且随着流量和请求以10倍的规模增长,从前瞻性角度来看,这是很重要的。
AppsFlyer是领先的移动归因和营销分析平台,每天处理近70+亿个HTTP请求(每分钟约5000万个请求),并采用微服务架构样式构建。 包装所有前端服务的系统的入口点是称为API网关的关键任务(非微型)服务。 从本质上讲,这是将流量从客户路由到我们的后端服务的单点,从而为我们的客户实现了指数级的身份验证和授权,但同时也存在潜在的单点故障。
本文探讨了工程团队为何以及如何从基于Clojure的API网关实现迁移到基于Go的实现。
在API网关中积累技术债务
就像我们的API网关服务一样,我们之前已经讨论过技术债务是如何产生的,并且发生了很多次。
最初,AppsFlyer的服务是Python整体,它需要一个完整的身份验证和授权解决方案作为整体的一部分。 随着时间的流逝,流量和复杂性都在增加,我们迁移到了微服务架构。 因此,我们需要创建一个统一的API网关解决方案,以用作我们的身份验证和授权提供程序。
我们从卷起袖子并用Clojure编写代码开始,跳过设计阶段,