• 答疑 | 分布式和微服务的区别?


    分布式和微服务的区别

    分布式和微服务有什么区别呢?网上说啥的都有,越看越晕了。

    答:分布式的核心就一个字:拆。只要是将一个项目拆分成了多个模块,并将这些模块分开部署,那就算是分布式。

    如何拆呢?有两种方式:水平拆分,或垂直拆分(也称为“横向拆分”和“垂直拆分”),具体如下:

    水平拆分:根据“分层”的思想进行拆分。例如,可以将一个项目根据“三层架构”拆分成 表示层(jsp+servlet)、业务逻辑层(service)和数据访问层(dao),然后再分开部署:把表示层部署在服务器A上,把service和dao层部署在服务器B上,然后服务器A和服务器B之间通过dubbo等RPC进行进行整合(在左下角的“阅读原文”里有dubbo的视频课程,可以点击学习),如图所示。

    垂直拆分:根据业务进行拆分。例如,可以根据业务逻辑,将“电商项目”拆分成“订单项目”、“用户项目”和“秒杀项目”。显然这三个拆分后的项目,仍然可以作为独立的项目使用。像这种拆分的方法,就成为垂直拆分。

    什么是微服务呢?

    从名字就能知道,“微服务”就是非常微小服务

    微服务可以理解为一种非常细粒度的垂直拆分。例如,以上“订单项目”本来就是垂直拆分后的子项目,但实际上“订单项目”还能进一步拆分为“购物项目”、“结算项目”和“售后项目”,如图。

    现在看图中的“订单项目”,它完全可以作为一个分布式项目的组成元素,但就不适合作为微服务的组成元素了(因为它还能再拆,而微服务应该是不能再拆的“微小”服务,类似于“原子性”)。

    总结:

    分布式:拆了就行。

    微服务:细粒度的垂直拆分。

    内存泄漏

    2.Java中不是有GC吗,怎么还有内存泄漏一说?

    答:Java内存有两种常见问题:内存溢出和内存泄漏。

    内存溢出好理解,就是JVM内存有限。如果对象太多,JVM内存放不下了,就会内存溢出。

    那什么是内存泄漏?首先得明确,GC只会回收那些“不可达”的对象(可以简单理解为,如果一个对象存在着指向它的引用,这个对象就“可达”;如果没有引用指向它,则“不可达”)。

    若一个对象是“无用但可达的”,就会造成内存泄漏。

    如下代码中,obj的值是null,因此是“无用的”;但同时obj又同时被被list引用,因此是“可达”的,所以此时的obj就会造成内存泄漏。

    1. Object obj = new Object();
    2. list.add( obj );
    3. obj = null ;

    除了上面obj这种内存泄漏的情况以外,在实际开发中最常见的内存泄漏就是打开资源后没有调用close()方法。例如socket、io流等,都需要再最后close()一下防止内存泄漏。

     

  • 相关阅读:
    利用 Pandoc 将 Latex 转为 MS word 的方法
    springboot烯烃厂压力管道管理系统java ssm
    C语言错题笔记
    【论文阅读】Mastering the game of Go with deep neural networks and tree search
    RK3566设置以太网MAC地址
    SpringSecurity6 | 委派筛选器代理和过滤器链代理
    rk3399 linux4.19 ubuntu mpv播放概率性内核崩溃在vop_crtc_atomic_flush
    智慧燃气,如何能够防患于未“燃”!
    springboot高校二手服饰交易系统服装商城idea mysql
    笔试强训Day13
  • 原文地址:https://blog.csdn.net/m0_72885838/article/details/126038467