面向服务的软件系统-期末复习笔记

[TOC]

分布式微服务

CAP

image-20221029105633076

log4j.properties

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
log4j.rootLogger=debug, stdout, R
#log4j.rootLogger = [ level ] , appenderName, appenderName, …
#OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL
#Log4j有一个规则:只输出级别不低于设定级别的日志信息,假设Loggers级别设定为INFO,则INFO
#、WARN、ERROR和FATAL级别的日志信息都会输出,而级别比INFO低的DEBUG则不会输出。

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log

log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=5

log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

#org.apache.log4j.ConsoleAppender(控制台),
#org.apache.log4j.FileAppender(文件),
#org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
#org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
#org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

SOA

SOA(全称:Service Oriented Architecture),中文意思为 “面向服务的架构”,你可以将它理解为一个架构模型或者一种设计方法,而并不是服务解决方案。

其中包含多个服务, 服务之间通过相互依赖或者通过通信机制,来完成相互通信的,最终提供一系列的功能。一个服务通常以独立的形式存在与操作系统进程中。各个服务之间通过网络调用 。

跟 SOA 相提并论的还有一个 ESB(企业服务总线),简单来说ESB就是一根管道,用来连接各个服务节点。为了集成不同系统,不同协议的服务,ESB 可以简单理解为:它做了消息的转化解释和路由工作,让不同的服务互联互通;

我们将各个应用之间彼此的通信全部去掉,在中间引入一个ESB企业总线,各个服务之间,只需要和ESB进行通信,这个时候,各个应用之间的交互就会变得更加的清晰,业务架构/逻辑等,也会变得很清楚。

原本杂乱没有规划的系统,梳理成了一个有规划可治理的系统,在这个过程中,最大的变化,就是引入了ESB企业总线。

微服务架构

微服务架构其实和SOA架构类似,微服务是在SOA上做的升华。微服务架构重点强调的一个是”业务需要彻底的组件化和服务化”,原有的单个业务系统会拆分为多个可以独立开发、设计、运行的小应用。这样的小应用和其他各个应用之间,相互去协作通信,来完成一个交互和集成,这就是微服务架构。

每个微服务有自己私有的数据库持久化业务数据。

每个微服务只能访问自己的数据库,而不能访问其它服

务的数据库。

数据的去中心化,进一步降低了微服务之间的耦合度,

不同服务可采用不同数据库技术(SQLNoSQL等)。

在复杂的业务场景下,如果包含多个微服务,通常在客

户端或者中间层(网关)处理。

微服务的特征
1.通过服务实现组件化
2.按业务能力来划分服务和开发团队
3.去中心化
4.基础设施自动化(devops、自动化部署)

SOA 和微服务架构的差别

1.微服务去中心化,去掉ESB企业总线。微服务不再强调传统SOA架构里面比较重的ESB企业服务总线,同时SOA的思想进入到单个业务系统内部实现真正的组件化

2.Docker容器技术的出现,为微服务提供了更便利的条件,比如更小的部署单元,每个服务可以通过类似Node或者Spring Boot等技术跑在自己的进程中。

3.SOA注重的是系统集成方面,而微服务关注的是完全分离

考试

SOAP规定了哪些(部分)

zookeeper的follower和Leader

ESB包括哪些服务

什么是ESB

SOA是一种具体的技术吗

在SOA中为什么要用ESB,而不是点对点发消息

应用A发送消息给ESB,ESB再将消息转换给应用B,那么应用A直接通过SOAP协议发送给B,效率不是应该更高吗?而且如果这些IT系统都在一个网络中,提供的WebService都在统一命名空间下,就可以相互通信,为什么还要加上这一层?有两点需要考虑。第一点。点对点做服务的时候,通常需要考虑日志记录,服务访问安全、传输安全、数据安全、路由分发等一系列问题,而这些完全可以统一管理,统一验证,灵活配置,;如果应用A调用了应用B,在调用了应用C等具有逻辑流程的调用时,还可以在ESB上实现流程引擎;第二点,ESB是一个中间件平台,包含了消息中间件的全部功能,有异步消息处理机制,可以实现业务系统之间真正的松耦合的结构。

为什么ESB是SOA重要架构部分,而Dubbo却不使用ESB

负载均衡的意义

什么是负载均衡

持续集成CI

CICD

什么是CICD

幂等性,分布式服务系统中有哪些服务需要幂等性

分布式服务系统中有哪些服务

CAP

服务雪崩效应

单体架构应用和微服务架构应用区别

单体架构到SOA到微服务

dependecies作用

什么是消息队列

消息代理架构

SOAP

WSDL

etcd

DevOps理念

Docker会全面取代KVM吗

docker调度工具

docker的C/S

docker本身其实是一个server的形式存在着的,叫做docker daemon,也叫做dockerd,那么怎么与这个server进行通信呢?当然想到要用一个client客户端,client客户端有很多种形式,比如我们经常在命令行敲的docker工具,它就是一个client,另外比如windows或mac系统装的桌面版docker,那也是客户端(这个也可以操控dockerd),总之有很多形式的客户端。所以docker工作本身是一个client/server架构,客户端通过unix socket进程间通信的方式与服务端做信息交互(默认如果是与本地的dockerd交互的话是这么交互,如果是与远端的dockerd交互需要重新指定host及协议)

docker容器和镜像区别

Springcloud的优点

Jenkins优点

docker的优点

k8s的优点

SpringBoot优点

应用部署方式演变

在部署应用程序的方式上,主要经历了三个时代:

  • 传统部署:互联网早期,会直接将应用程序部署在物理机上

    优点:简单,不需要其它技术的参与

    缺点:不能为应用程序定义资源使用边界,很难合理地分配计算资源,而且程序之间容易产生影响

  • 虚拟化部署:可以在一台物理机上运行多个虚拟机,每个虚拟机都是独立的一个环境

    优点:程序环境不会相互产生影响,提供了一定程度的安全性

    缺点:增加了操作系统,浪费了部分资源

  • 容器化部署:与虚拟化类似,但是共享了操作系统

    优点:

    ​ 可以保证每个容器拥有自己的文件系统、CPU、内存、进程空间等

    ​ 运行应用程序所需要的资源都被容器包装,并和底层基础架构解耦

    ​ 容器化的应用程序可以跨云服务商、跨Linux操作系统发行版进行部署

容器化部署方式给带来很多的便利,但是也会出现一些问题,比如说:

  • 一个容器故障停机了,怎么样让另外一个容器立刻启动去替补停机的容器
  • 当并发访问量变大的时候,怎么样做到横向扩展容器数量

这些容器管理的问题统称为容器编排问题,为了解决这些容器编排问题,就产生了一些容器编排的软件:

  • Swarm:Docker自己的容器编排工具
  • Mesos:Apache的一个资源统一管控的工具,需要和Marathon结合使用
  • Kubernetes:Google开源的的容器编排工具
image-20200524150339551

如何配置jenkins和k8s的集成

什么是瀑布模型

什么是敏捷开发

SOA架构中分库分表的原理和实践方法

垂直分库

水平分库

以 rabbitMQ 为代表的现代消息中间件在微服务系统中主要解决了什么问题?

SLA的好处-可见资料

传统服务的质量评价和软件服务的质量评价

分布式服务系统中有哪些服务,详细一点

实验报告

基于服务的软件系统与你以往做过的软件有何区别?可以从软件结构、开发过程、调试方法等方面阐述。

1、 Dubbo框架与Zookeeper框架之间的关系是什么?如何将Zookeeper框架与Dubbo框架进行集成?

1、 Dubbo框架中的Dubbo-master的作用是什么?

1、 Dubbo框架下Service Provider发布服务的过程,及过程中的关键点。

1、 Dubbo框架下Service Consumer消费服务的过程,及过程中的关键点。

实验3

1、 容器虚拟化和传统虚拟化的区别是什么?

如何实现k8s自动部署

1、 Kubernetes有哪些核心组件,其功能是什么?

实验4

1、 如果你要从头开发一个基于微服务架构的项目,项目中的服务最终要部署在k8s管理的镜像环境中,你认为应如何创建项目?与手动部署实验过程相比,哪些改进可以让开发更加合理高效?

1、 如何将k8s中多个provider服务实例的负载均衡策略改为轮询调用?即在多次反复调用时轮流调用各个服务实例。


面向服务的软件系统-期末复习笔记
http://yoursite.com/2023/04/21/面向服务/
作者
Fars
发布于
2023年4月21日
许可协议