微服务系列(1)-who i am?

微服务系列(1)-我是谁

应用架构的演化

简单来说系统架构可以分为以下几个阶段:复杂的臃肿的单体架构-SOA架构-微服务
应用架构的演化

单体架构及其所面临的问题

在互联网发展初期,用户数量少,流量小,硬件成本高。因此,企业会将系统的所有功能都集中在一起,开发一个单体应用,然后将应用部署在1台服务器上。

但单体架构根本不能适应大型项目,debug非常困难,程序健壮性差,必须将系统拆开。拆分的结果就是出现了***分布式系统***,分布式系统允许服务之间相互调用,减轻了系统的耦合性,此外,分布式系统还引入了网关、缓存、消息队列等中间件,大大提高了服务的稳定性。但分布式系统的调用关系复杂,尤其是在集群化部署后,负载均衡的配置更是一个很大挑战,不同服务之间的协议不一样,服务通信困难(这也是分布式系统设计的难点之一),为了解决服务之间的通信问题,服务导向架构(Service-Oriented Architecture,SOA)应运而生。
分布式系统

服务治理阶段(SOA)

在SOA架构中应用程序被划分为多个独立的服务,每个服务负责一个特定的功能,比如我们将原本的“仓库系统”拆分为“订单服务”和“库存服务”。SOA引入了企业服务总线(ESB)概念,将基于不同协议的服务节点连接起来,简单来说,ESB的工作是做一个中间商,其功能就是转换、解释消息和路由消息。
SOA架构

SOA架构最棒的地方在于解决了服务间的通信问题,每一个服务只要按照预定的标准和ESB这个中间商通信即可,大大提高系统的模块化、可扩展性和可维护性,让程序员不再为多个协议之间互相转化苦恼。

SOA虽然解决了多个服务之间通信的问题,但随着敏捷开发(DevOps)的发展,服务会变更的更加迅速,这就导致了服务的进一步更细粒度的拆分,开发者也希望服务之间更松耦合,毕竟我们都不想产生bug。逐渐的,业务功能被划分的更小,以至于一个服务只完成某项极小的任务,微服务的概念由此开始。

微服务架构与云原生

  • 微服务(Microservices)是一种软件架构风格,它将一个大型应用程序划分为一组小型、松耦合的服务,每个服务负责一个具体的业务功能。这些服务独立开发、部署和运行,通常采用轻量级的通信协议(如RESTful API或gRPC)进行通信和协作。

在微服务部署时,通常会引入一个服务注册与发现中心(Service Registry and Discovery Center)或者服务治理中心(Service Governance Center)来对服务进行统一的管理和调度。这个中心的主要作用包括:

服务注册:服务提供者将其提供的服务信息(服务名,ip,端口)注册到服务注册中心,以便其他服务消费者可以找到并使用这些服务;

服务发现:服务消费者可以通过服务注册中心查询到所需的服务信息,从而知道如何调用这些服务,服务之间的调用不再使用ip:port方式,而是使用服务名调用,这样,服务的ip一旦变更开发者也无需对服务进行改动;

负载均衡:服务注册中心可以根据服务提供者的负载情况,为服务消费者提供合适的服务提供者地址,实现负载均衡;

故障转移:当某个服务提供者出现故障时,服务注册中心可以自动将服务消费者的请求转发到其他可用的服务提供者,实现故障转移;

监控和统计:服务注册中心可以收集服务调用的统计信息,以便对服务的性能、可用性和稳定性进行监控和分析;

配置管理:服务注册中心可以提供统一的配置管理功能,以便对服务的配置信息进行集中管理和维护;

安全管理:服务注册中心可以实现服务的鉴权、授权和访问控制等安全功能,以保障服务的安全性。

简单的微服务架构图

学习微服务的前提是要了解注册中心的概念。就我个人理解来说,注册中心相当于是一个登记表,服务将自己的的信息写入注册中心,其他服务要调用的时候就去这张登记表中找自己要调用的服务的信息。相较于单体架构中开发者需要将要调用的服务的ip:port写入代码中,微服务注册中心简直太方便了,尤其适合使用k8s部署。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

96、Kafka中Zookeeper的作用

Kafka中zk的作用 它是一个分布式协调框架。很好的将消息生产、消息存储、消息消费的过程结合在一起。在典型的Kafka集群中, Kafka通过Zookeeper管理集群配置,选举leader,以及在Consumer Group发生变化时进行rebalance。Producer使用push模式将消息发布到broker,Consumer使用…

leetcode做题笔记37

编写一个程序,通过填充空格来解决数独问题。 数独的解法需 遵循如下规则: 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图) 数独部分…

IDEA导入微服务项目后自动将微服务展示在service面板中

有时候,不会自动将微服务展示在service面板中。 添加service面板: service面板: 更新所有maven,就可以自动将微服务展示在service面板中。

小程序----配置原生内置编译插件支持sass

修改project.config.json配置文件 在 project.config.json 文件中,修改setting 下的 useCompilerPlugins 字段为 ["sass"], 即可开启工具内置的 sass 编译插件。 目前支持三个编译插件:typescript、less、sass 修改之后可以将原.w…

线程的同步

一、互斥锁 java语言中,引入了对象互斥锁的概念,来保证共享数据操作的完整性。每个对象都对应与一个可称为“互斥锁”的标记,这个标记用来保证在任一时刻,只能有 一个线程访问该对象。关键字synchronized用来与对象的互斥锁联系。…

fpga_pwm呼吸灯(EP4CE6F17C8)

文章目录 一、呼吸灯二、代码实现三、引脚分配 一、呼吸灯 呼吸灯是指灯光在微电脑的控制之下完成由亮到暗的逐渐变化,使用开发板上的四个led灯实现1s间隔的呼吸灯。 二、代码实现 c module pwm_led( input clk ,input rst_n ,output reg [3:0] led ); …

SAP从放弃到入门系列之批次派生-Batch Derivation-Part2

文章目录 一、派生的类型1.1 静态派生1.2 动态派生 二、派生的方向 通过批次派生的基本配置和简单功能的介绍,大家应该对批次派生有一个基本的了解,这篇文章从批次派生的类型和批次派生的方向两个维度更深入的聊一下它的功能。 一、派生的类型 派生的类…

Vue 渲染流程详解

在 Vue 里渲染一块内容,会有以下步骤及流程: 第一步,解析语法,生成AST 第二步,根据AST结果,完成data数据初始化 第三步,根据AST结果和DATA数据绑定情况,生成虚拟DOM 第四步&…

Spring Cloud【为什么需要监控系统、Prometheus环境搭建、Grafana环境搭建 、微服务应用接入监控 】(十七)

目录 全方位的监控告警系统_为什么需要监控系统 全方位的监控告警系统_Prometheus环境搭建 全方位的监控告警系统_Grafana环境搭建 全方位的监控告警系统_微服务应用接入监控 全方位的监控告警系统_为什么需要监控系统 前言 一个服务上线了后,你想知道这个服…

Leetcode 114. 二叉树展开为链表

题目描述 题目链接:https://leetcode.cn/problems/flatten-binary-tree-to-linked-list/description/ 思路 先序遍历展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。 List list …

Oracle 迁移 Hive 过程中遇到的问题总结

前言 最近一个小伙伴在做从 Oracle 到 Hive 的业务迁移工作,在迁移过程中属实遇到了一些坑,今天就来汇总一下这些坑,避免以后大家其他业务迁移的时候再出现类似的问题,即使出现了也可以拿过来进行对照解决。 问题1:Distinct window functions are not supported: count(…

shell 脚本通过 dumpsys SurfaceFlinger --latency 数据计算 FPS 和评价流畅度。

目录 前言: 开篇前述: 一、设计初衷 二、设定预期倒推查找解决方案 设计实现部分 一、确定数据来源原因(dumpsys SurfaceFlinger --latency) 二、根据需求确定计算规则 三、代码实现 四、监控数据可视化交互结果设计 前言…

ES6基础知识二:ES6中数组新增了哪些扩展?

一、扩展运算符的应用 ES6通过扩展元素符…&#xff0c;好比 rest 参数的逆运算&#xff0c;将一个数组转为用逗号分隔的参数序列 console.log(...[1, 2, 3]) // 1 2 3console.log(1, ...[2, 3, 4], 5) // 1 2 3 4 5[...document.querySelectorAll(div)] // [<div>, &l…

APISIX 安全评估

背景 有大佬已经对 [apisix攻击面](https://ricterz.me/posts/2021-07-05-apache-apisix-attack- surface-research.txt)做过总结。 本文记录一下自己之前的评估过程。 分析过程 评估哪些模块&#xff1f; 首先我需要知道要评估啥&#xff0c;就像搞渗透时&#xff0c;我得…

Websocket协议-http协议-tcp协议区别和相同点

通讯形式 单工通讯-数据只能单向传送一方来发送数据&#xff0c;另一方来接收数据 半双工通讯-数据能双向传送但不能同时双向传送 全双工通讯-数据能够同时双向传送和接受 注&#xff1a;http的通讯方式是分版本 http1.0&#xff1a;单工。因为是短连接&#xff0c;客户端…

【设计模式——学习笔记】23种设计模式——建造者模式Builder(原理讲解+应用场景介绍+案例介绍+Java代码实现)

介绍 建造者模式又叫生成器模式&#xff0c;是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别)&#xff0c;使这个抽象过程的不同实现方法可以构造出不同属性的对象建造者模式是一步一步创建一个复杂的对象&#xff0c;它允许用户只通过指定复杂对象的类型和…

C 程序 运算符

文章目录 1、算术运算符2、关系运算符3、逻辑运算符4、位运算符5、赋值运算符6、杂项运算符 ↦ sizeof & 三元7、运算符优先级 1、算术运算符 #include <stdio.h>int main() {int a 21;int b 10;int c ;c a b;printf("Line 1 - c 的值是 %d\n", c );c …

【mac系统】mac系统调整妙控鼠标速度

当下环境&#xff1a; mac系统版本&#xff0c;其他系统应该也可以&#xff0c;大家可以自行试下&#xff1a; 鼠标 mac妙控鼠标&#xff0c;型号A1657 问题描述&#xff1a; 通过mac系统自带的鼠标速度调节按钮&#xff0c;调到最大后还是感觉移动速度哦过慢 问题解决&…

Cesium态势标绘专题-矩形(标绘+编辑)

标绘专题介绍:态势标绘专题介绍_总要学点什么的博客-CSDN博客 入口文件:Cesium态势标绘专题-入口_总要学点什么的博客-CSDN博客 辅助文件:Cesium态势标绘专题-辅助文件_总要学点什么的博客-CSDN博客 本专题没有废话,只有代码,代码中涉及到的引入文件方法,从上面三个链…

网站实现下载apk安装包

目录 1、背景说明2、效果图3、具体实现3.1 界面代码3.2 js代码 4、说明4.1 存在异常4.2 解决方案 5、参考资料 1、背景说明 有时需要将写好的apk安装包在局域网内部进行发布&#xff0c;具体实现非常简单&#xff0c;如下所示 2、效果图 进入到网站后&#xff0c;点击下载按…