1、mysql数据库的最大链接是300到700。机械硬盘是300,固态硬盘是700。
2、缓存穿透是指黑客利用在缓存中不存在的key穿透过缓存直接访问数据库,这样并发的访问数据库导致数据库挂掉。用布隆过滤器进行过滤。
3、缓存雪崩,因为缓存失效导致数据未加载到缓存中,或者缓存同一时间大面积的失效,从而导致所有请求都查数据库,导致数据库cpu和内存负载过高,甚至宕机。
第一种是由于缓存大面积同时失效导致,解决办法避免缓存设置相近的有效期。第二,对热点数据的持续高并发导致。解决办法是互斥锁lock.lock(),还可以用分布式锁。第三、有效期本身的机制,解决办法,缓存用不过期,异步更新,优点不阻塞线程,用户体验好,不会出现雪崩的效应,缺点,不保证一致性,代码复杂度增大,每个value都要维护异步代码更新,容易堆积垃圾数据。
4、countDownLatch 倒计数器,用于制造线程的并发执行
5、mysql优化的方式,一 读写分离 二 分库分表 三集群
6、用zk实现分布式锁,用到了lockcountDownLatch,利用zk的节点不能重名的特点,给zk加一个节点,如果有节点,线程阻塞。
7、数据库的表的主键最好用递增的int值,这样有利于分库分表,而且查询的速度也快。
8、数据库分库的几种方式。业内常见的水平切分方式有这么几种:
一、按照range水平切分
每一个数据服务,存储一定范围的数据,上图为例:
user0服务,存储uid范围1-1kw
user1服务,存储uid范围1kw-2kw
这个方案的好处是:
(1)规则简单,service只需判断一下uid范围就能路由到对应的存储服务
(2)数据均衡性较好
(3)比较容易扩展,可以随时加一个uid[2kw,3kw]的数据服务
不足是:
(1)请求的负载不一定均衡,一般来说,新注册的用户会比老用户更活跃,大range的服务请求压力会更大
二、按照id哈希水平切分
每一个数据服务,存储某个key值hash后的部分数据,上图为例:
user0服务,存储偶数uid数据
user1服务,存储奇数uid数据
这个方案的好处是:
(1)规则简单,service只需对uid进行hash能路由到对应的存储服务
(2)数据均衡性较好
(3)请求均匀性较好
不足是:
(1)不容易扩展,扩展一个数据服务,hash方法改变时候,可能需要进行数据迁移
9、工作线程的线程数量应该设置多少,比如说线程池的线程数量。结论
N核服务器,通过执行业务的单线程分析出本地计算时间为x,等待时间为y,则工作线程数(线程池线程数)设置为 N*(x+y)/x,能让CPU的利用率最大化。