项目的架构
一般来说,项目的架构掷至少有三层内容来组成:
- Web 访问层
- 数据库层
- 存储层
架构演变
单体阶段
常见场景: 项目初期 部署特点:所有应用服务都在一台主机 应用特点:开发简单
应用/数据分类阶段
常见场景: 项目初期 用户访问数据库有压力 部署特点: 应用和数据库单独部署 应用特点:开发简单
页面动静态分离阶段
常见场景:项目初期,用户访问页面有压力 部署特点:剥离用户读请求和写请求操作 应用特点:开发简单
页面/数据缓存阶段
常见场景:项目初期,用户访问有压力 部署特点:代理和数据库之前增加缓存组件 应用特点:开发简单
应用服务集群阶段
常见场景:项目初期,用户访问有压力 部署特点:应用服务所在的主机做集群负载均衡 应用特点:业务中等
数据库读写分离化
常见场景:项目初期,用户访问有压力 部署特点:对数据库集群做读写分离静态文件做共享存储 应用特点:业务中等
存储分布式
常见场景:项目中期,数据存储有压力 部署特点: 对数据库分库、分表扩展,数据文件使用分布式存储。 应用特点:业务中等
业务应用拆分
常见场景:项目中期,业务访问\团队管理有压力 部署特点: 项目应用进行拆分 应用特点:业务复杂
业务拆分
常见场景:项目中后期,业务处理有压力 部署特点: 所有功能以服务形式单独部署,引入配置管理中心、消息中间件、搜索引擎等功能。 应用特点:业务复杂
微服务阶段
常见场景:项目后期,精益求精 部署特点: 所有项目可以自由部署 应用特点:业务复杂
架构部署
通用架构:
- 一级定位: 核心组成部分
- web、数据库、存储层
- 二级定位:功能增强部分
- web 缓存、代理、数据库缓存
部署项目:
部署项目的时候,要遵循主次原则: -对于架构中的一级角色,我们的部署原则是: - 站在用户访问的资源角度,从后往前依次部署 - 对于架构层中的二级角色,我们部署的原则是: - 站在用户访问资源压力的角度,需要部署哪里,就部署哪里,注意前后的信息交流。
项目运营
在项目正常运营过程中,为了验证我们项目的效果和更好的对项目的运行维护,我们必须知道一些网站分析和运营维护方面的基础知识。
网站分析
常见术语: 我们在日常生活中经常会听说,XX网站日PV多少,日UV多少,每日访问峰值是多少之类的话,而这些名词都是项目正常运营的过程中,为了更好的对项目的运行维护,我们对网站进行分析必须知道一些常用的网站分析术语。
IP: 独立 IP 数
- 指一天内使用不同IP地址的用户访问网站的数量
- 特点: 同一个 IP 无论访问多少网页,独立 IP 数均为1
PV: Page view 页面浏览量
- 指一天内网站的浏览次数,它是衡量网站用户访问页面的数量
- 特点: 用户每打开一个页面就记录一次,就算访问同一页面多次,就记录多次
UV:Unique Visitor 访问网站的用户
- 指一天内访问某站点的人数,以 cookie/客户端 为依据
- 特点: 一天内,同一访问用户的多次访问只记录 1 次
VV:Visit View 用户访问网站次数
- 指一天内某个用户访问了多少次网站
- 特点: 打开网页 A ,浏览完毕后关闭该页面,表示一次访问
BR:Bounce Rate 跳出率
- 指一天内访问用户中,用户打开网站后没有做任何事情,一会就离开了的比例
- 特点: 如果跳出率很高,说明我们的网页没有什么吸引力,网页设计效果不怎么好
CR:Conversion Rate 转化率
- 指一天内访问用户中,打开网站后,继续浏览该网站其他页面的比例
- 特点:转化率一般体现在项目的关键流程的部分,而它对网站的某些关键流程优化是一个很重要的指标
网站分析术语多如牛毛,每个公司的业务方向不一样,评判标准也不一样,上面只是举例了几种常见的术语,这些术语的常用场景如下:
口语描述:
术语:IP、PV、UV
人员:所有岗位
网站质量:
术语:跳出率和转化率
人员:产品、开发
常见分析工具
- 服务器服务日志、公司内部监控平台等
- 互联网网站分析工具:
- 站长工具、百度统计、云平台监控等
项目运营
项目在后期运营的过程中主要做两件事情: 项目正常运行、项目功能迭代。
项目正常运行
关于项目正常运行,就是网站运行过程中,不论遇到什么问题,我们都能应对下去。一般来说就是用户访问量变化的时候我们做的优化等工作。那么我们就站在开发的角度,从网站的分层上面来看一下常见问题及其解决方案。
缓存层方面
- 问题描述:
- 怎么在现有的主机资源情况下,花最小的代价抗住大量的用户访问量?
- 解决思路:
- 很常见的就是自建Web缓存,或者购买CDN,将用户经常访问的、更新频率低的资源存放起来,这样用户再次请求相同资源的时候,就不会对后端的服务造成影响。当然防止互联网上的恶意访问/爬虫,我们应该做好相应的安全措施。
- 缓存之类的措施一定要适合公司的当前业务,如果是项目的静态资源很多,只要我们购买的CDN够好,那么用户访问量随便。
代理层方面
-
问题描述:
- 如何提高用户高质量的请求分发?
-
解决思路:
- 以Nginx代理为例,提高用户高质量的请求分发,最好的方法就是基于请求的关键字进行合理的分流。
- 基于请求的IP地址信息,封闭恶意IP访问,提高正常IP用户访问效率
- 基于请求的浏览器信息,分发到相应的后端应用
- 基于请求的协议方法,做好读写分离业务的精确分流
- 基于请求的路径信息,做好指定业务的精确分流
- 以Nginx代理为例,提高用户高质量的请求分发,最好的方法就是基于请求的关键字进行合理的分流。
-
问题描述:
- 对于前端使用nginx进行代理的项目,会随着功能的层层迭代逐渐增加数十个 upstream,location 规则的数量有可能达到数百个,这个时候偶尔有些 URL 会出现 404 的问题,对于这种情况怎么办?
-
解决思路:
- 1 按照功能描述,将 upstream 拆分到不同的功能目录中
- 2 对location的匹配规则尽量描述清楚,特别是匹配的location_match,最好使用^/$来锚定首尾字母
区分几个概念
-
WSGI:全称是Web Server Gateway Interface(web服务器网关接口),它是一种规范,它是web服务器和web应用程序之间的接口。它的作用就像是桥梁,连接在web服务器和web应用框架之间。
-
uwsgi:是一种传输协议,用于定义传输信息的类型。
-
uWSGI:是实现了uwsgi协议WSGI的web服务器。
gunicore
安装
pip install gunicorn