1.什么是微服务
在微服务概念形成之前,绝大部分基于Web的应用都是使用单体架构的风格来进行的。在单体架构中,所有的UI(用户接口)、业务、数据库访问逻辑都被打包在一个应用程序中部署在一个服务器上。但是并不一定是同一个团队开发这个程序,它可能涉及多个团队的合作,他们所有的工作都被同步到单一的代码库中。随着应用的规模越来越大,团队之间沟通合作成本越来越大,某个团队修改代码都会造成整个程序的重新构建测试和部署。
微服务通过将大型代码分解成小型的精确定义的部分,微服务是一种思想:分解和分离程序的功能,使他们完全彼此独立。每个功能团队完全拥有自己的服务代码和服务基础设施,可以独立的构建部署和测试。
2.什么是spring
spring是标准开发框架,核心建立在依赖注入的概念。在普通的java程序中,应用程序被分解成类,在代码中直接调用类的构造器形成类与类之间的联系,这种联系很脆弱,而且修改时往往牵一发而动全身。依赖注入框架,允许用户通过约定(和注解)将应用程序对象之间的关系外部化,而不是在对象内部彼此硬编码实例化代码。
spring框架能够与时俱进并进行自我改造,springBoot是对spring框架理念重新思考的结果。springBoot包含了spring的核心特性,提供了一个基于java的、面向REST(REST核心概念是:服务使用http(GET、POST、PUT、DELETE)来代表服务的核心操作,并且使用轻量级的面向web的数据序列化协议(如JSON)来从服务请求数据和从服务接收数据)服务的微服务框架。开发者借助一些简单的注解,就可以快速构建一个可打包和部署的REST微服务。而SpringCloud就是一个框架的集合,它在一个公共的框架之下封装了多个流行的云管理微服务框架,并且让这些技术的使用和部署像为代码添加注解一样便捷。
3.使用springBoot构建微服务
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
package com.example.demo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/study")
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "hello";
}
}
springBoot微服务将会如何处理用户请求的一般流程:
4.为什么要用微服务
随着互联网的高速发展,全球客户群体开始庞大:
复杂性上升:应用程序不仅要与多个公司内部的服务和数据库进行通讯,还要与外部服务提供商的服务
和数据库进行通讯。
更快的交付:软件的更新不希望是一年一次整体版本更新,而是功能被拆分,以便在几周内发布新功能。
程序的稳定性:某个部分的故障不应该导致整个程序崩溃。
分解成小型服务后:
灵活性:可以将解耦的服务进行组合和重新安排,以快速交付新功能。
有弹性:故障可以限制在应用程序的一小部分中,并在整个程序中断之前进行控制。
可伸缩性:解耦的服务可以跨多个服务器水平分布,从而可以对功能进行伸缩。
5.微服务要考虑诸多问题
1.如何管理物理位置,以便在不影响服务客户端的情况下添加和删除服务实例?
2.服务出现问题时,如何确保服务客户端的快速失效?
3.如何确保每次启动新的服务实例时,新服务实例始终具有与现有实例相同的代码和配置?
4.如何保证程序能以服务之间依赖的最小关系进行伸缩,优雅的扩展服务?
服务粒度
通信协议
接口设计
服务的配置和管理
服务之间的事件处理
6.springBoot
springBoot是实现微服务使用的核心技术,大大简化了微服务的开发。
7.springCloud
springCloud config 通过集中式服务来处理应用程序配置数据的管理,因此应用程序配置数据与部署的微服务完全分离。这确保了,无论启动多少个微服务实例,这些微服务都有相同的配置。
springCloud服务发现,开发者可以从客户端消费的服务中抽象出部署服务器的物理位置。服务消费者可以通过逻辑名称而不是物理位置来调用服务器的业务逻辑。可以使用Consul和Eureka作为服务发现引擎。