面向服务的软件系统-期末复习笔记
[TOC]
分布式微服务
CAP
log4j.properties
1 |
|
SOA

SOA(全称:Service Oriented Architecture),中文意思为 “面向服务的架构”,你可以将它理解为一个架构模型或者一种设计方法,而并不是服务解决方案。
其中包含多个服务, 服务之间通过相互依赖或者通过通信机制,来完成相互通信的,最终提供一系列的功能。一个服务通常以独立的形式存在与操作系统进程中。各个服务之间通过网络调用 。
跟 SOA 相提并论的还有一个 ESB(企业服务总线),简单来说ESB就是一根管道,用来连接各个服务节点。为了集成不同系统,不同协议的服务,ESB 可以简单理解为:它做了消息的转化解释和路由工作,让不同的服务互联互通;
我们将各个应用之间彼此的通信全部去掉,在中间引入一个ESB企业总线,各个服务之间,只需要和ESB进行通信,这个时候,各个应用之间的交互就会变得更加的清晰,业务架构/逻辑等,也会变得很清楚。
原本杂乱没有规划的系统,梳理成了一个有规划可治理的系统,在这个过程中,最大的变化,就是引入了ESB企业总线。

微服务架构
微服务架构其实和SOA架构类似,微服务是在SOA上做的升华。微服务架构重点强调的一个是”业务需要彻底的组件化和服务化”,原有的单个业务系统会拆分为多个可以独立开发、设计、运行的小应用。这样的小应用和其他各个应用之间,相互去协作通信,来完成一个交互和集成,这就是微服务架构。
每个微服务有自己私有的数据库持久化业务数据。
• 每个微服务只能访问自己的数据库,而不能访问其它服
务的数据库。
• 数据的去中心化,进一步降低了微服务之间的耦合度,
不同服务可采用不同数据库技术(SQL、NoSQL等)。
在复杂的业务场景下,如果包含多个微服务,通常在客
户端或者中间层(网关)处理。
微服务的特征
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开源的的容器编排工具

如何配置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服务实例的负载均衡策略改为轮询调用?即在多次反复调用时轮流调用各个服务实例。
