伸缩挑战
在2013年的时候,当大批自运行的第三方API被加到Mashape的市场的时候我们遇到了伸缩的问题。
在2012 7月份和2013 7月份我们的API数量增长了50倍。
http://i.imgur.com/0JaNhEM.png
不止是通过我们代理的请求数量在暴涨,Mashape开始要管理比其他市场更多的API。那时,市场有3500个公开API需要他的管理。
API市场需要快速扩容。我们的API代理是用Node.js构建的,后端是用重型Java构建的。他是一个单体应用架构,并且我们的Node.js代理不能处理大流量尖峰。
那时经常需要加班,并消耗了大量的AWS资源。我们的银行账号少了不少钱,CEO也掉了不少头发。
我们需要找到处理大流量的方案,同时需要保证可靠性和安全。我们想要从单体应用迁移到更灵活的方式。
http://i.imgur.com/C75mgO7.png
我们一直想创建我们自己的API网关;目标是以下内容:
以月和年为单位可预测的稳定性,不是天。
容易在多个地理位置进行扩展并保持高效,而且以极小的开销。
通过一些简单插件达到组件化和易扩展。
独立:支持各种环境,框架和语言。
能方便使用RESTful API进行配置。
基本上就是API管理界的“ElasticSearch”。我们的CTO开始寻找方案,并偶然遇到了一位CloudFlare的工程师,将我们带入了神奇的OpenResty世界。在Nginx上层构建让开发者可以用Lua扩展Nginx功能,Lua是一种被许多大流量网站使用的嵌入式脚本语言。
CloudFlare用Lua脚本构建安全和缓存。我想我们可以做同样的事,只是聚焦在API和微服务管理。Nginx已经是公认的稳定和值得信赖的HTTP服务器,这对于我们的原始需求非常合适。使用了OpenResty后,我们开始构建Kong。
Kong的诞生(API网关)
2013年,Mashape使用Nginx/OpenResty来实现市场上发布API的功能。计费、鉴权、流控和速率限制已经变成了用Lua写的定制OpenResty插件。我们叫他Kong(是的,像“金刚”,就像我们自己的名字:MashAPE)。
http://i.imgur.com/2azlel3.png
今天Kong能有效的管理约15000 API。为我们内部的微服务和我们市场上用户的API服务,处理峰值流量,高并发场景,每月能处理十亿以上API调用。
我们构建了我们自己的“ElasticSearch”来做API管理;很像是Elastic的方式,用RESTful接口在Lucene上层加了一层语法糖,Kong就是在Nginx上包装了一层。
下面是一些在应用市场上操作Kong的例子。
当一个API从图形界面被填加到Mashape平台上,它会发送一条POST请求给Kong:
curl -i -X POST \
--url http://localhost:8001/apis/ \
--data 'name=mockbin' \
--data 'upstream_url=http://mockbin.com/' \
--data 'request_host=mockbin.com'
然后,基于API提供者的需要,一组各式各样的插件会被添加到他的上层。举个例子,如果用户需要秘钥验证:
curl -i -X POST \
--url http://localhost:8001/apis/mockbin/plugins/ \
--data 'name=key-auth'
用户管理很容易;Consumer对象允许一个抽象实体代表用户,应用,客户端或者访问API的系统。他们可以被很容易的用RESTful接口创建和管理。
curl -i -X POST \
--url http://localhost:8001/consumers/ \
--data "username=Jason"
Kong的RESTfulAPI允许我们管理市场上成千上万的API。使用简单专一的代码库,我们能保持我们的微服务和系统互相独立。Kong本身,基于其插件的本质,可以被描述为为服务架构的典范。在他的核心,只有不超过千来行代码,包括处理数据库抽象,路由和插件管理。插件可以保存在不同的代码库并在一个被代理请求的任意生命周期已几行代码的代价插入。我们对这种非常独特的API管理网关感到自豪。
Kong与2015年4月(http://techcrunch.com/2015/04... 上线。那时经历了部分重写 - 并同时在建立了一个很强的用户和开发者社区。我们非常感谢全世界开发者的贡献,并为我们决定开源Kong而欣慰。我们通过改善许多用OpenResty的Lua包来回馈社区。
我们为许多linux发行版和云提供商生成了Kong的包,方便安装和部署。我们做成功的发行版是基于Docker的Kong,从发布开始已经有180000的下载量。
未来的路
每个月,我们都会向Kong发布更多的代码作为我们支持开源API开发者社区的一部分。我们努力让Kong达到1.0的里程碑,这能让所有人感到这个内部工具带给我们公司和社区的愉悦。
我们也在许多其他产品上工作,这些产品是我们提供给API开发者的服务家族的一部分,我们已经等不及下个月通告我们正要做的事。
我们的愿景
在我们的办公室我们有一副第一辆福特生产线的巨型照片,作为我们的灵感。
100年前第二次工业革命开始了。很多新发明中有两个最特别的:电力和装配线(感谢电力)。这个组合使大规模产品生产第一次实现。结果就是极大的降低了将产品推向市场的成本和时间。大规模生产迅速成为全球现象,开办价值上亿的公司。它改变了世界。
我们看到软件工业的今天与历史的关联:电力就是云计算,装配线就是API,你可以快速取得你需要构建你产品的组件/服务。这是历史的重现,我们想要做下一次革命的先锋,再一次改变世界。
http://i.imgur.com/kxGLik7.png
本文来自微信公众号「麦芽面包,id「darkjune_think」
转载请注明。
微信扫一扫关注公众号。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。