- 浏览: 2253255 次
- 性别:
- 来自: 北京
最新评论
-
yidongnan:
跟 spring boot 配合的例子可以使用这个库https ...
GRPC原理解析 -
kyo472083100:
写得很好,感谢楼主解释得很清晰
Mongodb中Mapreduce特性与原理 -
lanhz:
对于三个节点:1、2、3,如果2向1广播投给2(即2自己),1 ...
Zookeeper选举过程描述与状态迁移 -
Bll:
厉害了
GRPC原理解析 -
QING____:
xiatiandebaofengyu 写道有个问题:发布者在发 ...
Redis编程实践【pub/sub】
文章列表
本文主要描述Alibaba Canal中间件,官方文档请参考:
1)gitlab:https://github.com/alibaba/canal
2)主要原理介绍:https://github.com/alibaba/canal/wiki/canal%E4%BB%8B%E7%BB%8D
2)运维操作文档:https://github.com/alibaba/canal/wiki/AdminGuide
下文的介绍,基于大家对上述文档的基本了解!
1)Canal版本为:1.0.24
2)通过Canal同步数据库数据变更事 ...
MySQL Router作为InnoDB Cluster(MySQL 7.X)的一部分,它是一个轻量级的中间,可以在Application与下游的MySQL Server之间提供透明的路由方式,它主要用以解决数据库主从库集群的高可用、易于扩展性等。
MySQL Router可以脱离InnoDB Cluster而单独实施,即MySQL 5.6等版本数据库仍然可以使用Router作为其中间代理曾,Router的核心原理为:
1、Router作为一个流量转发层,它的架构层面,位于Application与MySQL Servers之间。
2、其功能角色,类 ...
《架构真经》随心摘要备忘
- 博客分类:
- 架构
规则一:避免过度设计
内容:在设计中要警惕复杂的解决方案
场景:适用于任何项目,而且应在所有大型或者复杂系统或项目的设计过程中使用。
用法:通过测试同事是否能够轻松地理解解决方案,来验证是否存在过度设计。
原因:复杂的解决方案实施成本过高,而且长期的维护费用昂贵。
要点:过于复杂的系统限制了扩展性。简单的系统易于维护、易于扩展而且成本低。
正如维基百科中解释的那样,过度设计有两大类:第一类指产品的设计和实施超过了实际的需求。第二类值所完成的产品过于复杂。
第二类过度设计是指把一件事情做的过于复杂和以复杂的方式去完成一个任务。简单地说,它包括让某些事物 ...
《微服务设计》随心摘要备忘
- 博客分类:
- 架构
第一章 微服务
1、随着领域驱动设计、持续交付(CD)、按虚拟化、基础设计自动化、小型自治团队、大型集群系统这些实践的流行,微服务应用而生。它并不是被发明出来的,而是从现实世界中总结出来的一种趋势或模式。
...
logback运行时动态创建日志文件
- 博客分类:
- JAVA
我们有时候需要在运行时,动态创建日志文件,特别是文件名根据某些参数决定。这种方式只能通过编程方式来实现。
1、JAVA代码样例
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
import ch.qos.logback.core.rolling.RollingFileAppender;
import ch.qos.logback.c ...
ActiveMQ架构设计与最佳实践
- 博客分类:
- ActiveMQ
ActiveMQ是最常用、特性最丰富的消息中间件,通常用于消息异步通信、调用解耦等多种场景,是JMS规范的实现者之一。
一、架构设计概要
ActiveMQ提供两种可供实施的架构模型:“M-S”和“network bridge”;其中“M-S” ...
基于Mybatis的分表设计
- 博客分类:
- JAVA
基于ORM层面的分表实现,目前已经很多了,本人也尝试进行了开发。本人的设计目的,是希望基于Mybatis框架、通过规则引擎,实现分表策略,在接入层,更少的DAO层代码调整。
1)分表规则,通过配置驱动,本人基于Apache Commons Digester组件实现,我们在XML中声明“分表”的策略和子表的规模等。
2)为了对Mybatis层透明,即对于开发者而言,尽可能无需过度关注数据库层面的分表情况,也唔需要在代码层面调整太多;所以,我通过修改Mybatis的源码,实现“表名”参数的渲染。
难点:
1)规则引擎相关的开发。
2 ...
最近在开发一个RPC服务,在多种RPC框架之间选来选取,最终还是选择了hessian,整体上来说,hessian不仅简单而且优秀,还符合“微服务”的轻量级服务治理的理念;这个RPC框架优秀到简直没有升级和扩展的必要... 不过在实际开发中,遇到了一个小小的问题,就是如何通过hessian协议(框架)来发送一些“附属信息”,比如token等;这些附属信息,内容较小,但是可能条目个数较多,如果都封装成JAVA对象通过API传送,确实引入一些扩展性的问题。既然hessian底层基于HTTP协议,这些附属信息能否通过Header传递呢? 经过思考和验证,不仅可以,而且这也是最佳的策略;此后C ...
基于Beanutils实现动态类与实例创建
- 博客分类:
- JAVA
JAVA已经提供了在runtime期间动态创建“代理类”的机制,并且我们在实际开发工作中,特别是涉及到中间件开发的同学,经过会遇到“在runtime期间动态创建Class以及相应实例”的情况。比如调用者传递了“User”、“Order”等各种类型的对象,但是你的中间件程序需要对这些对象统一处理和封装,甚至需要在运行时为这些不同类型的instance“增加”property字段等。此时,我们可以用Apache Commons Beanutils来帮助我们解决相关问题。如下仅为代码示例:
private Object buildDynaBean(Object parameterO ...
Jedis客户端已经比较易用了,不过在spring环境下,可能还需要简单的封装一下。
一、单节点Redis服务使用
即只有一个Redis server,或者在M-S模式下,只有Master提供读写服务时使用,配置中指定Master的IP和Port即可。此处使用了Spring FactoryBean方式来创建JedisPool实例。
1、SingletonClientFactoryBean.java
public class SingletonClientFactoryBean implements FactoryBean<JedisPool>,Ini ...
Flume基本特性(1.7)
- 博客分类:
- 架构
Apache Flume是一个分布式的、可靠的、高效的日志数据收集组件;我们通常使用Flume将分散在集群中多个Servers的log文件,汇集到中央式的数据平台中,以解决“从离散的日志文件中查看、统计数据困难”的问题。当然,Flume不仅仅可以收集log文件,它也支持比如TCP、UDP等消息数据的收集;无论如何,我们最终解决的问题就是“将离散的数据进行收集”。我们先描述几个概念:
1、Event:消息,事件,在Flume中数据传输的单位是“event”,Flume将解析的日志数据、接收到的TCP数据等分装成events在内部Flow中传递。
2、Agent:临近 ...
JAVA正则表达式过滤文件
- 博客分类:
- JAVA
正则表达式过滤文件列表,听起来简单,如果用java实现,还真需要一番周折,本文简析2种方式
1、适用于路径确定,文件名时正则表达式的情况(jdk6的写法)
String filePattern = "/data/logs/.+\\.log";
File f = new File(filePattern);
File parentDir = f.getParentFile();
String regex = f.getName();
FileSystem FS = FileSystems.getDefault();
final PathMatche ...
nginx/tomcat日志格式规范
- 博客分类:
- 架构
最近准备设计和开发一套日志收集平台,进而后续进行实时的日志分析、业务监控和预警等。在此之前,需要制定日志的格式规范,当然还有其他的约束性规范,才能良好的实现日志搜集、数据分拣、数据分析等特性。
...
JAVA执行Shell命令
- 博客分类:
- JAVA
基于JAVA执行shell指令,通常的代码范例为:
Process process = Runtime.getRuntime().exec("jps -v");
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
while (true) {
String line = reader.readLine();
if(line == null) {
break;
}
Sys ...
logback日志与MDC机制
- 博客分类:
- JAVA
logback是个比较好用的java日志输出工具包,可配置型高,而且性能优秀。
一、Layout描述
1、%logger{length}、%c{length}、%lo{length}:在日志事件的源点输出logger的名称,比如
1)LoggerFactory.getLogger(TestMain.class),此时%logger的值为“com.xxx.TestMain”
2)LoggerFactory.getLogger("FILE-LOGGER"),此时其值为“FILE-LOGGER”。
其中{length}为可选项,l ...