设计自己的高并发架构

在互联网行业,未来的趋势就是高并发、分布式系统。

作为一名互联网开发人员,一定要把握发展趋势,并沿着正确的路线提升自己。我也是刚刚开始了解什么是高并发、分布式的系统,怎样进行这种系统的架构设计。我觉得学习的思路应该是:根据了解到的内容,参考已经存在的方案,自己思考,并动手设计一套自己的系统架构,哪怕十分简陋,但一定要了解每一部分设计或者优化的目的、原则、思路、具体方法和使用到的技术,然后再一步步完善其中的每一部分,不断加入最新的方案和技术,并在实际开发中不断实践自己的方案,最终形成自己最优的架构设计。

下面是我参考了很多架构设计方案后总结出的系统优化策略。

搭建高并发系统,或针对系统进行高并发优化,需要明确系统高并发出现的时间规律,地域(空间)规律。得到用户流量、区域分布、请求特点、应用服务瓶颈点、服务器的性能指标等等,根据这些因素有针对性地对业务流程本身、系统架构进行优化。

优化的原则:应该有灵活的扩展性、尽量低的成本、高性能。

优化的思路(出发点):

  1. 负载均衡系统
  2. 反向代理系统
  3. Web服务器系统
  4. 缓存系统
  5. 分布式存储系统
  6. 数据库集群系统
  7. 异步计算策略

一、负载均衡系统

在架构中加入负载均衡系统,负载均衡系统可以使用的位置:可以使用在web应用服务之前,也可用在数据库集群前(如:在MySQL集群中,使用LVS将数据库请求分散到各个从服务器)。

实现方式包括:硬件负载均衡、软件负载均衡。

硬件负载均衡效率高,价格贵,如F5等;

软件负载均衡系统价格低或免费,效率较硬件低,但一般够用,如LVS,nginx也有负载均衡功能。

二、反向代理系统

在系统架构中加入反向代理。

作用一:将请求映射到对应服务的服务器。首先需要划分业务,并统一约定和规范各个业务对应服务的URI,然后通过反向代理服务器将请求映射到各服务所在的服务器。这样可以避免在业务集中的情况下出现的单一功能发生瓶颈导致其他功能受到影响。(系统设计时,各业务服务应该按功能或模块进行拆分,便于进行横向分布式扩展)

作用二:提高系统吞吐量。数据在网络中传输很耗时,反向代理服务器可以使应用服务器不必再直接和客户端进行连接,阻塞进程等待数据接收完成,而是在反向代理服务器将数据缓冲完成后一次性快速传输给应用服务器。

作用三:对静态资源不必通过应用服务器,直接找到并返回,减轻应用服务器压力。

目前普遍使用Nginx作为反向代理服务器,它还是高性能http服务器,同时可以进行负载均衡。

三、Web应用系统优化

1.前端展示层:
  • 页面静态化(HTML化);

动态页面静态化,可通过CMS系统对非动态信息页面进行静态化(静态化实际就是用程序将html页面的代码输出到一个html文件中,就成了静态页面);

静态化后的页面同样可以通过CDN加速,或存入缓存。

适用于更新不频繁的内容。

  • 图片服务器和分离(CDN加速);

2.服务端程序:

  • 优化业务流程
  • 更高效的算法
  • 优化各种影响程序性能的代码细节

四、缓存系统

使用缓存减少对数据库的直接操作,减轻查询时的I/O压力。

按照存放位置不同,可分为客户端缓存、服务端缓存。

1.客户端缓存(主要是缓存页面):

  • 浏览器缓存
  • 网关、代理服务器缓存

2.服务端缓存:

  • 页面缓存(常通过发布系统生成静态页面,适用于信息发布类网站,或数据非频繁进行动态变化的部分)。

缓存实现手段:可对页面整体缓存,也可以缓存片段,如ESI cache。使用CDN也算是一种缓存方式。

  • 数据缓存。

缓存框架:ehcache

NoSQL:redis、memcache

使用缓存还应该使缓存命中率更高。

五、分布式存储系统

对于需要占用大量存储空间的文档、图片、视频资源,单台服务器无法全部存储,需要大量大存储空间的服务器来保存,因此,使用大规模分布式存储系统提供基础的存储服务。

六、数据库系统

数据库的高性能方案有:优化当前数据库,和建立集群。

当数据库开始出现性能下降的时候,最优先的方案是:优化当前数据库的性能,而非立刻建立集群。应该保持简单原则,毕竟会增加很大复杂度。

1.当前数据库优化策略:

  • 建立索引
  • 优化sql
  • 使用效率更高的操作方式。如大量数据批量插入。

2.建立集群:

  • 读写分离
  • 从库的负载均衡
  • 分片、分库、分表(sharding)

3.mysql集群搭建方案:

  • 使用官方推荐:Mysql Cluster方案
  • 使用mysql中间件atlas方案
  • 其他集群方案

七、异步计算方案

对于实时性要求不高,或者不重要但很耗时的操作,采取异步执行方案。即先行返回结果,再继续执行。如将用户上传的文件进行分发到多台机器、图片处理、视频转码等操作。

设计自己的高并发架构相关推荐

  1. 如何从零设计一款高并发架构(建议收藏)

    来源:http://blog.thankbabe.com 高并发经常会发生在有大活跃用户量,用户高聚集的业务场景中,如:秒杀活动,定时领取红包等. 为了让业务可以流畅的运行并且给用户一个好的交互体验, ...

  2. 7000字和你聊聊如何设计一款高并发架构(建议收藏)

    高并发经常会发生在有大活跃用户量,用户高聚集的业务场景中,如:秒杀活动,定时领取红包等. 为了让业务可以流畅的运行并且给用户一个好的交互体验,我们需要根据业务场景预估达到的并发量等因素,来设计适合自己 ...

  3. 想设计亿万级高并发架构,你要先知道高并发是什么?

    当前,数字化在给企业带来业务创新,推动企业高速发展的同时,也给企业的IT软件系统带来了严峻的挑战.面对流量高峰,不同的企业是如何通过技术手段解决高并发难题的呢? 0.引言 软件系统有三个追求:高性能. ...

  4. 想设计亿万级高并发架构,你要先知道高并发是什么?(转载)

    当前,数字化在给企业带来业务创新,推动企业高速发展的同时,也给企业的IT软件系统带来了严峻的挑战.面对流量高峰,不同的企业是如何通过技术手段解决高并发难题的呢? 0.引言 软件系统有三个追求:高性能. ...

  5. oom 如何避免 高并发_微博短视频百万级高可用、高并发架构如何设计?

    本文从设计及服务可用性方面,详细解析了微博短视频高可用.高并发架构设计中的问题与解决方案. 今天与大家分享的是微博短视频业务的高并发架构,具体内容分为如下三个方面: 团队介绍 微博视频业务场景 &qu ...

  6. 微博短视频千万级高可用、高并发架构如何设计?

    作者:刘志勇,本文来自新浪微博视频平台资深架构师刘志勇在 LiveVideoStackCon 2018 讲师热身分享,并由 LiveVideoStack 整理而成. 本文从设计及服务可用性方面,详细解 ...

  7. 如何估算代码量_千万级用户的大型网站,应该如何设计其高并发架构?(彩蛋)...

    目录 (1)单块架构 (2)初步的高可用架构 (3)千万级用户量的压力预估 (4)服务器压力预估 (5)业务垂直拆分 (6)用分布式缓存抗下读请求 (7)基于数据库主从架构做读写分离 (8)总结 本文 ...

  8. mysql 亿级高并发_亿级流量系统架构之如何设计每秒十万查询的高并发架构.md

    亿级流量系统架构之如何设计每秒十万查询的高并发架构 一.前情回顾 上篇文章(亿级流量系统架构之如何设计承载百亿流量的高性能架构)聊了一下系统架构中,百亿流量级别高并发写入场景下,如何承载这种高并发写入 ...

  9. 如何从零设计一款牛逼的高并发架构(建议收藏)

    点击关注公众号,实用技术文章及时了解 来源:http://blog.thankbabe.com 前言 高并发经常会发生在有大活跃用户量,用户高聚集的业务场景中,如:秒杀活动,定时领取红包等. 为了让业 ...

最新文章

  1. tensflower官方测试案例_大数据性能测试介绍
  2. 冒泡排序出现的问题_停课不停学 | 有趣的算法——冒泡排序
  3. 不能将参数转化为lparam_反渗透纯水机是将自来水直接转化为超纯水的装置
  4. BZOJ 1221: [HNOI2001] 软件开发(最小费用最大流)
  5. bondat蠕虫传播与对抗
  6. 小程序 循环中有多个input,怎么获取每个input输入框的值
  7. php response响应,9. 响应 (Response)
  8. 【编程思想】什么是微服务
  9. java网络编程1、2章习题
  10. 【angularjs】【学习心得】路由继续研究篇
  11. idea报错:Invalid bound statement (not found)
  12. 百度前端技术学院-task1.8源代码以及个人总结
  13. Exchange邮箱数据库事务日志引起磁盘暴涨
  14. LabVIEW以太网仪器控制
  15. 实时共享白板_使用Froala文本编辑器构建实时协作白板-第1部分。
  16. 计算机二级纸张b5大小,b5的尺寸(a4a5b5纸张大小对比)
  17. TapTap实习三个月总结
  18. 2021年茶艺师(中级)考试试卷及茶艺师(中级)模拟试题
  19. Hyperledger Fabric系统架构
  20. 【并发编程】(学习笔记-共享模型之管程)-part3

热门文章

  1. 【AD】Altium designer pcb 交叉选择模式
  2. Stack与queue的底层实现、区别。
  3. 【LeetCode】【HOT】98. 验证二叉搜索树(递归)
  4. 原生javascript添加和删除class
  5. C# 输入一个整数,求质因数
  6. Luogu P2733 家的范围 Home on the Range
  7. 【转】ASCII码表
  8. 有趣的圣诞节 库的打包
  9. ASP.NET2.0打通文件图片处理任督二脉[转载]
  10. Java中HashMap和TreeMap的区别深入理解,java开发面试笔试题