文档章节

《分布式服务框架原理与实践》——第5章协议栈阅读笔记

杨武兵
 杨武兵
发布于 2016/07/17 16:16
字数 1830
阅读 321
收藏 10
点赞 0
评论 2

本章没有非常详细的讲解协议实现细节,而是重点讲作者自己的协议设计一些关键点和实践经验。对于我们设计实现自己的协议还是很多借鉴意义的,我们的设计实现应该参考它。

关键技术决策

是否支持多协议

最为正确的答案都肯定不是绝对的,都是根据实际需求而定。但是从现有的这些分布式服务框架来看,一个通用的服务框架,往往是支持多协议的,比如dubbo,它能够支持觉大多数RPC协议,而且还能够自行扩展;而专用的服务框架,往往支持一种或者少量的协议,这样的好处是减少了开发者的配置量,也降低了用户误用的可能性,Montan和JSF(京东内部使用的)等框架就只默认支持一种协议,当谈它们也都支持扩展协议。

公用协议和私有协议

公用协议往往成熟度非常高,通用性很强,也支持多语言,能够很好地与内部现有系统,第三方外部系统做做集成,它是有自己的使用场景的,比如REST和WebService等;私有协议往往是企业根据自己的需求全新设计的,能够在更好地满足某种特定使用场景的需求,比如能够具有更高的性能,更多的功能特性等,比如dubbo协议等,而当前流行的分布式架构,微服务架构,在这种架构下将系统拆分得粒度特别小,因而势必将增加了很多次的内部网络调用,因而产生了对高性能的RPC协议的需求,这也往往是它的使用场景的,因此服务框架往往也是两种协议都要支持的。

集成开源还是自研

开源还是自研永远是个问题,原则当然是能用开源的当然直接集成开源,成本低,成熟度高,不要重复发明轮子的告诫都告诉我们不要重新开发完全一样的东西;当没有开源的符合需求的选择时,我们可能会选择自研,但是不要忘记了要学习和借鉴开源协议实现,因为即使是重新实现,它与开源的设计与实现还是存在非常多相同部分的,而这些我们如果不去借鉴,一定会增加很多没有必要的成本,要走很多弯路的。

功能设计

通讯模型

短链接还是长链接的选择,双向通讯还是单向通讯,同步还是异步通讯,这些都是要支持的,它们都能够适用于不同的使用场景。

协议消息定义

协议消息一般设计为消息头和消息体,消息头存放通用字段和用户扩展字段,消息体则存放消息内容。

设计协议要考虑到以后协议升降后的向前兼容性,升级新的协议版本后要尽可能兼容老版本的协议,只要才不需要强制各终端要求版本升级,另外协议支持扩展型,所以实践经验是协议中要定义下面两个信息。

  • 消息头第一个字段定义为版本号。这样方便识别消息的协议版本。
  • 消息头最后一个字段定义为Map类型的扩展字段。这样方便服务框架本身或者用户扩展消息头。

可靠性设计

  1. 客户端连接超时。超时设置非常关键,它能够避免过长浪费系统资源,比如连接、线程等资源;还有一点是业务层的需要,需要有超时机制,客户端对于请求响应的时间有要求。
  2. 客户端重连机制。网络是不稳定的,尤其是互联网更是可靠性较低,因此网络协议的设计要针对这种不稳定性做好处理,当连接被中断后,客户端检测到之后要做自动重连,但是重连间隔不能太频繁,否则会浪费过多资源。
  3. 消息缓存重发。NIO框架例如netty都缓冲机制,将消息的发送先写入缓冲区,然后再会异步发送到网络上去,因此当链路发生中断的情况下要重新发送缓冲区中的消息,另外还要考虑缓冲区溢出的风险,当缓冲区溢出则抛出异常,不能客户端发送成功。
  4. 心跳机制。凌晨业务低谷时,当大量链接处于闲置后,大量链接将因为超时或者其它网络因素断开,则当业务量上来的时候会出现大量连接失效的问题,还有一些软件可能检测不到链接断开的假链接的情况,这些都需要增加合适的链接检测机制,通过在链接空闲的时间定期发送一个心跳包,当n各周期没有收到响应,则可以认为链接是无效的,则断开重连。

安全性设计

安全与运行性能,安全与开发运维效率等都存在着矛盾,那么我们在设计中如何平衡这样的矛盾体呢?本书给出了作者的一些建议。它将RPC协议的使用场景分为三个,针对不同的场景选择不同的安全策略。

  1. 企业内网开放内部系统其它模块调用服务,通常不需要安全认证和SSL/TLS传输。因为完全是自己调用自己,则完全是可信任的。
  2. 企业内网开放外部系统其它模块调用服务,通常需要通过安全认证(比如在SOA管控平台上申请调用的appId和秘药),但是不需要SSL/TLS传输,因为企业内部的系统大体上是可信任的,但是为了防止未授权的服务误调用,要么造成业务风险,要么给系统增加调用压力,形成技术风险,我们增加一个申请授权的流程,让服务提供者评估业务和技术风险后再开放其调用。
  3. 开放给企业外部第三方系统调用,则需要认证和SSL/TLS协议传输,要增加最高标准的安全控制。因为第三方具有很高的不确定性,完全不可信,还有控制第三方系统的调用频次,细粒度的权限控制,还要防止第三方系统的各种网络攻击等等。

 

 

© 著作权归作者所有

共有 人打赏支持
杨武兵

杨武兵

粉丝 236
博文 56
码字总数 123254
作品 1
昌平
架构师
加载中

评论(2)

杨武兵
杨武兵

引用来自“_eechen”的评论

拍板很好
没明白啥意思?你是指排版吗?呵呵。
J-Fla
J-Fla
拍板很好
1月中旬值得一读的10本技术新书(机器学习、Java、大数据等)!文末有福利!

1月中旬,阿里云云栖社区 联合 博文视点 为大家带来十本技术书籍(机器学习、Java、大数据等)。以下为书籍详情,文末还有福利哦! 书籍名称:Oracle数据库问题解决方案和故障排除手册 内容简...

阿里云云栖社区 ⋅ 01/12 ⋅ 0

《从Paxos到ZooKeeper:分布式一致性理论与实践》上市了

从出版社联系到如今出版,将近一年半时间,现在终于上市了,希望对有需要的同行朋友有帮助。读者朋友有任何关于本书的问题或建议,都可以通过以下途径来进行反馈: 论坛:http://dwz.cn/AGF...

nileader ⋅ 2015/01/25 ⋅ 0

读书笔记_Index

第1章 Java性能调优概述 第2章 设计优化 第3章 Java程序优化 第4章 并行程序开发及优化 第5章 JVM调优 第6章 Java性能调优工具 第1章 简介 第2章 线程安全性 第3章 对象的共享 第1章 走近Jav...

陶邦仁 ⋅ 2014/03/19 ⋅ 0

如何用思维导图学Java编程思想

摘要:如何学习Java编程思想,基本分为21个部分,看完本文你就有答案。 width="auto" src="http://ss.csdn.net/p?http://mmbiz.qpic.cn/mmbizjpg/Uic0S1r5o6Ou7kZN43vics5mNtYhTO4vhkOldOGnA...

bjweimengshu ⋅ 2017/12/23 ⋅ 0

12月初值得一读的10本技术新书(分布式架构、自然语言、程序员成长等)!文末有福利!

12月1日,阿里云云栖社区机构号 联合IT图书专业出版社 博文视点 为大家带来十本技术新书(分布式架构、自然语言、程序员成长等)。以下为书籍详情,文末还有福利哦! 书籍名称:《OpenCV算法...

阿里云云栖社区 ⋅ 2017/12/01 ⋅ 0

进阶Java架构师必看的15本书

获取高清电子版 获取以下架构书籍PDF高清电子版,请在以下公众号[java技术栈]回复"wx"加入微信群后,并到对应的Java技术栈Q群文件下载,群包含10G技术架构书籍及更多源码等技术资料,以下为部...

架构之路 ⋅ 2017/12/15 ⋅ 0

网络编程懒人入门(五):快速理解为什么说UDP有时比TCP更有优势

本文观点仅作参考,请根据自已系统的应用场景合理地选择数据传输层协议即可,无需盲目崇拜大牛言论。 1、前言 对于即时通讯开者新手来说,在开始着手编写IM或消息推送系统的代码前,最头疼的...

JackJiang2011 ⋅ 2017/12/19 ⋅ 0

《WCF全面解析》(上、下册)正式出版,即成为互动网销量排行榜首!!

“全书之写印,实系初稿。有时公私琐务猬集,每写一句,三搁其笔;有时兴会淋漓,走笔疾书,絮絮不休;有时意趣萧索,执笔木坐,草草而止。每写一段,自助覆阅,辄摇其首,觉有大不妥者,即贴...

长平狐 ⋅ 2012/09/04 ⋅ 0

分布式系统实战

导言:记得在自己大学毕业的2006年到之后近五年的工作里,源于工作经历和有限的视野,几乎对“分布式系统”没有任何概念。当然,彼时的互联网/移动互联网还未对我们的生活呈覆盖颠覆之势,很...

yaocoder ⋅ 2017/12/03 ⋅ 0

一个月入门Python爬虫,快速获取大规模数据

数据是创造和决策的原材料,高质量的数据都价值不菲。而利用爬虫,我们可以获取大量的价值数据,经分析可以发挥巨大的价值,比如: 豆瓣、知乎:爬取优质答案,筛选出各话题下热门内容,探索...

Python开发者 ⋅ 04/25 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

6.1 压缩打包介绍 6.2 gzip压缩工具 6.3 bzip2压缩工具 6.4 xz压缩工具

压缩打包介绍 使用压缩工具的好处: 使用压缩文件,不仅可以节省磁盘空间,而且在传输时还能节省网络宽带。 我们通常讲的家用宽带和机房宽带100M是有区别的: 机房宽带的上行和下行都是100M,...

Linux_老吴 ⋅ 33分钟前 ⋅ 0

SpringBoot热部署加持

概述 进行SpringBoot的Web开发过程中,我们很多时候经常需要重启Web服务器才能保证修改的 源代码文件、或者一些诸如xml的配置文件、以及一些静态文件生效,这样耗时又低效。所谓的热部署指的...

CodeSheep ⋅ 40分钟前 ⋅ 0

OSChina 周六乱弹 —— 假如你被熊困到树上

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @小小编辑:推荐歌曲《如果写不出好的和弦就该在洒满阳光的钢琴前一起吃布丁》 《如果写不出好的和弦就该在洒满阳光的钢琴前一起吃布丁》- 谢...

小小编辑 ⋅ 今天 ⋅ 5

vbs 取文件大小 字节

dim namedim fs, s'name = Inputbox("姓名")'msgbox(name)set fs = wscript.createobject("scripting.filesystemobject") 'fs为FSO实例if (fs.folderexists("c:\temp"))......

vga ⋅ 今天 ⋅ 1

高并发之Nginx的限流

首先Nginx的版本号有要求,最低为1.11.5 如果低于这个版本,在Nginx的配置中 upstream web_app { server 到达Ip1:端口 max_conns=10; server 到达Ip2:端口 max_conns=10; } server { listen ...

算法之名 ⋅ 今天 ⋅ 0

Spring | IOC AOP 注解 简单使用

写在前面的话 很久没更新笔记了,有人会抱怨:小冯啊,你是不是在偷懒啊,没有学习了。老哥,真的冤枉:我觉得我自己很菜,还在努力学习呢,正在学习Vue.js做管理系统呢。即便这样,我还是不...

Wenyi_Feng ⋅ 今天 ⋅ 0

博客迁移到 https://www.jianshu.com/u/aa501451a235

博客迁移到 https://www.jianshu.com/u/aa501451a235 本博客不再更新

为为02 ⋅ 今天 ⋅ 0

win10怎么彻底关闭自动更新

win10自带的更新每天都很多,每一次下载都要占用大量网络,而且安装要等得时间也蛮久的。 工具/原料 Win10 方法/步骤 单击左下角开始菜单点击设置图标进入设置界面 在设置窗口中输入“服务”...

阿K1225 ⋅ 今天 ⋅ 0

Elasticsearch 6.3.0 SQL功能使用案例分享

The best elasticsearch highlevel java rest api-----bboss Elasticsearch 6.3.0 官方新推出的SQL检索插件非常不错,本文一个实际案例来介绍其使用方法。 1.代码中的sql检索 @Testpu...

bboss ⋅ 今天 ⋅ 0

informix数据库在linux中的安装以及用java/c/c++访问

一、安装前准备 安装JDK(略) 到IBM官网上下载informix软件:iif.12.10.FC9DE.linux-x86_64.tar放在某个大家都可以访问的目录比如:/mypkg,并解压到该目录下。 我也放到了百度云和天翼云上...

wangxuwei ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部