说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

【问底】Yao Yu:谈Twitter的百TB级Redis缓存实践

HTML文档下载 WORD文档下载 PDF文档下载
在Twitter工作的数年时间,Yao见证了缓存服务的扩展之路——从1个项目到上百项目的使用。为了支撑如此庞大的缓存体系,Twitter使用了成千上万台服务器,多个集群,以及过百TB内存。

【编者按】文章内容是HighScalability创始人Todd Hoff基于Twitter工程师Yao Yu “Scaling Redis at Twitter”演讲的总结。在演讲中,Yao从高等级概括了Twitter为什么会选择Redis,及如此规模缓存服务打造的挑战和途径。

以下为译文:

自2010年,Yao Yu已经效力于Twitter的缓存团队。而本文主要基于她近日发表的“Scaling Redis at Twitter”演讲,主要谈Twitter的Redis扩展,同时也不局限于Redis。从演讲中不难发现,Twitter在缓存服务打造上积累了相当丰富的经验,就如你所想,Twitter使用了大量的缓存。

Timeline服务(一个数据中心)Hybrid List使用情况:

  • 分配40TB左右的内存堆栈
  • 3000万QPS(query per second)
  • 超过6000个实例

BTtree(一个数据中心)使用状态:

  • 分配65TB的内存堆栈
  • 900万QPS
  • 超过4000个实例

下文将会带你详细的学习BTree和Hybrid。

几个值得关注的点:

  • Redis的表现非常不错,因为它将大量服务器中未使用的资源整合成有价值的服务。
  • Twitter通过两个专为其业务设计的新数据模型来定制化Redis,因此他们获得了理想的性能,但是也因此受限于旧的代码,无法迅速添加新特性。因此我(Todd)一直在想,为什么他们会使用Redis来做这样的事情。只是想基于自己数据结构建立一个Timeline服务?Redis真的适合干这样的事情?
  • 在网络饱和之前,分析大量节点上的日志数据,使用本地的CPU。
  • 如果想获得非常高的性能,那么必须做快慢分离,数据永远都是快的代言,而命令和控制则代表了慢。
  • 当下,Twitter正在使用Mesos作为作业调度程序以迁移到一个容器环境,这个做法很新颖,因此如何实现是一大看点。当然这个途径也存在弊端,比如在复杂的运行时环境指定硬件资源的使用限制。
  • 中央集群管理器来监控集群。
  • 缓慢的JVM,快速的C,因此他们使用C/C++重写缓存代理。

重点关注以上技术点,下面一起来看Twitter的Redis使用之道:

为什么使用Redis?

  • 使用Redis驱动Timeline,也是Twitter系统内最重要的服务。Timeline是Tweet基于id的一个索引,Home Timeline则是所有Tweet连接起来形成的一个列表。User Timeline则由用户生成的Tweet组成,它们形成了另外一个列表。
  • 为什么使用Redis代替Memcache?主要因为网络带宽问题(Network Bandwidth Problem)和长通用前缀问题(Long Common Prefix Problem)。
  • 网络带宽问题
  1. Memcache在Timeline上的表现并没有Redis好,最大问题发生在fanout(推送)上。
  2. Twitter的读和写往往以增量方式进行,虽然每次的更新很少,但是Timeline本身的体积很大。
  3. 当一个Tweet产生时,它会被写入对应的Timeline中。对于某些数据结构来说,Tweet是组成它的一小部分数据。在读的时候,小批量Tweet被加载,而在滚轮向下滚动时,则会加载另外的一小批量。
  4. Home Timeline可能会非常大,但是用户仍然希望在同一个集合中读取,它可能会包含3000个实体。因此,在性能的优化上,避免数据库读取将非常重要。
  5. 增量读写使用了一个“读-改-写”的过程,因此对Timeline这样的大型对象进行small reads开销是非常昂贵的,通常会造成网络瓶颈。
  6. 在每秒10万+读和写的gigalink上,如果对象的平均大小超过1K,网络将成为瓶颈。
  • 长通用前缀问题(其实是两个问题)
  1. 在数据格式上使用了一个灵活的模式,每个对象都有不同的属性组成。对每个属性都建独立的键,这需求给每个属性单独发送请求,而不是对所有的属性都进行缓存。
  2. 使用不同的时间戳跟踪度量。如果独立缓存每个度量样本,那么长通用前缀会被不停的重复缓存。
  3. 平衡度量和灵活的数据模式,使用分层的key space更令人满意。
  • 通过CPU使用情况配置专门的集群。举个例子,内存键值存储对CPU的利用很低。服务器上1%的CPU时间也许能支撑1K+的RPS,基于不同数据模式会得出不同的结果。
  • Reids的表现非常不错。它能看到服务器可以做什么,而不是正在做什么。对于简单的键值存储,像Redis这样的服务在服务器上可能会存在很多的CPU动态余量。
  • Twitter首次为Timeline服务配置Redis是在2010年,同时搭载Redis的还有Ads服务。
  • Twitter并没有使用Redis的磁盘特性。这很大程度因为在Twitter的系统中,缓存和存储都在不同的团队完成,他们会根据自己的使用来定制。也就是,对比Redis,存储团队有更好的服务。
  • 热键是一个必须解决的问题,因此Twitter建立一个分层式缓存,客户缓存会自动的缓存热键。

Hybrid List

  • 为Redis添加Hybrid List以获得更可预期的内存性能。
  • Timeline是Tweet ID组成的列表,因此是一堆的整型,每个ID都很小。
  • Redis支持两个列表类型:ziplist和linklist。Ziplist更具备空间效率,linklist则更加灵活,在双向链表下每个建会占用两个指针,对比ID的体积来说,这个开销非常大。
  • 如果从内存的使用效率上看,ziplists是唯一之选。
  • Ziplist的最大阈值被设置为Timeline的大小。因此在调整Ziplist的阈值之前,永远都不会储存比它更大的Timeline。这同样意味着一个产品决策,在Timeline中储存多少个Tweet。
  • 对ziplist做添加和删除操作效率是非常低的,特别在列表非常大的情况下。从ziplist中使用memmove将数据删除,这里必须保证列表仍然是连续的。向ziplist中添加则需要一个内存realloc调用,以保证新实体有足够的空间。
  • 鉴于Timeline的体积,写入操作存在潜在的高延时。Timeline在体积上的变化很大,大部分的用户不会频繁发送Tweet,因此他们的User Timeline都很小。Home Timeline,特别涉及到那些名流人物则可能很大。当修改一个巨大的Timeline,而内存又被缓存占满,通常会进行这个过程:大量小体积timeline将会被驱逐,直到有足够的连续内存来储存这个巨大的ziplist。这些内存管理操作将花费很多的时间,因此写入操作可能存在非常高的潜在延时。
  • 因为写入会造成很多Timeline的修改操作,基于需要在内存中扩展Timeline,这里有很大的可能会产生写延时陷阱。
  • 基于写延时带来的高可变性,很难为写入建立SLA。
  • Hybrid List是ziplists组成的linklist,因此存在一个基于所有ziplist最大体积的阈值(以字节为单位)。以字节为单位最大程度上是为了内存效率,它可以帮助分配和解除分配相同体积的内存。当一个列表结束后,空间就被分配给下一个Ziplist。Ziplist并不可回收,直到这个列表为空。这就意味,通过删除,你可以让每个ziplist只包含一个实体。通常情况下,Tweet并不会被全部删除。
  • 在Hybrid List之前,解决方案是尽快的让一个大的Timeline过期,这会给其他Timeline节约出内存,但是如果用户再查看这个Timeline时,开销是非常大的。

BTree

  • 将BTree添加到Redis是为了支持分层键上的范围查询,从而得到一个结果列表。
  • 在Redis中,增加次关键字或字段一般通过Hash Map处理,排序数据以执行一个范围查询时,sorted set被使用。因为sorted set只能使用一个double类型的score来排序,所以这里不能任意指定次级键或者名称来排序。同时,鉴于Hash Map使用的线性搜索,因此它并不适用于存在太多次关键字或字段的情况。
  • 通过BSD实现BTree,并将之添加到Redis中。支持键查询和范围查询,同时还具备了良好的查询性能及简单的代码。唯一的缺点是BTree并不具备一个良好的内存利用效率,因为指针将造成大量的元数据开销。

集群管理

  • 为每个目的建立单独的集群,每个集群部署了1个以上的Redis实例。如果一个数据集的大小大于单Redis实例可以支撑的极限,或者单Redis实例并不能提供足够的吞吐量,key space需要被分割,数据则会横跨一组实例在多个分片上保存,路由器将会为key选择应该保存的数据分片。
  • 集群管理是Redis不会被撑爆的首要原因。既然可以使用集群,那么没理由不将所有的用例转移到Redis上。
  • Redis集群运营起来并不轻松。基于频繁的更新操作,人们使用Redis,但是许多Redis运营并不是幂等的。比如,网络故障可能会引起重试,从而在一定程度上破坏数据的完整性。
  • Redis集群支持集中管理者操控全局。使用memcache,许多集群使用了一个基于一致性哈希的客户端解决方案。如果出现非一致性数据,只能顺其自然。为了提供更好的服务,集群需要一个功能负责检测哪个分片发生问题,并且重新进行操作来保证同步。在足够长的时间后,缓存应该被清理。在Redis中破坏数据是不容易被发现的,当有一个列表,它缺失了一个部分,这个问题很难被描述清楚。
  • 在建立Redis集群上,Twitter做过了很多尝试。Twemproxy,最初并不是在Twitter内部使用,它被建立用于服务Twemcache,随后添加了对Redis的支持。同时,还针对代理类型路由建立了两个额外的解决方案,其中一个与Timeline服务有关,但不是通用的;另一个则是专为Timeline设计的通用解决方案,提供了集群管理、复制和分片修复。
  • 集群中存在3个选择,服务器相互间通信以达成一个协议:集群状态;使用一个代理;或者是当客户端数量达到阈值时做一个客户端方面的集群管理。
  • 没有做服务器方面的优化,因为一直以保持服务器简单、透明和快速为理念。
  • 并没有通过客户端,因为改变不容易被推广。在Twitter,1个缓存集群大约为100个项目使用。如果在一个客户端中做改变必须推进到100个客户端,这花费的时间可能以年计算。快速迭代意味着客户端不能放任何代码。
  • 使用一个代理模式路由途径以及分片主要基于两个原因。首先,缓存服务必须是个高性能服务。如果你想获得高性能,就必须分离快快慢路径,快对应着数据路径,而慢则对应了命令行和控制路径。其次,如果将集群管理混合到服务器中,将增加Redis编码的复杂度,从而造成一个有状态的服务,如果你想给管理代码打补丁或者升级,有状态的服务你必须要重启,从而可能会导致丢失一部分数据,滚动重启集群是非常痛苦的。
  • 使用代理途径的另一个原因是在客户端和服务器之间插入一个新的网络跃点。关于在添加额外的网络跃点上,Profiling 揭露了业内普遍存在的一个谣言。最起码在Twitter的系统中,Redis服务器产生的延时不会超过0.5毫秒。在Twiiter,大部分的后端系统都基于Java,并使用Finagle做相互间的交互。在通过Finagle后,延时增加到10毫秒。因此附加的网络跃点并不是问题,问题的本身在于JVM。除了JVM之外,你可以做任何的事情,当然除了添加又一个JVM。
  • 代理的失败并不会增加困扰。在数据路径上,引入一个代理层并不意味着带来额外开销。客户端不用去关心需要连接的代理。如果因为代理故障而造成的超时,客户端只需要随便选择一个其他的代理。在代理等级不会发生任何分片,它们同样是无状态的。为了扩展吞吐量可以添加更多的代理,代价是额外的成本。代理层只会因为转发被分配资源。集群管理、分片以及集群状态监视都不是代理负责的范围。代理之间并不需要保持一致。
  • Twitter中存在实例同时打开10万个连接的情况,服务器也并不会因此发生故障。在Twitter,服务器没理由去关闭一个连接,让它一直打开有助于改善延时。
  • 缓存集群被用作后备缓存(look-aside cache)。缓存本身不会负责数据的补充,客户端负责取得一个丢失的键并进行缓存。如果一个节点发生故障,分片会被转移到另一个节点。对故障恢复后的服务器进行同步以保证数据的一致性,所有这些都通过集群管理者完成。在让一个集群更容易理解上,中央观点确实非常重要。
  • 测试使用C++来编写代理。C++代理带来了一个显著的性能提升,随后代理层都使用了C和C++。

数据洞察

  • 当有调用显示缓存系统失效,而大多数缓存都是正常时,这通常因为客户端的配置错误,或者它们请求的键过多从而导致滥用缓存,当然也可能因为对同一个键多次请求造成服务器或链接饱和。
  • 如果通知某个人正在滥用系统,他们很可能会要求出示证据。哪个键?哪个分片的问题?什么样的流量导致了这个问题?因此你需要做足够的度量和分析,从而将证据展示给客户。
  • 面向服务的架构并不会给带来问题隔离或者是自动debug,必须对组成系统的每个组件保持足够的能见度。
  • 决定在缓存上获得洞察力。缓存使用C编写所以足够快速,因此它可以能其他组件所不能,提供足够的数据,而其他服务不能为每个请求都提供数据。
  • 可以实现为每条命令单独建立日志。在10万QPS时,缓存可以记录下所有发生的事情。
  • 避免锁和阻塞,特别不能因为磁盘写入而造成阻塞。
  • 在每秒100请求和每条日志消息100字节的情况下,每台服务器每秒会记录10MB的数据。当问题发生时,这些数据传输将造成很大的网络开销,大约占10%的带宽,这种开销完全不允许。
  • 预计算服务器上的日志以减少开销。设想是已经清楚需要被计算的内容,一个进程负责读取日志,计算并生成一个摘要信息,然后只定期发送主机的摘要信息。对比原始数据,这个体积将微不足道。
  • 这些云计算数据通过Storm聚合和存储,并在上面建立可视化系统,你可以基于这些建立容量规划。因为每条日志都可以被捕获,所以你可以做许多事情。
  • 对于运营来说,洞察力非常重要。如果出现丢包现象,通常情况下是热键或者是流量峰值导致。

对Redis的希望清单

  • 显式的内存管理。
  • Deployable(Lua)Scripts。
  • 多线程,可以简化集群管理。Twitter有很多高性能服务器,每个主机都拥有100GB以上的内存以及大量的CPU。为了使用一个服务器的所有能力,需要在实体主机商开启许多Redis实例。通过多线程减少需要启动实例数量,从而更容易的进行管理。

学到的知识

  • 可预见的规模需求。集群越大、客户越多,你越希望你的服务更可预知和确定。如果只有一个用户和一个问题,你可以迅速的找到并解决这个问题。但是如果你有70个客户,你完全忙不过来。
  • 如果你需要在许多分片上推广某个更新,一个分片的速度问题就可能导致全局问题。
  • Twitter正在向container环境发展,使用了Mesos作为作业调度器,调度器用来给请求分配CPU、内存等资源数量。当作业占用的资源高于请求时,监视器会直接将它终止。在容器的环境下,Redis会产生一个问题。Redis引入了外部存储碎片,这意味着你要使用更多内存来存储同样的数据。如果不想作业被终止,必须设计一个缓冲的区间。你可能会认为内存碎片率设定在5%就足矣,但是我更愿意多分配10%,甚至是20%的空间作为缓冲。或者在我认为每台主机连接数可能会达到5000时,我将给系统分配支撑1万个连接数的内存,结果会造成很大的浪费。对于当下大多数低延时服务来说,Mesos都不太适合,因此这些作业会与其他作业隔离。
  • 在运行时清楚资源使用是非常重要的在一个大型集群中,总会有问题产生。虽然你一直认为系统很安全,但是事情还是以意料之外的方式发生了。当下很少出现某台机器完全崩溃的情况,比如,在达到10GB的内存上限后,在有空闲内存之前,请求都会被拒绝,造成的后果仅是一小部分请求不能获得自己所需的内存资源,无伤大雅。而垃圾回收问题则是非常麻烦的,它可能降低系统的流量,当下这个问题已经困扰了很多机构。
  • 用数据说话。在计算到磁盘和计算到网络之前,查看相对网络速度、CPU速度计磁盘速度是非常有意义的,比如,节点被推送到中央监视服务之前查看的日志综述。除此之外,Redis中的LUA也是给数据提供计算的途径。
  • LUA当下还没有在Redis生产环境中实现响应式脚本意味着服务提供商不能保证他们的SLA,一个被加载的脚本可以做任何事情,因此没有服务提供商会因为添加一些代码铤而走险去破坏SLA。但是对于部署模型来说,意义重大,它将允许代码评审和基准测试,以清晰的计算资源使用和性能。
  • Redis作为下一个高性能流处理平台。当下已经拥有pub-sub和scripting,没什么不可以的。

原文链接: How Twitter Uses Redis to Scale - 105TB RAM, 39MM QPS,10,000+ Instances(编译/童阳  责编/仲浩)

更多《问底》内容

  • 【问底】严澜:数据挖掘入门——分词
  • 【问底】Yao Yu谈Twitter的百TB级Redis缓存实践

《问底》CSDN云计算频道新建栏目,以实践为本,分享个人对于新时代软件架构与研发的深刻见解。在含有“【问底】”字样标题的文章中,你会看到某个国外IT巨头的架构分享,会看到国内资深工程师对某个技术的实践总结,更会看到一系列关于某个新技术的探索。《问底》邀请对技术具有独特/深刻见解的你一起打造一片只属于技术的天空,详情可邮件至zhonghao@csdn.net。


免费订阅“CSDN云计算(左)CSDN大数据(右)”微信公众号,实时掌握第一手云中消息,了解最新的大数据进展!

CSDN发布虚拟化、Docker、OpenStack、CloudStack、数据中心等相关云计算资讯,     分享Hadoop、Spark、NoSQL/NewSQL、HBase、Impala、内存计算、流计算、机器学习和智能算法等相关大数据观点,提供云计算和大数据技术、平台、实践和产业信息等服务。        

【CTO讲堂】面对世界竞争对手,如何拿到Google PDF开源项目PDFium? 提升网站性能开发的10个技巧 SDCC 2015:顶尖技术精英云集 大会日程及首批讲师议题公布 《近匠》专访猿团创始人CEO谢恩明:梦想、未来、改变 《近匠》专访小熊尼奥:从软硬结合到IP合作,AR产品的机遇 W3C启动Web支付标准工作,推进在线结算流程 W3C中国区会员沙龙在京召开 W3C CEO Jeff分享W3C未来发展重点 【SDCC讲师专访】车轮互联总架构师韩天峰:PHP是最好的编程语言 SDCC 2015讲师专访精彩集锦(一):你想知道的,都在这! (入门篇)带你走进Erlang 【大神来了】Elixir语言设计者Jos&#233; Valim:释放Erlang VM的能量 【SDCC 2015讲师专访】刘小溪:Vert.x3的异步框架实战 【CTO讲堂】支付接入开发的陷阱有多深? 程序员界“香饽饽”、大神级别人物集体亮相——SDCC 2015编程语言专场议题曝光 【CTO沙龙】CDN在共享经济下的创新应用 深入浅出Fetch API 带你入解应用场景及适用问题 SDCC 2015讲师专访精彩集锦(二):途牛网、饿了么、快的等大牛都来了 百度、饿了么、美团专家齐聚SDCC2015,剖析前端开发核心技术 【SDCC讲师专访】百度乔刚:前端可视化难点分析及探索实践 【CTO讲堂】Growth Hacking背后,数据分析平台的架构调整 BAT、巨杉、南大、柏睿等齐聚SDCC—新一代数据库专场议题曝光! 《近匠》BeeCloud创始人黄君贤:三行代码集成支付的技术实现 【SDCC讲师专访】AdMaster技术副总裁卢亿雷:分布式数据库挑战与分析 tvOS真的代表了应用的未来吗? 使用Fetch API和ES6生成器构建异步API Android应用性能优化实践 华云数据:OpenStack的技术践行之路 【SDCC讲师专访】腾讯潘安群:腾讯云金融级数据库TDSQL分析 高颜值、高品质——安全技术论坛议题曝光! 移动应用开发者正饱受折磨 在Android平台上加载本地库的危险性 新手问题:西门子的汇编语言与Intel的汇编有什么不同? pb的发展空间还有多少,我们老总宣布pb即将下岗 关于界面的刷新的问题,大侠帮忙 如何取得程序当前运行的目录? 同一个局域网内为什么有的能上网有的不能上? 我编了一个mousemove的过程为什么在onmousemove里看不到 jsp参数传递的乱马问题 校园网查看ip的问题 tuxedo分组很有学问,分不好会死,还有内存泄露,请赐教 有关页面调度的课程设计 新手问题,在线等! 内存大小是否会影响到网络速度? 谁来救我 ,SOS,求用C语言写的编译器 修改数据出错,不知为何? 等级考试的问题 请问能不能在不同用户登陆的情况来决定服务A是否启动。 关于还原精灵转储后win98不能启动的问题,请指教!~ 今天,我终于听到项目经理的一句内心话,让我们作为程序员感到一阵阵的寒心 请教一下 dll调试问题 怎样得到OnLButtonDown的point在整个屏幕上的坐标啊?谢谢 递归调用FindFirstFile、FindNextFile、FindClose的问题 页面调度有关的课程设计 关于client端与server端的连接问题 请问能不能在不同用户登陆的情况来决定服务A是否启动。 Textbox如何禁止它记忆以前曾经输入过的值? 我的XP的CPU经常占用90%以上,高手指点. 安装完win2000,又安装了天网防火墙,再安装SQL server 2000,快完成时启动服务警告“无法定位程序输入点” 急招深圳周边(含深圳).Net程序员 ??qustion Laney(6吨大肥猫) 快来啊^@^ 有关struts的<html:text>标签的问题!!!!!!!!!!!!!!!!!!!!!!! 为了考试挑灯夜读,遇到一个菜问题请大家帮忙! 哪位高手帮帮我!时间紧急! 关于还原精灵转储后win98不能启动的问题,请指教!~ 有几张漂亮图片,看看你的计算机是怎么累死的 求C++算法代码。 怎么实现在IE中将查找到的关键字用红色标记指示出来? 求C++算法代码。 请问哪里可以下载Numega DevPartenr Studio 测试工具 ㊣㊣ 什么也不多说了,帮忙给解决这个问题吧, 先多谢了!! ㊣㊣ 有个小小问题 寻找监测某端口的数据流量软件 都市幽灵·里面一定有宝藏 非常奇怪:为什么超链接无效? 显示异常 下个星期开始到新公司了,请大家给点经验,好吗 急!jsp+mysql,急寻blob输出方法!!! 修改记录问题 StringGrid的自画 导出 急求高数同济第六版下册练习册答案,望哪位大侠成全 前不见古人,后不见来者,念天地之悠悠,下一句是什么? 忽然间明白过来适合什么成语? 公元1010年谁当皇帝? 带文口的成语 心中忽然间明白了,是什么成语 极度压抑是什么意思? 时钟从9时45分到10时05分,分针旋转了【 】度. 用成语代替全世界都知道 英语翻译先后于XX和XX月,分别以X和X为主题在xx举办会议.带领团队各邀请不同领域的5位嘉宾到场为听众传播思想,其中包括XX等;统筹会议前期准备工作,现场控制,后期善后工作,在XX各界反响强 try this one on white哪里错了 英语翻译内容是:"既然你开口叫我负责,我会负责到底的!" 现在在自学同济六版高数,感觉习题太少,请大家推荐一些习题集,练习册 try this one on white哪里错了 实矩阵A特征值为r+is,有1/2(A+A')的特征值均为实数且为b1 自学高数(同济版)有什么好的教辅书,请推荐一些!1 文在最后时能组什么成语 谁能帮忙写篇作文啊悲观主义说,这个世界有无数的墙.乐观主义说,这个世界有无数的门.现实主义说,这个世界是由无数的隔膜和沟通的门组成的.你怎么理解这三种看法?请从上面三种看法中选 无限感慨 是什么意思 甲、乙两车分别从A、B两地同时相对开出,甲车每小时行45千米,乙车从B地到A地要12小时,相遇时甲车所行的路程是乙车的4/5,求相遇时甲车行了多少千米? 谁能帮我写篇文章RT,主题是庆祝火锅店开业一周年.字数800左右. 《春》野花,眼睛,星星共同特征的词是? 前不见古人后不见来者念天地之悠悠独怆然而涕下是谁写的? 谁能帮我写篇作文啊?《爱点亮我的心灵》700字 一定是亲身经历的~ 像眼睛,像星星,还眨呀眨的.“眨呀眨的”写出了野花什么样的情态? It's small Try this pair on哪里错了 七年级下册地理的重点? 惆怅啥意思 为什么现在的小学课本都那么深. 您好,请问杭州离海宁有多远? 马哲里的时间的“一维性”和“客观性”怎么区分? 两个向量相等的条件是 什么叫结构化程序设计?它的主要内容是什么? 为什么在《算法导论》中,lg变成了以2为底?在算法导论第二版第33页说lg以2为底,lg不是以10为底么? 前不见古人 后不见来者念天地之悠悠独怆然而涕下谁写的啊在什么时候写的啊? 英语为啥这么难? 小学五年级课本 写篇英语作文should student be required to do writeen honework写篇作文 在线等 你懂得 为什么英语这么难 小学五年级课本在那? 请问刘老师,行阶梯形矩阵是不是只能由行变换得到? 为什么英语回这么难 算法导论什么时候有翻译的第三版? 求问矩阵的初等行变换是否影响其对称性?并给出证明. 为什么英语对于我来说这么难? 心急怎么找,三国演义中的三绝是谁,谢 已知矩阵B,求变换矩阵T使得(T的转置)*B*T成为对角矩阵,老师我想问一下先变行再变相应的列行不行? 世态炎凉人情冷暖世态炎凉.人情冷暖.为什么真么说 L That's an English book怎么拼写 几维的时空宇宙共有几维时空? (v-2s)/(2x-u)=(v-s)/s (u、v都是正数,且v+u≠0,求出s,并推导出1/s=(1/u)+(1/v) 坐等,三国演义中的三绝是谁,请快回答 时间和空间的讨论,这是个几维的空间?假设题:地球发射宇宙飞船去A星探索星际环境,地球距离A星的空间直线距离假定为一光年.在飞船起飞的时候就与地面进行实时传播,地面开始录制整个飞 已知圆面C:(x-a)^2+y^2 栗可以组成神马词语 一道初中语法题!麻烦详解.The teacher ,together with his students ,____ a trip to Nanjing.A have taken B are talkingC are going to take D is taking答案选的是D is taking C错在哪里?B呢? 重点论也是一元论,对吗, 长沙理工大学高数(同济第六版)下册练习册的详细答案~ 前不见古人,后不见来者,念天地之悠悠,独沧然而涕下是什么意思 3点多少分时,时针和分针离2的距离相等,并且在2的两边 上海实施油品升级全面完成沪五汽油置换中年男子躲商场男厕偷拍男人 事败后迅曼城出线在望图雷遭球迷种族歧视 俱乐范佩西或因与主帅不和被雪藏 赛前对话高校生“共享”淫秽视频 “随手之举”南京科委坦言不完全排除靠关系申请科技江苏成人高考:医学类考生考试要查指纹首尔FC主场如临大敌 恒大球迷将占到土硬顶别买中国导弹警告 已用中方导弹金正恩出席朝军2万人连长大会 发表\中印携手,印媒欢呼并警惕美国情报机构“搞砸了”奥斯卡影后赞与查尔斯王子跳舞比“亲热朝或将第四次核试 美韩揣测朝“核冒险美国“窃听门”或成欧盟峰会议题 法国第七届阿布扎比电影节开幕巴西国企独揽石油招标引抗议 政府进退央行:贷款基础利率集中报价和发布机制杜青林对西班牙进行友好访问澳首都领地同性恋合法化 或澳高等法院墨前警长向美贩毒 被判13年监禁罚款“非法集资”类罪亟须轻罪化面对道德逼捐该怎么办刘翔退役宣告一个时代终结 哽咽只因内俄航天署一日两挫折:质子火箭升空50世纪老人忆日本战时思想管制:假传教 英烘焙专家与未婚妻用食材烘焙制作当代澳小伙把世界之旅做成虚拟游戏 另类记破冰后美国乐团首访古巴 距上次近1/台湾女生游公园在野牛旁摆姿势拍照遭严“米利班德石碑”今何在?“尘封”仓库俄罗斯前“选美皇后”闹离婚 英法官““猫王”巡演大巴高价拍卖 成交价26父母监控未成年子女手机?韩国上演“家秀球技抓猛鳄 哈里王子渐摆脱“派对王美研究发现:孩子自己动手种菜有助其健厄瓜多尔创单日植树世界纪录 全民植树荷兰一大学研制出神奇水泥 开裂后能自意大利买房只需1欧元 古老小城为重新德国卡车在铁轨“卡壳”被火车撞 致两六招帮你记朋友姓名:与其长相或某名人每天坚持喝500毫升橙汁 可迅速改善
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘