微服务入门|微服务架构怎么设计

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微服务入门|微服务架构怎么设计相关的知识,希望对你有一定的参考价值。

参考技术A

将一个单体应用拆分成一组微小的服务组件,每个微小的服务组件运行在自己的进程上,组件之间通过如RESTful API这样的轻量级机制进行交互,这些服务以业务能力为核心,用自动化部署机制独立部署,另外,这些服务可以用不同的语言进行研发,用不同技术来存储数据

通过以上的定义描述,我们可以基本确定给出微服务的节特征:

用微服务来进行实践到生产项目中,首先要考虑一些问题。比如下图的微服务业务架构:

在上图图表展示的架构图中,我们假设将业务商户服务A、订单服务B和产品服务C分别拆分为一个微服务应用,单独进行部署。此时,我们面临很多要可能出现的问题要解决,比如:

1、客户端如何访问这些服务?

2、每个服务之间如何进行通信?

3、多个微服务,应如何实现?

4、如果服务出现异常宕机,该如何解决?

以上这些都是问题,需要一个个解决。

在单体应用开发中,所有的服务都是本地的,前端UI界面,移动端APP程序可以直接访问后端服务器程序。

现在按功能拆分成独立的服务,跑在独立的进程中。如下图所示:

此时,后台有N个服务,前台就需要记住管理N个服务,一个服务 下线 更新 升级 ,前台和移动端APP就要重新部署或者重新发包,这明显不服务我们拆分的理念。尤其是对当下业务需求的飞速发展,业务的变更是非常频繁的。

除了访问管理出现困难以外,N个小服务的调用也是一个不小的网络开销。另外,一般微服务在系统内部,通常是无状态的,而我们的用户在进行业务操作时,往往是跨业务模块进行操作,且需要是有状态的,在此时的这个系统架构中,也无法解决这个问题。传统的用来解决用户登录信息和权限管理通常有一个统一的地方维护管理(OAuth),我们称之为授权管理。

基于以上列出的问题,我们采用一种叫做网关(英文为API Gateway)的技术方案来解决这些问题,网关的作用主要包括:

网关(API Gateway)可以有很多广义的实现办法,可以是一个软硬一体的盒子,也可以是一个简单的MVC框架,甚至是一个Node.js的服务端。他们最重要的作用是为前台(通常是移动应用)提供后台服务的聚合,提供一个统一的服务出口,解除他们之间的耦合,不过API Gateway也有可能成为 单点故障 点或者性能的瓶颈。

最终,添加了网关(API Gateway)的业务架构图变更为如下所示:

所有的微服务都是独立部署,运行在自己的进程容器中,所以微服务与微服务之间的通信就是IPC(Inter Process Communication),翻译为进程间通信。进程间通信的方案已经比较成熟了,现在最常见的有两大类: 同步调用、异步消息调用

同步调用

同步调用比较简单,一致性强,但是容易出调用问题,性能体验上也会差些,特别是调用层次多的时候。同步调用的有两种实现方式:分别是 REST RPC

基于REST和RPC的特点,我们通常采用的原则为: 向系统外部暴露采用REST,向系统内部暴露调用采用RPC方式。

异步消息的方式在分布式系统中有特别广泛的应用,他既能减低调用服务之间的耦合,又能成为调用之间的缓冲,确保消息积压不会冲垮被调用方,同时能保证调用方的服务体验,继续干自己该干的活,不至于被后台性能拖慢。需要付出的代价是一致性的减弱,需要接受数据 最终一致性 ,所谓的最终一致性就是只可能不会立刻同步完成,会有延时,但是最终会完成数据同步;还有就是后台服务一般要实现 幂等性 ,因为消息发送由于性能的考虑一般会有重复(保证消息的被收到且仅收到一次对性能是很大的考验)。最后就是必须引入一个独立的 Broker,作为中间代理池。

常见的异步消息调用的框架有:Kafaka、Notify、MessageQueue。

最终,大部分的服务间的调用架构实现如下所示:

在微服务架构中,一般每一个服务都是有多个拷贝,来做负载均衡。一个服务随时可能下线,也可能应对临时访问压力增加新的服务节点。这就出现了新的问题:

这就是服务的发现、识别与管理问题。解决多服务之间的识别,发现的问题一般是通过注册的方式来进行。

具体来说:当服务上线时,服务提供者将自己的服务注册信息注册到某个专门的框架中,并通过心跳维持长链接,实时更新链接信息。服务调用者通过服务管理框架进行寻址,根据特定的算法,找到对应的服务,或者将服务的注册信息缓存到本地,这样提高性能。当服务下线时,服务管理框架会发送服务下线的通知给其他服务。

常见的服务管理框架有:Zookeeper等框架。

如上的问题解决方案有两种具体的实现,分别是: 基于客户端的服务注册与发现 基于服务端的服务注册与发现

优点是架构简单,扩展灵活,只对服务注册器依赖。缺点是客户端要维护所有调用服务的地址,有技术难度,一般大公司都有成熟的内部框架支持。

优点是所有服务对于前台调用方透明,一般小公司在云服务上部署的应用采用的比较多。

前面提到,单体应用开发中一个很大的风险是,把所有鸡蛋放在一个篮子里,一荣俱荣,一损俱损。而分布式最大的特性就是网络是不可靠的。通过微服务拆分能降低这个风险,不过如果没有特别的保障,结局肯定是噩梦。

因此,当我们的系统是由一系列的服务调用链组成的时候,我们必须确保任一环节出问题都不至于影响整体链路。相应的手段有很多,比如说:

Java开发入门教程!java研发工程师技术要求

微服务架构

第1章 微服务概述

  • 什么是微服务
  • 常见的微服务组件
  • 常用的微服务框架
  • 微服务架构设计模式
  • 如何实施微服务

从微服务的起源和现实业务的角度探讨微服务

Github标星67.9k的微服务架构以及架构设计模式笔记我粉了

第2章 微服务设计原则

  • 设计原则之分层架构
  • 设计原则之统一通信协议
  • 设计原则之单一职责
  • 设计原则之服务拆分
  • 设计原则之前后端分离
  • 设计原则之版本控制
  • 设计原则之围绕业务构建
  • 设计原则之并发流量控制
  • 设计原则之CAP
  • 设计原则之EDA事件驱动
  • 设计原则之CQRS
  • 设计原则之基础设施自动
  • 设计原则之 数据一致性
  • 设计原则之设计模式
  • 设计原则之DevOps
  • 设计原则之无状态服务

针对微服务的设计理念进行整理,包括服务如何拆分、前后端分离、CAP理论和CQRS等,是一个高层次的指导原则。

Github标星67.9k的微服务架构以及架构设计模式笔记我粉了

第3章 微服务之Spring Boot

  • 一切从简单开始
  • 快速集成第三方的Starter
  • 降低开发复杂度之面向切面
  • 并不复 杂的持久化.
  • Web开发
  • 懒人的接口文档管理.
  • 优化的调度
  • 健康是永恒的主题
  • 强强联合之整合Dubbo

详细地介绍SpringBoot的开发,包括使用它的优缺点,以及在企业级开发中常用的工具包的整合,包括面向切面编程、Web开发、文档管理和调度管理,最后结合Dubbo完成一个示例性的分布式工程。

第4章 微服务之Docker

  • Docker原理
  • 更轻量级的虚拟化
  • 三个概念理解Docker
  • Dockerfile定制一切
  • Docker网络
  • Docker 数据卷
  • Spring Boot与Docker
  • 搭建自己的镜像仓库
  • Kubernetes
  • 私有云整体架构

主要讲解Docker的基础操作,介绍微服务中所用到的容器相关的技术,最后给出通用的基于容器的私有云架构。

Github标星67.9k的微服务架构以及架构设计模式笔记我粉了

第5章 微服务之Spring Cloud

  • 注册中心
  • 负载均衡
  • 微服务容错 (Hystrix)
  • 分布式配置中心
  • API 网关
  • 消息总线(Spring Cloud Bus)

对SpringCloud实现微服务的几个重要框架进行展开描述,让读者了解注册中心、负载均衡、容错、分布式配置、网关和消息总线,能够完成开发层面的微服务架构。

Github标星67.9k的微服务架构以及架构设计模式笔记我粉了

第6章 微服务之Spring Cloud其他框架

  • Spring Cloud Consul
  • Spring Cloud ZooKeeper
  • Spring Cloud archaius
  • Spring Cloud Task
  • Spring Cloud Security
  • Spring Cloud Sleuth
  • Spring Cloud Stream
  • Spring Cloud Data Flow

对Spring Cloud的非核心框架进行介绍,包括Consul、ZooKeeper、安全框架和数据流框架。

第7章 微服务之自动化测试与质量管理

  • 微服务测试
  • 单元测试
  • API测试
  • A/B测试
  • 冒烟和回归测试
  • 静态代码分析
  • SonarQube 质量监控

主要对测试和质量管理进行介绍,测试部分包括单元测试、A/B 测试、冒烟和回归测试,质量管理部分主要使用静态代码分析,并且基于SonarQube对代码进行静态检查,以及分析代码的总体质量。

第8章 微服务之JHipster

  • JHipster技术列表
  • Angular简介
  • 快速开始JHipster
  • 目录结构
  • 构建微服务应用
  • 基础配置

对微服务的最佳实践JHipster进行系统的介绍,并且对JHipster 部分内容做了处理,还将在国内不是很流行的部分进行了处理,尽可能详细地介绍JHipster的应用和配置。

Github标星67.9k的微服务架构以及架构设计模式笔记我粉了

第9章 微服务之自动化部署

  • 私有仓库搭建
  • Ansible
  • 持续集成
  • 灰度发布

主要对自动化部署进行介绍,因为微服务的目的不仅仅是简化开发,而且能够提高整个团队的运行效率。所以私服的使用和自动化运维就显得非常重要。

Github标星67.9k的微服务架构以及架构设计模式笔记我粉了

第10章 微服务之日志收集与监控

  • ELK搜集与分析
  • 系统监控
  • 运维监控
  • APM监控
  • Pinpoint 的安装与使用

主要讲解日志收集和APM监控,对于线上系统来说,出现问题的概率还是非常大的,如何快速定位并第一时间找到问题所在的点就显得非常重要。APM部分对常用的监控工具进行列举,重点介绍Pinpoint,对使用和邮件告警也进行了重点介绍。

Github标星67.9k的微服务架构以及架构设计模式笔记我粉了

第11章 完整示例

  • 安装 Lombok
  • PiggyMetrics
  • 整体架构
  • 安装和运行

通过对PiggyMtrics的全面讲解,让读者能够了解一个简单的微服务架构所包含的技术点和构建原则,并且实际部署微服务,完成业务的基础操作。

Github标星67.9k的微服务架构以及架构设计模式笔记我粉了

第12章 微服务核心功能推荐

  • 工作流引擎
  • 规则引擎
  • 调度系统
  • 消息推送
  • 网关中间件
  • 分库分表中间件
  • 报表引擎
  • 数据处理
  • 并发编程
  • 分布式配置
  • CAS
  • WebFlux

对在微服务构建过程中可能涉及的技术点进行讲解,包括工作流引擎、规则引擎、调度系统、分布式配置及单点登录。

Github标星67.9k的微服务架构以及架构设计模式笔记我粉了

这份实战文档从微服务的思想基础、设计原则,延伸到Spring Boot. Docker. Spring Cloud及其他框架的介绍,不仅涉及微服务的自动化测试与质量管理、自动化部署、日志收集与监控,还提供完整的实战示例。全书清晰、透彻地剖析了微服务的整个生态,有助于大家快速提升对微服务的认知,构建自己的架构体系。

微服务架构设计模式

这份文档围绕微服务的架构设计,深入浅出地介绍了微服务与SOA等其他架构的区别,软件系统服务的拆分策略,微服务的同步和异步通信模式,如何使用微服务进行事务管理,如何在微服务架构中设计业务逻辑。同时详细描述了微服务架构中的测试和生产部署策略。对设计微服务架构有很好的指导作用。

由于篇幅限制就不细细展开文档内容了,这份文档总共有13个章节

  • 第1章 逃离单体地狱

Github标星67.9k的微服务架构以及架构设计模式笔记我粉了

  • 第2章 服务的拆分策略
  • 第3章 微服务架构中的进程间通信

Github标星67.9k的微服务架构以及架构设计模式笔记我粉了

  • 第4章 使用Saga管理事务
  • 第5章 微服务架构中的业务逻辑设计

Github标星67.9k的微服务架构以及架构设计模式笔记我粉了

  • 第6章 使用事件溯源开发业务逻辑
  • 第7章 在微服务架构中实现查询

Github标星67.9k的微服务架构以及架构设计模式笔记我粉了

  • 第8章 外部API模式

Github标星67.9k的微服务架构以及架构设计模式笔记我粉了

  • 第9章 微服务架构中的测试策略(上)

Github标星67.9k的微服务架构以及架构设计模式笔记我粉了

  • 第10章 微服务架构中的测试策略(下)
  • 第11章 开发面向生产环境的微服务应用

Github标星67.9k的微服务架构以及架构设计模式笔记我粉了

  • 第12章 部署微服务应用
  • 第13章 微服务架构的重构策略

Github标星67.9k的微服务架构以及架构设计模式笔记我粉了

最后,附一张自己面试前准备的脑图:

image

面试前一定少不了刷题,为了方便大家复习,我分享一波个人整理的面试大全宝典

  • Java核心知识整理

image

  • Spring全家桶(实战系列)

image.png

Step3:刷题

既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。

以下是我私藏的面试题库:

image

很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。

资料领取方式:Java全套学习手册

是面试前期准备过程中非常重要的一点。

以下是我私藏的面试题库:

[外链图片转存中…(img-s9QUzaFF-1626078559039)]

很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。

资料领取方式:Java全套学习手册

以上学习资料均免费分享,最后祝愿各位身体健康,顺利拿到心仪的offer!

以上是关于微服务入门|微服务架构怎么设计的主要内容,如果未能解决你的问题,请参考以下文章

Java开发入门教程!java研发工程师技术要求

使用istio治理微服务入门

使用Istio治理微服务入门

使用Istio治理微服务入门

技术漫谈 | 使用Istio治理微服务入门

java写入文件怎么换行,经验分享