V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
liujianwei
V2EX  ›  程序员

Java Web 系统,现在流行什么架构?

  •  
  •   liujianwei ·
    jianliuwei · 2019-06-07 11:40:46 +08:00 · 6132 次点击
    这是一个创建于 2021 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1. 是 Spring Cloud 做微服务,然后通过前端框架( React、Vue 之流)调用这些服务再渲染页面;还是
    2. Spring MVC 这套( Spring MVC 能搭配 Spring Cloud 吗);还是
    3. 其它的?
    第 1 条附言  ·  2019-06-07 13:34:16 +08:00
    各位别讨论偏了,再重申一下问题:Java Web 系统的主流架构是什么?以及分别适用于什么场景?你工作中项目架构是怎样的?

    不是问 Spring Cloud 是什么,Spring MVC 是什么,Spring Boot 是什么。
    23 条回复    2019-06-09 18:13:08 +08:00
    BCy66drFCvk1Ou87
        1
    BCy66drFCvk1Ou87  
       2019-06-07 12:01:36 +08:00 via Android   ❤️ 1
    这个看需要吧。一般的项目可能 spring boot 单体应用就足够了,大些的可能要上 spring cloud 微服务+前后端分离,再大点的可能微服务+前后端分离+集群等等
    sumarker
        2
    sumarker  
       2019-06-07 12:36:23 +08:00
    理论上 springcloud 可以配合 mvc 但是估计配置会相当繁琐,不如直接 springboot + springcloud
    leonme
        3
    leonme  
       2019-06-07 12:38:07 +08:00 via Android
    @sumarker 你大概都没搞清楚什么是微服务,什么是 springcloud,什么又是 mvc
    sumarker
        4
    sumarker  
       2019-06-07 12:39:53 +08:00
    @leonme 实在抱歉 确实没懂,误人子弟了。。。
    liujianwei
        5
    liujianwei  
    OP
       2019-06-07 13:03:58 +08:00   ❤️ 1
    @sumarker take it easy! 畅所欲言,共同成长!
    hkitdog
        6
    hkitdog  
       2019-06-07 13:05:16 +08:00 via iPhone
    都是 CRUD
    telami
        7
    telami  
       2019-06-07 13:13:22 +08:00   ❤️ 1
    简单来说,spring mvc 只是 spring 的一个组件,整个 spring 包括实在是太多了,spring-security、spring-data-xx,等等。
    而 springboot 则是基于 spring,按照约定大于配置的思想抽出的一个高度封装的 spring,屏蔽了更多的细节,省去了繁琐的 xml 配置等等,这对于不熟悉 spring 的同学来说,出现问题可能不是很好排查,但是对于饱受复杂配置的同学来说,开箱即用,无需再 copy 旧项目各种 xml,springboot 当然是神器,起码写个 helloword,快的话 1~2 分钟足够了。
    而 springcloud 则是基于 springboot 的一套微服务框架,因为现在前后分离是趋势,所以一般后端都只是提供接口,前端或是 react、或是 vue 负责渲染页面,当然新技术并不一定非常适合你,尽管前端框架各种 SSR,但是还是对蜘蛛不太友好,就是说被搜索引擎收录,有点麻烦( ps:加钱、竞价排名可以解决一切问题)
    lhx2008
        8
    lhx2008  
       2019-06-07 13:20:46 +08:00 via Android
    感觉楼上的都没有说到点子上。

    首先,我们要把前端和后端的视角分离。Spring 完完全全是一个后端层面的框架,也就是说,你前端到底是弄分离还是不分离,都和后端这套框架关系不大,只是整合的问题。

    其次,理解什么是 springboot,简单来说,就是一个集成了 spring ioc,可以通过 pom 快速配置各种组件的集成框架。所以 springboot 可以快速集成 springmvc 这个组件,并且只需要 pom 和注解配置。也可以快速集成 mybatis 或者 jpa 等组件。

    到了 springcloud,他是一套微服务的框架,模式上,就是等于把多个模块(比如不同的 service )分割成不同的 java 程序在不同的 jvm 上运行,那么这些模块之间需要通信和管理,互相调用,springcloud 就是这么一套整合的解决方案。至于 springcloud 每个模块,一般都是由 springboot 构建的
    liuxey
        9
    liuxey  
       2019-06-07 13:26:21 +08:00
    每个人对微服务都有一套自己的理解,自己说的别人不一定明白,简单来说:

    小和中型系统:SpringBoot 全套 + 一个模板引擎或者一个前端框架,做到底就够了,很快上手

    大型系统:SpringCloud 搭一套,配合前端框架和 Docker 等容器技术,能覆盖绝大部分人的需求,但对团队整体能力要求不小
    huiyifyj
        10
    huiyifyj  
       2019-06-07 13:27:15 +08:00
    Spring 全家桶...
    telami
        11
    telami  
       2019-06-07 13:33:00 +08:00   ❤️ 4
    而且,springcloud 不是那么好上的,除却本身的学习成本,还有运维成本,这个基础设施一定要完善,测试环境和生产环境起码要有。人肉运维必然是不可行的,也是极其低效的,所以都是要走脚本,容器肯定要上 docker,k8s 管理。

    不管业务大小,光生产环境起码得 10+个微服务,当业务大了之后,100 多个不算多,那注册中心是不是得集群,起码有三个吧,配置中心也得有吧。测试环境简单点,起码得有吧,开发环境要是没钱的话,开发同学是不是自己需要在电脑上搞一下,不管是 eureka 还是 consul,或者上 Nacos,起码得启动一个吧,config 中心启动一个,自己要调试的微服务启动一个,关联的微服务启动一个,这些不可能都在 idea 启动吧,开发同学是不是自己电脑上也要装 docker,还得 docker-compose 启动,windows 电脑对 docker 支持不是太好,是不是得用 mbp (哈哈)

    emmm,除了这些基础的,微服务最大的问题就是分布式事务,小厂有钱的话,服务器凑够了,技术底蕴怎么凑啊,是基于 mq、还是 tcc、还是干脆不管事务
    一次调用链路贼长,不用多,跨了三个微服务,怎么调试啊,链路追踪是不是搞起来啊,产品、业务天天催,一个 bug 搞一天,怎么办

    其实 springboot 挺好的,jdk8 还是很香的
    oneisall8955
        12
    oneisall8955  
       2019-06-07 16:02:36 +08:00 via Android
    公司用着 springboot+jpa,美滋滋
    cabing
        13
    cabing  
       2019-06-07 16:46:21 +08:00
    spring-boot,服务注册和发自制轮子,配置中心自制轮子-存储用的 consul,pingpoint 查看服务调用+自制调用链跟踪的轮子,消息队列使用 kafka。
    kidult
        14
    kidult  
       2019-06-07 17:16:04 +08:00
    国产 Nutz 挻好用的
    skypyb
        15
    skypyb  
       2019-06-07 20:46:41 +08:00
    Java Web 系统的主流架构是什么?
    哪有什么主流架构
    单体架构+HTML 模板引擎
    单体架构+前后端分离
    微服务 (这个我默认前后端分离
    你还能加上大数据、云计算、人工智能、区块链,随意组合着玩 都有好多种了

    哪个都不少,你说哪个主流鸭?
    skypyb
        16
    skypyb  
       2019-06-07 20:55:34 +08:00   ❤️ 1
    要是说框架,单体架构就 ssm 咯,管技术的跟的上时代还能上上 springboot,至于要不要前后端分离,就看公司招不招专门的前端人员了。

    微服务的话,要么用 Duubo+zk 这套(熔断?路由? 自己找别的组件,这套架构不是一站式解决方案)

    要么用 Spring Cloud 生态圈, 网飞全家桶本来比较流行,完美配合集成,一站式解决方案。可惜不更新了,注定淘汰。好像也只能用 Spring Cloud Alibaba 全家桶了 = =
    luozic
        17
    luozic  
       2019-06-07 23:11:46 +08:00 via iPhone   ❤️ 1
    单体 还是分布式, 直接队列 还是消息队列。 存储是主从 还是多主多从。 其他的都是部署和运维和运行架构,区分 业务架构 逻辑架构 物理架构。
    MissThee
        18
    MissThee  
       2019-06-07 23:55:35 +08:00 via iPhone
    弱弱问一下有人用过 JFinal 吗
    sagaxu
        19
    sagaxu  
       2019-06-08 10:05:59 +08:00 via Android
    @MissThee 看过 3.x 和最新的 4.2,特性太过简陋,简单 crud 没问题,业务稍微复杂点,就要自己各种魔改
    liujianwei
        20
    liujianwei  
    OP
       2019-06-08 15:46:16 +08:00
    各位,新开了一个主题,接茬讨论分布式微服务,感兴趣的移步 https://www.v2ex.com/t/571982,我在那里等你们。
    shadowtale
        21
    shadowtale  
       2019-06-09 00:49:25 +08:00 via Android
    @oneisall8955 jpa 学习难度怎么样,会不会很重量级?
    shadowtale
        22
    shadowtale  
       2019-06-09 00:49:59 +08:00 via Android
    @liujianwei 哥哥,中文能不能不要放在超链接里面
    oneisall8955
        23
    oneisall8955  
       2019-06-09 18:13:08 +08:00 via Android
    @shadowtale jpa 是规范,hibernate 是 jpa 一个实现,你学 hibernate 有没有困难?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1006 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 20:01 · PVG 04:01 · LAX 12:01 · JFK 15:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.