《集群、限流、缓存 BAT 大厂无非也就是这么作的》

《集群、限流、缓存 BAT 大厂无非也就是这么作的》

前言算法

前阵子有网友询问,如何优化网站?这个问题真的很大,跟他简单的聊了一下,随便说了几点,以为有必要整理一篇文章出来,正好前阵子在作爬虫博客,因而把大致思路分享出来,与你们互通有无,共同进步。sql

优化数据库

版本一apache

《集群、限流、缓存 BAT 大厂无非也就是这么作的》

系统开始是这样子的,一个 Tomcat 拖着一个 MySql 服务,跑在一个 2C 4G 的Linux服务器上,全部的请求都走 Tomcat,全部的查询都走 MySql,看起来像一句废话?后端

资源是有限的,那么如何有效的利用资源,提高服务性能?Tomcat 号称能抗住数十万并发访问,可是这事也得分场景,还得有足够牛逼的机器。缓存

Tomcat 优化bash

Tomcat支持如下三种模式:服务器

  • BIO:一个线程处理一个请求,缺点:并发量高时,线程数较多,浪费资源,Tomcat7或如下在Linux系统中默认使用这种方式。
  • NIO:利用Java的异步IO处理,能够经过少许的线程处理大量的请求。Tomcat8在Linux系统中默认使用这种方式。Tomcat7 必须修改Connector配置来启(conf/server.xml配置文件):
<Connector port="8080" 
 protocol="org.apache.coyote.http11.Http11NioProtocol" 
 connectionTimeout="20000"
 redirectPort="8443"/>复制代码
  • APR(Apache Portable Runtime):从操做系统层面解决io阻塞问题。Linux若是安装了apr和native,Tomcat直接启动就支持apr。

为了方便易用这里咱们选择NIO模式,小伙伴们直接下载使用 Tomcat8 以上版本便可,链接池什么的通常使用默认的便可。微信

版本二架构

《集群、限流、缓存 BAT 大厂无非也就是这么作的》

可能部分小伙伴知道 Tomcat 容器处理静态请求的性能力并不强,因此这里须要一款能处理静态文件请求又超牛逼的服务,这里推荐 Nginx,固然你可使用其变种 Tengine、OpenResty 才实现动静分离。

版本三

《集群、限流、缓存 BAT 大厂无非也就是这么作的》

后端服务连接资源是宝贵的,在高并发下,会拖慢整个系统的响应时间。这里咱们能够把一些热点数据进行缓存,后端读取缓存,若是数据存在则直接返回,不然再去读取数据库。

版本四

《集群、限流、缓存 BAT 大厂无非也就是这么作的》

资源是有限的,但用户多是无限的,还可能有一些恶意用户、爬虫、热点搜索。为了大部门用户能够正常访问,这里咱们使用前置限流,经过令牌桶算法或者漏桶算法实现多样的限流方案。

版本五

《集群、限流、缓存 BAT 大厂无非也就是这么作的》

在博客系统中,为了提高响应速度,加入了 Redis 缓存,把文章主键 ID 做为 key 值去缓存查询,若是不存在对应的 value,就去数据库中查找 。这个时候,若是请求的并发量很大,就会对后端的数据库服务形成很大的压力。这里咱们使用布隆过滤器对空命中进行拦截处理。

终极版

《集群、限流、缓存 BAT 大厂无非也就是这么作的》

  • 若是仅仅对于一个博客而已一个Nginx 足够了,后面能够带多个Tomcat 作负载均衡进群
  • Nginx 应用层面作限流,后端单个服务能够作接口限流
  • 后端服务用户 Session 能够集中存储到 Redsi 中
  • 布隆过滤拦截防止缓存穿透
  • 热点数据读取 Redis 缓存
  • 若有必要 Redis 、MySql 能够作主从集群

小结

优化过程可能仅仅是冰山一角,但大致思路差很少就是这个样子,发现问题而后解决问题,原本架构就是演进而来的。

获取资料:

本次给你们分享一些学习资料,里面包括:(高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)以及Java进阶学习路线图。

领取方式:加微信号 weixing99ting 便可获取。最后,祝你们早日学有所成!

相关文章
相关标签/搜索