设计匠艺 | 小即是美之二

小的益处还有一点,它可以使得我们在架构决策或技术选型时,可以变得更加从容。

譬如说,因为某些原因我们需要将整个企业系统从WebLogic上迁移到JBoss上,无疑,这是一个艰难的决定。即使在决策确定,要完成整个迁移也将是一个漫长的过程。如果系统是基于Micro Service的架构风格进行构建,每个服务根据各自情形选择自己的技术栈。倘若需要对某些服务进行技术栈迁移,相信这个问题不再变得棘手。——大象可以轻盈地跳舞,但付出的努力会百倍于一只敏捷的狐狸。

如今,Java已经发展到Java 8,引入的Lambda表达式等多个特性如此鲜嫩,让人垂涎不已。然而据我所知,国内多数企业的Java项目仍然停滞在JDK 6裹足不前。是JDK 8不够好吗?非也。盖因为求稳的他们仍然心存顾虑。即使Oracle号称这种JDK的迁移多么的平滑,多么的稳健,多数企业仍然不敢轻易做出迁移的决定。若因为迁移而带来未知的缺陷,可谓得不偿失。既然现在项目运行良好,何必冒此风险。

于是,我们这个行业因为系统的庞大而变得守旧老成,亦步亦趋。并非大家没有冒险的精神,实则是庞大的项目难以灵活地改变方向。倘若只是更新系统中的某一个库或框架,形势就截然不同了。记得在没有lambda的时代,当我们让客户看到了Guava的好处时,要引入Guava就轻而易举,真如顺水推舟了。

当我们发现某些功能具备独立和专注的特征时,都是可能做出小系统的机会。这些小系统并不一定是子系统或模块,它还可以是一个独立的应用或服务。

例如在一个税务系统中,需要生成复杂的税务报表。它的整个逻辑是相对独立的,不管是报表的动态生成,格式的转换,数据的查询以及流的处理和PDF文档的生成,都与系统其他部分关联不大。唯一可能与系统存在紧密关联的是数据库。但为了解决高峰期的性能问题,我们可以建立单独的数据提取器,又或引入流处理,定期将数据提取出来,放入内存数据库中。将这样相对独立的功能做成服务,就能够独立演化,并有效支持服务请求的可伸缩。这样的小型服务可以更灵活地应对变化。当我们发现内存数据库不能满足大量请求时,也可以轻而易举地将其迁移到NoSQL上,并根据数据的属性例如按照地域进行分区,支持水平扩展。

若要保证系统的小,我们还可以尝试使用脚本。在开发软件系统时,可以使用一些脚本语言来开发一些小工具,以应对灵活的需求变化,消除重复代码,实现某些步骤的自动化。例如用Groovy编写一些函数,用Ruby编写代码生成工具,又或者使用Gradle、SBT实现系统的自动部署,启动服务器等脚本。脚本语言具有很好的灵活性,而动态语言的特性也使得我们能够编写出短小精悍的超级小工具,甚至可以作为系统模块之间的粘合剂,如机器齿轮上的润滑油一般,让整个系统充满活力。

Russ Miles认为:团队的开发速度经常因编写代码体积和复杂度的增长而放缓。他认为组件结构在简化架构方面非常重要,并提出了Life-Preserver模型。这是一个环形结构,所有的基础设施软件都在环上处理集成,而核心业务组件在环内加入业务价值。这种模型的核心是利用事件来简化架构。

使用事件的一个显著特点是解耦,使得事件的发布者与订阅者都可以独立演化,也可以自由增加事件的订阅者数量。我们可以将事件的发布者与订阅者设计为独立的小程序,就像Unix系统中那些小工具一样,通过管道建立关联。这样的设计思想称之为EDA(Event Driven Architecture),我希望在以后的文章对此进行深入介绍。

原文发布于微信公众号 - 逸言(YiYan_OneWord)

原文发表时间:2014-10-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JackieZheng

Nodejs学习笔记(一)——初识Nodejs

前言:目前工作的分内之事相对较为单一,希望可以通过工作之余的时间给自己充充电,只是没有一个学伴或大神带,只能说是摸索着前进。起初准备好好研究下Spring这个框...

3107
来自专栏FreeBuf

看我如何绕过限制访问到Google内部管理系统(价值$13337)

大家好,我是印度一个电子工程专业大三学生和一名漏洞挖掘新手。最近,我发现了谷歌(Google)一个验证绕过漏洞,利用该漏洞可以直接访问到谷歌的Youtube 卫...

4264
来自专栏FreeBuf

左右互博:站在攻击者的角度来做防护

0x01、前言 习惯性的讲点废话,笔者是一名菜鸟安全工程师。有幸参与过两次安全方面的比赛,有些个人的体会,所以就有了这篇文章了。(自知技术还很菜,望各位大牛不喜...

2379
来自专栏Java技术

带你发现新大陆之图数据库解密?

在众多不同的数据模型里,关系数据模型自20世纪80年代就处于统治地位,而且出现了不少巨头,如Oracle、MySQL,它们也被称为:关系数据库管理系统(RDBM...

2912
来自专栏HTML5学堂

全新HTTP状态码"451"

HTML5学堂:很多人多少都知道一些网络的状态码,比如200表示成功,404表示无法找到指定位置的资源...等等,当前新增了一个HTTP状态码 —— "451"...

3174
来自专栏区块链

提升网络安防 实现等保三级的 12 个难点分析

企业的安全等级防护建设可以提升信息系统的信息安全防护能力,为企业的业务发展提供安全保障。那么,企业如何做好网络安全工作,达到等保三级要求? 社区上周进行交流活动...

5479
来自专栏PHP在线

PHP将死。何以为继?

是到了PHP落幕的时候了。就在我这个顽固的PHP分子正要把一个现有的Ruby on Rails代码库转换成PHP时,我要说这样的话。 历史在重演 我认为PHP将...

3336
来自专栏程序员宝库

我的爬虫技术经历

1. 前言 爬虫,这个词很多朋友第一次听到,第一感觉应该是各种小虫子,应该不会和某种计算机技术联系在一起。我第一次听到这个词,就是这样一个感觉。但是当这个这个词...

47712
来自专栏云计算D1net

容器和微服务器如何改变安全性

原生云应用程序和基础设施需要完全不同的安全方法。请牢记下面这些最佳实践。 ? 如今,大大小小的组织正在探索云原生软件技术的应用。“原生云(cloud-nati...

3676
来自专栏SAP最佳业务实践

SAP最佳业务实践:MM–实际库存/库存盘点和调整(137)-3盘点

4.3 执行库存盘点 仓库主管定期执行库存盘点(手动操作)。 ? 4.4 MI04输入库存盘点 在库存盘点前,使用事务 MMBE 检查物料的库存状况。 角色:仓...

3284

扫码关注云+社区