基础篇:01-微服务概述

news2024/11/26 23:49:03

1.单体应用与微服务架构区别

如上图左侧为单体应用架构。在传统单体应用中,所有功能模块都在一个工程中编码、部署,即使是集群部署,也只是单体应用的水平复制。

如上图右侧为微服务架构。在微服务架构的项目中,每个应用会按照领域模型划分进行业务、功能聚合,由此拆分后聚合的应用往往:模型高度统一、职责清晰且收敛、应用与应用(领域与领域)之间边界清晰,并且提升了每个应用的独立性、扩展性。

除了应用拆分维度,微服务架构也保证了每个应用可以使用独立语言开发、独立数据存储技术,只要能保持对外统一交互语言即可,存储模型差异如下:

见上图,应用拆分之后对应每个应用会独立、或共享一个数据库,数据库的拆分维度除了要考虑领域边界,还要更多的考虑每个数据库的QPS、TPS,避免高频写操作集中在一个DB,由此起到给数据库减压的功效。

基于上述分析,单体架构存在的问题主要集中在:功能混淆、边界模糊、维护成本高、可靠性差等角度,对于后续应用的升级、扩展同样存在瓶颈。因此随着互联网的发展,我们必须解决上述问题,而微服务就是这样一种架构模式。

2.什么是微服务

自2014年起,微服务架构由Martin Fowler、Adrain Cockcroft、Neal Ford等人接力进行介绍、完善、演进、实践后,一直维持着较高的热度直到现在,内容如下:

微服务架构是一种架构模式,它提倡将原本独立的单体应用,拆分成多个小型服务。这些小型服务各自独立运行,服务与服务间的通信采用轻量级通信机制(一般是基于HTTP协议的RESTful API),达到互相协调、互相配合的目的。被拆分后的服务都围绕着具体的业务进行构建,每个服务都能独立地进行开发、部署、扩展。由于相互独立,且采用轻量级通信机制,各个小型服务也能够使用不同的语言开发,也可以使用不同的数据存储技术。

微服务是一套经过漫长的架构演进、良好架构设计的分布式架构方案。从传统单体应用到分布式独立应用,从应用数据服务到引入缓存优化性能,从反向代理和CDN加速网站响应等等,技术架构不断演进的过程中,逐步出现前后端分离,数据读写分离,云原生、DDD领域驱动,最终孵化出如SpringCloud、SpringCloud Alibaba等成熟稳定的微服务架构方案。

微服务其主要特征:

  • 服务自治:团队独立、技术独立、数据独立、部署独立
  • 面向服务:微服务对外暴露业务接口,如RESTful API调用
  • 单一职责:每个应用领域边界清晰,功能职责单一,无重复工作

3.微服务优缺点

3.1 优点

①易于开发维护

微服务基于领域模型拆分的应用,其内部模型高度统一,功能相对内聚,开发人员只需要对固定模型进行领域业务接口封装即可。

②技术栈开放

微服务因独立部署、独立开发,因此开发团队可以根据资深团队特点进行技术选型。如团队擅长关系型数据库则MySQL,擅长图形计算则Neo4j。

③升级错误隔离

A技术专项升级因单独部署,不再影响整个分布式架构中全部功能,只影响有接口交互的部分应用,而这种应用也可以通过灰度、服务降级、服务熔断的方式兼容和处理,不会因一个错误导致整个应用瘫痪。

3.2 缺点

①运维成本高

更多的服务意味着更多的运维投入,传统应用中只有一个应用,而为服务中,需要保障几十、上百个服务的正常运行和协作。

②调用链路复杂

微服务架构中,不可避免的会出现A服务依赖B服务,B服务依赖C服务,C继续依赖D服务的场景,一旦A调用异常,排查链路可能会从A->B->C->D,才能最终发现服务报错具体信息(后续skywalking可解决)。

③分布式事务问题

同上例A->B->C->D的长链路调用过程中,如果A先修改自己数据,但下游C却异常,此时预期是A回滚自己事务,这一点在单体应用因都是本地事务可以很好做到,但是分布式场景下却提升了复杂度(后续Seata可解决)。

④学习成本高

微服务学习除了需要一定基础之外:Spring、SpringMvc、MyBatis、SpringBoot、Maven、MySQL等,还需学习SpringCloud,中间件、缓存、Docker、文件服务器等多种技术,每一门学习都有很多难点需要克服。

4.如何实现微服务架构

至此我们了解了微服务的定义、优缺点,还总结了一些指导性的原则,下面我们进一步探讨下,如何实现微服务架构。

4.1 技术选型

1.开发框架

可使用SpringCloud作为微服务开发框架,因为SpringCloud为微服务架构提供了完整的解决方案,同时文档丰富,社区活跃,如下:

当然借助于SpringBoot+Nacos+Dubbo等其他技术架构也可以实现微服务架构,但因SpringCloud丰富且完整的解决方案体系,作为新手学习笔者在此更推荐依此学习,此学习过程中涉及的理论在今后的工作中也一定大有帮助。

2.运行平台

微服务并不绑定运行平台,将微服务部署在PC server、阿里云、AWS等云计算平台都是可以的。出于轻量、灵活、应用支撑及现在市场主流部署模式,笔者选择Docker作为部署容器。

4.2 通用微服务技术架构图

物理部署图、技术架构图、业务架构图、领域模型图、E-R图各自是什么?如何画?请移步:链接

5.总结

本文介绍了微服务基本概念、演变过程,主要的原则及优缺点,最后谈到了微服务的实现方案之一,作为引文此章节偏理论知识一些。后续笔者将借助具体技术实现带领读者一起逐步实现微服务架构体系。


思考问题

  • 什么是微服务?
  • 什么是微服务架构?
  • 微服务架构演进过程?

6.推荐阅读资料

  • 📎领域驱动设计:软件核心复杂性应对之道.pdf
  • 📎大话设计模式.pdf

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

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

相关文章

浅谈保护数据的加密策略

加密是一种将信息从可读格式转换为混乱字符串的技术。这样做可以防止数据传输中的机密数据泄露。文档、文件、消息和所有其他形式的网络通信都可以加密。加密策略和身份验证服务的结合,还能保障企业机密信息只对授权用户开启访问权限。常见的数据加密包括以下两种&a…

定期备份日志并发送至存储服务器指定路径脚本

根据需求编写一个日志定时备份并发送至存储服务器的脚本定期把三天前的日志文件备份,打包发送至日志备份服务器指定目录(修改对应路径拿走即用)vim qingli.sh#!/bin/bash#定义星期几week$(date |awk NR1{print $4})num${week}#日志源目录log&…

Android MVI框架搭建与使用

MVI框架搭建与使用前言正文一、创建项目① 配置AndroidManifest.xml② 配置app的build.gradle二、网络请求① 生成数据类② 接口类③ 网络请求工具类三、意图与状态① 创建意图② 创建状态四、ViewModel① 创建存储库② 创建ViewModel③ 创建ViewModel工厂五、UI① 列表适配器②…

【3D目标检测】基于伪雷达点云的单目3D目标检测方法研宄

目录概述细节基准模型点云置信度生成网络特征聚合 DGCNN概述 本文是基于单目图像的3D目标检测方法,是西安电子科技大学的郭鑫宇学长的硕士学位论文。 【2021】【单目图像的3D目标检测方法】 细节 基准模型 作者还是按照伪雷达点云算法的流程设计的,并…

多传感器融合定位十四-基于图优化的定位方法

多传感器融合定位十四-基于图优化的定位方法1. 基于图优化的定位简介1.1 核心思路1.2 定位流程2. 边缘化原理及应用2.1 边缘化原理2.2 从滤波角度理解边缘化3. 基于kitti的实现原理3.1 基于地图定位的滑动窗口模型3.2 边缘化过程4. lio-mapping 介绍4.1 核心思想4.2 具体流程4.…

lamada表达式、stream、collect整理

lamada表达式格式 格式:( parameter-list ) -> { expression-or-statements } 实例:简化匿名内部类的写法 原本写法: public class LamadaTest { public static void main(String[] args) { new Thread(new Runnable() { …

基于PYTHON django四川旅游景点推荐系统

摘 要基于四川旅游景点推荐系统的设计与实现是一个专为四川旅游景点为用户打造的旅游网站。该课题基于网站比较流行的Python 语言系统架构,B/S三层结构模式,通过Maven项目管理工具进行Jar包版本的控制。本系统用户可以发布个人游记,查看景点使用户达到良…

树莓派安装虚拟键盘matchbox-keyboard,解决虚拟键盘乱码问题,解决MIPI DSI触摸屏触控漂移问题

安装虚拟键盘,解决乱码问题 当我们买了触摸屏后,会发现没有键盘,还是无法输入,因此需要虚拟键盘 如果你的语言和地区是中文,那么安装虚拟键盘后可能显示乱码,所以还需要安装中文字体 sudo apt install ttf…

音视频开发—FFMpeg编码解码

FFMpeg 作为音视频领域的开源工具,它几乎可以实现所有针对音视频的处理,本文主要利用 FFMpeg 官方提供的 SDK 实现音视频最简单的几个实例:编码、解码、封装、解封装、转码、缩放以及添加水印。 接下来会由发现问题->分…

Elasticsearch5.5.1 自定义评分插件开发

文本相似度插件开发,本文基于Elasticsearch5.5.1,Kibana5.5.1 下载地址为: Past Releases of Elastic Stack Software | Elastic 本地启动两个服务后,localhost:5601打开Kibana界面,点击devTools,效果图…

koa ts kick off 搭建项目的基本架子

koa ts kick off 使用ts开发koa项目的基本架子,便于平时随手调研一些技术 项目结构 ├── src │ ├── controller //controller层 │ ├── service //service层 │ ├── routes.ts //路由 │ └── index.ts //项目入…

【图像配准】多图配准/不同特征提取算法/匹配器比较测试

前言 本文首先完成之前专栏前置博文未完成的多图配准拼接任务&#xff0c;其次对不同特征提取器/匹配器效率进行进一步实验探究。 各类算法原理简述 看到有博文[1]指出&#xff0c;在速度方面SIFT<SURF<BRISK<FREAK<ORB&#xff0c;在对有较大模糊的图像配准时&…

04 react css上下浮动动画效果

react css上下浮动动画效果html原生实现上下浮动react 实现上下浮动思路分析实现步骤1.引入useRef2.在所属组件内定义—个变量3.在按钮上添加事件4.定义点击事件对window.scrollTo()进行了解&#xff1a;在react中实现效果图&#xff1a;html原生实现上下浮动 我们有一个导向箭…

【分享】订阅金蝶KIS集简云连接器同步OA付款审批数据至金蝶KIS

方案简介 集简云基于钉钉连接平台完成与钉钉的深度融合&#xff0c;实现钉钉OA审批与数百款办公应用软件&#xff08;如金蝶KIS、用友等&#xff09;的数据互通&#xff0c;让钉钉的OA审批流程与企业内部应用软件的采购、付款、报销、收款、人事管理、售后工单、立项申请等环节…

【2023面试秘籍】 测试工程师的简历该怎么写?

作为软件测试的垂直领域深耕者&#xff0c;面试或者被面试都是常有的事&#xff0c;可是不管是啥&#xff0c;总和简历有着理不清的关系&#xff0c;面试官要通过简历了解面试者的基本信息、过往经历等&#xff0c;面试者希望通过简历把自己最好的一面体现给面试官&#xff0c;…

【Java 面试合集】重写以及重载有什么区别能简单说说嘛

重写以及重载有什么区别能简单说说嘛 前述 这是一道非常基础的面试题&#xff0c;我们在回答的过程中一定要逐一横向比较。 从方法的 修饰符&#xff0c;返回值&#xff0c;方法名&#xff0c;含义&#xff0c;参数等方面进行逐一分析来比较不同。 话不多话&#xff0c;看下…

什么样的台灯适合学生做作业的?开学季,适合孩子写作业的台灯

学生在做作业时&#xff0c;是离不开台灯的&#xff0c;在台灯下学习三四个小时&#xff0c;如果台灯质量不好&#xff0c;那对视力造成很大影响&#xff0c;研究表明&#xff0c;儿童在过亮或者过暗的环境中长时间学习&#xff0c;会导致视力下降等&#xff0c;那么什么样的台…

瀚博半导体载天VA1 加速卡安装过程

背景&#xff1a; 想用 瀚博半导体载天VA1 加速卡 代替 NVIDIA 显卡跑深度学习模型 感谢瀚博的周工帮助解答。 正文&#xff1a; 小心拔出 NVIDIA 显卡&#xff0c;在PCIe 接口插上瀚博半导体载天VA1加速卡&#xff0c;如图&#xff1a; 这时显示屏连接主板的集成显卡 卸载…

cookie和Session的作用和比较

目录 什么是cookie cookie的工作原理 什么是session Session的工作原理 为什么会有session和cookie cookie和session如何配合工作 cookie和Session作用 什么是会话 什么是cookie cookie是web服务器端向我们客户端发送的一块小文件&#xff0c;该文件是干嘛的呢&#xf…

Java基础知识疑难点

1. 基础 1.1. 正确使用 equals 方法1.2. 整型包装类值的比较1.3. BigDecimal 1.3.1. BigDecimal 的用处1.3.2. BigDecimal 的大小比较1.3.3. BigDecimal 保留几位小数1.3.4. BigDecimal 的使用注意事项1.3.5. 总结 1.4. 基本数据类型与包装数据类型的使用标准 2. 集合 2.1. Arr…