OSCHINA 本期高手问答(11 月 22 日 - 11 月 28 日)我们请来了@闲大赋 李家智为大家解答关于 Spring Boot 2 分布式架构方面的问题。
李家智,出生在贵州,毕业于成都西南民族大学。现在就职于东方金科公司,担任架构师,负责公司技术产品研发。从事软件开发近 20 年,致力于 Java 和 Java EE 系统的架构和实现,对一切技术充满好奇,以知行合一要求自己。除了本书,也是国内流行开源 Beetl 模板语言和 Dao 工具 BeetlSQL 的作者。
Java 的各种开发框架发展了很多年,影响了一代又一代的程序员,现在无论是程序员,还是架构师,使用这些开发框架都面临着两方面的挑战。
一方面是要快速开发出系统,这就要求使用的开发框架尽量简单,无论是新手还是老手都能快速上手,快速掌握页面渲染、数据库访问等常用技术。也要求开发框架能尽量多地集成第三方工具,以便信手拈来。最后,还希望在开发调试过程中,方便代码更改后能快速重启。
另外一方面,当系统模块增加,用户使用量增加时,面对这样的挑战,系统拆分成为新的架构,程序员和架构师当然不希望换掉已有的开发框架,希望能由小而美的系统过渡到大而强的分布式系统。
环顾当前 Java 开源世界中的流行技术框架,能同时胜任这项工作的微乎其微,Play 和 ActFramework 都是不错的选择,国内的 Nutz 和 JFinal 的口碑也不错。但能同时满足快速开发和分布式系统架构的框架,还是群众基础最好、功能最全、基于 Spring 技术的 Spring Boot 框架。
本期问答内容:
- Spring Boot 框架
- Spring MVC
- 视图技术
- 数据库访问技术
- 多环境部署
- 自动装配
- 单元测试
或有其他相关问题,也欢迎大家积极提问!
为了鼓励踊跃提问,@博文视点 会在问答结束后从提问者中抽取 5 名幸运会员赠予《Spring Boot 2精髓:从构建小系统到架构分布式大系统》一书。
购买链接 >>>点这里进入购买地址
OSChina 高手问答一贯的风格,不欢迎任何与主题无关的讨论和喷子。
下面欢迎大家就 Spring Boot 2 分布式架构方面问题向@闲大赋 李家智提问,请直接回帖提问。
回复@Gavin-King :分布式事务如何控制
在Java EE规范里,明确支持了分布式事务。数据库,或者消息中间件等,在Java EE里,都是事务的资源管理(Resource Manager),他们自己支持本地事务,本地事务都有最好的性能。然而,如果使用分布式事务或者JavaEE称为全局事务,通过俩阶段提交协议来管理多个数据库,其他资源管理等,则性能会很差。记得以前做电信行业项目,全局事务管理器是由weblogic来提供,在性能测试中确实较差。
Spring和SpringBoot本身不支持俩阶段提交协议,但可以使用JavaEE应用服务器提供的事务服务来完成,或者第三方的事务管理器。比如Spring Boot推荐了开源的Atomikos,Bitronix,我认为这个跟商业服务器一样,提供类似的全局事务管理。
Java EE的分布式事务优点是对于开发人员来说是透明的,不需要考虑太多。它针对的事务管理都是数据库,消息中间件这样的系统,而并非分布式业务系统
然而,对于分布式业务系统,有时候并不是简单的数据库等资源管理需要实现分布式事务就可以了,而是分布在各个系统上的业务需要实现“分布式事务”,这就需要业务系统进行改造,类似数据库那样的支持(业务上的)提交,回滚。同时,当然也得有类似的全局事务管理器。现在我知道的有TCC方式,一种高性能的的分布式实现方案,Atomikos也支持,国内也有很多开源的支持。还有一种较为简单的基于saga的实现方式,我理解他相对于TCC方式来说,对业务侵略性较低,我目前也在研究华为工程师的一个开源 https://github.com/ServiceComb/ServiceComb-Saga。
书写本书的时候,因为时间紧迫,最后放弃了分布式事务的章节的编写。从我个人从业背景来看,我倒是更愿意研究一下Saga的实现,我也推荐你看看
@闲大赋 spring boot 和 Spring cloud 有什么区别和关系,使用还有Spring boot 如何实现jndi的配置,同时集成jetty,书中相关的介绍么?我是一个spring boot的初学者,涉及不深,想找一本相关的书来拜读下
回复 @和未来有约的疯疯疯
你作为刚毕业生,我只能祝贺你碰到了Spring Boot,Spring Boot目的就是简化Spring体系开发项目的难度,并有意识的(我个人这么认为)略去了Spring 中一些并不在使用但还支持的技术,我建议你购买我的书,因为书里提到的知识点都是最为常用,也是Spring Boot推荐的使用Spring的方式。你不需要具备JavaEE和Spring基础就能学会。
当然,如果你要精通Spring,选购一本Spring 5的书也是个不错的主意,或者阅读官网文档
Spring Boot 从来都不是一个单独的技术,而是整合了Spring多个技术体系的技术框架,你也可以从书里逐渐辐射到Spring体系里各个技术,以及周边的分布式技术。
我从读者的很多反馈来看,越来越多的项目都构建在Spring Boot上了,无论是传统IT企业项目,还是移动互联网项目,比如,今天一个百度的同事告诉我,他们的项目也开始在Spring Boot上构建
引用来自“混世顽童”的评论
@闲大赋 戏路很宽啊,都出书了
谢谢,是边用Spring Boot2 做公司产品,边结合以前实践,把书写了,不费劲,顺带的事情
引用来自“小鲅鱼”的评论
@闲大赋 目前流行前后端分离, 后端业务spring boot, 前端目前使用vue去实现,
但是发现开发前端还是成本太高,怎么更加快速实现前端目前都没有找的好办法。
没有办法,这要求有前端团队,在一些大型互联网公司,前端团队兵强马壮,因此这样前后端分离是可行的,小型团队前后端分离确实很痛苦,我的项目还是以后端模板引擎为主,然后bootstrap,layui这种较为传统的后端页面来辅助的,相信你以前也是这么干的。
我公司也有前后端分离项目,现状和你一样,前端人员由于人手不足,特别忙,瓶颈也主要在前端这块了...
引用来自“Baclk5”的评论
@闲大赋 Spring JDBC Template和mybatis的框架对比如何, 应该怎么选择不同的orm框架??
显然mybatis要好于Spring JDBC Template。我书里也提到了俩个流派,一个是以sql为中心,有myabtis,我自己开源beetlsql,还有jdbc templates,另外一个以对象为中心,比如JPA,Hibernate,JOOQ等
我个人喜欢前者以sql为中心的框架,更适合复杂业务系统。他们开发效率也并不低,比如myabtis搭配国内的plus,还有我自己的beetlsql。开发效率应该比JPA跟高,还具备非常好的可维护性。
Spring JDBC Template 太初级了,除非有封装过,直接拿来用不合适
引用来自“开源中国首席屌炸天”的评论
@闲大赋 对JFinal怎么看?
你这提问很不厚道,我个人倒是觉得JBoot不错,很大气,未来在某些领域会有更多使用量