自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

天涯兰的博客

系统架构、技术管理、组织战略 。微信公众号“程序员向架构师转型”

原创 我的出版书籍列表汇总

​《系统架构设计 :程序员向架构师转型之路》 本书包含作者基于自身在传统以及互联网行业多年的技术与管理工作经历展开论述,结合方法论和工程实践,具有较强的针对性和适用性,能帮助读者了解并掌握迈向架构师所需的各种知识体系和实践技巧。本书在介绍技术以及过程管理的内容时,采用“思路->方法论-...

2019-08-01 21:28:23 212 0

原创 软件设计原则

1. 面向对象原则 (1)开闭原则 所谓开闭原则(Open Closed Principle, OCP)指的就是“软件实体应当对扩展开放,对修改关闭”,简单讲就是软件系统中包含的各种组件应该在不修改现有代码的基础上,引入新功能。开闭原则中“开”,是指对于组件功能的扩展是开放的,是允许对其进行功...

2020-04-06 16:38:45 389 0

原创 单块系统的问题

在软件技术发展过程的很长一段时间内,软件系统都表现为一种单块系统。时至今日,很多单块系统仍然在一些行业和组织中得到开发和维护。所谓单块系统,简单讲就是把一个系统所涉及的各个组件都打包成一个一体化结构并进行部署和运行。在Java EE领域,这种一体化结构很多时候就体现为一个WAR包,而部署和运行的环...

2020-04-06 16:38:26 125 0

原创 实现消费者驱动的契约测试(下)
原力计划

上一篇中我们介绍了实现消费者驱动的契约测试中服务器端的相关组件,今天我们将围绕如何对服务器端所提供的服务进行面向契约的端到端测试,包括如何编写和执行测试用例。 1. 编写测试用例 现在回到服务消费者端编写测试用例,如下所示的OrderApplicationTests类展示了典型的SpringC...

2020-03-22 09:38:13 120 0

原创 实现消费者驱动的契约测试(上)
原力计划

在以Spring Cloud作为微服务基础架构的开发环境中,集成Spring Cloud Contracts作为消费者驱动契约测试工具是最佳选择。Spring Cloud Contracts中提供了SpringCloud Contracts Verifier和Stub Runner等核心组件,这些...

2020-03-22 09:30:27 124 0

原创 微服务架构中消费者驱动契约测试基本理念和方法
原力计划

对于任何一个类或组件所暴露的对外接口,我们都可以把它们归为是一种契约(Contract),即接口的调用者希望通过接口获取某种约定的价值,然而很多时候这种契约并没有被正式的约定。本文将讨论微服务架构中的消费者驱动的契约测试,该测试方法一经提出已经在微服务架构中得到很好的应用和推广。 消费者驱动的契...

2020-03-21 09:00:08 156 0

原创 微服务架构与现有系统并存的主要技术
原力计划

在现实场景中,从零打造一个微服务架构机会很少,更多的是从一个现有系统出发逐步转型到微服务架构。对于那些已经处于架构腐化边缘的现有系统而言,往往正在寻找一种可以替代的架构风格,微服务架构可以是一种潜在的选择。 与构建一个新系统相比,从现有系统向微服务架构转型具有一些显著的特点: 业务模型 ...

2020-03-20 11:53:54 158 0

原创 微服务架构中服务集成的主要技术
原力计划

在微服务架构中,服务之间势必需要集成,而这种集成关系远比简单的API调用要复杂。在本文中,我们将系统分析服务集成的方式以及在微服务架构中的表现形式。关于服务之间的集成存在一些通用的模式,我们也将在梳理这些模式的同时给出实现过程中的最佳实践。 业界关于系统集成存在一些主流的模式和工程实践,包括文件...

2020-03-19 11:01:52 333 0

原创 调整微服务代码结构的一些常见技术

在微服务大行其到的当下,究竟哪些代码应该放在具体的某一个微服务中一直是一个值得探讨的话题。本文不对这个主题展开讨论,而是关注于助于调整现有微服务架构中代码结构的相关技术,包括共享库、共享服务、代码转移、代码冗余、提取新服务和重写服务。这些对于如何重构现有的服务体系有一定的参考意义。 1. 共享库...

2020-03-18 09:29:19 163 0

原创 论技术原理的相通性示例之三:Master可用性

在分布式架构中,Master/Slave架构是主流架构之一,通常表现为一主多从的服务器部署结构,其中Master是整个架构的核心节点。Master/Slave架构中关于Master存在一个普遍性的问题,即如何确保Master的高可用性。 通常,我们可以采用热备方案实现Master的高可用。在热备...

2020-03-17 10:15:11 97 0

原创 论技术原理的相通性示例之二:分布式协调

很多时候,我们会基于Dubbo介绍注册中心这一服务化架构中的基础组件。而讲到注册中心就不得不提及分布式协调。对于分布式协调,我们需要了解到的是它不仅仅可以实现注册中心,还可以适用于很多场景。对于这些不同的场景,我们只需要把握针对分布式协调的基本知识体系,分析原理和解决问题的思路都是高度一致的。 ...

2020-03-16 13:49:07 93 0

原创 论技术原理的相通性示例之一:RPC架构

我们在面试时,经常会被问到“RPC架构核心组件有哪些?”、“Dubbo框架的基本原理是怎么样的?”这样的问题。很多读者可能对这些问题有一定的了解,有些则可能没有什么思路。但对于那些能够回答这些问题的人而言,知道的可能也仅仅是针对这些问题的答案,也就是对于已经接触过或使用过的工具框架而言肯定多少能明...

2020-03-16 10:49:47 175 0

原创 我的出版书籍之《Spring响应式编程 》上市预告

今天介绍一本我近期翻译的新书《Spring响应式编程》。该书由人民邮电出版社旗下的图灵社区引进,目前出版社已经完成三审三校,进入到最后的版本校对阶段,预计马上就能上市。原版书封面如下所示: 以下是我对该书所做译者序的部分内容: 当下互联网行业飞速发展,快速的业务更新和产品迭代也给系统开发过...

2020-03-12 14:00:53 109 0

原创 我的出版书籍之《向技术管理者转型 : 软件开发人员跨越行业、技术、管理的转型思维与实践 》

软件行业技术开发从业人员众多,但具备若干年开发经验的开发人员往往面临个人发展的瓶颈,即如何从普通开发人员转型成高层次的技术管理人员。想成为一名技术管理者,应当具备全面的知识体系,需要进行系统的学习和实践,但也需要转型的思维和决心。很多开发人员有向技术管理者转型的强烈意愿,但苦于找不到好的方法和路径...

2020-03-11 08:30:55 150 1

原创 我的出版书籍之《深入RabbitMQ》

这是我和阿里技术专家汪佳南合作的一本关于RabbitMQ的译著。 当下互联网行业中的各种分布式和服务化系统的开发本质上就是解决一个问题,即系统如何进行拆分和集成。服务拆分需要利用到面向领域思想,而服务集成则可以采用RPC、REST、消息通信等多种技术体系。从软件设计角度讲,无论是RPC还是RES...

2020-03-11 08:29:06 202 0

原创 我的出版书籍之《Spring响应式微服务》

当下互联网行业飞速发展,快速的业务更新和产品迭代也给系统开发过程和模式带来新的挑战。在这个时代背景下,以Spring Cloud为代表的微服务架构实现技术应运而生。微服务架构是一种分布式系统,在具备业务、技术和组织等方面具备相应优势的同时,也不得不面临分布式系统所固有的问题。如何确保微服务系统的即...

2020-03-10 17:47:30 226 0

原创 我的出版书籍之《微服务设计原理与架构》

随着互联网行业的飞速发展,快速的业务更新和产品迭代给系统开发过程和模式带来新的挑战。业务需求层出不穷且不断变化、技术发展和创新日异月新、团队规模从无到有快速扩张、系统的复杂性以及对行业变化的快速应变能力等成为软件开发的核心问题。围绕这些问题,如何更为合理的划分系统和团队边界、如果更加有效的组织系统...

2020-03-10 17:44:45 227 0

原创 我的出版书籍之《微服务架构实战》

当下互联网行业飞速发展,快速的业务更新和产品迭代也给系统开发过程和模式带来新的挑战。围绕来自团队外部和内部的变化和挑战,如何更为合理的划分系统和团队边界、如果更加有效的组织系统开发过程、如何通过技术手段识别和消除开发过程中存在的浪费成为广大软件开发和技术管理人员所需要思考的命题。在这种背景下,微服...

2020-03-10 17:42:38 590 0

原创 我的出版书籍之《系统架构设计:程序员向架构师转型之路》

软件行业技术开发从业人员众多,但具备若干年开发经验的普通的开发人员往往面临个人发展的瓶颈,即如何从普通开发人员转型成高层次的系统架构师和技术管理人员。想成为一名架构师,应当具备全面的知识体系,需要进行系统的学习和实践,很多开发人员有往架构师转型的强烈意愿,但苦于找不到好的方法和路径。本书针对“程序...

2020-03-10 17:39:13 1028 1

原创 响应式编程实现技术概述

响应式编程就是利用异步数据流进行编程,本质上就是观察者(Observer)模式的一种表现形式。我们首先讨论实现异步操作的几种常见方式,然后引出响应式编程的主流实现技术。 1. 实现异步的常见方式 在Java中,为了实现异步非阻塞,一般会采用回调(Callback)和Future这两种机制,但这...

2019-09-27 11:23:54 233 0

原创 向外管理之政治与协商

在一个软件开发团队或公司中,政治(Politics)并不是一个特别敏感、但也不是一个可以置之不理的话题。通俗的讲政治可以理解为通过与别人协作把事情办成的一种艺术。当然,想让别人与自己协作远非想象中那么简单,关系到双方或多方的利益和冲突,也关系到协作的推动者和被推动者的目标和动机,为了能够让别人和自...

2019-08-28 14:34:30 90 0

原创 如何了解上层管理者?

与向下管理一样,向上管理的第一步也是需要了解上层管理者。但不同于向下管理中对技术人员开展的类型和特点分析,对于上层管理者,我们的首要切入点是他们的管理风格。 业界关于人际风格分析存在一个DISC人格测试模型。DISC测验是国外企业广泛应用的一种人格测验,用于测查、评估和帮助人们改善其行为方式、人...

2019-08-28 14:32:00 141 0

原创 如何理解技术人员?

向下管理涉及的内容很多,正确理解技术人员是所有所需开展工作的前置条件。在国内整体销售或运营驱动的开发模式下,技术人员往往处于流程的末端,需要得到更多的理解和认识。很多技术管理开展不善就是因为缺乏对技术人员的类型和特点分析所致。 1. 人的四象限模型 本书在很多地方都会使用四象限模型,四象限模型...

2019-08-28 14:29:29 204 0

原创 敏捷中的过程改进实践和工具

敏捷思想中有一条原则指导我们进行过程改进:每隔一定时间,团队会在如何才能更有效地工作方面进行反省,然后相应地对自己的行为进行调整。由于很多不确定性因素会导致计划失效,比如项目成员增减、技术应用效果、用户需求的改变、竞争者对我们的影响等都会让我们作出不同的反应。敏捷不是基于预定义的工作方式,而是基于...

2019-08-24 00:01:58 208 0

原创 过程裁剪的理念和表现形式

1. 过程裁剪的理念 所谓过程裁剪(Process Tailoring)就是通过增加、删除、替换方法、修改顺序、组合等方式对软件开发模型进行优化,使之符合团队和项目的具体特点。 由于各种生命周期模型在软件工程领域已经有深入的研究,业界对于瀑布模型、迭代模型、增量模型、螺旋模型等经典软件开发模型...

2019-08-23 22:53:49 618 0

原创 CMMI中的过程改进

无论是经典的软件过程模型,或是多种基于管道理论的敏捷方法,都是通过软件过程模型来组织软件开发过程,软件过程模型偏重于开发流程管理,这一节我们通过过程要素的另一个视图来剖析软件开发过程。任何形式的软件开发过程都可以使用流程、人员和技术三个方面来切入。流程定义一系列开发的步骤和操作方法,人员需要通过培...

2019-08-23 22:40:28 446 0

原创 服务定位架构模式

1. 服务定位基本理念 系统集成(System Integration)是应用系统架构设计的一个重要课题,无论何种行业和应用,系统都可能需要集成对第三方服务的访问。这些第三方服务可能来自外部供应商,也可能来自于同一组织的不同团队,更广义上来讲,同一团队内部也可能需要进行服务的发现和整合,以便不同...

2019-08-23 22:06:23 307 0

原创 技术外部创新的类型和要素

在《技术内部创新的类型和要素》一文中,我们提到了内部创新。与内部创新一样,外部创新同样也有类型以及相应的要素。 1. 外部创新的类型 外部创新的类型主要就两种,分别是外部获取和跨业创新。 (1)外部获取 一家强大的公司可能会选择并购等方式来改变现有的技术体系,但更多的手段是通过与其他公司或...

2019-08-20 22:17:45 111 0

原创 管理服务的数据

数据对于微服务架构而言同样也可以认为是一种依赖关系,因为任何业务都需要使用某个数据容器作为持久化的机制或者数据处理的媒介,这里的数据容器不仅仅是指关系型数据库,而是泛指包括消息队列、搜索引擎索引以及各种Nosql在内的数据媒介。微服务架构中存在一种说法,即我们需要将所有微服务所用的资源全部嵌入到该...

2019-08-17 17:48:10 109 0

原创 管理服务之间的依赖关系

在系统的各种组件之间,尤其是类、包、模块以及服务之间都可能存在依赖关系。依赖在某种程度上不可避免,但是过多的依赖势必会增加系统复杂性和降低代码维护性,从而成为团队开发的阻碍。在微服务架构中存在众多服务,服务之间需要管理相互之间的依赖关系。 1. 构建无环依赖架构 依赖关系有三种基本的表现形式,...

2019-08-16 15:29:14 931 0

原创 技术内部创新的类型和要素

如果决定是有内部创新,首先需要明确的是创新的类型,然后才是展开创新活动。对不同的创新类型而言,内部创新所需的活动和过程基本保持一致。 1. 内部创新的类型 这里有必要强调一下,所谓的技术创新实际上不可能脱离一个具体的产品或一个具体的组织,纯粹为了技术创新而技术创新是没有任何意义的,所以对于技术...

2019-08-14 22:06:31 171 0

原创 设计模式在Mybatis中的应用

掌握设计模式的难度在于每个模式看上去都能够理解但就是不知道如何应用,固然在日常开发过程中多尝试应用设计模式有助于提高自身的设计能力,但通过阅读源代码的方式来加深对设计模式的理解和掌握是一条捷径。目前非常主流的开源ORM框架Mybatis(http://www.mybatis.org/)中大量用到了...

2019-08-14 21:54:47 143 0

原创 架构模式 - 微内核模式

1. 微内核模式简介 微内核(Microkernel)架构模式结构如下图所示,有时也被称为插件架构模式(Plug-in Architecture Pattern),通过插件向核心应用添加额外的功能,可以实现功能的独立和分离。 微内核架构包含两部分组件,即内核系统(Core system)和插件...

2019-08-12 12:14:21 688 0

原创 敏捷方法 - 极限编程与工程实践

前面我们介绍了Scrum、精益和看板,这三种都偏向于过程管理,代表敏捷方法论的一大派系。在敏捷领域,还存在另一大派系面向工程实践,代表性的有极限编程(eXtreme Programing,XP)。这两个派系分别从开发方法和管理方法给出了各自关于敏捷方法论的阐释,但两种之间也存在一定的共性。 针对...

2019-08-11 18:36:18 313 0

原创 敏捷方法 - 看板方法与流程管理

“看板方法”是一个制造业的术语,由David Anderson 引入到软件开发领域。David 在其的著作《看板方法》一书中这样描述看板方法与精益之间的关系:“看板方法带来了一套复杂的适应性系统,该系统的目的就是在一个组织中催生出精益的效果。” 1. 看板方法 正如David Anderson...

2019-08-11 18:25:38 494 0

原创 敏捷方法 - 精益思想

精益(Lean)思想来自制造业,21 世纪初由Tom 和Mary Poppendieck 引入软件开发领域,精益的很多思想也被认为是对软件行业有参考价值。与Scrum所提供的的过程管理框架不同,精益更多体现为一种思维方式,精益的思维方式也常被称为精益思维(Lean Thinking)。 1. 精...

2019-08-11 18:22:09 323 0

原创 敏捷方法 - Scrum与过程管理

1. Scrum简介 Scrum基本组成结构见下图,以一组称之为Sprint的迭代周期组成,典型的迭代周期为1-2周或者最多一个自然月,产品的设计、开发、测试全部都在一个迭代内完成。 Scrum中存在三大角色,分别是Product Owner(简称PO)、Scrum Master(简称SM...

2019-08-11 18:18:26 195 0

原创 敏捷方法 - 敏捷的理念

在《软件过程模型的管道理论 》中我们介绍了软件过程的模型以及管道理论。从本文开始,我们将开始一个新的系列,讨论目前主流的敏捷方法。结合软件开发过程,我们把敏捷的理念分成四大块内容,即适应变化、团队协作、交付价值和过程改进。 1. 适应变化 敏捷最为人称道的一个理念就是“拥抱变化”。为什么“拥抱...

2019-08-11 18:14:12 265 0

原创 软件过程模型的管道理论

软件开发过程体现的是一种管道(Pipeline)思想,为了确保对开发的投入和产出达到平衡,必须考虑完善的资源分配策略从而确保使技术开发管理处于最优性能水平上。管道理论是一种高度抽象,代表着软件开发过程中出现不良现象的根源,这些不良现象包括各个项目和产品开展的组织瓶颈、部分团队与其他团队工作数量和饱...

2019-08-11 11:53:37 102 0

原创 构建微服务架构的系统方法

构建微服务架构所需要做的不仅仅是构建服务本身。一个微服务系统的构建过程代表的是一种组织级别的活动,包括组织的人员架构、研发过程、技术体系和协作文化等多个因素。同样,微服务的运行时环境、错误处理机制和运维实践也是我们需要考虑的内容。本文中我们将针对如何构建微服务架构给出一套完整的系统方法。 下图给...

2019-08-10 14:26:49 122 0

提示
确定要删除当前文章?
取消 删除