当前位置: 首页 > news >正文

【架构】傻瓜都能看懂的高并发量服务器架构

 

先普及一下基础知识:

一、硬件条件。确认服务器硬件是否足够支持当前的流量,一台普通的P4服务器一般最多能支持每天10万独立IP,如果访问量比这个还要大, 那么必须首先配置一台更高性能的专用服务器才能解决问题 ,另外就是增加服务器数量,否则怎么优化都不可能彻底解决性能问题。

二、数据库。优化数据库访问前台实现完全的静态化当然最好,可以完全不用访问数据库,不过对于频繁更新的网站, 静态化往往不能满足某些功能。缓存技术就是另一个解决方案,就是将动态数据存储到缓存文件中,动态网页直接调用 这些文件,而不必再访问数据库,WordPress和Z-Blog都大量使用这种缓存技术。如果确实无法避免对数据库的访问,那么可以尝试优化数据库的查询SQL,避免使用 Select * from这样的语句,每次查询只返回自己需要的结果,避免短时间内的大,尽量做到"所查即所得" ,遵循以小表为主,附表为辅,查询条件先索引,先小后大的原则,提高查询效率.量SQL查询。

三、禁止盗链。外部网站的图片或者文件盗链往往会带来大量的负载压力,因此应该严格限制外部对于自身的图片或者文件盗链,好在目前可以简单地通过refer来控制盗链,Apache自 己就可以通过配置来禁止盗链,IIS也有一些第三方的ISAPI可以实现同样的功能。当然,伪造refer也可以通过代码来实现盗链,不过目前蓄意伪造refer盗链的还不多, 可以先不去考虑,或者使用非技术手段来解决,比如在图片上增加水印。

四、控制大文件的下载。大文件的下载会占用很大的流量,并且对于非SCSI硬盘来说,大量文件下载会消耗 CPU,使得网站响应能力下降。因此,尽量不要提供超过2M的大文件下载,如果需要提供,建议将大文件放在另外一台服务器上。

五、镜像分流。将文件放在不同的主机上,提供不同的镜像供用户下载。比如如果觉得RSS文件占用流量大,那么使用FeedBurner或者FeedSky等服务将RSS输出放在其他主机上,这样别人访问的流量压力就大多集中在FeedBurner的主机上,RSS就不占用太多资源了。

六、做好流量监控。在网站上安装一个流量分析统计软件,可以即时知道哪些地方耗费了大量流量,哪些页面需要再进行优化,因此,解决流量问题还需要进行精确的统计分析才可以。推荐使用的流量分析统计软件是Google Analytics(Google分析)。

接下来我们来说说服务器架构,前段时间我们请到了国内服务器顶级攻城狮,他把服务器那点事讲得非常通透简单。对于一个刚起步的创业公司,不需要考虑太多复杂的服务器架构,能把业务跑起来就行了。但是在早期业务逻辑设计时,懂一些稍微复杂的服务器架构的逻辑,后面可以少走很多弯路。

下面这个图估计大家都明白,这就是最基础的服务器架构。傻瓜式的方法是把应用服务器、文件服务器、数据库服务器全部混合在一起,呵呵呵!但这并不是最科学的。

当业务量持续增加到一定量以后,执行应用程序、读写文件、访问数据库应该有所区分,保证各自的需求都能得到满足,这时候你需要考虑把应用服务器、文件服务器、数据库服务器分离,这个时候的服务器架构应该是下面这样的,它是由三个独立的服务器组成,各司其职。

随着业务量持续增加,应用程序访问缓存数据会成为瓶颈,这个时候需要增加本地缓存,有的也需要分布式缓存。分布式缓存是指缓存部署在多个服务器组成的服务器集群中,以集群的方式提供缓存服务,其架构方式主要有两种,一种是以JBoss Cache为代表的需要同步更新的分布式缓存,一种是以Memchached为代表的互不通信的分布式缓存。如下图:

接下来,需要更多台应用服务器以应对复杂的业务逻辑,同时需要负载均衡调度服务器来调度和分配应用服务器的工作任务。

再往后,需要考虑数据库服务器的承压能力,通常可以采用主从式数据库服务器架构,把读、写两部分分开,既可以提高数据访问的安全性,也能提高数据读写的效率。

随着业务量暴增,单一区域的服务器带宽将不能承载全国的业务需求,这时候需要增加反向代理和CDN服务器。CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。

同样,服务器架构师应该分析文件服务器和数据库服务器的网络读写速度,进一步部署分布式文件和分布式数据库的架构。

对于有搜索和大量查询的网络业务,还需要增加独立的搜索引擎和NoSQL服务器。

对于更复杂的系统,还需要进一步拆分应用服务器,增加消息队列服务器。增加消息队列服务器有以下几点好处:

1,由于消息队列服务器的速度远远高于数据库服务器,所以能够快递处理并返回数据;

2,消息队列服务器具有更好的扩展性;

3,在高并发的情况下,延迟写入数据库,可以有效降低数据库的压力。

对于一些超大型综合互联网业务,应用服务器也需要分布式的架构,这个时候在不同业务的应用服务器之间做好消息协同会有较大的挑战。

读完后,是不是感觉很简单,基本上就是围绕着应用服务器、文件服务器、数据库服务器,以及不断提升其性能需要增加的服务器。好在如今腾讯云、阿里云、金山云都提供了完整的解决方案,有空去他们官网看看,一周即可完成百万并发业务部署,一个月时间完成千万并发业务部署也不是不可能。

aHR0cDovL3dlaXhpbi5xcS5jb20vci9WVHI0NERyRTFtZXByWDZEOTI5SA== (二维码自动识别)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【mySQL】MySQL数据库知识整理
  • 【mySQL】Mysql InnoDB 共享表空间和独立表空间 区别和优缺点
  • 【算法】程序的时间复杂度计算
  • 【算法】CRC、MD5、SHA1区别
  • 【libevent 】libevent 多线程实现高并发
  • 【redis】hiredis-vip (hiredis封装成支持cluster的api)
  • 【知识】IPxx防水等级 说明
  • 【安全】哈希(hash)算法可以防止数据被篡改的原理是什么
  • 【数据库】时序数据库InfluxDB 性能测试和为什么时序数据库更快、时序数据库应用场景...
  • 【安全编码】代码质量|C语言安全编码---增加中
  • python的静态变量和静态方法
  • 【C++】libevent 、libev、 libuv 、asio、 muduo、 ace 等C++ 网络库
  • 【工具】Fiddler HTTP 抓包工具使用教程
  • 【测试】Cunit单元测试
  • 【VS linux】使用Visual Studio 2017开发Linux程序
  • Bootstrap JS插件Alert源码分析
  • Java的Interrupt与线程中断
  • Vim Clutch | 面向脚踏板编程……
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 力扣(LeetCode)965
  • 面试总结JavaScript篇
  • 扑朔迷离的属性和特性【彻底弄清】
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 前端知识点整理(待续)
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 三分钟教你同步 Visual Studio Code 设置
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 学习笔记:对象,原型和继承(1)
  • 原生js练习题---第五课
  • 再次简单明了总结flex布局,一看就懂...
  • hi-nginx-1.3.4编译安装
  • 函数计算新功能-----支持C#函数
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • !$boo在php中什么意思,php前戏
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #HarmonyOS:基础语法
  • #考研#计算机文化知识1(局域网及网络互联)
  • (003)SlickEdit Unity的补全
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (4) PIVOT 和 UPIVOT 的使用
  • (js)循环条件满足时终止循环
  • (Note)C++中的继承方式
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (四)c52学习之旅-流水LED灯
  • (万字长文)Spring的核心知识尽揽其中
  • (限时免费)震惊!流落人间的haproxy宝典被找到了!一切玄妙尽在此处!
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (学习日记)2024.02.29:UCOSIII第二节
  • (一)插入排序
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • .mp4格式的视频为何不能通过video标签在chrome浏览器中播放?
  • .net php 通信,flash与asp/php/asp.net通信的方法