web架构
- 大型网站架构特点
高并发,大流量
高可用
海量数据,高可用数据库
世界各地性(访问的网站的用户是全国各地的)
需求快速变更,发布频繁(CICD)
渐进式发展(从小网站到打网站)
- 网站架构演化发展历程
小型网站架构:
此时应用程序,后台程序,数据库,静态文件,web服务器等资源都是部署在一台服务器上也就是我们常见的单体应用架构,lnmp,lamp
单台服务器架构,小型网站
lnmp: linux nginx mysql php/python/java
服务器: 物理机器,虚拟机,云服务器
架构升级:应用服务器和数据库拆分
三台服务器,应用服务器(后端代码),文件服务器(静态数据),数据库服务器(mysql存储数据)
三台服务器对硬件资源要求是不同的:
应用服务器:需要进行大量的业务逻辑处理,因此需要非常强大的,更快的,更多核心的CPU处理
数据库服务器:需要更快速的读写操作,因此需要更强大的内存条和磁盘(固态磁盘)
文件服务器:需要存储大量的用户信息,上传的数据,因此需要一个很大容量的硬盘
应用,数据库,文件拆分,三台服务器
应用服务器(代码程序)
文件服务器(NFS)
数据库服务器(mysql redis memcache)
- 缓存服务器架构
二八定律:80%的业务集中访问在20%的商品上
网站数据有冷数据,热数据之分
内存的读写速度,远超于磁盘。
网站的缓存主要有两种:
缓存放在应用服务器上,属于本地缓存,访问更快,没有网络延时,但是应用服务器的内存有限,一般不建议。
缓存服务放在专门的缓存服务器上,属于远程分布式缓存,他的特点是可能存在网络延迟,但是优点是,可以分布式存储大量数据在内存中,在理论上可以无限扩展器内存容量,当前还得考虑成本。
描述: 应用程序(代码) 多台缓存存储服务器(高负载,高可用) 多台文件服务器NFS(高可用) 多台数据库存储(高可用)
- 负载均衡集群
keeplive+nginx来做nginx的高可用,用户访问VIP代理到nginx上,根据location匹配到应用程序,获取对应的资源,并返回给客户。
- 数据库读写分离
用户访问一个请求到nginx负载均衡调度器,nginx通过location将请求发给应用服务器(代码),应用服务器会查看本地缓存,如果有对应数据,就返回给nginx,nginx返回给客户端,如果没有对应的数据,就去请求mysql数据库,最后在将数据返回给客户端。
数据数据可以做主从复制,读写分离
主从复制:将主数据库中的数据同步的更新到从数据库,实现备份
读写分离: 将用户的写入操作和读写操作分离开,需要根据业务而定,还有就是性能好的服务器可以多处理一些任务。
- CDN与反向代理
就近原则
CDN和反向代理的基本原理都是基于缓存在实现的,区别在于CDN部署在网络运营商的机房,用户在请求网络时,根据CDN的地址可以访问距离自己最近的机房,最快的获取数据。
反向代理则是部署在网站的中心机房,当用户请求到达中心机房,首先访问的是反向代理服务器,如果代理服务器本地有缓存,则直接返回给用户。
使用CDN和反向代理的目的。都是为了尽早的将数据返回给用户,加快用户访问站点的数据,减轻后端服务器的压力。
- 网站架构阐述总结
分布式数据库:随着用户的请求越来越多,上面的主从复制,读写分离数据库已经无法满足用户的请求,需要根据业务来进行拆分,不同的业务请求到不同的数据库。
CND:请求加速解析的
负载均衡调度器:接收请求并分发给应用服务器
应用服务器: 根据用户的请求查看自己本地是否有缓存,有就返回给用户,没有则访问数据库在返回给用户
NoSQL:随着公司的规模不断变大,需要使用到非关系性的数据库和搜索引擎服务器(ELK)
列如电商网站:
A应用服务器组(订单)
B应用服务器组(支付)
B应用服务器组(评论)
.........
将用户的请求通过负载均衡调度器组分发到对应的应用服务器组
消息队列服务器(MQ kafka):负载均衡服务器将请求给到kafka,用户服务器接收对应的请求。
- 期末架构阐述(外网用户)
外面用户发送一个请求给到nginx,会通过防火墙,防火墙上有一些规则,通过防火墙之后进入nginx,此处nginx+keeplived做了一个nginx的高可用,用户访问的地址是vip地址,然后nginx将动态文件发送给nginx+php集群,请求后端数据库,如果是静态文件,会去请求另一台nginx+php集群,然后请求NFS,并且实时备份,实现nginx动静分离。
- 期末架构参数(VPN)
lnmp集群,中小型网站架构
接入层: nginx+keeplived 高可用负载均衡集群
配置管理层: ansible saltstack 对服务器集群进行批量化的部署,代码更新,静态文件分发,服务器启停等
web业务处理层:nginx反向代理结果后端开发语言进行动静态请求处理和分发
数据存储层: mysql主从复制数据库
静态文件存储: nfs+rsync
批量化装系统:Kickstart-Cobbler
PPTP:实现VPN的一种方式
1. 远程访问VPN服务
公司人员访问服务器进行管理
2. 企业内部网络的VPN
分公司和总公司的LAN之间的vpn连接。
3. 互联网公司多IDC机房之间的VPN服务
不同机房之间业务管理和业务访问,数据流动
4. 企业外部VPN服务
在供应商,合作伙伴的LAN和本公司的LAN之间建立的VPN服务
5. 访问外国网站
翻墙业务应用
- 期末架构之缓存和监控
nosql相关:
mysql: 磁盘型数据存储,数据读写都比较慢
nosql:如redis,memcached这样的缓存数据库,数据读写飞快,但是缺点是:比如进进程重启,服务器重新,都会导致内存数据释放,那么数据可以会丢失,但是也不用担心,后面还会学习到持久化。
普通的数据存储,数据量较大,使用mysql这样的数据库
高并发业务场景下,可以选择缓存数据库
工作环境中,redis+mysql去使用
监控相关(zabbix):
运维的职责:
1. 保证企业数据的安全可靠性
2. 为客户提供7*24小时业务正常运转
3. 不断的优化用户访问站点体验
在关键时刻,服务器,服务出现问题的时候,我们能够第一时间知道
硬件监控:
风扇,cpu温度监控
cpu压力监控
内存监控 free -m
- 期末架构之tomcat和lvs
Tomcat:
Tomcat服务器是一个免费的开放题源代码的Web应用服务器,在中小公司和并发访问不是很多的情况下被普遍使用,是开发和调试JSP网页的首选。
Tomcat和nginx,apache(http),lighttpd等web服务器一样,都具有处理html页面的能力,不过,Tmcat处理静态HTML的能力不如nginx/apache服务器。tomcat适哥处理动态请求,可以nginx+tomcat实现动静分离。
另外他还是一个Servlet和JSP容器,独立的Servlet容器时Tomcat的默认模式。
作用: 取代php后台编程语言
lvs(linu 虚拟 server):
四层负载均衡(lvs)(tcp/ip):
七层负载均衡(nginx/apache)(域名):
对于小公司来说,一般都会使用七层负载均衡,而对于特别大的公司,数据请求达到很多,可以考虑四层和七层负载均衡一起使用。
- 期末架构之持续集成
批量装机:kickstart/cobbler
版本控制:git/svn
持续集成: jenkins
CICD:
持续集成: 一天频繁的把代码发布到服务器上,进行测试
持续部署:
持续交付:
持续集成的好处:
自动化构建,且对每个技术成员都是可见的,(在jenkins的web界面可以看到构建的每一步日志信息)
解放了重复性的劳动力
更快的发现问题,并告警,通知运维人员及时修复
更快的交付成果
减少手工可能会出现的问题
较少了等待的时间,(自动化嘛)
- 自动化装机系统介绍
kickstart:
通过网络安装系统----PXE
kickstart,cobbler
PXE
预启动执行环境
通过网络接口启动计算机,不依赖本地存储设备(光盘/U盘)
C/S架构
ip,udp,dhcp,tftp
流程:
1. 发送UDP广播请求
4. 请求下载启动文件(文件名:pxelinux.0)
5. 应答文件:相当于一个安装系统的脚本
跳过学习到P14-27(批量装机的流程),如果有兴趣可以点击如上链接进行学习。