Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ButterCMS架构:完成数百万次调用的关键任务API

ButterCMS架构:完成数百万次调用的关键任务API

作者头像
CSDN技术头条
发布于 2018-02-08 02:42:32
发布于 2018-02-08 02:42:32
1.8K0
举报
文章被收录于专栏:CSDN技术头条CSDN技术头条

原文:ButterCMS Architecture: A Mission-Critical API Serving Millions Of Requests Per Month

(http://highscalability.com/blog/2017/10/16/buttercms-architecture-a-mission-critical-api-serving-millio.html) 作者:Jake Lumetta 译者:夜风轻扬

还在为网站中断而烦恼么?还在为可能存在的单点故障而终日提心吊胆么?ButterCMS也许给你带来新的选择,请见下文:

ButterCMS 允许开发者在几分钟内将内容管理系统添加到任何网站。我们的业务要求我们的API能够100%处于正常工作状态,但在经历了多次几乎使业务陷入瘫痪的中断之后,我们开始关注于消除单点故障。在这篇文章中,我将讨论如何使用Fastly先进云平台和其他策略,以确保我们客户网站能够正常运行。

在其核心,ButterCMS提供:

  • 一个内容编辑者的仪表盘
  • 一个用于获取内容的JSON API
  • 将ButterCMS集成到本地代码中的SDK

ButterCMS 技术栈

ButterCMS是一个单一的Django应用,其负责营销网站、编辑工具、API和为客户提供支持的后台工具。Django应用在配备一个Postgres数据库的Heroku上运行。

我们还利用以下的第三方服务:

  • Filestack 为客户提供图像编辑;
  • Fastly 用于外部 API缓存和交付;
  • Cloudfront 作为客户资产的CDN;
  • 用于DNS的EasyDNS。

停机时间是致命的

客户的web站点在发送request/response过程中,会产生对ButterCMS的API调用来获取页面内容。对ButterCMS的API请求失败,他们的页面可能不会呈现。如果API宕机了,我们客户的网站就会和我们一起停机。

这是我们在早期学到的严重一课。不可靠的服务器托管导致频繁的间歇性中断和性能下降,这会使客户很失望。一次搞砸的DNS迁移导致了几个小时的API宕机,而这又使几十个客户的网站停机几乎半日,并让大量的客户对是否还能依赖我们产生疑问(少数的客户已经离我们而去)。

在这次事故以后,我们明白,确保客户近乎100%的运行率是个现实问题。未来某个重大的中断可能会让我们失去客户并使我们的事业陷入危机。

提交一个全球的,快速的,有弹性的API

完全避免故障是不可能的-只能尽最大努力减少发生的机会。 例如,通过运行自己的物理服务器来“控制自己的命运”,虽然可以保护你不受主机提供商停机的影响,但是要不得不处理安全性和伸缩性问题,这两者可以轻易造成停机,并且难以恢复。

对于我们的团队来说,始终保持API可用并确保它在全球范围内的高性能是至关重要的。但作为一个小公司,并不具有足够的资源来提供高可扩展性能并保持近乎100%可用的API。所以我们使用了可以满足需求的Fastly。

我们将Fastly置于API的前端,作为一个缓存层以确保所有的API请求都通过它们的CDN来提供服务。

当客户更新网站内容时,所编辑的特定内容块API键失效。无缓冲请求发送到服务器,但是由于客户网站的内容更新,相对于它们访问者的数量的并不频繁,仍然有94%的击中率。这意味着即使数据库或服务器经历了间歇性的中断,我们的API仍然可用。我们不希望这样,但理论上,服务器可以完全关闭几个小时,而客户的网站会像Fastly一样长时间保持在线。 Fastly的全球CDN提供了另一个好处。许多客户都有静态的JavaScript站点,其API请求是来自访问者的浏览器而不是他们的服务器。通过Fastly的CDN来提供API响应,这意味着客户网站的访客,无论在何处都可以获得快速的加载次数。

消除单点故障

在ButterCMS的早期,处理两个独立的DNS事件令人身心疲惫。在第一个事件中,由于DNS服务商把我们账户意外“删除”,而导致一个中断事件,该事件经过了近6个小时才完全恢复。第二个事件是一次常规的DNS编辑,引起(不同)DNS提供商发生了故障,这个问题花费了近1天时间才解决。DNS事件特别有破坏性,因为即使发现并修复了问题,还需要等待不同DNS服务器和ISP去清除他们的缓存,直到系统能正常访问(DNS服务器忽视你的TTL设置,只使用他们自己的策略)。

经验告诉我们在整个架构中注意消除任何一个单点故障。

对于DNS服务器,使用来自不同DNS提供商的不同域名服务器。DNS提供商常常允许并鼓励使用4-6台冗余域名服务器(如ns1.example.com, ns2.example.com)。这很好:如果一台宕机了,其他主机依然能够提供服务。但是,如果域名服务器来自于同一家公司,就只能祈祷他们保持100%的可靠。

对于应用服务器,则使用Heroku的监视和自动扩展工具,来确保流量性能不会从峰值上降低(如果 Fastly停机了,需要将所有的请求都直接路由到服务器)。除了通过 Fastly缓存API,也使用Memcached在应用层缓存API。这为防止数据库或者服务器中断提供了一个额外缓存。

通过在谷歌云上运行一个服务器和数据库实例作为快速失效备援,来防止极小可能出现的Heroku或者AWS(Heroku运行其上)中断。

故障难以避免

无论API是多么的可靠,也不得不面临网络不可靠的现实,故障是难以避免的。可能都遇到过连接WI-FI,或者是电话掉线的问题。总的来说,中断、路由问题和其他断续故障在统计学意义上是不常见的,但是,仍然有可能在一定的环境背景下发生。

为了消除这种固有的不可靠环境,需要帮助客户开发在失效情况下的容错应用。SDK可以提供一些特性,诸如在API请求失效时自动重试,或者为用户提供类似Redis的故障迁移缓存。

结论

在无意识中,很多人把单点故障引入到堆栈中。ButterCMS的成功,在于确保客户应用不会停机。要实现这一目标,既要尽可能多消除来自基础设施的单点故障,还要提供SDK帮助客户在应用中实现弹性和容错。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-10-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CSDN技术头条 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
分布式架构的高性能与可用性
分布式架构是一种将系统拆分为多个独立的组件或服务,并在不同的计算节点上部署这些组件或服务的架构方式。它可以提供高性能和可用性的好处。下面我将详细介绍分布式架构在高性能和可用性方面的优势。
明志德道
2023/12/27
4490
DNS审查,了解一下
任何拥有在线资产的组织机构都需要意识到发生单点故障并不是什么好事。物联网病毒"Mirai"十月份针对某个DNS提供商的僵尸网络攻击,使我们了解到,一旦像DNS这样的业务关键性服务瘫痪,对于那些依赖在线访问或服务进行日常业务活动的机构来说可能是毁灭性的。
未来守护者
2018/08/01
1.6K0
公司架构师常常提起的DNS负载均衡是个什么鬼?
当网站的访问量大了就会考虑负载均衡,这也是每一个架构师的基本功了,其基本地位就相当于相声里的说学逗唱,活好不好就看这个了 :)
二哥聊运营工具
2022/12/12
3690
公司架构师常常提起的DNS负载均衡是个什么鬼?
什么是高可用性?
随着对旨在为关键系统提供服务的可靠和高性能基础架构的需求不断增加,术语可扩展性和高可用性不再受欢迎。虽然处理增加的系统负载是一个常见问题,但减少停机时间和消除单点故障同样重要。高可用性是一种大规模的基础设施设计,可以满足后面的考虑因素。
挺问中原
2018/10/25
7K1
【Linux网络#15】:DNS 协议 & ICMP 协议
TCP/IP 中使用 IP 地址和端口号来确定网络上的一台主机的一个程序,但是 IP 地址不方便记忆,于是人们发明了一种叫主机名的东西, 是一个字符串, 并且使用 hosts 文件来描述主机 名和 IP 地址的关系.
IsLand1314
2025/03/04
3830
【Linux网络#15】:DNS 协议 & ICMP 协议
公司架构师常常提起的DNS负载均衡是个什么鬼?
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/07/04
6980
公司架构师常常提起的DNS负载均衡是个什么鬼?
流量调度:DNS、全站加速及机房负载均衡
服务流量切换并没有想象中那么简单,因为我们会碰到一个很大的问题,那就是DNS缓存。DNS是我们发起请求的第一步,如果DNS缓慢或错误解析的话,会严重影响读多写多系统的交互效果。
wayn
2024/04/28
7960
流量调度:DNS、全站加速及机房负载均衡
为了搞清楚CDN的原理,我头都秃了...
原文地址:https://juejin.cn/post/6944420222757503006
winty
2021/05/20
4.1K0
高并发与高可用实战
DNS域名解析 整个过程大体描述如下,其中前两个步骤是在本机完成的,后8个步骤涉及到真正的域名解析服务器:1、浏览器会检查缓存中有没有这个域名对应的解析过的IP地址,如果缓存中有,这个解析过程就结束。浏览器缓存域名也是有限制的,不仅浏览器缓存大小有限制,而且缓存的时间也有限制,通常情况下为几分钟到几小时不等,域名被缓存的时间限制可以通过TTL属性来设置。这个缓存时间太长和太短都不太好,如果时间太长,一旦域名被解析到的IP有变化,会导致被客户端缓存的域名无法解析到变化后的IP地址,以致该域名不能正常解析,这段时间内有一部分用户无法访问网站。如果设置时间太短,会导致用户每次访问网站都要重新解析一次域名。
老马的编程之旅
2022/06/22
1.7K0
CDN的原理及用途详解
CDN(Content Delivery Network,内容分发网络)是一种利用分布式节点技术,在全球部署服务器,即时地将网站、应用、视频、音频等静态或动态资源内容分发到用户所在的最近节点,以提高用户访问这些内容的速度和稳定性,降低网络拥塞和延迟,同时也能够减轻源站的负载压力,提升网站或应用的可用性和安全性。
炒香菇的书呆子
2024/10/07
4450
搞懂这 9 个步骤,DNS 访问原理就明明白白了
前两天遇到一个面试的小伙伴,他说面试官和他聊得很投机,无意中谈到了DNS请求的过程。他一时语塞随便应付了两句,虽然对方没有追问的意思,但最后面试结果也并不理想。本着边面试边学习的态度,我们来看看DNS请求的过程中涉及到的定义和原理。
杰哥的IT之旅
2020/06/18
1.9K0
搞懂这 9 个步骤,DNS 访问原理就明明白白了
day8 | 如何将我的服务开放给用户 | 第三届字节跳动青训营笔记
这是我参与「第三届青训营 -后端场」笔记创作活动的的第8篇笔记。计算机网络真的是太庞大了
千羽
2022/11/11
3K0
day8 | 如何将我的服务开放给用户 | 第三届字节跳动青训营笔记
dns解析
dns也可以认为是域名的解析,因为在实际的网络请求中,是通过ip来进行互访请求的,但是ip是四个字节的数字组成,不容易记住,能够更加方便的访问互联网,然后域名系统应运而生,但是域名并不是免费的,需要到域名注册商处进行申请注册,人们都习惯记忆域名,但机器间互相只认识 IP 地址,域名与 IP 地址之间是一一对应的,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,解析过程是自动进行的。域名解析(DNS)是将域名(例如 cloud.tencent.com)转换成为机器可读的 IP 地址(例如10.10.10.10)的服务。
云售后焦俊成
2020/08/26
46.8K0
dns解析
「一道面试题」输入URL到渲染全面梳理上-网络通信篇
从输入 URL 到页面渲染发生了什么?比如在浏览器输入了 www.qq.com 后浏览器是怎么把最终的页面呈现,这是一个非常经典的面试题,不管是大公司还是小公司甚至前端或后端的面试中命中率都极高,因为涉及到的知识点和可挖掘的地方比较多,而且这中间几乎每一步都是可以优化的
isboyjc
2022/03/28
6920
「一道面试题」输入URL到渲染全面梳理上-网络通信篇
关于DNS解析试题分析和查询方式讲解
链接:https://www.nowcoder.com/questionTerminal/236f48f9fe404600904563e0d852396f
砖业洋__
2023/05/06
2K0
关于DNS解析试题分析和查询方式讲解
关于高可用系统的一些思考
最近有粉丝反馈说面试阿里和京东都遇到了同一个题,问题都是都是在第二面,考察候选人架构设计能力:设计一个高可用系统。
王炸
2019/07/30
6390
关于高可用系统的一些思考
深入理解 Http 请求、DNS 劫持与解析
前段时间在处理 iOS 端的 HTTPDNS 相关 SDK,在接入和测试环节发现大家对 HTTP 的整体请求流程包括 HTTP 劫持原理以及 HTTPDNS 的工作原理并不是太清楚,所以写下这边文章帮助大家深入 web 请求过程:如何发起请求,HTTP 协议解析,DNS 域名解析。
molier
2022/11/02
2.7K0
深入理解 Http 请求、DNS 劫持与解析
域名解析详解
我们知道网络通讯基本上是基于TCP/IP的,而TCP/IP以IP地址为基础,而域名仅仅是为了方便人类的记忆而设计的名称,计算机在网络中进行通讯时不能识别域名,只能识别IP地址,所以计算机在进行网络通讯之前需要先完成域名到IP的转化,我们称之为域名解析。
9527
2018/11/20
59.9K1
域名解析详解
使用tko-subs通过已失效的DNS记录检测和接管子域名
tko-subs是一款功能强大的子域名检测工具,该工具可以利用已失效的DNS记录检测和接管目标子域名。该工具具备以下三个功能。
FB客服
2021/10/21
1.5K0
超清晰的 DNS 原理入门指南
来源:阮一峰的网络日志 作者:阮一峰 链接:http://www.ruanyifeng.com/blog/2016/06/dns.html DNS 是互联网核心协议之一。不管是上网浏览,还是编程开发,
小小科
2018/05/04
1.7K0
超清晰的 DNS 原理入门指南
相关推荐
分布式架构的高性能与可用性
更多 >
交个朋友
加入HAI高性能应用服务器交流群
探索HAI应用新境界 共享实践心得
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档