微服务技术栈-认识微服务和第一个微服务Demo

文章目录

  • 前言
  • 一、认识微服务
  • 二、微服务技术栈
  • 三、Eureka注册中心
  • 四、微服务DEMO
    • 1、搭建eureka-server
    • 2、服务注册和服务发现
  • 总结


前言

随着业务的不断复杂,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构。
本章就从微服务架构演变开始讲起,并且介绍一系列微服务技术栈然后搭建一个自己的微服务demo。


一、认识微服务

单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署。
优点:架构简单且部署成本低,打包成一个war包放在类似tomcat的容器中就可以运行。
缺点:耦合度高(维护困难、升级困难)
在这里插入图片描述

分布式架构:根据业务功能对系统做拆分,每个业务功能模块作为独立项目开发,称为一个服务。
优点:降低服务耦合,每个服务都是一个独立的模块,容易升级和扩展。
缺点:服务调用关系错综复杂,增加了系统的复杂度。
在这里插入图片描述

分布式架构在服务拆分时需要考虑很多问题,例如:
服务拆分的粒度:一个项目要怎么进行拆分?拆分完的服务要怎么互相调用?不同服务的调用关系要怎么处理。

那么什么是微服务呢?微服务给分布式架构制定一个标准,进一步降低服务之间的耦合度,提供服务的独立性和灵活性。做到高内聚,低耦合。

微服务的架构特征:业务拆分粒度更小(单一职责),独立部署交付,每个服务对外提供统一标准接口,服务之间相互隔离。

SpringCloud是目前国内使用最广泛的微服务框架,集成了各种优秀微服务功能组件官网地址:https://spring.io/projects/spring-cloud


二、微服务技术栈

微服务技术栈不是只有SpringCloud,SpringClould仅仅是解决了服务拆分时的服务治理问题,一套完整的微服务技术栈应当包括如下:
在这里插入图片描述
1.服务网关:网关是介于客户端和服务器端之间的中间层,所有的外部请求都会先经过网关这一层,我们使用gateway这个网关技术,无缝衔接到基于spring cloud的微服务开发中来。
2.服务集群:由多个不同的服务组成。
3.注册中心:各微服务启动时,注册中心存储这些服务数据,目前主流的注册中心有Eureka和Nacos等。
4.配置中心:配置是用来动态修改程序执行的一种行为的机制。
5.分布式缓存:分布式缓存主要用于在高并发环境下,减轻数据库的压力,提高系统的响应速度和并发吞吐。
6.分布式搜索:常见的搜索引擎有Elasticsearch,实现了高可用的分布式集群搜索方案。
7.分布式日志服务:集中化的日志管理,分布式日志就是对大规模日志数据进行采集、追踪、处理。
8.消息队列:具有削峰、异步、解耦的作用,常见的有rabbitmq、rocketmq、kafka。
9.系统监控&链路追踪:掌控不同服务的情况,追踪服务之间的调用链路。

CI(持续集成)技术栈
1.Jenkins:Jenkins是一个用Java编写的开源的持续集成工具,Jenkins提供了软件开发的持续集成服务。
2.Docker:docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
3.K8s:在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。
4.Rancher:Rancher 是一个 Kubernetes 管理工具,让你能在任何地方和任何提供商上部署和运行集群。


三、Eureka注册中心

任何分布式架构都离不开服务的拆分,例如我们现在有一个小demo,现在拆分成以下两个服务。
1.order-service:订单微服务(订单相关业务),表里存有用户的id,需要调用user-service查询用户信息。
2.user-service:用户微服务,负责用户相关业务。
这两个服务都有各自的数据库,对外以Restful形式暴露接口。
在这里插入图片描述
在服务调用关系中,会有两个不同的角色:
服务提供者:一次业务中,被其它微服务调用的服务。(提供接口给其它微服务)
服务消费者:一次业务中,调用其它微服务的服务。(调用其它微服务提供的接口)

以上述demo为例,order-service就是服务的消费者,user-service就是服务的提供者。

注意:服务提供者与服务消费者的角色并不是绝对的,而是相对于业务而言。一个服务既可以是服务提供者,也可以是服务消费者。

了解完上述的demo后,我们会发现很多问题:
1.order-service在发起远程调用的时候,该如何得知user-service实例的ip地址和端口?
2.有多个user-service实例地址,order-service调用时该如何选择?
3.order-service如何得知某个user-service实例是否依然健康,是不是已经宕机

这些问题都需要利用SpringCloud中的注册中心来解决,其中最广为人知的注册中心就是Eureka。
在这里插入图片描述
了解并学习完Eureka的概念和作用后,上述问题便迎刃而解。
1.user-service服务实例启动后,将自己的信息注册到eureka-server(服务注册),同时保存服务名称到服务实例地址列表的映射关系,order-service会根据服务名称,拉取实例地址列表(服务拉取)。

2.order-service从实例列表中利用负载均衡算法选中一个实例地址,向该实例地址发起远程调用。

3.user-service会每隔一段时间(默认30秒)向eureka-server发起请求,报告自己状态,称为心跳(心跳检测机制)。当超过一定时间没有发送心跳时,eureka-server会认为微服务实例故障,将该实例从服务列表中剔除。后面当order-service拉取服务时,就能将故障实例排除了。


四、微服务DEMO

1、搭建eureka-server

1)在cloud-demo父工程下,创建一个子模块(eureka-server)。
2)在eureka-server子工程中引入eureka服务端依赖。

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

3)给eureka-server服务编写启动类,添加一个@EnableEurekaServer注解,开启eureka的注册中心功能。

package cn.itcast.eureka;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {public static void main(String[] args) {SpringApplication.run(EurekaApplication.class, args);}
}

4)编写配置文件,主要配置端口和服务名,以及eureka的地址

server:port: 10086
spring:application:name: eureka-server
eureka:client:service-url: defaultZone: http://127.0.0.1:10086/eureka

5)启动eureka微服务,直接浏览器访问http://127.0.0.1:10086
在这里插入图片描述

2、服务注册和服务发现

搭建完注册中心后,就需要把服务注册到注册中心上面去。现在我们将user-service和order-service注册到eureka-server中去。
1)引入依赖(服务发现、服务注册统一都封装在eureka-client依赖)

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

2)配置文件(在user-service和order-service中,修改application.yml文件,添加服务名称、eureka地址)

spring:application:name: userservice
eureka:client:service-url:defaultZone: http://127.0.0.1:10086/eureka

3)服务拉取和负载均衡(从eureka-server中拉取user-service服务的实例列表,并且实现负载均衡)

在order-service的OrderApplication中,给RestTemplate这个Bean添加一个@LoadBalanced注解:

(RestTemplate是Spring支持的一个 HTTP 请求工具,它提供了常见的REST请求方案的模版,例如GET请求、POST请求、PUT请求、DELETE请求)

@SpringBootApplication
public class OrderApplication {public static void main(String[] args) {SpringApplication.run(OrderApplication.class, args);}@Bean@LoadBalancedpublic RestTemplate restTemplate(){return  new RestTemplate();}
}

4)修改order-service服务访问user-service的url路径,用服务名代替ip、端口:

String url="http://userservice/user/"+order.getUserId()

spring会自动帮助我们从eureka-server端,根据userservice这个服务名称,获取实例列表,而后完成负载均衡。


总结

SpringCloud是微服务架构的一站式解决方案,集成了各种优秀微服务功能组件,同时要注意不能把微服务技术和SpringCloud画等号。在后续的文章中将介绍更多有关微服务技术栈的知识。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/147684.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

VD6283TX环境光传感器驱动开发(1)----获取ID

VD6283TX环境光传感器驱动开发----1.获取ID 概述视频教学样品申请源码下载模块参数IIC接线方式设备ID生成STM32CUBEMX串口配置 IIC配置串口重定向模块地址获取ID主函数结果演示 概述 环境光传感器是一种光电探测器&#xff0c;能够将光转换为电压或者电流&#xff0c;使用多光…

计算机网络常见面试题

梳理计算机网络相关的面试题&#xff0c;相关知识结构主要参考谢希仁老师的《计算机网络&#xff08;第五版&#xff09;》一书&#xff0c;并整理互联网上常见面试题。 计算机网络性能指标 性能指标从不同的方面来度量计算机网络的性能。下面介绍常用的七个性能指标。 1、速…

23-properties文件和xml文件以及dom4j的基本使用操作

特殊文件 我们利用这些特殊文件来存放我们 java 中的数据信息&#xff0c;当数据量比较大的时候&#xff0c;我们可以利用这个文件对数据进行快速的赋值 对于多个用户数据的存储的时候我们要用这个XML来进行存储 关于这些特殊文件&#xff0c;我们主要学什么 了解他们的特点&…

华为云云耀云服务器L实例评测 | 实例使用教学之软件安装:华为云云耀云服务器环境下安装 Docker

华为云云耀云服务器L实例评测 &#xff5c; 实例使用教学之软件安装&#xff1a;华为云云耀云服务器环境下安装 Docker 介绍华为云云耀云服务器 华为云云耀云服务器 &#xff08;目前已经全新升级为 华为云云耀云服务器L实例&#xff09; 华为云云耀云服务器是什么华为云云耀云…

想要精通算法和SQL的成长之路 - 验证二叉搜索树和不同的二叉搜索树

想要精通算法和SQL的成长之路 - 验证二叉搜索树和不同的二叉搜索树 前言一. 验证二叉搜索树二. 不同的二叉搜索树三. 不同的二叉搜索树II 前言 想要精通算法和SQL的成长之路 - 系列导航 二叉搜索树的定义&#xff1a; 节点的左子树只包含 小于 当前节点的数。节点的右子树只包…

【前段基础入门之】=>CSS浮动

浮动的简介 在最初&#xff0c;浮动是用来实现文字环绕图片效果的&#xff0c;现在浮动是主流的页面布局方式之一。 元素浮动后的特点 &#x1f922; 脱离文档流。&#x1f60a; 不管浮动前是什么元素&#xff0c;浮动后&#xff1a;默认宽与高都是被内容撑开&#xff08;尽…

GRACE-FO L2产品的发布说明 - 版本UTCSR RL-06.1产品

数据更新日期&#xff1a;2023-5-11 0&#xff09;此说明取代了所有先前与UTCSR-RL06.1 GRACE-FO Level-2产品相关的旧版本发布说明。 1&#xff09;截止到本发布说明日期的GRACE-FO RL-06.1产品文件列表如下&#xff1a; 2&#xff09;通常情况下&#xff0c;每个日历月有四…

游戏逆向中的 NoClip 手段和安全应对方式

文章目录 墙壁边界寻找碰撞 NoClip 是一种典型的黑客行为&#xff0c;允许你穿过墙壁&#xff0c;所以 NoClip 又可以认为是避免碰撞体积的行为 墙壁边界 游戏中设置了碰撞体作为墙壁边界&#xff0c;是 玩家对象 和墙壁发生了碰撞&#xff0c;而不是 相机 玩家对象有他的 X…

从 0 到 1 ,手把手教你编写《消息队列》项目(Java实现) —— 核心类持久化存储

文章目录 一、持久化存储的方式与路径二、公共模块序列化 / 反序列化异常规定 三、持久化存储数据库数据管理文件数据管理读写规定新增 /删除规定内存中 Message 的规定存储规定代码编写 硬盘数据管理 一、持久化存储的方式与路径 交换机,队列,绑定关系,这些我们使用数据库来管…

警用装备管理系统|智装备DW-S304的主要功能

东识科技&#xff08;DONWIT&#xff09;警用装备管理系统DW-S304是依托互3D技术、云计算、大数据、RFID技术、数据库技术、AI、视频分析技术对RFID智能仓库进行统一管理、分析的信息化、智能化、规范化的系统。 在国外很早开始便使用警用装备管理系统对警用装备的管理使用进行…

Explain执行计划字段解释说明---select_type、table、patitions字段说明

1、select_type的类型有哪些 2、select_type的查询类型说明 1、SIMPLE 简单的 select 查询,查询中不包含子查询或者UNION 2、PRIMARY 查询中若包含任何复杂的子部分&#xff0c;最外层查询则被标记为Primary 3、DERIVED 在FROM列表中包含的子查询被标记为DERIVED(衍生)&…

基于ssm的互联网废品回收/基于web的废品资源利用系统

摘 要 本毕业设计的内容是设计并且实现一个基于SSM框架的互联网废品回收。它是在Windows下&#xff0c;以MYSQL为数据库开发平台&#xff0c;Tomcat网络信息服务作为应用服务器。互联网废品回收的功能已基本实现&#xff0c;主要包括用户、回收员、物品分类、回收物品、用户下单…

【Python 基础 2023 最新】第七课 Pandas

【Python 基础 2022 最新】第七课 Pandas 概述Pandas 是什么?Pandas 的应用场景安装 Pandas Pandas 数据结构Series 数组什么是 Series?Series 创建 Series 数组操作数据检索数据修改过滤Series 数组运算总结 什么是 DataFrameDataFrame 创建 DataFrame 操作数据检索筛选数据…

决策树C4.5算法的技术深度剖析、实战解读

目录 一、简介决策树&#xff08;Decision Tree&#xff09;例子&#xff1a; 信息熵&#xff08;Information Entropy&#xff09;与信息增益&#xff08;Information Gain&#xff09;例子&#xff1a; 信息增益比&#xff08;Gain Ratio&#xff09;例子&#xff1a; 二、算…

密码技术 (6) - 证书

一. 前言 前面介绍的公钥密码和数字签名&#xff0c;都无法解决一个问题&#xff0c;那就是判断自己获取的公钥是否期望的&#xff0c;不能确定公钥是否被中间攻击人掉包。所以&#xff0c;证书的作用是用来证明公钥是否合法的。本文介绍的证书就是解决证书的可靠性的技术。 二…

最新反编译小程序教程(支持分包一键反编译),反编译成功率高达99%

最新反编译小程序教程&#xff08;支持分包一键反编译&#xff09;&#xff0c;反编译成功率高达99% 优点&#xff1a; 1.支持多个分包以及主包一次性反编译&#xff1b; 2.使用wxappUnpacker无法进行解析的小程序包&#xff0c;一键反编译解析&#xff08;咱没有发现反编译失败…

使用ExLlamaV2在消费级GPU上运行Llama2 70B

Llama 2模型中最大也是最好的模型有700亿个参数。一个fp16参数的大小为2字节。加载Llama 270b需要140 GB内存(700亿* 2字节)。 只要我们的内存够大&#xff0c;我们就可以在CPU上运行上运行Llama 2 70B。但是CPU的推理速度非常的慢&#xff0c;虽然能够运行&#xff0c;速度我…

正点原子嵌入式linux驱动开发——TF-A移植

经过了之前的学习&#xff0c;除了TF-A的详细启动流程仍待更新&#xff0c;TF-A的使用和其对应的大致启动流程已经进行过了学习。但是当我们实际做产品时&#xff0c;硬件平台肯定会和ST官方的有区别&#xff0c;比如DDR容量会改变&#xff0c;自己的硬件没有使用到官方EVK开发…

[ruby on rails] postgres sql explain 优化

一、查看执行计划 sql User.all.to_sql # 不会实际执行查询 puts ActiveRecord::Base.connection.explain(sql)# 会实际执行查询&#xff0c;再列出计划 User.all.explain# 会实际执行查询&#xff0c;再列出计划 ActiveRecord::Base.connection.execute(EXPLAIN (ANALYZE, V…

EM聚类(下):用EM算法对王者荣耀英雄进行划分

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ &#x1f434;作者&#xff1a;秋无之地 &#x1f434;简介&#xff1a;CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作&#xff0c;主要擅长领域有&#xff1a;爬虫、后端、大数据…