热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Twilio的云架构原则

正当很多知名网站都在抱怨自己受到了AWS问题的影响时,Twilio的API和服务并未受到影响,尽管他们也严重依赖于AWS来培育并扩展自己的云电话平台(cloudtelephonyplatform

正当很多知名网站都在抱怨自己受到了AWS问题的影响时, Twilio的API和服务并未受到影响,尽管他们也严重依赖于AWS来培育并扩展自己的云电话平台(cloud telephony platform)。对于Evan Cooke(Twilio的合伙创始人与CTO)而言,这不仅展现了云服务在开启当代互联网生态环境方面的惊人成功,还展现了坚实可靠的分布式架构设计 在构建云服务时的重要性。

当我们在Amazon Web Services上培育并扩展Twilio的时候,我们遵循了一系列的架构设计原则,以便能将底层基础设施中偶发但不可避免的问题所带来的影响降到最小。
  • 故障单元是单台主机
构建由单台主机构成的简单服务,而非多依赖的主机构成的服务,可以创建复制服务实例来抵御主机故障。
  • 短时间超时与快速重试
发生故障时,让软件快速识别失败并重试请求。每个服务都运行多个冗余拷贝,短时间内超时,然后绕过失败或不可访问的服务进行重试。
  • 幂等的服务接口
如果所依赖服务的API是幂等的,那就意味着可以安全地对失败请求进行重试。
  • 小的无状态服务
将业务逻辑分散到小的无状态服务中,这些服务可以被放到简单的同构服务池中。
  • 宽松的一致性要求
在不需要严格一致性时,为要读取的数据做复制和冗余。

  根据故障的详细说明,Evan还解释了为什么Twilio只针对非关键和非延时敏感的任务使用EBS,因为这不需要符合“故障单元是单台主机”原则。如果EBS遇到了问题,所有依赖它的服务都会发生故障。他们转而关注于利于EC2主机上的临时磁盘来做持久化。如果临时磁盘坏了,那么故障的范围仅仅是那台主机。Evan将发表一篇后续文章来描述他们是如何跨过多个临时磁盘来做RAID0以提升I/O性能的。

  这与SmugMug采用的原则和方法是一致的,正如Don McAskill所说的那样,SmugMug也选择不用EBS。

  Mike Kavis(M-Dot Network的CTO)认为Amazon的IaaS已经变成了PaaS:

Amazon拥有为数众多的服务,那些费时费力的任务都可以被简化并自动化进一次简单的调用中,开发者仅需一次调用就可以了。 Cloudwatch(监控与自动扩展)和 RDS(数据库管理)就是其中的两个。当你开始使用这些服务后,你就已经置身于一个PaaS场景中了,你使用了某个厂商所独有服务。

  对他而言,此类依赖和可能发生的故障都应该被纳入架构和业务模型之中,因为要构建一个云提供商未知的架构,如果不自己重新构建这些服务,几乎就是不现实的。

  很明显,就算在云端,灾难恢复计划也是必须的,架构无论现在还是以后,都会是构建基于云的解决方案的必备内容,这并不是什么新鲜观点。Twilio的原则是否足够?从中你是如何理解云架构的演进的?更多的冗余?自己开发服务?更多的架构原则?这将如何转变为基于PaaS的解决方案?

  查看英文原文:Twilio's Cloud Architecture Principles


推荐阅读
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • 本文将带你快速了解 SpringMVC 框架的基本使用方法,通过实现一个简单的 Controller 并在浏览器中访问,展示 SpringMVC 的强大与简便。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • Python错误重试让多少开发者头疼?高效解决方案出炉
    ### 优化后的摘要在处理 Python 开发中的错误重试问题时,许多开发者常常感到困扰。为了应对这一挑战,`tenacity` 库提供了一种高效的解决方案。首先,通过 `pip install tenacity` 安装该库。使用时,可以通过简单的规则配置重试策略。例如,可以设置多个重试条件,使用 `|`(或)和 `&`(与)操作符组合不同的参数,从而实现灵活的错误重试机制。此外,`tenacity` 还支持自定义等待时间、重试次数和异常处理,为开发者提供了强大的工具来提高代码的健壮性和可靠性。 ... [详细]
  • 本文详细探讨了几种常用的Java后端开发框架组合及其具体应用场景。通过对比分析Spring Boot、MyBatis、Hibernate等框架的特点和优势,结合实际项目需求,为开发者提供了选择合适框架组合的参考依据。同时,文章还介绍了这些框架在微服务架构中的应用,帮助读者更好地理解和运用这些技术。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 深入解析 Lifecycle 的实现原理
    本文将详细介绍 Android Jetpack 中 Lifecycle 组件的实现原理,帮助开发者更好地理解和使用 Lifecycle,避免常见的内存泄漏问题。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • MySQL的查询执行流程涉及多个关键组件,包括连接器、查询缓存、分析器和优化器。在服务层,连接器负责建立与客户端的连接,查询缓存用于存储和检索常用查询结果,以提高性能。分析器则解析SQL语句,生成语法树,而优化器负责选择最优的查询执行计划。这一流程确保了MySQL能够高效地处理各种复杂的查询请求。 ... [详细]
  • 深入解析Android GPS机制:第五部分 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
author-avatar
mobiledu2502890213
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有