07 2018 档案

摘要:和其他数据库相比,MySQL有点与众不同,他的架构可以在多种不同场景中应用并发挥好的作用,但同时也会带来一点选择上的困难。MySQL并不完美,却足够灵活,能够适应高要求的环境。为了充分发挥MySQL的性能并顺利地使用,就必须理解其设计。MySQL的灵活性体现在很多方面。例如,你可以通过配置使它在不同 阅读全文
posted @ 2018-07-31 23:36 写出高级BUG 阅读(390) 评论(0) 推荐(0) 编辑
摘要:本文转载自CodingLabs,原文链接 MySQL索引背后的数据结构及算法原理 目录 摘要 一、数据结构及算法基础 1. 索引的本质 2. B-Tree和B+Tree 3. 为什么使用B-Tree(B+Tree) 二、MySQL索引实现 1. MyISAM索引实现 2. InnoDB索引实现 三、 阅读全文
posted @ 2018-07-31 00:00 写出高级BUG 阅读(518) 评论(0) 推荐(0) 编辑
摘要:索引是存储引擎用于快速找到记录的一种数据结构,这是索引的基本功能。 索引对于良好的性能非常关键。尤其是当表中的数据量越来越大时,索引对性能的影响愈发重要。接下来将讲述如何创建、查看和删除索引。 索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组 阅读全文
posted @ 2018-07-30 22:44 写出高级BUG 阅读(799) 评论(0) 推荐(0) 编辑
摘要:摘要: 本文结合《Spring源码深度解析》来分析Spring 5.0.6版本的源代码。若有描述错误之处,欢迎指正。 在 Spring 中还提供了 Lifecycle 接口, Lifecycle 中包含start/stop方法,实现此接口后Spring会保证在启动的时候调用其start方法开始生命周 阅读全文
posted @ 2018-07-30 13:55 写出高级BUG 阅读(1369) 评论(0) 推荐(0) 编辑
摘要:摘要: 本文结合《Spring源码深度解析》来分析Spring 5.0.6版本的源代码。若有描述错误之处,欢迎指正。 完成BeanFactory的初始化工作,其中包括ConversionService的设置、配置冻结以及非延迟加载的bean的初始化工作。 一、ConversionService的设置 阅读全文
posted @ 2018-07-30 13:42 写出高级BUG 阅读(791) 评论(0) 推荐(0) 编辑
摘要:摘要: 本文结合《Spring源码深度解析》来分析Spring 5.0.6版本的源代码。若有描述错误之处,欢迎指正。 目录 一、激活注册的 BeanFactoryPostProcessor 1. BeanFactoryPostProcessor 的典型应用:PropertyPlaceholderCo 阅读全文
posted @ 2018-07-30 12:42 写出高级BUG 阅读(1254) 评论(1) 推荐(0) 编辑
摘要:摘要: 本文结合《Spring源码深度解析》来分析Spring 5.0.6版本的源代码。若有描述错误之处,欢迎指正。 目录 一、增加SPEL语言的支持 二、增加属性注册编辑器 1. 使用自定义属性编辑器 2. 注册Spring自带的属性编辑器CustomDateEditor 3. 添加 Applic 阅读全文
posted @ 2018-07-29 21:08 写出高级BUG 阅读(2401) 评论(0) 推荐(1) 编辑
摘要:摘要: 本文结合《Spring源码深度解析》来分析Spring 5.0.6版本的源代码。若有描述错误之处,欢迎指正。 目录 一、定制化BeanFactory 二、加载BeanDefinition obtainFreshBeanFactory方法从字面上理解是获取BeanFactory。之前有说过,A 阅读全文
posted @ 2018-07-29 13:41 写出高级BUG 阅读(1435) 评论(0) 推荐(0) 编辑
摘要:摘要: 本文结合《Spring源码深度解析》来分析Spring 5.0.6版本的源代码。若有描述错误之处,欢迎指正。 prepareRefresh函数主要是做些准备工作,例如对系统属性及环境变量的初始化及验证。 网上有人说其实这个函数没什么用,因为最后两句代码才是最为关键的,但是却没有什么逻辑处理, 阅读全文
posted @ 2018-07-29 11:19 写出高级BUG 阅读(995) 评论(0) 推荐(0) 编辑
摘要:摘要: 本文结合《Spring源码深度解析》来分析Spring 5.0.6版本的源代码。若有描述错误之处,欢迎指正。 经过前面几章的分析,相信大家已经对 Spring 中的容器功能有了简单的了解,在前面的章节中我们一直以 BeanFactory 接口以及它的默认实现类 XmlBeanFactory 阅读全文
posted @ 2018-07-29 02:37 写出高级BUG 阅读(788) 评论(0) 推荐(0) 编辑
摘要:本文结合《Spring源码深度解析》来分析Spring 5.0.6版本的源代码。若有描述错误之处,欢迎指正。 目录 一、创建bean的实例 1. autowireConstructor 2 . instantiateBean 3 . 实例化策略 二、记录创建bean的ObjectFactory 三、 阅读全文
posted @ 2018-07-29 01:45 写出高级BUG 阅读(4000) 评论(1) 推荐(2) 编辑
摘要:本文结合《Spring源码深度解析》来分析Spring 5.0.6版本的源代码。若有描述错误之处,欢迎指正。 实例化bean是一个非常复杂的过程,而其中比较难以理解的就是对循环依赖的解决, 不管之前读者有没有循环依赖方面的研究,这里有必要先对此知识点稍作回顾。 一. 什么是循环依赖 循环依赖就是循环 阅读全文
posted @ 2018-07-28 17:11 写出高级BUG 阅读(1191) 评论(0) 推荐(0) 编辑
摘要:本文结合《Spring源码深度解析》来分析Spring 5.0.6版本的源代码。若有描述错误之处,欢迎指正。 我们不可能指望在一个函数中完成一个复杂的逻辑,而且我们跟踪了这么多Spring代码, 经历了这么多函数,或多或少也发现了一些规律:一个真正干活的函数其实是以do开头的, 比如 doGetOb 阅读全文
posted @ 2018-07-28 15:59 写出高级BUG 阅读(2487) 评论(0) 推荐(1) 编辑
摘要:本文结合《Spring源码深度解析》来分析Spring 5.0.6版本的源代码。若有描述错误之处,欢迎指正。 之前我们讲解了从缓存中获取单例的过程,那么,如果缓存中不存在已经加载的单例bean就需要从头开始bean的加载过程了,而Spring使用getSingleton的重载方法实现bean的加载过 阅读全文
posted @ 2018-07-28 15:12 写出高级BUG 阅读(1477) 评论(0) 推荐(0) 编辑
摘要:摘要:本文结合《Spring源码深度解析》来分析Spring 5.0.6版本的源代码。若有描述错误之处,欢迎指正。 在getBean方法中,getObjectForBeanlnstance是个髙频率使用的方法,无论是从缓存中获得bean还是根据不同的scope策略加载bean。总之,我们得到bean 阅读全文
posted @ 2018-07-28 14:44 写出高级BUG 阅读(1756) 评论(0) 推荐(1) 编辑
摘要:摘要:本文结合《Spring源码深度解析》来分析Spring 5.0.6版本的源代码。若有描述错误之处,欢迎指正。 介绍过FactoryBean的用法后,我们就可以了解bean加载的过程了。前面已经提到过,单 例在Spring的同一个容器内只会被创建一次,后续再获取bean直接从单例缓存中获取,当然 阅读全文
posted @ 2018-07-28 13:57 写出高级BUG 阅读(1094) 评论(0) 推荐(0) 编辑
摘要:摘要:本文结合《Spring源码深度解析》来分析Spring 5.0.6版本的源代码。若有描述错误之处,欢迎指正。 一般情况下,Spring通过反射机制利用bean的class属性指定实现类来实例化bean。在某些情况下,实例化bean过程比较复杂,如果按照传统的方式,则需要在<bean>中提供大量 阅读全文
posted @ 2018-07-28 13:27 写出高级BUG 阅读(1192) 评论(0) 推荐(0) 编辑
摘要:摘要:本文结合《Spring源码深度解析》来分析Spring 5.0.6版本的源代码。若有描述错误之处,欢迎指正。 经过前面的分析,我们终于结束了对XML配置文件的解析,接下来将会面临更大的挑战,就是对bean加载的探索。bean加载的功能实现远比bean的解析要复杂得多。同样,我们还是以最开始的示 阅读全文
posted @ 2018-07-28 12:11 写出高级BUG 阅读(1426) 评论(1) 推荐(2) 编辑
摘要:摘要:本文结合《Spring源码深度解析》来分析Spring 5.0.6版本的源代码。若有描述错误之处,欢迎指正。 对配置文件解析完成后,获取的beanDefiniton已经可以进行使用了,剩下的唯一工作就是注册了,也就是processBeanDefinition方法中的BeanDefinition 阅读全文
posted @ 2018-07-28 02:08 写出高级BUG 阅读(3872) 评论(0) 推荐(0) 编辑
摘要:摘要:本文结合《Spring源码深度解析》来分析Spring 5.0.6版本的源代码。若有描述错误之处,欢迎指正。 到这里我们已经完成了分析默认标签的解析与提取过程,或许涉及的内容太多,我们已经忘了是从哪个函数开始了,我们再次回顾下默认标签解析函数的起始函数: 我们已经用了大量的篇幅分析了BeanD 阅读全文
posted @ 2018-07-28 01:10 写出高级BUG 阅读(1379) 评论(0) 推荐(0) 编辑
摘要:摘要:本文结合《Spring源码深度解析》来分析Spring 5.0.6版本的源代码。若有描述错误之处,欢迎指正。 在上一篇中已经完成了XML文档到GenericBeanDefiniton的转化,也就是说,XML中所有的配置都在GenericBeanDefinition的实例类中找到了对应的位置。 阅读全文
posted @ 2018-07-28 00:31 写出高级BUG 阅读(4199) 评论(0) 推荐(0) 编辑
摘要:摘要:本文结合《Spring源码深度解析》来分析Spring 5.0.6版本的源代码。若有描述错误之处,欢迎指正。 在上一篇中提到过Spring中的标签包括默认标签和自定义标签两种,而两种标签的用法以及解析方式存在着很大的不同。本节开始详细分析默认标签的解析过程。 默认标签的解析是在parseDef 阅读全文
posted @ 2018-07-27 19:19 写出高级BUG 阅读(2433) 评论(0) 推荐(0) 编辑
摘要:摘要:本文结合《Spring源码深度解析》来分析Spring 5.0.6版本的源代码。若有描述错误之处,欢迎指正。 当把文件转换为Document后,接下来的提取及注册bean就是我们的重头戏。继续上一篇的分析,当程序已经拥有XML文档文件的Document实例对象时,就会被引入XmlBeanDef 阅读全文
posted @ 2018-07-27 14:03 写出高级BUG 阅读(1991) 评论(1) 推荐(3) 编辑
摘要:摘要:本文结合《Spring源码深度解析》来分析Spring 5.0.6版本的源代码。若有描述错误之处,欢迎指正。 这一篇开始进行Document加载了,XmlBeanFactoryReader类对于文档读取并没有亲历亲为,而是委托给了DocumentLaoder去执行,DocumentLoader 阅读全文
posted @ 2018-07-27 12:39 写出高级BUG 阅读(2258) 评论(0) 推荐(0) 编辑
摘要:摘要:本文结合《Spring源码深度解析》来分析Spring 5.0.6版本的源代码。若有描述错误之处,欢迎指正。 经过Spring源码分析(二)容器基本用法和Spring源码分析(三)容器核心类两篇文章,我们已经对Spring的容器功能有了一个大致的了解,尽管你可能还很迷糊,但是不要紧,接下来我们 阅读全文
posted @ 2018-07-27 10:51 写出高级BUG 阅读(2821) 评论(0) 推荐(1) 编辑
摘要:摘要:本文结合《Spring源码深度解析》来分析Spring 5.0.6版本的源代码。若有描述错误之处,欢迎指正。 在上一篇文章中,我们熟悉了容器的基本用法。在这一篇,我们开始分析Spring的源码。但是在正式开始熟悉源码之前,有必要了解一下Spring中最核心的两个类。 1. DefaultLis 阅读全文
posted @ 2018-07-26 21:18 写出高级BUG 阅读(3425) 评论(0) 推荐(1) 编辑
摘要:摘要:本文结合《Spring源码深度解析》来分析Spring 5.0.6版本的源代码。若有描述错误之处,欢迎指正。 在正式分析Spring源码之前,我们有必要先来回顾一下Spring中最简单的用法。尽管我相信您已经对这个例子非常熟悉了。 Bean是Spring中最核心的概念,因为Spring就像是个 阅读全文
posted @ 2018-07-26 18:07 写出高级BUG 阅读(3312) 评论(0) 推荐(0) 编辑
摘要:摘要:本文结合《Spring源码深度解析》来分析Spring 5.0.6版本的源代码。若有描述错误之处,欢迎指正。 前言 作为一名开发人员,阅读源码是一个很好的学习方式。本文将结合《Spring源码深度解析》来分析Spring 5.0.6版本的源代码,若有描述错误之处,欢迎指正。 Spring是20 阅读全文
posted @ 2018-07-26 17:08 写出高级BUG 阅读(15880) 评论(0) 推荐(3) 编辑
摘要:ZooKeeper官网提供了Java和C的API。 本文使用Java API来实现ZooKeeper的基本操作。 前言 下图中的Replicated Database是包含完整数据树(entire data tree)的内存数据库。ZooKeeper的节点都是存放在内存中,所以读写速度很快。更新日志 阅读全文
posted @ 2018-07-24 22:00 写出高级BUG 阅读(688) 评论(0) 推荐(0) 编辑
摘要:本文转载自LDB's Blog,原文链接 ZooKeeper原理及其在Hadoop和HBase中的应用 目录 一、简介 二、基本概念 1. 集群角色 2. 会话(Session) 3. 数据节点(ZNode) 4. 版本 5. 状态信息 6. 事务操作 7. Watcher 8. ACL 三、Zoo 阅读全文
posted @ 2018-07-24 14:29 写出高级BUG 阅读(983) 评论(0) 推荐(0) 编辑
摘要:本文转载自编程迷思,原文链接 深入学习Redis(3):主从复制 前言 在前面的两篇文章中,分别介绍了Redis的内存模型和Redis的持久化。 在Redis的持久化中曾提到,Redis高可用的方案包括持久化、主从复制(及读写分离)、哨兵和集群。其中持久化侧重解决的是Redis数据的单机备份问题(从 阅读全文
posted @ 2018-07-23 23:47 写出高级BUG 阅读(400) 评论(0) 推荐(0) 编辑
摘要:本文转载自编程迷思,原文链接 深入学习Redis(2):持久化 前言 在上一篇文章中,介绍了Redis的内存模型,从这篇文章开始,将依次介绍Redis高可用相关的知识——持久化、复制(及读写分离)、哨兵、以及集群。 本文将先说明上述几种技术分别解决了Redis高可用的什么问题;然后详细介绍Redis 阅读全文
posted @ 2018-07-23 18:18 写出高级BUG 阅读(567) 评论(0) 推荐(0) 编辑
摘要:本文转载自编程迷思,原文链接 深入学习Redis(1):Redis内存模型 前言 Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分。 我们使用Redis时,会接触Redis的5种对象类型(字符串、哈希、列表、集合、有序 阅读全文
posted @ 2018-07-23 16:54 写出高级BUG 阅读(319) 评论(0) 推荐(0) 编辑
摘要:telnet的介绍可以参看《java网络编程3》中有一段介绍telnet,我们可以理解为,telnet命令是通过socket协议与服务器端通信。Dubbo提供了telnet命令去查看服务功能。 这里主要介绍一下dubbo实现telnet命令的整体实现: 当服务器端接收到的消息类型是string的时候 阅读全文
posted @ 2018-07-22 16:13 写出高级BUG 阅读(1489) 评论(0) 推荐(0) 编辑
摘要:Dubbo作为一个分布式的服务治理框架,提供了集群部署,路由,软负载均衡及容错机制。下图描述了Dubbo调用过程中的对于集群,负载等的调用关系: 集群 Cluster 将Directory中的多个Invoker伪装成一个Invoker,对上层透明,包含集群的容错机制。 Cluster接口定义: Cl 阅读全文
posted @ 2018-07-22 16:05 写出高级BUG 阅读(376) 评论(0) 推荐(0) 编辑
摘要:Refer取得invoker的过程 Spring加载每个<dubbo:reference/>标签的时候都会生成一个ReferenceBean。 如上图,ReferenceBean实现了Spring的FactoryBean接口,实现了此接口的Bean通过Spring的BeanFactory.getBe 阅读全文
posted @ 2018-07-22 03:48 写出高级BUG 阅读(2721) 评论(0) 推荐(0) 编辑
摘要:Export发布服务流程 Dubbo协议向注册中心发布服务:当服务提供方,向dubbo协议的注册中心发布服务的时候,是如何获取,创建注册中心的,如何注册以及订阅服务的,下面我们来分析其流程。 看如下配置发布服务: 每个<dubbo:service/>在Spring内部都会生成一个ServiceBea 阅读全文
posted @ 2018-07-22 03:25 写出高级BUG 阅读(1604) 评论(0) 推荐(0) 编辑
摘要:Spring在启动Dubbo服务端应用时,会实例化ServiceBean<T>并设置配置属性,然后调用export方法: 此后调用的是ServiceConfig中的doExportUrls方法: 最终实现的是如下逻辑: 代码 Exporter<?> exporter = protocol.expor 阅读全文
posted @ 2018-07-21 23:15 写出高级BUG 阅读(1011) 评论(0) 推荐(0) 编辑
摘要:Spring在启动Dubbo客户端应用时,会实例化ReferenceBean<T>并设置配置属性,然后调用ReferenceConfig中的get方法: ref = createProxy(map); 这里使用了动态代理生成了代理对象(这里也可以成为远程代理,因为在这个代理中进行了远程调用),ref 阅读全文
posted @ 2018-07-21 22:55 写出高级BUG 阅读(832) 评论(0) 推荐(0) 编辑
摘要:默认协议的rpc 过程是比较复杂的,其中涉及到了各个方面,其余各协议实际上有对这个过程进行简化;因此看懂了默认协议的rpc 过程,其他协议就非常容易懂了。在讲Dubbo通信过程之前,可以先了解:Java 远程通讯可选技术及原理 通信过程 我们可以通过如下7 点分析RPC 通信过程: 是基于什么协议实 阅读全文
posted @ 2018-07-21 17:48 写出高级BUG 阅读(705) 评论(0) 推荐(0) 编辑
摘要:本文转载自ImportNew,原文链接 Java 泛型: 什么是PECS(Producer Extends, Consumer Super) PECS指“Producer Extends,Consumer Super”。换句话说,如果参数化类型表示一个生产者,就使用<? extends T>;如果它 阅读全文
posted @ 2018-07-21 15:31 写出高级BUG 阅读(1654) 评论(0) 推荐(1) 编辑
摘要:本文转载自joemsu ,原文链接 【JDK1.8】JDK1.8集合源码阅读——TreeMap(二) TreeMap是JDK中一种排序的数据结构。在这一篇里,我们将分析TreeMap的数据结构,深入理解它的排序能力是如何实现的。这一节要有一定的数据结构基础,在阅读下面的之前,推荐大家先看一下:《算法 阅读全文
posted @ 2018-07-21 15:10 写出高级BUG 阅读(1242) 评论(0) 推荐(2) 编辑
摘要:本文转载自joemsu,原文连接 【JDK1.8】JDK1.8集合源码阅读——LinkedHashMap LinkedHashMap的数据结构 可以从上图中看到,LinkedHashMap数据结构相比较于HashMap来说,添加了双向指针,分别指向前一个节点——before和后一个节点——after 阅读全文
posted @ 2018-07-21 02:26 写出高级BUG 阅读(253) 评论(0) 推荐(0) 编辑
摘要:本文转载自无始无终,原文连接 HashMap 在 JDK 1.8 后新增的红黑树结构 传统 HashMap 的缺点 JDK 1.8 以前 HashMap 的实现是 数组+链表,即使哈希函数取得再好,也很难达到元素百分百均匀分布。 当 HashMap哈希冲突严重时,有大量的元素都存放到同一个桶中时,这 阅读全文
posted @ 2018-07-20 23:16 写出高级BUG 阅读(1193) 评论(0) 推荐(0) 编辑
摘要:本文转载自于晓飞93,原文链接 DualPivotQuickSort 双轴快速排序 源码 笔记 DualPivotQuicksort是Arrays类中提供的给基本类型的数据排序的算法。它针对每种基本数据类型都有对应的实现,实现方式有细微差异,但思路都是相同的,所以这里只挑选int类型的排序。 整个实 阅读全文
posted @ 2018-07-20 19:15 写出高级BUG 阅读(2671) 评论(0) 推荐(2) 编辑
摘要:归并排序是JDK对象数组的排序算法之一,接下来开始分析JDK的归并排序算法。 阅读全文
posted @ 2018-07-20 17:32 写出高级BUG 阅读(519) 评论(0) 推荐(0) 编辑
摘要:如无特殊说明,文中的代码均是JDK 1.8版本。 在JDK集合框架中描述过,JDK存储一组Object的集合框架是Collection。而针对Collection框架的一组操作集合体是Collections,里面包含了多种针对Collection的操作,例如:排序、查找、交换、反转、复制等。 这一节 阅读全文
posted @ 2018-07-20 16:37 写出高级BUG 阅读(7387) 评论(2) 推荐(7) 编辑
摘要:JDK中的集合框架分为两大类:Collection和Map。Collection以一组Object的形式保存元素,Map以Key-Value对的形式保存元素。 上图列出的类并不完整,只列举了平时比较常用的类。 基本接口和类型 Collection集合 该接口是Set和List的父接口,主要提供了下面 阅读全文
posted @ 2018-07-20 00:54 写出高级BUG 阅读(824) 评论(1) 推荐(1) 编辑
摘要:Invoker调用 代理有几种方式:普通代理、JDK、Javassist库动态代理、Javassist库动态字节码代理。 生成代理的目的是你调用invoker的相关函数后,就等同于是调用DubboInvoker中的相关函数,也就是将本地调用转为网络调用并获得结果。 Dubbo提供了三种代理工厂,默认 阅读全文
posted @ 2018-07-19 17:46 写出高级BUG 阅读(672) 评论(0) 推荐(0) 编辑
摘要:ExtensionLoader.java中注意到injectExtension函数是为了设置所生成的对象的field;其方法为对于有set函数的field进行设置。此时用到了ExtensionFactory;说白了ExtensionFactory就是根据类型和名字来获取对象。 下面我们来看看Exte 阅读全文
posted @ 2018-07-19 16:49 写出高级BUG 阅读(904) 评论(0) 推荐(0) 编辑
摘要:Filter Filter是Dubbo里面非常重要的模块,Dubbo里面日志记录、超时等功能都是在这一部分实现。 如上一节在介绍扩展点加载时所述,在生成Protocol的invoker时,实际上使用了装饰模式,第一个是filter,第二个是listener。 我们先来看filter,具体Protoc 阅读全文
posted @ 2018-07-19 16:21 写出高级BUG 阅读(807) 评论(0) 推荐(0) 编辑
摘要:与JDK的SPI机制类似,Dubbo也在META-INF路径下定义了多种扩展接口。只是JDK SPI机制是Java后台帮你实现读取文件并对接具体的实现类,而Dubbo是自己去读文件。 扩展点配置 扩展点机制有几个要点: 1. 根据关键字去读取配置文件,获得具体的实现类 比如在dubbo-provid 阅读全文
posted @ 2018-07-19 15:54 写出高级BUG 阅读(1468) 评论(0) 推荐(0) 编辑
摘要:SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制。 目前有不少框架用它来做服务的扩展发现, 简单来说,它就是一种动态替换发现的机制, 举个例子来说,有个接口,想运行时动态的给它添加实现,你只需要添加一个实现。 当服务的提供者提供了一种接口 阅读全文
posted @ 2018-07-19 14:17 写出高级BUG 阅读(3495) 评论(0) 推荐(0) 编辑
摘要:根据上一小节对于spring扩展schema的介绍,大概可以猜到dubbo中相关的内容是如何实现的。 再来回顾Dubbo实践(一)中定义的dubbo-provider.xml: 对应的自定义schema文件,对应的handler配置,可以在dubbo-{version}.jar 中 META-INF 阅读全文
posted @ 2018-07-19 12:42 写出高级BUG 阅读(3617) 评论(0) 推荐(0) 编辑
摘要:先回顾Dubbo实践(一)中定义的dubbo-provider.xml: 本节将分析这一部分的实现过程,即如何通过配置文件生成实现类对象。 在很多情况下,我们需要为系统提供可配置化支持,简单的做法可以直接基于Spring的标准Bean来配置,但配置较为复杂或者需要更多丰富控制的时候,会显得非常笨拙。 阅读全文
posted @ 2018-07-19 11:39 写出高级BUG 阅读(692) 评论(0) 推荐(0) 编辑
摘要:Dubbo框架在初始化和通信过程中使用了多种设计模式,可灵活控制类加载、权限控制等功能。 工厂模式 Provider在export服务时,会调用ServiceConfig的export方法。ServiceConfig中有个字段: Dubbo里有很多这种代码。这也是一种工厂模式,只是实现类的获取采用了 阅读全文
posted @ 2018-07-19 11:00 写出高级BUG 阅读(653) 评论(0) 推荐(0) 编辑
摘要:整体设计 图例说明: 图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口,位于中轴线上的为双方都用到的接口; 图中从下至上分为十层,各层均为单向依赖,右边的黑色箭头代表层之间的依赖关系,每一层都可以剥离上层被复用,其中,Service 和 Config 层为 API,其 阅读全文
posted @ 2018-07-19 10:13 写出高级BUG 阅读(279) 评论(0) 推荐(0) 编辑
摘要:架构 节点角色说明 调用关系说明 Dubbo 架构具有以下几个特点,分别是连通性、健壮性、伸缩性、以及向未来架构的升级性。 连通性 注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小; 监控中心负责统计各服务调用次数,调用时间等 阅读全文
posted @ 2018-07-19 09:47 写出高级BUG 阅读(237) 评论(0) 推荐(0) 编辑
摘要:通讯协议 1. HTTP协议 2. HTTPS协议 3. Protocol Buffers协议 服务治理 1. disconf实践(一)Ubuntu16.04部署disconf 2. disconf实践(二)基于XML的分布式配置文件管理,不会自动reload 3. disconf实践(三)基于XM 阅读全文
posted @ 2018-07-19 01:07 写出高级BUG 阅读(434) 评论(0) 推荐(0) 编辑
摘要:Protocol Buffers是Google开发一种数据描述语言,能够将结构化数据序列化,可用于数据存储、通信协议等方面。 不了解Protocol Buffers的同学可以把它理解为更快、更简单、更小的JSON或者XML,区别在于Protocol Buffers是二进制格式,而JSON和XML是文 阅读全文
posted @ 2018-07-19 00:07 写出高级BUG 阅读(546) 评论(0) 推荐(0) 编辑
摘要:摘要:本文尝试一步步还原HTTPS的设计过程,以理解为什么HTTPS最终会是这副模样。但是这并不代表HTTPS的真实设计过程。在阅读本文时,你可以尝试放下已有的对HTTPS的理解,这样更利于“还原”过程。 我们先不了聊HTTP,HTTPS,我们先从一个聊天软件说起,我们要实现A能发一个hello消息 阅读全文
posted @ 2018-07-18 23:43 写出高级BUG 阅读(531) 评论(0) 推荐(0) 编辑
摘要:协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。目前我们使用的是HTTP/1.1 版本。 当我们打开浏览器,在地址栏中输入URL,我们的浏览器给Web服务器发 阅读全文
posted @ 2018-07-18 22:49 写出高级BUG 阅读(3426) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示