• 请不要在回答技术问题时复制粘贴 AI 生成的内容
LoremIpSum
V2EX  ›  程序员

用 iframe 来做微服务靠谱吗?

  •  
  •   LoremIpSum · Jun 2, 2018 · 7057 views
    This topic created in 3082 days ago, the information mentioned may be changed or developed.

    领导让我们把原有的系统各个模块拆成微服务,并独立部署,其他系统通过 iframe 来调用这个微服务,考虑到使用 iframe,有以下两个问题: 1.跨域问题,iframe 需要和父页面进行通信 2.样式问题,iframe 的样式,大小不可能和所有调用它的系统保持一致。

    开发起来感觉很棘手,这种方法来做微服务合适吗?是否是最佳实践。

    32 replies  •  2018-06-04 15:34:25 +08:00
    nine99
    nine99
    Jun 2, 2018❤️4
    1
    这能叫微服务。。。
    nine99
    nine99
    Jun 2, 2018❤️1
    2
    感觉他对微服务没理解吧
    picture2200
    picture2200
    Jun 2, 2018 via Android❤️1
    3
    跨域问题用反向代理拦截所有模块请求。

    样式问题用固定页面大小来做。

    实际上楼主领导的方案好几年前在企业 IT 流行过。狭义上讲这不是微服务。
    guagusi
    guagusi
    Jun 2, 2018
    4
    这微服务的理解也是醉
    LoremIpSum
    LoremIpSum
    OP
    Jun 2, 2018
    5
    @picture2200 比如一个订单服务,就是一个 iframe,你提交订单后,还得跨域去通知父页面把窗口关了.蛋疼...
    yidinghe
    yidinghe
    PRO
    Jun 2, 2018
    6
    微服务不是这么拆分的。你要做微服务拆分,界面需要保持不变,对请求的处理逻辑再进行拆分,拆分的结果是多个后台进程之间相互调用,而不是靠浏览器去请求多个服务。
    hronro
    hronro
    Jun 2, 2018❤️6
    7
    重新定义微服务
    hronro
    hronro
    Jun 2, 2018
    8
    讲道理,iframe 能不用就不用吧,这东西大部分情况下可以扫进垃圾堆了
    picture2200
    picture2200
    Jun 2, 2018 via Android
    9
    @LoremIpSum 用反向代理。

    例如:
    首页 URL: https://xxx/

    订单 URL: https://xxx/order

    这样就不算跨域了。
    imydou
    imydou
    Jun 2, 2018
    10
    aws ecs + elb 非常适合此场景
    jakes
    jakes
    Jun 2, 2018
    11
    重新定义微服务。。。
    我司 07 年的系统也是这么玩的,但是不叫“微服务”。
    你的需求 #9 的方法可解。
    sudoz
    sudoz
    Jun 2, 2018
    12
    你可能对 microservice 有什么误解
    lqyhk1234
    lqyhk1234
    Jun 2, 2018
    13
    这种方法一般是服务商向客户提供功能,优点有:
    1.客户简单的在页面中嵌入所需功能
    2.终端用户使用功能不需要跳转
    3.服务商可以防止客户更改其逻辑和表现

    比如 Paypal 的嵌入式支付窗口和 Youtube 的嵌入播放器
    dobelee
    dobelee
    Jun 2, 2018 via Android
    14
    樓主可能要把古董與現代文明相結合,你們都不懂。
    phodal
    phodal
    Jun 2, 2018
    15
    如果是 Angular 2+ 的话,可以看看这篇相关的微服务化架构方案对比: https://github.com/phodal/micro-frontend
    iConnect
    iConnect
    Jun 2, 2018 via Android
    16
    iframe 再过阵子,都要从 http 协议中清理出去了
    CFO
    CFO
    Jun 2, 2018 via Android❤️1
    17
    @phodal 前端圈还真是什么热点都想蹭
    nakes
    nakes
    Jun 2, 2018
    18
    iframe?这是微服务都微到前端来了?新潮?。。
    LoremIpSum
    LoremIpSum
    OP
    Jun 2, 2018
    19
    @picture2200 能说下这样做的弊端和好处吗
    Foolt
    Foolt
    Jun 2, 2018❤️1
    20
    你领导的意思应该是模块化,各模块独立开发,通过统一的接口与前端通信,前端整合各模块内容返回给用户。iFrame 应该只是他了解到的实现方法,你要告诉他现在的流行做法以供他参考和选择,而不是他想到什么你就直接做什么。

    淘宝首页就是这样,前端以前是用 PHP 开发,后来改成 Node 了。

    http://taobaofed.org/blog/2016/06/02/thing-about-taobao-homepage/
    mezw
    mezw
    Jun 3, 2018 via iPhone
    21
    跨域问题可以用 jsonp
    kookpua
    kookpua
    Jun 3, 2018 via iPhone
    22
    @Foolt 感谢分享 对我触动很大 下来好好吸收实践
    picture2200
    picture2200
    Jun 3, 2018 via Android
    23
    @LoremIpSum

    好处是:
    1. Ajax 请求好实现,不用考虑跨域。

    2. 部署停机好控制,假如在工作时段部署的话就可以先从反向代理下掉一台部署一台。

    3. 反向代理的常规功能,负载均衡等等。

    4. 以后可以在反向代理做网关功能,例如提前处理和加一些隐藏的 header,认证 token 等等。
    picture2200
    picture2200
    Jun 3, 2018 via Android
    24
    @LoremIpSum

    坏处是

    看起来很复杂。

    多学习一个组件,要 tuning 反向代理。

    如果反向代理需要高可用的话,需要用 dns 做 load balance 也就是 GSLB 功能。
    ech0x
    ech0x
    Jun 3, 2018 via iPhone
    25
    这是微服务????
    learnshare
    learnshare
    Jun 3, 2018 via Android
    26
    这顶多叫页面插件化
    zhjits
    zhjits
    Jun 3, 2018
    27
    pjax 了解一下
    mritd
    mritd
    Jun 3, 2018 via iPhone
    28
    你怕是对微服务有什么误解吧
    dopdopdop
    dopdopdop
    Jun 3, 2018
    29
    ngnix 反向代理
    restful api
    中间件包装接口
    jatesun
    jatesun
    Jun 3, 2018
    30
    兄弟你在开玩笑吧
    wellsc
    wellsc
    Jun 3, 2018
    31
    what are you talking about?
    sylar1015
    sylar1015
    Jun 4, 2018
    32
    如果所有模块都是自己开发,这样是不合适的;
    如果是需要集成其他厂家的页面,和自己的系统交互,我也在找这样的方案;
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1221 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 69ms · UTC 23:42 · PVG 07:42 · LAX 15:42 · JFK 18:42
    ♥ Do have faith in what you're doing.