目标

目标系统架构演变,单体-分布式-微服务-中台

微服务架构核心解决,横向对比1.0、2.0、3.0

践行微服务架构,全组件解读!

也谈中台

单体架构Monolithic

单体应用时代:应用程序就是一个项目,在一个进程里面运行。

简单-省事儿

电商UI->(自营、秒杀、超市、生鲜、金融)->DB

弊端就是东西都堆在一起,不能满足大数据高并发的诉求,逻辑太多,很难升级。

业务演进推动技术的发展。

垂直拆分

垂直拆分,独立部署和维护,分而治之!

优势:

1.独立开发、独立维护、独立演化;

2.更好的利用资源;

劣势:

1.进程间数据同步,分家时断不掉联系的,联系就麻烦了;

2.分布式的代价,使用数据库时对数据进行加锁,数据更新事务的问题;

3.代码重复问题,如支付、用户管理等问题;

分布式的第一要务就是不要使用分布式。

分布式服务

分布式:多个进程协作完成一件事儿,多进程抽取公用服务,分布式完成功能。

分布式代价很高。

例如,自营服务调用用户服务、支付服务、日志服务等,依次顺序调用,如果对应服务失败是否需要回退数据,以及对应数据的处理逻辑是如何处理的。

分布式事务、分布式锁、服务注册、服务发现、服务安全、服务治理等等,多个问题都需要解决。

新的问题,也是会被解决的,问题都被解决后,分布式就成了常规手段,轻松的用来高并发,而且都不仅仅于此,包括故意分拆满足扩展性。

微服务架构

分布式用到走火入魔,就是微服务。

微服务架构(Microsercice Architecture)是什么?

微服务架构就是一个用分布式服务拆分业务逻辑,完成解耦的架构模式(架构风格)。

微服务肯定是分布式的一种,是在分布式技术成熟之后,然后把分布式当成解耦手段来架构系统,是因为拆分服务很细致。

一个项目:三层架构-UI/BLL/DAL

微服务就是把BLL的方法独立成一个服务去调用。

构建微服务架构,其根基是什么?

把方法都拆成独立服务了,怎么样保证项目是可用的呢?

1.保证服务的高可用;

2.服务的可伸缩性;

微服务架构的三个版本的区别也是解决上面两个特性:v1.0、v2.0、v3.0。

微服务架构核心

基于集群去完成高可用以及伸缩性,集群就是多台服务器都做相同的事情,构建集群。

必须解决以下几个问题:

1.服务发现,调用方如何发现服务?

2.负载均衡,如何调用服务?

集中式代理-Nginx-v1.0

基于Nginx负载均衡,v1.0

1.服务发现,调用方如何发现服务?

2.负载均衡,如何调用服务?

服务发现:Nginx通过人工配置,指定服务配置数据,完成服务发现,服务伸缩如何处理?需要修改配置文件重启。

不能实现自动扩张,可以自动减少,如果减少时会自动重启Nginx,其自身的属性。

服务调用:由Nginx决定,比较省心。

客户端嵌入-Consul-v2.0

服务注册,非人工,怎么找服务的问题,有客户端决定调用的服务实例。

1.负载均衡;

2.服务注册与发现;

3.健康检查;

功能强大,自动发现-自动下线。

客户端集成复杂,负载均衡在客户端实现。

网络的环境是非常复杂的,要以最坏的情况来考虑。

目前用的比较主流。

服务网络-Service Mesh-v3.0

v3.0用的不多,华为+为品味,主机+代理,lstio

边车模式,限流、熔断均在sidecar中实现。

MicroService发展

1.0 Nginx-服务注册/发现问题

2.0 自动注册发现,熔断/限流/降级等服务治理

3.0 Service Mesh

都在无止境的包一层,没有什么技术问题是包一层不能解决的,如果有,就再包一层。

微服务架构2.0-网关-Gateway

网关的位置就明白了,主要用于服务治理,可以缓存数据,路由映射,限流,熔断,超时,降级

不响应是为了更好的响应。

客户端该如何调用服务?

进程间通信-共享存储

Redis、队列、第三方存储

进程通信-服务通信

WebService、WCF、WebAPI

进程通信-RPC

.NET Core、gRPC

鉴权&授权

基于token的安全验证体系。

在网关中实现,JWT、Identity Server 4.

瞬态故障处理

Polly是一种.NET弹性瞬态故障处理库,允许我们以非常顺畅和线程安全的方式来执行如进行充实、断流、超时、故障恢复等策略。

分布式追踪Skywalking-全链路追踪

分布式追踪和APM的Server端,它将包含Collector、Storage、独立的Web UI,并使用Open Tracing规范来设计追踪数据。

ExceptionLess or ELK

ExceptionLess:开源的日志收集和分析框架,能为应用程序提供实时错误、特性和日志报告。

统一的配置中心

Apollo:配置管理平台,能够集中化管理应用不同环境、不用集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。

分布式锁

单进程下,多线程操作同一个对象,可以使用lock锁保证只有一个线程可以进入。

多线程(分布式)下,如何保证该对象在任意时刻只能一个线程进入呢?

变量A是由状态的,不同故武器进程内跨进程的互斥机制来控制其共享资源的访问,这就是分布式锁。

分布式事务

分布式事务指事务的操作位于不同的节点上,需要保证事务的 AICD 特性。

例如在下单场景下,库存和订单如果不在同一个节点上,就涉及分布式事务。

1.两阶提交-2PC

2.补偿事务-TCC

3.本地消息表(异步确认)

4.MQ-事务消息

本地消息表

本地消息表与业务数据表处于同一个数据库中,这样就能利用本地事务来保证在对这两个表的操作满足事务特性,并且使用了消息队列来保证最终一致性。

  1. 在分布式事务操作的一方完成写业务数据的操作之后向本地消息表发送一个消息,本地事务能保证这个消息一定会被写入本地消息表中。

  2. 之后将本地消息表中的消息转发到 Kafka 等消息队列中,如果转发成功则将消息从本地消息表中删除,否则继续重新转发。

  3. 在分布式事务操作的另一方从消息队列中读取一个消息,并执行消息中的操作。

容器化

Docker是一个开源的应用容器引擎,可以打包应用以及以来包到一个可移植的镜像。

Build once run any where.

容器编排K8S

管理应用的全生命周期的工具,从创建应用/部署,应用提供服务,扩容缩容,更新,都非常的方便,与Docker结合使用。

CI/CD

Jenkins是一个开源的、提供友好操作界面的持续集成工具,主要用于持续、自动的构建/测试软件项目、监控外部任务的运行。

说明:文章内解决来自朝夕课堂培训课截图。

.NetCore3.1+微服务架构技术栈的更多相关文章

  1. .Net 微服务架构技术栈的那些事

    一.前言 大家一直都在谈论微服务架构,园子里面也有很多关于微服务的文章,前几天也有一些园子的朋友问我微服务架构的一些技术,我这里就整理了微服务架构的技术栈路线图,这里就分享出来和大家一起探讨学习,同时 ...

  2. Spring Cloud 微服务架构学习笔记与示例

    本文示例基于Spring Boot 1.5.x实现,如对Spring Boot不熟悉,可以先学习我的这一篇:<Spring Boot 1.5.x 基础学习示例>.关于微服务基本概念不了解的 ...

  3. JHipster生成微服务架构的应用栈(五)- 容器编排示例

    本系列文章演示如何用JHipster生成一个微服务架构风格的应用栈. 环境需求:安装好JHipster开发环境的CentOS 7.4(参考这里) 应用栈名称:appstack 认证微服务: uaa 业 ...

  4. 基于Golang设计一套微服务架构[转]

      article- @嘟嘟噜- May/26/2018 18:35:30 如何基于Golang设计一套微服务架构 微服务(Microservices),这个近几年我们经常听到.那么现在市面上的的微服 ...

  5. Spring Cloud 微服务架构解决方案

    1 理解微服务 1.1 软件架构演进 软件架构的发展经历了从单体结构.垂直架构.SOA架构到微服务架构的过程. 1.1.1 单体架构 特点: 1.所有的功能集成在一个项目工程中. 2.所有的功能打一个 ...

  6. 学习一下 SpringCloud (一)-- 从单体架构到微服务架构、代码拆分(maven 聚合)

    一.架构演变 1.系统架构.集群.分布式系统 简单理解 (1)什么是系统架构? [什么是系统架构?] 系统架构 描述了 在应用程序内部,如何根据 业务.技术.灵活性.可扩展性.可维护性 等因素,将系统 ...

  7. jhipser微服务架构介绍

    内容提要 本文涉及以下内容: 微服务架构介绍 spring cloud介绍 jhipster架构介绍 微服务架构介绍 微服务概念 微服务和SOA很相似,都是按照业务功能把系统拆分成一个一个的服务.比如 ...

  8. SpringCloud学习笔记(二):微服务概述、微服务和微服务架构、微服务优缺点、微服务技术栈有哪些、SpringCloud是什么

    从技术维度理解: 微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底 地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事, 从技术角度看就是一种小而独立的处理过程,类 ...

  9. JHipster生成微服务架构的应用栈(二)- 认证微服务示例

    本系列文章演示如何用JHipster生成一个微服务架构风格的应用栈. 环境需求:安装好JHipster开发环境的CentOS 7.4(参考这里) 应用栈名称:appstack 认证微服务: uaa 业 ...

  10. JHipster生成微服务架构的应用栈(三)- 业务微服务示例

    本系列文章演示如何用JHipster生成一个微服务架构风格的应用栈. 环境需求:安装好JHipster开发环境的CentOS 7.4(参考这里) 应用栈名称:appstack 认证微服务: uaa 业 ...

随机推荐

  1. devops|中小公司不要做研发效能度量

    我特别反感那些不顾公司现状一上来就想要做研发效能度量的人,尤其是想把研发效能度量当成锤子四处去敲打螺丝钉的人. 没几个人的小公司上来就做研发效能度量,就如同普通人一上来直接问媒婆怎么能娶到迪丽热巴.解 ...

  2. 【Zookeeper】(三)部署与使用、服务器节点动态上下线案例分析

    目录 Zookeeper部署与使用 1 分布式安装部署 配置服务器编号 增加zoo.cfg集群配置参数 2 启动集群服务器 3 启动集群客户端和命令 4 ️API的使用 引入依赖 创建客户端 创建节点 ...

  3. Ubuntu20.04 Docker搭建远程xfce桌面以及ssh教程

    简介:本文主要介绍ubuntu20.04容器中搭建xfce远程桌面.C++.Go环境.容器内docker操作配置. 一.创建容器1.创建容器 docker pull ubuntu:20.04docke ...

  4. Gin框架快速入门

    github地址: https://github.com/gin-gonic/gin 初体验 安装: $ go get -u github.com/gin-gonic/gin 简单实例: packag ...

  5. selenium部分知识点总结

    selenium部分总结 最近写了一个selenium自动化脚本. 基于此总结一些常用的代码 1. 用户输入换行符不终止输入 strings = '' s = input('请输入:(q停止输入)') ...

  6. js-函数记忆

    函数记忆: 指将上次的(计算结果)缓存起来,当下次调用时,如果遇到相同的(参数),就直接返回(缓存中的数据). 实现原理:将参数和对应的结果保存在对象中,再次调用时,判断对象 key 是否存在,存在返 ...

  7. Irwin-Hall 分布学习笔记

    定理:Irwin-Hall 分布 对于 \(n\) 个在 \([0,1]\) 内均匀分布的实数随机变量,它们的和不超过一个实数 \(z\) 的概率为: \[F(z)=\sum\limits_{k=0} ...

  8. 【由浅入深学MySQL】- MySQL连接查询详解

    本系列为:MySQL数据库详解,为千锋教育资深Java教学老师独家创作 致力于为大家讲解清晰MySQL数据库相关知识点,含有丰富的代码案例及讲解.如果感觉对大家有帮助的话,可以[点个关注]持续追更~ ...

  9. JavaScript 如何判断一个对象中是否有某个属性?

    今天讲讲,JavaScript 如何判断一个对象中是否有某个属性? 我总结了5个方法: 方法1: if(Obj[a]) {} 缺点:对于参数值为 undefined 和 0 的无效. 方法2: if( ...

  10. 2022-12-03:部门工资最高的员工。以下数据Max 和 Jim 在 IT 部门的工资都是最高的,Henry 在销售部的工资最高。sql语句如何写? 输出结果如下: department emp

    2022-12-03:部门工资最高的员工.以下数据Max 和 Jim 在 IT 部门的工资都是最高的,Henry 在销售部的工资最高.sql语句如何写? 输出结果如下: department empl ...