主頁 > 軟體設計 > 鏡像的概念

鏡像的概念

2021-07-31 16:04:01 軟體設計

鏡像的概念

鏡像可以理解為應用程式的集裝箱,而docker用來裝卸集裝箱,

docker鏡像含有啟動容器所需要的檔案系統及其內容,因此,其用于創建并啟動容器,

docker鏡像采用分層構建機制,最底層為bootfs,其上為rootfs

bootfs:用于系統引導的檔案系統,包括bootloader和kernel,容器啟動完成后會被卸載以節約記憶體資源
rootfs:位于bootfs之上,表現為docker容器的根檔案系統
傳統模式中,系統啟動之時,內核掛載rootfs會首先將其掛載為“只讀”模式,完整性自檢完成后將其重新掛載為讀寫模式
docker中,rootfs由內核掛載為“只讀”模式,而后通過“聯合掛載”技術額外掛載一個“可寫”層

注意:當洗掉容器時,這個容器自有的“可寫”層會一起被洗掉

img

docker鏡像層

img

位于下層的鏡像稱為父鏡像(parrent image),最底層的稱為基礎鏡像(base image);
最上層為“可讀寫”層,其下的均為“只讀”層,

docker存盤驅動

docker提供了多種存盤驅動來實作不同的方式存盤鏡像,下面是常用的幾種存盤驅動:

- AUFS
- OverlayFS
- Devicemapper
- Btrfs
- VFS

AUFS

AUFS(AnotherUnionFS)是一種Union
FS,是檔案級的存盤驅動,AUFS是一個能透明覆寫一個或多個現有檔案系統的層狀檔案系統,把多層合并成檔案系統的單層表示,簡單來說就是支持將不同目錄掛載到同一個虛擬檔案系統下的檔案系統,這種檔案系統可以一層一層地疊加修改檔案,無論底下有多少層都是只讀的,只有最上層的檔案系統是可寫的,當需要修改一個檔案時,AUFS創建該檔案的一個副本,使用CoW將檔案從只讀層復制到可寫層進行修改,結果也保存在可寫層,在Docker中,底下的只讀層就是image,可寫層就是Container,

AUFS檔案系統據說有3W行代碼,而ext4檔案系統卻只有4000-5000行左右代碼,這些代碼是要被整合進內核的,后來AUFS申請要被合并進內核代碼的時候,linuz覺得它這代碼太過臃腫,于是拒絕了,因此AUFS這個檔案系統一直以來就不是linux內核中自有的檔案系統,想用AUFS這個檔案系統的話,必須自己向內核打補丁并去編譯使用它,但redhat系列的作業系統一向以穩定著稱,不會干這種出格的事,所以在redhat系列作業系統中使用AUFS并無可能,而ubuntu上的docker默認使用的就是AUFS,

OverlayFS

Overlay是Linux內核3.18后支持的,也是一種Union
FS,和AUFS的多層不同的是Overlay只有兩層:一個upper檔案系統和一個lower檔案系統,分別代表Docker的鏡像層和容器層,當需要修改一個檔案時,使用CoW將檔案從只讀的lower復制到可寫的upper進行修改,結果也保存在upper層,在Docker中,底下的只讀層就是image,可寫層就是Container,目前最新的OverlayFS為Overlay2,

AUFS和Overlay都是聯合檔案系統,但AUFS有多層,而Overlay只有兩層,所以在做寫時復制操作時,如果檔案比較大且存在比較低的層,則AUSF會慢一些,而且Overlay并入了linux
kernel mainline,AUFS沒有,目前AUFS已基本被淘汰,

DeviceMapper

Device
mapper是Linux內核2.6.9后支持的,提供的一種從邏輯設備到物理設備的映射框架機制,在該機制下,用戶可以很方便的根據自己的需要制定實作存盤資源的管理策略,AUFS和OverlayFS都是檔案級存盤,而Device
mapper是塊級存盤,所有的操作都是直接對塊進行操作,而不是檔案,Device
mapper驅動會先在塊設備上創建一個資源池,然后在資源池上創建一個帶有檔案系統的基本設備,所有鏡像都是這個基本設備的快照,而容器則是鏡像的快照,所以在容器里看到檔案系統是資源池上基本設備的檔案系統的快照,并沒有為容器分配空間,當要寫入一個新檔案時,在容器的鏡像內為其分配新的塊并寫入資料,這個叫用時分配,當要修改已有檔案時,再使用CoW為容器快照分配塊空間,將要修改的資料復制到在容器快照中新的塊里再進行修改,

OverlayFS是檔案級存盤,Device
mapper是塊級存盤,當檔案特別大而修改的內容很小,Overlay不管修改的內容大小都會復制整個檔案,對大檔案進行修改顯然要比小檔案要消耗更多的時間,而塊級無論是大檔案還是小檔案都只復制需要修改的塊,并不是整個檔案,在這種場景下,顯然device
mapper要快一些,因為塊級的是直接訪問邏輯盤,適合IO密集的場景,而對于程式內部復雜,大并發但少IO的場景,Overlay的性能相對要強一些,

docker registry

啟動容器時,docker daemon會試圖從本地獲取相關的鏡像,本地鏡像不存在時,其將從Registry中下載該鏡像并保存到本地,

Registry用于保存docker鏡像,包括鏡像的層次結構和元資料,用戶可以自建Registry,亦可使用官方的Docker Hub,

docker registry的分類:

- Sponsor Registry:第三方的Registry,供客戶和Docker社區使用
- Mirror Registry:第三方的Registry,只讓客戶使用
- Vendor Registry:由發布docker鏡像的供應商提供的registry
- Private Registry:通過設有防火墻和額外的安全層的私有物體提供的registry

docker registry的組成:

- Repository
  - 由某特定的docker鏡像的所有迭代版本組成的鏡像倉庫
  - 一個Registry中可以存在多個Repository
    - Repository可分為“頂層倉庫”和“用戶倉庫”
    - 用戶倉庫名稱格式為“用戶名/倉庫名”
  - 每個倉庫可包含多個Tag(標簽),每個標簽對應一個鏡像
- Index
  - 維護用戶帳戶、鏡像的檢驗以及公共命名空間的資訊
  - 相當于為Registry提供了一個完成用戶認證等功能的檢索介面

Docker
Registry中的鏡像通常由開發人員制作,而后推送至“公共”或“私有”Registry上保存,供其他人員使用,例如“部署”到生產環境,

docker鏡像的制作

多數情況下,我們做鏡像是基于別人已存在的某個基礎鏡像來實作的,我們把它稱為base
image,比如一個純凈版的最小化的centos、ubuntu或debian,

那么這個最小化的centos鏡像從何而來呢?其實這個基礎鏡像一般是由Docker
Hub的相關維護人員,也就是Docker官方手動制作的,這個基礎鏡像的制作對于Docker官方的專業人員來說是非常容易的,但對于終端用戶來說就不是那么容易制作的了,

Docker Hub

Docker Hub is a cloud-based registry service which allows you to link
to code repositories, build your images and test them, stores manually
pushed images, and links to Docker Cloud so you can deploy images to
your hosts.

It provides a centralized resource for container image discovery,
distribution and change management, user and team collaboration, and
workflow automation throughout the development pipeline.

img

Docker Hub provides the following major features:

- Image Repositories
  - Find and pull images from community and official libraries, and manage, push to, and pull from private images libraries to which you have access.
- Automated Builds
  - Automatically create new images when you make changes to a source code repository.
- Webhooks
  - A feature of Automated Builds, Webhooks let you trigger actions after a successful push to a repository.
- Organizations
  - Create work groups to manage access to image repositories.
- GitHub and Bitbucket Integration
  - Add the Hub and your Docker Images to your current workflows.

docker鏡像的獲取

To get Docker images from a remote registry(such as your own Docker
registry)and add them to your local system, use the docker pull
command:

docker pull <registry>[:<port>]/[<namespace>/]<name>:<tag>

The is a host that provides the docker-distribution service on TCP
(default:5000)

Together, and identify a particular image controlled by at the
registry

  • Some registries also support raw ;for those, is optional
  • When it is included, however, the additional level of hierarchy that provides is usefull to distinguish between images with the same

The additional level of hierarchy of

NamespaceExamples(/)
organizationredhat/kubernetes, google/kubernetes
login(username)Alice/application, bob/application
roledevel/database, test/database, prod/database

鏡像的生成

鏡像的生成途徑:

- Dockerfile
- 基于容器制作
- Docker Hub automated builds

img

基于容器制作鏡像

Create a new image from container’s changes

Usage:

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
OptionsDefaultDescription
—author, -aAuthor (e.g., “John Hannibal Smith hannibal@a-team.com”)
-c, --change listApply Dockerfile instruction to the created image
-m, --message stringCommit message
-p, --pausetruePause container during commit

下載centos系統鏡像

[root@hfnt ~]#  docker pull centos
Using default tag: latest
latest: Pulling from library/centos
7a0437f04f83: Pull complete 
Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest
[root@hfnt ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
centos       latest    300e315adb2f   7 months ago   209MB

使用鏡像啟動容器并進入容器

[root@hfnt ~]# docker run -it --name centos-nginx centos /bin/bash
[root@5634002b21a0 /]# 

安裝epel源和nginx

[root@5634002b21a0 /]# yum install -y nginx

[root@5634002b21a0 /]#  yum install -y epel-release

配置nginx為前臺啟動模式

[root@5634002b21a0 /]#  vi /etc/nginx/nginx.conf
daemon off;#添加以下內容

啟動nginx

[root@5634002b21a0 /]# /usr/sbin/nginx
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()
[root@5634002b21a0 /]# ss -antl
State       Recv-Q       Send-Q             Local Address:Port             Peer Address:Port      
LISTEN      0            128                      0.0.0.0:80                    0.0.0.0:*         
LISTEN      0            128                         [::]:80                       [::]:*   

在創建鏡像時,我們不能關閉容器,必須使其處于運行狀態,所以我們必須要另起一個終端,然后執行

[root@hfnt ~]#  docker ps 
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
5634002b21a0   centos    "/bin/bash"   9 minutes ago   Up 9 minutes             centos-nginx
[root@hfnt ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
5634002b21a0   centos    "/bin/bash"   9 minutes ago   Up 9 minutes             centos-nginx
[root@hfnt ~]#  docker commit -m "nginx" -a "centos-nginx" -c 'CMD ["/usr/sbin/nginx"]' 5634002b21a0 centos-nginx
sha256:e14437ec4d807def5810aa6162a2c75d2875414c2741c0a9ab3d898d76c96c7c
[root@hfnt ~]#  docker images
REPOSITORY     TAG       IMAGE ID       CREATED          SIZE
centos-nginx   latest    e14437ec4d80   25 seconds ago   318MB
centos         latest    300e315adb2f   7 months ago     209MB
[root@hfnt ~]# docker run --name nginx -p 8888:80 -d centos-nginx
e135f06af0432ddd2c5f06f058d71264b7fcf319948a0b4856d2e9d9de69c0b9


–name nginx 為容器定義名稱,名稱為nginx

-p 8888:80 將宿主機的8888埠映射到容器內的80埠

-d 指定該容器在后天運行

cetnos-nginx 指定使用centos-nginx鏡像來創建容器
[root@hfnt ~]# curl 172.17.0.3
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head>
        <title>Test Page for the Nginx HTTP Server on Red Hat Enterprise Linux</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <style type="text/css">
            /*<![CDATA[*/
            body {
                background-color: #fff;
                color: #000;
                font-size: 0.9em;
                font-family: sans-serif,helvetica;
                margin: 0;
                padding: 0;
            }
            :link {
                color: #c00;
            }
            :visited {
                color: #c00;
            }
            a:hover {
                color: #f50;
            }
            h1 {
                text-align: center;
                margin: 0;
                padding: 0.6em 2em 0.4em;
                background-color: #900;
                color: #fff;
                font-weight: normal;
                font-size: 1.75em;
                border-bottom: 2px solid #000;
            }
            h1 strong {
                font-weight: bold;
                font-size: 1.5em;
            }
            h2 {
                text-align: center;
                background-color: #900;
                font-size: 1.1em;
                font-weight: bold;
                color: #fff;
                margin: 0;
                padding: 0.5em;
                border-bottom: 2px solid #000;
            }
            hr {
                display: none;
            }
            .content {
                padding: 1em 5em;
            }
            .alert {
                border: 2px solid #000;
            }

            img {
                border: 2px solid #fff;
                padding: 2px;
                margin: 2px;
            }
            a:hover img {
                border: 2px solid #294172;
            }
            .logos {
                margin: 1em;
                text-align: center;
            }
            /*]]>*/
        </style>
    </head>

    <body>
        <h1>Welcome to <strong>nginx</strong> on Red Hat Enterprise Linux!</h1>

        <div class="content">
            <p>This page is used to test the proper operation of the
            <strong>nginx</strong> HTTP server after it has been
            installed. If you can read this page, it means that the
            web server installed at this site is working
            properly.</p>

            <div class="alert">
                <h2>Website Administrator</h2>
                <div class="content">
                    <p>This is the default <tt>index.html</tt> page that
                    is distributed with <strong>nginx</strong> on
                    Red Hat Enterprise Linux.  It is located in
                    <tt>/usr/share/nginx/html</tt>.</p>

                    <p>You should now put your content in a location of
                    your choice and edit the <tt>root</tt> configuration
                    directive in the <strong>nginx</strong>
                    configuration file
                    <tt>/etc/nginx/nginx.conf</tt>.</p>

                    <p>For information on Red Hat Enterprise Linux, please visit the <a href="http://www.redhat.com/">Red Hat, Inc. website</a>. The documentation for Red Hat Enterprise Linux is <a href="http://www.redhat.com/docs/manuals/enterprise/">available on the Red Hat, Inc. website</a>.</p>

                </div>
            </div>

            <div class="logos">
                <a href="http://nginx.net/"><img
                    src="nginx-logo.png" 
                    alt="[ Powered by nginx ]"
                    width="121" height="32" /></a>
                <a href="http://www.redhat.com/"><img
                    src="poweredby.png"
                    alt="[ Powered by Red Hat Enterprise Linux ]"
                    width="88" height="31" /></a>
            </div>
        </div>
    </body>
</html>

使用瀏覽器訪問容器內的nginx

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-kAKV21Oa-1627485323666)(C:\Users\Teng\AppData\Roaming\Typora\typora-user-images\image-20210728225803692.png)]

將我們做好的鏡像push上去

[root@hfnt ~]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: wssz123123
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
[root@hfnt ~]#  docker images 
REPOSITORY     TAG       IMAGE ID       CREATED         SIZE
centos-nginx   latest    e14437ec4d80   8 minutes ago   318MB
centos         latest    300e315adb2f   7 months ago    209MB
[root@hfnt ~]# docker tag  e14437ec4d80  wssz123123/centos-nginx:0.1
[root@hfnt ~]# docker images 
REPOSITORY                TAG       IMAGE ID       CREATED          SIZE
centos-nginx              latest    e14437ec4d80   10 minutes ago   318MB
wssz123123/centos-nginx   0.1       e14437ec4d80   10 minutes ago   318MB
centos                    latest    300e315adb2f   7 months ago     209MB
[root@hfnt ~]# docker push wssz123123/centos-nginx:0.1
The push refers to repository [docker.io/wssz123123/centos-nginx]
1b8bc3e1561c: Pushed 
2653d992f4ef: Pushed 
0.1: digest: sha256:8944ed277d7362e83ea8fea88e3194b6ac5c0125f99d06c882d3e31149ee92a6 size: 741

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/291155.html

標籤:其他

上一篇:前端基礎四之JavaScriptDOM與事件

下一篇:寶塔面板批量封IP---node.js增量式封鎖腳本(定時每日自動封新IP)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more