高性能后台服务器架构设计

全面高性能高并发服务器架构解决方案教程 每个线程都需要一个入口函数,这个函数定义了线程启动后将要执行的代码。该函数必须符合操作系统的线程函数规范。 阅读详情
        本文转自 高性能后台服务器架构设计
如何设计高性能的大型网站系统?在移动互联网时代,客户端应用开发本身,并不是体验的决胜之处,真正对团队挑战的地方,还在于后端,无论是承压能力,还是安全性等方面,如果这些地方过不了关,整个应用的基础是不扎实的。
           提高服务器性能最简单粗暴的方式,就是增加机器和升级硬件配置。虽然现在的硬件越来越便宜,但是一味地通过增加机器来解决并发量的增长,成本是非常高昂的。结合技术优化方案,才是更有效的解决方法。

一、web端性能
           这几年,用户数量并没有出现指数增长,而并发连接数呈指数增长的主要原因是:1、Web页面元素越来越多,更为丰富;2、主流的本浏览器的预加载功能。
           (1)、建立长连接。减少反复的创建和销毁连接行为。但是,连接的保持是会占用Web系统服务端资源的,如果不充分使用这个连接,会导致资源浪费。
           (2)、通过缓存减少Web请求。通过Http协议头中的expire或max-age来控制,将静态内容放入浏览器的本地缓存。但是,这种方案,对首次访问的用户无效,同时,也影响部分Web资源的实时性。
           (3)、通过版本号减轻Web请求。协商方式是通过Http协议的Last-Modified或Etag来控制,这个时候请求服务器,如果是内容没有发生变更的情况,服务器会返回304 Not Modified。但是,,但是连接仍然被建立,请求也发生了。
           (4)、合并页面请求。1、合并HTML展示内容。将CSS和JS直接嵌入到HTML页面内,不通过连接的方式引入。2、Ajax动态内容合并请求。对于动态内容,将10次Ajax请求合并为1次的批量信息查询。3、小图片合并,通过CSS的偏移量技术Sprites,将很多小图片合并为一张。4、压缩css,js,图片的大小。
           (5)、页面静态化。页面上的大部分内容在很长一段时间内,可能都是没有变化的。例如一篇新闻报道,一旦发布几乎是不会修改内容的。这样的话,通过CGI生成的静态html页面缓存到web服务器的磁盘本地。
 
二、app端性能。
             (1)图片三步加载。从内存、磁盘、网络三个方面上进行三级缓存的实现。1、在加载一张图片的时候,先查看内存是否有该图片的缓存,若无,再查看磁盘时候有该图片的缓存,若无,才从网络中加载;2、在网络加载完成之后,需要把图片加进到内存和磁盘缓存中;3、根据LRU调度方式对缓存进行管理。
              (2)预加载技术。基于历史浏览记录和对该网页的安全性判断,在你没点击请求之前,预先加载这个数据。
           (3) 路由计划表。对用户每天登陆的上网行为和不同行为连接哪个机房,做了一个路由计划表,推送到客户终端上。当用户的网络发生切换,我们就知道这个网络情况下他应该连到哪里最快。
           (4)上传加速。在全国部署了超过70个上传加速节点,让每个用户都会选择他最近的上传节点上传他的图片。同时有启用多端口、多连接的上传加速能力,可以尽可能的用尽网络资源,而不是说在一个连接上不停的等待数据包的重传等各方面的东西。

三、带宽
            计算带宽要涉及到两个指标(页面平均大小、全天pv), 可以从access日志统计到详细数据。平均流量 = (全天pv/(24*60*60)) * 页面平均大小。峰值流量 = 平均流量 * 5。需购买的带宽等于 峰值流量。
            但是活动日的峰值流量远不止这个数。2015年微信红包除夕摇一摇总次数110亿次,峰值1400万次/秒。应对活动日,需 提前 在活动当天CDN将准备数百G带宽应对。

四、后台性能。
           大型网站不是设计出来的,而是逐步演化出来的。因为互联网发展运行有其自己的规律,互联网历史已经一再证明“一开始就把网站设计成大型的”这种企图行不通。另外,演化过程中,需要分清当前哪个点是瓶颈,需要知道哪个点优化的优先级最高。所以,技术架构的演进不一定就是按文章从头到尾这样列下来的,要视具体情况来下决定。
           从一个小网站说起,一台服务器也就足够了。演进包括如下:
           (1) 数据服务器和应用服务器分离。给应用服务器配置更好的 CPU,内存。而给数据服务器配置更好更大的硬盘。
           (2) 使用缓存。因为 80% 的业务访问都集中在 20% 的数据上,如果我们能将这部分数据缓存下来,性能一下子就上来了。空数据也要入缓存,否则会增加数据库的压力。
       (3)nosql。NoSql数据库大量应用于微博系统等事务性不强的系统。如:BigTable、MongoDB 
       (4)服务器集群。需要考虑:负载均衡问题? 负载均衡调度服务器,如nginx。Session 的管理问题。如何让上传文件这些类似的功能继续正常?采用文件服务器统一管理。
       (5)数据库读写分离。订阅和发布。实现一个数据访问模块使上层写代码的人不知道读写分离的存在。需要考虑:时延问题。MySQL数据同步是通过 binlog日志。延迟问题通过水平拆分服务来提高性能、多线程同步解决。
       (6)数据库拆分。垂直拆分数据库时,会遇到的问题:跨业务的事务,应用的配置项多了。数据水平拆分会遇到的问题:SQL 的路由问题,需要知道某个 User 在哪个数据库上。主键的策略会有不同。查询时的性能问题,如分页问题。
       (7)CDN。分布式文件系统使用 CDN 。将网站的内容发布到最接近用户的网络”边缘”,使用户可以就近取得所需的内容,解决Internet网络拥塞状况,提高用户访问网站的响应速度。据统计,采用CDN技术,能处理整个网站页面的 70%~95%的内容访问量,减轻服务器的压力,提升了网站的性能和可扩展性。异地部署一般遵循:核心集中,节点分散。如:网宿、睿江、蓝讯,将网站内容同步到全国CDN节点,客户就近访问CDN服务器。
           (8) 分布式拆分。网站的业务日益复杂,建立一个独立的大型应用来完成这所有的业务变得不实际。从管理角度来,也不方便管理。 将系统根据职责进行拆分,同时也能采用大量的廉价机器来支撑着巨大的访问量和数据量。微服务架构的优势很明显:耦合度低、技术选型灵活、发布更加高效、故障隔离 。拆分会碰到很多的挑战:1、拆成分布式后需要提供一个高性能、稳定的通信框架,并且需要支持多种不同的通信和远程调用方式;2、将一个庞大的应用拆分需要耗费很长的时间,需要进行业务的整理和系统依赖关系的控制等;3、如何运维(依赖管理、运行状况管理、错误追踪、调优、监控和报警等)好这个庞大的分布式应用。
       (9)大系统小做。将功能复杂较大的系统,化大为小,减少模块耦合,降低关联性。分成一个个高度自制的小系统,形成高内聚低耦合的格局,每个模块之间不会过分依赖对方,这样的好处是不会因为任何一个模块而影响全部服务,避免牵一发动全身的风险,实现真正的灰度服务。 
           (10) 硬件负载均衡。一台Nginx服务器的软负载已经无法承担巨大的web访问量了,可以用硬件负载解决F5或应用从逻辑上做一定的分类,然后分散到不同的软负载集群中。

五、业务方式
           有些问题用技术手段并不比用业务手段更有效。12306 的分时卖票就是一个典型例子。
           (1)前端缓冲请求。比方说在接入层置入摇红包逻辑,将每秒千万级请求转化为每秒万级的红包请求,再传到红包服务的后端逻辑,降低雪崩的可能性。
           (2)后端采用异步分拆。耗时最长的入账操作,直接跳过,异步处理。如:“当前人数较多,收到的红包将稍后入账零钱”
           (3)快速拒绝。在客户端的版本更新中,将相关的指令和策略埋入,当接受数据获取异常时,在客户端自动就降低请求频率,比如一次请求失败,用户肯定想二次再刷,但是可能实际上没有向后端请求,而是直接返回,请客户稍安勿躁,如果不提前埋入,到有问题时才处理是来不及的。
           (4)流量预加载。从客户端入手,将语音图片等极消耗流量的资源提前让客户端自动下载预置好,提前将流量洪峰疏导。
           (5)资源隔离。避免任意一个支路出问题影响整个服务链条,这样即使部分服务出现问题也不会影响到整个服务的崩塌。
           (6)根据业务场景降低图片质量。1、针对不同终端,下载不同质量图片。2、研究新的编码格式,使得图片在基本同等质量情况下再下降30%。3、应用一些渐进式的传输技术,你会首先看到模糊的图,一会儿清晰的图就会出现。
           (7)回滚机制会造成业务逻辑复杂,容易出错,可能会出现漏洞。我们应该提高服务的简单性、高可用性,减少出错率。对于极少的错误,后续对日志进行单独处理即可。

六、最大连接数限制
           (1)全程压测流程,对整个业务链接进行自动提前评估,防止过载。
           (2)柔性可用要求我们对各种特性一开始就是分好级别(登录>文本消息>图片消息>好友状态呈现>键盘活动提示)。
           (3)模块间调用的超时时间如果设置不合理,会导致柔性策略失效。A调用B是300ms超时,B调用C是500ms超时;B对c有柔性,调用c超时的时候会柔性的继续往下,但是这个没有意义。
           (4)如果成功率高于95%,才可以重试,否则接口层拒绝。

参考文献:
1、大型网站技术架构的演进   http://news.cnblogs.com/n/518851/
2、高并发Web服务的演变   http://www.admin10000.com/document/6190.html
3、网站服务架构 http://www.cnblogs.com/jiekzou/p/4677994.html
4、微信产品经理和架构师们是靠什么扛住了10亿个红包?   http://www.woshipm.com/pmd/138987.html
5、解密腾讯亿级产品背后的网络架构故事   http://news.idcquan.com/news/66660.shtml
6、为什么Chrome浏览器特爱吃内存   http://www.admin10000.com/document/6318.html
7、大型网站技术架构:核心原理与案例分析,李智慧

【机器人路径规划】基于改进型A*算法的机器人路径规划(Python代码实现) 本文针对传统A算法在机器人路径规划中存在的搜索效率低、路径不平滑等问题,提出了一种改进型A算法。该算法通过引入跳点搜索(JPS)技术优化子节点扩展方式,结合贝塞尔曲线或B样条曲线进行路径平滑处理,并采用动态启发式函数和自适应邻域搜索策略,显著提升了路径规划的效率和路径质量。实验结果表明,改进型A*算法在复杂环境下能有效减少搜索节点数量,缩短路径长度,提高路径平滑性,且具备动态避障能力。 阅读详情

相关推荐

ubuntu 24.04安装ros1 noetic

上面是参考链接给的修改内容。除了上面要修改的地方,我在编译的生活还有一个地方报错,修改成如下形式。因为我已经对文件rosconsole_log4cxx.cpp作了上面的修改,所有是不是188行不太确认了,如果报“log4cxx::spi::LocationInfo”问题,按照下面修改就可以了。我在编译时还报了一个问题,就是我之前安装的是jazzy。所以在编译时会报ros变量名不对,这时对变量名做修改就可以了。具体怎么修改,百度。a、将源文件中所有CMakelist中编译标准改为c++ 17.

yangpan011的博客 3201

后端微服务架构:分布式系统的未来

1.背景介绍 随着互联网和人工智能技术的发展,我们正面临着处理大规模数据和实时性要求的挑战。传统的单体架构已经无法满足这些需求,因此,后端微服务架构成为了一个热门的研究和实践领域。在这篇文章中,我们将深入探讨后端微服务架构的核心概念、算法原理、实例代码和未来趋势。 2.核心概念与联系 2.1 微服务 微服务是一种软件架构风格,它将应用程序拆分成多个小的服务,每个服务都负责一个特定的业务功能...

AI天才研究院 1419

用AI画电路板AI EDA初探Creating WiFi Radio with CELUS: A Step-by-Step Tutorial 使用CELU.IO创建WiFi收音机:分步教程

结论:整体还不太成熟,所选器件单元是欧美思维,器件选型成本和咱们华强北还是无法比。可以关注迭代,看客就当走马观花就行了;不过里面的单元模块还带有AI提问的这个比较好,值得国内EDA从业者学习。话不多说上正文:本教程目的是让我们深入了解如何使用CELUS设计平台构建WiFi收音机实战项目。本指南的重点是使用该平台来选择正确的解决方案,并整合一个项目,让您可以将音乐和节目从互联网直接传输到您自己构建的扬声器。

2301_81235726的博客 1万+

软件架构之前后端分离架构&服务器端高并发演进之路

这样的前后端分离架构,使得在消耗计算机硬件如高性能、高可用方面能够有效剥离出来,只用一心一意的考虑把后端代码达到性能更优。下面介绍服务器端的性能优化演进之路。

weixin_46448719的博客 3242

C# OpenCvSharp4实战:5分钟搞定工业视觉模板匹配(附完整代码)

本文为C#开发者提供了基于OpenCvSharp4的工业视觉模板匹配实战指南。通过详细的环境搭建、核心原理解析和完整代码示例,重点介绍了如何使用`matchTemplate`函数,特别是`CCoeffNormed`方法,快速实现高精度、抗光照变化的模板匹配,并分享了多目标匹配、图像预处理等工业级优化技巧。

weixin_29053067的博客 502

Laravel 结合 jwt-auth 实现无状态 API 认证(实战解析)

本文详细解析了如何在Laravel框架中结合jwt-auth实现无状态API认证,包括JWT的优势、环境搭建、Token签发与刷新、API路由保护等实战内容。通过具体代码示例和优化技巧,帮助开发者高效解决跨域认证问题,提升系统安全性。

weixin_29315569的博客 210

后端服务架构高性能设计之道

本文主要探讨和总结服务架构设计中高性能的技术和方法,如下图的思维导图所示,左边部分主要偏向于编程应用,右边部分偏向于组件应用,文章将按图中的内容展开。本文探讨和总结了后台开发设计高性能服务的常用方法和技术,并通过思维导图总结了成一套方法论。当然这不是高性能的全部,甚至只是凤毛菱角。每个具体的领域都有自己的高性能之道,如网络编程的 I/O 模型和 C10K 问题,业务逻辑的数据结构和算法设计,各种中间件的参数调优等。文中也描述了一些项目的实践,如有不合理的地方或者有更好的解决方案,请各位同仁赐教。

LoveSummer 4万+

ComfyUI-controlnet控制出图

提供加载预处理器节点。

Bu2n的博客 5494

后端架构学习

这里的架构说的是后端的架构的发展。如果要包括前端的话,基本上采用的都是c/s的架构模式。1. 什么是后端服务的架构?怎么去理解后端架构这个词?4. 产品经理和业务架构师做的事情到底有什么不同?6. 要提高系统的复用性需要做好哪些事情?3. 日常应该怎么去积累架构的能力?2. 后端架构需要关注哪些事情?5. 架构发展的历史。

langsiming的博客 4707

SpringBoot 系列教程(二):SpringBoot使用Devtools实现热部署

1.devtools   spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用。 2.项目搭建   本文是采用IDEA搭建的Spring Boot应用,通过spring-boot-devtools配置,可以支持修改java文件会自动重启程序,一些资源无需触发重启,...

Thinkingcao的专栏 1215

流体动力学仿真软件:XFlow_(16).案例研究:热传输与相变

包括密度、比热容、热传导系数等。

kkchenjj的博客 722

高性能后台服务器架构,高性能后台服务器架构设计

如何设计高性能的大型网站系统?在移动互联网时代,客户端应用开发本身,并不是体验的决胜之处,真正对团队挑战的地方,还在于后端,无论是承压能力,还是安全性等方面,如果这些地方过不了关,整个应用的基础是不扎实的。提高服务器性能最简单粗暴的方式,就是增加机器和升级硬件配置。虽然现在的硬件越来越便宜,但是一味地通过增加机器来解决并发量的增长,成本是非常高昂的。结合技术优化方案,才是更有效的解决方法。一、we...

weixin_39960793的博客 294

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

高性能后台服务器架构设计,互联网架构设计:高性能的后端

先简略回顾一下。对于互联网产品的高性能架构设计一般包括如下几个大方面:redis1)Web浏览器高性能设计sql2)App客户端高性能设计数据库3)高性能的网络和硬件编程4)后台服务高性能设计后端 后端服务通常指用户直接看到的远程服务,涉及到网络硬件、逻辑计算、通讯协议和数据存储等部分。下面咱们将着重介绍高性能后台服务的设计方法和策略。浏览器一、高性能的网络和硬件缓存网络硬件是提供实现高性能服务的...

weixin_35543991的博客 928

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

muduo学习(一)

1.高性能服务器架构设计 看这里 2.影响高性能服务器的四大杀手 看这里

sdsc1314的博客 191

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

linux eclipse c++ 如何生成arm可执行文件_linux后台开发具备能力集锦

Linux后台开发应该具备技能给大家分享一篇:C/C++ Linux 后台服务器开发高级架构师学习路线一、linux和os:1、命令:netstat tcpdump ipcs ipcrm 这四个命令的熟练掌握程度基本上能体现实际开发和调试程序的经验Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多...

weixin_42390092的博客 311

*一文详解高性能服务器架构设计

初始情况:一个典型的服务器结构 添加数据访问层DAL,解决超出连接次数的问题 添加缓存 即使添加了DAL,但是数据库每秒允许建立的连接总会有上限,可以从不与数据库建立连接就能访问数据库中的数据着手,来提高访问效率。 答案:添加缓存,将数据库经常访问的数据,假如到缓存,可以使得访问数据时不与数据库建立连接,而是直接从缓存中查找。 ...

JaweG 7793
上一篇: socket通信服务端编程
下一篇: lsof命令
LinuxG_G
博客等级 码龄15年 58粉丝 176原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值