目标

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

微服务架构核心解决,横向对比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. 【SSM项目】尚筹网(二)基于Servlet3.0项目搭建:日志系统以及声明式事务

    1 日志系统 常见的日志系统实现log4j.JUL(jdk自带).log4j2.logback(和SLF4J同一个作者,能够天然衔接),这些实现就类似于java的接口实现,而SLF4J就类似于java ...

  2. Java学习笔记02

    1. 运算符和表达式 运算符 ​ 就是对常量或者变量进行操作的符号. ​ 如:+ - * / 表达式 ​ 用运算符把常量或者变量连接起来的,符合Java语法的式子就是表达式. ​ 如:a + b ​ ...

  3. 如何根据需求选择合适的数据库管理工具?Navicat OR DBeaver

    1.写在前面 在阅读本文之前,糖糖给大家准备了Navicat和DBeaver安装包,在公众号内回复"Navicat"或"DBeaver"或"数据库管理 ...

  4. 2021年蓝桥杯python真题-路径(数论+动态规划)(LCM、GCD和DP详细介绍)干货满满~

    欢迎大家阅读本文章 如果大家对LCM和GCD不是很熟悉,这篇文章将对你有帮助! 本文章也会把动态规划做一定的介绍 题目: GCD和LCM的讲解: GCD的实现-辗转相除法: 在数学中,辗转相除法,又称 ...

  5. Azure Devops上模版化K8s部署

    在2022年我们终于完成了主要业务系统上K8s的计划,在这里总结下我们上K8s时候的模版工程. 前提条件 本文不讨论K8s是什么,什么是容器化,为什么需要容器化,什么是微服务等这些基础内容,这些到处说 ...

  6. 2022-08-10:为了给刷题的同学一些奖励,力扣团队引入了一个弹簧游戏机, 游戏机由 N 个特殊弹簧排成一排,编号为 0 到 N-1, 初始有一个小球在编号 0 的弹簧处。若小球在编号为 i 的弹

    2022-08-10:为了给刷题的同学一些奖励,力扣团队引入了一个弹簧游戏机, 游戏机由 N 个特殊弹簧排成一排,编号为 0 到 N-1, 初始有一个小球在编号 0 的弹簧处.若小球在编号为 i 的弹 ...

  7. java中this的内存原理以及成员变量和局部变量

    this的内存原理 1.this的作用: 区分局部变量和成员变量 eg: public class Student{ private int age; public void method(){ in ...

  8. IBM小型机 - 检测码:B150B10C,设备卡住不运行

    检测码:B150B10C 问题 开机后,出现检测码:B150B10C,然后就卡在这里不动,无法进行下一步: 这里的错误码表示--机器的内存控制模块被deconfig(取消配置): 解决方法 登录cel ...

  9. 【GiraKoo】Java Native Interface(JNI)的空间(引用)管理

    Java Native Interface(JNI)的空间(引用)管理 Java是通过垃圾回收机制回收内存,C/C++是通过malloc,free,new,delete手动管理空间.那么在JNI层,同 ...

  10. 大三ACM第一次开会

    现在是2020.9.12,单说时间的话可能感知不太强,那么换个时间, 现在是大三上.按照设想,我应该已经退役. 会上,老李的语气不再激昂,满含着无奈与沧桑.面对围在桌前的大三们,终究还是提出了那个问题 ...