发表于: 2017-10-25 23:39:39
2 636
今天完成的事情:
1.部署两台web服务器,nginx做负载均衡
2. 了解缓存穿透/并发/失效和解决办法
3. nginx配置了静态资源,解决了静态资源的转发造成延迟过大
4. tomcat部署两个端口不同的项目和相关问题
5. win安装redies
5.了解redis以及和memcache的区别,redis的大致用法
明天计划的事情
1 . 写出redes,并应用
2. 部署代码到没有问题
3. 重新做压测
遇到的问题:
一个tomcat下的两个容器问题
当nginx配置为:
upstream linuxidc {
server 60.205.182.65:14200 weight=5;
server task6.rcy9527.top:14206 weight=7;
}
server {
listen 80;
server_name task6.rcy9527.top;
location / {
#root html;
#index index.html index.htm;
proxy_pass http://linuxidc;
}
}
tomcat配置为;
<Host name="task6.rcy9527.top" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
<Context path="" reloadable="true" docBase="/usr/local/tomcat/webapps/tasksix" />
</Host>
以上配置不能通过task6.rcy9527.top:80 访问
把红字变为:localhost即可
收获:
1.部署两台web服务器,nginx做负载均衡
upstream linuxidc {
server 60.205.182.65:14200 weight=5;
server task6.rcy9527.top:14206 weight=7;
}
2. 了解缓存穿透/雪崩/并发(热点)/失效和解决办法
http://www.jianshu.com/p/d96906140199
https://zhuanlan.zhihu.com/p/26151305
http://mp.weixin.qq.com/s/TBCEwLVAXdsTszRVpXhVug
缓存穿透:
绕过缓存层直接访问数据库
例如:
登陆输入没有注册过的用户名密码
缓存里不存这种没有意义的数据,访问数据库的并发量大幅提高,造成后端宕机。
解决办法:
1. 当数据库返回不存在时,在缓存里存为空对象。为了存储空间对的考虑可以设置一个较短的有效期。
2 布隆过滤器拦截(不理解)
缓存雪崩
缓存层宕机:
1. 可以用分布式来解决
2. 降级隔离什么的看不懂
缓存并发(热点):
当大量并发访问,而且缓存里不存在,或者缓存失效
1. 建立互斥锁,如果key不存在,就加锁,然后去DB查询返回结果并存到缓存后解开锁。
2. 永不过期(不明白)
缓存失效:
并发很高时可能会出在某一个时间同时生成了很多的缓存,并且过期时间都一样,这个时候就可能引发一当过期时间到后,这些缓存同时失效,请求全部转发到DB,DB可能会压力过重。
简单方案就时讲缓存失效时间分散开,比如我们可以在原有的失效时间基础上增加一个随机值,比如1-5分钟随机,这样每一个缓存的过期时间的重复率就会降低,就很难引发集体失效的事件。
3. nginx配置了静态资源,解决了静态资源的转发造成延迟过大
location /statics/ {
root /usr/local/tomcat/webapps/tasksix/;
autoindex on;
}
不让tomcat来读取静态资源,nginx来截取转发,有效提高相应时间。
并发下90%的线1200降到了86.(666)
4. tomcat部署两个端口不同
<Service name="Catalina">
<Connector port="14206" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
<Context path="" reloadable="true" docBase="/usr/local/tomcat/webapps/tasksix" />
</Host>
</Engine>
</Service>
注意红字的配置不一样就行
5.了解redis以及和memcache的区别,redis的大致用法
区别:
1. redies支持持久化的缓存,当重启服务器缓存不丢失(就是缓存部分存到硬盘上,连续存储,只在内存保存key,不存value)
2. redies支持数据类型有String ,hash,list,Sorted set,set(后面两个不明白)。memcache只能存String
redies在JAVA和spring配合有大致三种用法
- 1. 不用注解,用spring-date-redies
- 2. 用注解,用spring-date-redies
- 3. 用注解,不用spring-date-redies
要实现redisTmplet的,很麻烦,不用
进度:
任务开始时间:10.13
预计完成时间:10.26
是否有延期风险:是
禅道:http://task.ptteng.com/zentao/project-task-264.htm
评论