发表于: 2017-10-25 23:39:39

2 636



今天完成的事情:

1.部署两台web服务器,nginx做负载均衡

2. 了解缓存穿透/并发/失效和解决办法

3. nginx配置了静态资源,解决了静态资源的转发造成延迟过大

4. tomcat部署两个端口不同的项目和相关问题

5. win安装redies

5.了解redis以及和memcache的区别,redis的大致用法


明天计划的事情

. 写出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 &quot;%r&quot; %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. 当数据库返回不存在时,在缓存里存为空对象。为了存储空间对的考虑可以设置一个较短的有效期。

布隆过滤器拦截(不理解)


缓存雪崩

缓存层宕机:

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 &quot;%r&quot; %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. 1. 不用注解,用spring-date-redies
  1. 2. 用注解,用spring-date-redies
可以自定义key的规则,即实现缓存注解的CachingConfigurerSupport 接口
  1. 3. 用注解,不用spring-date-redies

要实现redisTmplet的,很麻烦,不用




进度: 

         任务开始时间:10.13

         预计完成时间:10.26

         是否有延期风险:是

禅道:http://task.ptteng.com/zentao/project-task-264.htm





返回列表 返回列表
评论

    分享到