python web项目部署相关

457 阅读7分钟

项目的架构

一般来说,项目的架构掷至少有三层内容来组成:

  • 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进行代理的项目,会随着功能的层层迭代逐渐增加数十个 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