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

buttercms-js:适用于ButterCMS的NodeJS API客户端(https:buttercms.com) ButterCMS JS客户端 文献资料 有关示例的完整列表,请查看。 安装 需要node.js版本4或更高版本。 npm install buttercms --save 黄油也可以直接包含在HTML中: < script src =" https://cdnjs.buttercms.com/buttercms-1.1.4.min.js " > </ script > 总览 每个资源都可以通过您的butter实例访问: var butter = require ( 'buttercms' ) ( 'api_token_567abe' ) ; 使用ES6: import Butter from 'buttercms' ; const butter = Butter ( 'api_token_567abe' ) ; 使用TypeScript: import Butter = require ( 'buttercms' ) ; const butter = Butter ( 'api_token_567abe' ) ; 使用CDN: < script > var bu 立即下载

原文:ButterCMS Architecture: A Mission-Critical API Serving Millions Of Requests Per Month
作者:Jake Lumetta
译者:夜风轻扬

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

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

在其核心,ButterCMS提供:

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

ButterCMS 技术栈

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

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

停机时间是致命的

客户的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帮助客户在应用中实现弹性和容错。

buttercms-python:ButterCMS的Python API客户端(https:buttercms.com) buttercms-python 适用于ButterCMS API的Python库。 文献资料 有关示例的完整列表,请查看。 跳到: 安装 使用Python的软件包管理器从PyPi安装。 pip install buttercms-python 用法 ButterCMS API入门非常简单。 使用您的授权令牌创建ButterCMS客户端。 from butter_cms import ButterCMS auth_token = "XXXXXXXXXXXXXXXXXXX" client = ButterCMS ( auth_token ) 所有方法都返回字典。 可以使用键和索引浏览数据 立即下载

相关推荐

YOLOv8 轴承缺陷检测 使用YOLOv8进行训练、评估和可视化预测结果 包含1440张图片的轴承缺陷检测数据集 YOLO格式或XML格式

本文介绍了一个基于YOLOv8的轴承缺陷检测项目。数据集包含1440张图片,标注了4类缺陷(凹槽、凹陷、卡伤、划痕),按8:1:1比例划分为训练集(1152张)、验证集(144张)和测试集(144张)。标注文件支持YOLO格式和XML格式,可直接用于模型训练。项目实现了数据准备、模型训练、评估及可视化预测结果的全流程,使用YOLOv8n预训练模型进行50个epoch的训练,并提供了数据格式转换(XML转YOLO)的代码示例。最终模型可自动检测轴承表面缺陷,并保存预测结果。

OICQQ67658008的博客 1451

推荐使用ButterCMS JS客户端:轻松集成内容管理到你的Web应用中

推荐使用ButterCMS JS客户端:轻松集成内容管理到你的Web应用中 ButterCMS JS Client是一款强大的JavaScript库,让你能够无缝地在其Node.js环境中使用ButterCMS RESTful API,为你的Web应用提供动态且灵活的内容管理功能。这款库支持ES6和TypeScript,并提供了直观的API接口,让开发者可以轻松实现内容检索、页面管理和博客引擎等功...

gitblog_00030的博客 628

QT5.14.2离线安装包保姆级教程:断网、选组件、避坑全记录

本文详细介绍了QT5.14.2离线安装包的完整流程,特别针对Windows平台开发者提供断网安装、组件选择及避坑指南。作为QT5系列中最后一个免费离线版本,5.14.2具有免注册、全组件离线安装等独特优势,是开源开发者的理想选择。文章涵盖从环境准备到安装后配置的全方位指导,帮助开发者高效完成安装并避免常见问题。

weixin_30924087的博客 579

2024年比较活跃的免费CMS

是一个强大的发布平台,受到世界领先的作家、创作者和专业内容团队的信赖。Directus 还有一个直观的管理应用程序,供非技术用户管理内容。和博客引擎,用于快速网站开发,可满足开发人员和营销人员的需求。称自己为“一个强大且灵活的网站构建平台,适用于数字机构、是一个开源可编程后端,可让我们在几分钟内创建高度定制的。构建从简单、编辑和企业网站到电子商务商店的所有内容。网址: kaolalianchuang.com。网址: fanyonglianmeng.com。,使我们能够创建丰富的数字体验。

chuangan7的博客 1896

独家开源|RK3588 平台 YOLOv5 Android 源码级解析:NPU 量化、多线程与目标跟踪实战

本文将带你完成一个完整的AI视觉项目:在搭载RK3588芯片的Android开发板上运行实时目标检测与跟踪应用。实战目标:成功运行官方YOLOV5摄像头实时检测案例技术深度:深入理解RKNN开发框架和源码实现核心技能:掌握NPU推理、多线程并发、目标跟踪等关键技术。

m0_71589036的博客 194

56、Cortex - M33处理器浮点单元(FPU)的使用与优化

本文详细介绍了Cortex-M33处理器浮点单元(FPU)的使用与优化方法,涵盖单双精度浮点计算的选择、编译器命令行配置、ABI模式对比、特殊FPU模式设置(如Flush-to-Zero、Default NaN)、浮点异常处理机制以及FPU电源管理策略。结合代码示例和流程图,提供了在不同应用场景下的最佳实践建议,并总结了常见问题及解决方案,帮助开发者提升嵌入式系统中浮点运算的性能、精度与能效。

bread的博客 155

「内容管理系统」34个无头CMS应该在你的技术雷达上

到2022年,我们的家庭和办公室将拥有超过4000万台物联网设备。这包括所有的东西,从我们厨房台面上的智能扬声器,到我们手腕上的人工智能设备,再到当地商场里的屏幕兜售亭。尼尔·帕特尔的创始人只有最近指出,互联网是道路上成为“存在”,这意味着,至少在那些生活在发达城市,互联网,和它的所有内容,将不断在社会和家庭生活中发挥作用通过多种设备,屏幕,扬声器,接触点。对于那些希望获...

全网:架构师研究会 913

深度学习驱动的股票波动率预测:LSTM和Transformer模型的实战解析

股票市场的波动率一直是金融领域关注的焦点之一。波动率预测对于风险管理、期权定价和资产配置至关重要。深度学习模型,如长短时记忆网络(LSTM)和Transformer,已经在时间序列数据分析领域取得了显著的成就。本博客将向您展示如何使用这两种深度学习模型来进行股票波动率预测,提供清晰的思路和相应的Python代码,以帮助您理解和应用这一重要任务。

斌擎科技 974

10个优质的基于Node.js的CMS 内容管理平台

冬尽今宵长❝hi, 大家好, 我是徐小夕,之前和大家分享了很多「低代码可视化」和「前端工程化」相关的话题, 今天继续和大家聊聊「CMS」系统.❞内容管理系统 (「CMS」) 使没有强大技术背景的人也能够轻松发布内容。我们可以使用 「CMS」 来管理我们的内容和交付。市面上有不同类型的 「CMS」,它们执行不同的目的并具有不同的功能。在本文中,我将和大家分享一下 「2022」 年使用的一些最佳 「N...

趣谈前端 3654

华为OD机考双机位C卷 - 构成正方形的数量 (Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 成正方形的数量 (OD上机考试双机位C卷)。提供在线OJ刷题。Java、C++、Python、GO语言、C语言、JavaScript题解,并提供完整思路讲解。

算法大师! 5939

FPGA入门200例(17):如何阅读RTL原理图(Schematic)?将Verilog代码与门级电路对应

本文针对FPGA开发新手常见误区,重点讲解了RTL原理图的重要性和阅读方法。文章指出,仅通过仿真验证代码会导致板级测试异常,而RTL原理图能直观呈现Verilog代码对应的硬件结构(门电路、寄存器、多路选择器等)。通过"识别基础元件→跟踪信号路径→验证逻辑关系"的三步法,新手可以建立代码与硬件的映射思维,排查冗余逻辑、意外锁存器等错误。文章还结合Vivado/Quartus工具操作指南和典型代码案例,帮助读者掌握从代码到硬件实现的转换过程,避免混淆RTL与门级原理图、忽略信号位宽等常见误

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 205

FaceFusion与ButterCMS集成:轻量级网站的内容增强

通过将开源AI换脸工具FaceFusion与轻量级Headless CMS ButterCMS结合,实现静态网站上的动态视觉内容生成。系统解耦内容管理与AI处理,借助API与异步任务协作,让营销页等轻量应用轻松集成年龄模拟、人脸替换等智能功能,兼顾性能、成本与扩展性。

weixin_42593701的博客 796

C/C++小宇宙代码(完整代码)

C语言实现小宇宙的完整代码。

AIGC 2526

python cms api_buttercms-python-API首个博客和CMS平台为开发者打造-Adam Yala Documentation Jump to: Installation Us...

作者:Adam Yala### 作者邮箱:adam@adamyala.com### 首页:https://github.com/buttercms/buttercms-python### 文档:None### 下载链接 https://github.com/buttercms/buttercms-python/tarball/0.1# buttercms-pythonPython Library ...

weixin_42131367的博客 201

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

2022 年10个优质的 Node.js CMS 平台分享

冬尽今宵长❝hi, 大家好, 我是徐小夕,之前和大家分享了很多「低代码可视化」和「前端工程化」相关的话题, 今天继续和大家聊聊「CMS」系统.❞内容管理系统 (「CMS」) 使没有强大技术...

趣谈前端 1757

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

最热门的3个基于Java的Blockchain库

原文:The Top 3 Blockchain Libraries for Java Devs 作者: Boyko Dimitrov 译者:Teixeira10 【译者注】在本文中,作者介绍了三个使用区块链的Java项目,以及每个项目适用的场合,供开发者根据自己的需求进行选择。以下为译文:大家应该都听说过比特币、以太币或其他加密货币,这些名字在新闻中经常出现,但是作为Java开发人员,你

优快云研发技术 1万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

一次分布式架构cms系统页面静态化模块开发经历

项目背景公司开发新的项目,选择了分布式系统架构,同时项目中有大量图文展示的需求,考虑到开发效率和性能问题,需要集成cms的功能,程序实现后台录入数据静态化。技术架构java开发、jdk1.8,项目整体的技术架构大致是这样的: 前端采用的bootstrap、extJs,权限采用shiro框架,搜索采用solr或者lucene(这个暂时没有实现)。过往问题在这个项目之前,公司有另一套cms系统,做为公

懵懵懂懂 9452

如何调整团队对微服务的统一认识

原文:Aligning Your Team Around Microservices When There’s No Precise Definition 作者:Roger Jin 翻译:lloog 译者注:作者介绍微服务定义不明确,团队要统一对微服务的认识。这是Roger Jin写一篇文章,他是ButterCMS的软件架构师,也是初创企业微服务的作者之一。对于微服务不明确的定义

优快云研发技术 1610

帝国cms简介标签_无头CMS简介

无头CMS是与前端分离的内容管理系统(CMS)。 换句话说,它是一个CMS,仅使用RESTful或GraphQL通过API提供内容。 术语“无头”来自从提供内容的“主体”(后端或CMS)中删除“头”(前端)的概念。 如果您熟悉WordPress或其他传统的整体式CMS(例如Drupal或Joomla) ,那么本指南对您来说将很容易,因为我们通常使用其内置函数和模板功能通过其模板系统来创建前...

cune1359的博客 1122

cms系统总结

1. 项目简介及技术栈介绍 cms是一种为内容的创作、编辑、发布等量身定制的内容管理系统。 他的优势在于利用标签和后台管理能够使得前端的网页更好的、有条理的搭建起来。 涉及技术: 架构体系:分布式多模块 后端开发:SpringBoot 权限管理:Spring Security 单点登录:JWT 数据库:MySQ...

qq_54494937的博客 1226

php开源cmsapi,迅睿CMS Swoole接入

Swoole 使 PHP 开发人员可以编写高性能高并发的 TCP、UDP、Unix Socket、HTTP、 WebSocket 等服务,让 PHP 不再局限于 Web 领域。本教程以WebSocket为例。一、安装Swoole4宝塔面板为例,在php设置中直接可以安装 二、测试程序脚本1、在web目录中新建文件/api/sms.php (注意文件名大小写格式)/***sms服务端入口文件*/d...

weixin_39953629的博客 444

Swagger

@Api(value=“cms页面管理接口”,description = “cms页面管理接口,提供页面的增、删、改、查”) public interface CmsPageControllerApi { @ApiOperation(“分页查询页面列表”) @ApiImplicitParams({ @ApiImplicitParam(name=“page”,value = “页 码”,requ...

uciiiii的博客 191

苹果CMS资源站采集API接口参数

恐怖片</type><pic>http://1img.joykk.com/Uploads/2009/11/30/20091130205750222.JPG</pic><lang>英语</lang><area>欧美</area><year>2012</year><state>0</state><note><![CDATA[流浪地球]]></name><type>恐怖片qvod

m0_65153447的博客 6400

[学习笔记]超越超级大循环与原生RTOS:事件驱动架构如何改变嵌入式固件的可扩展性

RTC:事件处理器一旦开始,全部状态迁移、进出动作、输出事件必须全部执行完毕才返回;同一个组件,当前处理没结束,不会开始下一条事件。这不是架构给状态机额外施加的限制,这是UML状态图等全部状态机形式化本身固有的语义要求。如果迁移中途可以被打断,状态机会停留在未定义的中间状态。RTC保证两次事件之间,状态机永远处于明确定义的合法状态,便于分析与测试。

MiKiJT的博客 240
上一篇: MySQL vs. MariaDB:默认配置对比
下一篇: 最热门的3个基于Java的Blockchain库
csdn研发技术
博客等级 码龄9年 1381粉丝 90原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值