“云时代架构”经典文章阅读感想八

(支持百万连接的系统应该如何设计其高并发架构)

  连接共分为四个步骤:1建立连接、2.发送请求、3.返回响应、4.断开连接。系统通信就是通过建立连接进行系统之间的通信。随着系统的越来越多的信息需求、用户越来越多、数据越来越大,所需要的连接也就越来越大。这篇主要讲解的便是通过Kafka应对大量客户端的连接。即支持百万连接的解决方法。

  连接分为短连接和长连接两种:

  短连接就是每次发送请求时都需要建立连接,每次发送结束之后都需要断开连接,在不断地连接、断开的操作中一定会产生大量的资源消耗,因此长连接便未了解决这一问题,长连接就是在返回响应之后并不断开连接,在之后的发送请求以及返回响应时并不会再次需要建立连接。

短连接

长连接

但是长连接会带来因为需要维持与设备之间的连接所需要的线程,随着需要连接的设备越来越多所带来的消耗也是巨大的。

实际上,对于大名鼎鼎的消息系统Kafka来说,Kafka [1]  是一种高吞吐量 [2]  的分布式发布订阅消息系统,有如下特性:通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能;高吞吐量即使是非常普通的硬件Kafka也可以支持每秒数百万的消息;支持通过Kafka服务器和消费机集群来分区消息。他也是会面对同样的问题,因为他需要应对大量的客户端连接。

有很多生产者和消费者都要跟Kafka建立类似上面的长连接,然后基于一个连接,一直不停的通信,生产者需要连接,向Kafka发送一个链接,然后通过kafka也要通过这个链接不停的返回给生产者,消费者也需要通过一个连接不停的从Kafka获取数据,Kafka需要通过这个连接不停的返回数据给消费者.

即kafka扮演一个中间节点,负责生产者与消费者之间的连接。

然而kafka并非是万能的,生产者、消费者少点还好,如果生产者、消费者有很多,kafka也不可能去维护如此多的线程。这是不现实的,因为线程是昂贵的资源,不可能在集群里使用那么多的线程。

针对这一问题,Kafka提出了Reactor多路复用这一解决方案,Kafka采用是Reactor多路复用模型这一架构策略.简单来说,就是提供一个acceptor线程,基于底层操作系统的支持,实现连接请求监听。如果有某个设备发送了建立连接的请求过来,那么那个线程就把这个建立好的连接交给processor线程。每个processor线程会被分配N多个连接,一个线程就可以负责维持N多个连接,他同样会基于底层操作系统的支持监听N多连接的请求。果某个连接发送了请求过来,那么这个processor线程就会把请求放到一个请求队列里去。着后台有一个线程池,这个线程池里有工作线程,会从请求队列里获取请求,处理请求,接着将请求对应的响应放到每个processor线程对应的一个响应队列里去。最后,processor线程会把自己的响应队列里的响应发送回给客户端。

为什么可以实现百万线程的连接,就是processor线程是一个维护等多个线程,在操作系统的特殊机制的支持,一个processor监听多个连接请求。而且那个processor线程仅仅是接收请求和发送响应,所有的请求都会入队列排队,交给后台线程池来处理。在这种模式下,每台机器有限的线程数量可以抗住大量的连接。

因此实际上我们在设计这种支撑大量连接的系统的时候,完全可以参考这种架构,设计成多路复用的模式,用几十个线程处理成千上万个连接,最终实现百万连接的处理架构。

在实现百万连接中使用的多路复用的解决方案,以及提供一个排队队列,接受和处理分离这些思想其实很早就有,只是不能灵活的运用他们,因此在今后的实践工作中不仅仅是学习编程、更重要的是拓宽自己的知识面,深入了解原理。

转载于:https://www.cnblogs.com/877612838zzx/p/11054988.html

“云时代架构”经典文章阅读感想八相关推荐

  1. “云时代架构”经典文章阅读感想十二

    云时代架构"经典文章阅读感想十二 (牛逼的架构师是怎么炼成的?) 前几周阅读的三四十岁的大龄程序员,应该如何保持自己的职场竞争力?中提到如何在35岁左右可以实现掌握有核心竞争力.其中之一便是 ...

  2. “云时代架构”经典文章阅读感想十六

    云时代架构"经典文章阅读感想十六 (支付宝架构师眼中的高并发架构) 经过这一学期的阅读,看到最多的一个名词就是高并发. 高并发高并发经常会发生在有大活跃用户量,用户高聚集的业务场景中,如:秒 ...

  3. 云时代架构系列经典技术书籍

    云时代架构系列经典技术书籍包括: 1. <分布式服务架构:原理.设计与实战> 2. <可伸缩服务架构:框架与中间件> 3. <互联网轻量级框架SSM源码解密> 4. ...

  4. 云时代架构阅读笔记二——Java性能优化(二)

    承接上文Java性能优化(一)https://www.cnblogs.com/guo-xu/p/11019267.html 4)尽量确定StringBuffer的容量 在说和这个标题相关之前,先说一下 ...

  5. 云时代架构阅读笔记十五——架构设计思维(一)

    对于架构设计人们已经提出了许多方法,分类为:工件驱动的方法:用例驱动的法:模式驱动的方法:领域驱动的方法.一个经典的架构设计过程模型,沿用了RUP中迭代增量的思想,由分析.描述.选择.构造和组合5个阶 ...

  6. 云时代架构--阅读笔记03

    安全意识十原则(一) 我是软件工程的学生,精力主要集中在业务开发中.功能实现中,较少的注意软件的安全意识,在校的我们所做的项目还比较小型,如果针对工作后,公司项目的业务实现,我们只是简单做一下扫描和渗 ...

  7. 云时代架构阅读笔记十三——你的系统如何处理高并发?

    1 从最基础的地方做起,优化我们写的代码,减少必要的资源浪费. a.避免频繁的使用new对象,对于整个应用只需要存在一个实例的类,我们可以使用单例模式.对于String连接操作,使用StringBuf ...

  8. 云时代架构阅读笔记二——一次CPU负载超高的分析

    本文为转载,博客原地址:http://www.jianshu.com/p/4a6fe6c82311 上线发号器,发现该进程的cpu占用率很高,接近100% . top结果如下: 查询具体的线程cpu占 ...

  9. 云时代架构读后感4--IT架构的本质

    IT架构的本质 原文地址:http://mp.weixin.qq.com/s?__biz=MzAwNTQ4MTQ4NQ==&mid=2453562304&idx=1&sn=be ...

最新文章

  1. HMM -GMM 理清不错
  2. 传说中的贝叶斯统计到底有什么来头?
  3. HOG特征向量的代码 源代码改
  4. :src 三目运算
  5. pb 哪里找到系统图标_win10电脑桌面上“回收站”和“此电脑”图标不见了怎么办...
  6. QT的QScriptEngine类的使用
  7. android id设计模式,Android与设计模式话题
  8. 流包装器实现WebShell免杀
  9. 《父亲家书》选:母亲的手摔伤了
  10. hdmi接口有什么用_你的电脑为什么没有HDMI接口?
  11. LogoSharp:Logo语言的C#实现
  12. QT中PRO文件写法的详细介绍
  13. Java 调用 Impala - JDBC 调用Impala
  14. php的crypt,php使用crypt()函数进行加密
  15. 使用阿里云加速器 配置 Docker 镜像加速器
  16. html谷歌浏览器实现自动播报语音,vue中解决chrome浏览器自动播放音频 和MP3语音打包到线上...
  17. Excel绘制动态图和甘特图
  18. 周云蓬献唱《杜甫三章》实证“把古人唱成亲人”
  19. Linux管道命令(pipe)
  20. CVPR2020 | MAL:联合解决目标检测中的定位与分类问题,自动选择最佳anchor

热门文章

  1. 云存储之对象存储性价比小谈
  2. sencha touch 入门学习资料大全
  3. 从imdb爬取ml-100k的电影封面
  4. Web前端JavaScript笔记(4)节点
  5. react 注释html,React之JSX语法
  6. 用python做逻辑回归_python实现逻辑回归
  7. Python实现学生出勤记录
  8. python爬虫ip代理池_爬虫教程-Python3网络爬虫开发——IP代理池的维护
  9. 美团点评2020年测试工程师笔试题
  10. 9.6.1 三维数据可视化之平面图