功能
性能
可靠性
分布式的,面试会问,用池子的话讲就是,知识点啊 。
服务治理
通讯框架 技术点
- 长连接:主要是链路的创建过程到最后的关闭,耗时耗资源;每次调用都要创建的话,调用时延的问题,很可能链路创建的耗时比代码真正执行时长还多;BIO还是NIO:主要是线程模型的选择,推荐篇文章 IO – 同步,异步,阻塞,非阻塞 (亡羊补牢篇);自研还是使用开源NIO框架:一般来说还是使用开源吧,技术成熟,社区支持,现在netty和mina使用较多了吧 。
1. 通用性api;
2. 扩展性,封装底层,提供上层接口,隔离协议和底层通讯;
可靠性设计
谈分布式系统必谈可靠性 。
链路有效性
通过心跳来确认双方c、s存活,保证链路可用,心跳检测机制分为3个层面:
1. tcp层面,即tcp的keep-alive,作用于整个tcp协议栈;
2. 协议层的心跳检测,主要存在于长连接协议中,例如smpp协议;
3. 应用层的心跳,业务双方的定时发送心跳消息;
第2个没听说过,常用的是1,3 。一般使用netty的话用的是netty的读写空闲来实现心跳 。
断连
不管因为网络挂了还是服务端宕机,还是心跳超时什么的,导致链路不可用关闭,这时候就需要链路重连,需要注意的一点就是短连后,不要立即重连,留时间给系统释放资源,可以scheduler处理 。
消息缓存重发
底层消息不会立即发送(也会导致半包粘包),断链后,导致消息丢失,看有无业务需求,有就支持断链后消息重发 。
资源释放
主要是断链后,一定要保证资源销毁和释放,当然也包括一些线程池,内存等的释放 。
性能设计
性能差的三宗罪
对于底层通讯框架来说,主要是下面几个:
1. 通讯模型的选择,主要是阻塞非阻塞那些东西;
2. 序列化反序列化(后面有章单讲序列化);
3. 线程模型,主要是服务端选择什么样的线程模型来处理消息 。
通信性能三原则
既然有上面的3个问题,那就针对这些做优化了:
- 传输:BIONIOAIO的选择;选择自定义协议栈,便于优化;服务端线程模型,单线程处理还是线程池,线程池是一个,还是分优先级,Reactor还是其他什么的 。
序列化与反序列化 也就是通常所说的编码、解码 。通常的通讯框架会提供编解码的接口,也会内置一些常用的序列化反序列化工具支持 。
与通讯框架和协议的关系,感觉可以理解为:通讯框架是通道,其上跑的码流数据是利用各种序列化编码后的各种协议 。
推荐阅读
- 数码知识:华为mate30怎么设置两个系统 有两个系统吗
- r语言lag函数用法 java怎么把负数转正数
- 联想开机f2修复电脑步骤 联想拯救系统怎么用
- 教大家Windows10系统提示缺少mscomctl.ocx文件的解决方案
- 教大家Windows10系统下word工具栏消失了如何找回的方法
- 王者荣耀一天可以玩几个小时,王者荣耀健康系统时长限制介绍
- 华为手机系统修复教程,这种方法简单又实用
- 教大家windows10系统如何查看内存型号的方法
- erp系统操作方法 财务erp系统是什么软件
- 自助建站系统哪个好,国内最大自助建站介绍