后端架构学习

news2024/12/28 2:33:40

心理预期

1. 什么是后端服务的架构?怎么去理解后端架构这个词?

  • 学习架构的目的:可以更高效的解决复杂的业务问题和技术问题。对架构设计的一知半解会导致,设计不足或者多度设计的现象。
  • 架构师思考问题的角度
    • 按出发点划分
      • 从系统整体的角度思考问题,而不是专注某个小模块
      • 不仅要从技术的角度思考问题,更要从业务的角度思考问题,不要发错力
      • 要在有限的资源下,找到一个最优解
    • 从是否具有技术性划分
      • 业务架构:关注扩展性和复用性,描述业务模块间的关系,从业务概念上帮助去理解问题
      • 应用架构:讲系统内部有哪些应用,相互之前如何调用,从逻辑层面讲清楚系统内部的分工协作
      • 技术架构:关注高可用,高性能,可伸缩。讲清楚系统由哪些硬件,操作系统,中间件组成
    • 架构的本质:通过合理的编排,在保证能力实现的情况下,减少系统演进过程中的熵增量,这里的熵增来源于业务的复杂和技术的复杂。
    • 一个好的架构师应该是什么样的

2. 后端架构需要关注哪些事情?

3. 日常应该怎么去积累架构的能力?

4. 产品经理和业务架构师做的事情到底有什么不同?

  •   产品经理的职责
    • 需要告诉用户系统长什么样,需要告诉开发实现了什么样的功能
    • 收集用户的原始需求,整理成一个个的业务流程。每个业务流程有多个业务步骤,每个步骤又有输入和输出和实现的功能。如:
  • 业务架构师
    • 就是把业务流程和节点打散,按照业务域的维度来划分系统模块,并定义这些模块之间的关系,最终形成一个高度结构化的模块体系
    • 业务架构师在设计架构的时候需要关注的点
      • 业务的可扩展性:快速且稳定的开发新的功能
      • 业务的复用性:同样的东西可以不用开发,直接利用。
      • 像支付宝的架构,其实就满足这样的能力。
    • 如何做好复用性:模块的职责定位要非常清晰,数据模型和业务规则设计的要相对固定和通用,做好层次划分(一个底层的复用性会更强)。不管是从全业务的角度上说某个系统的复用性;还是某个系统的中某个模块的的复用性。
    • 从公司整体全盘业务的角度考虑,如支付宝的业务架构变化
    • 这个第三支付的业务图,也很好的说明了系统复用性的问题
    • 5. 如何构建一个柔性的系统?
      • 这个问题说的是如何提高一个系统的扩展性
        • 扩展性说是什么?一个系统的扩展性高,我的理解是新增一个功能,所花费的工作量少,并且对历史功能的影响小。那么想做的上面的两点。我认为下面的几点非常重要:1是要控制系统的复杂度,当一个系统的复杂度高了,想新增一些简单的功能都会变得非常困难。而控制系统复杂度的一个有效方法就是分模块分层,如微服务的思想,中台的思想。2是要提高系统的复用性,当系统或者是模块变得可复用了,可以较少很多重复的工作,同时也降低了系统的复杂度。而提高系统的复用度的关键是要构建一个通用且稳定的数据模型。封装也是一个很好的提供复用和减少复杂度的方法。

5. 架构发展的历史

这里的架构说的是后端的架构的发展。如果要包括前端的话,基本上采用的都是c/s的架构模式

  1. 单体架构:企业的指一个应用,这一个应用可以是部署单台机器或者是多台机器
  2. soa架构:整个系统拆分成多个应用,这是种模块划分的思想;应用之之间通过esb总线的方式进行通信
  3. 微服务架构:其实算是soa架构的一种实现方式,微服务的拆分方式就是soa的服务拆分的具体方式,服务之间有的组册中心,也是esb的具体实现方式。但是微服务的服务划分会更细致,组册中心也更轻量,相比soa中的定义有些小小的却别。
  4. 中台架构:具体的实现方式,也是采用了微服务的架构。但是在微服务的基础概念上映入的分层的概念,它将一些业务上一些共性的,基础的,稳定的,复用性的,能力向下沉淀形成一个基础服务。将一些易变化的,业务相关性强的的逻辑,向上升浮,形成业务服务。通过过基础服务的复用性的提高,来提高整个系统的复用性,同时降低整个企业系统设计的复杂度。而微服务重点提出的是将模块独立成应用的概念,还是不一样的。

6. 要提高系统的复用性需要做好哪些事情?

  • 模块边界要划分清楚,模块/系统的职责要定位清晰(要遵守的原则:完整性,指数据要完整;一致性,拥有的数据和提供的功能要一致;正交原则,既然是基础服务,它们就处于调用链的底层,服务之间不会有任何的调用关系,也就是说基础服务相互之间是正交的。比如说会员服务和商品服务,它们代表不同维度的基础业务域,彼此之间不会有调用关系。)
  • 模块/系统的数据模型要抽象化,也就是说数据模型的设计要通用性强,要考虑整合所有业务的场景
  • 对外提供的接口/消息,也要做到复用性高。如果拿数据的颗粒度来说,不同的业务场景需要的数据的颗粒度是不一样的,比如说商品信息吧,有些场景需要商品的基本信息就可以了,但是有些场景又需要商品的图片,视频,规格等信息。并且这两种场景返回的数据量的差异又极大。所以不管是接口也好还是对外发送的消息也好,都可以考虑提供不同颗粒度的信息。如商品查询接口提供细,中,粗颗粒度的接口,消息也可以提供胖/瘦两种消息体。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux虚拟机忘记密码

Linux虚拟机忘记密码 使用虚拟机过程中,我们有时会忘记root的登录密码,我们需要进入救援模式去命令passwd更改新的密码。 编辑模式(e) 在首页,按住e,进入编辑模式,找到LANGzh_CN.UTF-8,在末尾加上 init/bin/sh 挂载…

学长教你学C-day10-C语言数组

“同学们,我们前面讲过了变量和数据类型,我们来复习一下,用C语言变量存储数据1~10,然后再输出。小明小红你们上黑板来写,其他人写纸上就可以。” 小明和小红走向讲台拿起粉笔写下: 小红: #incl…

VS操作笔记1:添加项目与查看定义

1 在解决方案中添加项目 右击解决方案 点击“添加”——“新建项目”—— 创建新项目的方法与创建第一个时一样 创建之后,项目结构如下: 现在是两个项目,第一个c_test项目名称字体明显加粗,说明这是主项目,编译的时…

【Go基础】切片

切片 1. 切片的定义 切片(slice)是Golang中独有的数据类型。 数组有特定的用处,但是有不足之处 :运行时长度不可变。切片是随处可变的,它构建在数组之上,并且提供更强大的能力和便捷。 切片&#xff08…

vite构建vue项目目录简介

文章目录1.项目目录介绍2.开发插件安装3.vue组件中的语法规范(SFC 语法规范)4.npm run dev命令执行过程1.项目目录介绍 public 下面的不会被编译 可以存放静态资源assets 下面可以存放可编译的静态资源components 下面用来存放我们的组件App.vue 是全局组件main ts 全局的ts文…

react基础Day01-React概述脚手架搭建JSX组件

React基础知识点 目标 能够说出React是什么能够说出React的特点能够掌握React的基本使用能够使用React脚手架 什么是React (★★★) React是一个用于构建用户界面的javaScript库,起源于facebook的内部项目,后续在13年开源了出…

Mysql入门技能树-时间日期函数(二)-练习篇

EXTRACT 关于 Extract 操作和其它日期时间函数的对应关系,下列说法正确的是: 1.extract(mirosecond from date) 相当于 ms(date) 2.extract(second from date) 相当于 second(date) 3.extract(minute from date) 相当于 minute(date) 4.extract(hour f…

IO流(二)

1.对象流-ObjectInputStream和ObjectOutputStream(处理流包装流)的基本原理 看一个需求: 1.将int num100这个int数据保存到文件中,注意不是100数字,而是int 100,并且,能够从文件中直接恢复int 100 2.将Dog …

Excel工具类实现——基于poi5.2.3

初衷仅是因为网上的Excel工具类不是太老旧的方法,就是不是很满足我想法,就想要自己搞一个,不过还不支持合并单元格等复杂的操作,后续看看能不能优化,有大神有更好的方法,可以公众号联系我,让我学…

基于jsp+mysql+Spring的SpringBoot美容院预约管理系统设计和实现

基于jspmysqlSpring的SpringBoot美容院预约管理系统设计和实现 博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文…

编制万年历的历程

初入编程之道的学子大都试编过万年历。万年历有二种:一为只有西历的月历,另一为有农历对照的月历或日历。编写万年历程序可以练练手,加深对编程语言的理解。记得我初入此道是在1994年,我那时刚买了486电脑,也刚开始有视…

概率论基本概念

全概率公式 P(B)P(BA1)P(BA2)...P(BAn) P(B) P(B|A1)P(A1) P(B|A2)P(A2) ... P(B|An)P(An)P(BA1)P(BA2)...P(BAn) 事件A1,A2,…构成一个完备事件组且都有正概率 某一个事件概率 这个事件*其他完备事件划分联合概率之和 联合概率 联合概率指的…

线程安全问题(2)

锁的相关知识: 1)这就是类似于说我们ATM机上面有一把锁,同一时刻,如果说人们之间不相互认识,那么通过这把锁就进行限制了说就限制了说一次只能有一个人来进来取钱,我们通过这样的锁,就可以来进行避免上述这…

ESP8266 Arduino开发 搭建web服务器与客户端开发

一、wifi 相关配置 1.1 无线终端 wifi 模式 此模式中&#xff0c;esp8266 会连接到指定 wifi 进行工作。 #include <ESP8266WiFi.h> // 本程序使用ESP8266WiFi库const char* ssid "home"; // 连接WiFi名&#xff08;此处使用home为示例&…

位运算相关

1.与运算 &#xff08;点我&#xff09; 这个题的大概意思&#xff1a;给222个数nnn和xxx&#xff0c;其中满足n&(n1)&(n2)&(n3)...&mxn\&(n1)\&(n2)\&(n3)...\&mxn&(n1)&(n2)&(n3)...&mx,求最小的mmm&#xff0c;只要满足m&g…

【异常】java11提示: Cannot find any provider supporting RSA/ECB/PKCS1Padding的问题

一、背景 项目中需要对敏感字段进行加密&#xff0c;但是加密方法中涉及到比较复杂的加密算法&#xff0c;这些算法都需要一个Provider&#xff0c;主要是用于初始化算法的。 以下是遇到的具体问题 二、报错截图 java.security.NoSuchAlgorithmException: Cannot find any pr…

【软件测试】软件测试模型

1. V模型 需求分析—计划—设计—编码—测试 ● 概要设计&#xff1a;设计整体架构&#xff0c;框架 ● 详细设计&#xff1a;模块和模块之间的详细设计 ● 集成测试&#xff0c;单元测试&#xff1a;通常由开发人员进行 特点&#xff1a; 明确标注了测试的多类型明确标注了测…

Introduction to Multi-Armed Bandits——01 Scope and Motivation

Introduction to Multi-Armed Bandits——01 Scope and Motivation 参考资料 Slivkins A. Introduction to multi-armed bandits[J]. Foundations and Trends in Machine Learning, 2019, 12(1-2): 1-286.项目地址 https://github.com/yijunquan-afk/bandit-learning Bandit…

LeetCode622.设计循环队列

设计循环队列1.题目描述2.思路3.代码实现以及分析3.1 创建结构体3.2创建一个具体的循环队列3.3判断是否为空 和 判断是否为满4. 进队列 和 出队列5.取队首和队尾元素6.释放空间7.总结1.题目描述 设计循环队列 2.思路 环形队列的抽象图 我们这里使用数组模拟实现循环队列&…

TransactionTemplate自动注入,只看这一篇文章就够了

标准的springboot接入mybatis步骤 1.引入了对应的依赖包 2.应用的properties下增加相应配置 3.根据配置进行自动装配 一般我们会配置这些信息&#xff0c;主要包括三类 1.数据库的连接信息 2.指定的数据源类型 3.mybatis的配置信息 配完以后&#xff0c;当你启动SpringBoot的主…