《Java生态圈技术总结》之 微服务架构蓝图总览

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
简介: 微服务是一种架构风格,将单体应用划分成一组小的服务,尽量符合单一职责的原则,使得服务之间相互协作,实现业务功能;每个服务都运行在独立的进程、虚拟机、容器、服务器中,服务之间采用轻量级的通信机制(HTTP/JSON)进行协作;每个服务围绕各自的业务能力进行构建,并且能够通过自动化机制独立地部署,相互之间无部署依赖;

目录导航
一、微服务定义
1.1 定义一
1.2 定义二
二、微服务利弊
2.1 优点
2.2 缺点
三、微服务的适用性
3.1 康威法则
3.2 生产力
3.3 架构演进
四、服务分层
五、服务注册发现
六、微服务网关
七、微服务配置中心
八、微服务通信
九、服务监控
9.1 监控体系
9.2 监控架构
9.3 全链路监控
十、断路器与流量控制
十一、DevOps(云原生架构系列)
十二、容器云
一、微服务定义
1.1 定义一
微服务是一种架构风格,将单体应用划分成一组小的服务,尽量符合单一职责的原则,使得服务之间相互协作,实现业务功能;
每个服务都运行在独立的进程、虚拟机、容器、服务器中,服务之间采用轻量级的通信机制(HTTP/JSON)进行协作;
每个服务围绕各自的业务能力进行构建,并且能够通过自动化机制独立地部署,相互之间无部署依赖;
每个服务可以使用不同的技术栈进行开发;
1.2 定义二
微服务是一种基于有界上下文的,松散耦合的面向服务的架构。

二、微服务利弊
2.1 优点
划分了业务模块,具有更强的业务边界;
每个微服务都是可以独立部署的,互不影响;
允许技术多样性;
2.2 缺点
带来了分布式系统的复杂性;
带来了最终一致性的难题;
带来了运维的复杂性;
带来了测试复杂性;
三、微服务的适用性
什么场景下适用微服务?什么阶段时适用微服务?

3.1 康威法则
设计的微服务系统的组织,其产生的架构设计应等价于组织间的沟通结构。

这句话的意思是说,原始组织之间的结构最好能映射到设计的微服务系统架构上。比如一个系统包含订单、商品、用户等功能,现实中分别由A、B、C三个小组进行开发维护,那么如果要拆分为微服务的架构,最好就能拆分为订单服务、商品服务、用户服务三个微服务,对应A、B、C三个现实的小组结构。

3.2 生产力
微服务并不是适合任何阶段,最好的方式就是随着项目的扩大或者团队的扩大时,逐步演进到微服务。因为单体应用会随着规模的扩大而逐渐增加内耗,导致生产力降低。微服务的目标是在规模扩大时,使得生产力能维持在一个稳定的水准之上。

微服务与单体的生产力比较:

微服务与单体的生产力比较

微服务生产力超过单体的拐点,一般来说是指当团队人数规模达到百人时。当然,这也不是绝对的,需要团队负责人自己视情况进行评估。

3.3 架构演进
如果在项目一开始就设计微服务的架构,一路上会遇到极大的困难与风险。比如业务模块边界的划分、无法预估的业务或者技术复杂性,这些都会耗费更多的人力和时间,甚至最终导致项目失败。

建议的方式就是由单体演进,我们可以在单体阶段不断摸索和沉淀业务和技术上的问题,随着越来越清晰的认知,再加上日渐增加的复杂度,可以考虑逐步拆分部分服务出来,朝着微服务架构的方向演进。

架构演进:
架构演进

四、服务分层
微服务架构中服务与服务各有不同,相互之间也应该按照层级的方式进行编排。有的与业务无关的服务天然属于底层基础服务,有的与业务有关联的服务则属于聚合了基础服务的聚合服务。

服务分层:
服务分层

在常见的公司微服务总体架构中,一般的架构表现就如下所示:

微服务总体架构:
微服务总体架构

有了各个层级的服务之后,中台的概念和战略就显得很自然。

中台战略:
中台战略

五、服务注册发现
服务注册与发现是微服务架构得以运转的核心功能,它不提供任何业务功能,仅仅用来进行服务的发现和注册,并对服务的健康状态进行监控和管理。其核心的工作原理:

注册中心负责维护所有服务的地址信息,包括服务名称、IP地址、端口等;
提供服务方将自己的信息注册到注册中心上,并维持一个心跳以此来表明自己一直可用;
调用服务方想要调用某个服务时,询问注册中心该服务的地址,然后以负载均衡的方式发起调用;
现在注册中心比较多,主流的有Eureka、Consul、Zookeeper、Nacos等。

六、微服务网关
网关是整个系统对外暴露的唯一入口,它封装了系统内的所有微服务,对外看来,别人只知道也只能通过网关才可以和系统进行交互。网关对所有请求进行非业务功能的处理,然后再将请求发送给内部指定的微服务进行业务上的处理。总的来说,网关最主要的功能如下:

反向路由;
安全认证;
限流熔断;
日志监控;
现在常见的网关有Kong、Zuul、Spring Cloud Gateway等;

微服务网关:
微服务网关

在实际应用中,一个微服务体系架构的系统可以有多个网关用来应对不同的使用场景,比如公司内网网关、外网网关、提供给第三方调用的网关等;

多网关的使用:

多网关的使用

七、微服务配置中心
微服务在启动和运行的过程中,经常会需要读取一些配置信息,这些配置信息拥有如下的特点:

独立于程序的只读内容;配置与程序应该分离,应用应该只会去读取配置,而不应该去修改配置;
伴随应用的整个生命周期;配置会被程序读取用来控制自己的行为逻辑;因此配置是可以被更改的;
拥有多种加载方式;可以通过硬编码、配置文件、环境变量、启动参数、数据库存储等方式被加载到应用内;
配置内容需要治理;不同的环境下,配置具有不同的内容,因此需要配置内容的治理;
如上这些特点和需求,催生了配置中心的出现。现在主流的配置中心有Spring Cloud Config、Nacos、Apollo等;

配置中心:
配置中心

八、微服务通信
RPC和REST:
RPC和REST

九、服务监控
9.1 监控体系
监控体系:
监控体系

9.2 监控架构
监控架构:
监控架构

9.3 全链路监控
在微服务架构中,一次调用请求可能贯穿多个服务,这些服务可能是由不同的团队使用不同的技术开发而成的,如果出现调用失败需要排查问题时,如何能快速地复现调用现场,发现问题出在哪个服务哪个服务器上就成了全链路监控需要解决的问题。

全链路监控的基本原理都是:

一次请求全过程中只有一个TraceID保持不变;
每贯穿一个服务,SpanID都不同,同时标注上一个SpanID;
按照时间序列将监控信息进行报错和展示;
全链路监控主流工具有CAT、Zipkin、Pinpoint、Skywalking等;

十、断路器与流量控制
在微服务架构体系中,服务之间的调用是很频繁的,一旦某些服务出现故障或者高延迟,会很可能造成级联故障,如果客户端还在不停重试,将会加剧问题的严重性,最终导致整个系统彻底崩溃。

断路器的设计与实现有助于防止多服务之间的级联故障,允许我们构建具有容错性和高弹性的微服务架构系统,当某些服务不可用时,提供服务熔断和服务降级功能,保证系统的其它部分仍能正常运行。

断路器的三个状态和含义如下:

关闭;此时所有调用都能访问到当前的服务。当调用次数或者故障数超过设定的阈值后,断路器变为打开状态;
打开;不再调用当前服务,而是返回预设的错误信息;
半开;打开一定时间后,断路器切换为半开状态,放一个请求调用当前服务,测试服务是否正常。如果正常,则变为关闭状态;如果还是异常,再次变为打开状态。
主流常见的断路器有Hystrix、Sentinel等;

十一、DevOps(云原生架构系列)
DevOps:
DevOps

蓝绿发布:
蓝绿发布

十二、容器云
如果使用了容器技术,那么容器编排、发布、治理就成了避不开的话题。主流的技术如下:

Docker、Docker Compose、Docker Swam 这里推荐我之前写过的文章《云原生之 Docker篇 Docker Compose介绍及使用入门》、《云原生之 Docker Swarm服务编排介绍及使用入门》
K8s 后续会逐渐推出
Mesos 后续会逐渐推出
各大容器云厂商基本都是使用基于k8s的容器治理方案,k8s也已经成为该领域事实上的标准了。

如上是自己在极客时间App上学习《微服务架构核心20讲》的笔记,该课程一天就能学完,没有实现微服务的细节,是高屋建瓴地讲解微服务架构的蓝图,带你鸟瞰整个微服务架构,推荐学习,这里引用老师说过的话。

相关文章
|
4天前
|
JavaScript 安全 Java
智慧产科一体化管理平台源码,基于Java,Vue,ElementUI技术开发,二开快捷
智慧产科一体化管理平台覆盖从备孕到产后42天的全流程管理,构建科室协同、医患沟通及智能设备互联平台。通过移动端扫码建卡、自助报道、智能采集数据等手段优化就诊流程,提升孕妇就诊体验,并实现高危孕产妇五色管理和孕妇学校三位一体化管理,全面提升妇幼健康宣教质量。
31 12
|
10天前
|
传感器 监控 安全
智慧工地云平台的技术架构解析:微服务+Spring Cloud如何支撑海量数据?
慧工地解决方案依托AI、物联网和BIM技术,实现对施工现场的全方位、立体化管理。通过规范施工、减少安全隐患、节省人力、降低运营成本,提升工地管理的安全性、效率和精益度。该方案适用于大型建筑、基础设施、房地产开发等场景,具备微服务架构、大数据与AI分析、物联网设备联网、多端协同等创新点,推动建筑行业向数字化、智能化转型。未来将融合5G、区块链等技术,助力智慧城市建设。
|
1月前
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
|
2月前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
1426 1
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
2月前
|
存储 监控 安全
单位网络监控软件:Java 技术驱动的高效网络监管体系构建
在数字化办公时代,构建基于Java技术的单位网络监控软件至关重要。该软件能精准监管单位网络活动,保障信息安全,提升工作效率。通过网络流量监测、访问控制及连接状态监控等模块,实现高效网络监管,确保网络稳定、安全、高效运行。
81 11
|
2月前
|
XML Java 编译器
Java注解的底层源码剖析与技术认识
Java注解(Annotation)是Java 5引入的一种新特性,它提供了一种在代码中添加元数据(Metadata)的方式。注解本身并不是代码的一部分,它们不会直接影响代码的执行,但可以在编译、类加载和运行时被读取和处理。注解为开发者提供了一种以非侵入性的方式为代码提供额外信息的手段,这些信息可以用于生成文档、编译时检查、运行时处理等。
85 7
|
2月前
|
Cloud Native API 持续交付
云原生架构下的微服务治理策略与实践####
本文旨在探讨云原生环境下微服务架构的治理策略,通过分析当前面临的挑战,提出一系列实用的解决方案。我们将深入讨论如何利用容器化、服务网格(Service Mesh)等先进技术手段,提升微服务系统的可管理性、可扩展性和容错能力。此外,还将分享一些来自一线项目的经验教训,帮助读者更好地理解和应用这些理论到实际工作中去。 ####
71 0
|
2月前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
133 1
|
2月前
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
|
2月前
|
Java 开发者 微服务
从单体到微服务:如何借助 Spring Cloud 实现架构转型
**Spring Cloud** 是一套基于 Spring 框架的**微服务架构解决方案**,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。
302 69
从单体到微服务:如何借助 Spring Cloud 实现架构转型