自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

天涯兰的博客

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

  • 博客(101)
  • 资源 (1)
  • 收藏
  • 关注

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

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

2019-08-01 21:28:23 721 2

原创 软件设计原则

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

2020-04-06 16:38:45 1180

原创 单块系统的问题

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

2020-04-06 16:38:26 739

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

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

2020-03-20 11:53:54 971

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

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

2020-03-19 11:01:52 4618

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

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

2020-03-18 09:29:19 1039

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

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

2020-03-17 10:15:11 411

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

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

2020-03-16 13:49:07 347

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

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

2020-03-16 10:49:47 541

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

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

2020-03-12 14:00:53 526

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

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

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

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

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

2020-03-11 08:29:06 3729 1

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

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

2020-03-10 17:47:30 1380 1

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

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

2020-03-10 17:44:45 883

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

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

2020-03-10 17:42:38 1026

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

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

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

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

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

2019-09-27 11:23:54 1258

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

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

2019-08-28 14:34:30 393

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

与向下管理一样,向上管理的第一步也是需要了解上层管理者。但不同于向下管理中对技术人员开展的类型和特点分析,对于上层管理者,我们的首要切入点是他们的管理风格。业界关于人际风格分析存在一个DISC人格测试模型。DISC测验是国外企业广泛应用的一种人格测验,用于测查、评估和帮助人们改善其行为方式、人际关系、工作绩效、团队合作、领导风格等。DISC个性测验由24组描述个性特质的形容词构成,每组包含四个...

2019-08-28 14:32:00 781

原创 如何理解技术人员?

向下管理涉及的内容很多,正确理解技术人员是所有所需开展工作的前置条件。在国内整体销售或运营驱动的开发模式下,技术人员往往处于流程的末端,需要得到更多的理解和认识。很多技术管理开展不善就是因为缺乏对技术人员的类型和特点分析所致。1. 人的四象限模型本书在很多地方都会使用四象限模型,四象限模型需要首先确定两个维度。对一个人而言,最基本的两大属性维度是态度与能力(如下图所示)。我们都希望我们的开...

2019-08-28 14:29:29 1388

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

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

2019-08-24 00:01:58 935

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

1. 过程裁剪的理念所谓过程裁剪(Process Tailoring)就是通过增加、删除、替换方法、修改顺序、组合等方式对软件开发模型进行优化,使之符合团队和项目的具体特点。由于各种生命周期模型在软件工程领域已经有深入的研究,业界对于瀑布模型、迭代模型、增量模型、螺旋模型等经典软件开发模型的使用场合等也基本达成了共识。因此,项目只需要将项目的实际特点与生命周期模型的应用场合相匹配,选择合适...

2019-08-23 22:53:49 3624

原创 CMMI中的过程改进

无论是经典的软件过程模型,或是多种基于管道理论的敏捷方法,都是通过软件过程模型来组织软件开发过程,软件过程模型偏重于开发流程管理,这一节我们通过过程要素的另一个视图来剖析软件开发过程。任何形式的软件开发过程都可以使用流程、人员和技术三个方面来切入。流程定义一系列开发的步骤和操作方法,人员需要通过培训和管理提升技能,而广义上的技术包括应用领域、工具、语言、信息和环境。 业界对如何进行过程改进也...

2019-08-23 22:40:28 3934

原创 服务定位架构模式

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

2019-08-23 22:06:23 2944

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

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

2019-08-20 22:17:45 1643

原创 管理服务的数据

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

2019-08-17 17:48:10 345

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

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

2019-08-16 15:29:14 6278

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

如果决定是有内部创新,首先需要明确的是创新的类型,然后才是展开创新活动。对不同的创新类型而言,内部创新所需的活动和过程基本保持一致。1. 内部创新的类型这里有必要强调一下,所谓的技术创新实际上不可能脱离一个具体的产品或一个具体的组织,纯粹为了技术创新而技术创新是没有任何意义的,所以对于技术创新而言,除了技术本身之外,其切入点往往还包括产品或管理。(1)面向基础研究的的技术创新基础性...

2019-08-14 22:06:31 2488

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

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

2019-08-14 21:54:47 479

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

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

2019-08-12 12:14:21 2783

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

前面我们介绍了Scrum、精益和看板,这三种都偏向于过程管理,代表敏捷方法论的一大派系。在敏捷领域,还存在另一大派系面向工程实践,代表性的有极限编程(eXtreme Programing,XP)。这两个派系分别从开发方法和管理方法给出了各自关于敏捷方法论的阐释,但两种之间也存在一定的共性。针对如何实施敏捷方法,目前主流的做法就是把极限编程与其它过程管理框架合起来一起应用,通过Scrum、看板等...

2019-08-11 18:36:18 1087

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

“看板方法”是一个制造业的术语,由David Anderson 引入到软件开发领域。David 在其的著作《看板方法》一书中这样描述看板方法与精益之间的关系:“看板方法带来了一套复杂的适应性系统,该系统的目的就是在一个组织中催生出精益的效果。”1. 看板方法正如David Anderson所说,看板方法本身并不是一种软件开发流程或者项目管理方法。使用看板方法之前,你必须已经具备某种流程或方...

2019-08-11 18:25:38 3246

原创 敏捷方法 - 精益思想

精益(Lean)思想来自制造业,21 世纪初由Tom 和Mary Poppendieck 引入软件开发领域,精益的很多思想也被认为是对软件行业有参考价值。与Scrum所提供的的过程管理框架不同,精益更多体现为一种思维方式,精益的思维方式也常被称为精益思维(Lean Thinking)。1. 精益思想精益是敏捷开发的一个重要部分。当把精益制造的一些思想应用到软件开发中时,我们从敏捷开发的其他...

2019-08-11 18:22:09 1776 1

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

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

2019-08-11 18:18:26 1339

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

在《软件过程模型的管道理论 》中我们介绍了软件过程的模型以及管道理论。从本文开始,我们将开始一个新的系列,讨论目前主流的敏捷方法。结合软件开发过程,我们把敏捷的理念分成四大块内容,即适应变化、团队协作、交付价值和过程改进。1. 适应变化敏捷最为人称道的一个理念就是“拥抱变化”。为什么“拥抱变化”这一理念会深入人心,程度上是受软件开发的本质特征所决定,即任何软件的需求并不是在一开始就能完全确...

2019-08-11 18:14:12 3882 1

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

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

2019-08-11 11:53:37 1271

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

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

2019-08-10 14:26:49 639

原创 技术创新策略与模式

根据技术扩散曲线,我们希望自己能够成为创新者,如果由于各种条件所限无法成为创新者,那也应该争取成为早期采用者。为此,技术创新需要有相应的策略和过程来支持这一目标。1. 技术创新策略与维度(1)技术创新的策略技术创新有自主创新、模仿创新和合作创新三种基本策略。对于软件开发而言,目前大多数技术创新还是以模仿创新为主,并在与产品创新相结合的特定领域中实现合作创新和自主创新。自主创新所谓...

2019-08-10 10:46:11 2694

原创 技术变革的基本规律

不可否认,任何产业以及产业下的产品都有其生命周期,这点对于软件行业尤为明显。随着互联网行业的蓬勃发展,很多传统行业也都纷纷转型开发出很多“互联网+”型产品。结合我们在第2章中对行业的分析,我们就会发现从行业成长的角度来研究创新过程,分析技术创新与行业成长的关系,是技术创新首先要明确的重要内容。从技术创新的角度分析行业成长,具有代表性的模型是A-U模型。A-U模型认为企业的产品创新和技术创新是相...

2019-08-10 10:44:46 1528

原创 架构风格之分布式风格

现代软件开发一大现状和问题就是容易形成信息孤岛,即每个业务部门和产品线根据自身的业务需求设计相应的架构体系并进行实现,这些独立的系统保存着业务系统的核心数据并运行于独立的进程环境中。涉及到组织架构、团队文化、技术体系等因素,仅仅通过系统内部重构很大程度上只能缓解而不能消除信息孤岛的产生,这就需要使用某种手段进行业务服务整合,分布式架构风格的目的就在于此。分布式作为一种基础架构风格为不同系统之间的交...

2019-08-09 23:51:55 834

如何成为一名研发主管--关于个人、过程、工具和团队

个人博客同名文章 http: blog csdn net lantian08251 article details 39529207 配套的PPT 从团队管理角度出发 从技术研发主管的定位开始展开 对如何培养和建设技术主管队伍在个人 过程 工具和团队等方面进行阐述

2014-09-27

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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