Don't Stop


  • 首页

  • 标签

  • 分类

  • 关于

白话中台番外篇:DDD、EventStorming与业务中台(转载)

发表于 2020-05-08 | 分类于 架构

本文转载自(https://zhuanlan.zhihu.com/p/120896743)

提到中台(尤其是业务中台)的构建方法论,就不得不提另两个同样伴随着微服务和中台概念兴起的工具:Domain-Driven Design(DDD,领域驱动设计)和EventStorming(事件风暴)。在各种讲中台落地规划,尤其是业务中台的共性能力识别和微服务划分的时候,总是能看到这两位的身影。不过相信好多朋友对于这两个相对陌生的面孔还是感觉云里雾里,搞不清楚到底是什么,以及与中台的关系。

本篇就以我个人的经历和视角,为大家讲述一下我对这二位的理解。

阅读全文 »

对架构的理解(手稿)(未完待续...)

发表于 2020-01-12 | 分类于 架构

前言

在网络上关于架构的文章有许多,能看到的19年火热的”中台”概念,以及又开始流行的 “DDD”,但对这些知识的理解总是容易混淆,以及为什么需要这些架构方法论,它们能解决的哪些问题,区别在哪等存在着疑惑。就拿之前实习碰到的“域”概念来说,我依然没能想明白设计者是从哪方面去考虑设计的。这篇文章主要是来记录自己对架构设计的笔记和理解。

阅读全文 »

全链路压测那点事(转载)

发表于 2019-10-21 | 分类于 全链路压测

前言

文章转载自 全链路压测那点事(一)

全链路压测一直是测试领域的一顶皇冠。全链路压测对测试人员要求极高,不仅需要有性能测试知识,还要有一定的组织能力与工程能力。全链路压测不仅是一个测试任务,而是一个公司级别的超大型项目,全链路压测涉及到公司所有技术人员与职能部门,从压测准备到实施,直至压测完成后的改进与优化,通常需要涉及公司开发、测试、运维等多个部门协同合作,因此全链路压测更合理的组织方式是以项目形式展开,协同部门负责人进行牵头,集全公司之力以线上性能最优为目标进行的一次技术改进过程。

阅读全文 »

基础架构 notes

发表于 2019-09-09 | 分类于 架构

前言

记录基础架构的一些知识点 待续….

阅读全文 »

阿尔萨斯 原理探究 仿写arthas-TimeTunnel 流量采集

发表于 2019-07-28 | 分类于 阿尔萨斯

前言

对于TimeTunnel功能块的编写真的可以用心累来形容,总结一句话就是太想当然了!!在开始做这块功能的时候,原本大体的思路就是在watch方法的基础上请求参数进行序列化的操作,但是这个序列化的过程就没有那么容易了!考虑一下下面这种情况:

1
public int doAdd(int x,String s,long l ,Job j,Main n,double d) {}

考虑到我们将使用反射来完成回放功能,那么你需要将当前的类、方法名、方法参数类型、请求参数都保留下来,前面三个是好做的,但是如果你需要保留的参数并没有实现 Serializable 接口,那么该类就不能被序列化,并且就算该类实现了Serializable接口,也不能保证该类成员对象都能被序列化的!!(与深拷贝有点相似,需要考虑到整个对象的引用情况)

于是我换了一种思路,采用FastJson将对象以字符串的形式进行序列化,要回调的时候再通过JSON.parseObject实现对象的转换!!

先看看我的做的TimeTunnel效果图:对正在运行的函数doAdd和doDelet实现方法级别的流量录制.

1
2
3
4
5
6
7
8
9
10
2
1
-------------------
开始采集方法:doAdd

2
开始采集方法:doDelet

1
-------------------

对类、方法、方法参数以元数据存储一份,每一次的请求参数以当前时间轴进行保存:

你想输入的替代文字

阅读全文 »

阿尔萨斯 原理探究 仿写arthas-watch

发表于 2019-07-19 | 分类于 阿尔萨斯

前言

在没完成watch功能之前,一直以为watch应该是最好实现的,但是写了快两天才写完!!主要是涉及到的知识点比较多。期间被两个问题卡着:

  1. 如何获取到方法的入参类型与值?

  2. 如何获取到方法的返回结果的类型与值?

还没看到阿尔萨斯是如何处理这两个问题的,不过在我写的iarthas里,我是通过字节码中的局部变量与操作数栈来解决第一个问题的。第二个问题我是通过字节码指令记录最后一次访问局部变量,因此获取返回结果的局部变量中的索引位置。现在没看懂没事,后文会详细的介绍。先来看一下我实现的watch方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
4
1
-------------------
监控当前方法:doAdd
入参:
参数类型-- int@1
参数类型-- String@abc
参数类型-- long@11
参数类型-- Lagent/Job;@agent.Job@7adf9f5f
参数类型-- Lagent/Main;@agent.Main@85ede7b
参数类型-- double@0.11
出参:
参数类型-- int@4
4
1
-------------------

可以看到一开始方法只是简单的打印出测试输出4 ,1 ,通过 Attach 到目标主机,对目标类的方法进行retransformer,加强了原方法,输出了监控方法的入参、出参的类型与值。github

结合watch与trace应该可以完成Doom中核心的功能:流量数据采集!!

阅读全文 »

阿尔萨斯 原理探究 仿写arthas-trace

发表于 2019-07-15 | 分类于 阿尔萨斯

前言

arthas 中 trace 可以监控一个方法内部调用路径,并输出方法路径上的每个节点上耗时.

1
2
3
4
5
6
7
8
$ trace demo.MathGame run
Press Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 42 ms.
`---ts=2018-12-04 00:44:17;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@3d4eac69
`---[10.611029ms] demo.MathGame:run()
+---[0.05638ms] java.util.Random:nextInt()
+---[10.036885ms] demo.MathGame:primeFactors()
`---[0.170316ms] demo.MathGame:print()

在刚接触到这个功能时,我在想这不就是Spring中的切面编程,对方法进行加强嘛!!

不过还是有点想当然,首先要注意的是我们监控的方法所在的虚拟机没有重启,更没有对一个方法加上注解或者通过配置文件来加强这个方法,因此trace是在虚拟机层面上的AOP!!还好这部分我们在上一篇已经说到过了,那么还有一个问题如何监控方法内部的调用路径呢??关于这个点我会在后面的章节分享我的做法。代码上传至:github

阅读全文 »

阿尔萨斯 原理探究 仿写arthas-redefine

发表于 2019-07-14 | 分类于 阿尔萨斯

前言

arthas 可以通过 redefine 命令可以在不重启的情况下对正在运行的class文件进行变更。这篇主要是探究该原理并实现一下简易版的i_redefine的功能。整体实现逻辑:编写 agentmain ,为 Instrumentation 添加自定义Transformer,对加载后的class进行转换。将编写的 agentmain 打包成 Jar ,利用Attach API 发送指令到目标虚拟机,通知它进行loadAgent 。 使用到的技术栈:(Java agent(Java SE 6 )+ Java attach API+ asm)。

期间有一个问题困扰比较长:有什么方式知道一个class文件中对应的类的包名和类名?

看了arthas的源码才知道可以通过中 asm 的ClassReader方法实现。

阅读全文 »

阿尔萨斯 原理探究 asm再认识(转载)

发表于 2019-07-14 | 分类于 阿尔萨斯

前言

在前面博客中,我们通过写好的 Java 文件再编译成 class 文件来替换目标类,这样存在着一定的局限性。而使用 asm 可以直接对 class 文件进行读写,本文将演示如何通过ASM Bytecode Outline 插件对 class 文件进行加强。以下内容转载自:手摸手增加字节码往方法体内插代码

阅读全文 »

阿尔萨斯 原理探究 agentmain实践

发表于 2019-07-12 | 分类于 阿尔萨斯

前言

在上一篇中,我们采用了Java SE 5 中的premain实现对虚拟机层面上的AOP,开发者只能在 premain 当中施展想象力,所作的 Instrumentation 也仅限与 main 函数执行前,这样的方式存在一定的局限性。

Java SE 6 针对这种状况做出了改进,开发者可以在 main 函数开始执行以后,再启动自己的 Instrumentation 程序,这种方式通过agentMain。本文就来记录一下如何通过agentMain的实现方式,具体细节大家可以看文章后的参考文章。

阅读全文 »
12…11
JinTx

JinTx

104 日志
26 分类
65 标签
github E-Mail CSND
© 2020 JinTx
由 Hexo 强力驱动
|
主题 — NexT.Mist v5.1.4