1.1 Netty

Netty是JBOSS提供的一个Java开源框架,是基于NIO的客户端/服务器编程框架,既能快速开发高并发、高可用、高可靠的网络服务器程序,也能开发高可用、高可靠的客户端程序。
NIO是指非阻塞输入输出(Non-Blocking IO),也称非阻塞IO。
Netty之所以受青睐,是因为它提供了异步的、事件驱动的网络应用程序框架和工具。
与JDK原生NIO相比,Netty提供了十分简单易用的API,因而非常适合网络编程。Netty主要是基于NIO来实现的,在Netty中也可以提供阻塞IO的服务。

1.2 高并发利器Redis

任何高并发的系统不可或缺的就是缓存。Redis缓存目前已经成为缓存的事实标准。
Redis是Remote Dictionary Server(远程字典服务器)的缩写,最初是作为数据库的工具来使用的,是目前使用广泛、高效的开源缓存。
Redis通过键-值对(Key-Value Pair)的形式来存储数据,类似于Java中的Map(映射)。Redis的Key(键)只能是String(字符串)类型,Value(值)则可以是String类型、Map类型、List(列表)类型、Set(集合)类型、SortedSet(有序集合)类型。
Redis具有如下特点:

  1. 速度快。
  2. 丰富的数据结构
  3. 单线程
  4. 可持久化
  5. 支持发布/订阅。
  6. 支持Lua脚本
  7. 支持分布式锁
  8. 支持原子操作和事务
  9. 支持主-从(Master-Slave)复制与高可用(Redis Sentinel)集群(3.0版本以上)
  10. 支持管道

    1.3 分布式利器ZooKeeper

    ZooKeeper就是目前极为重要的分布式协调工具
    ZooKeeper的核心优势是实现了分布式环境的数据一致性,简单地说:每时每刻我们访问ZooKeeper的树结构时,不同的节点返回的数据都是一致的。也就是说,对ZooKeeper进行数据访问时,无论是什么时间,都不会引起“脏读”“幻读”“不可重复读”问题
    ZooKeeper也可以被理解为一种简单的分布式数据库,“脏读”是指一个事务中访问到了另外一个事务未提交的数据。“不可重复读”是指在一个事务内根据同一个条件对数据进行多次查询,但是结果却不一致,原因是其他事务对该数据进行了修改。“幻读”是指当两个完全相同的查询执行时,第二次查询所返回的结果集和第一次查询所返回的结果集不相同,原因也是另外一个事务新增、删除了第一个事务结果集中的数据。

    1.4 高性能HTTP通信技术

    QPS(Query Per Second,每秒查询率)在十万级甚至上千万级,在这些高并发应用中,如何使用高并发HTTP通信技术去提升内部各个节点的通信性能,对于提升分布式系统整体的吞吐量有着非常重大的作用。
    QPS在十万级的Web应用架构大致所示
    image.png
    对于十万级QPS流量的Web应用,如果流量增长到百万级,可以对接入层Nginx进行横向扩展,甚至可以引入LVS进行负载均衡。
    QPS在千万级的Web应用架构大致如图
    image.png