建立高并发模型需要考虑的点

摘要:
当出现高并发访问时,可以适当调整防火墙规则,以防止防火墙故障导致的网络拥塞。f) 图片验证码:图片验证码的使用可以有效防止程序自动刷新等攻击,并将图片分发给查询服务器,避免在高并发连接的环境中被称为瓶颈。
1、能不能通过增加机群(应用机群,服务机群)的方式去解决?好比一台机器能抗200qps, 然后你就40000qps的业务,那你最少需要200台机器,如果考虑到有机器down掉的情况,还要加备用服务器,这个具体加多少台就得去评估了。     防止出现有机器down掉,还得在每台机器上更新列表的情况,我们最好访问服务名(类似于域名),这样的话的好处就是,如果出现有机器down掉的情况,我只需要更新服务名和机器列表的关系表就可以了。
2、能不能把CDN或者NDN用到我们的系统?假设能用,如何把静态的图片、JS文件、HTML文件放在用户最近的一个节点?
3、用户大规模连接请求上来的时候,我们如何去均衡用户的请求(如何把这些请求放到后台的应用机群里面均衡的做处理)?Nginx负载均衡 + 自己设计的负载均衡策略(比如说把IP转换成整数后,mod取模、hash等)
4、那么在应用机群内部,应用机群和服务机群之间,如何均衡的处理它的访问请求?Nginx负载均衡 + 自己设计的负载均衡策略(比如说mod取模、hash等)
5、何时应该用LAMP(Linux+Apache+Mysql+PHP)架构,盗图一张建立高并发模型需要考虑的点第1张
6、这里还有一个比较关键的问题,用户的登录状态你怎么去记录?用户的每一次请求,分配处理请求的服务器可能是不一样的,它不可能记录每个人的状态,那么这个状态如何同步?数据库集群Oracle/mysql+非关系型数据库Redis/Memcache
     拿mysql和redis来举例子,
     mysql 是关系型数据库,并发量上限默认是100,想要调整并发效果1)自个可以修改my.ini中的max_connections,但是最大也就能设到 1000 2)用mysql调用数据库时,每次执行语句时,会做一个临时变量用来打开数据库,所以在用完数据库后及时关闭mysql临时变量 3)如果还是解决不了,表被锁死的现象很严重,就需要增加数据库机群或者用其它并发连接数上限较高的数据库,比如关系型oracle(贵,公司会不会用不 一定)和非关系型redis和memcache等;
     redis 是非关系型数据库,并发量上限默认是1-2w左右,如果并发量特别大可以考虑用redis来做缓存。比如说用户请求访问量比较高的新闻网内容或者博客,可 以用redis来做缓存,有用户请求,就直接给他,如果博主对博客本身的内容做了更新,更新redis和mysql即可。  但是redis这种非关系型数据库,虽然并发量比较高,但是缺点也很明显:1)比较废内存 2)不能像mysql等关系型数据库那样能够处理事务、回滚等 3)没有1NF,2NF,3NF这种类似的类型,只有key-value,无法处理交易记录等这种类型的操作。
7、服务器,就是你的核心服务和数据库之间,如何去交互?如何平均的分摊压力?数据库集群Oracle/mysql+非关系型数据库Redis/Memcache 
8、防火墙的规则是不是需要调整?高并发访问来的时候,可以适当的调整防火墙的规则,防止由于防火墙的故障造成网络拥塞。等高峰期过后,再把防火墙规则调回来。
9、每一层只做一件事,不容易出错。借鉴网络分层的思想,拿服务器来说,有专门的应用服务器,有专门的服务服务器,有专门的数据库服务器等等。在这些服务器上,可以部署Docker这种类似的虚拟机,每个虚拟机监听一个端口,只做一件事,不容易出错,还能减少成本
 
10、可靠的软件开发:
     1)网页代码大小, 所有静态页面、动态查询页面的代码要尽可能短,图片尽可能少,以减少对带宽的需求。尽量页面大小控制在5K之内。
     2)网页压缩传输, 采用网页压缩存储,可以大大减少网页传输数据量的大小,仅为原数据量的1/3。不仅可以减少对网站带宽的占用,而且因为传输网页时间短,可大大减少负载均衡、防火墙的并发连接数和负载。缺点:应用服务器的CPU负载增加
     3)网页编程安全, 因为并发量大的时候,防火墙会关闭部分网络攻击检测功能,所以在网页编程时做一些必要的防攻击检测:
          a)防止SQL注入式攻击: 对查询的SQL字符串进行合法性检验,防止被SQL注入攻击后真个数据库被下载。
          b)防止人工F5刷新式攻击:在主页面、查询页面的客户端代码禁止F5按键,防止客户端恶意刷新。
          c)防止人工频繁打开页面刷新式攻击:设置Cookie,判断客户端打开页面的时间间隔,低于2秒的认为是人工频繁打开页面刷新式攻击。程序控制暂停数秒后,客户端才能跳到查询首页。
          d)防止程序自动刷新式攻击:检测HTTP_REFERER变量,减少程序自动刷新式攻击的可能性。
          e)隐藏查询代码页面的地址:设置Web服务器,隐藏查询代码页面的地址,可有效防止各类程序自动刷新式攻击。
          f)图片验证码:采用图片验证码,可有效防止程序自动刷新等方式的攻击,将图片分散于各查询服务器,避免在高并发连接数的环境中称为瓶颈。
     4)后端采用“epoll+线程池”或者“boost+线程池”来提高并发处理能力。注:业务放在线程池内。

免责声明:文章转载自《建立高并发模型需要考虑的点》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Java生鲜电商平台-购物车模块的设计与架构使用mina传输大字节数组下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

redis 在java中的使用

1、首先下载jar包放到你的工程中 2、练习 package com.jianyuan.redisTest; import java.util.Iterator;import java.util.List;import java.util.Set; import redis.clients.jedis.Jedis; public class RedisT...

Mysql 主从复制

mysql主从复制好处:1. 如果是单个数据库,如果挂了就凉凉2.主备数据库,挂了一台主库,我可能还有很多个备用的数据库2,读和写分开,减少了数据库的压力 实验准备:主机一(主) : 192.168.11.70主机二(从): 192.168.11.224都装有Mariadb 第一步-主机的操作: 1.在matser主库上的操作,开启主库功能先关闭服务sys...

《数据库系统概论》之数据库系统结构和组成(内模式、模式、外模式、人员……)

文章转自:https://blog.csdn.net/weixin_43914604/article/details/105097464 学习课程:【公开课】数据库系统概论(王珊老师) 学习目的:利用最省时间的方法学习考研面试中的数据库知识。 1、思维导图 2、数据库系统结构 (1)两种角度 从数据库管理系统角度看,数据库系统通常采用三级模式结构,是...

DbVisualizer数据库驱动连接问题

今天使用数据库查询工具DBvis链接mysql数据库时, 发现执行如何sql语句, 都报如下错误: mysql驱动包的版本不对导致的。我的mysql版本是5.7 解决办法: 去mysql官网下载最新的jar驱动包 然后更新就行. url:http://dev.mysql.com/downloads/connector/j/ 选择平台,下载(mysql-c...

mysql 5.7 压缩包安装教程

前言 :  避免之前装的MySQL影响   首先进入dos窗口执行   sc delete mysql        删除已有的mysql服务 (一) 下载MySQL5.7 版本压缩包   网址   https://dev.mysql.com/downloads/mysql/    (二)解压到自己想要放的目录   我放在了F盘   F:phoneMall...

01、MySQL_简介

数据库概念   数据库(Database)是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库。   数据库:存储数据的仓库 数据库分类 网络数据库   网络数据库是指把数据库技术引入到计算机网络系统中,借助于网络技术将存储于数据库中的大量信息及时发布出去;而计算机网络借助于成熟的数据库技术对网络中的各种数据进行有效管理,并实现用户与网络中的...