
网络通信
自由圣骑士
喜欢学习、喜欢接近新事物。
展开
-
Reactor模式
在扯到Kafka之前我们先来说说Reactor模式,基本上只要是底层的高性能网络通信就离不开Reactor模式。像Netty、Redis都是使用Reactor模式。像我们以前刚学网络编程的时候以下代码可是非常的熟悉,新来一个请求,要么在当前线程直接处理了,要么新起一个线程处理。在早期这样的编程是没问题的,但是随着互联网的快速发展,单线程处理不过来,也不能充分的利用计算机资源。而每个请求都新起一个线程去处理,资源的要求就太高了,并且创建线程也是一个重操作。说到这有人想到了,那搞个线程池不就完事了嘛,转载 2020-08-22 17:43:49 · 246 阅读 · 0 评论 -
HTTPS 的工作原理
当你打开浏览器,访问某个网站,如果网址旁有个小锁,代表访问的网址是安全的,反之不安全。当我们没有看到那个小锁的小图标的时候,需要提高警惕,不要随意输入个人重要的资料。所有的银行和支付相关的网站都是100%使用HTTPS的。我们为什么需要HTTPS?主要有三个原因:保护隐私(Privacy):所有信息都是加密传播,第三方无法窃听数据。如果使用HTTP明文传输数据的话,很可能被第三方劫持数据,那么所输入的密码或者其他个人资料都被暴露在他人面前,后果可想而知。数据完整性(Integraty):一旦第三方转载 2020-06-18 10:36:52 · 581 阅读 · 0 评论 -
如何设计一个高性能短链系统
如何设计一个高性能短链系统原创 2020-03-21 16:24:17 · 430 阅读 · 0 评论 -
TCP/IP四层网络模型和OSI七层网络模型
首先要说一下,四层模型和七层模型,我们往往是可以一块儿来聊的。1、首先我问要明白,为啥要有协议设想一下,各个电脑厂商,比如IBM、苹果啥的,都弄自己的协议,结果就苹果电脑和苹果电脑自己可以通信,和IBM电脑就不可以通信,这不是尴尬么。所以搞一个国际通行的协议,大家都按照这个来,所有电脑都可以通信,不是很好么。此时就必须搞一个标准的网络模型出来,大家都按照这个来走,大家都要遵守统一的规范。这就...原创 2020-02-04 08:37:03 · 1016 阅读 · 1 评论 -
一个简单的 HTTP 调用,为什么时延这么大?
1. 背景最近项目测试遇到个奇怪的现象,在测试环境通过 Apache HttpClient 调用后端的 HTTP 服务,平均耗时居然接近 39.2ms。可能你乍一看觉得这不是很正常吗,有什么好奇怪的?其实不然,我再来说下一些基本信息,该后端的 HTTP 服务并没有什么业务逻辑,只是将一段字符串转成大写然后返回,字符串长度也仅只有 100 字符,另外网络 ping 延时只有 1.9ms左右。...原创 2020-01-01 16:23:32 · 505 阅读 · 0 评论 -
httpClient不是单例的导致OOM
案发现场昨天晚上突然短信收到 APM (即 Application Performance Management 的简称,我们内部自己搭建了这样一套系统来对应用的性能、可靠性进行线上的监控和预警的一种机制)大量告警画外音: 监控是一种非常重要的发现问题的手段,没有的话一定要及时建立哦紧接着运维打来电话告知线上部署的四台机器全部 OOM (out of memory, 内存不足),服务全部不可...原创 2019-12-21 13:08:34 · 929 阅读 · 1 评论 -
一个 TCP 连接可以发多少个 HTTP 请求
要搞懂这个问题,我们需要先解决下面五个问题:现代浏览器在与服务器建立了一个 TCP 连接后是否会在一个 HTTP 请求完成后断开?什么情况下会断开?1、一个 TCP 连接可以对应几个 HTTP 请求?2、一个 TCP 连接中 HTTP 请求发送可以一起发送么(比如一起发三个请求,再三个响应一起接收)?3、为什么有的时候刷新页面不需要重新建立 SSL 连接?4、浏览器对同一 Host 建立...原创 2019-09-27 12:01:17 · 549 阅读 · 0 评论 -
Java的IO模型
1、同步与异步的概念想要搞明白IO模型,就先得搞明白“同步”与“异步”的关系。所谓的“同步”,比如说调用者去调用一个接口,这个接口比如要执行一些磁盘文件读写操作,或者是网络通信操作。假设是“同步”的模式,调用者必须要等待这个接口的磁盘读写或者网络通信的操作执行完毕了,调用者才能返回,这就是“同步”,如下图所示:所谓的“异步”,就是说这个调用者调用接口之后,直接就返回了,他去干别的事儿了,...原创 2019-09-12 15:18:06 · 149 阅读 · 0 评论 -
浅谈Nginx服务器的内部核心架构设计
1、前言Nginx 是一个 免费的,开源的,高性能 的 HTTP 服务器和 反向代理,以及 IMAP / POP3 代理服务器。 Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx是一个 Web 服务器,也可以用作 反向代理,负载均衡器 和 HTTP 缓存。很多高知名度的网站都使用 Nginx,如: Netflix, GitHub, SoundCloud, ...原创 2019-09-12 14:17:28 · 169 阅读 · 0 评论 -
一次http请求由于开启了延时ACK确认,开启了Nagle算法导致请求时间延长的解决办法
1、业务场景最近项目测试遇到个奇怪的现象,在测试环境通过 Apache HttpClient 调用后端的 HTTP 服务,平均耗时居然接近 39.2ms。可能乍一看觉得这不是很正常吗,有什么好奇怪的?其实不然,我再来说下一些基本信息,该后端的 HTTP 服务并没有什么业务逻辑,只是将一段字符串转成大写然后返回,字符串长度也仅只有 100 字符,另外网络 ping 延时只有 1.9ms左右。...原创 2019-09-11 14:47:37 · 1790 阅读 · 1 评论 -
Nginx工作原理、进程模型、http请求流程
1、Nginx 工作原理Nginx由内核和模块组成,Nginx本身做的工作实际很少,当它接到一个HTTP请求时,它仅仅是通过查找配置文件将此次请求映射到一个location block。此location中所配置的各个指令则会启动不同的模块去完成工作,因此模块可以看做Nginx真正的劳动工作者。通常一个location中的指令会涉及一个handler模块和多个filter模块(当然,多个lo...原创 2019-09-09 16:00:47 · 203 阅读 · 0 评论 -
简单介绍url
java.net.URL 类将 URL 地址进行了封装,并提供了解析 URL 地址的基本方法,比如获取 URL 的主机名和端口号。java.net.URLConnection 则代表了应用程序和 URL 之间的通信链接,可用于读取和写入此 URL 引用的资源。1、什么是 URL为了搞清楚什么是 URL,需要引入另外两个概念 URI 和 URN。URI = Universal Resource...原创 2019-09-03 10:30:34 · 525 阅读 · 0 评论 -
TCP三次握手四次挥手的过程
添加链接描述转载 2019-09-02 15:29:39 · 117 阅读 · 0 评论 -
Http和Socket
前沿我们先来看一张经典图:HTTP(HyperText Transfer Protocol) 即超文本传输协议,它是基于 TCP/IP 协议之上的应用层协议,TCP/IP 属于传输层协议,主要用来解决数据如何在网络中进行传输,而 HTTP 属于应用层协议,主要用来解决数据如何包装,在实际开发中,有的公司会在 C/S 结构的项目中使用自定义协议,一般自定义协议就是指自定义应用层协议。就像我从深...原创 2019-08-01 12:07:22 · 244 阅读 · 0 评论 -
redis单线程的原因和并发快的原因
Redis的高并发和快速原因1、redis是基于内存的,内存的读写速度非常快;2、redis是单线程的,省去了很多上下文切换线程的时间;3、redis使用多路复用技术,可以处理并发的连接。非阻塞IO 内部实现采用epoll,采用了epoll+自己实现的简单的事件框架。epoll中的读、写、关闭、连接都转化成了事件,然后利用epoll的多路复用特性,绝不在io上浪费一点时间。为什么redis...原创 2019-08-08 16:27:58 · 366 阅读 · 0 评论 -
NIO、BIO、AIO
AIO、BIO、NIO的区别IO模型主要分类同步(synchronous) IO和异步(asynchronous) IO阻塞(blocking) IO和非阻塞(non-blocking)IO同步阻塞(blocking-IO)简称BIO同步非阻塞(non-blocking-IO)简称NIO异步非阻塞(synchronous-non-blocking-IO)简称AIOBIO (同步阻塞I...原创 2019-08-05 17:10:40 · 152 阅读 · 0 评论