Netty

记一次Netty连接池FixedChannelPool连接未释放问题的排查总结

不问归期 提交于 2020-10-03 13:26:34
Python实战社群 Java实战社群 长按识别下方二维码, 按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群 ▲ 作者丨源码笔记 来源丨源码笔记 1 前言 前几天我们又遇到了一个 Netty 报从连接池获取连接超时异常从而导致整个服务不可用的异常,报的具体异常信息是 Exception accurred when acquire channel from channel pool:TimeoutException 。当时自己看了这个异常信息,有种似曾相识的感觉,印象中自己第一次接触到该异常是不久前也遇到了 Netty 报超时错误导致整个服务不可用的问题,最终只能重启服务器来解决。于是自己去翻看了之前的异常消息,发现报的错误果真同样是从连接池获取连接超时的异常!印象中前段时间Netty报这个错误时是刚好相关网络部门做过网络调整,当时我们就认为可能是由于网络原因导致Netty获取连接超时,但是至于为啥会因为网络原因导致获取Netty连接超时后从而导致服务不可用就还是一无所知,因此,这个“幽灵”Bug暂时对我们来说成了一团谜。 2 “幽灵”Bug得以复现给了我们解决这个Bug的希望 万幸的是,这次相关同事复现了这个Bug,然后对方说只要在 并发量大一点且后台业务逻辑处理时间久 的话这个Bug就会复现,且这个Bug是伴随前台线程请求后台超时(

Java之父找工作犯难,面试时候遭遇年龄歧视,大龄程序员何去何从

谁都会走 提交于 2020-10-03 10:52:53
Java——现在最火爆的编程语言之一。 在不久之前,65岁的Java之父James Gosling在社交媒体软件上发布消息称自己在面试的时候遭遇了年龄歧视。 具体内容就是,他在面试的时候被HR告知:“通常我们在招程序员的时候,是不考虑你这个年纪的。但由于你的身份特殊(指的是他Java之父的身份),可以对你特殊考虑。“甚至还能在大型计算机公司的内部,听见程序员组团去整容的消息。 James Gosling作为Java之父的身份姑且可以在硅谷谋求到一份不错的职务,但是其他普通的年长从业者可就没那么好的待遇,他们的焦虑和歧视,迫使他们不得不从事外贸。履历和思想上使自己更年轻化。 想必大家也都听说过,某35岁计算机高管因年龄太大被辞退,不得不每天送外卖维持生计。这也是为什么程序员们,组团去整容来使自己更加年轻。 从计算机行业发展势头越来越猛的时候,中国的IT从业人员就逐步趋于年轻化。对于公司来说,聘请年轻的员工也有很多的好处。因为年轻的员工价钱更便宜,然后都是刚毕业或者刚就业不久,可以给公司带来更多的活力。 并且互联网职业的加班是心知肚明的,这个时候年轻人就更有自己的价值,他们有更充沛的体力和精力工作,从其他方面考虑,年轻人的父母相对年纪不大,大多数也没有结婚生子,更不会有后顾之忧,也不会被家庭拖累。 前几年看新闻的时候就注意到了,现在国内的大部分大企业都在清理老员工,给新人提供更多的机会

项目系统Netty的Channel和用户之间的关系绑定正确做法,以及Channel通道的安全性方案

為{幸葍}努か 提交于 2020-10-03 04:10:29
前言 考虑一个功能业务,在 web 程序中向指定的某个用户进行实时通讯 在Web运用的 Socket 通讯功能中(如在线客服),为保证点对点通讯.而这个看似简单的根据用户寻到起 channel 通道实际会碰到不少问题 web程序中的 Http 协议是无状态的 一般项目中 socket 服务和 web 项目是独立部署的 socket 连接存在重连的情况,而 Channel 对象每次都不一样 Channel 是面向网卡绑定的,无法序列化 解决方案 通过管理一个线程安全的 用户标识 (如用户主键)和对应 channel 的 map 链表 private final ConcurrentHashMap<String, Channel> channelMap = new ConcurrentHashMap<>(); 那么问题来了, 在 netty 模块中怎么得到这个 用户标识 ? 又如何保证 netty socket 模块可以安全的识别某个通道属于某个用户?(这个可以像上面一样的方式解决) netty socket 模块接收到一条消息又任何证明这条通道是可信的? 在 netty 的实现中是没有认证也没有 HttpSession 这个东西的,也就是说.在 netty 程序线程中是无法得到web项目登录的用户情况的. 出于这点,参考 web 项目集群的 session 共享方案

项目系统Netty的Channel和用户之间的关系绑定正确做法,以及Channel通道的安全性方案

时间秒杀一切 提交于 2020-10-03 02:52:22
前言 考虑一个功能业务,在 web 程序中向指定的某个用户进行实时通讯 在Web运用的 Socket 通讯功能中(如在线客服),为保证点对点通讯.而这个看似简单的根据用户寻到起 channel 通道实际会碰到不少问题 web程序中的 Http 协议是无状态的 一般项目中 socket 服务和 web 项目是独立部署的 socket 连接存在重连的情况,而 Channel 对象每次都不一样 Channel 是面向网卡绑定的,无法序列化 解决方案 通过管理一个线程安全的 用户标识 (如用户主键)和对应 channel 的 map 链表 private final ConcurrentHashMap<String, Channel> channelMap = new ConcurrentHashMap<>(); 那么问题来了, 在 netty 模块中怎么得到这个 用户标识 ? 又如何保证 netty socket 模块可以安全的识别某个通道属于某个用户?(这个可以像上面一样的方式解决) netty socket 模块接收到一条消息又任何证明这条通道是可信的? 在 netty 的实现中是没有认证也没有 HttpSession 这个东西的,也就是说.在 netty 程序线程中是无法得到web项目登录的用户情况的. 出于这点,参考 web 项目集群的 session 共享方案

.NET 5.0 RC1 发布,离正式版发布仅剩两个版本,与 netty 相比更具竞争力

不想你离开。 提交于 2020-10-02 21:09:36
原文:http://dwz.win/Qf8 作者:Richard 翻译:精致码农-王亮 说明: 1. 本译文并不是完全逐句翻译的,存在部分语句我实在不知道如何翻译或组织就根据个人理解用自己的话表述了。 2. 本文有不少超链接,由于微信公众号和头条平台外链会被剔除 URL 地址,所以原来本是超链接的内容会显示为纯文本,如果你需要这些信息你可以移步到我的 知乎 和 博客园 阅读(搜索精致码农可找到我)。 今天我们发布了 .NET 5.0 Release Candidate 1 (RC1)。它是目前最接近 .NET 5.0 的一个版本,也是在 11 月正式发布之前的两个 RC 版本中的第一个 RC 版本。RC1 是一个“上线”版本,表示你可以在生产环境中使用它了。 与此同时,我们一直在寻找最终正式版发布之前应该被修复的任何关键错误报告。我们需要你的反馈来帮助我们一起跨越 .NET 5.0 正式发布这道胜利的终点线。 我们今天也发布了 ASP.NET Core 和 EF Core 的 RC1 版本。 你可以下载适用于 Windows、macOS 和 Linux 的 .NET 5.0 版本: 安装程序和二进制包 容器镜像 快速安装程序 发布说明 已知问题 GitHub Issue 跟踪 你需要最新的预览版 Visual Studio (包括 Visual Studio for Mac)

数据库链接池终于搞对了,从100ms优化到3ms!

眉间皱痕 提交于 2020-10-02 21:00:29
“ 我在研究 HikariCP(一个数据库连接池)时无意间在 HikariCP 的 Github wiki 上看到了一篇文章,这篇文章有力地消除了我一直以来的疑虑,看完之后感觉神清气爽。 图片来自 Pexels 本文内容 95% 译自这篇文章 : https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing 数据库连接池的配置是开发者们常常搞出坑的地方,在配置数据库连接池时,有几个可以说是和直觉背道而驰的原则需要明确。 1 万并发用户访问 想象你有一个网站,压力虽然还没到 Facebook 那个级别,但也有个 1 万上下的并发访问,也就是说差不多 2 万左右的 TPS。 那么这个网站的数据库连接池应该设置成多大呢?结果可能会让你惊讶,因为这个问题的正确问法是:“这个网站的数据库连接池应该设置成多小呢?” 下面这个视频是 Oracle Real World Performance Group 发布的,请先看完: http://www.dailymotion.com/video/x2s8uec 因为这视频是英文解说且没有字幕,我替大家做一下简单的概括:视频中对 Oracle 数据库进行压力测试,9600 并发线程进行数据库操作,每两次访问数据库的操作之间 sleep 550ms,一开始设置的中间件线程池大小为

还在羡慕别人高薪?这样读源码,想不升薪都难!

人盡茶涼 提交于 2020-10-02 20:42:49
程序员在工作过程中,会遇到很多需要阅读源码的场景,比如技术预研、选择技术框架、接手以前的项目、review他人的代码、维护老产品等等。可以说,阅读源代码是程序员的基本功,这项基本功是否扎实,会在很大程度上影响一个程序员在技术上的成长速度。 2014年的时候《Qt on Android核心编程》和《Qt Quick核心编程》时作者在编写时,很多内容都是通过分析Qt源码搞明白的。这阵子研究CEF和PPAPI,也主要靠研究源代码来搞明白用法。最近工作上要修改已有项目的一个子系统,也是得硬着头皮先读懂代码。 总之在开发工作这十来年中,读过太多源码了,从源代码中学习到太多东西了,如果不阅读源代码,真不知道自己能否成长起来。 写代码是从模仿开始的,提高也是从观摩别人的优秀设计和代码开始的。所以阅读源码至关重要,接下来咱从下列方面聊聊阅读源码的事儿。 目的 工具 知识准备 运行与开发环境 笔记 实用技巧 心理调试(散步在各个环节) 目的 当我们阅读面前的源码时,无非有以下几种目的: 纯粹学习 添加新功能 重构旧代码 修复他人的Bug 不同的目的会有不同的心情,会影响到工作的进展,像修复他人的Bug这种事情,类似于没被掰弯的男猿捏着鼻子给另外一个男人擦屁股,是很恶心的,很容易让人拒绝的。所以因这种目标而阅读源码,往往是欲拒还迎、欲说还休,效率较低。然而修复实际工作中帮别人修复Bug这种情形

超罕见!Alibaba内部流行的“Java突击宝典”,金九银十程序员升职加薪必备!

折月煮酒 提交于 2020-10-02 11:17:21
前言 Alibaba作为一线互联网公司的代表,是大部分程序员梦寐以求的工作场所,确实大厂出来的程序员,其背景也更值钱,含金量也会更高。实际上,Alibaba程序员早已成为行业内学习的榜样和标杆,但实际上光鲜的背后付出的血汗是我们没看到的。那么阿里程序员平常都是怎么学习的呢? 今天就讲讲让我们一众菜鸡惊艳到的“Java突击宝典”,这份宝典在Alibaba内部流行已久,适合各个年限的程序员来学习,它主要将需要学习的技术栈分为了三个阶段: 0-1年开发经验(夯实基础):Java基础+并发编程+JVM基础+设计模式+SQL基础与优化+HTTP/TCP协议+算法与数据结构+学习能力+ 源码+Redis+了解一个消息产品 1-3年开发经验(合格的程序员):JVM基础调优+常见框架源码+MySQL优化+缓存+熟悉消息中间件(至少一个)+熟悉微服务(至少一个)+互联网项目经验+ Netty+分布式技术 4-5年开发经验(提升技术广度与深度):性能调优+分布式技术+微服务+技术选型+分布式场景问题+互联网项目经验+ 项目管理+团队管理 这三个阶段具体的内容如何?见下文揭晓吧。当然,文章有限,不能全部描述出来,有完整的pdf版可免费分享,添加下方小助手VX即可获取 0-1年:夯实基础 1.Java基础(Java异常分类及处理+Java反射+Java注解+Java内部类+Java泛型+Java序列化

2020java面试总结

…衆ロ難τιáo~ 提交于 2020-10-02 08:02:08
博主背景:92年生,渣本毕业,java岗,经验接近6年,base上海 本文宗旨:本文旨在将博主最近的面试经历分享给大家,并作些总结,尽量为在准备面试的同学缩小面试准备的范围,或者至少让同学们知道现在企业都问些啥,以及一些面试的注意事项,希望对你有参考作用 本次面试情况:2020年7月中开始,持续3周多时间,面了13家,2家没过,1家意外,10家通过,如下: 1) 拍拍贷 ,业务岗资深技术专家+基础架构部资深技术专家,技术五面(这家经历比较特殊,两个岗位都通过了,所以技术面了5轮) 2) 平安普惠金融 ,职级C2,技术三面(通过) 3) 微众银行 ,技术两面(通过),博主现在的东家. 4) 北京什么值得买 ,架构师岗(一面没过) 5) soul ,高级java,技术三面(通过) 6) 多点small ,技术三面(通过) 7) 萨摩耶数科 ,技术三面(通过) 8) 中国电信 ,云计算部门,技术三面(挂在技术三面) 9) 哈罗单车 ,技术两面(通过) 10) 蚂蚁金服 ,国际事业群(就是出了意外的那家.....技术一面+做题,当场面试官反馈通过,第二天出了幺蛾子,说是我们公司算他们资方,不能招,我当然认为是扯淡,后续跟猎头了解到,蚂蚁对资方企业的员工简历有几个月的冷冻期,非常遗憾,没见识到蚂蚁面试官的厉害...) 11) 饿了么 ,风控部门,职级P7(饿了么P7只能对标阿里P6,P6+)