当前位置: 首页 > news >正文

(一)认识微服务

1. 什么是微服务

微服务是分布式架构的一种。

1.1 微服务技术 != Spring Cloud

分布式架构就是要把服务进行拆分,拆分的过程会产生一系列问题需要解决,而Spirng Cloud 只是解决了服务拆分的过程中的服务治理问题,所以一个完整的微服务包含的不只是Spring Cloud。

1.2 微服务技术栈的具体内容

  1. 传统的单体架构中所有的服务都耦合在一起,随着业务的发展,后续的升级维护会变得越来越困难,所以一些大型项目都要进行拆分。
  2. 微服务会根据业务功能模块把一个单体的项目拆分成许多个独立的项目,每个项目完成一部分业务功能,后续进行独立和部署,这样的一个项目称为一个服务。通常每个项目会包含成百上千的服务,形成一个服务集群。
  3. 一个业务往往需要多个服务之间相互调用来共同完成。当业务越来越多越复杂时,这些服务之间的调用关系也越来越复杂。
  4. 为了解决复杂的调用关系,微服务中引入了注册中心这个组件。注册中心可以记录微服务中每一个服务的IP、端口以及功能等其他信息。此时,当一个服务需要调用另一个服务时,它不需要记录对方的IP,直接去注册中心就行了,从注册中心拉取对方的服务信息。
  5. 为了解决种多服务的配置文件的管理问题,微服务中引入了配置中心这个组件。配置中心可以统一的管理整个服务集群里所有的服务的配置,如果有配置信息需要变更,只需要找配置中心就行了,配置中心会通知相关的服务实现配置的热更新。
  6. 为了解决用户对服务的访问问题,微服务引入了服务网关这个组件。服务网关一方面对用户身份做校验另一方面可以把用户的请求路由到具体的服务,并且在路由的过程中还可以做负载均衡。服务接收到用户请求之后访问数据库集群,完成相关服务。
  7. 为了解决高并发访问对数据库集群带来的压力,微服务中引入了分布式缓存。缓存就是把数据库中的数据放到内存当中,内存的查询效率比内存效率更高。用户请求先到分布式缓存中,如果未命中再到数据库中查询。
  8. 简单查询可以走缓存,为了解决海量数据的复杂搜索、统计和分析问题,微服务中引入了分布式搜索功能。从此数据库主要负责数据的写操作,还有一些事务类型的,对数据安全要求较高的数据存储。
  9. 微服务中各个服务相互调用的过程中整个业务的调用链路会很长,业务的执行时长是每个服务执行时长之和,性能会有所下降。为了解决这个问题,微服务中引入了实现异步通信的消息队列组件,请求来了先调用服务A,服务A不在直接去调用并等待服务B,而是通知服务B去执行,然后服务A就执行结束了,这样整个调用链路就变短了,响应时间也变短了,服务集群的业务吞吐能力也变强了。异步通信可以大大提高服务的并发。
  10. 众多的服务使得异常的排查变得十分困难,为了解决这个问题,微服务引入了分布式日志服务组件和系统监控链路追踪这两个组件,分布式服务日志可以统计整个服务集群中的运行日志,进行统一存储、统计和分析,便于后期异常的定位和排查。系统监控链路追踪可以实时监控整个服务集群中每个服务节点的运行状态、CPU的负载、内存的占用等信息,一旦出现问题可以直接定位到具体的某一个方法、栈信息等。
  11. 为了解决众多服务的部署问题,引入了持续集成的概念:利用JenKins这样的工具进行自动化部署,JenKins可以对这些微服务进行自动化编译,然后基于Docker进行打包形成镜像,再基于Kubernetes或Rancher实现自动化部署

2. 微服务技术栈的大致分类

2.1 微服务治理

主要是Spring Cloud所包含的内容:

  1. 注册发现
  2. 远程调用
  3. 负载均衡
  4. 配置管理
  5. 网关路由
  6. 系统包含
  7. 流量控制
  8. 服务授权
  9. 熔断降级
  10. 分布式事务
  11. TCC模型
  12. AT模型
  13. Seate

2.2 缓存技术

  1. SpirngDataRedis
  2. 缓存穿透、雪崩
  3. Redis主从复制
  4. OpenResty
  5. 缓存数据同步
  6. Nginx本地缓存
  7. Redis持久化
  8. 多级缓存分层
  9. Redis分片集群
  10. Lua脚本
  11. Redis数据结构

2.3 异步通信技术

  1. MQ消息模型
  2. SpringAMQP
  3. 消息堆积
  4. 消息可靠性
  5. 仲裁队列
  6. 延迟队列
  7. 镜像集群
  8. 数据持久化

2.4 分布式搜索技术

  1. DSL语句
  2. RestAPI
  3. ES集群
  4. 集群脑裂
  5. 竞价排名
  6. 聚合统计
  7. 自动补全
  8. 地理坐标
  9. 拼音分词

2.5 DevOps(持续继承)

  1. Dockerfile
  2. DokcerCompose
  3. GrayLog
  4. Jenkins
  5. SkyWalking
  6. Docker使用
  7. Kubernetes

相关文章:

  • Spring Boot 使用 Redis
  • web3 token 如何理解
  • Hides for Mac:应用程序隐藏工具
  • 代码随想录day45:单调栈篇
  • docker:can’t create unix socket /var/run/docker.sock: is a directory
  • 一个执照可以注册几个微信视频号,几个抖音视频号!
  • 【送书福利第六期】:《AI绘画教程:Midjourney使用方法与技巧从入门到精通》
  • 大话设计模式之工厂模式
  • ubuntu常用记录
  • 第10讲:操作符详解
  • 2024年大广赛联通沃派命题解析:赛题内容一览
  • Webpack生成企业站静态页面 - 项目搭建
  • 代码学习记录31---动态规划开始
  • 基于RIP的MGRE综合实验
  • 启信宝商业大数据助力全国经济普查
  • 收藏网友的 源程序下载网
  • input的行数自动增减
  • JAVA 学习IO流
  • JS笔记四:作用域、变量(函数)提升
  • MD5加密原理解析及OC版原理实现
  • Otto开发初探——微服务依赖管理新利器
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 开源地图数据可视化库——mapnik
  • 离散点最小(凸)包围边界查找
  • 前端存储 - localStorage
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 我感觉这是史上最牛的防sql注入方法类
  • 小而合理的前端理论:rscss和rsjs
  • 再谈express与koa的对比
  • 昨天1024程序员节,我故意写了个死循环~
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • #100天计划# 2013年9月29日
  • #Linux(权限管理)
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (5)STL算法之复制
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • .NET面试题解析(11)-SQL语言基础及数据库基本原理
  • .net中应用SQL缓存(实例使用)
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • [Android] Amazon 的 android 音视频开发文档
  • [Arduino学习] ESP8266读取DHT11数字温湿度传感器数据
  • [C# WPF] 如何给控件添加边框(Border)?
  • [C++核心编程](四):类和对象——封装
  • [cb]UIGrid+UIStretch的自适应
  • [CSS]盒子模型
  • [C语言]一维数组二维数组的大小
  • [Docker]四.Docker部署nodejs项目,部署Mysql,部署Redis,部署Mongodb
  • [Hadoop in China 2011] Hadoop之上 中国移动“大云”系统解析
  • [HNOI2006]鬼谷子的钱袋
  • [JavaScript]_[初级]_[关于forof或者for...of循环语句的用法]
  • [Linux]如何理解kernel、shell、bash