互联网高并发架构设计模式

前言

随着互联网的快速发展,很多传统行业都开始将原有的产品互联网化移动化,这其中就涉及到对原有系统的改造,因为之前大部分时间都是在传统银行工作所以对于原先的系统设计我们也有一个套路,类似传统的SSH、LAMP这种,但是随着技术的不断快速发展,互联网高并发的架构设计也有了新的模式,本文就介绍下基本的高并发设计模式。互联网大部分系统的设计采用本文的设计模式都是可以的,但是对于一些超高并发的特殊场景的系统还是需要根据具体业务场景单独去设计的,下面我们就对高并发设计模式进行讲解。

分层

分层设计是企业应用系统中常见的设计模式,为了保证后续系统的可拆分和可复用,一般会将系统拆分为应用层、服务层、数据层,这也是传统的系统分层拆分模式。通过分层,可以更好的将一个庞大的软件系统切分为不同的部分,便于分工合作并行开发和维护。每层都是独立的,互相通过接口进行调用,各层可以根据业务情况的变化独立作出调整,只需要保证接口一致性即可。

分层比较大的挑战就是合理规划和划分每一层的边界和接口,在实施过程中禁止跃层调用。对于分层架构不是一成不变的,一般来说在实际过程中,会根据具体的情况再细化分层,应用层可以分为视图层、业务逻辑层等,服务层也可以细分为数据接口适配层、逻辑处理层等。

分层架构对网站支持高并发分布式的发展方向至关重要,所以在系统刚开始建的时候最好就要采取分层架构,这样后续分层会比较容易。

分割

分层是对系统的横向的切分,分割则是对系统纵向的切分。系统越大,分割的就会越细,例如银行系统我们会切分为核心系统、账户系统、支付系统、现金管理系统、营销系统等等,基本上你在网银或者手机银行上看到的每个功能背后基本都是一个系统去支撑,例如我们常见的手机银行里的账户交易查询,就这么一个简单的交易查询功能,对于有一定规模的银行来说,都会单建一个交易查询系统提供全渠道的查询服务。

按照这样将功能从业务层面分割以后,各个系统承载的压力自然也就下降下来,而且扩展性也会比较好。不过功能分割对于大型网站的分割粒度一般会比较小,对于小规模的公司来说一般没必要上来就分割成很多子系统,随着业务的发展再进行分割就可以。

分布式

分布式由来已久,分布式意味着可以通过增加机器完成同样的功能,机器越多,cpu资源、内存、磁盘都是随着机器的增加而线性增加,机器越多能够处理的并发访问和数据量就越大,从而能为更多的用户提供服务。

分布式架构需要考虑很多问题,并不是简单的加机器就可以了。实施分布式以后需要考虑用户会话如何管理,数据在分布式环境中如何保持数据一致性,分布式事务如何保证一致性,分布式的日志维护等都是需要考虑的问题,所以分布式设计要根据具体情况而来,不要为了分布式而分布式。

分布式方案有以下几种:

1)分布式应用和服务:将分层和分割后的应用分布式部署,这样可以提高网站性能和并发,加快开发和发布速度,还可以让不同应用交叉复用共同的应用,便于功能扩展。

2)分布式静态资源:网站的静态资源独立分布式部署,并采用独立的域名,这就是动静分离。静态资源的分布式部署可以减少应用服务器的压力,使用独立域名可以加快加载速度,也可以降低静态资源服务器的压力。

3)分布式数据和存储:大型网站处理的数据都是P级的,单台服务器无法提供这么大的存储空间,这么大的数据需要分布式存储。除了分布式文件存储,还有关系型数据库和Nosql都有分布式的部署方案。通过分布式能够提供海量的数据存储空间。

4)分布式计算:对于很多后台批量处理的任务都是采用分布式计算方案,常用的有Hadoop和MapReduce分布式计算框架。分布式计算框架内容比较多。

集群

分布式部署的应用和服务部署了很多机器后还需要将其集群化才能对外提供服务,多台服务器部署相同应用构成一个集群,通过负载均衡设备共同对外提供服务。

当业务量不断增大以后,可以在集群中不断增加服务器就可以满足业务增长了,当一台服务器坏了也不会影响对外的服务提供,只是性能有所下降。

缓存

缓存是高并发系统的杀手锏,在真正有高并发需求的系统一般会设计多级缓存来减少真正的服务计算,而是直接通过缓存提供服务。像微博、朋友圈这些高QPS的系统都是采用了多级缓存的架构方案。

1)CDN:CDN供应商一般都部署在距离用户最近的网络服务商,用户的请求总是先到网络服务商,在这里缓存网站的静态资源,可以就近将静态数据返回给用户。一般来说对于电商、社交应用、新闻门户或者视频网站这些高QPS网站,都建议使用CDN来环节源系统的压力。

2)反向代理:反向代理属于网站前端架构的一部分,部署在网站的前端,当用户请求到达网站的数据中心时,最先访问到的就是反向代理服务器,这里将网站的静态资源缓存起来,这样不需要继续转发应用服务器,直接从反向代理缓存中返回就可以了。

3)本地缓存:对于应用服务器被访问的高热点数据,应用程序可以在服务器内存中缓存这些热点数据,这样就不需要访问服务器磁盘或者数据库了,能够将内存中的热点数据直接返回。

4)分布式缓存:很多系统数据量非常大,光靠本地缓存可能内存空间不够,这时候就可以考虑使用分布式缓存了,常用的分布式缓存有redis、memcache这些key-value分布式缓存,这些分布式缓存一般也都提供了集群版本,能够做到很好的高可用和高性能。

异步

异步也是处理高并发的一把利器,也是处理解耦的手段之一,业务系统之间的消息传递不是同步调用,而是将一个业务操作分为多个阶段,每个阶段之间通过共享数据的方式异步执行。

在单一服务器内部可通过多线程共享队列的方式实现异步,处在业务操作前面的线程将输出的内容写入队列,后面的处理线程从队列中取出数据进行处理;在分布式系统中,多个服务器集群通过分布式消息队列实现异步。

对于简单的异步实现可以通过内存队列来实现,对于需要高可用和高并发的系统一般来说都依靠商用的消息队列中间件产品,Websphere MQ、Rabbit MQ、Rocket MQ等都是比较好的消息中间件产品。

冗余

为了保证系统的高可用,我们一般会对服务器和数据都进行冗余备份,这样可以保证在服务器宕机的情况下系统依然可以保证提供服务。

访问和负载很小的应用服务也必须部署至少两台服务器组成一个集群,就是为了通过冗余来实现高可用。数据库要定期进行全量备份,每天还要进行增量备份,防止数据库服务器出现异常导致数据丢失,对于实时的数据备份可以通过数据库自带的日志来进行恢复。

总结

上面介绍的这些就是常用的一些高并发的设计模式,其中每一条都值得深入的研究,本文只是介绍了高并发设计时需要考虑的设计方案简介,可以通过这些方案缓解压力提高并发性能和高可用,每一点都可以单独去详细介绍下,后面我会再写几篇分别介绍下这些模式的具体应用方式。

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

推荐阅读更多精彩内容