March 26, 2017

对微服务的简单思考

最近,阅读了文章《微服务架构在Netflix的应用:架构设计的经验教训》,引发了我对微服务的一些感想。大约这些感想平日都在大脑里装着没有声响,这篇文章算是酵母,投进去,发了酵,开始有些微醉薄醺的味道了。

这篇文章介绍了Cockcroft的微服务架构经验。Cockcroft是Battery Ventures公司的技术人员,是微服务和云架构方面著名的布道者,目前供职于Nginx技术咨询委员会。

一直以来,微服务虽然风生水起,不过却没有什么靠得住的定义可以得到多少人公认的。Cockcroft对微服务的定义却引起了我的注意。定义如下:

由松耦合的有相应语境的元素构成的一种面向服务的架构,松耦合......

March 13, 2017

基于Scala的产品开发实践

我们的产品架构

整体架构

我们的产品代号为Mort(这个代号来自电影《马达加斯加》那只萌萌的大眼猴),是基于大数据平台的商业智能(BI)产品。产品架构如下所示:

我们选择了Spark作为我们的大数据分析平台。基于目前的应用场景,主要使用了Spark SQL,目前使用的版本为Spark 1.5.0。我们有计划去同步升级Spark最新版本。

在研发期间,我们从Spark 1.4升级到1.5,经过性能测评的Benchmark,性......

December 19, 2016

以RAID分析作为架构驱动力

寻找架构驱动力

人类自开始学会以智慧洗亮观察世界的双眼之后,就明白观察事物不能浅尝辄止停留在表面现象,而要去看透本质。通过本质规律去建模世界,才能以“一”推演万物。种种推演的过程,皆是要去寻找某种驱动力量作为分析或建构的起点。

例如,当我们要分析一个运动中的物体会形成如何的运动轨迹时,就需要寻找产生运动的力,包括初始的动力、重力、摩擦力以及其他可能干扰物体运动的力。有的力会推动者物体向前,例如初始动力以及与运动方向......

December 19, 2016

风险对架构设计的驱动力

我在博客文章《以RAID分析作为架构驱动力》中介绍了RAID分析方法。这个方法将风险作为其中的一个重要驱动力,指导我们进行架构设计,避免陷入未知的陷阱。

无独有偶,Simon Brown在其著作Software Architecture for Developers中专门列出一个章节来阐释风险。他认为:

识别风险是恰如其分的预先设计的一个关键的部分,简而言之,风险就是未来可能发生的坏事,比如所选技术无法满足供应......

January 03, 2016

运用跨界思想体悟软件设计

设计或者是一种解谜,世界就在眼前,然而它却是未知的,神秘的,我们试图通过分析建立一个普适的模型,去解构这个已经存在的世界。这个谜题如此引人入胜,它没有标准答案,却又真实的呈现在我们面前。

设计就好像是研究电信号频谱结构的频谱分析仪,通过扫描和侦测信号,再利用我们已经充分证明的算法例如快速傅里叶变换(FFT)去获得频谱分布图,然后工程师就可以借助经验与频谱知识甄别信号特征,从而判断电子设备是否出现异常。这种设计方式,我称之为“分析式设计”。

分析式设计

分析式设计常常起源于对研究领域的假想与猜测,进而对海量的信息进行筛选和甄别,提炼出对解决该问题有帮助的信息,再利用设计经验去推导合理的设计......