琅琊风云榜:对话Tiny框架创始人罗果-阿里云开发者社区

开发者社区> 中生代技术> 正文

琅琊风云榜:对话Tiny框架创始人罗果

简介:

以下是访谈实录:

王友强: 罗总您好,请您介绍下您的从业经历吧?

罗果:从业经历么?这个不太好回答,网友们问到这个问题的话,我一般都回答有3年工作经验,本来我也觉得好像哪里不对,不过想想右军也就十八岁,我这个也偏差不大。

工作先是在东软,东软非常不错,就是东北比较冷,于是来到杭州。

现在在恒生,恒生也是家好公司,这不一呆就这么多年过去了。

2013年开始试水开源,一路走来感觉非常充实,也非常感谢恒生在这方面的开放与支持。


王友强: 了解到罗总写了一本《企业级Java EE架构设计精深实践》

能介绍下写这本书的背景么?

罗果:其实,做企业级架构这么多年了,也有一些自己的心得,不一定都是最好的,但都是我们尽可能往好了做的,都是扎扎实实的实践,许多实践也是经受住了应用过程的种种考验。

当然,有可能有许多同学也有类似的问题,也就需要在这些领域踩坑,那么如果把我们在实践过程中怎么踩的坑、怎么解决的问题与大家分享,如果能帮到一部分的人,那也是我的荣幸。

于是就把我们在tiny开源框架中的一些实践拿了出来,并成书分享。


王友强:对于软件设计,有一些什么样的看法?

罗果:软件设计和我们的现实设计其实也是有非常多的相似性的。我们的宇宙运行着这么多的天体,开普勒只用了3个定律就概括了。

所以,我的口头禅就是好的架构设计一定是简单的,好的架构是品出来的。

cab92139aaeb3f96639d6d0f47310715535fada8

我一直有一个观点,软件架构做的不够好,是因为还分的不够细(清楚),只要分析清楚了,其实后面的工作就只是工作量的问题了。


9fc6009bf4a136149e02632ab4ea3ad683115112


王友强:你从程序员到架构师,都有哪些成长心得?

罗果:如果说有些心得的话,那就是思考、实践然后循环这一过程。

以前我写过一篇博客,就是说如何编写螺旋矩阵和蛇形矩阵的问题。

其实许多同学在学生期间都写过这个程序,那么我就不停的思考是不是可以写的更简单?是不是可以写的更简洁?

直到最后,我在思考是不是可以只用一个循环就写出来?结论居然是可以。

86c569c4a2185366ea302d890ab0714ca0f3b624

所以,从一开始做程序员,只是考虑怎么完成任务,慢慢要分析背后的机理,再后来要寻找背后的逻辑给出最好的解决方案。当然,有可能我们永远找不到最好的解决方案,但是我们可以逐渐接近它。

当然,也是要有挑战权威的勇气。

我们用了Apache VFS,结果使用过程有内存泄漏,于是就有了TinyVFS。

我们用了Velocity,结果使用过程有诸多不方便的地方,于是就有了TinyTemplate;

我们研究了大量的分库分表方案,但是总有这样那样的我们无法忍受的点,于是就有了TinyDBCluster,还有许多Tiny的组件就是这么出现的。

作为一个程序员,如果你有追求,有追求完美的意愿,你的技术之路一定可以打开。

08d25099e9b564f949239730e18aab0a6a5968c4


王友强:企业架构和互联网架构在风格上有哪些差异点?

罗果:这个命题不太好回答呢,其实早些年企业架构和互联网架构还是有非常大的分别的,随着互联网公司的蓬勃发展,许多原来企业架构不愿意采用的技术,也都开始从互联网架构中想企业架构延伸。

我们所在的公司是金融领域,而金融互联网和互联网金融吵吵了半天,结果就是反正大家也同化了,叫什么其实已经不重要了。

所以现在的企业架构和互联网架构也正在同化的过程之中,总有一天他们之间不会再有分水岭。


王友强:您是开源框架Tiny的创始人,主要是一些什么样的应用场景?

罗果:我在恒生也是负责了恒生J2EE技术平台的设计和开发工作的,限于公司所在的行业特征,实际上做出来的技术平台并不是非常满意,有点重。

因此就想探索是不是可以有更轻量的做法?

于是我就连续写了近30篇博客,对于架构中的每一个专项领域理想化的实现方式是怎么用的做了深入的分析和研讨,甚至编写了原型。

许多以前没有想通透的地方也有了进展,于是就诞生了坐个开源框架的想法。

由于期望做的比较轻量,于是就起了个名字叫Tiny,也是期望它的每一块内容都非常Tiny。

时至今日,Tiny框架已经变成了一个“重”量级框架,这里的重是因为它包含的内容太多太多,几乎软件开发过程中需要的内容都可以在Tiny框架中找到,或者已经集成好。

作为开源中国的GVP项目(全国只有不到80个),不论是个人项目、小型项目、中型项目还是大型项目使用Tiny框架来开发都可以非常好的得以支持,通过服务中心,可以非常方便的进行服务集群水平扩展,通过分库分表可以做到数据库的水平扩展。

而这个扩展过程,对于业务代码是全透明的,所以如果您缺少一个技术平台或者一些通用组件,可以到Tiny官网找一找,说不定有惊喜哦。


 王友强:Tiny现在的发展情况如何?Tiny的设计原则是什么?

ee987c0082aaa34ca9a0ed29eb1ab87e432d4b3e

罗果:

Tiny框架开源至今,单单主项目就有4620次提交,总共有1060个左右个issues,现在还有28个issues没有关闭。

虽然没有准确的数据知道有多少用户,但是从上面的数据可以看到:我们是扎扎实实在做的,有许多同学是在使用或者关注它的。

设计原则用于在设计目标冲突时的解决策略,Tiny框架的设计原则有:

  • 约定优于配置原则-COC
  • 不要重复你自己原则-DRY
  • 减法原则:减法原则是我们自己提出的,意思就是给程序员做减法。
  • 模块化原则:模块化对于软件开发过程中开发、高度、集成、发布、维护过程中所起的作用及节省或花费的巨大成本。因此提出了Business Unit的概念,使得与模块相关的所有内容都可以放在一起。
  • 自动组装原则:在整个Tiny框架的构建过程中,都非常注重集成过程的自动组装,要求做到扔进去不用管,由框架自动集成。
  • 下级服从上级原则:Tiny框架则从框架层级做了限制,使得下级必须服务上级。
  • 单一原则:通过单一原则进行强制性的约束,使得一个模块只解决单一模块应该解决的问题,从而避免不同的问题放在一起解决所导致的胡子眉毛缕不清的问题,同时也避免了不恰当的依赖及模板引用。
  • 集中配置原则:在Tiny框架我们对配置做了大量的工作,一个是COC方式,如果不配,则采用系统默认的值;一个是集中原则:把需要人工需要配置的内容都集中起来统一配置;一个是对于不需要人工干预的配置,那就集成在Jar包中,作为发布者发布项的一部分。

561d18383c036c66be5bef467590eeeee9e7385a

应该说这些原则在我们设计过程中起了非常大的作用,尤其是几个设计目标冲突的时候。


王友强:相比较于现有的框架,Tiny有哪些优缺点?

罗果:其实,各个框架都是有自己的风格和着重点的,也是各有优缺点的。

这里我说说Tiny的特点吧:

  • 相对于其他框架来说,Tiny的原创性占了非常大的比重,也有许多世界级的子项目,比如:模板语言、分库分表、数据权限、脚本语言等等
  • Tiny框架的粒度分的非常细,这样使用的时候就可以有比较大的选择余地
  • 非常完善的文档,Tiny框架文档有近1500页,虽然我们的文档也有这样那样的问题,但是我们已经尽可能的为使用者提供详尽的文档了
  • 通过《企业级Java EE架构设计精深实践》一书和本人的博客(超过36万字),可以深入理解Tiny框架的设计思路和实现方式

05dc433c671b4698c3fd5b741290099f036e7d0e


王友强:平时除了软件外,还有哪些业余爱好?

罗果:我业余爱好还是比较多的,现在主要下下围棋、象棋、军棋,打打台球等,水平在饭后玩玩的里面还可以,野狐围棋最多上过6d但是待不住,也就野狐5d水平;中国象棋从小学到大学鲜有对手,不过现在退化了;军棋在QQ军棋里面,大概60%胜率。


王友强:1月27日成都ArchData的分享的主题主要是关于哪方面?罗总能提前剧透下么?

罗果:由于大会的主题主要限定在数据方面,因此这次我准备的内容也必须切题,全部都是和数据有关的,就我们在关系数据库的水平扩展、数据权限,数据融合和数据展现方面的实践给朋友们做个汇报,必须都是干货

由于时间关系可能讲解深度有限,到时会在会场公布我的微信号,感兴趣的同学可以线上继续交流。


原文发布时间为:2018-01-22

本文作者:王友强

本文来自云栖社区合作伙伴“中生代技术”,了解相关信息可以关注“中生代技术”微信公众号

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
官网链接