微服务是什么?
微服务架构是一种架构模式或者说一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行在其独立的进程中,服务之间互相协调、互相配合,为用户提供最终的价值。
微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底去掉耦合,每一个微服务提供单个业务功能,一个服务只做一件事。
从技术角度讲就是一种小而独立的处理过程,类似与进程的概念,能够自行单独启动或销毁,可以拥有自己独立的数据库。
相当于把原来的一个大进程拆分成了多个小进程。
微服务优点:
1.每个服务足够内聚,足够小,代码容易理解。这样能聚焦一个业务功能或业务需求。
2.开发简单、开发效率提高,一个服务可能就是专业的只干一件事,微服务能够被小团队单独开发,这个小团队可以是2到5人的开发人员组成。
3.微服务是松耦合的,是有功能意义的服务,无论是在开发阶段或部署阶段都是独立的。
4.微服务能使用不同的语言开发。
5.易于和第三方集成(如支付),微服务运行容易且灵活的方式集成自动部署。
6.微服务易于被一个开发人员理解、修改和维护,这样小团队能够更关注自己的工作成果,无需通过合作才能体现价值。
7.微服务允许你利用融合最新技术。微服务只是业务逻辑的代码,不会和HTML/CSS或其他界面组件混合,即前后端分离。
8.每个微服务都有自己的存储能力,可以有自己的数据库,也可以有统一数据库。
微服务的缺点:
1.开发人员要处理分布式系统的复杂性。
技术架构演变
(1)单一应用架构
当网站流量很小时,只需要一个应用,所有功能部署在一起,减少部署节点成本的框架称之为集中式框架。
传统架构其实就是SSH或SSM,属于单点应用,把整个业务模块都会在一个项目进行开发,分为MVC架构,会拆分成控制层、业务逻辑层、数据库访问层(持久层)。
缺点:耦合度太高,一旦某个模块导致服务不可用,可能会影响到其他模块。
(2)垂直应用架构
当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。
(3)分布式服务架构
分布式架构是基于传统架构演变过来的,将传统的项目以项目模块拆分成多个子项目,比如:
拆分会员项目、订单项目、支付项目、优惠券项目等,每个项目都有自己的独立数据库,独立redis等。
优点:
1、把模块拆分,使用接口通信,降低模块之间的耦合度。
2、把项目拆分成若干个子项目,不同的团队负责不同的子项目。
3、增加功能时只需要再增加一个子项目,调用其他系统的接口就可以。
4、可以灵活的进行分布式部署。
(并发量太大的话就要使用缓存(memcached、radis等))
缺点:
系统之间交互需要使用远程通信,接口开发增加工作量。
(4)面向服务(SOA)架构
SOA架构代表面向服务架构,俗称服务化。通俗的理解为面向于业务逻辑层开发,将共同的业务逻辑抽取出来形成的一个服务。提供给其他服务接口进行调用,服务于服务之间调用使用rpc远程技术—Dubbo。
微服务架构
微服务架构是从SOA架构中演变过来的,比SOA架构上的粒度更加精细。让专业的人做专业的事情,目的就是为了提高效率。每个服务之间互相不受影响,每个服务必须独立部署(独立数据库、独立Redis等),微服务架构更加轻量级,采用restful风格提供的API,也就是使用HTTP协议+json格式进行传输,更加轻巧,更加适用于互联网公司敏捷开发、快速迭代产品。
微服务架构如何拆分:
1、微服务把每一个职责,单一功能存放在独立服务器中。
2、每个服务运行在单独进程中,能够单独启动或销毁。
3、每个服务有自己独立的数据库存储,实际上有自己独立的缓存、数据库、消息队列等资源。
微服务架构与SOA架构的区别
(1)、微服务架构基于SOA架构演变过来,继承SOA架构的优点,在微服务架构中去除SOA架构中的ESB消息总线,采用http+json(restful)进行传输。
(2)、微服务架构对比SOA架构粒度会更加精细,让专业的人干专业的事情,目的是为了提高效率,每个服务于服务之间互不影响。在微服务架构中,每个服务必须独立部署,微服务架构更加轻巧、轻量。
(3)、SOA架构中可能数据库存储会发生共享,微服务强调每个服务都有独立数据库,保证每个服务于服务之间互不影响。
(4)、项目体现特征,微服务架构比SOA架构更加适合于互联网公司的敏捷开发、快速迭代版本。
微服务 Spring Boot Spring Cloud 三者之间的关系
微服务是一种架构的理念,提出了微服务的设计原则,从理论为具体的技术落地提供了指导思想。
Spring Boot 是一套快速配置脚手架,可以基于 Spring Boot 快速开发单个微服务。
Spring Cloud 是一个基于 Spring Boot 实现的服务治理工具包;
Spring Boot 专注于快速、方便集成的单个微服务个体;
Spring Cloud 关注全局的服务治理框架。