您好,欢迎访问代理记账网站
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

《Netty_Redis_Zookeeper高并发实战》学习笔记

第1章 高并发时代的必备技能

基于NIO的客户端、服务端编程框架netty
    JBOSS提供的java开源框架,既能开发高并发、高可用、高可靠的服务端程序,也能开发高可用、高可靠的客户端程序。
    NIO(Non-blocking I/O) 非阻塞输入输出

    使用Netty的应用:kafka、RocketMQ等消息中间件,Elastic Search搜索引擎、大数据处理Hadoop的RPC框架、主流分布式通信框架Dubbo
    Netty受青睐的原因:Netty提供异步的、事件驱动的网络应用程序框架和工具。Netty所有的IO操作都是异步非阻塞的,通过Future-listener机制,用户可以很方便的主动获取或者通过通知机制获取IO操作结果
    Netty的优点:
        API使用简单,开发门槛低
        功能强大,预置了多种编解码功能,支持多种主流协议
        性能高,与其他业界主流NIO框架对比,Netty的综合性能最优
        成熟、稳定,Netty修复了JDK NIO的bug
        社区活跃,版本迭代周期短,发现的bug能够及时被修复
    互联网大厂面试必杀器


高并发利器redis
    Remote Dictionary Service 远程字典服务器 C语言开发 将数据保存在内存中,数据存取速度快
    通过key-value的形式来存取数据,key只能是String类型,value类型包括:String、List、Map、Set、SortedSet
    应用场景:缓存信息(商品内容、新闻内容等),分布式会话、聊天室好友列表、任务队列(秒杀、抢购、12306)、应用的排行榜、访问统计、数据过期处理
    优点:
        速度快    不需要等待磁盘IO
        丰富的数据结构 String list map set sortedSet
        单线程    避免了线程切换和锁机制的性能消耗
        支持持久化    支持RDB和AOF两种方式,将内存中的数据写入外部的物理存储设备
        支持发布订阅
        支持Lua脚本
        支持分布式锁
        支持原子操作和事务
        支持主从(master-slave)复制与高可用(redis-sentinel)集群
        支持管道    可以将多个命令一次性发送到服务器,然后由服务器一次性返回所有结果,在批量执行命令的场景中,可以减少网络传输开销


分布式利器zookeeper
    分布式协调工具,核心优势:实现了分布式环境的数据一致性。


第2章    高并发IO的底层原理
    IO操作实际上是内核缓存和进程缓存的数据交换

    client<——————>网卡<————read&write————>内核缓冲区<————read&write————>用户线程缓冲区

    同步阻塞IO(Blocking IO):内核IO彻底操作完成后才能返回用户空间执行用户操作,传统的IO模型都是同步阻塞IO,在Java中,默认创建的Socket都是阻塞的。一个线程维护一个连接的IO操作,高并发场景下不可用
    同步非阻塞IO(Non-Blocking IO):用户空间的操作不需要等待内核IO彻底完成,只需要内核IO返回一个状态即可继续进行用户空间的操作。线程不断轮询内核,占用CPU,高并发场景下不直接使用
    IO多路复用(IO Multiplexing):Reactor 反应器设计模式,也称异步阻塞IO。一个选择器查询线程可以同时处理成千上万个连接,Java语言的NIO(New IO)、Netty框架使用的就是IO多路复用模型
    异步IO(Asynchronous IO):为彻底解除线程阻塞
        用户空间与内核空间的调用方式反过来,用户空间的线程变成被动接收者,而内核空间成了主动调用者,类似于Java的回调模式,用户空间的线程在内核空间注册了各种IO事件的回调函数,由内核主动调用

    通过修改文件句柄数限制来支持百万级并发连接,使用分布式搜索引擎Elastic Search和Netty时需要修改文件句柄数量限制,否则会发出“Socket/File:Can't open so many files”的错误提示
    修改当前用户环境命令:ulimit -n 1000000
    修改开机启动文件:/etc/rc.local 加入 ulimit -SHn 1000000(修改硬性极限(实际极限)需要root用户权限)
    修改Linux极限配置文件:/etc/security/limits.conf 加入
        soft nofile 1000000
        hard nofile 1000000

第3章    Java NIO通信基础详解

        Java NIO 三个核心组件
            Buffer 缓冲区
            Channel 通道
                FileChannel
                SocketChannel
                ServerSocketChannel
                DatagramChannel
            Selector 选择器


分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进