QCon 全球软件开发大会(北京站)门票 9 折倒计时 4 天,点击立减 ¥880 了解详情
写点什么

GOTO Berlin: 使用自己的公共 API 的问题

2013 年 10 月 23 日

Soundcloud 的工程总监 Phil Calcado 在最近的 GOTO Berlin 大会上分享自己管理和构建大型 Rails 应用程序的经验时提到:使用自己的公共 API 可能是一种挑战。

Soundcloud 发展非常迅速,在他的演讲中 Phil 着重介绍了他们在创建一个新的网站时(已于 1 年前发布)所遇到的一些问题。

Soundcloud 开始是一个 Ruby on Rails 应用程序,6 年间它不断的扩展变得非常混乱。很多问题归咎于基础设施,一个使用 MySQL Memcached 的大型 Rails程序

2010 年他们开始考虑一个新的平台。其中的一个想法来源于 Twitter,在他们发布自己重新设计的架构的时候,该架构让Soundcloud 团队确信他们要构建一个相似的应用程序;一个单独的页面JavaScript 应用程序,使用一个公共的API 与后端通信。最终他们开始构建一个新的网站,很多JavaScript 技能娴熟但是缺少一些后端经验的前端开发者基于现在的公共API 用了6、7 个月的时间构建了一个新的Web 网站。

他们最后构建了一个非常稳定的应用程序,但是在即将发布之前他们与Twitter 进行了一次谈话,并且提到他们要发布一个新的网站,新网站受到了新的Twitter 架构的启发,使用了和Twitter 完全相同的想法。对于这个问题来自于Twitter 的人员回答说,他们已经发现新的设计并不是一个好想法。实际上,之后Twitter 已经决定将大部分实现退回到服务器端渲染。

Twitter 人员的回答将团队放到了一个非常有趣的位置,这是一个重要的集成,因此他们应该怎么做,继续还是取消?最后他们决定继续。因为了解 Rails,所以他们确信第一件要出问题的事情会是 Rails,所以他们预分配了很多节点。但是在新设计中一个页面的请求从 3 增长到了超过 100,第一件出问题的事情是他们的高可用性代理。在解决了这个问题之后,memcached 又出问题了,之后是 Rails 和 MySQL。他们现在认识到他们的基础架构有问题。

他们很早就意识到的一个问题是不能重写整个应用。要保留 Rails,因此他们需要一个快速 API,一个能够尽快处理大量请求的 API。他们将大型 Rails 应用程序分割成了更小的部分,并且引入了服务的思想。但是有一个惊喜是,他们依然拥有同样的整体性能,只是从数据库转移到 HTTP 上有性能瓶颈。结论便是他们需要更加快速的 Rails。

仔细看看代码他们发现了很多并发的空间。Rails 不喜欢并行或者并发,因此他们尽量使用 Finagle 这样的工具保持同步并设法获得并行和并发性。他们大大降低了负载,并且让结果的返回更加快速。

他们现在能够更快地服务请求。但是每一个页面依然会产生很多请求,为了查找减少请求数量的方法,他们决定尽力实现一个自定义 API,通过一个请求返回几个页面的数据。为了实现这个目的,他们最终使用了三个专用的 API,分别用于移动、桌面和合作伙伴。

他们现在面对的最有趣的设计挑战是如何建模它们的 API。目前开发者喜欢将一个更加粗粒度的 API 用于移动,将一个更加有体验的 API 用于桌面,目前有两个分离的后端。

2013 年的 GOTO Berlin 大会是 GOTO 大会首次在 Berlin 举行,本次大会有超过 400 位参会者和大约 80 位讲师。

查看英文原文: GOTO Berlin: Problems Using Your Own Public API

2013 年 10 月 23 日 09:04775
用户头像

发布了 321 篇内容, 共 103.9 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

Java 细粒度锁续篇

rookiedev

Java 多线程 加锁

数字货币交易所交易平台系统开发

系统开发咨询:I76-883I-5I52 邓森

号称大厂面试官的克星,“神仙版”Java面试宝典,“真”吊打大厂面试官

Java架构之路

Java 程序员 架构 面试 编程语言

用了这个评估优化LiteOS镜像利器,我有点飘...

华为云开发者社区

镜像 开发 环境配置

学习笔记丨数据结构之二叉查找树

Liuchengz.

数据结构 C/C++ 数据结构与算法 高级数据结构

规模化敏捷框架何从入手?这篇文章把SAFe讲透了!

华为云开发者社区

敏捷开发 框架 safe

远见而明察近观若明火|Centos7.6环境基于Prometheus和Grafana结合钉钉机器人打造全时监控(预警)Docker容器服务系统

刘悦的技术博客

Docker 高可用 监控 Prometheus 预警

区块链农场游戏系统开发软件定制

系统开发咨询:I76-883I-5I52 邓森

Ribbon使用及其内核原理剖析

程序员Fox

成为分布式系统架构师,都要学哪些东西?该怎么学?

四猿外

Java 程序员 分布式 分布式系统 架构师

拼多多技术3面(Java研发):幻影读+Redis+分布式缓存+锁机制

Java成神之路

Java 程序员 架构 面试 编程语言

关于昆明市政协、市统战部、民革昆明市委赴云南坤艮盈科技有限公司(商务部CECBC区块链专委会秘书处云南办事处)调研指导工作

CECBC区块链专委会

云南发展

编写令人愉悦的API接口(一)

陈云轩

Java 程序设计 API APi设计

2020中国 .NET开发者大会精彩回顾:葡萄城高性能表格技术解读

Geek_Willie

GCExcel 中国 .NET开发者大会 表格技术

这份GitHub上价值49K的SpringBoot2+Thymeleaf企业应用实战,真香

Java成神之路

Java 程序员 架构 面试 编程语言

“闭关修炼”这么久,吃透这些“微服务”笔记,足够面试涨10K

Java成神之路

Java 程序员 架构 面试 编程语言

区块链矿机系统开发现成案例

系统开发咨询:I76-883I-5I52 邓森

微服务架构太难了?那你可能还没掌握SpringBoot+SpringCloud+Docker+RabbitMQ

Java架构之路

Java 程序员 架构 面试 编程语言

腾讯T4架构师:刷3遍以下面试题,你也能从小公司成功跳到大厂

Java架构之路

Java 程序员 架构 面试 编程语言

转型项目经理?

escray

面经 面试经历 101次面试 七日更 十日谈

区块链矿机挖矿系统开发软件技术

系统开发咨询:I76-883I-5I52 邓森

使用 Helmfile 解放你的 Helm Chart

郭旭东

云原生 Helm

研发团队如何实现无缝协作?

万事ONES

研发管理 团队协作 研发效能 研发工具

总结近期腾讯+阿里+百度Java岗高频面试题,提问率高达98%,看到这篇文章基本offer稳了

Java成神之路

Java 程序员 架构 面试 编程语言

让你的简历不落窠臼,精雕细镂写一份真正的技术简历(Python向)

刘悦的技术博客

Python 面试 简历优化 简历

JVM 的运行时数据区域分布

rookiedev

Java JVM

假冒、诈骗、隐私安全,如何应对数字人民币的风险与挑战?

CECBC区块链专委会

货币

区块链商城APP系统开发|区块链商城软件开发

开發I852946OIIO

系统开发

吊!设计模式全解:6大设计原则+23种设计模式+设计模式PK+设计模式混编

Java架构之路

Java 程序员 架构 面试 编程语言

LeetCode题解:92. 反转链表 II,迭代,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

京东三面凉凉:java+spring+jvm+kafka+微服务等一个都讲不清

Java成神之路

Java 程序员 架构 面试 编程语言

边缘计算隔离技术的挑战与实践

边缘计算隔离技术的挑战与实践

GOTO Berlin:使用自己的公共API的问题-InfoQ