Netty为什么这么火?

Netty已经有了成百上千的分布式中间件、各种开源项目以及各种商业项目的应用。例如火爆的Kafka、RocketMQ等消息中间件、火热的ElasticSearch开源搜索引擎、大数据处理Hadoop的RPC框架Avro、主流的分布式通信框架Dubbo,它们都使用了Netty。总之,使用Netty开发的项目,已经有点数不过来了……

Netty之所以受青睐,是因为Netty提供异步的、事件驱动的网络应用程序框架和工具。作为一个异步框架,Netty的所有IO操作都是异步非阻塞的,通过Future-Listener机制,用户可以方便地主动获取或者通过通知机制获得IO操作结果。与JDK原生NIO相比,Netty提供了相对十分简单易用的API,因而非常适合网络编程。Netty主要是基于NIO来实现的,在Netty中也可以提供阻塞IO的服务。Netty之所以这么火,与它的巨大优点是密不可分的,大致可以总结如下:

  • API使用简单,开发门槛低。

  • 功能强大,预置了多种编解码功能,支持多种主流协议。

  • 定制能力强,可以通过ChannelHandler对通信框架进行灵活扩展。

  • 性能高,与其他业界主流的NIO框架对比,Netty的综合性能最优。

  • 成熟、稳定,Netty修复了已经发现的所有JDK NIO中的BUG,业务开发人员。

  • 不需要再为NIO的BUG而烦恼。

高并发利器Redis

任何高并发的系统,不可或缺的就是缓存。Redis缓存目前已经成为缓存的事实标准!

分布式利器ZooKeeper

突破了单体瓶颈之后的高并发,就必须靠集群了,而集群的分布式架构和协调,一定少不了可靠的分布式协调工具,ZooKeeper就是目前极为重要的分布式协调工具!


今天为大家分享的就是字节跳动内部的近600页Netty+Redis+ZooKeeper笔记,一份综合性十分高的笔记,同时这份笔记也是为了解决字节跳动内部三高而产生的一份笔记!今天免费开源!(共12章节)完整版的免费获取方式在文末!

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


第2章高并发IO的底层原理

本章聚焦的主题:一是底层IO操作的两个阶段,二是最为基础的四种IO模型,三是操作系统对高并发的底层的支持。

四种IO模型,基本上概况了当前主要的IO处理模型,理论上来说,从阻塞IO到异步IO,越往后,阻塞越少,效率也越优。在这四种IO模型中,前三种属于同步IO,因为真正的IO操作都将阻塞应用线程。

只有最后一种异步IO模型,才是真正的异步IO模型,可惜目前Linux操作系统尚欠完善。不过,通过应用层优秀框架如Netty,同样能在IO多路复用模型的基础上,开发出具备支持高并发(如百万级以上的连接)的服务器端应用。


第3章Java NIO通信基础详解

高性能的Java通信,绝对离不开Java NIO技术,现在主流的技术框架或中间件服务器,都使用了Java NIO技术,譬如Tomcat、Jetty、Netty。学习和掌握NIO技术,已经不是一项加分技能,而是一项必备技能。不管是面试,还是实际开发,作为Java的“攻城狮”(工程师的谐音),都必须掌握NIO的原理和开发实践技能。



第4章鼎鼎大名的Reactor反应器模式

Reactor反应器模式是高性能网络编程在设计和架构层面的基础模式。为什么呢?只有彻底了解反应器的原理,才能真正构建好高性能的网络应用,才能轻松地学习和掌握Netty框架。同时,反应器模式也是BAT级别大公司必不可少的面试题。


第5章并发基础中的Future异步回调模式

随着高并发系统越来越多,异步回调模式也越来越重要。在Netty源代码中,大量地使用了异步回调技术,所以,在开始介绍Netty之前,开辟整整一章,非常详细地、由浅入深地为大家介绍了异步回调模式。

本章首先为大家介绍了Java的join合并线程时“闷葫芦式”的异步阻塞,然后介绍了Java的FutureTask阻塞式的获取异步任务结果,最后介绍了Guava和Netty的异步回调方式。

Guava和Netty的异步回调是非阻塞的,而Java的join、FutureTask都是阻塞的。


第6章Netty原理与基础

Netty的目标之一,是要使开发可以做到“快速和轻松”。除了做到“快速和轻松”的开发TCP/UDP等自定义协议的通信程序之外,Netty经过精心设计,还可以做到“快速和轻松”地开发应用层协议的程序,如FTP,SMTP,HTTP以及其他的传统应用层协议。

Netty的目标之二,是要做到高性能、高可扩展性。基于Java的NIO,Netty设计了一套优秀的Reactor反应器模式。后面会详细介绍Netty中反应器模式的实现。在基于Netty的反应器模式实现中的Channel(通道)、Handler(处理器)等基类,能快速扩展以覆盖不同协议、完成不同业务处理的大量应用类



第7章Decoder与Encoder重要组件

在Netty中,解码器有ByteToMessageDecoder和MessageToMessageDecoder两大基类。如果要从ByteBuf到POJO解码,则可继承ByteToMessageDecoder基类;如果要从某一种POJO到另一种POJO解码,则可继承MessageToMessageDecoder基类。

Netty提供了不少开箱即用的Decoder解码器,能满足很多解码的场景需求,几个比较基础的解码器如下:

  • 固定长度数据包解码器——FixedLengthFrameDecoder。

  • 行分割数据包解码器——LineBasedFrameDecoder。

  • 自定义分隔符数据包解码器——DelimiterBasedFrameDecoder。

  • 自定义长度数据包解码器——LengthFieldBasedFrameDecoder。

在Netty中的编码器有MessageToByteEncoder和MessageToMessageEncoder两大重要的基类。如果要从POJO到ByteBuf编码,则可继承MessageToByteEncoder基类;如果要从某一种POJO到另一种POJO编码,则可继承MessageToMessageEncoder基类


第8章JSON和ProtoBuf序列化

ESTful进行远程交互的应用开发中使用得非常多。一般来说,在实际开发中使用较多的JSON开发包是阿里的FastJson、谷歌的Gson。

Protobuf格式是非直观的二进制序列化方式,效率比较高,主要用于高性能的通信开发。


第9章基于Netty的单体IM系统的开发实践

本章是Netty应用的综合实践篇:将综合使用前面学到的编码器、解码器、业务处理器等知识,完成一个聊天系统的设计和实现。



第10章ZooKeeper分布式协调

在分布式系统中,ZooKeeper是一个重要的协调工具。本章介绍了分布式命名服务、分布式锁的原理以及基于ZooKeeper的参考实现。

本章的那些实战案例,建议大家自己去动手掌握,无论是开始应用实际、还是大公司的面试,都是非常有用的。


第11章分布式缓存Redis

缓存是一个很简单的问题,为什么要用缓存?主要原因是数据库的查询比较耗时,而使用缓存能大大节省数据访问的时间。举个例子,假如表中有2千万个用户信息,在加载用户信息时,一次数据库查询大致的时间在数百毫秒级别。这仅仅是一次查询,如果是频繁多次的数据库查询,效率就会更低。

提升效率的通用做法是把数据加入缓存,每次加载数据之前,先去缓存中加载,如果为空,再去查询数据库并将数据加入缓存,这样可以大大提高数据访问的效率


第12章亿级高并发IM架构的开发实践

本章介绍了支撑亿级流量的高并发IM架构以及高并发架构下的技术选型。然后,集中介绍了Netty集群所涉及的分布式IM的命名服务、Worker集群的负载均衡、即时通信消息的路由和转发、分布式的在线用户统计等技术实现。



需要免费领取这份字节跳动内部近600页三高时代利器笔记的朋友麻烦帮忙转发一下这篇文章(为了让更多的人学习到这份笔记)+关注我,免费获取方式在评论区!

redis缓存路由为空_千万别看,怕你成为面霸!美团T9总结的Netty+Redis+ZooKeeper核心知识点笔记...相关推荐

  1. redis缓存路由为空_Springboot使用RedisTemplate优雅地操作redis

    作者:Jantihttp://cnblogs.com/superfj/p/9232482.html 概述 本文内容主要 关于spring-redis 关于redis的key设计 redis的基本数据结 ...

  2. redis缓存原理与实现_基于Redis实现范围查询的IP库缓存设计方案

    点击上方"码农沉思录"  发现更多精彩我先说下结果.我现在还不敢放线上去测,这是本地测的数据,我4g内存的电脑本地开redis,一次都没写完过全部数据,都是写一半后不是redis挂 ...

  3. redis 缓存过期默认时间_过期redis时间

    Redis命令--键(key) Redis 键(key) Redis 键命令用于管理 redis 的键. 语法 Redis 键命令的基本语法如下: redis 127.0.0.1:6379> C ...

  4. 只用redis不用mysql的项目_干货!带你了解为什么那么多开源项目都是用Redis!

    很多开源项目中都使用了redis,这些项目为什么使用redis?使用redis有什么好处?怎么使用redis?带着这些疑问,我们来了解一下redis. 一.什么是Redis Redis是一个免费开源用 ...

  5. 【后端-SpringCache】基于Spring Cache 封装支持Redis缓存批量操作的方式_记录下踩坑历程(pipeline或mget封装)

    Spring Cache是一个非常优秀的缓存组件,我们的应用系统正是使用的Spring Cache.但最近在优化应用系统缓存的过程中意外发现了Spring Cache的很多坑点,特意记录一下. 背景 ...

  6. redis 缓存过期默认时间_缓存的必知必会:一文搞懂Redis持久化和过期机制

    本文主要介绍了 Redis 持久化的两种机制:RDB 和 AOF,以及键过期的策略:惰性删除和定期删除,还有 RDB.AOF 和复制功能对过期键的处理. RDB RDB 是 Redis 持久化的第一种 ...

  7. Redis综述篇:与面试官彻夜长谈Redis缓存、持久化、淘汰机制、哨兵、集群底层原理!...

    点击上方关注 "终端研发部" 设为"星标",和你一起掌握更多数据库知识 于哥你好,最近面试挺多的,尤其是在问到java面试题,Redis被问的特别多,比如Red ...

  8. 总结:如何使用redis缓存加索引处理数据库百万级并发

    前言:事先说明:在实际应用中这种做法设计需要各位读者自己设计,本文只提供一种思想.准备工作:安装后本地数redis服务器,使用mysql数据库,事先插入1000万条数据,可以参考我之前的文章插入数据, ...

  9. 使用redis缓存加索引处理数据库百万级并发

    使用redis缓存加索引处理数据库百万级并发 前言:事先说明:在实际应用中这种做法设计需要各位读者自己设计,本文只提供一种思想.准备工作:安装后本地数redis服务器,使用mysql数据库,事先插入1 ...

  10. Redis缓存击穿、雪崩、穿透!(超详细)

    缓存的击穿.穿透和雪崩应该是再熟悉不过的词了,也是面试常问的高频试题. 不过,对于这三大缓存的问题,有很多人背过了解决方案,却少有人能把思路给理清的. 而且,网络上仍然充斥着,大量不太靠谱的解决方案, ...

最新文章

  1. 201621123075作业12-流与文件
  2. 防止asp.net页面多次提交数据
  3. 将自己的APK变成系统的APK
  4. [Qt教程] 第40篇 网络(十)WebKit初识
  5. Windows下MySQL数据库名及表名无法大写的问题
  6. html怎样添加css样式,html添加css样式的方法
  7. python 读文件写数据库_python读文件写数据库
  8. 9:02 2009-7-17 日志
  9. 常见运行时异常 java 114982568
  10. WampServer服务器离线问题的解决方法
  11. 记录——《C Primer Plus (第五版)》第七章编程练习第八题
  12. WIN2K8R2安装MySQL5.7及Tomcat8.5
  13. Android性能调优工具TraceView
  14. pycharm中实现sin和cos函数曲线图
  15. 怎样用捷速PDF编辑器修改PDF文档
  16. 人工智能属于计算机科学研究方向,《人工智能》课程简介
  17. 各类符号汇总:希腊、数学等
  18. 手机信号排行榜出炉!教你一招查看、提升手机信号
  19. (solved)[/usr/bin/python2: No module named pip]
  20. Word 使用宏根据文件名实现文件版本号自动更新_rev00

热门文章

  1. Maven发布工程到公共库
  2. 你想面试运维看一下你合格了吗?
  3. Windows Server 2008 R2 远程桌面服务RDS和VDI介绍
  4. Facebook KeyHash生成方法
  5. php合并两个有序链表,合并两个排序的链表
  6. 关于 springboot 的自动配置
  7. 数据库系统概论-作业(设计本科生事务管理数据库)
  8. 使用计算机音箱进行音乐播放的过程,插卡音箱音乐播放顺序调整及歌单式1
  9. 计算机课堂热身游戏,电脑课我们常玩的13个小游戏
  10. html语言标记说明,HTML中注释标签的使用方法