| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> Netty百万级高并发支持 -> 正文阅读 |
|
[系统运维]Netty百万级高并发支持 |
1. 百万级并发场景实际场景下,百万级并发请求是较多的,比如电商的促销、12306抢票、健康码查询等等,这些场景要求应用服务稳定,能最大化资源利用。所以实际应用程序设计时,会对QPS并发做预估处理,通过QPS选择合适的设计实现和对应的服务器资源数。一般会做如下要求:
2. 为什么选择netty做高并发面临高并发场景诉求,解决办法有三个主题:
2.1 IO传输模型IO在计算机中指Input/Output,也就是输入和输出。计算机运行时数据是在内存中驻留,涉及到数据交换的地方,通常是磁盘、网络等,就需要IO接口。 LINUX中进程无法直接操作I/O设备,必须通过系统调用请求kernel来协助完成I/O动作。内核会为每个I/O设备维护一个缓冲区。IO输入时,应用进程请求内核,内核会先看缓冲区中有没有相应的缓存数据,有数据则直接复制到进程空间,没有的话再到设备中读取。通常用户进程中的一个完整IO分为两阶段:用户进程空间<-->内核空间、内核空间<- ->设备空间。 由于CPU和内存的速度远远高于外设的速度,所以在IO编程中,就存在速度严重不匹配的问题,所以有了同步/异步,阻塞和非阻塞IO之分。 IO模型分为:BIO、NIO、IO多路复用、信号驱动IO和AIO。
异步IO是「内核数据准备好」和「数据从内核态拷贝到用户态」这两个过程都不用等待,所以只有AIon才是真正的一步IO。 2.2 线程模型先了解一下Reactor模式, 在Reactor模式中,有5种角色:
Reactor 单线程模型: 优点:模型简单,没有多线程、进程通信、竞争的问题,全部都在一个线程中完成 多线程Reactor 优点:可以充分的利用多核cpu 的处理能力 主从Reactor ? 优点:父线程与子线程的数据交互简单职责明确,父线程只需要接收新连接,子线程完成后续的业务处理。 2.3?零拷贝
2.4 内存池? ? ? ? 对于缓冲区来说,尤其是对于堆外直接内存的分配和回收,是一种耗时的操作。为了尽量重复利用缓冲区内存,Netty设计了一套基于内存池的缓冲区重用机制。 2.5 无锁化的串行设计理念????????大多数应用场景下,并行多线程处理可以提升系统的并发性能。但如果共享资源竞争激烈,就会造成严重的锁竞争,导致系统性能的下降。为了尽可能避免锁竞争带来的性能损耗,可以通过串行化设计来避免多线程竞争和同步锁,即消息的处理尽可能在同一个线程内完成,不进行线程切换。 2.6 高效的并发编程Netty的高效并发编程主要体现在如下几点:
2.7 对高性能的序列化框架的支持影响序列化性能的关键因素有:序列化后的码流大小(网络带宽的占用);序列化/反序列化的性能(CPU资源占用)和是否支持跨语言。Netty默认提供了对Google Protobuf的支持,用户也可以通过扩展Netty的编解码接口接入其他高性能的序列化框架进行编解码,例如Thrift的压缩二进制编解码框架。 3. netty的使用姿势
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 9:45:48- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |