微服务初识(一)

目录

  • 1.什么是微服务?
  • 2.为什么出现微服务?
    • 2.1微服务的出现与发展
    • 2.2 系统架构的演变
      • 2.2.1 传统开发模式——单体架构
      • 2.2.2分布式架构
      • 2.2.3 微服务架构
      • 2.2.4 小结
  • 3. 如何实现微服务?
    • 3.1 微服务开发
    • 3.2 微服务容器镜像构建
    • 3.3 微服务容器镜像管理
    • 3.4 服务容器编排管理

本文摘自网上

1.什么是微服务?

微服务架构(Microservice Architecture)是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。微服务架构是个很有趣的概念,它的主要作用是将功能分解到离散的各个服务当中,从而降低系统的耦合性,并提供更加灵活的服务支持。微服务架构风格是一种将单个应用程序开发为“一套小型服务”的方法,每个服务“运行在自己的进程中”,并通过轻量级机制(通常是HTTP资源API)进行通信。这些服务“围绕业务功能构建”,并通过全自动部署机制“独立部署”。“这些服务只有最低限度的集中管理”,可能是用不同的编程语言编写的,并使用不同的数据存储技术。
概念: 把一个大型的单个应用程序和服务拆分为数个甚至数十个的支持微服务,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服务等级协议。
定义: 围绕业务领域组件来创建应用,这些应用可独立地进行开发、管理和迭代。在分散的组件中使用云架构和平台式部署、管理和服务功能,使产品交付变得更加简单。
本质: 用一些功能比较明确、业务比较精练的服务去解决更大、更实际的问题。

简单说就是将一个完整的应用(单体应用)按照一定的拆分规则(业务领域拆)拆分成多个不同的服务,每个服务都能独立地进行开发、部署、扩展。服务与服务之间通过http,消息,rpc等方式进行调用和通信。

2.为什么出现微服务?

2.1微服务的出现与发展

微服务(Microservice)这个概念是2012年出现的,作为加快Web和移动应用程序开发进程的一种方法,2014年开始受到各方的关注,而2015年,可以说是微服务的元年;越来越多的论坛、社区、blog以及互联网行业巨头开始对微服务进行讨论、实践,可以说这样更近一步推动了微服务的发展和创新。微服务架构风格是一种使用一套小服务来开发单个应用的方式途径,每个服务运行在自己的进程中,并使用轻量级机制通信,通常是HTTP API,这些服务基于业务能力构建,并能够通过自动化部署机制来独立部署,这些服务使用不同的编程语言实现,以及不同数据存储技术,并保持最低限度的集中式管理。
(1)RPC
Remote Produce Call远程过程调用,类似的还有RMI 远程方法调用。自定义数据格式,基于原生TCP通信,速度快,效率高。早期的webservice,现在热门的dubbo,都是RPC的典型代表。
(2)HTTP
http其实是一种网络传输协议,基于TCP,规定了数据传输的格式。现在客户端浏览器与服务端通信基本都是采用Http协议,也可以用来进行远程服务调用。缺点是消息封装臃肿,优势是对服务的提供和调用方没有任何技术限定,自由灵活,更符合微服务理念。

2.2 系统架构的演变

2.2.1 传统开发模式——单体架构

一个系统业务量很小的时候所有的代码都放在一个项目中就,然后这个项目部署在一台服务器上。整个项目所有的服务都由这台服务器提供。所有的功能打包在一个 WAR包里,基本没有外部依赖(除了容器),部署在一个JEE容器(Tomcat,JBoss,WebLogic)里,包含了 DO/DAO,Service,UI等所有逻辑。这就是单体结构。

(1)优点:
① 开发简单,集中式管理
② 基本不会重复开发
③ 功能都在本地,没有分布式的管理和调用消耗
④ 部署成本低:把写好的项目打成包,在tomcat服务器上面部署一下,用户就可以访问了,如果用户访问多了,那就在加两个服务器,形成负载均衡的集群。
(2)缺点:
① 耦合度高:在大型项目的开发中,像拼多多,淘宝这些,一个大型项目里面有很多的功能模块,代码量十几万行甚至于几十万行代码,如果使用单体架构。打包部署就可以需要很久,效率太低。所以在大型项目中基本上都是采用分布式架构。
② 效率低:开发都在同一个项目改代码,相互等待,冲突不断
③ 维护难:项目中的功能模块的代码你中有我,我中有你,假设其中一个模块中出现问题,其他模块也会受到影响,代码的边缘化也越来越模糊。代码功功能耦合在一起,
④ 不灵活:构建时间长,任何小修改都要重构整个项目,耗时
⑤ 稳定性差:一个微小的问题,都可能导致整个应用挂掉
⑥ 扩展性不够:无法满足高并发下的业务需求

2.2.2分布式架构

分布式架构:根据业务功能对系统做拆分,每个业务功能模块作为独立项目开发,称为一个服务。
(1)优点
① 降低服务耦合:每个功能模块,都成为了单独的项目,大家各写各的项目,没有过多的牵扯耦合度就会大大的降低,另外像打包速度,代码量都会减少。
② 有利于服务升级和拓展:像以后功能模块项目/服务进行升级维护也影响不了别的功能模块项目的正常进行。
(2)缺点:
服务调用关系错综复杂:一个大型的项目被拆分许多的服务,各个服务的功能模块该如何调用?许多的服务部署起来也是比较麻烦。(就是说一个大型项目被拆分为许多的服务,该如何拆分哪几个服务作为单独的模块,那些业务不需要拆分,这个拆分的粒度需要把握)
服务之间如何实现远程调用(各个服务之间该如何进行远程调用呢?)?
为了解决这些问题,人们需要制定一套行之有效的标准来约束分布式架构。出现了各种各样的技术(如下图)去解决这些问题:但是近几年运用最广泛的就是微服务。

2.2.3 微服务架构

微服务是一种经过良好架构设计的分布式架构方案,微服务架构特征(微服务它还是一种分布式架构,只不过人们在设计分布式过程中踩坑,不断的总结经验,得到了良好的分布式架构实践方案)
微服务特点:
1、分布式服务组成的系统
2、按照业务,而不是技术来划分组织
3、强服务个体和弱通信( Smart endpoints and dumb pipes )
4、自动化运维( DevOps )
5、高度容错性
6、快速演化和迭代
微服务其实是在给分布式架构制定一个标准,进一步降低服务之间的耦合度,提供服务的独立性和灵活性。做到高内聚,低耦合

2.2.4 小结

单体架构特点: 简单方便,高度耦合,扩展性差,合适小型项目。如:学生管理系统。
分布式架构特点: 松耦合,扩展性好,但架构复杂,难道大,适合大型互联网项目。如:京东、淘宝
微服务: 一种良好的分布式架构方案。
优点:拆分粒度更小、服务更独立、耦合更低
缺点:架构非常复杂,运维、监控、部署难度更高

3. 如何实现微服务?

微服务容器化部署的一般流程和总体方案:主要分为微服务开发、微服务容器镜像构建、微服务容器镜像管理、微服务容器编排管理四个步骤。

3.1 微服务开发

随着企业和开发者对微服务的不断研究,微服务开发框架层出不穷,如 SpringCloud,Dubbo 等,其丰富的配置管理、服务治理、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式回话和集群状态管理等操作为构建微服务系统提供了简单的开发模式。
企业或者个人进行应用开发时,可以通过对待开发应用的分析研究,拆分业务服务,选择合适的微服务框架进行应用开发,充分利用其自带的丰富组件,如服务注册和发现、网关 API、负载均衡、容错监控或其他第三方管理插件,通过简单的配置实现微服务应用的快速开发和系统管理。

3.2 微服务容器镜像构建

镜像构建是将开发的微服务生成可以运行的容器镜像。目前比较主流的就是使用Docker进行快速构建。Docker 中通常有两种方法来构建新镜像。第一种是通过 commit 命令将一个正在运行的容器提交为一个新镜像,第二种为编写 Dockerfile文件,接着使用 build 命令构建一个容器镜像。

3.3 微服务容器镜像管理

微服务容器镜像已经构建成功,但往往一个完整的应用系统包括不止一个微服务,即对应着多个镜像,因此还需要对构建的容器镜像进行相应的存储管理。
DockerHub 是 Docker 官方认证的DockerRegistry,上面不仅存放着许多常用的优秀镜像,还提供认证、工作组结构、工作流工具、构建触发器等工具来简化工作。
因此,对于每一个为服务应用,首先在 DockerHub 上创建相应的私有仓库,然后将应用下所有微服务构建好的容器镜像推送到仓库内,进行存储和管理。同时可以随时随地拉取相应的镜像,搭建新的开发、测试环境。

3.4 服务容器编排管理

通常拉取镜像进行容器启动后,该微服务就会运行到新创建的容器进程中。由于应用包括多个微服务容器,容器的启动顺序、运行容器间的通信,容器实例的运行状态都需要配置和管理,若都人工配置和操作,不免增加了许多部署人员和维护人员的工作量和复杂度,因此需要选用容器编排工具进行容器的管理和调度。
随着容器的应用越来越多,容器编排和集群管理工具也层出不穷,如 Docker Compose,Docker Swarm 和 Kubernetes。其中 DockerCompose 操作最容易,只需要编写一个文件,即 docker-compose.yml,在此文件中定义应用程序的服务、声明好要启动的容器,配置一些参数,然后运行 docker-composeup 指令便可,但是需要注意到,Docker-Compose 只能管理当前主机上的 Docker,并不能跨主机去启动其他主机上的 Docker 容器。
其中 Kubernetes 是
Google 的一个开源项目,基于其多年大规模容器管理技术,具有完备的集群管理能力,包括透明的服务注册和发现机制、可扩展的资源自动调度机制、强大的故障发现和自我修复能力、多粒度的资源管理能力、负载均衡,涵盖了包括开发部署测试运维监控在内的多个环节。可实现大规模、分布式、高可用的 Docker 集群。

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

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

相关文章

nginx更新https/ssl证书的步骤

一、上传nginx证书到服务器 上传步骤略。。。 二、更新证书 (一)确认nginx的安装目录 我这里的环境是/etc/nginx/ (二)确认nginx的证书目录 查看/etc/nginx/nginx.conf,证书目录就在/etc/nginx目录下 将新的证书tes…

甄选版“论软件系统架构评估”,软考高级,系统架构设计师

论文真题 对于软件系统,尤其是大规模的复杂软件系统来说,软件的系统架构对于确保最终系统的质量具有十分重要的意义,不恰当的系统架构将给项目开发带来高昂的代价和难以避免的灾难。对一个系统架构进行评估,是为了:分析现有架构存在的潜在风险,检验设计中提出的质量需求,…

一名HR,在招聘嵌入式开发岗位,为什么感觉一年比一年难?

在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!! 1.嵌入式学用不一致, 高…

OPENCV清晰度判断(三)

接上篇: 信息熵 我还尝试了使用信息熵的方式: 图像也可以采用信息熵的方式来计算图像中的信息多少。 基本概念:图像信息熵是一种特征的统计形式,反映了图像中平均信息量的多少。它表示图像灰度分布的聚集特征所包含的信息量。…

守护Perl代码的圣域:代码安全性与沙箱执行深度解析

守护Perl代码的圣域:代码安全性与沙箱执行深度解析 在软件开发中,代码安全性是一个至关重要的议题,特别是当涉及到执行外部代码或在多用户环境中运行脚本时。Perl,作为一种灵活的脚本语言,提供了多种机制来增强代码的…

Vue.js 全面解析:从基础到实践案例

引言: Vue.js 是一款轻量级且高效的前端框架,以其简洁的API和强大的功能,迅速成为了现代Web开发的热门选择。本文将深入浅出地介绍Vue.js的基础知识,并通过实际案例展示其核心属性的应用,帮助开发者快速掌握Vue.js的精…

Dubbo快速入门

1. Dubbo概述 官网地址:https://cn.dubbo.apache.org/zh-cn/ Apache Dubbo 是一款高性能的轻量级的Java RPC框架,可以和Spring框架无缝集成。 本地调用:本机调用,指同个JVM内部的方法调用,例如三层架构之间的方法调用…

微信小程序-自定义组件 properties

一.自定义组件properties 自定义组件的properties是组件的属性值定义部分。 如下label就i是properties里面定义的属性值 <custom-checkbox label"我已阅读并同意 用户协议 和 隐私协议" position"right"/>定义 Component({/*** 组件的属性列表*/p…

白话EAGLE2:解锁大模型的“打草稿”技术

实时了解业内动态&#xff0c;论文是最好的桥梁&#xff0c;专栏精选论文重点解读热点论文&#xff0c;围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调或者LLM背后的基础模型重新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;…

通义灵码上线 Visual Studio 插件市场啦!

通义灵码&#xff0c;是阿里云出品的一款基于通义大模型的智能编码辅助工具&#xff0c;提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码优化、注释生成、代码解释、研发智能问答、异常报错排查等能力&#xff0c;提供代码智能生成、研发智能问答能力。 通义灵…

flutter开发实战-ListWheelScrollView与自定义TimePicker时间选择器

flutter开发实战-ListWheelScrollView与自定义TimePicker 最近在使用时间选择器的时候&#xff0c;需要自定义一个TimePicker效果&#xff0c;当然这里就使用了ListWheelScrollView。ListWheelScrollView与ListView类似&#xff0c;但ListWheelScrollView渲染效果类似滚筒效果…

Frobenius 范数

Frobenius范数是一种用于衡量矩阵大小的标准方法。具体来说&#xff0c;Frobenius范数 ∥ M ∥ F \|\mathbf{M}\|_F ∥M∥F​是通过矩阵 M \mathbf{M} M中所有元素的平方和再开方得到的。它的计算公式为&#xff1a; ∥ M ∥ F ∑ i , j ∣ M i j ∣ 2 \|\mathbf{M}\|_F \sqr…

【vue3】【vant】 移动端中国传统文化和民间传说案例

更多项目点击&#x1f446;&#x1f446;&#x1f446;完整项目成品专栏 【vue3】【vant】 移动端中国传统文化和民间传说案例 获取源码方式项目说明&#xff1a;其中功能包括项目包含&#xff1a;项目运行环境运行截图和视频 获取源码方式 加Q群&#xff1a;632562109项目说…

origin合集汇总

文章目录 安装折线图相关教程学习笔记 安装 https://blog.csdn.net/qq_41517071/article/details/127600352 我b站也有安装教程&#xff0c;搜origin 即可 折线图 参考B站 相关教程 参考 公众号 学习笔记

Vip-智能预估+大数据标签+人群全选=用户分群!

Mobpush用户分群功能升级&#xff0c;创建推送入口vip用户可进入自有选择标签创建“用户分群”&#xff0c;相比于免费标签&#xff0c;“用户标签”维度更丰富。在应用基础属性上&#xff0c;增加“品牌”、“网络状态”、“运营商”&#xff0c;众所周知&#xff0c;不同厂商…

MJ可以SD就不行么?Stable Diffusion 轻松复刻12生肖水果拼盘,我被AI水果拼盘惊艳到了!

有人用MJ可以轻松生成AI水果拼盘&#xff0c;今天老徐就带大家试试用Stable Diffusion**如何轻松复刻实现。 提示词模版&#xff1a; fruit shapes for chinese new year a wonderful example of edible art, in the style of hyperrealistic wildlife portraits, 1 piece ma…

为什么ISO 45001职业健康安全管理体系是企业发展的基石

ISO 45001源自OHSAS 18001职业健康和安全管理体系&#xff0c;是全球第一个国际职业健康和安全管理标准。ISO&#xff08;国际标准化组织&#xff09;于2018年发布了这一标准&#xff0c;旨在帮助各类组织为员工提供一个更安全、更健康的工作环境。与OHSAS 18001相比&#xff0…

2024年跨境电商关键数据统计:市场规模将达到1.976万亿美元

预计2024年跨境电商消费市场规模将达到1.976万亿美元&#xff0c;占全球网上销售总额的31.2%。这一数据无疑展示了跨境电商市场的巨大潜力和迅猛增长趋势。 全球跨境电商的现状与未来 现状 2023年&#xff0c;全球跨境电商市场规模预计达到1.56万亿美元&#xff0c;占全球电子…

spring之HelloWord版

目录 基础结构说明 涉及到的功能 执行流程 spring包 引导类 bean定义 注解 回调接口拓展 测试入口 service包 回调接口拓展实现 实体类 自定义注解 基础结构说明 spring子包内&#xff0c;放置spring源码相关类&#xff0c;如注解定义&#xff0c;引导类执行逻辑等…

【网络安全学习】漏洞利用:BurpSuite的使用-02-常用的标签

下面介绍一下BurpSuite各个标签的用法&#x1f447; 1️⃣ Dashboard标签 Dashboard&#xff0c;顾名思义就是BurpSuite的仪表盘&#xff0c;可以通过Dashboard进行漏洞扫描&#xff0c;不过该功能需要升级到pro版本&#xff0c;也就是得交钱&#x1f62d;。 2️⃣ Target标签…