首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何成为一名优秀的架构师?

在 WSO2,我参与架构评审的时间已长达八年之久。WSO2 的产品非常丰富,比如 WSO2 ESB 、WSO2 API Manager 以及 WSO2 SP 都人尽皆知。...在过去八年中,我们对许多产品和功能进行了讨论、设计、改进和重新设计。 我们在设计软件的过程中,把握的一个关键点是:软件架构并非由架构师负责设计。我们的架构不是由架构师制定,然后交给其他人来实施。...原则15:如果你的设计是基于事件驱动的非阻塞架构,那就不要阻塞线程或者在线程中执行 IO 操作。一旦这样做,系统将慢如蜗牛。 分布式系统 原则16:无状态系统具有良好的扩展性。...原则24:当你无法在两个选项之间做出决定时,请不要通过配置选项的方式来呈现问题。这会给用户和架构师带来麻烦。对于系统如何运作的细节,他们没有你了解,他们怎么能做出决定呢?...不幸的是,严格执行这一点可能是一个错误,特别是在新功能的初始状态,其中简单的功能可能导致大的变化,因为我们试图使一切都是垂直的。有时我们发现我们添加的功能没用,然后所有额外的工作都没有用。

1.2K60
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    成为一个优秀架构师,你必须了解的 30 条设计原则

    他是 Apache 的核心成员,拥有 15 年分布式系统编程经验,设计了 Apache Axis2 以及 WSO2 流处理器。 在 WSO2,我参与架构评审的时间已长达八年之久。...WSO2 的产品非常丰富,比如 WSO2 ESB 、WSO2 API Manager 以及 WSO2 SP 都人尽皆知。在过去八年中,我们对许多产品和功能进行了讨论、设计、改进和重新设计。...原则 15:如果你的设计是基于事件驱动的非阻塞架构,那就不要阻塞线程或者在线程中执行 IO 操作。一旦这样做,系统将慢如蜗牛。 分布式系统 原则 16:无状态系统具有良好的扩展性。...原则 20:分布式系统共识不支持扩展,也无法进行组通信,不支持群集范围内的可靠消息传递。其最大节点限制大约是八个节点。 原则 21:在分布式系统中,你很难隐藏分布式系统中的延迟和故障。...因为在项目初始状态时,很多事情是不确定的,你无法做到这样的独立性,现在我认为在开始的时候适当的重复是必要的,当你尝试铲除他们的时候,你会发现引入了新的复杂性,分布本身就意味着复杂。

    1.2K10

    优秀架构师必须了解的6大方面30条设计原则

    在 WSO2,我参与架构评审的时间已长达八年之久。WSO2 的产品非常丰富,比如 WSO2 ESB 、WSO2 API Manager 以及 WSO2 SP 都人尽皆知。...原则15:如果你的设计是基于事件驱动的非阻塞架构,那就不要阻塞线程或者在线程中执行 IO 操作。一旦这样做,系统将慢如蜗牛。 四、分布式系统 原则16:无状态系统具有良好的扩展性。...原则20:分布式系统共识不支持扩展,也无法进行组通信,不支持群集范围内的可靠消息传递。其最大节点限制大约是八个节点。 原则21:在分布式系统中,你很难隐藏分布式系统中的延迟和故障。...原则24:当你无法在两个选项之间做出决定时,请不要通过配置选项的方式来呈现问题。这会给用户和架构师带来麻烦。对于系统如何运作的细节,他们没有你了解,他们怎么能做出决定呢?...因为在项目初始状态时,很多事情是不确定的,你无法做到这样的独立性,现在我认为在开始的时候适当的重复是必要的,当你尝试铲除他们的时候,你会发现引入了新的复杂性,分布本身就意味着复杂。

    94420

    使用 Dockerfile定制Java Web镜像

    如果使用 docker commit 制作镜像,以及后期修改的话,每一次修改都会让镜像更加臃肿一次,所删除的上一层的东西并不会丢失,会一直如影随形的跟着这个镜像,即使根本无法访问到。...#执行命令行命令 RUN 定义每一层该如何构建(不是在写 Shell 脚本) 每一个 RUN = 启动一个容器、执行命令、然后提交存储层文件变更 两行 RUN 命令的执行环境不同 格式: 1...一般推荐使用 exec 格式,这类格式在解析时会被解析为 JSON 数组,因此一定要使用双引号 " ,而不要使用单引号 CMD echo $HOME 在实际执行中,会将其变更为: CMD [ "sh"...③构建镜像 #构建镜像 docker build [选项] 镜像并非在本地构建,而是在服务端,也就是镜像是在 Docker 引擎中构建的。.../package.json /app 或者 COPY /opt/xxxx /app 无法工作的原因,因为这些路径已经超出了上下文的范围,Docker 引擎无法获得这些位置的文件。

    1.6K40

    DockerFile

    而且,即使是这个制作镜像的人,过一段时间后也无法记清具体在操作的。虽然 docker diff 或许可以告诉得到一些线索,但是远远不到可以确保生成一致镜像的地步。...docker commit不能做到这些事情,因为是在一个封闭的在运行中的容器中,无法做复制拷贝宿主机文件的事情。...解析:由于 docker 的运行模式是 C/S。我们本机是 C,docker 引擎是 S。实际的构建过程是在 docker 引擎下完成的,所以这个时候无法用到我们本机的文件。...优点:在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需的参数。 注意:如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。...ONBUILD 用于延迟构建命令的执行。简单的说,就是 Dockerfile 里用 ONBUILD 指定的命令,在本次构建镜像的过程中不会执行(假设镜像为 test-build)。

    72510

    2023学习日志

    注意事项docker commit 会导致大量与实际目的无关的文件被添加进镜像中,导致镜像极为臃肿。此外,生成的镜像前容器中执行的命令是未知的,无法得知其具体情况,被称为黑箱镜像,难以进行后续维护。...Dockerfile 创建镜像与makefile类似,可以通过执行Dockerfile中的指令,来构建目标镜像,由于Dockerfile中有详细的指令信息,可以通过查看指令来了解镜像的生成过程,便于维护和修改...//Dockerfile指令 ...RUN 执行指令在Dockerfile中,可以通过RUN指令来执行命令行命令RUN指令有两种格式:shell格式:RUN 示例: RUN echo...的文件作为Dockerfile执行 docker build -t nginx:v3 .上下文路径上下文路径是指构建镜像的上下文路径,docker build 会将该路径下所有文件打包后发送给docker...因此,Dockerfile中只能使用相对路径,应将需要的资源文件复制到上下文目录中,否则docker引擎无法获取到那些文件,构建镜像失败。

    17320

    从Docker镜像构建演化史来了解多阶段构建的影响

    对于已经接纳和使用Docker技术在日常开发工作中的开发者而言,构建Docker镜像已经是家常便饭。...本文将从一个Docker用户角度来阐述Docker镜像构建的演化史,希望能起到一定的解惑作用。 一、镜像:继承中的创新 谈镜像构建之前,我们先来简要说下镜像。...虽然Docker引擎利用r缓存机制可以让同主机下非首次的镜像构建执行得很快,但是在Docker技术热情催化下的这种构建思路让docker镜像在存储和传输方面的优势荡然无存,要知道一个ubuntu-server...如果不在同一镜像中完成应用构建,那么在哪里、由谁来构建应用呢?至少有两种方法: 在本地构建并COPY到镜像中; 借助构建者镜像(builder image)构建。...除了因为 musl比uClibc 大一些之外,alpine还在镜像中添加了自己的包管理系统apk,开发者可以使用apk在基于alpine的镜像中添 加需要的包或工具。

    76610

    Docker Dockerfile

    解析:由于 docker 的运行模式是 C/S。我们本机是 C,docker 引擎是 S。实际的构建过程是在 docker 引擎下完成的,所以这个时候无法用到我们本机的文件。...功能也类似,不同之处如下: ADD 的优点:在执行 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 目标路径>。...ADD 的缺点:在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。...优点:在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需的参数。 注意:如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。...ONBUILD 用于延迟构建命令的执行。简单的说,就是 Dockerfile 里用 ONBUILD 指定的命令,在本次构建镜像的过程中不会执行(假设镜像为 test-build)。

    49330

    讨论软件架构的30个共同原则

    在WSO2,我已经完成了八年多的架构评审。WSO2拥有广泛的产品组合,包括众所周知的WSO2 ESB,WSO2 API Manager和WSO2 SP。...在设计时考虑一下。从长远来看,它将节省很多麻烦,否则,在构建所有内容之前,您无法测试系统。此外,根据这一原则,您的版本将更加顺畅。 原则8:留意“谷歌嫉妒”。我们都喜欢闪亮的设计。...在一个美好的一天中,任一个的最大节点限制大约是八个节点。 原则21:您永远不能隐藏分布式系统中的延迟和故障(请参阅分布式计算的谬误解释)。...原则24:如果您无法在两个选项之间做出决定,请不要通过将其作为配置选项来传递问题。您正在为用户和解决方案架构师努力工作。如果他们对系统的工作方式了解甚少,那么他们又如何决定呢?...严格执行这一点可能是一个错误,特别是在新功能的初始状态,其中简单的功能可以级联到大的变化,因为我们试图使一切正交。有时我们发现我们添加的功能毕竟没用,然后所有额外的工作都没有用。

    96630

    Dockerfile介绍以及作用(四)

    解析:由于 docker 的运行模式是 C/S。我们本机是 C,docker 引擎是 S。实际的构建过程是在 docker 引擎下完成的,所以这个时候无法用到我们本机的文件。...功能也类似,不同之处如下: ADD 的优点:在执行 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 目标路径>。...ADD 的缺点:在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。...优点:在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需的参数。 注意:如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。...ONBUILD 用于延迟构建命令的执行。简单的说,就是 Dockerfile 里用 ONBUILD 指定的命令,在本次构建镜像的过程中不会执行(假设镜像为 test-build)。

    45010

    docker | dockerfile指令详解

    前言 Dockerfile用于构建docker镜像, 实际上就是把在linux下的命令操作写到了Dockerfile中, 通过Dockerfile去执行设置好的操作命令, 保证通过Dockerfile的构建镜像是一致的...这个镜像无法从别处拉取, 可以理解为是Docker自 1.5.0 版本开始的自带镜像, 它仅包含一个空的文件系统. scratch镜像一般用于构建基础镜像, 比如官方镜像Ubuntu COPY 复制文件...但是在 COPY 基础上增加了一些功能: 可以是一个 URL,这种情况下,Docker 引擎会试图去下载这个链接的文件放到 目标路径> 去。...在 1.12 以前,Docker 不会检测到容器的这种状态,从而不会重新调度,导致可能会有部分容器已经无法提供服务了却还在接受用户请求。...当在各个项目目录中,用这个只有一行的 Dockerfile 构建镜像时,之前基础镜像的那三行 ONBUILD 就会开始执行,成功的将当前项目的代码复制进镜像、并且针对本项目执行 npm install,

    1.9K41

    Docker基础教程(二)-Dockerfile命令详解及最佳实践

    功能也类似,区别: ADD 的优点 在执行 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 目标路径>。...ADD 的缺点 在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。...是上下文路径 上下文路径 指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。...由于 docker 的运行模式是 C/S。我们本机是 C,docker 引擎是 S。实际的构建过程是在 docker 引擎下完成的,所以这个时候无法用到我们本机的文件。...比如执行到如下步骤时报错 ? 那就进入该临时中转镜像即可 docker run -it 4320f8b526bc /bin/bash 进入后,直接查看 app,原来是个文件,并非路径!

    37920

    Dockerfile指令解析

    在使用Docker构建镜像的时,每一个命令都会在前一个命令的基础上形成一个新层。...执行步骤分析 每条指令都会创建一个新的镜像层并对镜像进行提交,Docker执行Dockerfile大致流程: Docker从基础镜像(如:centos)运行一个容器; 执行一条指令(如:ADD)...,对容器做出修改; 执行类似docker commit的操作,提交一个新镜像层; Docker再基于刚提交的镜像运行一个新容器; 执行Dockerfile中的下一条指令,直到所有指令都执行完毕...COPY jdk-8u211-linux-x64.tar.gz /usr/local 此处仅执行复制操作,并没有进行解压。 ADD ADD命令会将宿主机上的文件复制到容器中的目标目录。...CMD ["executable","param1","param2"] 使用 exec 执行,推荐方式; CMD command param1 param2 在 /bin/bash 中执行,提供给需要交互的应用

    64520

    DockerFile构建镜像和Docker仓库

    而且,即使是这个制作镜像的人,过一段时间后也无法记清具体在操作的。虽 然 docker diff 或许可以告诉得到一些线索,但是远远不到可以确保生成一致镜像的地步。...COPY指令将从构建上下文目录中的文件/目录复制到新的一层的镜像内的目标路径> 位置,比如....ONBUILD 用于延迟构建命令的执行。简单的说,就是 Dockerfile 里用 ONBUILD 指定的命令,在本次构建镜像的过程中不会执行(假设镜像为 test-build)。...创建并登陆Docker Hub,以及目标网站: # 2. 在目标网站中连接账户到Docker Hub; # 3. 在Docker Hub中配置一个自动连接: # 4....选取一个目标网站中的项目(需要含Dockerfile)和分支 # 5. 指定Dockerfile的位置,并提交创建. # 之后,可以在Docker Hub的自动创建页面中跟踪每次创建的状态.

    2.3K60

    Dockerfile 定制 Docker 镜像

    由于 docker 的运行模式是 C/S。我们本机是 C,docker 引擎是 S。实际的构建过程是在 docker 引擎下完成的,所以这个时候无法用到我们本机的文件。...功能也类似,不同之处如下: ADD 的优点:在执行 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 目标路径>。...ADD 的缺点:在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。...优点:在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需的参数。 注意:如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。...ONBUILD 用于延迟构建命令的执行。简单的说,就是 Dockerfile 里用 ONBUILD 指定的命令,在本次构建镜像的过程中不会执行(假设镜像为 test-build)。

    64620

    Docker Dockerfile

    解析:由于 docker 的运行模式是 C/S。我们本机是 C,docker 引擎是 S。实际的构建过程是在 docker 引擎下完成的,所以这个时候无法用到我们本机的文件。...功能也类似,不同之处如下: ADD 的优点:在执行 为tar压缩文件的话,压缩格式为gzip, bzip2 以及xz的情况下,会自动复制并解压到 目标路径>。...ADD 的缺点:在不解压的前提下,无法复制tar压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。...优点:在执行docker run的时候可以指定ENTRYPOINT运行所需的参数。 注意:如果 Dockerfile 中如果存在多个ENTRYPOINT指令,仅最后一个生效。...ONBUILD 用于延迟构建命令的执行。简单的说,就是 Dockerfile 里用 ONBUILD 指定的命令,在本次构建镜像的过程中不会执行(假设镜像为 test-build)。

    77120

    Scrapy对接Docker

    接下来,我们尝试把一个Scrapy项目制作成一个Docker镜像。 一、本节目标 我们要实现把前文Scrapy的入门项目打包成一个Docker镜像的过程。...由于Docker虚拟容器内只有Python 3环境,而没有所需要的Python库,所以我们运行此命令来在虚拟容器中安装相应的Python库如Scrapy,这样就可以在虚拟容器中执行Scrapy命令了。...如果我们继续用localhost是无法找到MongoDB的,因为在Docker虚拟容器里localhost实际指向容器本身的运行IP,而容器内部并没有安装MongoDB,所以爬虫无法连接MongoDB。...在本节中,我们的目标是将项目打包成一个镜像,让其他远程主机也可运行这个项目。...整个项目爬取完成后,数据就可以存储到指定的数据库中。 八、结语 我们讲解了将Scrapy项目制作成Docker镜像并部署到远程服务器运行的过程。使用此种方式,我们在本节开头所列出的问题都迎刃而解。

    1.7K31

    Docker 进阶之 Dockerfile 详解

    而且,即使是这个制作镜像的人,过一段时间后也无法记清具体在操作的。虽然 docker diff 或许可以告诉得到一些线索,但是远远不到可以确保生成一致镜像的地步。...docker commit不能做到这些事情,因为是在一个封闭的在运行中的容器中,无法做复制拷贝宿主机文件的事情。...在 Docker 守护进程执行 Dockerfile 中的指令前,首先会对 Dockerfile 进行语法检查,有语法错误时会返回: docker build -t nginx/v3 ....解析:由于 docker 的运行模式是 C/S。我们本机是 C,docker 引擎是 S。实际的构建过程是在 docker 引擎下完成的,所以这个时候无法用到我们本机的文件。...tag 或 digest 是可选的,如果不使用这两个值时,会使用 latest 版本的基础镜像 ---- RUN 执行命令 在镜像的构建过程中执行特定的命令,并生成一个中间镜像。

    3K54

    DockerFile

    file文件的大致流程 docker 从基础镜像运行一个容器 执行一条指令并对容器作出修改 执行类似docker commit的操作提交一个新的镜像层 docker 在基于刚提交的镜像运行一个新容器...执行docker 中的下一条指令知道所有指令都执行完成 Docker File基础知识: ?...ADD 的缺点:在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。...执行指令 CMD 作用: 类似于 RUN命令,但运行处不同 RUN 在Docker build 前运行 CMD 在docker run 后运行 注意: 当 Dockerfile 中存在多个 CMD...先构建一个父类镜像(ONBUILD 在父类中,但不立即执行),后子类继承此父类镜像(执行父类的ONBUILD 命令) 本次并不执行,当镜像调用它时,将执行父类中ONBUILD命令 # 格式 ONBUILD

    1.1K30
    领券