千万级高性能、高并发架构的经验之谈

架构以及我理解中架构的本质前端

在开始谈我对架构本质的理解以前,先谈谈对今天技术沙龙主题的我的看法,千万级规模的网站感受数量级是很是大的,对这个数量级咱们战略上 要重 视 它 , 战术上又 要 藐 视 它。先举个例子感觉一下千万级究竟是什么数量级?如今很流行的优步(Uber),从媒体公布的信息看,它天天接单量平均在百万左右, 假如天天有10个小时的服务时间,平均QPS只有30左右。对于一个后台服务器,单机的平均QPS能够到达800-1000,单独看写的业务量很简单 。为何咱们又不能说轻视它?第一,咱们看它的数据存储,天天一百万的话,一年数据量的规模是多少?其次,刚才说的订单量,每个订单要推送给附近的司机、司机要并程序员

发抢单,后面业务场景的访问量每每是前者的上百倍,轻松就超过上亿级别了。算法

今天我想从架构的本质谈起以后,但愿你们理解在作一些建构设计的时候,它的出发点以及它解决的问题是什么。缓存

架构,刚开始的解释是我从知乎上看到的。什么是架构?有人讲, 说架构并非一 个很 悬 乎的 东西 , 实际 上就是一个架子 , 放一些 业务 和算法,跟咱们的生活中的晾衣架很像。更抽象一点,说架构其 实 是 对 我 们 重复性业务 的抽象和我 们 将来 业务 拓展的前瞻,强调过去的经验和你对整个行业的预见。安全

咱们要想作一个架构的话须要哪些能力?我以为最重要的是架构师一个最重要的能力就是你要有 战 略分解能力。这个怎么来看呢:服务器

  • 第一,你必需要有抽象的能力,抽象的能力最基本就是去重,去重在整个架构中体如今方方面面,从定义一个函数,到定义一个类,到提供的一个服务,以及模板,背后都是要去重提升可复用率。
  • 第二, 分类能力。作软件须要作对象的解耦,要定义对象的属性和方法,作分布式系统的时候要作服务的拆分和模块化,要定义服务的接口和规范。
  • 第三, 算法(性能),它的价值体如今提高系统的性能,全部性能的提高,最终都会落到CPU,内存,IO和网络这4大块上。

千万级高性能、高并发架构的经验之谈

 

这一页PPT举了一些例子来更深刻的理解常见技术背后的架构理念。微信

  • 第一个例子,在分布式系统咱们会作 MySQL分 库 分表,咱们要从不一样的库和表中读取数据,这样的抽象最直观就是使用模板,由于绝大多数SQL语义是相同的,除了路由到哪一个库哪一个表,若是不使用Proxy中间件,模板就是性价比最高的方法。
  • 第二看一下加速网络的CDN,它是作速度方面的性能提高,刚才咱们也提到从CPU、内存、IO、网络四个方面来考虑,CDN本质上一个是作网络智能调度优化,另外一个是多级缓存优化。
  • 第三个看一下服务化,刚才已经提到了,各个大网站转型过程当中必定会作服务化,其实它就是作抽象和作服务的拆分。第四个看一下消息队列,本质上仍是作分类,只不过不是两个边际清晰的类,而是把两个边际不清晰的子系统经过队列解构而且异步化。

千万级高性能、高并发架构的经验之谈

 

 

新浪微博总体架构是什么样的网络

接下咱们看一下微博总体架构,到必定量级的系统整个架构都会变成三层,客户端包括WEB、安卓和IOS,这里就不说了。数据结构

接着还都会有一个接口层, 有三个主要做用:架构

  • 第一个做用,要作 安全隔离,由于前端节点都是直接和用户交互,须要防范各类恶意攻击;
  • 第二个还充当着一个 流量控制的做用,你们知道,在2014年春节的时候,微信红包,每分钟8亿屡次的请求,其实真正到它后台的请求量,只有十万左右的数量级(这里的数据可能不许),剩余的流量在接口层就被挡住了;
  • 第三,咱们看对 PC 端和移 动 端的需求不同的,因此咱们能够进行拆分。接口层以后是后台,能够看到微博后台有三大块:
  • 一个是 平台服 务,
  • 第二, 搜索,
  • 第三, 大数据。
  • 到了后台的各类服务其实都是处理的数据。 像平台的业务部门,作的就是 数据存储和读 取,对搜索来讲作的是 数据的 检 索,对大数据来讲是作的数据的 挖掘。微博其实和淘宝是很相似

千万级高性能、高并发架构的经验之谈

 

微博其实和淘宝是很相似的。通常来讲,第一代架构,基本上能支撑到用户到 百万 级别,到第二代架构基本能支撑到 千万 级别都没什么问题,当业务规模到 亿级别时,须要第三代的架构。

从 LAMP 的架构到面向服 务 的架构,有几个地方是很是难的,首先不可能在第一代基础上经过简单的修修补补知足用户量快速增加的,同时线上业务又不能停, 这是咱们常说的 在 飞 机上 换 引擎的 问题。前两天我有一个朋友问我,说他在内部推行服务化的时候,把一个模块服务化作完了,其余部门就是不接。我建议在作服务化的时候,首先更可能是偏向业务的梳理,同时要找准一个很好的切入点,既有架构和服务化上的提高,业务方也要有收益,好比提高性能或者下降维护成本同时升级过程要平滑,建议开始从原子化服务切入,好比基础的用户服务, 基础的短消息服务,基础的推送服务。 第二,就是可 以作无状 态 服 务,后面会详细讲,还有数据量大了后须要作数据Sharding,后面会将。 第三代 架构 要解决的 问题,就是用户量和业务趋于稳步增长(相对爆发期的指数级增加),更多考虑技术框架的稳定性, 提高系统总体的性能,下降成本,还有对整个系统监控的完善和升级。

总结

这里以Java语言为例,首先必定要 理解 JAVA;第二步,JAVA完了之后,必定要 理 解 JVM;其次,还要 理解 操做系统;再次仍是要了解一下 Design Pattern,这将告诉你怎么把过去的经验抽象沉淀供未来借鉴;还要学习 TCP/IP、 分布式系 统、数据结构和算法。

程序员必定要经过不停的学习、练习和总结, 造成本身的一套架构设计原则和方法!

相关文章
相关标签/搜索