自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 netty源码解析(一)服务端channel创建及初始化

本系列源码是基于netty 4.1.6版本。netty服务端启动代码如下:public final class Server { public static void main(String[] args) throws Exception { EventLoopGroup bossGroup = new NioEventLoopGroup(1); ...

2019-07-02 17:58:14 1180

原创 Zookeeper 概述及ZAB协议

一、Zookeeper 简介 ZooKeeper 是一个开源的分布式应用程序协调服务器,其为分布式系统提供一致性服务。 其一致性是通过基于 Paxos 算法的 ZAB 协议完成的。其主要功能包括:配置中心、注册中心、 分布式同步、集群管理等。1.功能简介(1)配置中心分布式系统中,很多服务都是部署在集群中的,即多台服务器中部署着完全相同的应用, 起着完全相同的作用。当然,集群...

2019-06-10 17:04:44 1110

原创 微服务注册中心本质及最佳选择

一、注册中心本质及关键设计考量 注册中心最本质的功能可以看成是一个Query函数Si = F(service-name),以service-name为查询参数,service-name对应的服务的可用的endpoints (ip:port)列表为返回值. CAP 和 BASE 理论相信读者都已经耳熟能详,其业已成了指导分布式系统及互联网应用构建的关键原则之一,那么注册中心...

2019-05-24 20:34:25 2771

原创 互联网架构演进之路

互联网产品常常面临庞大的用户量,日均数十亿PV的高并发,PB级别的数据存储等问题的挑战,同时要求保证系统的高可用和弹性伸缩,并且能够根据需要进行快速迭代扩展,这些都对于系统架构提出了很高的要求。 互联网架构从简到繁的演进经历了单体架构-水平分层架构/SOA架构-微服务架构以及最新的service mesh的演进过程。如下图:一、单体架构 早期互联网产品用户量少,...

2019-05-23 18:49:44 11803

原创 springboot源码解析(二) springboot启动过程

springboot启动入口类如下:@SpringBootApplicationpublic class SpringBootApplication { public static void main(String[] args) { SpringApplication.run(SpringBootApplication.class, args); }}进入run方法:...

2019-05-07 17:49:14 664

原创 springboot源码解析(一) springboot自动装配原理

springboot解决了spring以及springmvc繁琐的配置的痛点,以“约定大于配置”为原则,实现了自动装配。下面来探究下springboot自动装配原理。一、何为装配把bean放入到Spring的Ioc容器叫做装配,那么在装配Bean的时候,我们首先要知道哪些类需要被装配,实现这一方式的途径总体上说分为两种,一种是传统的xml方式,另一种则是注解方式。下面介绍下通过注解来实现装...

2019-04-01 14:48:52 4246

原创 dubbo源码解析(十一) dubbo服务端返回及消费端接收原理

当客户端发送请求时,服务端接受的代码为NettyHandler的messageReceived方法: @Override public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception { NettyChannel channel = NettyChannel.g...

2018-03-28 14:48:22 1889

原创 dubbo源码解析(十) dubbo服务引用原理

 dubbo服务引用是通过spring的schema实现的。消费端的配置如下: <dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService"/>进入DubboNamespaceHandler这个类:按照前几节的介绍,context.getBean("demoS...

2018-03-20 17:53:26 1284

原创 dubbo源码解析(九) dubbo中的zookeeper使用

在前两节中写到,dubbo连接zookeeper是通过下面代码来实现的: final Registry registry = getRegistry(originInvoker);进入 RegistryFactory$Adpative的getRegistry方法:通过spi获得ZookeeperRegistryFactory 的一个对象,进入ZookeeperRegistryFactory 的父类...

2018-03-19 18:38:45 880

原创 dubbo源码解析(八) dubbo中的netty使用

在上一节中写到,dubbo中netty服务暴露是通过下面代码来实现的:final ExporterChangeableWrapper<T> exporter = doLocalExport(originInvoker);进入RegistryProtocol的doLocalExport方法:进入protocol的export方法最终进入DubboProtocol的export方法serv...

2018-03-17 17:16:55 7533

原创 dubbo源码解析(七) dubbo远程服务暴露

上一节分析了 exportLocal(url),即dubbo本地服务暴露的源码,本节主要分析 dubbo远程服务暴露的方法。其中logger打印的内容如下:Register dubbo service com.alibaba.dubbo.demo.DemoService url dubbo://192.168.135.192:20880/com.alibaba.dubbo.demo.DemoSer...

2018-03-17 11:22:00 1339 3

原创 dubbo源码解析(六) dubbo服务发布过程及本地暴露

下图是dubbo服务发布过程中的日志:从上述的日志,可以总结出dubbo服务的过程有六步:1.暴露本地服务Export dubbo service com.alibaba.dubbo.demo.DemoService to local registry, dubbo version: 2.0.0, current host: 127.0.0.12.暴露远程服务Export dubbo servic...

2018-03-12 23:05:41 3377

原创 dubbo源码解析(五) dubbo中的spring使用

dubbo启动spring的代码如下:dubbo采用了spring自定义的schema。首先简单介绍下spring自定义的schema。完成一个自定义配置一般需要以下步骤:1.设计配置属性和JavaBean 2.编写XSD文件 3.编写NamespaceHandler和BeanDefinitionParser完成解析工作 4.编写spring.handlers和spring.schemas串联起所...

2018-03-11 20:24:55 871

原创 dubbo源码解析(四) dubbo spi 生成指定类

上一节分析了ExtensionLoader.getExtensionLoader(Class<T> type).getAdaptiveExtension()源码,本节分析 ExtensionLoader.getExtensionLoader(Class<T> type).getExtension(String name)的源码。这是上节生成的动态类Protocol$Adpa...

2018-03-11 11:16:33 841

原创 dubbo源码解析(三) dubbo spi 动态生成类

上一节分析了在getAdaptiveExtensionClass方法中,如果cachedAdaptiveClass中有值,说明配置文件中的某一个类含有adaptive注解,则返回该类的实例,getAdaptiveExtension()方法结束。如果cachedAdaptiveClass中没有值,则调用createAdaptiveExtensionClass();此方法的作用是根据模板代码动态的...

2018-03-10 18:31:03 6864

原创 dubbo源码解析(二) dubbo spi adaptive实现

上一节分析了ExtensionLoader.getExtensionLoader(Class<T> type)的源码。 通过ExtensionLoader.getExtensionLoader(Class<T> type).getAdaptiveExtension() 就可以获取接口的一个扩展类。本节主要分析getAdaptiveExtension()的源码。首先得出一个结...

2018-03-10 17:34:45 1833

原创 dubbo源码解析(一) dubbo spi实现

一、jdk spi实现 SPI的全名为Service Provider Interface。我们系统里抽象的各个模块,往往有很多不同的实现方案,比如日志模块的方案,xml解析模块、jdbc模块的方案等。面向的对象的设计里,我们一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。一旦代码里涉及具体的实现类,就违反了可拔插的原则,如果需要替换一种实现,就需要修改代码。为了实现在...

2018-03-09 22:24:00 1716

原创 java线上应用cpu占用过高排查

1.  jps(或者使用top命令得到pid)jps(Java Virtual Machine Process Status Tool)是JDK 1.5提供的一个显示当前所有java进程pid的命令。由此命令可以得到应用的pid为84092. toptop命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。t...

2018-03-01 17:04:38 2933 3

原创 数据库事务概念

一、数据库事务的概念 数据库事务由ACID四个特性构成。    1、A(Atomic):即原子性。是指在一个事务中的所有操作要么全部成功,要么全部失败。    2.   C(Consistent):即一致性。假设我们10个人,每人有一个账号,里面有钱,可以转来转去,这组成了一个小型的数据系统,那么什么叫数据一致性?就是不管怎么转账,这10个人的账号金额总数不变——满足这一条件,就叫数据一致,不满足...

2018-02-28 14:17:03 1701

空空如也

空空如也

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

TA关注的人

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