云端选型篇
1.全球云厂商占比前三名:亚马逊云、微软云、阿里云
2.全球云厂商特点:在海外的业务部署,建议优先选择亚马逊。在国内互联网业务部署上,建议优先选择阿里云。在私有云、私有化传输方面,建议尝试用华为云。游戏方面建议尝试腾讯云。若对云产品功能特性、存储或者其他细分领域有需求,建议用Ucloud、七牛云等。
3.阿里云产品概要: 阿里云共发布了近200个产品,主要有7大类,包括人工智能、云计算基础、物联网、大数据、安全、企业应用、开发者服务。这多么多产品,必须要选择的有5个云产品:
1) ECS(Elastic Compute Service)云服务器
2) RDS (Relational DataBase Service) 关系型数据库
3) SLB(Service Load Balancer)负载均衡
4) OSS(Object Storage Service) 对象存储服务
5) VPC(Virtual Private Cloud) 专有网络
当然还有很多大家熟悉的云产品,比如CND、Reids等相关产品,不是必须的。
4.在实际部署中,要让数据库达到最佳性能,我们一般采用CPU和内存配比为1:4,如4核16GB,8核32GB。
5.选择自建环境的条件:主要从功能性和灵活性等方面考虑,这是自建的相对优势,云产品如SLB、RDS、CDN等,其核心都是基于开源技术进行了封装并做了相应优化,但同时也给我们带来了相应的限制。
如:1)云SLB产品已经支持虚拟主机,具有七层代表性的核心功能,想用Rewrite等更多七层功能,只能在ECS上搭建Nginx.
2) 云Redis产品必须有密码鉴权,如果客户应用系统框架不支持鉴权,只能在ECS上搭建Redis。
3) 云RDS MySQL不支持Myisam存储引擎,如果客户需要使用,只能在ECS上搭建Mysql。
6.云产品技术优势:默认做了一些安装配置、调优方面、备份方面、高可用方面、安全性方面.
7.云端网络选型:云端目前可选的网络架构包括:经典网络、VPC专有网络、金融云网络等,金融云网络也是基于VPC的专有网络。使用经典网络与VPC专有网络的技术特点对比如下:
1) 网段方面
经典网络的内网是以10开头的随机ip,且内网IP只能随机分配,不能自定义。
VPC专有网络,每个客户都是独立的网络环境,客户可以自定义网络的IP段、网络架构等。购买ECS产品默认就是专有网络。
2) 网卡方面
经典网络绑定公网的ECS(linux系统),系统中网卡是两个, eth0是内网网卡,eth1是公网网卡,如果没有绑定公网,刚经典网络仅有一个内网eth0。
vpc专有网络,即使绑定了弹性IP的ECS网卡也只有一个eth0,绑定弹性ip的时候,公网数据是通过阿里云内部NAT的方式流转到ECS的eth0网卡上的.
这里有个很重要的实践:经典网络下,只能在开通ecs的时候选择绑定公网,否则没办法再绑定公网。弹性ip针对VPC网络,灵活性高,随时可以绑定公网弹性IP,不用了随时解绑。
3)网络实践方面
经典网络:方便快捷,不需要设置vpc,vSwithc、网络规划等,它是随机内网,开通即用,一般适合部署个人应用站点等。
vpc网络:企业默认的网络架构选择,网段划分,网络隔离。
8.入网请求选型四种方法
在云端对ECS实现入网请求的功能,可以通过以下4种实现
1) SLB网络:七层和四层的负载均衡,都能将公网的请求流量引入到EBS中。
2) 公网ip: 经典网络的公网IP,能直接将公网的请求流量引入到ECS中的eth1网卡上。
3) 弹性ip:vpc专有网络的弹性ip,能直接将公网的请求流量引入到ECS中的eth0网卡上。
4) DNAT: 通过端口映射能直接将公网的请求流量映射到ECS的内网端口上。
8.1出网请求选型的三种方法
1) 公网ip:经典网络的公网IP,通过ECS中的eth1网卡将ECS的出公网请求流量发出。
2) 弹性EIP:VPC专有网络的弹性EIP,公网的请求流量在云平台内部通过NAT映射出公网。
3) SNAT:通过路由将公网请求的流量映射到NAT网关,或者一台具有公网访问能力的ECS上,再由这台ECS将公网请求流量转发出云。
9.流量带宽费: 该费用是针对出口流量 ,入口流量不产生费用,这意味着我们上传10GB的文件数据到ECS上是不收费用的,而下载10GB的文件数据则要产生流量费用。如云端1Mbps的配置,只是出口带宽限制1Mbps,不会影响入口带宽限制。
10.阿里云SLB:当前提供四层(TCP协议和UDP协议)和七层(Http和https协议)的负载。四层采用开源的软件LVS(linux virtual Server)+keepalived的方式实现负载。七层采用Tengine实现负载,它是在nginx基础上扩展的,完全兼容nginx的配置。
11.OSI网络分层及对应的传输协议:
7) 应用层,传输协议如http\snmp\ftp\telnet
6) 表示层,传输协议如XDR\SMB
5) 会话层,传输协议如TLS\SSH
4) 传输层, 传输协议如TCP\UDP
3)网络层,传输协议如IP\ICMP
2)数据链路层,传输协议如以太网、令牌环
1) 物理层, 如线路路、无线电、光纤
nginx和HAProxy热门中间件都支持四层和七层负载均衡。最早的LVS是四层,已属于linux的内核。七层的作用是http应用层,所以七层的负载均衡只能跟Tomcat,php,iis等web服务做负载均衡。四层只能获取访问的目标/源ip地址和端口,所以四层的负载均衡,单纯地是将请求轮询转发到后端目标服务器,并不能跟七层一样,做相应逻辑判断(根据域名,URL,浏览器类型 等请求参数转发),然后再转发给符合要求的后端目标服务器,四层的应用场景包括:mysql,LDAP,redis,meecache等四层应用做负载均衡。
七层负载,在后端服务中,http头的remote_addr虽然代表客户端的ip,但实际值是负载均衡的ip,为了避免这个情况,七层负载通常会增加一个叫作x_forwarded_for的头令牌,把连接它的客户端Ip加到这个头信息里,这样保证了后端获取客户端真实的ip.
扩展:正向代理是客户端代理,客户端->代理服务器-->internet互联网。 这样internet互联网不知道真实的客户端,比如,无法访问如google,通过代理ip来访问,google并不知道真实的客户端ip。
反向代理是服务端代理,客户端-->(公网)反向代理服务器(内网)-->web服务器。这样保存了安全,客户端并不知道真实的服务器ip.
12. 负载均衡的性能对比
Tomcat ------1K并发
Apache ------3K~5k并发
IIS -------0.5w~1w并发
SLB/Nginx/HAProxy 七层 ------2w~5w并发
Nginx/HAProxy 四层 ---------- 10w ~50w并发
LVS/SLB 四层 ------- 50w~100w
硬件F5/Nctscalcr ------ 400w~800w
13 云端存储
1结构化数据(数据类型,格式,结构的数据)存储到关系型数据库中
2半结构化数据如json数据文件,xml数据文件
以上二种类型主要为云RDS,云MongoDB,云Redis等。
3 非结构化数据,比如文本文档,图片,视频,日志文件等,主要云OSS对象存储用于解决非结构化数据。
14缓存
1)静态缓存,一般是指web类应用中,将Html,js,css,图片,音频等静态文件/资源能过磁盘/内存等缓存方式提高资源响应速度,减少服务器压力/资源开销的一项缓存技术。技术主要有squid,varnish,nginx.
squid是一个代理缓存服务器,它支持ftp,gopher,https,http协议。
varnish也是一款代理缓存服务器,它支持http代理缓存,相比squid更精简,也性能更好。
nginx的静态缓存需要第三方模块来完成,如nginx+memcache的组合。
它们的对比:
squid:存储在硬盘,性能普通,配置复杂度普通,功能多,效率低.
varnish:存储在硬盘/内存,性能高,配置复杂度简单,功能少,效率低
nginx+memcache:存储内存,性能高,配置复杂度需要编程,功能多,效率高
2)云端静态缓存选型,CDN的静态缓存核心技术就是以上三种方案的体现,只不过CDN将静态缓存的技术产品化,服务化了。
3)云端动态缓存选型,如meecache,redis,它们都是基于key/value数据库。
15 衡量业务量的指标
常见web类应用中的pv,uv,ip,用户数,用户活跃数,在线用户数,并发用户数。
指标pv:计算按天, pv是page view的简写,一般指浏览器业务一天内页面的访问次数,每次打开或刷新一次,就算作一个pv.
指标uv: 计算按天, uv是unique visitor的简写,一天内访问的用户数。
指标ip :计算按天,ip是指一天内有多少个独立的ip浏览了页面,即统计不同的ip浏览用户数量。
用户数: 一般指业务系统注册用户数
用户活跃数:计算按天,一天中实际使用了业务系统的用户数量,与uv的概念一样。
在线用户数:计算按天,一天的活跃用户数中,用户同时在一定的时间段内在线的数量。
并数用户数:指在线用户数基础上,某一时刻同时向服务器发送请求的用户数。
16.性能指标转换计算公式
如果一个500万PV的网站,大概要用多少台服务器?
500万pv即一天24小时中访问了业务页面500万次,如果用5000000/24/60/60 即可得出每秒的页面请求数为每秒57个请求。这个结果和实际情况将会有很大的偏差,因为实际业务访问过程中,比如晚上业务低峰期,基本没多少业务访问量。在实践中可以发现,一天中的80%的业务请求主要发生在40%的时间内,24小时的40%就是9.6小时。
pv请求量计算模型如下:
每秒处理请求数量=(80%*总pv量)/(24小时*60分*60秒*40%)
100w和500w的pv请求量对应的计算结果为:
(5000000*0.8)/(24*60*60*0.4)=115个请求/秒
(1000000*0.8)/(24*60*60*0.4)=23个请求/秒
即服务器一秒能处理23个请求,就可以每天承受100w的pv业务量。能处理115个请求,就可以每天承受500w的pv业务量
其次真实的业务场景下,有低谷也有高峰,主要考虑高峰值,假如一天中高峰期的请求量是平时请求的两倍或三倍,示例如下:
23*2=46个请求/秒
23*3=69个请求/秒
115*2=231个请求/秒
115*3=347个请求/秒
如果一台服务器一秒内能处理46~69个请求,那么就能应对100w的pv请求量
如果一台服务器一秒内能处理231~347个请求,那么就能应对500w的pv请求量
17.pv量对应的服务器配置
1w的pv:服务器配置1核/1G/1台
10w的pv:服务器配置2核/4G/1台
50w的pv:服务器配置4核/8G/1台
100w的pv:服务器配置8核/16G/1台
500w的pv:服务器配置8核/16G/10台
18. 服务器CPU/内存配置模型
在互联网企业的服务器CPU利用率平均在10%~20%, 磁盘空间的利用率在20%~30%。在云端,有80%企业存在计算资源和存储资源闲置浪费的现象。
实践中最为常见的服务器配置即CPU与内存资源配比一般都是1:1, 1:2, 1:4,1:8。
1) Cpu与内存资源配比1:1
适用于个人网站,官网等小型网站部署,一般在低配机器中,如1核1GB,2核2GB。
2) Cpu与内存资源配比1:2
这种配比可以获得最优计算资源性价比,1:2均为黄金比例,如1核2GB,2核4GB等。这种配比适合绝大部分业务场景部署,龙其是需要消耗资源的计算。
1:2的配置,特别适合web服务类/应用类,4核8GB偏向中小型web服务/应用类部署,8核16GB偏向大型web服务/应用类部署。
对于nginx,2核4GB或4核8GB配置足够了。
3)CPU与内存资源配比1:4
比如2核8GB,4核16GB等,这类配置偏向内存,特别适合部署数据库类的应用。8核32GB是保障数据库具有良好性能的经典配置。
4)CPU与内存资源配比1:8
比如2核16GB,4核32GB等,这类是高内存资源占比,龙其适用于内存数据库,如redis,memcache的部署。
19. 云端带宽配置选型
1Mbps=1,000,000 bit/s (1百万bit)
1Byte=8bit
1Mbps=125000 Byte/s
1Mbps=128 kb/s
1Mbps=0.119 MB/s
1Gbps=128MB/s
当我们查看连网的传输时,显示1.0Gbps,如下图所示,一般20%为下载速度(128MB/s*0.2=25.6MB/s),百分之八十为上传速度(128MB/s*0.8=102.4MB/s)。
如果需求只是入口流量,带宽一般采用SLB, 带宽性能,架构扩展,安全性都比ECS直接绑定公网带宽要好。此用户业务,主要采用SLB,所以如果只是入口流量需求,没必要给后端配置高配的固定带宽。
如果需求是出口流量,需要主动去访问公网服务,这里采用SNAT的方式,更不需要给每台服务器绑定高配的固定带宽。
即使开了50Mbps的带宽,默认也要选择按使用流量的带宽类型。
带宽计算模型:带宽配置=每秒请求数量*每次请求传输的数据量
带宽配置=(80%*总pv量)/(24小时*60分*60秒*40%)* X Mbps/s
经实践发现,在web类的应用中,80%的带宽会被静态资源传输占用,如果采用CDN,能够有效减少后端服务器的带宽配置。假设每个请求页面平均传输数据是20KB(不包括图片等静态资源),则100w的pv,要选择的带宽配置如下:
100w的pv的带宽配置(平时访问量)=(80%*100w)/(24小时*60分*60秒*40%)* 20kb/s=23.1个请求/秒*20kb/s=462kb/s=3696bps/s,即3.5Mbps。
100w的pv的带宽配置(峰值的2倍)=(80%*100w)/(24小时*60分*60秒*40%)*2* 20kb/s=46.2个请求/秒*20kb/s=924kb/s=7392bps/s,即7Mbps。
20.带宽类型选择的8/2原则
在云端配置实践中,在关于SLB,ECS,EIP的带宽类型选择上,很多人选择固定带宽,比如1Mbps、5Mbps,10Mbps等,事实上,大多数情况下是没有必要的,在云端带宽配置的选择中:
80%的应用默认选择按量带宽,即按量带宽是云端带宽类型选择的最佳实践。
20%的应用选择固定带宽,这个特定的条件就是,每天按量下载的合计费用超过带宽平均每天费用,则使用固定带宽。
实践案例1:固定带宽与按量带宽费用对比
按量带宽配置: 1核/1G/0Mbps 费用为36.8元/月。 带宽收费按实际的出口流量计算。
固定带宽配置: 1核/1G/5Mbps 费用为161.8元/月。
如果:每月固定带宽5Mbps :161.8-36.8=125元/月。125/30=4.2元/天。 4.2/0.8元/G=5.25G
通过计算可知,若使用固定带宽5Mbps,每天业务产生的流量超过5.25GB,那么这时候使用固定带宽才划算。当每天业务低于5.25GB的时候,优先使用按量付费。
我们发现往往80%的情况都是每天业务产生的实际流量是低于固定带宽的成本的。
如果是数据传输(如异地备份),每天产生的大流量导致的,这时候才采用固定带宽。
如果是商城之类的公开网页,也要考虑爬取导致的出口流量升高,采用固定带宽。云上的5Gbps的免费防御DDos攻击流量。
有些客户担心DDOS攻击会产生额外的流量费用,其实不用担心,DDOS攻击产生的瞬时几十字节的流量都是入口流量,是不收费的,唯一可能产生费用的就是cc攻击,其类似于刷网页,这会导致出口流量增加,产生额外的流量费用。
应用场景:
1)流量稳定选择固定带宽更划算,流量平时很少偶发流量高峰选择按流量计费更便宜
2)24小时长期稳定提供服务的Web网站应用,一般选择按固定带宽计费。