spring-boot 学习笔记一:微服务和spring-boot

spring-boot 学习笔记一:微服务和spring-boot

  • 什么是微服务?
    • 微服务
  • spring-boot为什么适合开发微服务
    • spring-boot是什麽?
    • spring-boot的部分优点
    • spring-boot、spring、springMvc区别
    • spring-boot与微服务
  • 参考文章

什么是微服务?

微服务

在学习之前首先了解一下什么是微服务,以及spring-boot和微服务之间的关系

  1. 微服务简介:

    微服务(Microservice)是一种软件架构的风格,它是以专注于单一责任与功能的小型功能模块为基础,利用模块化的方式组合出复杂的大型应用程序,各功能模块使用于语言无关的API集相互通信。也就是说,微服务是将单体的应用程序依照业务功能为主进行组件化,组件与组件之间有明显的边界,但有相互联系。组件与组件之间可以使用不同的编程语言,不受编程语言的限制。

    2014年,Martin Fowler 与 James Lewis 共同提出了微服务的概念,定义了微服务是由以单体应用程序构成的小服务,自己拥有自己的行程与轻量化处理,服务依业务功能设计,以全自动的方式部署,与其他服务使用 HTTP API 通信。同时服务会使用最小的规模的集中管理 (例如 Docker) 能力,服务可以用不同的编程语言与数据库等组件实现。

    微服务的另一个对比是单体式应用程序。单体式应用表示一个应用程序内包含了所有需要的业务功能,并且使用像主从式架构 (Client/Server) 或是多层次架构 (N-tier) 实现,虽然它也是能以分布式应用程序来实现,但是在单体式应用内,每一个业务功能是不可分割的。若要对单体式应用进行扩展则必须将整个应用程序都放到新的运算资源(如:虚拟机) 内,但事实上应用程序中最吃资源、需要运算资源的仅有某个业务部分(例如跑分析报表或是数学算法分析),但因为单体式应用无法分割该部分,因此无形中会有大量的资源浪费的现象。

    有兴趣的小伙伴可去阅读一下Martin Fowler的Microservices这篇文章里面详细介绍了微服务的理念和微服务与单体应用的区别。

  2. 微服务架构的好处

    个人来说有下面4条,其他具体的好处需要在开发中慢慢体会:

    1. 每个微服务组件都是简单灵活的,能够独立部署。
    2. 微服务之间是松耦合的,微服务内部是高内聚的,使得每个微服务容易按需拓展。
    3. 微服务架构与语言工具无关性,卡发人员可以自由选择语言和工具,更加高效的完成语言目标。
  3. 微服务应用的4个设计原则

    1. AKF拆分原则

      AKF扩展立方体,是一个叫AKF的公司的技术专家抽象总结的应用扩展的三个维度。理论上按照这三个扩展模式,可以将一个单体系统,进行无限扩展。
      X 轴 :指的是水平复制,很好理解,就是讲单体系统多运行几个实例,做个集群加负载均衡的模式。
      Z 轴 :是基于类似的数据分区,比如一个互联网打车应用突然或了,用户量激增,集群模式撑不住了,那就按照用户请求的地区进行数据分区,北京、上海、四川等多建几个集群。
      Y 轴 :就是我们所说的微服务的拆分模式,就是基于不同的业务拆分。

    2. 前后端分离

      前后端分离原则,简单来讲就是前端和后端的代码分离也就是技术上做分离,我们推荐的模式是最好直接采用物理分离的方式部署,进一步促使进行更彻底的分离。不要继续以前的服务端模板技术,比如JSP ,把Java JS HTML CSS 都堆到一个页面里,稍复杂的页面就无法维护。这种分离模式的方式有几个好处:
      前后端技术分离,可以由各自的专家来对各自的领域进行优化,这样前端的用户体验优化效果会更好。
      分离模式下,前后端交互界面更加清晰,就剩下了接口和模型,后端的接口简洁明了,更容易维护。
      前端多渠道集成场景更容易实现,后端服务无需变更,采用统一的数据和模型,可以支撑前端的web UI 移动App等访问。

    3. 无状态服务

      对于无状态服务,首先说一下什么是状态:如果一个数据需要被多个服务共享,才能完成一笔交易,那么这个数据被称为状态。进而依赖这个“状态”数据的服务被称为有状态服务,反之称为无状态服务。
      那么这个无状态服务原则并不是说在微服务架构里就不允许存在状态,表达的真实意思是要把有状态的业务服务改变为无状态的计算类服务,那么状态数据也就相应的迁移到对应的“有状态数据服务”中。

    4. Restful通信风格

      作为一个原则来讲本来应该是个“无状态通信原则”,在这里我们直接推荐一个实践优选的Restful 通信风格 ,因为他有很多好处:
      无状态协议HTTP,具备先天优势,扩展能力很强。例如需要安全加密是,有现成的成熟方案HTTPS可用。
      JSON 报文序列化,轻量简单,人与机器均可读,学习成本低,搜索引擎友好。
      语言无关,各大热门语言都提供成熟的Restful API框架,相对其他的一些RPC框架生态更完善。
      当然在有些特殊业务场景下,也需要采用其他的RPC框架,如thrift、avro-rpc、grpc。但绝大多数情况下Restful就足够用了。

spring-boot为什么适合开发微服务

首先来说微服务和spring-boot本质上是没有任何联系的,那末国内为什么多数人使用spring-boot开发微服务呢?

spring-boot是什麽?

spring-boot是为了简化spring应用的初始搭建以及开发过程使用特定的方式来进行配置,创立独立的spring引用程序main方法运行,内嵌了tomcat,无需部署war文件。同时简化了maven配置。采用约定大于配置的方式,去繁从简。just run就能创建一个独立的,产品级别的应用。基础上没有应用新的东西。使得项目搭建、开发、部署便的简单。

spring-boot的部分优点

  1. 快速创建独立运行的spring项目和主流框架的集成。
  2. 使用内嵌servlet容器,开发的应用无需打包成war包
  3. 启动器(starter)自动依赖和版本控制。
  4. 大量的自动化配置,简化了开发
  5. 准生产环境的运行应用监控
  6. 与云计算的天然集成。

spring-boot、spring、springMvc区别

springFrame最重要的特征就是依赖注入。开发过程中使用DI或IOC可以在一定程度上开发松耦合的应用。

springMvc提供的是一种分离是的方法来开发web应用。使用DispatcherServlet、ModlAndView等一些简单的概念简化web应用的开发。

spring-boot原则上是没有引入新的技术概念的,只是通过自动配置等,解决了springFrame、springMvc存在的大量配置的问题。

spring-boot与微服务

微服务从业务层面对项目进行分割,注重项目粒度的划分,这也意味着一个项目将会被分成很多个子项目。但组件化开发在部署和运维上存在了一些问题。

利用Spring-Boot做为微服务的开发框架,使得编码、配置、部署、监控变得简单。同时spring-boot启动器的概念,我个人认为也是现在开发微服务的一个重要的因素。

本文章只是为了个人学习使用,欢迎各位指出其中的错误。
感谢郝炎峰、Mr.Hong。如果有侵权,请与我联系

参考文章

Microservices

微服务的4个设计原则和19个解决方案

维基百科

SpringBoot为什么适合做微服务开发?

你可能感兴趣的:(学习笔记)