12 Ydoing

尚未进行身份认证

暂无相关简介

等级
TA的排名 6k+

思考复杂的系统

2020-02-05 09:41:29

系统思维

系统与涌现系统系统 = 实体 + 关系 + 功能系统是由一组实体和这些实体之间的关系所构成的集合,其功能要大于这些实体各自功能之和。架构定义为“对系统中的实体及实体之间的关系所进行的抽象描述”涌现实体之间的交互会导致涌现物。涌现指的是系统在在运作时所表现,呈现或者浮现的东西。涌现 = 功能 + 性能 + 意外 + …系统思维的任务确定系统的形式与功能系统同时具备形式...

2020-01-31 10:43:40

软件中组件拆合原则

三个拆合的指导原则:REP(复用/发布等同原则),CCP(共同闭包原则)和CRP(共同复用原则)。组件聚合原则张力图REP(复用/发布等同原则):软件复用的最小粒度应该等同于其发布的最小粒度(注:只有那些通过版本追踪系统发布的组件才能被高效地复用)CCP(共同闭包原则):将同时修改,目的相同的类放到同一个组件;不会同时修改,目的不同的类放到不同的组件CRP(共同复用原则):不要强迫一个...

2020-01-17 15:39:48

浅谈软件设计原则

通用原则OCP(开闭原则)架构设计的主导原则。设计良好的软件应该易于扩展,同时抗拒修改。这是我们进行架构设计的主导原则,其他的原则都为这条原则服务。USB接口满足OCP原则,各个厂商可以扩展接口实现,但是不能修改接口定义正交性设计“正交性”是从几何学中借来的术语。如果两条直线相交成直角,它们就是正交的,比如图中的坐标轴。用向量术语说,这两条直线互不依赖。沿着某一条直线移动,你投影到...

2020-01-17 11:53:04

关于中台化一些思考

有个同事问了我一个架构问题,大概是这样的:组装某业务的VO的对象逻辑放到哪层,感觉放到service层好像不太合适。我感觉问的非常好,这种问题非常典型,值得分享一下。目前来说,我们在前台层(Controller)直接调用一个下层大的service,一杠子捅到底,各种领域层的逻辑都放到这个service里面。造成各种领域层依赖耦合严重,领域层的服务不好重用。这里有必要抽象出中间一层,它可能是中台层,...

2019-12-22 21:56:27

写好设计文档

写好设计文档怎样算一个好的设计文档文档意图清晰,描述逻辑有序动静结合,既有静态模型又有动态模型注重分析生产活动的生命周期列出能力矩阵善于发现概念,将捕捉到的概念显示化,建立领域模型划清边界,构建层次有不同的视图,一图胜千言。比如有用例图,领域模型图,活动图,时序图,状态图,业务流程图,业务架构图,应用架构图,技术架构图等等。静态建模用例收集用例是设计文档后续所有环节的输入...

2019-12-22 20:40:15

系统中台能力思考和探索

系统中台能力思考和探索中台思想中台特点数据模型统一;业务隔离;可扩展:引擎化,参数化,配置化,流程化可视化:能力地图,业务全景图;由1到4,实现越来遇难,其中3是实现关键。中台实现...

2019-09-08 19:46:57

Elasticsearch源码编译

下载源码https://github.com/elastic/elasticsearch, github下载源码,分支切换到5.5,用ieda打开,等待漫长的编译过程下载安装包直接编译的源码不能直接使用,需要依赖安装包一些插件等,下载5.5.3安装包,下载地址 https://www.elastic.co/downloads/past-releases , 解压放到/opt/search/e...

2018-09-19 17:22:44

可供参考的互联网电商订单中心设计

最近在做订单中心领域模型设计,虽然还不完善,这里分享出来,希望能给大家提供一个思路。有不懂的,请多多交流,谢谢啦!

2018-06-09 09:56:33

分布式事务一些思考和总结

最近在做交易订单的事情,随着系统越来越复杂,交易量越来越大,出现不一致的情况也频发。不禁引人思考,这里做一些总结记录。分布式事务有一些理论,最常听的是CAP,ACID等。这里就不做介绍了,大家自己去查资料看看。分布式事务也经常提到2PC,3PC,因为不太适用互联网场景,这里也不做介绍。下面我们来看看一个电商典型的场景,下单后发送消息给其他业务系统,很多同学喜欢这样做 @Trans...

2018-03-23 10:56:19

mybatis线上问题查找

线上反映查不到数据,根据业务逻辑把sql找出来执行,实际是有数据的。不知道什么原因,记录一下查找问题过程。greys查找问题 greys对查找线上问题还是挺有帮助的,地址https://github.com/oldmanpushcart/greys-anatomy进入greys首先通过jps查到Java进程ID sudo jps -l 切换到jetty账号,执行greys脚本进入 s

2017-10-30 20:56:00

RocketMQ有序消息研究

在订阅消息的时候,有时我们希望消息能按照一定业务顺序消费,比如一个订单创建,订单修改,订单完成。这时候是需要顺序消息。RocketMQ支持顺序消费,下面来研究一下实现逻辑。样例生产者public class OrderedProducer { public static void main(String[] args) throws Exception { //Instant

2017-10-28 19:19:41

一次JVM调优实战

早上查看低峰期gc情况,发现昨晚上fgc有274次,感觉有些不正常,开始查找原因[jump@order-binlog-data002 spring-boot]$ sudo jstat -gc 20028 4000 10 S0C S1C S0U S1U EC EU OC OU MC MU CCSC C

2017-07-17 19:15:32

ThreadPoolExecutor源码剖析的一些思考和总结

最近迁移一个项目,涉及到线程池的问题。特意看了一下ThreadPoolExecutor源码,记录一下。思考几个问题ThreadPoolExecutor的基本实现思路是什么? - 在线程池正在运行(running)的状态下,提交任务到线程池以后,如果线程数量小于corePoolSiez,则创建新的工作线程加入workers中,并启动该线程;如果大于等于corePoolSiez,则加入任务队列中,等待

2017-06-05 17:54:33

从dubbo看Netty使用

Netty是个高性能的Java网络传输框架,在很多中间件或者分布式框架中几乎都能看到它的身影。既然Netty这么受欢迎,那到底怎么把netty嵌入到我们的系统中了?笔者在几年前就接触了Netty,也开发了个小项目。一直问题困扰自己,Netty使用场景是什么?怎么使用Netty?我们可以从dubbo中找到些答案。dubbo是高性能轻量级的RPC框架。netty本质的功能负责网络传输,dubbo使用ne

2017-05-11 09:32:37

关于分库分表的实现

当数据大的时候,都会考虑分库分表的实现。分库分表可以在不同的层做。一般来说有以下几种:jdbc层:实现复杂,属于轻量级,对应用基本没有侵入性;缺点是不能复用数据库连接,在应用部署多的时候资源耗费大,不适于大规模部署。类似当当网的sharding-jdbc.ORM层:比如蘑菇街TSharding框架封装mybatis,实现简单。缺点是必须依赖ORM层,侵入性比较大。DBProxy层:如cobar

2017-03-10 15:14:16

Java中sleep和wait有什么区别?

sleep和wait有什么区别?大家都说是sleep不会释放锁,wait会释放锁。一直都不是很理解。最近在看AQS代码,才找到一些蛛丝马迹。AQS的await和wait实现思想类似,释放当前占有的锁,让其他线程继续获取锁。等适合机会唤醒后再重新占有锁。await方法有fullyRelease的方法 1.先将线程插入等待队列; 2.释放当前的占有的资源,即释放锁; 3.让当前线程停止,等待唤醒;

2017-03-05 16:08:41

从ReentrantLock去分析AbstractQueuedSynchronizer

在并发中,锁是一个重要的工具,能帮助程序处理好数据并发处理不一致的问题,而AbstractQueuedSynchronizer在其中扮演中重要的角色。在设计所锁的时候,应该思考怎么锁能解决什么问题,而这个问题本质是由于什么原因引起。并发问题说到底是由于资源共享竞争使用引起的。锁就是为了防止资源不合理竞争使用导致的并发问题。AQS简介AbstractQueuedSynchronizer简称AQS,是J

2017-03-04 18:06:06

Spring中@Transactional什么时候开启事务?

在使用注解事务的情况时,Spring会把每个方法的执行封装为AOP执行过程。每次执行被事务注解方法时,会判断是否有必要创建事务。如果创建事务成功,则继续调用业务逻辑方法。事务是在方法执行最开始阶段创建的,因此方法要越小越好。事务的执行入口是TransactionInterceptor的invoke方法 @Override public Object invoke(final Metho

2017-03-01 21:45:39

JVM的Perm区持续增长导致OOM问题记录

查找问题先用jstack看看线程栈是否正常,确认正常后用jmap查看(因为线上用的OpenJDK,需要安装debuginfo包)堆中快照情况。jmap一些命令可能会造成JAVA进程挂起,特别是jmap -permstat会造成STW,程序无法响应。建议使用jmap命令应该与线上环境隔离才能用。使用jmap -permstat发现大量dead状态的class对象,其中class为groovy/lang

2017-02-05 17:33:48

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。