前言

最近公司某个项目的架构越来越庞大,维护起来非常难受。领导提出要把这个项目重构,在工作中需要把原来的项目重构成微服务架构,因此学习微服务相关知识,在这里记录下来,权当笔记的同时也希望能对你有启发。今天就来聊聊什么是微服务?

单体应用

在聊微服务之前,我先给你们梳理下什么是单体应用。如果你不知道单体应用的痛,那也不会深刻理解微服务的价值。

上图为我司某项目架构,包含了四个模块。可以看出我司此项目的架构完完全全属于传统的 MVC 架构,所有的子系统都集成在一个很繁杂的 JVM 进程中。

优点

这种单体架构的优点在于方便管理,所有代码在同一项目中,但是当需求越来越多,项目规模越来越大,其坏处也很明显。

缺点

  1. 项目过于臃肿,部署效率低下

当大大小小的功能模块都集中在同一项目的时候,整个项目必然会变得臃肿,让开发者难以维护。单体应用的代码越来越多,依赖的资源越来越多时,应用编译打包、部署测试一次非常耗时。

  1. 系统高可用性差,资源无法隔离

整个单体系统的各个功能模块都依赖于同样的数据库、内存等资源,一旦某个功能模块对资源使用不当,整个系统都会被拖垮。

  1. 开发成本高

早期在团队开发人员只有两三个人的时候,协作修改代码,打包部署,更新发布这完全可以控制。但是团队一旦扩张,还是按照早期的方法去开发,那如果测试阶段只要有一块功能有问题,就得重新编译打包部署。所有的开发人员又都得参与其中,效率低下,开发成本极高。

  1. 无法灵活拓展

当系统的访问量越来越大的时候,单体系统固然可以进行水平扩展,部署在多台机器上组成集群:

但是这种扩展并非灵活的扩展。比如我们现在的性能瓶颈是支付模块,希望只针对支付模块做水平扩展,这一点在单体系统是做不到的。因此,急需一种方法将应用的不同模块进行解耦,从而降低开发和部署成本。

要解决上面单体应用的问题,就必须引入服务化的概念。

什么是服务化?

用通俗的语言来说,服务化就是把传统单体应用中通过 JAR 包依赖产生的本地方法调用,改造成 RPC 接口产生的远程方法调用。这些服务是围绕业务功能构建的,可以通过全自动部署机制独立部署。 这些服务的集中管理最少,可以用不同的编程语言编写,并使用不同的数据存储技术。

以我司项目为例,这个项目包含的四个模块都是相互依赖的,当这些模块的代码耦合到一起时,需要去加载每个模块的代码以及连接资源,任何一个出了问题,整个应用都会受到影响。

为此,可以把耦合度较高的模块,独立数据源,独立成一个服务部署,以 RPC 接口的形式对外提供服务。例如订单模块和用户模块:

可见通过服务化,可以解决单体应用膨胀、团队开发耦合度高、协作效率底下的问题。

什么是微服务?

简而言之,微服务架构风格是一种将单个应用程序作为一套小型服务开发的方法,每种应用程序都在自己的进程中运行,并与轻量级机制(通常是HTTP资源API)进行通信。得益于以 Docker 为代表的容器化技术的成熟以及 DevOps 文化的的兴起,服务化的思想进一步演化,演变成我们今天所熟知的微服务。

说了这么多概念,微服务有什么样的具体特点呢?

  1. 服务拆分粒度更细

微服务可以说是更细维度的服务化,小到一个子模块,只要该模块依赖的资源与其他模块都没有关系,那么就可以拆分为一个微服务。

  1. 服务独立部署

传统的单体架构是以整个系统为单位进行部署,而微服务则是以每一个独立组件(例如用户服务,商品服务)为单位进行部署。

用一张经典的图来表现,就是下面这个样子:

什么意思呢?比如根据每个服务的吞吐量不同,支付服务需要部署100台机器,用户服务需要部署30台机器,而商品服务只需要部署10台机器。这种灵活部署只有微服务架构才能实现。

  1. 服务独立维护,分工明确

每个微服务都可以交由一个小团队进行开发,测试维护部署,并对整个生命周期负责。比如在单体应用时期,我们的研发团队是如下图这样传统的水平架构:

而微服务时期,我们可以根据其思想把团队划分成垂直组织架构:

当然,这种垂直划分只是一个理想的架构,实际在企业中并不会把团队组织架构拆分得这么绝对。

后语

文章介绍了微服务的发展由来,它是由单体应用进化到服务化拆分部署,后期随着移动互联网规模的不断扩大,敏捷开发、持续交付、DevOps 理论的发展和实践,以及基于 Docker 容器化技术的成熟,微服务架构开始流行,逐渐成为应用架构的未来演进方向。

以上就是我对微服务的理解,希望对你们有帮助。最后,对 Python 、Java 感兴趣请长按二维码关注一波,我会努力带给你们价值,如果觉得本文对你哪怕有一丁点帮助,请帮忙点个赞

小福利

如果看到这里,喜欢这篇文章的话,请帮点个好看。微信搜索一个优秀的废人,关注后回复电子书送你 1000+ 本编程电子书 ,包括 C、C++、Java、Python、GO、Linux、Git、数据库、设计模式、前端、人工智能、面试相关、数据结构与算法以及计算机基础,详情看下图。回复 1024 送你一套完整的 java 视频教程。

JAVA | 什么是微服务?相关推荐

  1. Spring Cloud 与微服务学习总结(14)—— 云原生时代,如何从 Java 开发者转型微服务?

    前言 根据维基百科定义,微服务不是整体应用程序中的一个层.相反,微服务是一个独立的业务功能,具有清晰的接口,并且可以通过内部组件实现分层架构.从战略角度来看,微服务架构基本上遵循"做一件事, ...

  2. 秒杀springboot——未来轻量级高性能的Java云原生微服务框架来啦

    秒杀springboot--未来轻量级高性能的Java云原生微服务框架来啦 引子 自2003年Rod.Juergen 和 Yann开发并发布Spring项目后,J2EE 迎来了新的开始.在 2013 ...

  3. java计算机毕业设计微服务”架构下新闻头条的设计与实现源码+系统+数据库+lw文档

    java计算机毕业设计微服务"架构下新闻头条的设计与实现源码+系统+数据库+lw文档 java计算机毕业设计微服务"架构下新闻头条的设计与实现源码+系统+数据库+lw文档 本源码技 ...

  4. 13 年 Java 老兵的微服务战地笔记 | 文末有1元福利

    * 文末有仅限 24 小时的 1 元福利,错过别怪我!!! 微服务在业内的实践已经从流行走向成熟,诸多公司(比如 Amazon.Netflix.蚂蚁金服.网易云音乐等)都已经迁移并采用了微服务架构.而 ...

  5. Linux(Nginx)+Java SpringBoot视频微服务搭建

    最近收到一个需求,需要把视频集成为一个服务,视频播放时根据登录的用户名动态生成水印覆盖在视频上: 这些视频隔段时间会来一波,需要集成进去: 最初的解决方案:把视频当作静态资源放在Java Spring ...

  6. 【直播回顾】云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第19讲):Java Spring Cloud微服务架构模式与开发实战...

    主讲人:徐雷(云栖社区特邀Java专家) 徐雷,花名:徐雷frank:资深架构师,MongoDB中文社区联席主席,吉林大学计算机学士,上海交通大学硕士.从事了 10年+开发工作,专注于分布式架构,Ja ...

  7. linkerd——针对java的为微服务提供可靠性的proxy,服务发现重试LB等

    Buoyant是一家云服务公司,宣布了Linkerd(发音为"linker-DEE")的一周年纪念日,这是一个基于微服务的原生云应用程序的开源"服务网格"项目. ...

  8. swarm:pending_WildFly Swarm:使用Java EE构建微服务

    swarm:pending "完美无缺,不是在没有其他可添加的东西时,而是在没有其他东西要带走时实现的" Antoine de Saint-Exupery 法国作家安托万·德·圣艾 ...

  9. WildFly Swarm:使用Java EE构建微服务

    "完美无缺,不是在没有其他可添加的东西时,而是在没有其他东西要带走时实现的" Antoine de Saint-Exupery 法国作家安托万·德·圣艾修伯里 ( Antoine ...

  10. Java框架jboot_微服务框架 Jboot 2.0.5 发布,常规更新

    Jboot 是一个基于 JFinal.JFinal-Undertow.Dubbo 等开发的微服务框架,帮助开发者降低微服务开发门槛.同时完美支持在 idea.eclipse 下多 maven 模块,对 ...

最新文章

  1. soundtouch源码分析__based on csdn :
  2. python爬虫requests源码链家_python的爬虫项目(链家买二手房)
  3. [并发编程]并发编程第二篇:利用并发编程,实现计算大量数据的和
  4. Android-简单拨号器案例
  5. 信息收集 ——情报分析
  6. php4 class,PHP在类中获得当前class名称_php
  7. spring mysql整合_springboot mybatis mysql 整合
  8. jeecg开源项目的IDEA的部署
  9. Feature selection using SelectFromModel
  10. Bootstrap4颜色拾取器插件
  11. 合并m3u8(ts)文件的工具
  12. 图机器学习——1.1 传统方法:基于节点
  13. 2022年前端面试集锦
  14. 做外贸可以开海外店铺吗?可以开哪些平台?
  15. 贾志刚_OpenCV视频课程资源
  16. python isoweekday和weekday的区别
  17. Android 连续播放同段音频(提示音)
  18. 关于html5说法错误的是,关于html5说法错误的是()?
  19. 如何将照片变成黑白照?
  20. 如何让python无限制输出,不受省略号的干扰

热门文章

  1. 用友NC移动审批APP介绍
  2. 测试如何做到不背锅?
  3. java 实验十 数据库实验_java 实验十 数据库 实验报告
  4. 诺基亚7 android 9,诺基亚7 Plus喜迎Android 9更新:带来众多更新
  5. 如何做好软件自动更新
  6. 也看编程语言ruby的前途
  7. 开学不容错过的蓝牙耳机,高品质蓝牙耳机排行榜
  8. 解决:miniUSB 驱动无效 设备不识别
  9. 在同一台客户端访问服务器上配置多个OWA站点
  10. 【K8s】调度神器 descheduler