新闻国家大事,做百度移动网站优化排,专业手机网站建设价格,为什呢网站打开wordpress很慢文章目录
目录 文章目录
前言
一、通用设计
一、动静分离 二、数据库独立部署 三、问题
1.高并发通用设计方法
2.高并发系统的拆分顺序
二、计算资源高并发
三、网络资源高并发
超高性能场景#xff08;10万 QPS#xff09;
中小规模场景#xff08;5万 QPS以下10万 QPS
中小规模场景5万 QPS以下
四、数据库高并发
五、 前言
高并发设计可以分为5个部分1.通用设计
1.
面对100万级别的QPS该怎么设计
请看以下步骤 一、通用设计
一、动静分离
动静分离是高并发的第一步
最开始的项目我们都是要apache tomcat 来承载动态java http请求和静态文件将html、css等放入static文件而使用动静分离是指的将静态文件前端预先加载到页面上的内容放入nginx中
为什么用nginxnginx处理性能大概是tomcat的4倍 使用云服务
CDNContent Delivery Network内容分发网络 是优化静态资源访问速度和降低服务器负载的核心手段
将全部资源交给云服务厂商的CDN来承载还以获得90%的CPU节省 对比
场景CDN 直接承载Nginx CDN架构复杂度无需服务器纯云服务需维护 Nginx 服务器成本按需付费存储流量服务器固定成本 CDN 流量成本扩展性自动弹性扩展需手动扩容服务器适用场景纯静态资源 需动态生成内容如缩略图 二、数据库独立部署
如果使用nginx来承载静态资源之后云主机还是扛不住流量那么这时候就应该再用一台主机来专门跑数据库甚至有些数据库是部署到多台服务器上 一般来说我们不会将项目后端代码和数据库部署到同一台服务器上这种是典型的灾难架构 这里建议直接使用云服务商的云数据库因为一旦你的qps超过1000自建数据库就很难满足要求了如果搭建集群小公司成本又太高而直接使用云数据库就不会出现这种问题他会自动调整资源 三、问题
1.高并发通用设计方法
高并发系统遇见瓶颈一定是某个资源点到达极限例如数据库服务器带宽等因此需要找到这个受限点拆分并解决
1.负载均衡分散请求到多个服务器减少单台服务器压力例如nginx
2.缓存技术将经常访问的数据放入缓存内存中减少数据库压力并提高系统响应速度例如redis
3.异步处理多线程方式让任务在后台处理而主线程先返回。提高系统响应速度释放服务器占用线程
4.消息队列将庞大的任务放入消息队列由另一个线程或者多个线程来处理实现异步削峰解耦等作用
5.数据库优化优化SQL,设置数据库集群都可以提高数据库响应速度从而提高系统响应
6.水平扩展拆解系统分别部署到不同服务器来减少单台服务器cpu压力
7.服务隔离高并发系统中不同的模块或者说平台一般都有隔离开保证不同服务之间互不影响
2.高并发系统的拆分顺序
高并发系统的拆分应该从静态资源开始拆分然后在到数据库和服务器机器分离然后再设计负载均衡和分布式架构最后再利用数据库集群和分布式数据库来提升数据库能力期次再考虑其他优化手段
1.静态资源拆分将原本后端项目集成的静态资源拆分到nginx或者cdn中进行存储
2.数据库和后端服务机器分离将数据库和后端服务放到不同的机器上这样能减少数据库压力并提高扩展能力
3.负载均衡和分布式架构通过负载均衡将同一个项目部署到多台机器也就是多个实例换句话来说就是用户的请求分发到不同的机器上提高系统处理能力同时采用分布式架构将系统拆分成独立模块再利用多个机器同时进行服务进一步提高系统并行能力
4.数据库集群和分布式数据库数据库集群是将多个数据库实例分布到不同的服务器上通过数据同步和故障转移机制保证数据库的高可用分布式数据库是将数据分散到多个节点上每个数据只负责部分数据的存储和查询从而提高整个系统的读写能力
5.基于地域进行数据库拆分 3.静态资源如何加速
1.高性能web服务器
2.CDN服务将静态资源分散到全国用户就能从最近的服务器获取消息减少延迟 二、计算资源高并发
目标拆分计算单点提升并行能力。
主要是部署方法的转变 物理机 → 虚拟机 → 容器化解决计算资源利用率与弹性问题。 阶段核心方案解决的问题瓶颈单服务部署单机运行所有服务简单部署资源争抢CPU/内存耗尽虚拟机部署VMware/KVM 虚拟化资源隔离多应用共存虚拟机启动慢分钟级容器化Docker Kubernetes进程级隔离秒级启动内核兼容性
三、网络资源高并发
这里大致总结就是在7层网络模型上进行高并发的设计
首先gateway或者nginx单台支持的最大qps有限通常32核的支持万级qps那么怎么承担上百万QPS呢这时候就需要在传输层搭建服务LVS,这里能支持百万级别QPS
层级OSI模型代表组件核心职责数据链路层L2 (链路层)F5 (部分功能)MAC地址转发、VLAN隔离网络层L3 (网络层)LVS、F5 (IP转发)IP包路由、四层负载均衡(TCP)传输层L4 (传输层)LVS、HAProxyTCP/UDP连接分发应用层L7 (应用层)Nginx/Kong/GatewayHTTP协议解析、动态路由
通过分层架构 L4 负载层用低成本解决海量连接分发LVS/硬件 L7 网关层专注业务协议处理Kong/Nginx 业务层无网络负担专注计算
超高性能场景10万 QPS 优势 Nginx专做TLS解密C语言极致性能 Gateway专注业务路由无需处理加密 整体吞吐量提升2倍
实例加入现在目标6万QPS 中小规模场景5万 QPS以下 下面是百万QPS的真实案例
层级组件配置数量总处理能力网络入口LVS DPDK64核/128G/100G网卡4台400万 CPSTLS卸载Nginx 加速卡32核/64G/SSL卡20台120万 TPS业务网关Rust网关(io_uring)32核/64G30台450万 QPS微服务商品服务16核/32G50台200万 QPS
四、数据库高并发
核心挑战数据库是“最难以解决的单点”因其需保证 ACID 事务。 存储技术演进 集中式存储如 EMC硬件级高可用但成本极高单 SAN 交换机超 40 万元。 分布式存储通过 x86 服务器集群构建存储池依赖 PCIe 5.0 和 CXL 协议提升 IO 性能降低成本。 数据库架构优化 缓存策略Redis 缓存热点数据OceanBase 等分布式数据库采用“内存全缓存 Redo Log 落盘”方案。 分布式方案 TiDB计算存储分离、ClickHouse列存储解决海量数据分析瓶颈。 分库分表 Paxos 协议保障数据一致性与高可用。 为了提高数据库读写能力搭建读写分离1主多从提高读能力那么写能力呢写是往主节点写入的这时候就需要分布式架构了
第一代分布式架构 使用中间件 sharding-jdbc但是可以说是属于应用层面不不属于通用数据库范畴
第二代出现了kv型数据库nosql(redisKV 数据库结构简单性能优异扩展性无敌但是它只能作为核心数据库的高性能补充
第三个时代newSQL,目前比较常见的 NewSQL 有 ClustrixDB、NuoDB、VoltDB国内的 TiDB 和 OceanBase 也属于 NewSQL
第四个时代云上数据库 例如阿里的PolarDB 缓存和队列
缓存redis消读的峰而队列rockemq,kafka消写的峰
五、
持续更新。。。