springcloud系列教程|第一篇:初识微服务

初识微服务

前言

     在上周主要写了一些关于springboot的文章,了解并会用了springboot,在以后还会把实际开发的东西写到springboot栏目里,希望能帮到各位小伙伴,那么接下来将要学习springcloud,当然你得需要有springboot的基础,如果还不了解springboot的小伙伴可以看springboot系列教程合集,仍在持续更新

1:什么是微服务

     微服务架构是一种将单个应用程序开发为一套小型服务的方法,每个小型服务都在自己的进程中运行,通常通过HTTP API 通信。这些服务是基于业务功能进行构建,比如一个服务只负责订单管理,并通过全自动部署机器独立部署

2:微服务怎么工作

     在微服务架构中,应用程序分为一个个单独的服务。 每个服务都运行一个唯一的进程, 服务可以生成警报,日志数据,支持用户界面(UI),处理用户标识或身份验证,以及执行各种其他任务。微服务使每个服务都可以独立隔离,重建,重新部署和管理。 例如,如果程序未正确生成报告,则可以更轻松地将问题跟踪到该特定服务。 然后可以根据需要测试,重新启动,修补和重新部署该特定服务,而与其他服务无关。

3:单体架构以及其缺点

     一个归档包(例如war格式)包含了应用所有功能的应用程序,我们通常称之为单体应用。架构单体应用的方法论,我们称之为单体应用架构。
     缺点:

  1. 技术债务
    随着时间推移、需求变更和人员更迭,会逐渐形成应用程序的技术债务,并且越积越多。“不坏不修(Not broken,don’t fix)”,这在软件开发中非常常见,在单体应用中这种思想更甚。已使用的系统设计或代码难以修改,因为应用程序的其他模块可能会以意料之外的方式使用它。

  2. 部署频率低
    随着代码的增多,构建和部署的时间也会增加。而在单体应用中,每次功能的变更或缺陷的修复都会导致我们需要重新部署整个应用。全量部署的方式耗时长、影响的范围大、风险高,这使得单体应用项目上线部署的频率较低。而部署频率低又导致两次发布之间会有大量的功能变更和缺陷修复,出错概率比较高。

  3. 扩展能力受限
    单体应用只能作为一个整体进行扩展,无法结合业务模块的特点进行伸缩。例如,应用中有的模块是计算密集型的,它需要强劲的CPU;有的模块则是IO密集型的,需要更大的内存。由于这些模块部署在一起,我们不得不在硬件的选择上做出妥协。

  4. 阻碍技术创新
    单体应用往往使用统一的技术平台或方案解决所有问题,团队的每个成员都必须使用相同的开发语言和框架,想要引入新的框架或技术平台会非常困难。例如,一个使用Struts 2构建的、100万行代码的单体应用,如果想要换用Spring MVC,切换成本无疑是非常高的。

4:微服务架构的优点

     微服务架构的优点
           1:易于开发和维护
           一个微服务只关注一个特定的业务功能,所以它的业务清晰、代码量较少。开发和维护单个微服务相对是比较简单的。而整个应用是由若干个微服务构建而成的,所以整个应用也会维持在可控状态。

          2: 单个微服务启动较快
          单个微服务代码量较少,所以启动会比较快。

          3: 局部修改容易部署
          单体应用只要有修改,就得重新部署整个应用,微服务解决了这样的问题。一般来说,对某个微服务进行修改,只需要重新部署这个服务即可。

          4: 技术栈不受限
          在微服务中,我们可以结合项目业务及团队的特点,合理地选择技术栈。例如某些服务可使用关系型数据库MySQL;某些微服务有图形计算的需求,我们可以使用Neo4J;甚至可以根据需要,部分微服务使用Java开发,部分微服务使用NodeJS进行开发。

          5:按需伸缩
          我们可以根据需求,实现细粒度的扩展。例如:系统中的某个微服务遇到了瓶颈,我们可以结合这个微服务的业务特点,增加内存、升级CPU或者是增加节点。

5:微服务架构存在的问题

  1. 运维要求较高
    更多的服务意味着更多的运维投入。在单体架构中,只需要保证一个应用的正常运行;而在微服务中,需要保证几十甚至几百个服务的正常运行与协作,这给项目的运维带来了很大的挑战。

  2. 分布式固有的复杂性
    使用微服务构建的是分布式系统。对于一个分布式系统,系统容错、网络延迟、分布式事务等都给我们带来了很大的挑战。

  3. 接口调整成本高
    微服务之间通过接口进行通信。如果修改某一个微服务的API,可能所有使用了该接口的微服务都需要做调整。

  4. 重复劳动
    很多服务可能都会使用到相同的功能,而这个功能并没有达到分解为一个微服务的程度,这个时候,可能各个服务都会开发这一功能,从而导致代码重复。

6:微服务架构和SOA的关系

     SOA是一种软件架构,其中每个服务都使用协议。 这使用户能够组合功能并形成从先前服务构建的应用程序。 近二十年来,SOA一直是标准的开发实践。 但是,在使用云计算时,SOA的足智多谋会受到质疑。 借助云,SOA缺乏可扩展性,并且随着工作请求的变化而变慢,从而限制了应用程序开发。
许多开发人员发现微服务是一种更细粒度的SOA方法。 SOA模型的支持者认为,微服务架构是SOA所需的自然演进,以适应云计算并满足对更快的软件开发周期的不断增长的需求。
其他人认为微服务是一种与平台无关的应用程序开发方法,因此应该有一个独特的名称。
具体可以了解这篇文章:https://blog.csdn.net/chszs/article/details/78515231

7:微服务和容器

     容器是一个单独的可执行软件包,包括独立运行所需的所有依赖关系。 容器与其周围的软件分开,许多容器可以在同一环境中使用。 在微服务架构中,每个服务在相同的环境下单独容器化,例如相同或相关的服务器。
虚拟机(VM)可用作容器的替代方案来创建微服务。 VM模拟计算机系统以产生物理计算机的功能。 每个服务都可能利用VM来托管预期的功能。 但是,由于每个VM需要单独的操作系统(OS)和其他开销,因此通常会为微服务避免使用VM。 容器的资源效率更高,因为只需要底层代码和相关的依赖关系来运行服务。

8:springcloud的版本介绍

     springbcloud版本通常对应开发代号,而不是数字代号:




     小伙伴们要看好springcloud版本对应的springboot版本哦。

     为了避免大家采坑我在这里统一一下实战的基本环境:

jdk:1.8
maven:3.3.9
IDEA 2017及以上
spring boot :1.5.x
springcloud :Dalston

     加入群聊一起学习springcloud:877750371

      如果有小伙伴觉得我写的不错的话可以关注一下我的博客,我会一直持续更新,也可以支持一下我的公众号哦:coldStone,主要会分享分布式系统相关的一系列技术,目前会推出springboot、springcloud和docker系列教程,后期会有关于中间件以及各个层面的性能优化的文章,同时还会分享一些赚钱理财的小套路哦,欢迎大家来支持,一起学习成长,程序员不仅仅是搬瓦工!


参考自:https://blog.csdn.net/wuxiaobingandbob/article/details/78642020?locationNum=1&fps=1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mindcarver

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值