技术架构
文章平均质量分 85
nuaazhaofeng
爱生活,爱coding
展开
-
SOA与微服务基本原则及对比
一、面向服务设计的原则服务可复用:不管是否存在即时复用的机会,服务均被设计为支持潜在的可复用服务共享一个标准契约:为了与服务提供者交互,消费者需要导入服务提供者的服务契约,这个契约可以是一个IDL文件,Java接口定义,WSDL文件,甚至是接口说明文档服务是松耦合的:服务被设计为功能相对独立,尽量不依赖其他服务的独立功能提供者服务是底层逻辑的抽象:只有经服务契约所暴露的服务队外部世界可见,契转载 2017-08-20 21:47:28 · 366 阅读 · 0 评论 -
【Canal源码分析】TableMetaTSDB
这是Canal在新版本引入的一个内容,主要是为了解决由于历史的DDL导致表结构与现有表结构不一致,导致的同步失败的问题。采用的是Druid和Fastsql,来记录表结构到DB中,如果需要进行回滚时,得从DB中根据时间点去查到对应的库表结构,然后进行业务的处理。也就是,如果我们想要这样的效果,需要开启TSDB的功能,同时要新增库表来记录表结构的变更。这个基本上是在parser启动时,寻找位点时需...原创 2018-05-31 13:49:21 · 1498 阅读 · 0 评论 -
【Canal源码分析】Canal Instance启动和停止
一、序列图1.1 启动1.2 停止二、源码分析2.1 启动这部分代码其实在ServerRunningMonitor的start()方法中。针对不同的destination,启动不同的CanalInstance。主要的方法在于initRunning()。private void initRunning() { if (!isStart())...原创 2018-05-24 17:52:42 · 1397 阅读 · 2 评论 -
【Canal源码分析】client工作过程
client的工作过程,需要我们自己去编写对应的逻辑,我们目前只能从example写的例子来看。目前examle中提供了两个例子,一个是单机的,一个是集群的cluster,我们后续如果需要进行开发的话,其实也是开发我们自己的client,以及client的一些逻辑。我们主要看下集群的client是如何实现和消费的,又是怎么和server进行数据交互的。我们来看看具体的代码:protec...原创 2018-05-29 16:43:46 · 1786 阅读 · 0 评论 -
【Canal源码分析】Canal Server的启动和停止过程
本文主要解析下canal server的启动过程,希望能有所收获。一、序列图1.1 启动1.2 停止二、源码分析整个server启动的过程比较复杂,看图难以理解,需要辅以文字说明。首先程序的入口在CanalLauncher的main方法中。2.1 加载配置文件String conf = System.getProperty("cana...原创 2018-05-24 15:27:52 · 1577 阅读 · 0 评论 -
【Canal源码分析】parser工作过程
本文主要分析的部分是instance启动时,parser的一个启动和工作过程。主要关注的是AbstractEventParser的start()方法中的parseThread。一、序列图二、源码分析parseThread中包含的内容比较清晰,代码不是很长,我们逐步分析下。2.1 构造数据库连接erosaConnection = buildErosaConnect...原创 2018-05-24 10:58:48 · 1097 阅读 · 0 评论 -
【Canal源码分析】Sink及Store工作过程
一、序列图二、源码分析2.1 SinkSink阶段所做的事情,就是根据一定的规则,对binlog数据进行一定的过滤。我们之前跟踪过parser过程的代码,发现在parser完成后,会把数据放到一个环形队列TransactionBuffer中,也就是这个方法:transactionBuffer.add(entry);我们具体看下add这个方法。public...原创 2018-05-25 15:01:13 · 518 阅读 · 0 评论 -
【Kafka源码】KafkaConsumer
一偏移量和消费者位置Offsets And Consumer position1 TopicPartition2 committed position提交偏移量二消费分组和主题订阅Consumer Groups and Topic Subscriptions三检测消费者失败Detecting Consumer Failures三举例1 自动提交Automatic Offset Commi原创 2017-11-16 13:31:22 · 515 阅读 · 0 评论 -
【源码解析】Sharding-Jdbc模块分析
最新的2.0版本的Sharding-Jdbc版本,由于需要支持动态配置加载,所以最新的模块信息如下:|-sharding-jdbc |-sharding-jdbc-core |-api |-constant |-exception |-executor |-hint |-jdbc原创 2017-11-20 16:34:34 · 752 阅读 · 0 评论 -
【Kafka源码】处理请求
一KafkaRequestHandlerPool二KafkaApishandle1 ApiKeys枚举类三Request数据结构1 requestId2 header3 body在KafkaServer中的入口在:apis = new KafkaApis(socketServer.requestChannel, replicaManager, groupCoordinator,原创 2017-11-15 10:42:59 · 933 阅读 · 0 评论 -
【Kafka源码】broker被选为controller之后的连锁反应
一controller epoch二注册监听器1 registerReassignedPartitionsListener11 initiateReassignReplicasForTopicPartition12 onPartitionReassignment2 registerIsrChangeNotificationListener3 registerPreferredReplic原创 2017-11-13 16:42:35 · 2491 阅读 · 0 评论 -
【源码】canal和otter的高可靠性分析
一般来说,我们对于数据库最主要的要求就是:数据不丢。不管是主从复制,还是使用类似otter+canal这样的数据库同步方案,我们最基本的需求是,在数据不丢失的前提下,尽可能的保证系统的高可用,也就是在某个节点挂掉,或者数据库发生主从切换等情况下,我们的数据同步系统依然能够发挥它的作用–数据同步。本文讨论的场景是数据库发生主从切换,本文将从源码的角度,来看看otter和canal是如何保证高可用和高可原创 2017-10-17 15:35:25 · 882 阅读 · 0 评论 -
【Kafka源码】KafkaController启动过程
一入口二实例化Controller三Controller启动1 registerSessionExpirationListener11 onControllerResignation12 controllerElectorelect2 controllerElectorstartup21 leaderChangeListener22 elect之前聊过了很多Kafka启动过程中的一原创 2017-11-08 17:31:23 · 565 阅读 · 0 评论 -
【Kafka源码】ReplicaManager启动过程
一入口二ReplicaManager实例化三启动ReplicaManager1 maybeShrinkIsr2 maybePropagateIsrChanges在KafkaServer启动过程的入口中,会启动Replica Manager,众所周知,这是一个副本管理器。replica在Kafka中扮演的角色很重要,是保证消息不丢失的一个重要概念。replica的个人理解概念如下:produ原创 2017-11-08 11:26:25 · 429 阅读 · 0 评论 -
【Guava】Optional接口来避免空指针错误
null会带来很多问题,从开始有null开始有无数程序栽在null的手里,null的含义是不清晰的,检查null在大多数情况下是不得不做的,而我们又在很多时候忘记了对null做检查,在我们的产品真正投入使用的时候,空指针异常出现了,这是一种讨厌的情况。鉴于此google的guava库中提供了Optional接口来使null快速失败,即在可能为null的对象上做了一层封装,在使用Optional静态方转载 2017-08-22 09:10:19 · 560 阅读 · 0 评论 -
做中间件的这两年总结(201704-201905)
新的篇章即将拉起,是时候给自己的这两年来个总结了。一、篇前总结这两年,从北京来到了杭州。从一个北漂变成了杭漂,买了房,买了车,养了条柯基,在这座江南城市生了根。父母健康,家庭和睦。日子过得温馨,感谢父母,感谢媳妇。这两年,完成了研究生的课程,通过了研究生的答辩。不枉我们杭州北京来回跑,飞机高铁卧铺的来回切换。每次都从南京转车,一晚卧铺的卧铺到北京。飞机取消了好几次。在学校前面的宾馆住了好多次...原创 2019-05-06 16:59:20 · 370 阅读 · 0 评论