云原生
2021-09-26 17:05:09 3 举报
AI智能生成
云原生架构
作者其他创作
大纲/内容
认识云原生
云原生结构图
描述
云是云原生的基础,为上层应用的运行提供了计算、网络、存储等基础资源
容器为应用在云上运行提供了平台,即应用运行在容器上,例如Docker;
容器编排主要负责编排容器、管理容器的生命周期,负责容器间的网络通信、存储等等。
实现了从单容器应用向多机器集群、多容器协同工作的模式转变。
容器编排主要负责编排容器、管理容器的生命周期,负责容器间的网络通信、存储等等。
实现了从单容器应用向多机器集群、多容器协同工作的模式转变。
应用架构层面,用户可以根据应用使用场景来选择微服务架构(Microservices)或者是无服务器架构(Serverless)
在复杂的交互场景当中,通过 服务网格(Service Mesh) 实现对应用服务的治理,主要是对服务间的通讯进行管控。
通过DevOps构建一个应用架构 持续集成、持续交付、持续部署(CI / CD)不断迭代更新的运维正向循环。
Landscape图 & 路线图
https://landscape.cncf.io
云原生社区
https://cloudnative.to/
容器
什么是容器?
Linux Container(简称LXC)它是一种内核轻量级的操作系统层虚拟化技术。Linux Container主要由 Namespace 和 Cgroup 两大机制来保证实现。
容器技术有哪些
Docker
Docker 使用结构图
Docker 镜像原理
UnionFS(联合文件系统):Union文件系统是Docker镜像的基础,镜像可以通过分层来继承,基于基础镜像可以制作具体的应用镜像。
比较常用的操作系统镜像
BusyBox
Alpine
Ubuntu
CentOS
Docker 命令
docker命令
docker --version
查看 docker 的版本信息
docker info
查看 docker 信息
docker inspect
docker inspect 镜像名:tag
查看某一个镜像的详细信息
docker inspect 镜像名:tag -f {{.Architecture}}
可以查询镜像的某一部分信息:-f {{.项目.项目}}
如果一个项目下有好几条项目,则会将它们返回一个数组
如果一个项目下有好几条项目,则会将它们返回一个数组
docker login ip:port
登录 docker 仓库
docker logout ip:port
登出docker仓库
镜像命令
docker images
显示信息
Name[镜像名] Tag[镜像标签] Image ID[镜像的ID] CreatedTime[创建时间] Size[镜像大小]
-a:列出所有的镜像文件(包括中间镜像)
-q:仅输出镜像 ID
-f:显示过滤后的镜像
docker images -f "key=value"
其中 key可以设置为以下几个:
dangling:显示标记为空的镜像,值只有true和false
label:这个是根据标签进行过滤,其中lable的值,是docker在编译的时候配置的或者在Dockerfile中配置的
before:这个是根据时间来进行过滤,其中before的value表示某个镜像构建时间之前的镜像列表
since:跟before正好相反,表示的是在某个镜像构建之后构建的镜像
reference:这个是添加正则进行匹配
dangling:显示标记为空的镜像,值只有true和false
label:这个是根据标签进行过滤,其中lable的值,是docker在编译的时候配置的或者在Dockerfile中配置的
before:这个是根据时间来进行过滤,其中before的value表示某个镜像构建时间之前的镜像列表
since:跟before正好相反,表示的是在某个镜像构建之后构建的镜像
reference:这个是添加正则进行匹配
--digests:显示镜像的摘要信息
docker tag old_name:tag new_name:tag
此次替换不会删除原来的镜像,会生成一个新的docker镜像
docker pull <镜像名>:<tag>
拉取镜像。如果没有标签的话,默认拉最新的latest。
docker push IP:Post/Name:Tag
向 Registry 中推送 镜像
docker push 10.16.3.6:8083/mydocker:v3.0
docker load -i <镜像文件>
导入镜像,镜像文件一般为tar包
docker save -o <保存的镜像文件名> Name:tag
docker commit [option] CONTAINER [REPOSITORY[:TAG]]
option
-a:提交镜像的作者
-c:使用Dockerfile指令创建镜像
-m:提交的文字说明
-p:在commit时,将容器暂停
docker run
-it <镜像名>:tag /bin/sh
交互式的将一个镜像运行为容器。
-d 镜像名:tag
后台模式,退出容器不会停止容器
-v:宿主机目录:容器目录
-p:映射指定的端口。-p80:81—宿主机端口:容器内部端口
-P
Docker 会映射一个 49000~49900的宿主机端口到容器
--name:给容器起名字
--rm
容器创建后退出容器,容器就会被删除,不加--rm,容器退出后只是停止运行,并且保存数据
docker rmi <镜像名>:tag
删除镜像。可以同时删除多个镜像
docker rmi <镜像ID>
-f
强制删除镜像
当一个镜像拥有多个标签的时候,docker rmi 只是删除了多个镜像标签中的其中一个,并不会删除镜像文件,如果当镜像文件只剩下一个标签时,删除该标签会删除镜像文件。
如果有容器依赖镜像时,需要先删除容器,再删除镜像。
docker search <name>
搜索远端仓库中的 docker 镜像,默认Docker Hub
docker history <镜像名>:tag
查看构建镜像历史
容器命令
docker create -it
docker create命令能够基于镜像创建容器。
该命令执行的效果类似于docker run -d,即创建一个将在系统后台运行的容器。
但是与docker run -d不同的是,docker create创建的容器并未实际启动,还需要执行docker start命令或docker run命令以启动容器。
事实上,docker create命令常用于在启动容器之前进行必要的设置
该命令执行的效果类似于docker run -d,即创建一个将在系统后台运行的容器。
但是与docker run -d不同的是,docker create创建的容器并未实际启动,还需要执行docker start命令或docker run命令以启动容器。
事实上,docker create命令常用于在启动容器之前进行必要的设置
docker rm
容器ID/容器名
删除已经停止的容器
-f 容器ID
强制删除容器,即使运行中的
-f $ (docker ps -a -q)
批量删除容器(运行中的容器也会删除)
docker stop 容器名/容器ID
停止容器,慢慢停止
docker kill 容器名/容器ID
直接杀死
docker start 容器名/容器ID
docker restart 容器名/容器ID
重启已经停止的容器
docker ps
查找 运行中的容器信息
-a/--all:查找所有的容器信息,包括停止的容器
-l:上次运行的容器
-n number:查看前n个运行的容器
-q:查看容器的ID
docker logs -选项 容器ID
-f:动态显示容器日志
-t:加入时间戳
--tail num:查看最后num条日志
docker logs --tail 10 容器名
docker logs --tail 0 -f 容器名
docker exec -it 容器ID/容器名 /bin/bash
进入容器
退出容器
exit(退出容器,容器停止)
ctrl+p+q(退出容器,容器不停止)
docker top 容器ID
查看容器内运行的进程
docker inspect 容器ID
查看容器内部细节
通过 -f 或 --format 参数来查看某个结果
docker inspect --format='{State.running}' 容器名
docker cp 容器ID:/opt/ /opt
将容器中/opt下面的文件拷贝到了宿主机的/opt文件夹下
docker run -d --restart=always --name 容器名 镜像名 [要运行的shell语句],shell是容器启动后的执行命令
容器重启
Dockerfile
DockerFile是Docker镜像的构建文件。构建过程中会按照Dockerfile中的命令和脚本构建镜像。
Dockerfile编写规则
1.DockerFile每条指令都是的保留字都是大写,并且保留字后至少跟一个参数,不能为空。
2.DockerFile按照从上到下的顺序,顺序执行。
3.DockerFile注释符号为#
4.每条指令都会创建一个新的镜像层,并对镜像进行提交。
2.DockerFile按照从上到下的顺序,顺序执行。
3.DockerFile注释符号为#
4.每条指令都会创建一个新的镜像层,并对镜像进行提交。
Dockerfile保留字指令
FROM :基础镜像,当前镜像是基于哪个镜像来构建的。
MAINTAINER :镜像维护者的姓名和邮箱地址。
USER:该指令会指定镜像以什么样的用户去运行容器的
RUN:容器被构建时,需要运行的命令。执行在上一个已经构建好的中间镜像上
RUN <command> 或
RUN ["<executeable>","<param1>","param2",...]
RUN ["/bin/bash","-c","<executeable>","param1","param2",...]
RUN ["<executeable>","<param1>","param2",...]
RUN ["/bin/bash","-c","<executeable>","param1","param2",...]
RUN ["yum", "install", "telnet"]
RUN ["<executeable>","<param1>","param2",...]
RUN ["<executeable>","<param1>","param2",...]
WORKDIR :指定在创建容器后,终端默认的工作目录,进入容器后的目录位置点(没有指定,默认根目录)。
ENV :在镜像构建过程中,设置的环境变量。 ENV MY_PATH /usr/mycentos,设置MY_PATH为usr/mycentos。docker run -e 可覆盖
ADD :将宿主主机目录下的文件拷贝到镜像中,并且ADD命令自动处理URL和解压缩tar包。
ADD /opt/app/ /app/
ADD 通过目的地址的结尾符号来判断源文件是目录还是文件
目的地址以 / 结尾,则认为源文件指向的是目录
目的地址不是 / 结尾,则认为源文件指向的是文件
ADD 通过目的地址的结尾符号来判断源文件是目录还是文件
目的地址以 / 结尾,则认为源文件指向的是目录
目的地址不是 / 结尾,则认为源文件指向的是文件
如果文件是以gzip、bzip2、xz结尾的源文件,会被自动解压
COPY :将从构建上下文的目录中的源路径文件/目录中复制到新一层的镜像内的目标路径的位置。COPY src dst (COPY ["src" "dst"])
如果路径是一个目录,则整个目录被复制到容器中;如果是一个文件,则该文件会同元数据一同被复制。
EXPOSE :当前容器暴露的端口号(-p时会被修改)
docker 容器中的应用程序将会使用容器指定的端口,但并不意味着可以访问容器的端口,需要在docker run -p 主机端口:容器端口
VOLUME :数据卷,用于容器数据的保存和持久化。
容器卷的特点
VOLUME ["/temp/data"]:任何基于此镜像创建的容器,都会被创建一个该路径的挂载点
VOLUME["/temp/data", "/temp/logs"]:多个挂载点
VOLUME["/temp/data", "/temp/logs"]:多个挂载点
ONBUILE :当构建一个被继承的DockerFile命令时,父镜像在被子镜像继承后所触发的命令
当一个镜像被其他镜像用做基础镜像时,该触发器会被执行
ENTRYPOINT :指定容器启动时要运行的命令(命令不容易在容器启动时被覆盖)
docker run --entrypoint 覆盖
docker run --entrypoint 覆盖
docker run 命令行中的任何参数都会被当成参数再次传递给ENTRYPOINT指令中的指定的命令
ENTRYPOINT ["/usr/bin/nginx"],同时我们启动容器:docker run -it 镜像名/ID -g "daemon off"
等价于ENTRYPOINT ["usr/bin/nginx", "-g", "daemon off"]
CMD :指定容器被启动时默认要执行的命令 (多个CMD命令,、会被最后一个CMD覆盖)同时docker run 命令会覆盖CMD指令
CMD["executable","param1","param2"] 使用exec执行
CMD、ENTRYPOINT组合使用
ENTRYPOINT ["/usr/bin/nginx"]
CMD ["-h"] / CMD["param1", "param2"]
CMD ["-h"] / CMD["param1", "param2"]
等价于Nginx服务器会以 /usr/bin/Nginx -h 的形式启动
在容器启动时,如果没有运行docker run 命令,则Dockerfile文件会将 CMD 数组中的命令 -h,传递给ENTRYPOINT
CMD和ENTRYPOINT的区别
CMD是容器默认要执行的命令。
ENTRYPOINT是启动容器真正要执行的命令。
shell和exec的区别
Shell格式底层会调用/bin/sh -c来执行命令,可以解析变量,而下面的exec格式不会。
可以使用exec格式进行替换:ENTRYPOINT ["/bin/sh", “-c”, “echo hello, $name”]
Exec格式时,ENTRYPOINT可以通过CMD提供额外参数,CMD的额外参数可以在容器启动时动态替换。
在shell格式时ENTRYPOINT会忽略任何CMD或docker run提供的参数。
在shell格式时ENTRYPOINT会忽略任何CMD或docker run提供的参数。
Supervisor
Dockerfile构建镜像
构建镜像命令
docker build -f /dockerfile文件位置 -t 仓库名/镜像名:TAG .
运行 -f 表示的位置的Dockerfile文件,并且镜像的仓库和镜像的名称可以指定,:后面为自定义的程序版本
docker build -t="仓库名/镜像名:tag" .
表名在当前位置查找dockerfile文件,并进行镜像构建
调试构建镜像
如果镜像构建过程中失败,因为镜像是一层层构建的,因此会有镜像缓存。查看构建信息,在失败操作之前的镜像构建都是成功的,并且会返回成功镜像的ID
调试过程。
例如上一层镜像的ID为 123456 ,我们可以运行这个中间镜像。
docker run -it 镜像ID /bin/bash
进入镜像启动的容器后,执行Dockerfile中要执行的命令,进行调试
docker run -it 镜像ID /bin/bash
进入镜像启动的容器后,执行Dockerfile中要执行的命令,进行调试
存储(数据卷)
数据卷容器
挂载数据卷的容器称为数据卷容器。其他容器通过挂载数据卷容器实现数据共享。
容器间的共享传递
docker run -v /宿主机目录:/容器目录 -it -name dc1 <镜像名>
docker run -it -name dc2 --volumn-from dc1 <镜像名>;可以将dc1上挂载的数据卷挂载到dc2上,
此时容器dc2继承(挂载)自dc01上,因此容器dc2和容器dc1对文件做任何改变都可以共享。
宿主机地址必须是绝对路径,如果目录不存在docker会自动创建路径。
docker 挂在的数据卷的默认权限是读写,如果用户想修改权限,也可以修改为只读。这样容器就只能读数据卷中的数据,不能修改数据了。
只读:docker run -v /宿主机目录:/容器目录:ro --name 容器名称 镜像名
:ro — 只读 readOnly
:rw — 读写 redawrite
:rw — 读写 redawrite
数据卷挂载时,如果只写了 -v /docker路径,则将数据卷挂载到了docker文件夹下。./docker/colume 下
问题:当删除了dc01后,dc02是否会收到影响,挂载出现问题,不能访问数据卷中的文件。
答案:删除dc01后,不会影响dc02访问数据卷;同样,如果有其他的容器--volume-from一个数据卷容器,也可以实现数据共享。
结论:因此,容器之间挂载数据卷,实现数据共享,数据卷的生命周期一直存在,直到没有容器使用数据卷为止。
答案:删除dc01后,不会影响dc02访问数据卷;同样,如果有其他的容器--volume-from一个数据卷容器,也可以实现数据共享。
结论:因此,容器之间挂载数据卷,实现数据共享,数据卷的生命周期一直存在,直到没有容器使用数据卷为止。
迁移数据
可以利用数据卷容器对其中的数据卷进行备份、恢复,以实现数据的迁移
迁移、备份:
docker run -i -t --volumes-from data -v $(pwd):/backup docker/whalesay tar cvf /backup/backup.tar /data
将名为 data 的数据卷容器和名为 docker/whalesay 的容器共享数据卷,同时将当前目录挂载到容器的 /backup 目录,在容器中执行压缩命令:
tar -cvf /backup/backup.tar /data ;目的是将/data中的数据打包压缩到 挂载目录下。
tar -cvf /backup/backup.tar /data ;目的是将/data中的数据打包压缩到 挂载目录下。
迁移:docker run -it --rm --volume-from 数据卷容器 -v $(pwd):/backup 镜像名 [tar xvf 压缩文件.tar /data(数据卷容器共享的地址)]
网络
Docker实现网络通信
Docker 通过 Linux 的 Namespace 实现与宿主机的资源隔离
Docker 启动后会在宿主机上创建一个 docker0 的虚拟网桥,相当于软件交换机。其作用是实现容器和宿主机之间的通信、转发。
Docker 会随机分配一个IP地址给docker0,172.17.0.0段。当容器启动后,在容器内部会启动eth0的网卡,docker0也会生成veth的虚拟网卡和容器的网卡进行桥接
网络模式
host:容器不会自动创建虚拟网卡,使用宿主机的IP和端口
contrainer:容器不会自己创建虚拟网卡,而是和一个指定的容器共用同一个IP,和范围端口
none:关闭了容器的网络功能
Bridge:为每个容器分配虚拟IP和端口,并将容器的网卡桥接到docker0的虚拟网桥,通过docker0和 iptables nat 表配置与宿主机通信
docker Bridge 拓扑地址
查看docker网络
docker network ls
查看bridge的详细信息:docker network inspect bridge
设置docker启动的网络模式
docker run -it --network=host/none/bridge
docker 默认的网络模式:Bridge模式
网络访问
docker0
Docker网桥是Linux网桥,因此可以使用 brctl show 来查看网桥和端口信息。
新的容器被创建后,都会将docker0作为默认网关
新的容器被创建后,都会将docker0作为默认网关
docker 中的DNS服务
将主机的 配置文件 通过挂载的方式挂在到容器中
容器间访问
容器间的访问需要两方面:
容器的网络拓扑是否关联。即所有的容器是否连接到docker0上
主机的防火墙软件 iptables 是否允许通过
容器访问外部
容器的访问控制,主要通过Linux上的 iptables 防火墙来实现。
容器访问外部网络,需要本地系统的转发支持。
(命令)sysctl net.ipv4.ip_forward
(输出)nte.ipv4.ip_forward = 1
(输出)nte.ipv4.ip_forward = 1
如果在Docker启动时,指定 --ip-forward=true,Docker 会自动的设定系统的 ip_forward参数为1
外部访问容器
本地容器访问外部地址时,iptable表都会 nat 成本地的IP地址(源地址伪装操作)
外部程序访问容器时
在本地的iptable的nat表中添加相应的映射规则
iptables -t nat -nL
容器的特点
轻量级,只打包了必要的依赖
秒即启动,与虚拟机相比启动速度在秒级
易于移植,一次构建,随处启动。
弹性伸缩,配合容器管理平台可以实现占用资源的伸缩。
容器标准化
现在市面上有多种容器技术,因此需要一个标准来规范容器技术。
OCI(Open Container Initiative)推出开放容器标准。标准主要包括runtime运行时标准和image镜像标准
OCI(Open Container Initiative)推出开放容器标准。标准主要包括runtime运行时标准和image镜像标准
标准
容器运行时标准 (runtime spec)
a). creating:使用 create 命令创建容器,这个过程称为创建中
b). created:容器创建出来,但是还没有运行,表示镜像和配置没有错误,容器能够运行在当前平台
c). running:容器的运行状态,里面的进程处于 up 状态,正在执行用户设定的任务
d). stopped:容器运行完成,或者运行出错,或者 stop 命令之后,容器处于暂停状态。这个状态,容器还有很多信息保存在平台中,并没有完全被删除
b). created:容器创建出来,但是还没有运行,表示镜像和配置没有错误,容器能够运行在当前平台
c). running:容器的运行状态,里面的进程处于 up 状态,正在执行用户设定的任务
d). stopped:容器运行完成,或者运行出错,或者 stop 命令之后,容器处于暂停状态。这个状态,容器还有很多信息保存在平台中,并没有完全被删除
容器镜像标准(image spec)
a). 文件系统:以 layer 保存的文件系统,每个 layer 保存了和上层之间变化的部分,layer 应该保存哪些文件,怎么表示增加、修改和删除的文件等;
b). config 文件:保存了文件系统的层级信息(每个层级的 hash 值,以及历史信息),以及容器运行时需要的一些信息(比如环境变量、工作目录、命令参数、mount 列表),指定了镜像在某个特定平台和系统的配置。比较接近我们使用 docker inspect <image_id> 看到的内容;
c). manifest 文件:镜像的 config 文件索引,有哪些 layer,额外的 annotation 信息,manifest 文件中保存了很多和当前平台有关的信息;
d). index 文件:可选的文件,指向不同平台的 manifest 文件,这个文件能保证一个镜像可以跨平台使用,每个平台拥有不同的 manifest 文件,使用 index 作为索引。
b). config 文件:保存了文件系统的层级信息(每个层级的 hash 值,以及历史信息),以及容器运行时需要的一些信息(比如环境变量、工作目录、命令参数、mount 列表),指定了镜像在某个特定平台和系统的配置。比较接近我们使用 docker inspect <image_id> 看到的内容;
c). manifest 文件:镜像的 config 文件索引,有哪些 layer,额外的 annotation 信息,manifest 文件中保存了很多和当前平台有关的信息;
d). index 文件:可选的文件,指向不同平台的 manifest 文件,这个文件能保证一个镜像可以跨平台使用,每个平台拥有不同的 manifest 文件,使用 index 作为索引。
容器的使用场景
容器技术的诞生其实主要解决了 PaaS 的层的技术实现。
容器主要的适用场景
容器化传统应用 提高现有应用的安全性和可移植性,节约成本。
持续集成、持续交付、持续部署 (CI/CD)。通过 Git 推送代码触发 CI/CD,可以做到快速构建镜像,快速部署到环境中。
微服务。容器适合将微服务打包在镜像中,运行在容器中,做到秒级启停、独立部署和服务松耦合的功能。
弹性调整。可以通过 Kubernetes 来实现计算资源的合理调配。
容器的底层实现
cgroup实现资源限制,namespace实现资源隔离。
cgroup
cgroup 全称 Control Group。Linux 操作系统通过 cgroup 可以设置进程使用 CPU、内存 和 IO 资源的限额。
namespace
在每个容器中,我们都可以看到文件系统,网卡等资源,这些资源看上去是容器自己的。Linux 实现这种方式的技术是 namespace。namespace 管理着 host 中全局唯一的资源,并可以让每个容器都觉得只有自己在使用它。
namespace隔离技术
Mount Namespace
Mount namespace 让容器看上去拥有整个文件系统。容器有自己的 / 目录,可以执行 mount 和 umount 命令。当然我们知道这些操作只在当前容器中生效,不会影响到 host 和其他容器。
UTS namespace
UTS namespace 让容器有自己的 hostname。 默认情况下,容器的 hostname 是它的短ID。
IPC namespace
IPC namespace 让容器拥有自己的共享内存和信号量(semaphore)来实现进程间通信,而不会与 host 和其他容器的 IPC 混在一起。
PID namespace
Network namespace
Network namespace 让容器拥有自己独立的网卡、IP、路由等资源
User namespace
User namespace 让容器能够管理自己的用户,host 不能看到容器中创建的用户。
优秀博客
底层实现说明
https://blog.csdn.net/cbmljs/article/details/92804520
https://www.cnblogs.com/qcloud1001/p/9273549.html
底层实现举例
https://blog.csdn.net/weixin_42138362/article/details/111606841
https://www.cnblogs.com/bakari/p/10613710.html
容器编排
Kubernetes
Microservices(微服务)
Serverless(无服务架构)
Service Mesh(服务网格)
Istio
DevOps
技术链
代码管理(SCM):GitHub、GitLab、BitBucket、SubVersion
构建工具:Ant、Gradle、maven
自动部署:Capistrano、CodeDeploy
持续集成(CI):Bamboo、Hudson、Jenkins(gitlab+gerrit+jenkins)
配置管理:Ansible、Chef、Puppet、SaltStack、ScriptRock GuardRail
容器:Docker、LXC、第三方厂商如AWS
编排:Kubernetes、Core、Apache Mesos、DC/OS
服务注册与发现:Zookeeper、etcd、Consul
脚本语言:python、ruby、shell
日志管理:ELK、Logentries
系统监控:Datadog、Graphite、Icinga、Nagios
性能监控:AppDynamics、New Relic、Splunk
压力测试:JMeter、Blaze Meter、loader.io
预警:PagerDuty、pingdom、厂商自带如AWS SNS
HTTP加速器:Varnish
消息总线:ActiveMQ、SQS
应用服务器:Tomcat、JBoss
Web服务器:Apache、Nginx、IIS
数据库:MySQL、Oracle、PostgreSQL等关系型数据库;cassandra、mongoDB、redis等NoSQL数据库
项目管理(PM):Jira、Asana、Taiga、Trello、Basecamp、Pivotal Tracker
构建工具:Ant、Gradle、maven
自动部署:Capistrano、CodeDeploy
持续集成(CI):Bamboo、Hudson、Jenkins(gitlab+gerrit+jenkins)
配置管理:Ansible、Chef、Puppet、SaltStack、ScriptRock GuardRail
容器:Docker、LXC、第三方厂商如AWS
编排:Kubernetes、Core、Apache Mesos、DC/OS
服务注册与发现:Zookeeper、etcd、Consul
脚本语言:python、ruby、shell
日志管理:ELK、Logentries
系统监控:Datadog、Graphite、Icinga、Nagios
性能监控:AppDynamics、New Relic、Splunk
压力测试:JMeter、Blaze Meter、loader.io
预警:PagerDuty、pingdom、厂商自带如AWS SNS
HTTP加速器:Varnish
消息总线:ActiveMQ、SQS
应用服务器:Tomcat、JBoss
Web服务器:Apache、Nginx、IIS
数据库:MySQL、Oracle、PostgreSQL等关系型数据库;cassandra、mongoDB、redis等NoSQL数据库
项目管理(PM):Jira、Asana、Taiga、Trello、Basecamp、Pivotal Tracker
优秀博客
https://blog.csdn.net/qwefgh123321/article/details/103861006
Cloud(云)
云服务模型
Saas(软件即服务)
用户只要接上网络,并通过浏览器,就能直接使用在云端上运行的应用,而不需要顾虑类似安装等琐事,并且免去初期高昂的软硬件投入。SaaS主要面对的是普通的用户。
Paas(平台即服务)
PaaS是构建在 IaaS 之上的一种平台服务,提供操作系统安装、监控和服务发现等功能,用户只需要部署自己的应用即可。PaaS主要的用户是开发人员。
IaaS(基础架构即服务)
是服务器租赁并提供基础设施外包服务。IaaS主要的用户是系统管理员。
0 条评论
下一页