摘要: 最近几年以来,微服务开始大行其道。各种项目都开始采用微服务架构。在此基础上,又诞生了多种服务、框架用来治理、监控微服务。问题是,对于大多数应用,你真的需要微服务吗? 微服务相对于传统的单体应用,有以下几个方面的好处: 解耦。微服务由于各个服务之间完全独立,仅仅通过远程接口进行访问。这迫使原来单体应用 阅读全文
posted @ 2018-07-30 16:29 邓志国 阅读(160) 评论(0) 推荐(1) 编辑
摘要: DRY原则(Don't Repeat Yourself)已经深入人心。重复的代码在不同地方出现,是程序隐患之一。比如你因为某个原因修改了其中一处就提交了,那么就会造成没有修改彻底,进而造成问题。但在按照DRY原则对代码进行重构的时候,要谨慎区分重复和巧合。如果不加以区分,仅仅从代码上看重复,随着业务 阅读全文
posted @ 2018-07-19 10:21 邓志国 阅读(115) 评论(0) 推荐(0) 编辑
摘要: 混沌阶段 所有功能在一个项目里面 项目里面根据功能划分为若干Service实现业务 Service通过DAO访问数据库 业务逻辑没有清晰地表现出来,和数据库访问、前端接口耦合在一起 如果你的项目在这个阶段,你需要做的是: 拆分出业务逻辑、业务实体,将业务逻辑、业务实体和数据库访问、对外接口等隔离开。 阅读全文
posted @ 2018-07-06 15:16 邓志国 阅读(280) 评论(0) 推荐(1) 编辑
摘要: 含混不清的命名 命名问题是很严重的问题,我见过有些系统用大量拼音缩写命名,有些缩写长达5-6个字母以上,这种除非是长期维护系统的程序员,其他人看了都是一脸懵逼。 命名最好用英文加上驼峰命名法,比如getAccount,userName。对于英文单词的选择,由于我们是非英语国家,即使在英语国家里面,同 阅读全文
posted @ 2018-07-06 11:14 邓志国 阅读(202) 评论(0) 推荐(2) 编辑
摘要: 架构是什么?是Spring boot、Spring cloud、Dubbo之类?这些是系统框架。是数据库、缓存、消息队列?这些是工具。是微服务、SOA?这些技术。那么究竟什么是架构? 架构师可以类比为城市规划师,用来决定城市哪块是什么功能,如何搭配这些功能。比如工厂附近就不会是居民区,商业中心也不会 阅读全文
posted @ 2018-06-26 11:41 邓志国 阅读(210) 评论(0) 推荐(0) 编辑
摘要: 阿里云的Swarm产品,更方便地集成各种异构系统组成微服务集群。利用Docker技术,方便地部署、扩容。进一步简化程序的开发、运维。 对Swarm下的每一个应用,阿里云提供两种方式对外暴漏接口。 一是通过本地域名,将指定端口暴漏出去,域名必须以.local为结尾,一般我们以服务名+.local组成服 阅读全文
posted @ 2018-06-14 09:24 邓志国 阅读(242) 评论(0) 推荐(0) 编辑
摘要: 模板模式在有些场景下非常好用,传统的模板模式,一般是声明一个抽象类,在抽象类里面实现一些逻辑,但有些方法声明为抽象,由子类实现。但模板模式有个问题:单元测试比较麻烦。因为用到了继承,不好隔离测试。(据说Java创始人说过最后悔的就是加了抽象类)典型代码如下: 经验告诉我们,用聚合而不是继承。那么我们 阅读全文
posted @ 2018-05-09 21:09 邓志国 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 如下代码: 会打印出error吗?(这里有个Bug,先不考虑,就是整数会溢出的情况) 答案是不会,因为value1是volatile的,根据可见性,那么2 happens before 3,所以递推,4 happens before 1。所以v2不可能小于v1。 如果去掉volatile,就有可能发 阅读全文
posted @ 2018-05-08 12:02 邓志国 阅读(192) 评论(0) 推荐(0) 编辑
摘要: 数据库具有不同的隔离级别,不同的隔离级别有不同特性,在使用的时候要小心,特别是在Race Condition的情况下。 读未提交read uncommited。 可以读取到尚未提交的内容,级别最低,会出现脏读。 读已提交read commited 只有已提交的内容会被读取到,会出现幻读,在同一个事务 阅读全文
posted @ 2018-05-04 11:03 邓志国 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 有次和某第三方公司调试接口,他们的协议很奇葩:Content-Type用application/x-www-form-urlencoded,然而内容却是把图片内容直接写了进去。在Spring中用 去接数据的时候,发现内容都被URLEncode编码了,无法取得原始的流。跟踪源码到: Spring把re 阅读全文
posted @ 2018-04-28 08:21 邓志国 阅读(336) 评论(0) 推荐(0) 编辑