负载均衡与服务器架构
2.5 WebServer、负载均衡、服务器架构
Nginx 与负载均衡
反向代理
将用户请求转发给内部服务器,保护内网拓扑结构
/ static file /cache hit─>Redis/NoSQL/ // /Gunicorn + Django-1─>cache miss─>MySQL/PgSQL client─>NginX─>HaProxy─Gunicorn + Django-2\Gunicorn + Django-3
可以解析用户请求,代理静态文件
NginX负载均衡
轮询:
upstream backserver { server 192.168.0.14; server 192.168.0.15; }
- 权重: weight```upstream backserver { server 192.168.0.14 weight=10; server 192.168.0.15 weight=10; } ```- IP哈希: ip_hash```upstream backserver { ip_hash; server 192.168.0.14:88; server 192.168.0.15:80; } ```- fair```upstream backserver { server server1; server server2; fair; } ```- url_hash```upstream backserver { server squid1:3128; server squid2:3128; hash $request_uri; hash_method crc32; } ```- 最小连接数: least_conn
其他负载均衡
- F5: 硬件负载均衡设备, 性能最好, 价格昂贵(30-50一个,买一对)
- LVS: 工作在 2层 到 4层 的专业负载均衡软件, 只有 3 种负载均衡方式, 配置简单,中国人(章文嵩)开发
- 七层网络模型:ISO标准
- 四层网络模型:TCP工业实现
HAProxy: 工作在 4层 到 7层 的专业负载均衡软件, 支持的负载均衡算法丰富
- 性能比较: F5 > LVS > HAProxy > Nginx
LVS 的优势
常规负载均衡
进出都要经过负载均衡服务器. 响应报文较大, 面对大量请求时负载均衡节点本身可能会成为瓶颈
发送请求: User -> LoadBalancer -> Server 接收响应: User <- LoadBalancer <- Server
LVS DR 模式
LoadBalancer 与 Server 同在一个网段, 共享同一个公网 IP, 响应报文可以由 Server 直达 User
发送请求: User -> LoadBalancer -> Server 接收响应: User <───────────────── Server
可以不使用 Nginx, 直接用 gunicorn 吗?
- 测试可以,正式不可以。
Nginx 相对于 Gunicorn 来说更安全
- Nginx 可以用作负载均衡.
处理静态文件相关配置
location /statics/ {root /project/bbs/;expires 30d;access_log off; }location /medias/ {root /project/bbs/;expires 30d;access_log off; }
面试题:
- Nginx如何做负载均衡?
## 服务器架构
架构研究的 5 个方面
- 高性能:请求再多,也能服务
- 高可用:情况再糟,也能服务
- 可伸缩:请求多了能服务,请求少了也能节省下来资源
- 可扩展:能不断的加新的服务
- 安全性:完成以上能力的前提是,不出安全问题
简单、实用的服务器架构图
- 分层结构: 功能模块解耦合
- 每层多台机器: 有效避免单点故障
- 每层均可扩容: 能通过简单的方式提升服务器的性能、可用性、扛并发能力
User Request cli_ip(12.23.34.45) -> ip_hash: 3| | | |V V V Vwww.example.com ---> 第一层云服务负载均衡Nginx Nginx ---> 云 115.2.3.11 115.2.3.12 / | \ / | \/ | X | \V V V V V V AppServer AppServer AppServer AppServer ---> Gunicorn + Django 10.0.0.1 10.0.0.2 10.0.0.3 10.0.0.4 ---> AppServer 绑定内网 IP weight:10 weight:20 weight:20 weight:20 ---> 权重| | | |V V V V +------------------------------------------+ | 缓存层 主机 <--> 从机 | +------------------------------------------+| | | |V V V V +------------------------------------------+ | 数据库 主机 <--> 从机 | +------------------------------------------+
服务器架构的发展
早期服务器, 所有服务在一台机器
[外链图片转存失败(img-2uD2dXPo-1566997409769)(./img/arch-1.jpg)]
服务拆分, 应用、数据、文件等服务分开部署
[外链图片转存失败(img-R2UBBZjs-1566997409770)(./img/arch-2.jpg)]
利用缓存提升性能
[外链图片转存失败(img-EZMFQXpX-1566997409771)(./img/arch-3.jpg)]
应用服务器分布式部署, 提升网站并发量和吞吐量
[外链图片转存失败(img-qhqAimF1-1566997409772)(./img/arch-4.jpg)]
通过读写分离读写分离提升数据库性能和数据可靠性
[外链图片转存失败(img-T8RLwfz5-1566997409773)(./img/arch-5.jpg)]
使用反向代理、CDN、云存储等技术提升静态资源访问速度, 并能有效提升不同地域的访问体验
[外链图片转存失败(img-1i3S2DlV-1566997409774)(./img/arch-6.jpg)]
通过分布式数据库和分布式文件系统满足数据和文件海量存储需求, 并进一步提升数据可靠性
[外链图片转存失败(img-W3AoAxnY-1566997409775)(./img/arch-7.jpg)]
增加搜索引擎 和 NoSQL
[外链图片转存失败(img-dZ33MaZR-1566997409776)(./img/arch-8.jpg)]
增加消息队列服务器, 让请求处理异步化
[外链图片转存失败(img-edHfdWHX-1566997409777)(./img/arch-9.jpg)]
拆分应用服务器与内部服务
[外链图片转存失败(img-VINsSSK2-1566997409778)(./img/arch-10.jpg)]
- 微服务
- flask restful
服务器计算
费米预测
服务器性能预估
首先需知道网站日活跃 (DAU) 数据
按每个活跃用户产生 100 个请求计算出 “每日总请求量”
不同类型的网站请求量差异会很大, 可以自行调整一个用户产生的请求数
每日总请求量 = DAU x 单个用户请求量
有了总请求量便可计算 “每日峰值流量”, 流量一般单位为 rps (requests per second)
根据经验可知: 每天 80% 的请求会在 20% 的时间内到达
由此可知:
每日总请求量 x 80% 每日峰值流量 = ───────────────────────86400 x 20%
一般带负载的 web 服务器吞吐量约为 300rps, 所以:
WebServer 数量 = 每日峰值流量 / 300
得到 WebServer 数量以后, 再根据用户规模和请求量估算 Nginx、Cache、Database 等服务器的数量
真实工作中服务器分配情况
- 业务类型:
- 新闻网站:单用户产生请求:30 - 50
- 游戏网站:单用户请求可能:100 - 200
- 社区网站:单用户请求可能:50 - 100
- 平均可以取 100
- 每日总请求 = DAU * 单用户每日请求
- DAU 20万:200000 * 100 = 20,000,000 两千万
- DAU 50万:5000 万
- DAU 100万:1亿
- DAU 200万:2亿
- 峰值请求:
- 按经验所有请求在10小时内发生
- 峰值请求 = 每日总请求 / 10 / 3600
- 20万:20000000 / (10 * 3600) = 556
- 100万:556 * 5
- 200万:
- 峰值请求 = 每日总请求 / 10 / 3600
- 按80%的请求在20%的时间内发生
- 峰值请求 = 每日总请求 * 80% / (24 * 20%)
- 20万DAU:926次/秒
- 峰值请求 = 每日总请求 * 80% / (24 * 20%)
- 按经验所有请求在10小时内发生
- 服务器预估
- 单 Web 服务器并发 500 rps
- 20万:峰值请求 / 500 = 2台
- 100万:556 * 5 / 500 = 6台
- 单 Web 服务器并发 500 rps
- 相册服务
- 业务限制用户照片,或者等用户上传后自动帮用户压缩
- 5M = 500kB
- 预估每个用户多少张照片:
- 500张
- 2000张
- 每张照片多大 2-9
- 平均5M
- 一个用户总空间多少?
- 500 * 5MB = 2500MB = 2.5GB
- 2000 * 5MB = 10GB
- 每个服务器存多少张照片
- 10TB = 1000GB = 1000个用户
- 20万 200台服务器
- 用户20万
- 用户100万
- 用户200万
- 业务限制用户照片,或者等用户上传后自动帮用户压缩
- 业务类型:
面试题:
- 你们有多少用户?
- 多少日活?
- 多少服务器?
- 服务器并发有多高?
负载均衡与服务器架构相关推荐
- 单一nginx负载均衡+LNMP分布式架构
随着互联网的快速发展,我们的web站点访问量和数据流量的快速增长,对于我们服务器的处理能里的要求也越来越高,这样的情况下,单一的服务器根本无法承受, 这样的话我们丢弃掉原有的设备,做硬件升级,会造成 ...
- 负载均衡在分布式架构中是怎么玩起来的?
什么是负载均衡(Load balancing) 在网站创立初期,我们一般都使用单台机器对台提供集中式服务,但随着业务量越来越大,无论性能还是稳定性上都有了更大的挑战.这时候我们就会想到通过扩容的方式来 ...
- 汇总-13台虚拟机搭建一个高可用负载均衡集群架构
要求 用13台虚拟机搭建一个高可用负载均衡集群架构出来,并运行三个站点,具体需求如下. 设计你认为合理的架构,用visio把架构图画出来 搭建lnmp.tomcat+jdk环境 三个站点分别为:dis ...
- SharePoint咨询师之路:设计之前的那些事四:负载均衡 - web服务器
SharePoint咨询师之路:设计之前的那些事四:负载均衡 - web服务器 提示:本系列只是一个学习笔记系列,大部分内容都可以从微软官方网站找到,本人只是按照自己的学习路径来学习和呈现这些知识.有 ...
- f5负载均衡配置文件服务器,f5 负载均衡 dns 服务器 配置
f5 负载均衡 dns 服务器 配置 内容精选 换一换 查询负载均衡器状态树.可通过该接口查询负载均衡器关联的监听器.后端云服务器组.后端云服务器.健康检查.转发策略.转发规则的主要信息,了解负载均衡 ...
- SAP Netweaver的负载均衡消息服务器 vs CloudFoundry的App Router
Message server for ABAP Netweaver SAP传统应用经典的三层架构: 起到负载均衡的消息服务器(Message Server)在图中没有得到体现.然后,消息服务器在我们每 ...
- 游戏服务器高性能负载均衡,游戏服务器高可用负载均衡
游戏服务器高可用负载均衡 内容精选 换一换 公有云提供弹性公网IP(EIP).NAT网关.弹性负载均衡(ELB)等方式连接公网.EIPEIP提供独立的公网IP资源,包括公网IP地址与公网出口带宽服务. ...
- 简直无敌!反向代理、负载均衡实战,架构师必备!
前言 我们说 Kafka 是一个消息队列,其实更加确切的说:是 Broker 这个核心部件.为何这么说?你会发现我们可以通过控制台. Java 代码. C++ 代码.甚至是 Socket 向 Brok ...
- 消息服务器 负载均衡,(33)负载均衡上报Host主机信息API(LoadBalanceAgent部分)-【Lars-基于C++负载均衡远程服务器调度系统教程】...
[Lars教程目录] 7) 负载均衡上报Host主机信息API(V0.4) 7.1 proto通信协议定义 syntax = "proto3"; package lars; /* ...
- f5服务器负载均衡性能指标,服务器负载均衡f5
服务器负载均衡f5 内容精选 换一换 创建私网类型的负载均衡器.创建成功后,该接口会返回创建的负载均衡器的ID.所属子网ID.负载均衡器内网IP等详细信息.若要创建公网类型的负载均衡器,还需调用创建弹 ...
最新文章
- 高精度地图量产难,四维图新利用优势准备实现突破
- AWS 发布了新的负载均衡器 ALB
- python编写一个程序、实现文件的复制_写个python 脚本实现文件的递归拷贝
- 那些奇奇怪怪的男性用品......
- LeetCode 18. 四数之和 思考分析(双指针解)
- 【kafka】kafka 如何开启 kafka.consumer的监控指标项
- golang https 代理_代理,生活中随处可见,Go中如何进行 HTTPS 代理呢?
- 图片适应窗口_毕业论文排版保姆级教程——图片和公式排版
- jep-java-4.0-trial.jar 下载
- html5论文参考文献合集
- wps下一步快捷键_WPS常用快捷键大全(附下载)
- jclasslib的使用
- 阿里 java 电话面试_阿里Java开发电话面试经历--惨败
- API调用,API传参,面向对接开发,你真的会写接口文档吗?
- 实验三 译码器及其应用
- FeedBurner 被阻尼,Feed 托管转到 FeedSky
- 英语语法特殊句型刷题总结
- 唐代:李白《将进酒》《行路难》《蜀道难》《送友人》
- C++ 万年历 查找年、月、日、星期数以及节日等信息
- vue + gifshot 实现GIF动图