- 浏览: 51602 次
最新评论
-
wq13480:
求分享的GIT!!!
对dubbo进行重构,支持thrift原生协议直接调用
文章列表
WeTest导读分布式系统理念渐渐成为了后台架构技术的重要选择,本文介绍了作者在手游领域对分布式系统进行的种种尝试,并在尝试中制定了对服务的定义、整体框架的构建以及服务内部拆分的流程。
前言
业务规模不断扩大,对稳定性、扩展性的要求不断提高,推动了后台架构技术的不断革新。面对日益复杂的需求,分布式系统的理念也逐渐深入到后台开发者的骨髓。2013年,借着手游热潮我对分布式系统开始尝试。在近三年的摸爬滚打中,踩过不少坑,也从业界技术发展中吸取一些经验,逐渐形成了目前的设计思路。这里和大家分享点心得,不敢奢谈有多大参考价值,权当抛砖引玉吧。
1. 失败的首次尝试
显然,thrift原生协议性能表现卓越,是dubbo原生性能的6倍。
整体思路:不入侵,不改变dubbo原来的任何特性,新增对thrift原生协议支持,原生协议的调用,同样可以进行原来的监控统计。
唯一丢失的特性,就是没有了软路由。因为原生协议不是使用dubbo客户端调用。
网上有一种改造的方法,对整条调用链都改了,包括:protocol,exchange,transport,request,response都改了,使用thrift原生server解释执行方法。
这种做法入侵太大,而且完全没有必要。如果你认真看内置的thrift解码、编码模块,你会发现dubbo本身在内部就是模仿了thrift原生client和server进行编码解码,实际上执行效 ...
最近在研究学习dubbo源码,下面对比一下dubbo dubbo-thrift thrift三种协议序列化后报文体积:
远程调用一个简单方法:Hello.hello("哈哈哈");
dubbo:{ -38, -69, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -48, 5, 50, 46, 48, 46, 48, 48,
33, 99, 111, 109, 46, 100, 117, 98, 98, 111, 46, 97, 112, 112, 115, 46, 116, 104, 114, 105, 102, ...
1. 容器寻找Bean的定义信息并将其实例化2. 使用依赖注入,spring按照Bean定义信息配置Bean的所有属性3. 如果Bean实现了BeanNameAware接口,工厂调用Bean的SetBeanName()方法传递Bean的ID4. 如果Bean实现了BeanFactoryAware接口,工厂调用setBeanFactory()方法传入工厂自身5. 如果BeanPostProcessor和Bean关联,那么其postProcessBeforeInitialization()方法将被调用6. 如果Bean指定了init-method方法,将被调用7. 最后,如果有BeanPostPro ...
Facebook的工作方式让我着迷。那是一个非常独特的工作氛围,无法复制(也并不适用于其它公司)。下面的是我从很多在Facebook工作的朋友那里搜集到的关于这个公司如何开发和发布软件的只言片语。 看起来对Facebook感兴趣的大有人 ...
我们知道判断一个系统的负载可以使用top,uptime等命令去查看,它分别记录了一分钟、五分钟、以及十五分钟的系统平均负载…… 我们知道判断一个系统的负载可以使用top,uptime等命令去查看,它分别记录了一分钟、五分钟、以及十五分钟的系统平均负载。 你可能对于 Linux 的负载均值(load averages)已有了充分的了解。负载均值在 uptime 或者 top 命令中可以看到,它们可能会显示成这个样子:
load average: 0.09, 0.05, 0.01
很多人会这样理解负载均值:三个数分别代表不同时间段的系统平均负载(一分钟、五 分钟、以及十五分钟),它 ...
这是系列博文中的第一篇,本文作者使用Spring Cloud和docker构建微服务平台,文章的例子浅显易懂,希望了解微平台构建的同学能够从这里会收获良多. 这篇系列博文主要向大家介绍如何使用Spring Cloud和Docker构建微服务平台。
什么是Spring Cloud?
Spring Cloud 是一个 pivotal提供的用于进行分布式系统构建时提供一些常用的解决方案的工具集。如果你对使用 Spring Framework构建应用程序很熟悉的话,Spring Cloud 提供了一些常用基础组件的构建服务。 在Spring Cloud 提供的解决方案中,你将会发现如下的问题 ...
最近在做性能测试,需要对线程堆栈进行分析,在网上收集了一些资料,学习完后,将相关知识整理在一起,输出文章如下。
一、Thread Dump介绍
1.1什么是Thread Dump?
Thread Dump是非常有用的诊断Java应用问题的工具。每一个Java虚拟机都有及时生成所有线程在某一点状态的thread-dump的能力,虽然各个 Java虚拟机打印的thread dump略有不同,但是大多都提供了当前活动线程的快照,及JVM中所有Java线程的堆栈跟踪信息,堆栈信息一般包含完整的类名及所执行的方法,如果可 能的话还有源代码的行数。
1.2 Thread Dump ...
查看一个程序是否运行
ps –ef|grep tomcat 查看所有有关tomcat的进程
查看文件头10行
head -n 10 example.txt
查看文件尾10行
tail -n 10 example.txt
查看日志类型文件
tail -f exmaple.log //这个命令会自动显示新增内容,屏幕只显示10行内容的(可设置)。
查看端口占用情况
netstat -tln | grep 8080 查看端口8080的使用情况
查看端口属于哪个程序
lsof -i :8080
查看进程
ps aux|gr ...
一简介
线程的使用在java中占有极其重要的地位,在jdk1.4极其之前的jdk版本中,关于线程池的使用是极其简陋的。在jdk1.5之后这一情况有了很大的改观。Jdk1.5之后加入了java.util.concurrent包,这个包中主要介绍java中线程以及线程池的使用。为我们在开发中处理线程的问题提供了非常大的帮助。
二:线程池
线程池的作用:
线程池作用就是限制系统中执行线程的数量。
java thread的运行周期中, 有几种状态, 在 java.lang.Thread.State 中有详细定义和说明:
NEW 状态是指线程刚创建, 尚未启动
RUNNABLE 状态是线程正在正常运行中, 当然可能会有某种耗时计算/IO等待的操作/CPU时间片切换等, 这个状态下发生的等待一般是其他系统资源, 而不是锁, Sleep等
BLOCKED 这个状态下, 是在多个线程有同步操作的场景, 比如正在等待另一个线程的synchronized 块的执行释放, 或者可重入的 synchronized块里别人调用wait() 方法, 也就是这里是线程在等待进入临界区
WAIT ...
看到一篇不错的文章,很认同这些观点,分享一下。
1) 不应该针对整个系统进行数据库设计,而应该根据系统架构中的组件划分,针对每个组件所处理的业务进行组件单元的数据库设计;不同组件间所对应的数据库表之 间的关 ...
Chamath Palihapitiya出身于斯里兰卡,六岁时随家人移居加拿大。1999年获得了滑铁卢大学电气工程学位,之后他进入投资银行BMO Nesbitt Burns做了一年衍生品交易员。2000年,他跟随他的女朋友移居加利福尼亚。
当 时正值互联网开始繁 ...
Required:必须有逻辑事务,否则新建一个事务,使用PROPAGATION_REQUIRED指定,表示如果当前存在一个逻辑事务,则加入该逻辑事务,否则将新建一个逻辑事务,如图9-2和9-3所示;
图9-2 Required传播行为
RequiresNew:创建新的逻辑事务,使用PROPAGATION_REQUIRES_NEW指定,表示每次都创建新的逻辑事务(物理事务也是不同的)如图9-4和9-5所示:
图9-4 RequiresNew传播行为
Supports:支持当前事务,使用PROPAGATION_SUP ...