分布式多线程JVM调优综述

java各种集合的线程安全

一,大访问量,高并发网站优化

大访问量,高并发网站优化

二,几种负载均衡技术的实现

【协议层】http重定向协议实现负载均衡
【协议层】dns域名解析负载均衡
【协议层】反向代理负载均衡
【网络层】IP负载均衡

负载均衡技术的实现

三,分布式的知识redis

分布式Redis面试常见问题及知识点归纳

四,缓存框架

缓存重点知识总结以及分布式缓存框架redis和Memcached介绍

什么是分布式缓存?

在回答什么是分布式缓存之前,我们不妨来看看一般的缓存可能会有什么样的问题

对于web服务而言,缓存的意义是当我们在向一个服务请求数据时,不用每次都向数据库去拿数据,而是可以在缓存当中有数据时,直接从缓存当中返回。这样可以提高效率和响应时间。

当我们只有一个服务器的时候,看上去似乎没有问题。但是当我们有一个集群类型的服务时,就会变得更复杂,每一次当一个cache的数据更新时,我们必须保证这个集群里面所有相关的cache全部都得到更新,否则,就有可能带来严重的问题。

或者,我们可以有一个唯一的更大的cache,但是这个cache服务可能会挂掉,因此我们可能至少需要两个。这便是分布式缓存的用意。

常见的分布式缓存框架有: Infinispan, Terracotta/Ehcache, Hazelcast, Memcached, Redis, Cassandra, Elasticache.

缓存是围绕键和值构造的,每个键都有一个缓存entry。当您想从数据库加载某些内容时,首先检查缓存是否没有带有该键的entry(例如,基于数据库记录的ID)。如果在缓存中存在,则不执行数据库查询。

但是数据是如何“distributed”的呢?同时加载所有节点上的所有数据是没有意义的,因为冗余的数据是浪费空间,并且保持缓存一致性也是一个问题。大多数解决方案依赖于所谓的“一致哈希Consistent hashing”。在查找特定键时,将计算其散列hash,并且(取决于缓存集群中的机器数量),缓存解决方案确切地知道对应的值位于哪台机器上。

Redis,Memcached,和Ehcache等缓存框架,主要的特点是什么?分别适用于哪些业务场景

分布式缓存与NoSQL

在上一个部分我们提到了缓存是围绕key和value的键值对构造的,而且计算key也需要用到hash算法。而nosql的定义是:NoSQL 又称为Not Only Sql,主要是指非关系型,分布式、支持水平扩展的数据库设计模式。(更多信息可以参考我的另一篇博客:数据库重要知识).

到这里,我们不难发现,nosql的设计理念和使用场景,是非常适合分布式缓存这种使用场景的。可以这样说:分布式缓存是nosql适用的其中一种重要的场景

为什么传统的关系型数据库难以满足这样的使用场景,原因如下

  1. 根据CAP 理论,一致性(consistency)、可用性(availability)和分区容错(partition tolerance)这3 个要素最多同时满足两个,不可能三者兼顾.对云平台中部署的大量Web 应用而言,数据可用性与分区容错的优先级通常更高,所以一般会选择适当放松一致性约束.传统数据库的事务一致性需求制约了其横向伸缩与高可用技术的实现;
  2. 传统数据库难以适应新的数据存储访问模式.Web 2.0 站点以及云平台中存在大量半结构化数据,如用户Session 数据、时间敏感的事务型数据、计算密集型任务数据等,这些状态数据更适合以Key/Value 形式存储,不需要RDBMS 提供的复杂的查询与管理功能;
  3. NoSQL 提供低延时的读写速度,支持水平扩展,这些特性对拥有海量数据访问请求的云平台而言是至关重要的.传统关系型数据无法提供同样的性能,而内存数据库容量有限且不具备扩展能力.分布式缓存作为NoSQL 的一种重要实现形式,可为云平台提供高可用的状态存储与可伸缩的应用加速服务,与其他NoSQL 系统间并无清晰的界限.平台中应用访问与系统故障均具有不可预知性,为了更好地应对这些挑战,应用软件在架构时通常采用无状态设计,大量状态信息不再由组件、容器或平台来管理,而是直接交
    付给后端的分布式缓存服务或NoSQL 系统.。

五,JVM调优策略以及常用工具

1.JVM调优策略(中)

2.常用调优工具

六,AIO.BIO.NIO原理以及介绍

AIO.BIO.NIO原理以及应用场景介绍

同步阻塞IO(JAVA BIO):
同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。

同步非阻塞IO(Java NIO) :
同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。用户进程也需要时不时的询问IO操作是否就绪,这就要求用户进程不停的去询问。

异步阻塞IO(Java NIO)
此种方式下是指应用发起一个IO操作以后,不等待内核IO操作的完成,等内核完成IO操作以后会通知应用程序,这其实就是同步和异步最关键的区别,同步必须等待或者主动的去询问IO是否完成,那么为什么说是阻塞的呢?因为此时是通过select系统调用来完成的,而select函数本身的实现方式是阻塞的,而采用select函数有个好处就是它可以同时监听多个文件句柄(如果从UNP的角度看,select属于同步操作。因为select之后,进程还需要读写数据),从而提高系统的并发性!

(Java AIO(NIO.2))异步非阻塞IO:
在此种模式下,用户进程只需要发起一个IO操作然后立即返回,等IO操作真正的完成以后,应用程序会得到IO操作完成的通知,此时用户进程只需要对数据进行处理就好了,不需要进行实际的IO读写操作,因为真正的IO读取或者写入操作已经由内核完成了。

七,线程池面试题

线程池面试知识总结

1、newSingleThreadExecutor
创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
2、newFixedThreadPool
创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
3、newCachedThreadPool
创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
4、newScheduledThreadPool
创建一个定长线程池,支持定时及周期性任务执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tronhon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值