Twitter工程团队近期提供了Twitter核心技术的演进和扩展的详细资料,这些核心技术支撑了Twitter自营数据中心的系统架构,用于提供社会媒体服务。他们分享的关键经验包括:超越原始规格和需求进行系统架构,并在流量趋向设计容量上限时迅速做出大刀阔斧的改进;不存在所谓的“临时更改或变通方案”,因为变通方案会成为技术债务;聚焦于为任务提供适合的工具,但这意味合理领会所有可能的用例;对内部的和社区最佳实践的文档工作已成为一种“力量倍增器”。

根据近期Twitter工程博客上的一篇博文,Twitter作为社会网络和在线新闻服务创建于2006年,在那个时期,“统治数据中心”的是企业级实体厂商所提供的硬件。在Twitter运行的头十年中,快速增长的用户群已对硬件层提出了很多工程上的挑战。虽然Twitter在公共云上“运行良好”,但是他们已经开始重点投资自身的私营架构。至2010年,Twitter已从第三方的主机托管服务迁移到自身私营的数据中心架构,该数据中心架构在随后六年中“持续地设计和更新……有效地利用了技术和硬件的最新开放标准”。

至2010底,Twitter最终完成了首个内部网络架构,从设计上解决了在第三方主机托管架构中所遇到的扩展性和服务问题。最初,深度缓冲(Deep Buffer)机柜顶部(ToR,Top of Rack)交换机和电信级核心网络交换机的使用,使Twitter支持了2014年世界杯这样的全球事件所产生的前所未有的每秒交易(TPS,Transaction Per Second)量。在随后数年中,Twitter架构团队在五大洲部署了网络服务提供点 (PoPs,point-of-presence)。2015年,Twitter从传统的层次数据中心网络拓扑结构迁移到使用边界网关协议(BGP,Border Gateway Protocol)路由的Clos网络。Clos方法的显著优点包括:更小的设备单点故障的“波及范围”、更好的水平带宽扩展能力,以及由更低的CPU开销导致的更高路由性能。

在Twitter网络架构扩展的过程中,Twitter的工程团队汲取到一些重要的经验教训:

  • 超越原始规格和需求进行系统架构,并在流量趋向设计容量上限时迅速做出大刀阔斧的改进。
  • 根据数据和指标做出正确的技术设计决策,并确保这些指标可被网络操作人员理解。这对于托管主机和云环境是尤为重要的。
  • 并不存在所谓的“临时更改或变通方案”的东西。在很多情况下,变通方案会成为技术债务。

在Twitter架构中,45%的规模用于存储和消息。架构团队为内部用户提供了多种服务,包括:Hadoop集群、Twitter的Manhattan (Apache Cassandra-esque)分布式数据库集群、FlockDB图存储集群(使用了Gizzard和共享MySQL)、Blobstore集群、Twemcache及“Nighthawk”共享Redis缓存集群、DistributedLog消息集群(用于Heron的处理)以及关系存储(MySQL、PostgreSQL和Vertica)。在2010年曾使用Cassandra作为度量数据存储的解决方案,但是在2015年4月启用Manhattan后,就禁用了Cassandra。

几乎全部的Twitter主缓存已从“裸机”迁移到大规模部署的开源集群管理系统Apache Mesos上(Twitter也是Mesos代码库的主要贡献者之一)。推文的时间线缓存Haplo是尚未部署到Mesos的最重要组件。Haplo使用定制版的Redis实现。对于该缓存,最严峻的挑战在于可扩展性和性能,因为Twitter运行上百个集群,合计包速率可达3.2亿包/每秒,每秒为客户提供120GB的内容。为达到高吞吐量和低延迟的服务水平目标(SLO,Service Level Objective),工程师要持续测量系统的性能,寻找优化效率的方法。例如,Twitter工程师创建了一个测试缓存性能的开源工具rpc-perf,使用它可以更好地了解各种负载场景下缓存系统的运行情况。

存储和缓存实现中的主要经验教训包括:

  • 为更好地处理特定的流量模式,Twitter的Manhattan分布式数据库中采用了额外的存储引擎(LSM,B+树等)。通过发送背压信号并允许查询过滤,防止了对存储层的滥用。
  • 聚焦于为任务提供适合的工具,这意味合理领会所有可能的用例。“适合各种场景”的解决方案是很少起作用的。对个别极端案例的处理采用临时解决方案即可,无需过多考虑如何能省时省力。
  • 迁移到Mesos对于Twitter是一个“巨大的运营成就”,这允许了对架构配置的编纂整理,并使得规划部署成为可能。规划部署用于维持缓存命中率,并避免导致持久化存储层故障的问题。
  • 根据用户、推文、时间线等对缓存做逻辑分区,通常每个缓存集群都根据特定的用途做了优化。

Twitter使用Puppet实现所有的系统配置管理和kickstart后的软件包安装,Puppet的代码有500多个模块,1000多个角色,每个月都有100多位提交者。Puppet有三个被其称为环境的分支,分别允许实现受控测试、金丝雀测试(Canarying)以及最终推动变更到生产环节。对于不断增长中的Pupper代码库,到目前为止影响最大的更改是代码查错(Code Linting)、代码模式检查钩(Style Check Hook)、最佳实践的文档化以及正常办公时间保持:

  • 考虑到整个公司内有100多名Puppet提交者,对内部和社区最佳实践的文档工作已经成为“力量倍增器”。
  • 归一的参考文档改进了代码交付的质量和速度。
  • 当任务单和交流通道不足以满足交流的需要,或是不能表述要完成的工作整体情况时,需要保持正常的办公时间,这样员工可以提请援助(有时需要邀请),可进行一对一的交流。

更多扩展Twitter平台架构的相关信息,参见Twitter工程博客帖子“Twitter后台架构:扩展”。前期补充的博客帖子“Twitter后台架构:效率和优化”内容聚焦于Twitter私有平台即服务(PaaS)的演进。

Twitter的支撑架构:扩展网络与存储并提供服务——架构原则:一次性将事情做对,NFL原则 LSM+B+存储替代cassandra的更多相关文章

  1. RxHttp - 轻量级、可扩展、易使用、完美兼容MVVM、MVC架构的网络封装类库

    前言 RxHttp是基于RxJava2+Retrofit 2.9.0+OkHttp 4.9.0实现的轻量级,完美兼容MVVM架构的网络请求封装类库,小巧精致,简单易用,轻轻松松搞定网络请求. GitH ...

  2. ZStack深度试用:部署、架构与网络及其与OpenStack的对比

    摘要:本文是开源IaaS软件ZStack的深度试用报告,分别从部署.架构和网络三个层面分享作者的试用体验,并与OpenStack进行简单的对比,文章最后也对ZStack的改进方向提出了自己的思考.(转 ...

  3. 数据中心网络架构的问题与演进 — CLOS 网络与 Fat-Tree、Spine-Leaf 架构

    目录 文章目录 目录 前文列表 CLOS Networking Switch Fabric 胖树(Fat-Tree)型网络架构 Fat-Tree 拓扑示例 Fat-Tree 的缺陷 叶脊(Spine- ...

  4. Linux内核入门到放弃-网络-《深入Linux内核架构》笔记

    网络命名空间 struct net { atomic_t count; /* To decided when the network * namespace should be freed. */ a ...

  5. Web应用扩展系列(1):架构篇(转)

    原文:Web应用扩展系列(1):架构篇 在这篇文章中,我将尽量涵盖Web应用扩展或性能调优时可能会遇到的一些架构问题. 首先,让我们来统一一些名词或项目的概念,下文中我将列举在扩展Web应用时可能会遇 ...

  6. Python网络编程中的服务器架构(负载均衡、单线程、多线程和同步、异步等)

    这篇文章主要介绍服务器架构. 网络服务需要面对两个挑战. 第一个问题是核心挑战,要编写出能够正确处理请求并构造合适响应的代码. 第二个挑战是如何将网络代码部署到随系统自动启动的Windows服务或者是 ...

  7. 网络编程介绍,C/S 架构,网络通讯协议,osi七层

    网络编程: 什么是网络编程: 网络通常指的是计算机中的互联网,是由多台计算机通过网线或其他媒介相互链接组成的 编写基于网络的应用程序的过程序称之为网络编程 为什么要学习网络编程: 我们已经知道计算机, ...

  8. Longhorn 云原生分布式块存储解决方案设计架构和概念

    内容来源于官方 Longhorn 1.1.2 英文技术手册. 系列 Longhorn 是什么? 目录 1. 设计 1.1. Longhorn Manager 和 Longhorn Engine 1.2 ...

  9. 高扩展的基于NIO的服务器架构(二)

    接上文高扩展的基于NIO的服务器架构 Reactor模式 如下图所示,将不同事件的检测分离开,当一种事件发生时一个事件处理器EventHandler将通知与该事件处理相对应的专用工作线程 采用这种架构 ...

随机推荐

  1. K8S知识点总结

    一.K8S介绍: Kubernetes(k8s)是Google开源的容器集群管理系统.在Docker技术的基础上,为容器化的应用提供部署运行.资源调度.服务发现和动态伸缩等一系列完整功能,提高了大规模 ...

  2. DP,数论————洛谷P4317 花神的数论题(求1~n二进制中1的个数和)

    玄学代码(是洛谷题解里的一位dalao小粉兔写的) //数位DP(二进制)计算出f[i]为恰好有i个的方案数. //答案为∏(i^f[i]),快速幂解决. #include<bits/stdc+ ...

  3. fedora使用

    1.更改ip 添加ip和掩码 sudo ifconfig p4p1 172.31.8.7/24 up 添加网关 sudo route add default gw 172.31.8.1   2.远程登 ...

  4. Nginx整合Tomcat

    现在先不考虑集群的配置问题,只实现Nginx实现一台tomact的代理 1.我们需要一个web项目,这里我把先准备好的web.war文件部署到Tomact服务器上 mvn clean install ...

  5. LG P2822 NOIP2016D2T1 组合数问题

    一句话题意 给定n.m和k,求对于所有的i(0<=i<=n)和j(0<=j<=min(i,m)),有多少对(i,j)使\(C_i^j\)使k的倍数 数据范围 部分分.满分做法和 ...

  6. Good Triple CodeForces - 1169D (等差子序列)

    大意: 给定01字符串, 求有多少个区间$[l,r]$, 使得存在正整数$x,k$满足$1\le x,k\le n,l\le x<x+2k\le r,s_x=s_{x+k}=s_{x+2k}$. ...

  7. Dreamoon and Strings CodeForces - 477C (字符串dp)

    大意: 给定字符串$s$, $p$, 对于$0\le x\le |s|$, 求$s$删除$x$个字符后, $p$在$s$中的最大出现次数. 显然答案是先递增后递减的, 那么问题就转化求最大出现次数为$ ...

  8. 修改hosts文件 解决coursera可以登录但无法播放视频的问题

    我们经常为了学习或者了解一些领域的知识为访问国外的网站,但是在国内,很多优秀的网站都被封锁了.在GFW(墙)的几种封锁方式中,有一种就是DNS污染,GFW会对域名解析过程进行干扰,使得某些被干扰的域名 ...

  9. Python(六) —— 网络请求

    接口调用 接口调用有几个模块可以用:urllib 和 requests ,urllib 是内置的模块,极其不好用,强烈推荐用 requests 模块 get 请求 1.普通的 get 请求 impor ...

  10. Parallel的使用

    Action<int, int> ReportProcess //返回数据,刷新进度 Exception exception = null; object objLock = new ob ...