大型网站架构设计

网站架构的演化

1,原始时代,一台服务器解决所有,经典的LAMP,廉价服务器+开源软件,网站就建起来了。

→ 等到访问量越来越大,数据存储空间吃紧了,所以。。。

2,使用三台服务器,应用,文件,数据库分开。应用服务器加CPU,文件服务器加大容量硬盘,数据库服务器用更贵更快的硬盘。

→ 80%的访问集中在20%的数据上,成为瓶颈

3,应用服务器加本地缓存。

→ 本地缓存和应用争内存

4,加远程独立服务器放缓存,再不行上分布式缓存服务器,要多大有多大。

→单台应用服务器应对请求数量有限,限制了并发能力

5,使用应用服务器集群,可伸缩性大大增强,再多用户都不怕。

→用户操作频繁,高频率的写操作让数据库不堪重负

6,数据库读写分离,配置主从数据库,读从从库读,写就写到主库,利用主从复制让数据一致

→网站内容越来越丰富,响应时间变长

7,上CDN服务,静态数据或者不频繁更新的数据都到CDN。再利用反向代理,选择距离用户最近响应最快的应用服务器,大大加快响应时间。

→写数据操作量级上来了,数据服务器真的又撑不住了

8.1有钱,上分布式文件系统和分布式数据库系统,还慢就继续加机器,总有快的时候。省心省力

8.2没钱,花点心思,根据业务对数据库进行拆分,将不同细分业务数据放到不同的数据服务器上,重点数据用更好的服务器。

→数据量大,检索和生成报表巨慢

9,使用NoSQL放需要检索的数据,减轻原来数据库服务器压力

→业务复杂,技术开发难度提高

10,业务拆分,根据不同的产品线拆分技术开发,看起来是一个网站,其实是不同的应用来共同提供数据的

→业务拆分粒度越来越小,服务部署维护困难

11,分布式服务,统一运维

架构模式

模式,描述了一个不断重复发生的问题和该问题解决方案的核心。这样,你就能一次次的使用该方案而不必做重复工作。

网站架构要解决的问题,就这几种:

  • 高性能。就是要快!

  • 高可用。7*24在线可用,挂了就不好了。

  • 易伸缩。能随访问量,数据处理量的大小。进行扩容降容,不再门庭若市时候奔溃,不在人去楼空时浪费钱。

  • 可扩展。师傅师傅大师兄又加需求了!好的架构,要随业务的发展,无痛加功能加服务。

  • 安全。不安全,以上都是白搭。
    以上这些问题重复的出现,也就形成了解决的模式。

常见的模式:

1.分层。横向切割。应用层靠近用户,负责具体业务和页面展示,也就是常说的后台和前端那部分,现在都是前后端分离了,也是分层的一种方法。服务器提供具体服务支持,比如订单结算,购物车服务等,我现在工作大概就是在这一层,所以不要再问我后台后端差别了啊啊啊。数据层,最后面,提供数据存储的。

2.分割。纵向切割。将不同业务进行分割,例如淘宝,购物车,搜索,广告分割成不同的应用,由独立团队进行负责。

3.分布式。不同应用放不同物理机子,分布式部署可以对不同的应用服务做到资源的有效分配。

4.集群。多台服务器部署相同的应用,通过负载均衡对外提供服务,集群再提高更好的并发特性的同时,也能提供系统的可用性,一台挂了还有一台嘛。

5.缓存。CDN,redis等等。缓存主要是两个难点,怎样提供缓存命中率和设置过期时间避免脏读。

6.异步。这一块是重点,异步架构是典型的生产者消费者模式,应用使用队列进行消息传递而不直接互相调用。好处有二,可用性提高,如果后面的应用挂了,前面的应用还能继续接收用户请求,数据堆入队列,等挂了的应用重启继续消费队列就可以了。消除访问波峰,突然的一波访问,如果没有异步处理,后端压力会骤增,很可能就崩了,异步处理能将消息放进消息队列,后端依次处理,就不会有太大问题。

7.冗余。服务器随时会挂,多备一台服务器,数据多做一份备份,总是好事。虽然有点费钱。

8.自动化。发布过程自动化,人为操作很容易出错,当然,需要自动发布系统足够好用。

9.安全。加密,验证码,风险控制。

异步的问题

和人不同的是,网站系统,任何可以晚点再做的事情都应该晚点再做。

一般就是使用消息队列将调用异步化,一个应用接一个应用的处理数据,上游处理完了丢到下游,上游无需下游立即甚至压根不用下游进行反馈。

消息队列的应用,使系统的灵活性大大提高,起到很好的削峰作用。前面的应用将短时间内大量的请求存入消息队列,推迟处理时间,使到后面吃大量内存CPU的应用不至于被压垮。固定的消费速率也使数据库服务器的并发数得到控制。

但是,异步也会带来很多麻烦的事情。

由于数据操作被异步化了,所以很难确定数据究竟处理完了没有,也很难保障数据的一致性,前端应用认为处理完了,后端其实还没好,就会出现很多问题,导致数据不一致,处理结果出现异常。这经常需要额外的同步操作来进行核实数据,带来额外的开销。

另一个问题是,异步会导致数据的更新不及时,当然,这是异步的目的,同样也是缺点,看不同的场合。比如每日卖家报表,推迟个几分钟再统计出来没有任何问题,但是像秒杀系统,推广限额系统,就不能容忍数据统计延迟。在应用了异步处理的架构里,这些需求也就都需要额外处理,提供系统的复杂性。

不是任何网站都需要异步化的,也不是异步架构里每个环节都需要异步化的。技术用到正确的地方才是好的技术。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,589评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,615评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,933评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,976评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,999评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,775评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,474评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,359评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,854评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,007评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,146评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,826评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,484评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,029评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,153评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,420评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,107评论 2 356

推荐阅读更多精彩内容

  • 正确的业务架构远比正确的技术架构重要---- 斯沃.资基索德 经验尚浅,不敢妄议大神写的《大型网站技术架构》,所以...
    谢培阳阅读 1,204评论 2 21
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,672评论 18 139
  • 1.蔡贵强:《房产经纪人》 //www.greatytc.com/p/9c52fe629027?utm_c...
    22QQQQ阅读 267评论 2 3
  • 首先理解几个概念1.程序:就是我们日常所写的代码。2.进程:程序在计算机中运行的实体。程序被加载到计算机内存中运行...
    RegulusFun阅读 9,181评论 0 0