自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 收藏
  • 关注

原创 思辨领域模型-- DDD≠数据库关系模型

Eric Evans的《领域驱动设计》问世已经14年之久,到今天几乎所有业务团队都或多或少有涉及DDD。然而如果较真会发现,认真遵循DDD设计原则的团队仍是少数,在多数团队的现都是:**领域模型=数据库关系。**DDD崇尚的是oo式表达,也就是常说的充血模型,对以关系型数据库实体关系为中心的关系模型甚至是可以用鄙夷来形容。数据库关系模型以数据库关系指导编程实践,是关系对程序的外延入侵,...

2018-08-09 14:08:55 920

原创 更加深入理解Kafka--Producer篇(下)

批次积累器在创建批次之前,就在堆上为它预分配一段空间,这段空间用于装载消息。消息最终会顺序落到内存块中形成消息集。批次的逻辑结构如下: 5.0.1 * MemoryRecords即消息集的抽象,它容纳0到多条Record。 * Record则代表消息在内存中的状态,即按二进制协议格式化之后的消息结构,它是消息集的元素。 * 用户可通过compression.type配置压缩方式,开启压缩

2017-08-21 21:48:29 6207

原创 更加深入剖析Kafka--Producer篇(中)

积累器消息的发送是两段式的,Producer只将消息追加到积累器,稍后消息跟随批次被从积累器提取写入网络I/O。 3.0.1 生产者就好比是在向一个分槽的水池注水,每次注入的水必须在同一个水槽,当前水槽剩余水量不足则换另一个,如果一次注入水量大于水槽水位,则按当次注入水量砌槽。当前水槽虽然还有剩余空间,但不能被再次使用,除非该水槽被排水;发送者以水槽为单位排水,一次性排出被排水槽全部水量。总

2017-08-07 00:15:45 6328 1

原创 更加深入剖析Kafka--Producer篇(上)

背景Hadoop的诞生,揭开了数据时代的序幕,从此巨量数据有了廉价的存储和提取方案。但Hadoop的延时性显然不能满足互联时代的实时处理要求,基于用户行为的推荐、当前成交情况的补货预测以及对实时在线的各类指标监控等都要求更好的实时性。Kafka就是在这样的背景下,诞生于Linkedin,它以可靠性和巨量吞吐著称,网上清一色将它归为消息队列,用户按主题发布及订阅流经Kafka的数据,从这角度看它确实是

2017-08-07 00:14:31 4272

原创 Great Dubbo--下

逻辑集群Dubbo里两个主要参与实体是provider和consumer,两者都是相对服务而言,前者是服务的具体实现,后者是服务的消费者。服务在客户端被异化成提供同质的服务的逻辑集群,消费者的服务请求最终都会通过集群select出一个invoker进行远程调用,整个过程对用户是非感知的。 上图是客户端引用服务的完整过程,其中主要涉及5个实体: - Directory提供目录服务,一组invo

2017-02-24 09:56:33 818

原创 Great Dubbo--上

序初次接触dubbo是在2011年,当时公司项目出于成本考虑容器从Weblogic改为Tomcat,部署方式由单机改为单体多机的部署方式。对一个从没读过半本计算机书籍的人,不了解协议,不懂规范只知道SSH的菜鸟而言,完全不理解分布式的方式是如何做到互通的。晚期强迫症逼迫我一定要弄懂这其中的原理,百度、google各种关键字后找到了dubbo,于是开始了dubbo的源码研究之路。中间断断续续看了两遍。

2017-02-24 09:49:35 1732

原创 Spring beans架构--set注入

Java BeansSpring管理对象是以bean为颗粒度,在最初设计时其实是特指Java beans,因此之前的注入也几乎是清一色的set注入,直到聪明的大脑们引入了Annotation后两者才有了明显差异,慢慢进化出Spring特有的bean规范。本篇先从设计者的初衷Java Beans开始,理清楚set的注入原理,然后再(如)往(果)下(有)探(时)寻(间)Annotation注入。Java

2016-12-02 18:16:37 2115 1

原创 模块隔离原理

类加载器 提到类加载器,都会联想到大名鼎鼎的双亲委托模型,但为什么要使用双亲委托模型,能给出靠谱答案的就不多了。一个类加载器事实上也对应了一个类命名空间,换句话说,同一个类被不同加载器加载会产生两个class对象,在jvm内部会通过系统字典维护class对象和类名以及类加载器的关系。假设类A由M和N分别加载,则其在jvm里的结构如图: AM和AN分别代表被M和N加载的类A,相应的

2016-09-10 16:41:53 4520

原创 Httpclient核心架构设计

背景知识Http简介通常,我们使用IE或者safari来访问互联网上的内容,只需要输入资源地址,浏览器便会呈现给你想要的内容。这一切的背后,都是迄今为止在计算机领域最成功的协议–http协议。Http协议分为请求和响应,客户端建立连接,接着发送请求,服务端接受并处理请求,再发送应答,再由客户端接受并处理应答。浏览器是最最常见的一种客户端,它将用户的交互行为作为http请求发送,并接受服务端的应答,再

2016-05-05 21:28:11 13255 5

原创 淘宝Diamond架构分析

花了两天的时间研究了下Diamond,因为写得比较急,而且并没有使用过,只是单纯的做逆向建模,所以难免会有细节缺失,后面会时不时过来看看,然后做些补充。背景知识比较早的时候,应用一般都是单体的,配置修改后,只要通过预留的管理界面刷新进行reload即可。慢慢的,应用都主动或被动被拆分,从单一系统拆分成多个子系统,每个子系统还会对应多个运行实例。此时就面临多个问题: 1. 配置分散在多个业务子系统里

2016-04-16 11:15:03 14463 5

原创 大众点评Cat--架构分析

Cat功能强大且多,光日志的报表和图表分析就有十几种,但文档却很少,寥寥无几找到一些粒度却还很粗而且都是偏功能性的介绍。此外cat的配置也特别丰富,但几乎所有的cat文档里却鲜少提及。这些都导致很多东西都是缺失的,尤其是对于想使用cat的来说,缺失了这些东西可能意味着后面会步入大坑。大纲大众点评Cat–整体架构 大众点评Cat–server架构分析整体架构Cat的定位是实时监控平台,但是与其说是监

2016-04-04 23:15:32 22513 6

原创 大众点评Cat--Server模块架构分析

之前写过一篇dubbo cluster–架构。因为dubbo逻辑集群的功能主要是在client端,主要侧重在client的分析。后来因为工作忙和懒癌,也就没再继续server的叙述了。最近正好在看大众点评的cat源码,其中也有rpc的模块,就借此专门来分析下rpc server的实现。网络模型Cat server基于netty,是典型的reactor模型。 上图是网上找的reactor模型示例

2016-03-27 22:31:53 41671 7

原创 Spring context架构--静态结构

概念Context也就是我们常说的spring容器,打个比方,context就像是一家公司,beans则是公司的工厂,除了工厂,公司还有翻译,仓库以及办公场所等等。下面就看看context的主要构成部件。Context构成部件上图是ApplicationContext的实体静态结构,它继承了六个实体。虽然是继承,但其实context和他们的关系更像是聚合,spring使用继承主要是为了在contex

2016-03-01 23:52:01 16282

原创 Spring beans架构

IOCIOC,大名鼎鼎,如雷贯耳。官方给的定义是依赖注入(Dependency Injection)或者控制反转(Inversion of Control),都相当术语化,不太容易懂。想象下日常中的生产过程,在生产之前是客户下单,单子上会详细注明需要的产品,包括产品的各方面规格属性,然后工厂据此生产。IOC就是一个类似的过程,我们声明需要什么,工厂据此给我们生产出来。在这个过程中我们只是给出了需求清

2016-02-20 05:27:10 4446

原创 dubbo spi--实现细节

上一篇介绍了dubbo spi的架构,这一篇主要从源码角度解读下dubbo spi的实现。 整个调用过程还是挺复杂的,看的时候比较容易乱掉,我在图上按方法分了泳道。虽然这并不是泳道合适的用法,不过看起来会方便点。每个水平方面代表一个泳道,同一泳道的所有方法都是在泳道最左侧的方法里调用的。先看红线标明的3个缓存对象,分别是cachedAdaptiveInstance, cachedAdaptive

2016-01-27 00:40:25 4120

原创 Elastic search点点滴滴

在打造集中化日志那篇中,稍微提了下Elastic search。 Elk打造集中化日志Elastic search是Elk的核心,写的时候也重点在它的身上,不过还是觉得深度挖掘得不是太够,所以决定再另写一篇着重介绍下Elastic search。正如那一篇博客提到的,如果你不是喜欢夜店咖,就像千千万万的程序员一样喜欢本本分分的女人,最好再稍微带几分姿色,那选ES准没错。正如Elast

2015-12-26 19:47:03 1005

原创 用ELK打造可视化集中式日志

Elk是Elastic search, Logstash和Kibana三者的简称。Elastic search顾名思义是致力于搜索,它是一个弹性搜索的技术平台,与其相似的有Solr,二者的对比可参考下面这篇文章: Elastic search与Solr选型总结一下就是,如果你不喜欢夜店咖还是喜欢忠实可靠的老婆,那选Elastic search准没错,何况他还有那么一点美。目前运用ES的案例也不少了

2015-12-26 18:43:00 3921 1

原创 spring-session源码解读-5

session通用策略Session在浏览器通常是通过cookie保存的,cookie里保存了jessionid,代表用户的session id。一个访问路径只有一个session cookie(事实上在客户端就只有一个cookie,jsessionid是作为cookie值的一部分,这里把cookie抽象成类似服务器端的实现),也就是一个访问路径在一个浏览器上只有一个session,这是绝大多

2015-12-15 19:58:13 2046

原创 spring-session源码解读-4

spring session的多用户实现Session在浏览器通常是通过cookie保存的,cookie里保存了jessionid,代表用户的session id。一个访问路径只有一个session cookie(事实上在客户端就只有一个cookie,jsessionid是作为cookie里的一部分,这里把cookie抽象成类似服务器端的实现),也就是一个访问路径在一个浏览器上只有一个sess

2015-12-15 00:20:22 2622

原创 spring-session源码解读-3

ServletRequestWrapperServlet规范从2.3起引入了ServletRequestWrapper包装类,它把调用交给被包装的ServletRequest来执行。这样就可以对ServletRequest进行扩展。例如Tomcat就是将自己的Request类作为包装类的实体。public class ServletRequestWrapper implements ServletR

2015-12-11 00:00:49 2220

原创 spring-session源码解读-2

启用redis sessionspring通过EnableRedisHttpSession注解来启用redid session@Import(RedisHttpSessionConfiguration.class)@Configurationpublic @interface EnableRedisHttpSession { int maxInactiveIntervalInSecond

2015-12-09 20:17:21 1863

原创 spring-session源码解读-1

ServletContainerInitializerServletContainerInitializer 也是 Servlet 3.0 新增的一个接口,主要用于在容器启动阶段通过编程风格注册Filter, Servlet以及Listener,以取代通过web.xml配置注册。这样就利于开发内聚的web应用框架。例如Spring,我们使用它的web功能时,需要在web.xml中依据Spring的规

2015-12-08 23:16:07 3624

原创 extjs中js资源缓存策略

http的缓存协商浏览器对静态文件的缓存主要是通过cache-control来控制的,cache-control可以设置no-cache,max-age以及must-revalidate等来设置缓存策略。如果max-age> 0则会在max-age的时间内不访问服务器,用本地缓存的静态文件代替。如果max-ageno-cache表示不理会缓存协商,全部重新加载。这相当于是ctr

2015-12-07 23:10:29 5000

原创 cookie和session

我们对cookie的了解往往停留于浏览器的层面,对它的内部机制没有深入的理解,其实cookie恰恰不是浏览器生成,而是由服务器生成,再由浏览器缓存的。cookie首先由服务器response时生成,再交由浏览器缓存,这样在下次提交时只要把相应的cookie提交到服务器即可。cookie在浏览器端是以域名+path保存的,同域名里子path可以访问父path的cookie。例如:a) A

2015-12-04 23:24:15 712

原创 utf-8和序列化

[size=medium] 在java里一个字节是8位,char是两个字节即16位,相应的int是4个字节即32位。 一个UTF-8字符其实是UCS的实现形式,所以一般UTF-8只有三位,超过3位的则为一些象形文字之类。 首先需要明确的是计算机读取的所有东西均为字节,所以不管是什么字符最终均会转换成字节被读取。这样就引申出来一个问题:UTF-8这种多个字...

2013-03-12 01:34:15 377

原创 对过去项目的总结--高并发处理篇

[size=medium] 高并发是指对单一应用的并发访问量非常大。基于此,现在的应用往往采取集群形式部署,并将web(jsp,action和服务接口)和服务(provider)分开架设在不同服务器上。并且provider不是均匀部署的,即每台服务器上的provider实际上是不一致的。 注意:后文所指的应用均是指provider,在我们传统的mvc架构中即是业务逻辑层,对...

2013-03-04 23:07:04 223

原创 对过去项目的总结--大数据处理篇

[size=medium]之前总是困惑于大数据、高并发解决方案,感觉总是云里雾里的不知从何把握。最近闲的时候有时候会静下心来对过去做过的项目做一些沉淀,发现其实大数据,高并发的解决方案在那些项目中已经遇到过了。 众所周知,大数据处理的瓶颈在于数据库。所以从早期的单数据库单实例到后来单数据多实例再到后来数据库集群,都在想法设法提高数据库性能。但是对于几千万线上用户和动辄...

2013-03-03 19:32:44 229

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除