Nginx服务器部署负载均衡反向代理

LVS Nginx HAProxy的优缺点

三种负载均衡器的优缺点说明如下:

LVS的优点:
1、抗负载能力强、工作在第4层仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的;无流量,同时保证了均衡器IO的性能不会受到大流量的影响;
2、工作稳定,自身有完整的双机热备方案,如LVS+Keepalived和LVS+Heartbeat;
3、应用范围比较广,可以对所有应用做负载均衡;
4、配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,所以并不需要太多接触,大大减少了人为出错的几率;
LVS的缺点:
1、软件本身不支持正则处理,不能做动静分离,这就凸显了Nginx/HAProxy+Keepalived的优势。
2、如果网站应用比较庞大,LVS/DR+Keepalived就比较复杂了,特别是后面有Windows Server应用的机器,实施及配置还有维护过程就比较麻烦,相对而言,Nginx/HAProxy+Keepalived就简单多了。

Nginx的优点:
1、工作在OSI第7层,可以针对http应用做一些分流的策略。比如针对域名、目录结构。它的正则比HAProxy更为强大和灵活;
2、Nginx对网络的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势所在;
3、Nginx安装和配置比较简单,测试起来比较方便;
4、可以承担高的负载压力且稳定,一般能支撑超过几万次的并发量;
5、Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点;
6、Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器。LNMP现在也是非常流行的web环境,大有和LAMP环境分庭抗礼之势,Nginx在处理静态页面、特别是抗高并发方面相对apache有优势;
7、Nginx现在作为Web反向加速缓存越来越成熟了,速度比传统的Squid服务器更快,有需求的朋友可以考虑用其作为反向代理加速器;
Nginx的缺点:
1、Nginx不支持url来检测。
2、Nginx仅能支持http和Email,这个它的弱势。
3、Nginx的Session的保持,Cookie的引导能力相对欠缺。

HAProxy的优点:
1、HAProxy是支持虚拟主机的,可以工作在4、7层(支持多网段);
2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作;
3、支持url检测后端的服务器;
4、它跟LVS一样,本身仅仅就只是一款负载均衡软件;单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的;
5、HAProxy可以对Mysql读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,不过在后端的MySQL slaves数量超过10台时性能不如LVS;
6、HAProxy的算法较多,达到8种;

反向代理:代理服务器 正向:代理客户端

RESTFUL API 前后端分离

  • 前端的数据发送与接收
    1)提交表单数据
    2)提交JSON数据
  • 后端的数据接收与响应
    1)接收GET请求数据
    2)接收POST请求数据
    3)响应请求

关于restful api:

设计:

协议 HTTPS

域名:

应该尽量将API部署在专用域名之下。

 
https://api.example.com

如果确定API很简单,不会有进一步扩展,可以考虑放在主域名下。

 
https://example.org/api/
版本号:https://api.example.com/v1/

路径

  • § https://api.example.com/v1/zoos
  • § https://api.example.com/v1/animals
  • § https://api.example.com/v1/employees

Url:/api/v1.0/smscode/<mobile>&text=imagecode&id=image_code_id

Url:/api/版本号/路径

前后端分离:各负责各的接收ajax 返回json数据

Django应该擅长什么

FastDfs

分布式文件储存系统 一种允许文件通过网路在多台主机上分享的文件系统,可让机器上的多用户分析那个文件和存储空间 建议大小 4kb<file_size<500MB

构架

追踪服务器 均衡作用负责管理所有的存储服务器和组别

存储服务器 提供容量和备份服务 以group为单位 给个group有多个存储服务器 依赖于本地服务器 一个崩溃了恢复数据只能依靠组别里的其他机器 新鞋的文件会哈希的形式写进去

客户端 是上传下载的服务器,也就是项目部署的服务器 每个服务器都要安装nginx

Mysql语句储存过程存储优化

存储过程:

DELIMITER // 声明语句结束符,用于区分;
CEATE PROCEDURE demo_in_parameter(IN p_in int) 声明存储过程
BEGIN …. END 存储过程开始和结束符号
SET @p_in=1 变量赋值
DECLARE l_int int unsigned default 4000000; 变量定义

Mysql 优化原理:

选择数据类型只要遵循小而简单的原则就好,越小的数据类型通常会更快,占用更少的磁盘、内存,处理时需要的CPU周期也更少。越简单的数据类型在计算时需要更少的CPU周期,比如,整型就比字符操作代价低,因而会使用整型来存储ip地址,使用DATETIME来存储时间,而不是使用字符串。

1选取最实用的字段属性 在可能的情况下尽量包字段设置为nonull 查询时就不需要比较null

2.使用连接(join)来代替子查询(sub-queries)因为不需要创建临时表

3.使用联合来代替手动创建的临时表 将多条select查询语句合并为一个

4.事务 一系列语句来完成一个事务 如果一个语句错了就全错 可以保持数据库中的数据的一致性和完整性 begin开始 commit结束 rollback可以把数据库恢复到begin之前

可以利用锁定数据库的方法来为用户提供一种安全的访问方式,保证用户的操作不被其他用户干扰

  1. 锁定表 继承第4点 处理延迟 由用户锁定带来延迟
  2. 外键 锁定表维护数据的完整性,不能保证数据的关联性 我们可以使用外键 定义的方法是在CREATETABLE语句中加上TYPE=INNODB
  3. 使用索引 可以令数据库以比没有索引快的多的速度检索 尽量不要给一个有大量重复的值得字段建立索引
    这样没用 还降速
  4. 优化的查询语句 首先最好是在相同类型的字段间进行比较的操作 其次在建有索引的字段上尽量不要使用函数进行操作 第三在搜索字符型字段,我们有时使用LIKE关键字和通配符,这种做法虽然简单,但却也是以牺牲系统性能为代价的

Redis 储存类型开发中的应用以及持久化的概念和启用方法

Redis

 list(名字:内容)

set(无序集合)

hash(键:多个属性)

string(一个key对应一个value)

Zset(有序集合)

开发中的应用

可以使用list存储历史记录 用hash来存储个人信息

持久化和启用方法

RDB(全量写入):将内存的数据库写到本地磁盘 启用:在redis.conf设置

AOF(增量写入):记录数据库操作比RDB有更好的恢复完整性
redis重启优先启用

多线程服务器

多线程:thread

Scrapy 反反爬虫机制

  1. 禁用cookies
    COOKIES_ENABLED=False
  2. 设置下载延迟
    DOWNLOAD_DELAY=3
  3. 设置下载中间件
  4. Ip池 vpn和代理ip
  5. 使用crawlera(专用于爬虫的代理组件)正确配置和设置下载中间键后项目所有的request都是通过crawlera
  6. cookied池
  7. 动态设置User-Agent

多线程多进程的区别

多线程的优点:无需跨进程边界 程序逻辑和控制方式简单 所有线程可以直接共享内存线程方式消耗的总资源比进程方式好

缺点:每个线程与主进程公用地址空间 受限于2GB的空间 线程之间的同步和加锁控制比较麻烦。一个线程的崩溃可能影响整个程序的稳定性

多进程的优点:每个进程互相独立,不影响主程序的稳定性,子进程崩溃没关系;
通过增加CPU,就可以容易扩充性能; 可以尽量减少线程加锁/解锁的影响,极大提高性能,就算是线程运行的模块算法效率低也没关系;
每个子进程都有2GB地址空间和相关资源,总体能够达到的性能上限非常大

缺点:逻辑控制复杂,需要和主程序交互; 需要跨进程边界,如果有大数据量传送,就不太好,适合小数据量传送、密集运算
多进程调度开销比较大; 最好是多进程和多线程结合,即根据实际的需要,每个CPU开启一个子进程,这个子进程开启多线程可以为若干同类型的数据进行处理。当然你也可以利用多线程+多CPU+轮询方式来解决问题……

进程优点:顺序程序的特点具有隔离性和再现性

程序的并发执行和资源共享,多道程序设计出现后实现了程序的并发执行和资源共享,提高了系统的效率和系统的利用率

缺点:操作系统调度切换多个线程比切换调度进程在速度上快的多,并且进程间内容无法共享通讯比较麻烦

线程缺点:调度要保存线程状态频繁调度,需要占用大量的机时 程序设计容易出错

优点:一种节俭的多任务操作方式 使用相同的地址空间共享大部分数据切换的时间远小于切换进程需要的时间 使多CPU系统更加有效

Scrapy-redis 分布式爬虫原理

 

Mongodb的爬虫中的应用开启方式

Python标准库递代器生成器装饰器在开发中的实际应用

Git的使用

14_赵文化 08:30:12

函数作用域

a = 1

def func(a):

a += 1

print(a)

深拷贝,浅拷贝

copy.copy() 和 copy.deepcopy()方法的不同

celery发邮件流程

redis如果服务器宕机了,该怎么办,怎么解决

每个分类有不同商品,每个商品有不同规格,可以按照不同规格的商品下单,按照这个设计一个api希望前端给你返回什么数据

用代码实现以下pagenatior的具体内容

线上服务器出现了问题,你应该怎么解决

14_赵文化 08:51:35

git 中rebase和merge的区别,reset和revert的区别

进程,线程,协程分别是什么,区别为什么

静态方法是什么,有什么应用场景

celery发送邮件,任务函数是以什么数据类型保存在redis中

python内存是如何进行管理的

数据库如何优化

递归层级过高会存在什么问题

fastdfs实现原理

迭代器,生成器,装饰器的原理,手写一个生成器和装饰器

TCP HTTP 网络协议

Flask框架开发需要擅长什么

 

Celery

 

第三方JDK的使用

分页

 

Xpath使用

Nginx服务器部署 负载均衡 反向代理的更多相关文章

  1. nginx域名转发 负载均衡 反向代理

    公司有三台机器在机房,因为IP不够用,肯定要分出来,所以要建立单IP 多域名的反向代理, 就是当请求www.abc.com 跳转到本机, 请求www.bbc.com 跳转到192.168.0.35 机 ...

  2. Nginx服务器的使用与反向代理负载均衡

    目录 Nginx服务器 一:什么是Nginx? 什么是Nginx - Nginx与其他服努器的性能比较 二:如何在Linux中搭建Nginx服务器? 常见的错误 三:Nginx的反向代理和负载均衡 什 ...

  3. Nginx HTTP负载均衡/反向代理的相关参数测试

    原文地址:http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/03/15/1984976.html 测试目的 (1)弄清楚HTTP Upstr ...

  4. nginx服务器的负载均衡和动静分离(未完)

    安装nginx,我的博客里面有介绍源码和yum安装. 实战:使用nginx实现动静分离的负载均衡集群 实战:使用haproxy实现负载均衡集群 LB负载均衡集群分为两类:LVS(四层)和Nginx或p ...

  5. nginx做为web容器部署静态资源以及做负载均衡反向代理实现

    需求:  此时前台开发完成打包生成静态资源文件,要做到以下方面: 使用nginx部署静态资源,同时nginx要实现端口转发,隐藏真实后台地址,同时后台需要做一个负载均衡. localhost:7001 ...

  6. 架构之Nginx(负载均衡/反向代理)

    Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器 ,也是一个 IMAP/POP3/SMTP 代理 服务器 . Nginx 是由 Igor Sys ...

  7. nginx负载均衡(反向代理)

    6,安装nginx 6.1 依赖库安装  要安装在root根目录里,不要装在虚拟环境里面 yum install gcc-c++ pcre pcre-devel zlib zlib-devel ope ...

  8. nginx 负载均衡 反向代理

    nginx 通过方向代理实现负载均衡,负载均衡是大流量网站要做的措施,单从字面上的意思来理解为N台服务器平均分担负载,不会因为某一台服务器负载高宕机而影响用户访问网站,负载均衡至少需要三台服务器, 既 ...

  9. Nginx负载均衡反向代理 后端Nginx获取客户端真实IP

    Nginx 反向代理后,后端Nginx服务器无法正常获取客户端的真实IP nginx通过http_realip_module模块来实现的这需要重新编译,如果提前编译好了就无需重新编译了1,重新编译ng ...

随机推荐

  1. Java多线程编程(三)线程间通信

    线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体.线程间的通信就是成为整体的必用方案之一,可以说,使线程间进行通信后,系统之间的交互性会更强大,在大大提高CPU利用率的同时 ...

  2. 修改List<Map<String, Object>>的值

    List<Map<String, Object>>  aList = new ArrayList(); //加入一个Map元素Map map = new HashMap();m ...

  3. TCP/IP和Socket开发经验分享

    当前与网络相关的业务主要是基于tcp/ip或http,熟悉j2ee的同学一定会对http场景下的开发比较了解.但是,精通tcp/ip以及如何构建一个直接基于tcp/ip层通讯的知识却不太多见.恰巧,最 ...

  4. @ConditionalOnProperty注解

    一 源码解析 查看ConditionalOnProperty的源码 package org.springframework.boot.autoconfigure.condition; import j ...

  5. K8s 还是 k3s?This is a question

    本文来自:Rancher Labs 自k3s问世以来,社区里有许多小伙伴都问过这样的问题"除了中间的数字之外,k3s和K8s的区别在哪里?","在两者之间应该如何选择?& ...

  6. GPU服务器及计算原理

    图形处理器(英语:Graphics Processing Unit,缩写:GPU),又称显示核心.视觉处理器.显示芯片,是一种专门在个人电脑.工作站.游戏机和一些移动设备(如平板电脑.智能手机等)上图 ...

  7. HTML5+CSS:02用户注册表单

            新的学期已开始接近两个月了,还记得是在国庆节那几天申请的博客账号,可过了一个月都还没开始写博客,(>_<)有点小偷懒了,不过,学习还是不能落下的,今写一个有点实践运用的关于 ...

  8. Web for pentester_writeup之Code injection篇

    Web for pentester_writeup之Code injection篇 Code injection(代码注入) Example 1 <1> name=hacker' 添加一个 ...

  9. Django学习day6——模板

    在day4中,你可能已经注意到我们在例子视图中返回文本的方式有点特别. 也就是说,HTML被直接硬编码在 Python 代码之中. html = "<html><body& ...

  10. 4、Hibernate的查询方式

    一.Hibernate的查询方式:OID查询 1.OID检索:Hibernate根据对象的OID(主键)进行检索 1-1.使用get方法 Customer customer = session.get ...