
规约
布道
专注但要有大局观(先大后小,思路为先,实验为辅)
展开
-
幂等解疑
在编程中,幂等(idempotent)特点就是其任意多次执行所产生的影响均与一次执行的影响相同。幂等的场景有很多,这里不再列举。然而很多人对幂等有一些误解:提到幂等就侃侃而谈悲观锁、乐观锁和分布式锁。这是不对的,其实幂等并不是并发场景下的才有问题,幂等的核心是确保唯一性,重点是防止数据重复。关于并发可以用幂等的手段来解决部分并发场景,也可以使用并发的手段来解决部分幂等,也可参阅之前文章。...原创 2019-05-24 23:08:06 · 1296 阅读 · 0 评论 -
Http2.0 协议
目前国内大部分互联网都还在使用 HTTP1.1 协议对外提供 API 服务,不过很多大型互联网公司都已经有大量的业务线在使用了 HTTP2.0 协议,因为 Http2.0 支持的 Streaming 和 Duplexing 可以将请求和响应消息进行分片交叉传送,可以大幅提升传输效率。据 W3Techs 统计,截止 2018 年 6 月份,已经有 26% 的大型互联网服务已经开始使用 HTTP2.0...原创 2019-05-09 23:10:17 · 5484 阅读 · 0 评论 -
基本功:关于长连接那点事
玩rpc、Netty、连接池的童鞋一定知道长连接,TCP 本身并没有长短连接的区别,长短与否完全取决于我们怎么用它。通常要求高性能需要完成端到端频繁通信以及连接个数受限的系统交互一般都采用长连接。另外长连接还常常被用来做数据的推送,可以很方便的实现 push 模型。短连接每次通信时,创建 Socket,完成三次握手,一次通信结束,调用socket.close()关闭。这就是一般意义上的短连...原创 2019-05-02 22:09:01 · 1318 阅读 · 0 评论 -
你不知道的HTTP和TCP的KeepAlive
持久连接的好处在于减少了 TCP 连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。另外,减少开销的那部分时间,使请求和响应能够更早地结束。HTTP的KeepAlive和TCP的KeepAlive其实并不是一个概念,这一点很多人理解都是有误的。HTTP 协议的 KeepAlive 意图在于连接复用,同一个连接上串行方式传递请求-响应数据,在 HTTP/1.1 中,所有的连接默认都是持久连...原创 2019-05-02 21:19:36 · 1785 阅读 · 0 评论 -
响应式编程之网络新约:RSocket
响应式reactive是Java中高效应用的下一个前沿,但它目前主要有两个障碍:数据访问和网络。RSocket是一种新的第7层语言无关的应用网络协议(解决后者),它由Facebook,Netifi和Pivotal等工程师开发,提供Java,JavaScript,C ++和Kotlin等实现,RSocket与Servlet并不是同类的产品。RSocketRSocket RSocket是一个二...原创 2019-05-01 20:40:53 · 20463 阅读 · 1 评论 -
值得一读的《架构整洁之道》笔记
“如何写出整洁的架构”这样的话题,的确每个人都可以侃侃而谈,但真理往往掌握在少数人的手中,他们是资深专家,他们是技术达人。其实某年之前我也范范的梳理过应用架构设计应遵循的原则,那如何才能获取少数人的架构思想呢?《架构整洁之道》是一本非常棒的书,它值得每位技术专家去参悟,看它如何秉持最简单的两个观点(分层和依赖规则)开发,就能开发出干净整洁的系统架构。1. 软件的价值我们所说的架构是软件系统...原创 2019-04-27 16:28:48 · 9733 阅读 · 0 评论 -
基本功:消息协议
消息是信息交换的主体,简单的讲,就是两个进程约定一个协议格式。消息表示指的是序列化后的消息字节流在直观上的表现形式,它看起来是对人类友好还是对计算机友好。文本形式对人类友好,二进制形式对计算机友好。每个消息都有其内部字段结构,结构构成了消息内部的逻辑规则,程序要按照结构规则来决定字段序列化的顺序。接下来将带你了解 RPC 的消息协议背后有哪些需要考虑的基本点。目录1. 消息边界1.1 ...原创 2019-04-17 22:58:52 · 15007 阅读 · 1 评论 -
nginx gzip带来的启示
网站的流量越来越多大,对于使用nginx的优化变得非常重要,经过gzip(GNU-ZIP)压缩后页面大小可以变为原来的30%甚至更小,当用户浏览页面的时候速度会块得多。gzip是规定的三种标准HTTP压缩格式之一,目前绝大多数的网站都在使gzip传HTML、CSS、JavaScript等资源文件。目录1. gzip交互流程2. 任何内容都可以开启gzip压缩?3. ngi...原创 2019-03-18 16:08:40 · 1552 阅读 · 0 评论 -
响应式编程系列二《rxjava》
响应式编程是什么,在上一篇规约中已经提到过,这里不再赘述。那接下来我们将深入检出的掌握RxJava。目录1. RxJava背景2. 官方定义3. 实现原理3.1 基本实现步骤3.2Observer和Subscriber的区别4. Rx1.x4.1 事件流程4.2 Sync & Async4.3 操作符4.4 背压4.5 Schedule...原创 2018-10-16 15:55:29 · 1969 阅读 · 0 评论 -
Hessian 协议解析
Hessian 是由 caucho 提供的一个基于 binary-RPC 实现的远程通讯 library 。它是高性能二进制协议,支持很多种语言,众所周知大名鼎鼎的开源rpc的框架中都有使用。以下内容的理解均来自官网1.0.2协议,为降低理解上的偏差会大量使用源引用。目录1. 设计目标2. 数据类型2.1 null2.2 boolean2.3 int2.4 long...翻译 2018-12-08 22:46:24 · 5037 阅读 · 0 评论 -
GraphQL学习分享
如何有效处理日益增长不断变化的Web/Mobile端复杂的数据需求。个人认为,REST原论文最大的功劳在于前后端分离与无状态请求,而REST的资源化的请求方式只适合面向简单的请求,对于具有复杂资源间关联的请求就有点无能为力。目录为何需要GraphQL前言介绍核心概念java实践QA参考资料为何需要GraphQL需要进行多次往返以获取视图所需的数据:REST ...原创 2017-10-09 18:29:13 · 755 阅读 · 0 评论 -
API/SPI可拓展性设计
API:API(Application Programming Interface)表示应用程序编程接口。SPI:SPI(Service Provider Interface)表示服务提供商接口。API与SPI的关系框架提供API及其实现,框架在实现过程中提供SPI回调机制。SPI是框架的扩展点。如果使用框架方要扩展框架,可以自己实现SPI并注入框架,于是框架使用方其实也是一个服务提供商。SP...转载 2017-08-25 17:08:41 · 1474 阅读 · 0 评论 -
快速掌握Servlet规约
servlet 是基于 Java 的 Web 组件,由容器进行管理,来生成动态内容。像其他基于 Java 的组件技术一样,servlet 也是基于平台无关的 Java 类格式,被编译为平台无关的字节码,可以被基于 Java 技术的 Web 服务器动态加载并运行。容器(Container),有时候也叫做 servlet 引擎,是 Web 服务器为支持 servlet 功能扩展的部分。客户端通过 se...原创 2017-03-23 14:20:51 · 605 阅读 · 0 评论 -
值得一读的《应用架构设计应遵循的原则》
架构设计看起来是一个很空洞的话题,一般都是战略定位,战术执行,而本文分享的主要是战术方面的技巧。目录1. API与SPI分离2. 服务域/实体域/会话域分离3. 在重要的过程上设置拦截接口4. 重要的状态的变更发送事件并留出监听接口5. 扩展尽可能职责单一,具有可组合性6. 微核插件式,平等对待第三方7. 不要控制外部对象的生命周期8. 可配置一定可编程,并保持...转载 2016-12-21 16:47:41 · 2162 阅读 · 0 评论 -
HTTP协议透析
Web 使用一种名为 HTTP(HyperText Transfer Protocol,超文本传输协议1)的协议作为规范,完成从客户端到服务器端等一系列运作流程。可以说,Web 是建立在 HTTP 协议上通信的,所有的WWW文件都必须遵守这个标准。HTTP 协议和 TCP/IP 协议族内的其他众多的协议相同,用于客户端和服务器之间的通信,设计HTTP最初的目的是为了提供一种发布和接收HTML页面...原创 2016-09-21 11:01:43 · 750 阅读 · 0 评论 -
设计模式透析与分类
经典的《设计模式》一书归纳出23种设计模式,本文按《易学设计模式》一书归纳分类如下:1.创建型模式前面讲过,社会化的分工越来越细,自然在软件设计方面也是如此,因此对象的创建和对象的使用分开也就成为了必然趋势。因为对象的创建会消耗掉系统的很多资源,所以单独对对象的创建进行研究,从而能够高效地创建对象就是创建型模式要探讨的问题。这里有6个具体的创建型模式可供研究,它们分别是:简单工厂模式(原创 2014-04-09 17:07:19 · 4152 阅读 · 0 评论