单机容量问题,水平扩展
单机容量问题,水平扩展
1、mysql数据库开放远端连接
2、服务端水平对称部署
3、验证访问
方案:
一台nginx
一台mysql
两台应用服务器
数据库相关设置
开放端口连接
1、进入mysql数据库
2、select host,user,password from user;—查询权限
3、授权知道账号跟密码都可访问:grant all privileges on . to root@’%’ identified by ‘root’
4、flush privileges;刷新权限
服务器
在两台jar服务器安装java
先将java安装包传到本机
再将权限改掉:chmod - R 777 jdk-8u65-linux-x64.rpm
安装命令:rpm -ivh jdk-8u65-linux-x64.rpm
执行程序:./deploy.sh &
4-3 nginx
1、使用nginx作为web服务器
2、使用nginx作为动静分离服务器
3、使用nginx作为反向代理服务器
nginx安装
下载openresty (openresty-1。13.6.2)
修改权限:chmod -R 777 包名
解压安装:tar -xvzf 包名
进入openresty文件夹
命令:./configure
PCRE library 未安装 相关依赖
命令:yum install pcre-devel opensll-devel gcc curl
再次进行安装 命令:./configure
命令:make(编译)
命令:make install(编译 、安装)
启动nginx
在nginx目录下
命令:sbin/nginx - c conf/nginx.conf
查看是否启动:命令:netstat -an | grep 80
nginx Web服务器
前端资源上传
1、资源上传至html文件夹中
2、进入conf文件夹 命令 :vim nginx.conf
修改nginx的配置文件
原因:使得对于不同的请求(静态资源、ajx请求)
1、修改内容
2、将静态资源移动至上述路径
nginx 动静分离服务器
1、location 节点path特定resources:静态资源路径
2、location 节点其他路径:动态资源
步骤:
1、设置upstream server
在nginx.conf文件中设置
upstream backend_server{
server 192.168.178.103 weight=1;
server 192.168.178.104 weight=1;
}
反向代理的轮询时 比重是1:1
2、设置动态请求location为proxy pass 路径
location / {
proxy_pass http://backend_server;
proxy_set_header Host
h
t
t
p
h
o
s
t
:
http_host:
httphost:proxy_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
保存后重启
命令:sbin/nginx -s reload
3、开启tomcat access log验证
在项目内创建一个tomcat文件,在Application.properties
server.tomcat.accesslog.enabled = true
server.tomcat.accesslog.directory = /var/www/miaosha/tomcat
server.tomcat.accesslog.pattern = %h %l %u “%r” %s %b %D(h为远端IP地址,u远端主机的user,t为处理时长,r为http请求的第一行-请求的方法,url,s为返回状态码,b为请求respose的大小,D为处理请求的时长)
4-8分布式扩展后的性能压测
测试数据
线程数:1000 循环30次 5秒中发起
部署台数 | TPS | 反应时间(毫秒) | %CPU |
---|---|---|---|
单机-直接访问数据库 | 1500 | 500 | 80% |
nginx反向代理(与jar短连接) | 1710 | 450 | 10%左右 |
nginx反向代理(与jar长连接) | 1610 | 389 | 10%左右 |
单机带宽为20Mbps
nginx与jar为短链接状态
使用短连接不合理,在nginx/conf文件修改配置
1、在upstream backend_server{
server 192.168.178.103 weight=1;
server 192.168.178.104 weight=1;
}
中添加
upstream backend_server{
server 192.168.178.103 weight=1;
server 192.168.178.104 weight=1;
keepalive 30
}
2、location / {
proxy_pass http://backend_server;
proxy_set_header Host
h
t
t
p
h
o
s
t
:
http_host:
httphost:proxy_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}中添加
location / {
proxy_pass http://backend_server;
proxy_set_header Host
h
t
t
p
h
o
s
t
:
http_host:
httphost:proxy_port;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1
proxy_set_header Connection “”
}
3、最后reload
命令:sbin/nginx -s reload
4-9 nginx高性能原因
1、epoll多路复用(解决了io阻塞回调通知得问题)
A: java bio 模型,阻塞进程式
B:linux select模型,变更触发轮询查找,有1024数量上限
C;epoll模型,变更触发上限回调直接读取,理论上无上限
2、master-worker进程模型(可以完成平滑得过度,平滑得重启,并且基于worker得单线程模型结合epoll多路复用机制,完成高效得操作)
3、协程机制(将每个用户得请求对应到线程中得某一个协程中,然后在协程中使用epoll多路复用的机制,来完成对应得同步调用开发,完成高性能得操作)
A;依附于线程得内存模型,切换开销小
B:遇阻塞即归还执行权,代码同步
C;无需加锁
4-12 分布式会话
会话管理:
基于cookie传输sessionid:java tomcat容器session实现
基于token传输类似sessionid:java代码session实现
分布式会话:
基于cookie传输sessionid:java tomcat容器session实现迁移到redis
基于token传输类似sessionid:java代码session实现迁移到redis
4-13 分布式会话实现
下载redis
chmod - R 777 redis(包名)
tar -xvzf redis(包名)
命令:./configure
命令:make (进行首次编译)
命令:make install (进行安装)
在src目录
进入(命令:./redis-server & )后台启动
命令:./redis-cli (连接默认本机redis端口)
本机redis启动:redis-server.exe redis.windows.conf
在启动:redis-cli.exe