琅琊风云榜:对话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

本文作者:王友强

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

相关文章
|
2月前
|
人工智能 安全 Linux
OpenClaw AI创业风口全解:阿里云/本地部署+156个盈利项目拆解+百炼API配置实战指南
2026年一场悄无声息的AI淘金热已经全面爆发。一组来自TrustMRR的真实营收数据足以说明一切:平台上收录156个基于OpenClaw(Clawdbot)的创业项目,最长成立不超过6周,过去30天合计营收达到379,631美元,平均每个项目月入2,432美元,头部项目单月营收高达50,000美元。这些项目几乎都是一人团队或两三人小组,没有VC融资、没有实体办公室、没有高调官宣,却实实在在通过Stripe产生真金白银的收入。
923 0
|
机器学习/深度学习 算法 PyTorch
从零开始深度学习:全连接层、损失函数与梯度下降的详尽指南
在深度学习的领域,全连接层、损失函数与梯度下降是三块重要的基石。如果你正在踏上深度学习的旅程,理解它们是迈向成功的第一步。这篇文章将从概念到代码、从基础到进阶,详细剖析这三个主题,帮助你从小白成长为能够解决实际问题的开发者。
|
存储 缓存 异构计算
PixiJS源码分析系列:第二章 渲染在哪里开始?
PixiJS源码分析系列:第二章 渲染在哪里开始?
获取京东cookie
获取京东cookie
304 0
获取京东cookie
|
Web App开发 移动开发 小程序
支付宝新一代动态化技术架构与选型综述 | Cube 技术解读
支付宝新一代动态化技术架构与选型综述 | Cube 技术解读
727 0
|
编解码 Java Android开发
Android10.0 MTK 平板横屏方案修改(强制app横屏 + 开机logo/动画+关机充电横屏 + RecoveryUI 横屏)
Android10.0 MTK 平板横屏方案修改(强制app横屏 + 开机logo/动画+关机充电横屏 + RecoveryUI 横屏)
1167 0
|
人工智能 文字识别 算法
基于PaddleOCR的体检报告识别(一)
面对飞速发展互联网医疗时代,医疗信息化建设已经成为医疗行业发展的趋势。经调研,约80%的医学病历是处于非结构化状态的,难以直接被利用而造成了大量医学资源浪费。医疗数据中大量的半结构化与无结构化的文本,医学术语的专业性以及语言表达的多样性为结构化信息抽取带来了很大难度。因此,针对电子病历和报告的信息识别抽取和结构化管理对临床诊断、疾病预防与医学研究具有重要意义。
981 0
基于PaddleOCR的体检报告识别(一)
|
数据安全/隐私保护 虚拟化 Windows
虚拟机安装WindowsServer2016
虚拟机安装WindowsServer2016
748 0
虚拟机安装WindowsServer2016
|
Kubernetes 网络协议 容器
Kubernetes开源LoadBalancer—Metallb(BGP)
Kubernetes开源LoadBalancer—Metallb(BGP)
Kubernetes开源LoadBalancer—Metallb(BGP)
|
JSON API 数据格式
FastAPI(8)- 请求体 Request Body (上)
FastAPI(8)- 请求体 Request Body (上)
1069 0
FastAPI(8)- 请求体 Request Body (上)

热门文章

最新文章